<?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>199544</bug_id>
          
          <creation_ts>2019-07-06 10:36:18 -0700</creation_ts>
          <short_desc>Layers visualization should show layer contents</short_desc>
          <delta_ts>2021-06-16 10:47:11 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>pangle</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>saam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1550630</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-07-06 10:36:18 -0700</bug_when>
    <thetext>The layers 3D view needs to show images of the layer contents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550661</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-07-06 12:54:44 -0700</bug_when>
    <thetext>&lt;rdar://problem/52729705&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550759</commentid>
    <comment_count>2</comment_count>
      <attachid>373615</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-07-07 21:36:52 -0700</bug_when>
    <thetext>Created attachment 373615
Non-working patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550760</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-07-07 21:37:32 -0700</bug_when>
    <thetext>I could not get the material texture stuff to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551597</commentid>
    <comment_count>4</comment_count>
      <attachid>373818</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-07-09 21:41:14 -0700</bug_when>
    <thetext>Created attachment 373818
Kinda working patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551598</commentid>
    <comment_count>5</comment_count>
      <attachid>373818</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-07-09 21:41:49 -0700</bug_when>
    <thetext>Comment on attachment 373818
Kinda working patch

This patch actually gets bits onto layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770229</commentid>
    <comment_count>6</comment_count>
      <attachid>431555</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2021-06-16 09:36:27 -0700</bug_when>
    <thetext>Created attachment 431555
WIP v0.1 - Rebase smfr patch, adjust texture UVs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770230</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-06-16 09:37:08 -0700</bug_when>
    <thetext>This patch modifies the inspector protocol. Please ensure that any frontend changes appropriately use feature checks for new protocol features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770271</commentid>
    <comment_count>8</comment_count>
      <attachid>431555</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-06-16 10:47:11 -0700</bug_when>
    <thetext>Comment on attachment 431555
WIP v0.1 - Rebase smfr patch, adjust texture UVs

View in context: https://bugs.webkit.org/attachment.cgi?id=431555&amp;action=review

&gt; Source/JavaScriptCore/inspector/protocol/LayerTree.json:112
&gt; +            &quot;name&quot;: &quot;imageForLayerContents&quot;,

Rather than having a separate command (which means we&apos;d have a new call-and-response for each layer), I wonder if it&apos;d be better to instead include a `{ &quot;name&quot;: &quot;content&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: true }` property inside `LayerTree.Layer` and have a `{ &quot;name&quot;: &quot;includeContent&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: true }` parameter for `LayerTree.layersForNode` so that we can instead just have a single command that has all the response in it.

I think there also may be a benefit of having a checkbox in the Layers Tab that controls whether image data is fetched (probably default enabled).  At least in the short term while evaluating the performance of this.

&gt; Source/WebCore/inspector/agents/InspectorLayerTreeAgent.cpp:348
&gt; +    return snapshot-&gt;toDataURL(&quot;image/png&quot;_s, std::nullopt, PreserveResolution::Yes);

I wonder if we should consider lowering the `quality`.  Maybe only if the performance is really bad.

&gt; Source/WebInspectorUI/UserInterface/Views/Layers3DContentView.js:297
&gt; +        layerGroup.add(this._createLayerMesh(layer.compositedBounds), this._createLayerMesh(layer.compositedBounds, true));

o_0 why?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373615</attachid>
            <date>2019-07-07 21:36:52 -0700</date>
            <delta_ts>2019-07-09 21:40:56 -0700</delta_ts>
            <desc>Non-working patch</desc>
            <filename>bug-199544-20190707213651.patch</filename>
            <type>text/plain</type>
            <size>9400</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3MjAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTFkZDA5ZDU0MmM2MWM5ZWYyNzI0Mzk0ZDU4NjI5OTIzZGYzZGMzLi5jZjYyMThjNmIxNzA2YjJl
OWRmNjdiMDgyZTg1OTJkMWU1ZDE0NmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxOS0wNy0wNyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxl
LmNvbT4KKworICAgICAgICBMYXllcnMgdmlzdWFsaXphdGlvbiBzaG91bGQgc2hvdyBsYXllciBj
b250ZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk5NTQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBpbnNwZWN0b3IvcHJvdG9jb2wvTGF5ZXJUcmVlLmpzb246CisKIDIwMTktMDctMDcgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgTGF5ZXIgdmlzdWFs
aXphdGlvbiBuZWVkcyB0byBzaG93IG1vcmUgZGF0YSBhYm91dCB0aGUgbGF5ZXJzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggMDJkYmVlMmI5MzkyNDgzYzY3ZjgyMjY3NTY1ZDRhMTM2MTYxZmY3My4uZGZkZWVkZjI3
ODhkNDI5ZDI1MWZmNGUyMmVlNDFjYWIwODE1NTAxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDE5LTA3LTA3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgor
CisgICAgICAgIExheWVycyB2aXN1YWxpemF0aW9uIHNob3VsZCBzaG93IGxheWVyIGNvbnRlbnRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTk1NDQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcg
dGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQ6OmltYWdlRm9yTGF5ZXJDb250ZW50cyk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JMYXllclRyZWVBZ2VudC5oOgorCiAyMDE5LTA3LTA3ICBTaW1vbiBGcmFzZXIgIDxz
aW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIExheWVyIHZpc3VhbGl6YXRpb24gbmVl
ZHMgdG8gc2hvdyBtb3JlIGRhdGEgYWJvdXQgdGhlIGxheWVycwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VM
b2cKaW5kZXggMWY0ZDA2OGVmMjkzMGNjZDYwMDNjNTFhMjU5OTdhOTc0NThhM2E3OC4uMjY2NGY1
NzdmMmQ0NWFjMTlhZWJmMzBiMWQ0OWQ4YzlhODYyN2YwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTktMDctMDcgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgTGF5ZXJzIHZpc3VhbGl6YXRpb24gc2hvdWxkIHNo
b3cgbGF5ZXIgY29udGVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5OTU0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9MYXllclRyZWVNYW5hZ2VyLmpz
OgorICAgICAgICAoV0kuTGF5ZXJUcmVlTWFuYWdlci5wcm90b3R5cGUuaW1hZ2VGb3JMYXllckNv
bnRlbnRzKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0xheWVyczNEQ29udGVudFZp
ZXcuanM6CisgICAgICAgIChXSS5MYXllcnMzRENvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRl
TGF5ZXJzKToKKyAgICAgICAgKFdJLkxheWVyczNEQ29udGVudFZpZXcucHJvdG90eXBlLl9jcmVh
dGVMYXllck1lc2gpOgorCiAyMDE5LTA3LTA3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIExheWVyIHZpc3VhbGl6YXRpb24gbmVlZHMgdG8gc2hvdyBt
b3JlIGRhdGEgYWJvdXQgdGhlIGxheWVycwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9wcm90b2NvbC9MYXllclRyZWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTGF5ZXJUcmVlLmpzb24KaW5kZXggZTljZmJmNGMwM2I2
MzU2M2I3ZmE0NDk3MTI0OWZlZGZmNDMxODZiNy4uYWE2ZGYxZWJjYjE2MmUwYTU5YTFiZjYwMGYz
MTRiMGZlY2Q1ZjA3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9MYXllclRyZWUuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3Byb3RvY29sL0xheWVyVHJlZS5qc29uCkBAIC0xMTgsNiArMTE4LDE2IEBACiAgICAg
ICAgICAgICAicmV0dXJucyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbXBvc2l0
aW5nUmVhc29ucyIsICIkcmVmIjogIkNvbXBvc2l0aW5nUmVhc29ucyIsICJkZXNjcmlwdGlvbiI6
ICJBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVhc29ucyB3aHkgdGhlIGxheWVyIHdhcyBjb21w
b3NpdGVkIGFzIHByb3BlcnRpZXMuIiB9CiAgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImltYWdlRm9yTGF5ZXJDb250ZW50cyIsCisgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiUHJvdmlkZXMgYW4gaW1hZ2Ugd2hpY2ggaXMgYSBzbmFw
c2hvdCBvZiB0aGUgbGF5ZXIgY29udGVudHMuIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjog
WworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibGF5ZXJJZCIsICIkcmVmIjogIkxheWVySWQi
LCAiZGVzY3JpcHRpb24iOiAiVGhlIGlkIG9mIHRoZSBsYXllciBmb3Igd2hpY2ggd2Ugd2FudCB0
byBnZXQgYW4gaW1hZ2UuIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpbWFnZSIsICJ0eXBlIjogInN0cmluZyIs
ICJkZXNjcmlwdGlvbiI6ICJCYXNlNjQtZW5jb2RlZCBkYXRhIG9mIHRoZSBsYXllciBjb250ZW50
cy4iIH0KKyAgICAgICAgICAgIF0KICAgICAgICAgfQogICAgIF0sCiAgICAgImV2ZW50cyI6IFsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JMYXllclRyZWVBZ2VudC5jcHAKaW5kZXggOTY0ZTNiYzcyYmQ4MGNmZjViMmI1OTE4MzNlNjc4
MDIxZDA4ZTJiYi4uOWFlMzUyYTkwNTFjYTQ2MjdmMTRiNWU1MTI0OWI0Nzk0MDU3MDI0OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXllclRy
ZWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JMYXllclRyZWVBZ2VudC5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oIgogCisjaW5jbHVkZSAiRnJh
bWVTbmFwc2hvdHRpbmcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIklu
c3BlY3RvckRPTUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKQEAgLTM1MCw2ICszNTIsMzEgQEAgdm9pZCBJbnNwZWN0b3JMYXll
clRyZWVBZ2VudDo6cmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW4KICAgICBjb21wb3NpdGluZ1JlYXNvbnNSZXN1bHQgPSBXVEZNb3ZlKGNvbXBvc2l0aW5n
UmVhc29ucyk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmltYWdlRm9yTGF5
ZXJDb250ZW50cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgbGF5ZXJJ
ZCwgU3RyaW5nKiBvdXREYXRhVVJMKQoreworICAgIGNvbnN0IFJlbmRlckxheWVyKiByZW5kZXJM
YXllciA9IG1faWRUb0xheWVyLmdldChsYXllcklkKTsKKworICAgIGlmICghcmVuZGVyTGF5ZXIp
IHsKKyAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQgbm90IGZpbmQgYSBib3VuZCBsYXllciBm
b3IgdGhlIHByb3ZpZGVkIGlkIl9zOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9ICZyZW5kZXJMYXllci0+cmVuZGVyZXIoKTsKKyAgICBOb2Rl
KiBub2RlID0gcmVuZGVyZXItPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgZXJy
b3JTdHJpbmcgPSAiQ291bGQgbm90IGdldCB0aGUgbGF5ZXJzJ3Mgbm9kZSJfczsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGF1dG8gc25hcHNob3QgPSBXZWJDb3JlOjpzbmFwc2hvdE5v
ZGUocmVuZGVyZXItPmZyYW1lKCksICpub2RlKTsKKyAgICBpZiAoIXNuYXBzaG90KSB7CisgICAg
ICAgIGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBjYXB0dXJlIHNuYXBzaG90Il9zOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgKm91dERhdGFVUkwgPSBzbmFwc2hvdC0+dG9EYXRhVVJM
KCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwor
fQorCiBTdHJpbmcgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJpbmQoY29uc3QgUmVuZGVyTGF5
ZXIqIGxheWVyKQogewogICAgIGlmICghbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmgKaW5kZXggY2Rm
YTE0ZTc0MTA2ZTExZTY1OWZhODEzOTc3YTVmYTc3OWMxNzE2Yi4uMzM3YmQxZjcxYmIzYWMyNzU5
ZWRhNjUxYmIwYTJmZTdkNGMzOTM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaApAQCAtNjUsNiArNjUs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBsYXllcnNGb3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+Jikgb3Zl
cnJpZGU7CiAgICAgdm9pZCByZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgbGF5ZXJJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVy
VHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zPiYpIG92ZXJyaWRlOworICAgIHZvaWQgaW1hZ2VGb3JM
YXllckNvbnRlbnRzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBsYXllcklkLCBTdHJpbmcq
KSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICAvLyBSZW5kZXJMYXllci1yZWxhdGVkIG1ldGhv
ZHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250
cm9sbGVycy9MYXllclRyZWVNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvTGF5ZXJUcmVlTWFuYWdlci5qcwppbmRleCAxN2UxYWQ1OWE3
YTEwMmY2NDkwZGJiYjVmMzc1MjJiM2U1YzQ2NDYzLi4yMmMzOGI0ODk1Mzk4ZDRjYmJiM2E1ZTBl
NmMwZmJjOGY0NzNkYjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Db250cm9sbGVycy9MYXllclRyZWVNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0xheWVyVHJlZU1hbmFnZXIuanMK
QEAgLTkwLDYgKzkwLDE1IEBAIFdJLkxheWVyVHJlZU1hbmFnZXIgPSBjbGFzcyBMYXllclRyZWVN
YW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIH0pOwogICAgIH0KIAorICAgIGltYWdl
Rm9yTGF5ZXJDb250ZW50cyhsYXllciwgY2FsbGJhY2spCisgICAgeworICAgICAgICBjb25zb2xl
LmFzc2VydCh0aGlzLnN1cHBvcnRlZCk7CisKKyAgICAgICAgTGF5ZXJUcmVlQWdlbnQuaW1hZ2VG
b3JMYXllckNvbnRlbnRzKGxheWVyLmxheWVySWQsIGZ1bmN0aW9uKGVycm9yLCBpbWFnZSkgewor
ICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IgPyAwIDogaW1hZ2UpOworICAgICAgICB9KTsKKyAg
ICB9CisKICAgICBsYXllclRyZWVEaWRDaGFuZ2UoKQogICAgIHsKICAgICAgICAgdGhpcy5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuTGF5ZXJUcmVlTWFuYWdlci5FdmVudC5MYXllclRyZWVE
aWRDaGFuZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvTGF5ZXJzM0RDb250ZW50Vmlldy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1ZpZXdzL0xheWVyczNEQ29udGVudFZpZXcuanMKaW5kZXggYzkyM2QwMmNl
ZmU4ODM2NmVlYjRlM2NkNjA4YzQ5NGNjNGRlMjIzNS4uMGE1ZTJjNjY1YjBjMzhjYjNlNDMxMTcy
MGI3M2E4YTFkNDU2ZDcwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvTGF5ZXJzM0RDb250ZW50Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9MYXllcnMzRENvbnRlbnRWaWV3LmpzCkBAIC0y
NjcsNiArMjY3LDIyIEBAIFdJLkxheWVyczNEQ29udGVudFZpZXcgPSBjbGFzcyBMYXllcnMzRENv
bnRlbnRWaWV3IGV4dGVuZHMgV0kuQ29udGVudFZpZXcKICAgICAgICAgICAgIGxheWVyR3JvdXAu
cG9zaXRpb24uc2V0KGxheWVyLmJvdW5kcy54LCAtbGF5ZXIuYm91bmRzLnksIGluZGV4ICogeklu
dGVydmFsKTsKICAgICAgICAgfSk7CiAKKyAgICAgICAgbmV3TGF5ZXJzLmZvckVhY2goKGxheWVy
KSA9PiB7CisgICAgICAgICAgICBXSS5sYXllclRyZWVNYW5hZ2VyLmltYWdlRm9yTGF5ZXJDb250
ZW50cyhsYXllciwgKGRhdGFVUkkpID0+IHsKKworICAgICAgICAgICAgICAgIGxldCBsYXllckdy
b3VwID0gdGhpcy5fbGF5ZXJHcm91cHNCeUlkLmdldChsYXllci5sYXllcklkKTsKKyAgICAgICAg
ICAgICAgICBsZXQgW3BsYW5lLCBvdXRsaW5lXSA9IGxheWVyR3JvdXAuY2hpbGRyZW47CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbGV0IHRleHR1cmVJbWFnZSA9IG5ldyBJbWFn
ZSgpOworICAgICAgICAgICAgICAgIHRleHR1cmVJbWFnZS5vbmxvYWQgPSAoKSA9PiB7CisgICAg
ICAgICAgICAgICAgICAgIHBsYW5lLm1hdGVyaWFsLm1hcC5pbWFnZSA9IHRleHR1cmVJbWFnZTsK
KyAgICAgICAgICAgICAgICAgICAgcGxhbmUubWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgdGV4dHVyZUltYWdlLnNyYyA9IGRh
dGFVUkk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICB9KTsKKwogICAgICAgICB0aGlzLl9i
b3VuZGluZ0JveC5zZXRGcm9tT2JqZWN0KHRoaXMuX3NjZW5lKTsKICAgICAgICAgdGhpcy5fY29u
dHJvbHMubWF4RGlzdGFuY2UgPSB0aGlzLl9ib3VuZGluZ0JveC5tYXgueiArIFdJLkxheWVyczNE
Q29udGVudFZpZXcuX3pQYWRkaW5nOwogCkBAIC0yOTEsNyArMzA3LDcgQEAgV0kuTGF5ZXJzM0RD
b250ZW50VmlldyA9IGNsYXNzIExheWVyczNEQ29udGVudFZpZXcgZXh0ZW5kcyBXSS5Db250ZW50
VmlldwogICAgICAgICAgICAgbmV3IFRIUkVFLlZlY3RvcjMod2lkdGgsIC1oZWlnaHQsIDApLAog
ICAgICAgICAgICAgbmV3IFRIUkVFLlZlY3RvcjMod2lkdGgsIDAsICAgICAgIDApLAogICAgICAg
ICApOwotICAgICAgICAKKwogICAgICAgICBsZXQgbGF5ZXJDb2xvcnMgPSB0aGlzLl9jb2xvcnNG
b3JMYXllcihsYXllcik7CiAgICAgICAgIGlmIChpc091dGxpbmUpIHsKICAgICAgICAgICAgIGxl
dCBtYXRlcmlhbCA9IG5ldyBUSFJFRS5MaW5lQmFzaWNNYXRlcmlhbCh7CkBAIC0zMDQsMTMgKzMy
MCwyNyBAQCBXSS5MYXllcnMzRENvbnRlbnRWaWV3ID0gY2xhc3MgTGF5ZXJzM0RDb250ZW50Vmll
dyBleHRlbmRzIFdJLkNvbnRlbnRWaWV3CiAKICAgICAgICAgZ2VvbWV0cnkuZmFjZXMucHVzaChu
ZXcgVEhSRUUuRmFjZTMoMCwgMSwgMyksIG5ldyBUSFJFRS5GYWNlMygxLCAyLCAzKSk7CiAKKyAg
ICAgICAgbGV0IHRleHR1cmUgPSBuZXcgVEhSRUUuVGV4dHVyZSgpOwogICAgICAgICBsZXQgbWF0
ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoewogICAgICAgICAgICAgY29sb3I6
IGxheWVyQ29sb3JzLmZpbGwsCiAgICAgICAgICAgICBvcGFjaXR5OiBsYXllckNvbG9ycy5maWxs
T3BhY2l0eSwKKyAgICAgICAgICAgIG1hcDogdGV4dHVyZSwKICAgICAgICAgICAgIHRyYW5zcGFy
ZW50OiB0cnVlLAogICAgICAgICAgICAgc2lkZTogVEhSRUUuRG91YmxlU2lkZSwKICAgICAgICAg
ICAgIGRlcHRoV3JpdGU6IGZhbHNlLAogICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGdl
b21ldHJ5LmZhY2VWZXJ0ZXhVdnNbMF0ucHVzaChbCisgICAgICAgICAgICBuZXcgVEhSRUUuVmVj
dG9yMigwLCAwLjApLAorICAgICAgICAgICAgbmV3IFRIUkVFLlZlY3RvcjIoMCwgMC4xKSwKKyAg
ICAgICAgICAgIG5ldyBUSFJFRS5WZWN0b3IyKDEsIDEpLAorICAgICAgICBdKTsKKworICAgICAg
ICBnZW9tZXRyeS5mYWNlVmVydGV4VXZzWzBdLnB1c2goWworICAgICAgICAgICAgbmV3IFRIUkVF
LlZlY3RvcjIoMCwgMCksCisgICAgICAgICAgICBuZXcgVEhSRUUuVmVjdG9yMigxLCAxKSwKKyAg
ICAgICAgICAgIG5ldyBUSFJFRS5WZWN0b3IyKDEsIDApLAorICAgICAgICBdKTsKIAogICAgICAg
ICByZXR1cm4gbmV3IFRIUkVFLk1lc2goZ2VvbWV0cnksIG1hdGVyaWFsKTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373818</attachid>
            <date>2019-07-09 21:41:14 -0700</date>
            <delta_ts>2021-06-16 09:36:26 -0700</delta_ts>
            <desc>Kinda working patch</desc>
            <filename>bug-199544-20190709214057.patch</filename>
            <type>text/plain</type>
            <size>1660093</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3MjAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
MmFkYTRmOTIzZTE1MzhkNWYxYTA0ZGE2NGJmNDUxMWU4NDEyY2MyLi44ZmM1MzNmMGIwNDY4YmZl
OWQ0MTY2ZWZkMDNhMGZmNzNjMWU0ODZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxOS0wNy0wNyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxl
LmNvbT4KKworICAgICAgICBMYXllcnMgdmlzdWFsaXphdGlvbiBzaG91bGQgc2hvdyBsYXllciBj
b250ZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk5NTQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBpbnNwZWN0b3IvcHJvdG9jb2wvTGF5ZXJUcmVlLmpzb246CisKIDIwMTktMDctMDcgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgTGF5ZXIgdmlzdWFs
aXphdGlvbiBuZWVkcyB0byBzaG93IG1vcmUgZGF0YSBhYm91dCB0aGUgbGF5ZXJzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggNjI2MTk0MmJjNTFhZGE4Zjk1MTQxYTMzNDdmNDYxMDQ3NjU5YjkwMS4uMDRhNTcxYzk0
MDY2NmU5Y2U0NjI5N2UyOGI4MTk1MzMzMmUxNWU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDE5LTA3LTA3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgor
CisgICAgICAgIExheWVycyB2aXN1YWxpemF0aW9uIHNob3VsZCBzaG93IGxheWVyIGNvbnRlbnRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTk1NDQK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcg
dGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQ6OmltYWdlRm9yTGF5ZXJDb250ZW50cyk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JMYXllclRyZWVBZ2VudC5oOgorCiAyMDE5LTA3LTA3ICBTaW1vbiBGcmFzZXIgIDxz
aW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIExheWVyIHZpc3VhbGl6YXRpb24gbmVl
ZHMgdG8gc2hvdyBtb3JlIGRhdGEgYWJvdXQgdGhlIGxheWVycwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VM
b2cKaW5kZXggYWI0YjMyYmViMTU3MDQwYjljYzQ4ZjBjY2I1MjkxMWEzNWMyMDgwNC4uOTQ5MjQ4
MGI4MmY2NmVhMThkNDM0ZWFjN2JmZjM5NGY2YTU2YmE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTktMDctMDcgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgTGF5ZXJzIHZpc3VhbGl6YXRpb24gc2hvdWxkIHNo
b3cgbGF5ZXIgY29udGVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5OTU0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9MYXllclRyZWVNYW5hZ2VyLmpz
OgorICAgICAgICAoV0kuTGF5ZXJUcmVlTWFuYWdlci5wcm90b3R5cGUuaW1hZ2VGb3JMYXllckNv
bnRlbnRzKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0xheWVyczNEQ29udGVudFZp
ZXcuanM6CisgICAgICAgIChXSS5MYXllcnMzRENvbnRlbnRWaWV3LnByb3RvdHlwZS5fdXBkYXRl
TGF5ZXJzKToKKyAgICAgICAgKFdJLkxheWVyczNEQ29udGVudFZpZXcucHJvdG90eXBlLl9jcmVh
dGVMYXllck1lc2gpOgorCiAyMDE5LTA3LTA3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIExheWVyIHZpc3VhbGl6YXRpb24gbmVlZHMgdG8gc2hvdyBt
b3JlIGRhdGEgYWJvdXQgdGhlIGxheWVycwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9wcm90b2NvbC9MYXllclRyZWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTGF5ZXJUcmVlLmpzb24KaW5kZXggZDBlNzEzMjMzZTdl
ZmU3MGViZDBkZDRiMjUzNWY2MTAzOWRkZTUzYS4uOGJlMjU2Y2RkYTM2NmI0NWI5ZDQ2Y2Q1ZDA0
MDVkODA2ZWRmZjgxNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9MYXllclRyZWUuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3Byb3RvY29sL0xheWVyVHJlZS5qc29uCkBAIC0xMTAsNiArMTEwLDE2IEBACiAgICAg
ICAgICAgICAicmV0dXJucyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbXBvc2l0
aW5nUmVhc29ucyIsICIkcmVmIjogIkNvbXBvc2l0aW5nUmVhc29ucyIsICJkZXNjcmlwdGlvbiI6
ICJBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVhc29ucyB3aHkgdGhlIGxheWVyIHdhcyBjb21w
b3NpdGVkIGFzIHByb3BlcnRpZXMuIiB9CiAgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImltYWdlRm9yTGF5ZXJDb250ZW50cyIsCisgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiUHJvdmlkZXMgYW4gaW1hZ2Ugd2hpY2ggaXMgYSBzbmFw
c2hvdCBvZiB0aGUgbGF5ZXIgY29udGVudHMuIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjog
WworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibGF5ZXJJZCIsICIkcmVmIjogIkxheWVySWQi
LCAiZGVzY3JpcHRpb24iOiAiVGhlIGlkIG9mIHRoZSBsYXllciBmb3Igd2hpY2ggd2Ugd2FudCB0
byBnZXQgYW4gaW1hZ2UuIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpbWFnZSIsICJ0eXBlIjogInN0cmluZyIs
ICJkZXNjcmlwdGlvbiI6ICJCYXNlNjQtZW5jb2RlZCBkYXRhIG9mIHRoZSBsYXllciBjb250ZW50
cy4iIH0KKyAgICAgICAgICAgIF0KICAgICAgICAgfQogICAgIF0sCiAgICAgImV2ZW50cyI6IFsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JMYXllclRyZWVBZ2VudC5jcHAKaW5kZXggNjE4MWY3MWNkOTJlZjEyY2M3NDljY2ExMzQzZTVh
Njc2OTNmOTE3Zi4uNWVhZmVkNTZlZTVhNzQ4NzQ5OTRhMjkxOTIwMTQyOTI1NGJmODYyNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXllclRy
ZWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JMYXllclRyZWVBZ2VudC5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oIgogCisjaW5jbHVkZSAiRnJh
bWVTbmFwc2hvdHRpbmcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIklu
c3BlY3RvckRPTUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKQEAgLTM0Nyw2ICszNDksMzEgQEAgdm9pZCBJbnNwZWN0b3JMYXll
clRyZWVBZ2VudDo6cmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW4KICAgICBjb21wb3NpdGluZ1JlYXNvbnNSZXN1bHQgPSBXVEZNb3ZlKGNvbXBvc2l0aW5n
UmVhc29ucyk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmltYWdlRm9yTGF5
ZXJDb250ZW50cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgbGF5ZXJJ
ZCwgU3RyaW5nKiBvdXREYXRhVVJMKQoreworICAgIGNvbnN0IFJlbmRlckxheWVyKiByZW5kZXJM
YXllciA9IG1faWRUb0xheWVyLmdldChsYXllcklkKTsKKworICAgIGlmICghcmVuZGVyTGF5ZXIp
IHsKKyAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQgbm90IGZpbmQgYSBib3VuZCBsYXllciBm
b3IgdGhlIHByb3ZpZGVkIGlkIl9zOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9ICZyZW5kZXJMYXllci0+cmVuZGVyZXIoKTsKKyAgICBOb2Rl
KiBub2RlID0gcmVuZGVyZXItPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgZXJy
b3JTdHJpbmcgPSAiQ291bGQgbm90IGdldCB0aGUgbGF5ZXJzJ3Mgbm9kZSJfczsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGF1dG8gc25hcHNob3QgPSBXZWJDb3JlOjpzbmFwc2hvdE5v
ZGUocmVuZGVyZXItPmZyYW1lKCksICpub2RlKTsKKyAgICBpZiAoIXNuYXBzaG90KSB7CisgICAg
ICAgIGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBjYXB0dXJlIHNuYXBzaG90Il9zOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgKm91dERhdGFVUkwgPSBzbmFwc2hvdC0+dG9EYXRhVVJM
KCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwor
fQorCiBTdHJpbmcgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJpbmQoY29uc3QgUmVuZGVyTGF5
ZXIqIGxheWVyKQogewogICAgIGlmICghbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmgKaW5kZXggYzM5
YjBmNjQ3ZTFlY2VmZDQ0MDRjMmMxMjk4NzdiY2YxZGJhMWViYi4uMmQyYTE5MjY2YTI5NDE5ZjFl
OThmZjE0OWI2OWQ0NGU5MmU3ZWM3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaApAQCAtNjUsNiArNjUs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBsYXllcnNGb3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+Jikgb3Zl
cnJpZGU7CiAgICAgdm9pZCByZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgbGF5ZXJJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVy
VHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zPiYpIG92ZXJyaWRlOworICAgIHZvaWQgaW1hZ2VGb3JM
YXllckNvbnRlbnRzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBsYXllcklkLCBTdHJpbmcq
KSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICAvLyBSZW5kZXJMYXllci1yZWxhdGVkIG1ldGhv
ZHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250
cm9sbGVycy9MYXllclRyZWVNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvTGF5ZXJUcmVlTWFuYWdlci5qcwppbmRleCAxN2UxYWQ1OWE3
YTEwMmY2NDkwZGJiYjVmMzc1MjJiM2U1YzQ2NDYzLi4yMmMzOGI0ODk1Mzk4ZDRjYmJiM2E1ZTBl
NmMwZmJjOGY0NzNkYjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Db250cm9sbGVycy9MYXllclRyZWVNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0xheWVyVHJlZU1hbmFnZXIuanMK
QEAgLTkwLDYgKzkwLDE1IEBAIFdJLkxheWVyVHJlZU1hbmFnZXIgPSBjbGFzcyBMYXllclRyZWVN
YW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIH0pOwogICAgIH0KIAorICAgIGltYWdl
Rm9yTGF5ZXJDb250ZW50cyhsYXllciwgY2FsbGJhY2spCisgICAgeworICAgICAgICBjb25zb2xl
LmFzc2VydCh0aGlzLnN1cHBvcnRlZCk7CisKKyAgICAgICAgTGF5ZXJUcmVlQWdlbnQuaW1hZ2VG
b3JMYXllckNvbnRlbnRzKGxheWVyLmxheWVySWQsIGZ1bmN0aW9uKGVycm9yLCBpbWFnZSkgewor
ICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IgPyAwIDogaW1hZ2UpOworICAgICAgICB9KTsKKyAg
ICB9CisKICAgICBsYXllclRyZWVEaWRDaGFuZ2UoKQogICAgIHsKICAgICAgICAgdGhpcy5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuTGF5ZXJUcmVlTWFuYWdlci5FdmVudC5MYXllclRyZWVE
aWRDaGFuZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvRXh0ZXJuYWwvdGhyZWUuanMvdGhyZWUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9FeHRlcm5hbC90aHJlZS5qcy90aHJlZS5qcwppbmRleCBiMTMzZjZkZmEyODVh
Y2YzNzI2OWMzN2M3YjEyMDRhN2FkN2JlOTdkLi45NDU4NmYzZjFjZWZhOWY0ZGI5N2VmMTQ0YTg4
YWM0ZTUzMjgyNmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9FeHRlcm5hbC90aHJlZS5qcy90aHJlZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC90aHJlZS5qcy90aHJlZS5qcwpAQCAtMSw4ICsxLDgg
QEAKIChmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7CiAgICAgdHlwZW9mIGV4cG9ydHMgPT09
ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBv
cnRzKSA6CiAgICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8g
ZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6Ci0gICAgKGZhY3RvcnkoKGdsb2JhbC5USFJF
RSA9IHt9KSkpOwotfSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnOwor
ICAgIChnbG9iYWwgPSBnbG9iYWwgfHwgc2VsZiwgZmFjdG9yeShnbG9iYWwuVEhSRUUgPSB7fSkp
OworfSh0aGlzLCBmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7CiAKICAgICAvLyBQ
b2x5ZmlsbHMKIApAQCAtMTg1LDcgKzE4NSw3IEBACiAKICAgICB9ICk7CiAKLSAgICB2YXIgUkVW
SVNJT04gPSAnOTQnOworICAgIHZhciBSRVZJU0lPTiA9ICcxMDYnOwogICAgIHZhciBNT1VTRSA9
IHsgTEVGVDogMCwgTUlERExFOiAxLCBSSUdIVDogMiB9OwogICAgIHZhciBDdWxsRmFjZU5vbmUg
PSAwOwogICAgIHZhciBDdWxsRmFjZUJhY2sgPSAxOwpAQCAtMjQyLDYgKzI0Miw4IEBACiAgICAg
dmFyIFJlaW5oYXJkVG9uZU1hcHBpbmcgPSAyOwogICAgIHZhciBVbmNoYXJ0ZWQyVG9uZU1hcHBp
bmcgPSAzOwogICAgIHZhciBDaW5lb25Ub25lTWFwcGluZyA9IDQ7CisgICAgdmFyIEFDRVNGaWxt
aWNUb25lTWFwcGluZyA9IDU7CisKICAgICB2YXIgVVZNYXBwaW5nID0gMzAwOwogICAgIHZhciBD
dWJlUmVmbGVjdGlvbk1hcHBpbmcgPSAzMDE7CiAgICAgdmFyIEN1YmVSZWZyYWN0aW9uTWFwcGlu
ZyA9IDMwMjsKQEAgLTI3OSw2ICsyODEsNyBAQAogICAgIHZhciBSR0JFRm9ybWF0ID0gUkdCQUZv
cm1hdDsKICAgICB2YXIgRGVwdGhGb3JtYXQgPSAxMDI2OwogICAgIHZhciBEZXB0aFN0ZW5jaWxG
b3JtYXQgPSAxMDI3OworICAgIHZhciBSZWRGb3JtYXQgPSAxMDI4OwogICAgIHZhciBSR0JfUzNU
Q19EWFQxX0Zvcm1hdCA9IDMzNzc2OwogICAgIHZhciBSR0JBX1MzVENfRFhUMV9Gb3JtYXQgPSAz
Mzc3NzsKICAgICB2YXIgUkdCQV9TM1RDX0RYVDNfRm9ybWF0ID0gMzM3Nzg7CkBAIC03NTgsMjEg
Kzc2MSwxNCBAQAogCiAgICAgICAgIH0sCiAKLSAgICAgICAgY2xhbXBTY2FsYXI6IGZ1bmN0aW9u
ICgpIHsKLQotICAgICAgICAgICAgdmFyIG1pbiA9IG5ldyBWZWN0b3IyKCk7Ci0gICAgICAgICAg
ICB2YXIgbWF4ID0gbmV3IFZlY3RvcjIoKTsKLQotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
IGNsYW1wU2NhbGFyKCBtaW5WYWwsIG1heFZhbCApIHsKLQotICAgICAgICAgICAgICAgIG1pbi5z
ZXQoIG1pblZhbCwgbWluVmFsICk7Ci0gICAgICAgICAgICAgICAgbWF4LnNldCggbWF4VmFsLCBt
YXhWYWwgKTsKKyAgICAgICAgY2xhbXBTY2FsYXI6IGZ1bmN0aW9uICggbWluVmFsLCBtYXhWYWwg
KSB7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGFtcCggbWluLCBtYXggKTsKKyAg
ICAgICAgICAgIHRoaXMueCA9IE1hdGgubWF4KCBtaW5WYWwsIE1hdGgubWluKCBtYXhWYWwsIHRo
aXMueCApICk7CisgICAgICAgICAgICB0aGlzLnkgPSBNYXRoLm1heCggbWluVmFsLCBNYXRoLm1p
biggbWF4VmFsLCB0aGlzLnkgKSApOwogCi0gICAgICAgICAgICB9OworICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CiAKLSAgICAgICAgfSgpLAorICAgICAgICB9LAogCiAgICAgICAgIGNsYW1wTGVu
Z3RoOiBmdW5jdGlvbiAoIG1pbiwgbWF4ICkgewogCkBAIC04MzMsNiArODI5LDEyIEBACiAKICAg
ICAgICAgfSwKIAorICAgICAgICBjcm9zczogZnVuY3Rpb24gKCB2ICkgeworCisgICAgICAgICAg
ICByZXR1cm4gdGhpcy54ICogdi55IC0gdGhpcy55ICogdi54OworCisgICAgICAgIH0sCisKICAg
ICAgICAgbGVuZ3RoU3E6IGZ1bmN0aW9uICgpIHsKIAogICAgICAgICAgICAgcmV0dXJuIHRoaXMu
eCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueTsKQEAgLTk3MCwzODU3ICs5NzIsMzgwMSBAQAog
ICAgIH0gKTsKIAogICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9v
Yi5jb20vCi0gICAgICogQGF1dGhvciBzdXBlcmVnZ2JlcnQgLyBodHRwOi8vd3d3LnBhdWxicnVu
dC5jby51ay8KLSAgICAgKiBAYXV0aG9yIHBoaWxvZ2IgLyBodHRwOi8vYmxvZy50aGVqaXQub3Jn
LwotICAgICAqIEBhdXRob3Igam9yZGlfcm9zIC8gaHR0cDovL3BsYXR0c29mdC5jb20KLSAgICAg
KiBAYXV0aG9yIEQxcGxvMWQgLyBodHRwOi8vZ2l0aHViLmNvbS9EMXBsbzFkCi0gICAgICogQGF1
dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KICAgICAgKiBAYXV0aG9y
IG1pa2FlbCBlbXRpbmdlciAvIGh0dHA6Ly9nb21vLnNlLwotICAgICAqIEBhdXRob3IgdGlta25p
cCAvIGh0dHA6Ly93d3cuZmxvb3JwbGFubmVyLmNvbS8KLSAgICAgKiBAYXV0aG9yIGJob3VzdG9u
IC8gaHR0cDovL2NsYXJhLmlvCisgICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRl
cmVkcXVhbGlhLmNvbS8KICAgICAgKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1
Yi5jb20vV2VzdExhbmdsZXkKKyAgICAgKiBAYXV0aG9yIGJob3VzdG9uIC8gaHR0cDovL2NsYXJh
LmlvCiAgICAgICovCiAKLSAgICBmdW5jdGlvbiBNYXRyaXg0KCkgeworICAgIGZ1bmN0aW9uIFF1
YXRlcm5pb24oIHgsIHksIHosIHcgKSB7CiAKLSAgICAgICAgdGhpcy5lbGVtZW50cyA9IFsKKyAg
ICAgICAgdGhpcy5feCA9IHggfHwgMDsKKyAgICAgICAgdGhpcy5feSA9IHkgfHwgMDsKKyAgICAg
ICAgdGhpcy5feiA9IHogfHwgMDsKKyAgICAgICAgdGhpcy5fdyA9ICggdyAhPT0gdW5kZWZpbmVk
ICkgPyB3IDogMTsKIAotICAgICAgICAgICAgMSwgMCwgMCwgMCwKLSAgICAgICAgICAgIDAsIDEs
IDAsIDAsCi0gICAgICAgICAgICAwLCAwLCAxLCAwLAotICAgICAgICAgICAgMCwgMCwgMCwgMQor
ICAgIH0KIAotICAgICAgICBdOworICAgIE9iamVjdC5hc3NpZ24oIFF1YXRlcm5pb24sIHsKIAot
ICAgICAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGggPiAwICkgeworICAgICAgICBzbGVycDogZnVu
Y3Rpb24gKCBxYSwgcWIsIHFtLCB0ICkgewogCi0gICAgICAgICAgICBjb25zb2xlLmVycm9yKCAn
VEhSRUUuTWF0cml4NDogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMu
IHVzZSAuc2V0KCkgaW5zdGVhZC4nICk7CisgICAgICAgICAgICByZXR1cm4gcW0uY29weSggcWEg
KS5zbGVycCggcWIsIHQgKTsKIAotICAgICAgICB9CisgICAgICAgIH0sCiAKLSAgICB9CisgICAg
ICAgIHNsZXJwRmxhdDogZnVuY3Rpb24gKCBkc3QsIGRzdE9mZnNldCwgc3JjMCwgc3JjT2Zmc2V0
MCwgc3JjMSwgc3JjT2Zmc2V0MSwgdCApIHsKIAotICAgIE9iamVjdC5hc3NpZ24oIE1hdHJpeDQu
cHJvdG90eXBlLCB7CisgICAgICAgICAgICAvLyBmdXp6LWZyZWUsIGFycmF5LWJhc2VkIFF1YXRl
cm5pb24gU0xFUlAgb3BlcmF0aW9uCiAKLSAgICAgICAgaXNNYXRyaXg0OiB0cnVlLAorICAgICAg
ICAgICAgdmFyIHgwID0gc3JjMFsgc3JjT2Zmc2V0MCArIDAgXSwKKyAgICAgICAgICAgICAgICB5
MCA9IHNyYzBbIHNyY09mZnNldDAgKyAxIF0sCisgICAgICAgICAgICAgICAgejAgPSBzcmMwWyBz
cmNPZmZzZXQwICsgMiBdLAorICAgICAgICAgICAgICAgIHcwID0gc3JjMFsgc3JjT2Zmc2V0MCAr
IDMgXSwKIAotICAgICAgICBzZXQ6IGZ1bmN0aW9uICggbjExLCBuMTIsIG4xMywgbjE0LCBuMjEs
IG4yMiwgbjIzLCBuMjQsIG4zMSwgbjMyLCBuMzMsIG4zNCwgbjQxLCBuNDIsIG40MywgbjQ0ICkg
eworICAgICAgICAgICAgICAgIHgxID0gc3JjMVsgc3JjT2Zmc2V0MSArIDAgXSwKKyAgICAgICAg
ICAgICAgICB5MSA9IHNyYzFbIHNyY09mZnNldDEgKyAxIF0sCisgICAgICAgICAgICAgICAgejEg
PSBzcmMxWyBzcmNPZmZzZXQxICsgMiBdLAorICAgICAgICAgICAgICAgIHcxID0gc3JjMVsgc3Jj
T2Zmc2V0MSArIDMgXTsKIAotICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKKyAg
ICAgICAgICAgIGlmICggdzAgIT09IHcxIHx8IHgwICE9PSB4MSB8fCB5MCAhPT0geTEgfHwgejAg
IT09IHoxICkgewogCi0gICAgICAgICAgICB0ZVsgMCBdID0gbjExOyB0ZVsgNCBdID0gbjEyOyB0
ZVsgOCBdID0gbjEzOyB0ZVsgMTIgXSA9IG4xNDsKLSAgICAgICAgICAgIHRlWyAxIF0gPSBuMjE7
IHRlWyA1IF0gPSBuMjI7IHRlWyA5IF0gPSBuMjM7IHRlWyAxMyBdID0gbjI0OwotICAgICAgICAg
ICAgdGVbIDIgXSA9IG4zMTsgdGVbIDYgXSA9IG4zMjsgdGVbIDEwIF0gPSBuMzM7IHRlWyAxNCBd
ID0gbjM0OwotICAgICAgICAgICAgdGVbIDMgXSA9IG40MTsgdGVbIDcgXSA9IG40MjsgdGVbIDEx
IF0gPSBuNDM7IHRlWyAxNSBdID0gbjQ0OworICAgICAgICAgICAgICAgIHZhciBzID0gMSAtIHQs
CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgICAgICBjb3MgPSB4
MCAqIHgxICsgeTAgKiB5MSArIHowICogejEgKyB3MCAqIHcxLAogCi0gICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgICAgIGRpciA9ICggY29zID49IDAgPyAxIDogLSAxICksCisgICAgICAgICAg
ICAgICAgICAgIHNxclNpbiA9IDEgLSBjb3MgKiBjb3M7CiAKLSAgICAgICAgaWRlbnRpdHk6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAvLyBTa2lwIHRoZSBTbGVycCBmb3IgdGlueSBz
dGVwcyB0byBhdm9pZCBudW1lcmljIHByb2JsZW1zOgorICAgICAgICAgICAgICAgIGlmICggc3Fy
U2luID4gTnVtYmVyLkVQU0lMT04gKSB7CiAKLSAgICAgICAgICAgIHRoaXMuc2V0KAorICAgICAg
ICAgICAgICAgICAgICB2YXIgc2luID0gTWF0aC5zcXJ0KCBzcXJTaW4gKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxlbiA9IE1hdGguYXRhbjIoIHNpbiwgY29zICogZGlyICk7CiAKLSAgICAg
ICAgICAgICAgICAxLCAwLCAwLCAwLAotICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAsCi0gICAg
ICAgICAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgICAgICAgICAwLCAwLCAwLCAxCisgICAg
ICAgICAgICAgICAgICAgIHMgPSBNYXRoLnNpbiggcyAqIGxlbiApIC8gc2luOworICAgICAgICAg
ICAgICAgICAgICB0ID0gTWF0aC5zaW4oIHQgKiBsZW4gKSAvIHNpbjsKIAotICAgICAgICAgICAg
KTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICAgICAgICAgIHZhciB0RGlyID0gdCAqIGRpcjsKIAotICAgICAgICB9LAorICAgICAgICAgICAg
ICAgIHgwID0geDAgKiBzICsgeDEgKiB0RGlyOworICAgICAgICAgICAgICAgIHkwID0geTAgKiBz
ICsgeTEgKiB0RGlyOworICAgICAgICAgICAgICAgIHowID0gejAgKiBzICsgejEgKiB0RGlyOwor
ICAgICAgICAgICAgICAgIHcwID0gdzAgKiBzICsgdzEgKiB0RGlyOwogCi0gICAgICAgIGNsb25l
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplIGluIGNhc2Ugd2Ug
anVzdCBkaWQgYSBsZXJwOgorICAgICAgICAgICAgICAgIGlmICggcyA9PT0gMSAtIHQgKSB7CiAK
LSAgICAgICAgICAgIHJldHVybiBuZXcgTWF0cml4NCgpLmZyb21BcnJheSggdGhpcy5lbGVtZW50
cyApOworICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IDEgLyBNYXRoLnNxcnQoIHgwICogeDAg
KyB5MCAqIHkwICsgejAgKiB6MCArIHcwICogdzAgKTsKIAotICAgICAgICB9LAorICAgICAgICAg
ICAgICAgICAgICB4MCAqPSBmOworICAgICAgICAgICAgICAgICAgICB5MCAqPSBmOworICAgICAg
ICAgICAgICAgICAgICB6MCAqPSBmOworICAgICAgICAgICAgICAgICAgICB3MCAqPSBmOwogCi0g
ICAgICAgIGNvcHk6IGZ1bmN0aW9uICggbSApIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7Ci0gICAgICAgICAgICB2YXIgbWUgPSBtLmVs
ZW1lbnRzOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0ZVsgMCBdID0gbWVbIDAgXTsg
dGVbIDEgXSA9IG1lWyAxIF07IHRlWyAyIF0gPSBtZVsgMiBdOyB0ZVsgMyBdID0gbWVbIDMgXTsK
LSAgICAgICAgICAgIHRlWyA0IF0gPSBtZVsgNCBdOyB0ZVsgNSBdID0gbWVbIDUgXTsgdGVbIDYg
XSA9IG1lWyA2IF07IHRlWyA3IF0gPSBtZVsgNyBdOwotICAgICAgICAgICAgdGVbIDggXSA9IG1l
WyA4IF07IHRlWyA5IF0gPSBtZVsgOSBdOyB0ZVsgMTAgXSA9IG1lWyAxMCBdOyB0ZVsgMTEgXSA9
IG1lWyAxMSBdOwotICAgICAgICAgICAgdGVbIDEyIF0gPSBtZVsgMTIgXTsgdGVbIDEzIF0gPSBt
ZVsgMTMgXTsgdGVbIDE0IF0gPSBtZVsgMTQgXTsgdGVbIDE1IF0gPSBtZVsgMTUgXTsKKyAgICAg
ICAgICAgIGRzdFsgZHN0T2Zmc2V0IF0gPSB4MDsKKyAgICAgICAgICAgIGRzdFsgZHN0T2Zmc2V0
ICsgMSBdID0geTA7CisgICAgICAgICAgICBkc3RbIGRzdE9mZnNldCArIDIgXSA9IHowOworICAg
ICAgICAgICAgZHN0WyBkc3RPZmZzZXQgKyAzIF0gPSB3MDsKIAotICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgIH0KIAotICAgICAgICB9LAorICAgIH0gKTsKIAotICAgICAgICBjb3B5
UG9zaXRpb246IGZ1bmN0aW9uICggbSApIHsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcygg
UXVhdGVybmlvbi5wcm90b3R5cGUsIHsKIAotICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVt
ZW50cywgbWUgPSBtLmVsZW1lbnRzOworICAgICAgICB4OiB7CiAKLSAgICAgICAgICAgIHRlWyAx
MiBdID0gbWVbIDEyIF07Ci0gICAgICAgICAgICB0ZVsgMTMgXSA9IG1lWyAxMyBdOwotICAgICAg
ICAgICAgdGVbIDE0IF0gPSBtZVsgMTQgXTsKKyAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
ewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5feDsKIAotICAgICAgICB9LAorICAgICAgICAgICAgfSwKIAotICAgICAgICBleHRyYWN0QmFz
aXM6IGZ1bmN0aW9uICggeEF4aXMsIHlBeGlzLCB6QXhpcyApIHsKKyAgICAgICAgICAgIHNldDog
ZnVuY3Rpb24gKCB2YWx1ZSApIHsKIAotICAgICAgICAgICAgeEF4aXMuc2V0RnJvbU1hdHJpeENv
bHVtbiggdGhpcywgMCApOwotICAgICAgICAgICAgeUF4aXMuc2V0RnJvbU1hdHJpeENvbHVtbigg
dGhpcywgMSApOwotICAgICAgICAgICAgekF4aXMuc2V0RnJvbU1hdHJpeENvbHVtbiggdGhpcywg
MiApOworICAgICAgICAgICAgICAgIHRoaXMuX3ggPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICAgICAgfQogCiAgICAgICAgIH0sCiAKLSAgICAgICAgbWFrZUJhc2lzOiBmdW5jdGlvbiAo
IHhBeGlzLCB5QXhpcywgekF4aXMgKSB7CisgICAgICAgIHk6IHsKIAotICAgICAgICAgICAgdGhp
cy5zZXQoCi0gICAgICAgICAgICAgICAgeEF4aXMueCwgeUF4aXMueCwgekF4aXMueCwgMCwKLSAg
ICAgICAgICAgICAgICB4QXhpcy55LCB5QXhpcy55LCB6QXhpcy55LCAwLAotICAgICAgICAgICAg
ICAgIHhBeGlzLnosIHlBeGlzLnosIHpBeGlzLnosIDAsCi0gICAgICAgICAgICAgICAgMCwgMCwg
MCwgMQotICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewogCi0g
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feTsK
IAotICAgICAgICB9LAorICAgICAgICAgICAgfSwKIAotICAgICAgICBleHRyYWN0Um90YXRpb246
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKIAot
ICAgICAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgICAgICB0aGlz
Ll95ID0gdmFsdWU7CisgICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpOwog
Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZXh0cmFjdFJvdGF0aW9uKCBtICkgeworICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gdGhpcyBtZXRob2QgZG9lcyBub3Qgc3Vw
cG9ydCByZWZsZWN0aW9uIG1hdHJpY2VzCisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB2
YXIgdGUgPSB0aGlzLmVsZW1lbnRzOwotICAgICAgICAgICAgICAgIHZhciBtZSA9IG0uZWxlbWVu
dHM7CisgICAgICAgIHo6IHsKIAotICAgICAgICAgICAgICAgIHZhciBzY2FsZVggPSAxIC8gdjEu
c2V0RnJvbU1hdHJpeENvbHVtbiggbSwgMCApLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgIHZh
ciBzY2FsZVkgPSAxIC8gdjEuc2V0RnJvbU1hdHJpeENvbHVtbiggbSwgMSApLmxlbmd0aCgpOwot
ICAgICAgICAgICAgICAgIHZhciBzY2FsZVogPSAxIC8gdjEuc2V0RnJvbU1hdHJpeENvbHVtbigg
bSwgMiApLmxlbmd0aCgpOworICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAg
ICAgICAgICAgICB0ZVsgMCBdID0gbWVbIDAgXSAqIHNjYWxlWDsKLSAgICAgICAgICAgICAgICB0
ZVsgMSBdID0gbWVbIDEgXSAqIHNjYWxlWDsKLSAgICAgICAgICAgICAgICB0ZVsgMiBdID0gbWVb
IDIgXSAqIHNjYWxlWDsKLSAgICAgICAgICAgICAgICB0ZVsgMyBdID0gMDsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fejsKIAotICAgICAgICAgICAgICAgIHRlWyA0IF0gPSBtZVsgNCBd
ICogc2NhbGVZOwotICAgICAgICAgICAgICAgIHRlWyA1IF0gPSBtZVsgNSBdICogc2NhbGVZOwot
ICAgICAgICAgICAgICAgIHRlWyA2IF0gPSBtZVsgNiBdICogc2NhbGVZOwotICAgICAgICAgICAg
ICAgIHRlWyA3IF0gPSAwOworICAgICAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHRlWyA4
IF0gPSBtZVsgOCBdICogc2NhbGVaOwotICAgICAgICAgICAgICAgIHRlWyA5IF0gPSBtZVsgOSBd
ICogc2NhbGVaOwotICAgICAgICAgICAgICAgIHRlWyAxMCBdID0gbWVbIDEwIF0gKiBzY2FsZVo7
Ci0gICAgICAgICAgICAgICAgdGVbIDExIF0gPSAwOworICAgICAgICAgICAgc2V0OiBmdW5jdGlv
biAoIHZhbHVlICkgewogCi0gICAgICAgICAgICAgICAgdGVbIDEyIF0gPSAwOwotICAgICAgICAg
ICAgICAgIHRlWyAxMyBdID0gMDsKLSAgICAgICAgICAgICAgICB0ZVsgMTQgXSA9IDA7Ci0gICAg
ICAgICAgICAgICAgdGVbIDE1IF0gPSAxOworICAgICAgICAgICAgICAgIHRoaXMuX3ogPSB2YWx1
ZTsKKyAgICAgICAgICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7CiAKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfTsKKyAg
ICAgICAgfSwKIAotICAgICAgICB9KCksCisgICAgICAgIHc6IHsKIAotICAgICAgICBtYWtlUm90
YXRpb25Gcm9tRXVsZXI6IGZ1bmN0aW9uICggZXVsZXIgKSB7CisgICAgICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgaWYgKCAhICggZXVsZXIgJiYgZXVsZXIuaXNFdWxl
ciApICkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93OwogCi0gICAgICAgICAgICAg
ICAgY29uc29sZS5lcnJvciggJ1RIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIo
KSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQg
b3JkZXIuJyApOworICAgICAgICAgICAgfSwKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAg
c2V0OiBmdW5jdGlvbiAoIHZhbHVlICkgewogCi0gICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVs
ZW1lbnRzOworICAgICAgICAgICAgICAgIHRoaXMuX3cgPSB2YWx1ZTsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7CiAKLSAgICAgICAgICAgIHZhciB4ID0gZXVsZXIu
eCwgeSA9IGV1bGVyLnksIHogPSBldWxlci56OwotICAgICAgICAgICAgdmFyIGEgPSBNYXRoLmNv
cyggeCApLCBiID0gTWF0aC5zaW4oIHggKTsKLSAgICAgICAgICAgIHZhciBjID0gTWF0aC5jb3Mo
IHkgKSwgZCA9IE1hdGguc2luKCB5ICk7Ci0gICAgICAgICAgICB2YXIgZSA9IE1hdGguY29zKCB6
ICksIGYgPSBNYXRoLnNpbiggeiApOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
IGV1bGVyLm9yZGVyID09PSAnWFlaJyApIHsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
dmFyIGFlID0gYSAqIGUsIGFmID0gYSAqIGYsIGJlID0gYiAqIGUsIGJmID0gYiAqIGY7CisgICAg
fSApOwogCi0gICAgICAgICAgICAgICAgdGVbIDAgXSA9IGMgKiBlOwotICAgICAgICAgICAgICAg
IHRlWyA0IF0gPSAtIGMgKiBmOwotICAgICAgICAgICAgICAgIHRlWyA4IF0gPSBkOworICAgIE9i
amVjdC5hc3NpZ24oIFF1YXRlcm5pb24ucHJvdG90eXBlLCB7CiAKLSAgICAgICAgICAgICAgICB0
ZVsgMSBdID0gYWYgKyBiZSAqIGQ7Ci0gICAgICAgICAgICAgICAgdGVbIDUgXSA9IGFlIC0gYmYg
KiBkOwotICAgICAgICAgICAgICAgIHRlWyA5IF0gPSAtIGIgKiBjOworICAgICAgICBpc1F1YXRl
cm5pb246IHRydWUsCiAKLSAgICAgICAgICAgICAgICB0ZVsgMiBdID0gYmYgLSBhZSAqIGQ7Ci0g
ICAgICAgICAgICAgICAgdGVbIDYgXSA9IGJlICsgYWYgKiBkOwotICAgICAgICAgICAgICAgIHRl
WyAxMCBdID0gYSAqIGM7CisgICAgICAgIHNldDogZnVuY3Rpb24gKCB4LCB5LCB6LCB3ICkgewog
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCBldWxlci5vcmRlciA9PT0gJ1lYWicgKSB7CisgICAg
ICAgICAgICB0aGlzLl94ID0geDsKKyAgICAgICAgICAgIHRoaXMuX3kgPSB5OworICAgICAgICAg
ICAgdGhpcy5feiA9IHo7CisgICAgICAgICAgICB0aGlzLl93ID0gdzsKIAotICAgICAgICAgICAg
ICAgIHZhciBjZSA9IGMgKiBlLCBjZiA9IGMgKiBmLCBkZSA9IGQgKiBlLCBkZiA9IGQgKiBmOwor
ICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpOwogCi0gICAgICAgICAgICAgICAg
dGVbIDAgXSA9IGNlICsgZGYgKiBiOwotICAgICAgICAgICAgICAgIHRlWyA0IF0gPSBkZSAqIGIg
LSBjZjsKLSAgICAgICAgICAgICAgICB0ZVsgOCBdID0gYSAqIGQ7CisgICAgICAgICAgICByZXR1
cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIHRlWyAxIF0gPSBhICogZjsKLSAgICAgICAgICAg
ICAgICB0ZVsgNSBdID0gYSAqIGU7Ci0gICAgICAgICAgICAgICAgdGVbIDkgXSA9IC0gYjsKKyAg
ICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHRlWyAyIF0gPSBjZiAqIGIgLSBkZTsKLSAgICAg
ICAgICAgICAgICB0ZVsgNiBdID0gZGYgKyBjZSAqIGI7Ci0gICAgICAgICAgICAgICAgdGVbIDEw
IF0gPSBhICogYzsKKyAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAg
fSBlbHNlIGlmICggZXVsZXIub3JkZXIgPT09ICdaWFknICkgeworICAgICAgICAgICAgcmV0dXJu
IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCB0aGlzLl94LCB0aGlzLl95LCB0aGlzLl96LCB0aGlzLl93
ICk7CiAKLSAgICAgICAgICAgICAgICB2YXIgY2UgPSBjICogZSwgY2YgPSBjICogZiwgZGUgPSBk
ICogZSwgZGYgPSBkICogZjsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHRlWyAwIF0g
PSBjZSAtIGRmICogYjsKLSAgICAgICAgICAgICAgICB0ZVsgNCBdID0gLSBhICogZjsKLSAgICAg
ICAgICAgICAgICB0ZVsgOCBdID0gZGUgKyBjZiAqIGI7CisgICAgICAgIGNvcHk6IGZ1bmN0aW9u
ICggcXVhdGVybmlvbiApIHsKIAotICAgICAgICAgICAgICAgIHRlWyAxIF0gPSBjZiArIGRlICog
YjsKLSAgICAgICAgICAgICAgICB0ZVsgNSBdID0gYSAqIGU7Ci0gICAgICAgICAgICAgICAgdGVb
IDkgXSA9IGRmIC0gY2UgKiBiOworICAgICAgICAgICAgdGhpcy5feCA9IHF1YXRlcm5pb24ueDsK
KyAgICAgICAgICAgIHRoaXMuX3kgPSBxdWF0ZXJuaW9uLnk7CisgICAgICAgICAgICB0aGlzLl96
ID0gcXVhdGVybmlvbi56OworICAgICAgICAgICAgdGhpcy5fdyA9IHF1YXRlcm5pb24udzsKIAot
ICAgICAgICAgICAgICAgIHRlWyAyIF0gPSAtIGEgKiBkOwotICAgICAgICAgICAgICAgIHRlWyA2
IF0gPSBiOwotICAgICAgICAgICAgICAgIHRlWyAxMCBdID0gYSAqIGM7CisgICAgICAgICAgICB0
aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7CiAKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIGV1bGVy
Lm9yZGVyID09PSAnWllYJyApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAg
ICAgICAgICAgdmFyIGFlID0gYSAqIGUsIGFmID0gYSAqIGYsIGJlID0gYiAqIGUsIGJmID0gYiAq
IGY7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB0ZVsgMCBdID0gYyAqIGU7Ci0gICAg
ICAgICAgICAgICAgdGVbIDQgXSA9IGJlICogZCAtIGFmOwotICAgICAgICAgICAgICAgIHRlWyA4
IF0gPSBhZSAqIGQgKyBiZjsKKyAgICAgICAgc2V0RnJvbUV1bGVyOiBmdW5jdGlvbiAoIGV1bGVy
LCB1cGRhdGUgKSB7CiAKLSAgICAgICAgICAgICAgICB0ZVsgMSBdID0gYyAqIGY7Ci0gICAgICAg
ICAgICAgICAgdGVbIDUgXSA9IGJmICogZCArIGFlOwotICAgICAgICAgICAgICAgIHRlWyA5IF0g
PSBhZiAqIGQgLSBiZTsKKyAgICAgICAgICAgIGlmICggISAoIGV1bGVyICYmIGV1bGVyLmlzRXVs
ZXIgKSApIHsKIAotICAgICAgICAgICAgICAgIHRlWyAyIF0gPSAtIGQ7Ci0gICAgICAgICAgICAg
ICAgdGVbIDYgXSA9IGIgKiBjOwotICAgICAgICAgICAgICAgIHRlWyAxMCBdID0gYSAqIGM7Cisg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCAnVEhSRUUuUXVhdGVybmlvbjogLnNldEZy
b21FdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVj
dG9yMyBhbmQgb3JkZXIuJyApOwogCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCBldWxlci5vcmRl
ciA9PT0gJ1laWCcgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB2YXIgYWMg
PSBhICogYywgYWQgPSBhICogZCwgYmMgPSBiICogYywgYmQgPSBiICogZDsKKyAgICAgICAgICAg
IHZhciB4ID0gZXVsZXIuX3gsIHkgPSBldWxlci5feSwgeiA9IGV1bGVyLl96LCBvcmRlciA9IGV1
bGVyLm9yZGVyOwogCi0gICAgICAgICAgICAgICAgdGVbIDAgXSA9IGMgKiBlOwotICAgICAgICAg
ICAgICAgIHRlWyA0IF0gPSBiZCAtIGFjICogZjsKLSAgICAgICAgICAgICAgICB0ZVsgOCBdID0g
YmMgKiBmICsgYWQ7CisgICAgICAgICAgICAvLyBodHRwOi8vd3d3Lm1hdGh3b3Jrcy5jb20vbWF0
bGFiY2VudHJhbC9maWxlZXhjaGFuZ2UvCisgICAgICAgICAgICAvLyAgMjA2OTYtZnVuY3Rpb24t
dG8tY29udmVydC1iZXR3ZWVuLWRjbS1ldWxlci1hbmdsZXMtcXVhdGVybmlvbnMtYW5kLWV1bGVy
LXZlY3RvcnMvCisgICAgICAgICAgICAvLyAgY29udGVudC9TcGluQ2FsYy5tCiAKLSAgICAgICAg
ICAgICAgICB0ZVsgMSBdID0gZjsKLSAgICAgICAgICAgICAgICB0ZVsgNSBdID0gYSAqIGU7Ci0g
ICAgICAgICAgICAgICAgdGVbIDkgXSA9IC0gYiAqIGU7CisgICAgICAgICAgICB2YXIgY29zID0g
TWF0aC5jb3M7CisgICAgICAgICAgICB2YXIgc2luID0gTWF0aC5zaW47CiAKLSAgICAgICAgICAg
ICAgICB0ZVsgMiBdID0gLSBkICogZTsKLSAgICAgICAgICAgICAgICB0ZVsgNiBdID0gYWQgKiBm
ICsgYmM7Ci0gICAgICAgICAgICAgICAgdGVbIDEwIF0gPSBhYyAtIGJkICogZjsKKyAgICAgICAg
ICAgIHZhciBjMSA9IGNvcyggeCAvIDIgKTsKKyAgICAgICAgICAgIHZhciBjMiA9IGNvcyggeSAv
IDIgKTsKKyAgICAgICAgICAgIHZhciBjMyA9IGNvcyggeiAvIDIgKTsKIAotICAgICAgICAgICAg
fSBlbHNlIGlmICggZXVsZXIub3JkZXIgPT09ICdYWlknICkgeworICAgICAgICAgICAgdmFyIHMx
ID0gc2luKCB4IC8gMiApOworICAgICAgICAgICAgdmFyIHMyID0gc2luKCB5IC8gMiApOworICAg
ICAgICAgICAgdmFyIHMzID0gc2luKCB6IC8gMiApOwogCi0gICAgICAgICAgICAgICAgdmFyIGFj
ID0gYSAqIGMsIGFkID0gYSAqIGQsIGJjID0gYiAqIGMsIGJkID0gYiAqIGQ7CisgICAgICAgICAg
ICBpZiAoIG9yZGVyID09PSAnWFlaJyApIHsKIAotICAgICAgICAgICAgICAgIHRlWyAwIF0gPSBj
ICogZTsKLSAgICAgICAgICAgICAgICB0ZVsgNCBdID0gLSBmOwotICAgICAgICAgICAgICAgIHRl
WyA4IF0gPSBkICogZTsKKyAgICAgICAgICAgICAgICB0aGlzLl94ID0gczEgKiBjMiAqIGMzICsg
YzEgKiBzMiAqIHMzOworICAgICAgICAgICAgICAgIHRoaXMuX3kgPSBjMSAqIHMyICogYzMgLSBz
MSAqIGMyICogczM7CisgICAgICAgICAgICAgICAgdGhpcy5feiA9IGMxICogYzIgKiBzMyArIHMx
ICogczIgKiBjMzsKKyAgICAgICAgICAgICAgICB0aGlzLl93ID0gYzEgKiBjMiAqIGMzIC0gczEg
KiBzMiAqIHMzOwogCi0gICAgICAgICAgICAgICAgdGVbIDEgXSA9IGFjICogZiArIGJkOwotICAg
ICAgICAgICAgICAgIHRlWyA1IF0gPSBhICogZTsKLSAgICAgICAgICAgICAgICB0ZVsgOSBdID0g
YWQgKiBmIC0gYmM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBvcmRlciA9PT0gJ1lYWicgKSB7
CiAKLSAgICAgICAgICAgICAgICB0ZVsgMiBdID0gYmMgKiBmIC0gYWQ7Ci0gICAgICAgICAgICAg
ICAgdGVbIDYgXSA9IGIgKiBlOwotICAgICAgICAgICAgICAgIHRlWyAxMCBdID0gYmQgKiBmICsg
YWM7CisgICAgICAgICAgICAgICAgdGhpcy5feCA9IHMxICogYzIgKiBjMyArIGMxICogczIgKiBz
MzsKKyAgICAgICAgICAgICAgICB0aGlzLl95ID0gYzEgKiBzMiAqIGMzIC0gczEgKiBjMiAqIHMz
OworICAgICAgICAgICAgICAgIHRoaXMuX3ogPSBjMSAqIGMyICogczMgLSBzMSAqIHMyICogYzM7
CisgICAgICAgICAgICAgICAgdGhpcy5fdyA9IGMxICogYzIgKiBjMyArIHMxICogczIgKiBzMzsK
IAotICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICggb3JkZXIgPT09ICdaWFkn
ICkgewogCi0gICAgICAgICAgICAvLyBib3R0b20gcm93Ci0gICAgICAgICAgICB0ZVsgMyBdID0g
MDsKLSAgICAgICAgICAgIHRlWyA3IF0gPSAwOwotICAgICAgICAgICAgdGVbIDExIF0gPSAwOwor
ICAgICAgICAgICAgICAgIHRoaXMuX3ggPSBzMSAqIGMyICogYzMgLSBjMSAqIHMyICogczM7Cisg
ICAgICAgICAgICAgICAgdGhpcy5feSA9IGMxICogczIgKiBjMyArIHMxICogYzIgKiBzMzsKKyAg
ICAgICAgICAgICAgICB0aGlzLl96ID0gYzEgKiBjMiAqIHMzICsgczEgKiBzMiAqIGMzOworICAg
ICAgICAgICAgICAgIHRoaXMuX3cgPSBjMSAqIGMyICogYzMgLSBzMSAqIHMyICogczM7CiAKLSAg
ICAgICAgICAgIC8vIGxhc3QgY29sdW1uCi0gICAgICAgICAgICB0ZVsgMTIgXSA9IDA7Ci0gICAg
ICAgICAgICB0ZVsgMTMgXSA9IDA7Ci0gICAgICAgICAgICB0ZVsgMTQgXSA9IDA7Ci0gICAgICAg
ICAgICB0ZVsgMTUgXSA9IDE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBvcmRlciA9PT0gJ1pZ
WCcgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIHRoaXMu
X3ggPSBzMSAqIGMyICogYzMgLSBjMSAqIHMyICogczM7CisgICAgICAgICAgICAgICAgdGhpcy5f
eSA9IGMxICogczIgKiBjMyArIHMxICogYzIgKiBzMzsKKyAgICAgICAgICAgICAgICB0aGlzLl96
ID0gYzEgKiBjMiAqIHMzIC0gczEgKiBzMiAqIGMzOworICAgICAgICAgICAgICAgIHRoaXMuX3cg
PSBjMSAqIGMyICogYzMgKyBzMSAqIHMyICogczM7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoIG9yZGVyID09PSAnWVpYJyApIHsKIAotICAgICAgICBtYWtlUm90YXRpb25G
cm9tUXVhdGVybmlvbjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3ggPSBz
MSAqIGMyICogYzMgKyBjMSAqIHMyICogczM7CisgICAgICAgICAgICAgICAgdGhpcy5feSA9IGMx
ICogczIgKiBjMyArIHMxICogYzIgKiBzMzsKKyAgICAgICAgICAgICAgICB0aGlzLl96ID0gYzEg
KiBjMiAqIHMzIC0gczEgKiBzMiAqIGMzOworICAgICAgICAgICAgICAgIHRoaXMuX3cgPSBjMSAq
IGMyICogYzMgLSBzMSAqIHMyICogczM7CiAKLSAgICAgICAgICAgIHZhciB6ZXJvID0gbmV3IFZl
Y3RvcjMoIDAsIDAsIDAgKTsKLSAgICAgICAgICAgIHZhciBvbmUgPSBuZXcgVmVjdG9yMyggMSwg
MSwgMSApOworICAgICAgICAgICAgfSBlbHNlIGlmICggb3JkZXIgPT09ICdYWlknICkgewogCi0g
ICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oIHEg
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5feCA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBz
MzsKKyAgICAgICAgICAgICAgICB0aGlzLl95ID0gYzEgKiBzMiAqIGMzIC0gczEgKiBjMiAqIHMz
OworICAgICAgICAgICAgICAgIHRoaXMuX3ogPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7
CisgICAgICAgICAgICAgICAgdGhpcy5fdyA9IGMxICogYzIgKiBjMyArIHMxICogczIgKiBzMzsK
IAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBvc2UoIHplcm8sIHEsIG9uZSApOwor
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKCB1cGRhdGUg
IT09IGZhbHNlICkgdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpOwogCi0gICAgICAgIH0oKSwKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIGxvb2tBdDogZnVuY3Rpb24gKCkgewor
ICAgICAgICB9LAogCi0gICAgICAgICAgICB2YXIgeCA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAg
ICAgICB2YXIgeSA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICB2YXIgeiA9IG5ldyBWZWN0
b3IzKCk7CisgICAgICAgIHNldEZyb21BeGlzQW5nbGU6IGZ1bmN0aW9uICggYXhpcywgYW5nbGUg
KSB7CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBsb29rQXQoIGV5ZSwgdGFyZ2V0LCB1
cCApIHsKKyAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cuZXVjbGlkZWFuc3BhY2UuY29tL21hdGhz
L2dlb21ldHJ5L3JvdGF0aW9ucy9jb252ZXJzaW9ucy9hbmdsZVRvUXVhdGVybmlvbi9pbmRleC5o
dG0KIAotICAgICAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7CisgICAgICAgICAg
ICAvLyBhc3N1bWVzIGF4aXMgaXMgbm9ybWFsaXplZAogCi0gICAgICAgICAgICAgICAgei5zdWJW
ZWN0b3JzKCBleWUsIHRhcmdldCApOworICAgICAgICAgICAgdmFyIGhhbGZBbmdsZSA9IGFuZ2xl
IC8gMiwgcyA9IE1hdGguc2luKCBoYWxmQW5nbGUgKTsKIAotICAgICAgICAgICAgICAgIGlmICgg
ei5sZW5ndGhTcSgpID09PSAwICkgeworICAgICAgICAgICAgdGhpcy5feCA9IGF4aXMueCAqIHM7
CisgICAgICAgICAgICB0aGlzLl95ID0gYXhpcy55ICogczsKKyAgICAgICAgICAgIHRoaXMuX3og
PSBheGlzLnogKiBzOworICAgICAgICAgICAgdGhpcy5fdyA9IE1hdGguY29zKCBoYWxmQW5nbGUg
KTsKIAotICAgICAgICAgICAgICAgICAgICAvLyBleWUgYW5kIHRhcmdldCBhcmUgaW4gdGhlIHNh
bWUgcG9zaXRpb24KKyAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTsKIAotICAg
ICAgICAgICAgICAgICAgICB6LnogPSAxOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB6Lm5vcm1hbGl6
ZSgpOwotICAgICAgICAgICAgICAgIHguY3Jvc3NWZWN0b3JzKCB1cCwgeiApOworICAgICAgICBz
ZXRGcm9tUm90YXRpb25NYXRyaXg6IGZ1bmN0aW9uICggbSApIHsKIAotICAgICAgICAgICAgICAg
IGlmICggeC5sZW5ndGhTcSgpID09PSAwICkgeworICAgICAgICAgICAgLy8gaHR0cDovL3d3dy5l
dWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvZ2VvbWV0cnkvcm90YXRpb25zL2NvbnZlcnNpb25zL21h
dHJpeFRvUXVhdGVybmlvbi9pbmRleC5odG0KIAotICAgICAgICAgICAgICAgICAgICAvLyB1cCBh
bmQgeiBhcmUgcGFyYWxsZWwKKyAgICAgICAgICAgIC8vIGFzc3VtZXMgdGhlIHVwcGVyIDN4MyBv
ZiBtIGlzIGEgcHVyZSByb3RhdGlvbiBtYXRyaXggKGkuZSwgdW5zY2FsZWQpCiAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCBNYXRoLmFicyggdXAueiApID09PSAxICkgeworICAgICAgICAgICAg
dmFyIHRlID0gbS5lbGVtZW50cywKIAotICAgICAgICAgICAgICAgICAgICAgICAgei54ICs9IDAu
MDAwMTsKKyAgICAgICAgICAgICAgICBtMTEgPSB0ZVsgMCBdLCBtMTIgPSB0ZVsgNCBdLCBtMTMg
PSB0ZVsgOCBdLAorICAgICAgICAgICAgICAgIG0yMSA9IHRlWyAxIF0sIG0yMiA9IHRlWyA1IF0s
IG0yMyA9IHRlWyA5IF0sCisgICAgICAgICAgICAgICAgbTMxID0gdGVbIDIgXSwgbTMyID0gdGVb
IDYgXSwgbTMzID0gdGVbIDEwIF0sCiAKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICB0cmFjZSA9IG0xMSArIG0yMiArIG0zMywKKyAgICAgICAgICAgICAgICBz
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICB6LnogKz0gMC4wMDAxOworICAgICAgICAgICAg
aWYgKCB0cmFjZSA+IDAgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHMgPSAwLjUgLyBNYXRoLnNxcnQoIHRyYWNlICsgMS4wICk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgei5ub3JtYWxpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgeC5jcm9zc1ZlY3RvcnMo
IHVwLCB6ICk7CisgICAgICAgICAgICAgICAgdGhpcy5fdyA9IDAuMjUgLyBzOworICAgICAgICAg
ICAgICAgIHRoaXMuX3ggPSAoIG0zMiAtIG0yMyApICogczsKKyAgICAgICAgICAgICAgICB0aGlz
Ll95ID0gKCBtMTMgLSBtMzEgKSAqIHM7CisgICAgICAgICAgICAgICAgdGhpcy5feiA9ICggbTIx
IC0gbTEyICkgKiBzOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlm
ICggbTExID4gbTIyICYmIG0xMSA+IG0zMyApIHsKIAotICAgICAgICAgICAgICAgIHgubm9ybWFs
aXplKCk7Ci0gICAgICAgICAgICAgICAgeS5jcm9zc1ZlY3RvcnMoIHosIHggKTsKKyAgICAgICAg
ICAgICAgICBzID0gMi4wICogTWF0aC5zcXJ0KCAxLjAgKyBtMTEgLSBtMjIgLSBtMzMgKTsKIAot
ICAgICAgICAgICAgICAgIHRlWyAwIF0gPSB4Lng7IHRlWyA0IF0gPSB5Lng7IHRlWyA4IF0gPSB6
Lng7Ci0gICAgICAgICAgICAgICAgdGVbIDEgXSA9IHgueTsgdGVbIDUgXSA9IHkueTsgdGVbIDkg
XSA9IHoueTsKLSAgICAgICAgICAgICAgICB0ZVsgMiBdID0geC56OyB0ZVsgNiBdID0geS56OyB0
ZVsgMTAgXSA9IHouejsKKyAgICAgICAgICAgICAgICB0aGlzLl93ID0gKCBtMzIgLSBtMjMgKSAv
IHM7CisgICAgICAgICAgICAgICAgdGhpcy5feCA9IDAuMjUgKiBzOworICAgICAgICAgICAgICAg
IHRoaXMuX3kgPSAoIG0xMiArIG0yMSApIC8gczsKKyAgICAgICAgICAgICAgICB0aGlzLl96ID0g
KCBtMTMgKyBtMzEgKSAvIHM7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIG0yMiA+IG0zMyApIHsKIAotICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICBzID0gMi4wICogTWF0aC5zcXJ0KCAxLjAgKyBtMjIgLSBtMTEgLSBtMzMgKTsK
IAotICAgICAgICB9KCksCisgICAgICAgICAgICAgICAgdGhpcy5fdyA9ICggbTEzIC0gbTMxICkg
LyBzOworICAgICAgICAgICAgICAgIHRoaXMuX3ggPSAoIG0xMiArIG0yMSApIC8gczsKKyAgICAg
ICAgICAgICAgICB0aGlzLl95ID0gMC4yNSAqIHM7CisgICAgICAgICAgICAgICAgdGhpcy5feiA9
ICggbTIzICsgbTMyICkgLyBzOwogCi0gICAgICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoIG0sIG4g
KSB7CisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICBpZiAoIG4gIT09IHVuZGVm
aW5lZCApIHsKKyAgICAgICAgICAgICAgICBzID0gMi4wICogTWF0aC5zcXJ0KCAxLjAgKyBtMzMg
LSBtMTEgLSBtMjIgKTsKIAotICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLk1h
dHJpeDQ6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11
bHRpcGx5TWF0cmljZXMoIGEsIGIgKSBpbnN0ZWFkLicgKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKCBtLCBuICk7CisgICAgICAgICAgICAgICAgdGhpcy5f
dyA9ICggbTIxIC0gbTEyICkgLyBzOworICAgICAgICAgICAgICAgIHRoaXMuX3ggPSAoIG0xMyAr
IG0zMSApIC8gczsKKyAgICAgICAgICAgICAgICB0aGlzLl95ID0gKCBtMjMgKyBtMzIgKSAvIHM7
CisgICAgICAgICAgICAgICAgdGhpcy5feiA9IDAuMjUgKiBzOwogCiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHJldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXMoIHRoaXMsIG0gKTsKKyAg
ICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTsKIAotICAgICAgICB9LAorICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgcHJlbXVsdGlwbHk6IGZ1bmN0aW9uICggbSAp
IHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNl
cyggbSwgdGhpcyApOworICAgICAgICBzZXRGcm9tVW5pdFZlY3RvcnM6IGZ1bmN0aW9uICggdkZy
b20sIHZUbyApIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgLy8gYXNzdW1lcyBkaXJlY3Rp
b24gdmVjdG9ycyB2RnJvbSBhbmQgdlRvIGFyZSBub3JtYWxpemVkCiAKLSAgICAgICAgbXVsdGlw
bHlNYXRyaWNlczogZnVuY3Rpb24gKCBhLCBiICkgeworICAgICAgICAgICAgdmFyIEVQUyA9IDAu
MDAwMDAxOwogCi0gICAgICAgICAgICB2YXIgYWUgPSBhLmVsZW1lbnRzOwotICAgICAgICAgICAg
dmFyIGJlID0gYi5lbGVtZW50czsKLSAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7
CisgICAgICAgICAgICB2YXIgciA9IHZGcm9tLmRvdCggdlRvICkgKyAxOwogCi0gICAgICAgICAg
ICB2YXIgYTExID0gYWVbIDAgXSwgYTEyID0gYWVbIDQgXSwgYTEzID0gYWVbIDggXSwgYTE0ID0g
YWVbIDEyIF07Ci0gICAgICAgICAgICB2YXIgYTIxID0gYWVbIDEgXSwgYTIyID0gYWVbIDUgXSwg
YTIzID0gYWVbIDkgXSwgYTI0ID0gYWVbIDEzIF07Ci0gICAgICAgICAgICB2YXIgYTMxID0gYWVb
IDIgXSwgYTMyID0gYWVbIDYgXSwgYTMzID0gYWVbIDEwIF0sIGEzNCA9IGFlWyAxNCBdOwotICAg
ICAgICAgICAgdmFyIGE0MSA9IGFlWyAzIF0sIGE0MiA9IGFlWyA3IF0sIGE0MyA9IGFlWyAxMSBd
LCBhNDQgPSBhZVsgMTUgXTsKKyAgICAgICAgICAgIGlmICggciA8IEVQUyApIHsKIAotICAgICAg
ICAgICAgdmFyIGIxMSA9IGJlWyAwIF0sIGIxMiA9IGJlWyA0IF0sIGIxMyA9IGJlWyA4IF0sIGIx
NCA9IGJlWyAxMiBdOwotICAgICAgICAgICAgdmFyIGIyMSA9IGJlWyAxIF0sIGIyMiA9IGJlWyA1
IF0sIGIyMyA9IGJlWyA5IF0sIGIyNCA9IGJlWyAxMyBdOwotICAgICAgICAgICAgdmFyIGIzMSA9
IGJlWyAyIF0sIGIzMiA9IGJlWyA2IF0sIGIzMyA9IGJlWyAxMCBdLCBiMzQgPSBiZVsgMTQgXTsK
LSAgICAgICAgICAgIHZhciBiNDEgPSBiZVsgMyBdLCBiNDIgPSBiZVsgNyBdLCBiNDMgPSBiZVsg
MTEgXSwgYjQ0ID0gYmVbIDE1IF07CisgICAgICAgICAgICAgICAgciA9IDA7CiAKLSAgICAgICAg
ICAgIHRlWyAwIF0gPSBhMTEgKiBiMTEgKyBhMTIgKiBiMjEgKyBhMTMgKiBiMzEgKyBhMTQgKiBi
NDE7Ci0gICAgICAgICAgICB0ZVsgNCBdID0gYTExICogYjEyICsgYTEyICogYjIyICsgYTEzICog
YjMyICsgYTE0ICogYjQyOwotICAgICAgICAgICAgdGVbIDggXSA9IGExMSAqIGIxMyArIGExMiAq
IGIyMyArIGExMyAqIGIzMyArIGExNCAqIGI0MzsKLSAgICAgICAgICAgIHRlWyAxMiBdID0gYTEx
ICogYjE0ICsgYTEyICogYjI0ICsgYTEzICogYjM0ICsgYTE0ICogYjQ0OworICAgICAgICAgICAg
ICAgIGlmICggTWF0aC5hYnMoIHZGcm9tLnggKSA+IE1hdGguYWJzKCB2RnJvbS56ICkgKSB7CiAK
LSAgICAgICAgICAgIHRlWyAxIF0gPSBhMjEgKiBiMTEgKyBhMjIgKiBiMjEgKyBhMjMgKiBiMzEg
KyBhMjQgKiBiNDE7Ci0gICAgICAgICAgICB0ZVsgNSBdID0gYTIxICogYjEyICsgYTIyICogYjIy
ICsgYTIzICogYjMyICsgYTI0ICogYjQyOwotICAgICAgICAgICAgdGVbIDkgXSA9IGEyMSAqIGIx
MyArIGEyMiAqIGIyMyArIGEyMyAqIGIzMyArIGEyNCAqIGI0MzsKLSAgICAgICAgICAgIHRlWyAx
MyBdID0gYTIxICogYjE0ICsgYTIyICogYjI0ICsgYTIzICogYjM0ICsgYTI0ICogYjQ0OworICAg
ICAgICAgICAgICAgICAgICB0aGlzLl94ID0gLSB2RnJvbS55OworICAgICAgICAgICAgICAgICAg
ICB0aGlzLl95ID0gdkZyb20ueDsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5feiA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3cgPSByOwogCi0gICAgICAgICAgICB0ZVsgMiBdID0g
YTMxICogYjExICsgYTMyICogYjIxICsgYTMzICogYjMxICsgYTM0ICogYjQxOwotICAgICAgICAg
ICAgdGVbIDYgXSA9IGEzMSAqIGIxMiArIGEzMiAqIGIyMiArIGEzMyAqIGIzMiArIGEzNCAqIGI0
MjsKLSAgICAgICAgICAgIHRlWyAxMCBdID0gYTMxICogYjEzICsgYTMyICogYjIzICsgYTMzICog
YjMzICsgYTM0ICogYjQzOwotICAgICAgICAgICAgdGVbIDE0IF0gPSBhMzEgKiBiMTQgKyBhMzIg
KiBiMjQgKyBhMzMgKiBiMzQgKyBhMzQgKiBiNDQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
IAotICAgICAgICAgICAgdGVbIDMgXSA9IGE0MSAqIGIxMSArIGE0MiAqIGIyMSArIGE0MyAqIGIz
MSArIGE0NCAqIGI0MTsKLSAgICAgICAgICAgIHRlWyA3IF0gPSBhNDEgKiBiMTIgKyBhNDIgKiBi
MjIgKyBhNDMgKiBiMzIgKyBhNDQgKiBiNDI7Ci0gICAgICAgICAgICB0ZVsgMTEgXSA9IGE0MSAq
IGIxMyArIGE0MiAqIGIyMyArIGE0MyAqIGIzMyArIGE0NCAqIGI0MzsKLSAgICAgICAgICAgIHRl
WyAxNSBdID0gYTQxICogYjE0ICsgYTQyICogYjI0ICsgYTQzICogYjM0ICsgYTQ0ICogYjQ0Owor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl94ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5feSA9IC0gdkZyb20uejsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5feiA9IHZGcm9tLnk7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3cgPSByOwogCi0gICAgICAgICAgICByZXR1cm4g
dGhpczsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIH0gZWxz
ZSB7CiAKLSAgICAgICAgbXVsdGlwbHlTY2FsYXI6IGZ1bmN0aW9uICggcyApIHsKKyAgICAgICAg
ICAgICAgICAvLyBjcm9zc1ZlY3RvcnMoIHZGcm9tLCB2VG8gKTsgLy8gaW5saW5lZCB0byBhdm9p
ZCBjeWNsaWMgZGVwZW5kZW5jeSBvbiBWZWN0b3IzCiAKLSAgICAgICAgICAgIHZhciB0ZSA9IHRo
aXMuZWxlbWVudHM7CisgICAgICAgICAgICAgICAgdGhpcy5feCA9IHZGcm9tLnkgKiB2VG8ueiAt
IHZGcm9tLnogKiB2VG8ueTsKKyAgICAgICAgICAgICAgICB0aGlzLl95ID0gdkZyb20ueiAqIHZU
by54IC0gdkZyb20ueCAqIHZUby56OworICAgICAgICAgICAgICAgIHRoaXMuX3ogPSB2RnJvbS54
ICogdlRvLnkgLSB2RnJvbS55ICogdlRvLng7CisgICAgICAgICAgICAgICAgdGhpcy5fdyA9IHI7
CiAKLSAgICAgICAgICAgIHRlWyAwIF0gKj0gczsgdGVbIDQgXSAqPSBzOyB0ZVsgOCBdICo9IHM7
IHRlWyAxMiBdICo9IHM7Ci0gICAgICAgICAgICB0ZVsgMSBdICo9IHM7IHRlWyA1IF0gKj0gczsg
dGVbIDkgXSAqPSBzOyB0ZVsgMTMgXSAqPSBzOwotICAgICAgICAgICAgdGVbIDIgXSAqPSBzOyB0
ZVsgNiBdICo9IHM7IHRlWyAxMCBdICo9IHM7IHRlWyAxNCBdICo9IHM7Ci0gICAgICAgICAgICB0
ZVsgMyBdICo9IHM7IHRlWyA3IF0gKj0gczsgdGVbIDExIF0gKj0gczsgdGVbIDE1IF0gKj0gczsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5ub3JtYWxpemUoKTsKIAogICAgICAgICB9LAogCi0gICAgICAgIGFwcGx5VG9C
dWZmZXJBdHRyaWJ1dGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgYW5nbGVUbzogZnVuY3Rpb24g
KCBxICkgewogCi0gICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAg
ICAgcmV0dXJuIDIgKiBNYXRoLmFjb3MoIE1hdGguYWJzKCBfTWF0aC5jbGFtcCggdGhpcy5kb3Qo
IHEgKSwgLSAxLCAxICkgKSApOwogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gYXBwbHlU
b0J1ZmZlckF0dHJpYnV0ZSggYXR0cmlidXRlICkgeworICAgICAgICB9LAogCi0gICAgICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gYXR0cmlidXRlLmNvdW50OyBpIDwgbDsgaSArKyAp
IHsKKyAgICAgICAgcm90YXRlVG93YXJkczogZnVuY3Rpb24gKCBxLCBzdGVwICkgewogCi0gICAg
ICAgICAgICAgICAgICAgIHYxLnggPSBhdHRyaWJ1dGUuZ2V0WCggaSApOwotICAgICAgICAgICAg
ICAgICAgICB2MS55ID0gYXR0cmlidXRlLmdldFkoIGkgKTsKLSAgICAgICAgICAgICAgICAgICAg
djEueiA9IGF0dHJpYnV0ZS5nZXRaKCBpICk7CisgICAgICAgICAgICB2YXIgYW5nbGUgPSB0aGlz
LmFuZ2xlVG8oIHEgKTsKIAotICAgICAgICAgICAgICAgICAgICB2MS5hcHBseU1hdHJpeDQoIHRo
aXMgKTsKKyAgICAgICAgICAgIGlmICggYW5nbGUgPT09IDAgKSByZXR1cm4gdGhpczsKIAotICAg
ICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUuc2V0WFlaKCBpLCB2MS54LCB2MS55LCB2MS56ICk7
CisgICAgICAgICAgICB2YXIgdCA9IE1hdGgubWluKCAxLCBzdGVwIC8gYW5nbGUgKTsKIAotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuc2xlcnAoIHEsIHQgKTsKIAotICAgICAg
ICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGU7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAot
ICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKIAotICAgICAgICB9KCksCisgICAgICAgIGludmVy
c2U6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICBkZXRlcm1pbmFudDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgLy8gcXVhdGVybmlvbiBpcyBhc3N1bWVkIHRvIGhhdmUgdW5pdCBsZW5ndGgK
IAotICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLmNvbmp1Z2F0ZSgpOwogCi0gICAgICAgICAgICB2YXIgbjExID0gdGVbIDAgXSwgbjEy
ID0gdGVbIDQgXSwgbjEzID0gdGVbIDggXSwgbjE0ID0gdGVbIDEyIF07Ci0gICAgICAgICAgICB2
YXIgbjIxID0gdGVbIDEgXSwgbjIyID0gdGVbIDUgXSwgbjIzID0gdGVbIDkgXSwgbjI0ID0gdGVb
IDEzIF07Ci0gICAgICAgICAgICB2YXIgbjMxID0gdGVbIDIgXSwgbjMyID0gdGVbIDYgXSwgbjMz
ID0gdGVbIDEwIF0sIG4zNCA9IHRlWyAxNCBdOwotICAgICAgICAgICAgdmFyIG40MSA9IHRlWyAz
IF0sIG40MiA9IHRlWyA3IF0sIG40MyA9IHRlWyAxMSBdLCBuNDQgPSB0ZVsgMTUgXTsKKyAgICAg
ICAgfSwKIAotICAgICAgICAgICAgLy9UT0RPOiBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQKLSAg
ICAgICAgICAgIC8vKCBiYXNlZCBvbiBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRo
cy9hbGdlYnJhL21hdHJpeC9mdW5jdGlvbnMvaW52ZXJzZS9mb3VyRC9pbmRleC5odG0gKQorICAg
ICAgICBjb25qdWdhdGU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgcmV0dXJuICgKLSAg
ICAgICAgICAgICAgICBuNDEgKiAoCi0gICAgICAgICAgICAgICAgICAgICsgbjE0ICogbjIzICog
bjMyCi0gICAgICAgICAgICAgICAgICAgICAtIG4xMyAqIG4yNCAqIG4zMgotICAgICAgICAgICAg
ICAgICAgICAgLSBuMTQgKiBuMjIgKiBuMzMKLSAgICAgICAgICAgICAgICAgICAgICsgbjEyICog
bjI0ICogbjMzCi0gICAgICAgICAgICAgICAgICAgICArIG4xMyAqIG4yMiAqIG4zNAotICAgICAg
ICAgICAgICAgICAgICAgLSBuMTIgKiBuMjMgKiBuMzQKLSAgICAgICAgICAgICAgICApICsKLSAg
ICAgICAgICAgICAgICBuNDIgKiAoCi0gICAgICAgICAgICAgICAgICAgICsgbjExICogbjIzICog
bjM0Ci0gICAgICAgICAgICAgICAgICAgICAtIG4xMSAqIG4yNCAqIG4zMwotICAgICAgICAgICAg
ICAgICAgICAgKyBuMTQgKiBuMjEgKiBuMzMKLSAgICAgICAgICAgICAgICAgICAgIC0gbjEzICog
bjIxICogbjM0Ci0gICAgICAgICAgICAgICAgICAgICArIG4xMyAqIG4yNCAqIG4zMQotICAgICAg
ICAgICAgICAgICAgICAgLSBuMTQgKiBuMjMgKiBuMzEKLSAgICAgICAgICAgICAgICApICsKLSAg
ICAgICAgICAgICAgICBuNDMgKiAoCi0gICAgICAgICAgICAgICAgICAgICsgbjExICogbjI0ICog
bjMyCi0gICAgICAgICAgICAgICAgICAgICAtIG4xMSAqIG4yMiAqIG4zNAotICAgICAgICAgICAg
ICAgICAgICAgLSBuMTQgKiBuMjEgKiBuMzIKLSAgICAgICAgICAgICAgICAgICAgICsgbjEyICog
bjIxICogbjM0Ci0gICAgICAgICAgICAgICAgICAgICArIG4xNCAqIG4yMiAqIG4zMQotICAgICAg
ICAgICAgICAgICAgICAgLSBuMTIgKiBuMjQgKiBuMzEKLSAgICAgICAgICAgICAgICApICsKLSAg
ICAgICAgICAgICAgICBuNDQgKiAoCi0gICAgICAgICAgICAgICAgICAgIC0gbjEzICogbjIyICog
bjMxCi0gICAgICAgICAgICAgICAgICAgICAtIG4xMSAqIG4yMyAqIG4zMgotICAgICAgICAgICAg
ICAgICAgICAgKyBuMTEgKiBuMjIgKiBuMzMKLSAgICAgICAgICAgICAgICAgICAgICsgbjEzICog
bjIxICogbjMyCi0gICAgICAgICAgICAgICAgICAgICAtIG4xMiAqIG4yMSAqIG4zMwotICAgICAg
ICAgICAgICAgICAgICAgKyBuMTIgKiBuMjMgKiBuMzEKLSAgICAgICAgICAgICAgICApCisgICAg
ICAgICAgICB0aGlzLl94ICo9IC0gMTsKKyAgICAgICAgICAgIHRoaXMuX3kgKj0gLSAxOworICAg
ICAgICAgICAgdGhpcy5feiAqPSAtIDE7CiAKLSAgICAgICAgICAgICk7CisgICAgICAgICAgICB0
aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7CisKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAg
ICAgICAgIH0sCiAKLSAgICAgICAgdHJhbnNwb3NlOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGRv
dDogZnVuY3Rpb24gKCB2ICkgewogCi0gICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRz
OwotICAgICAgICAgICAgdmFyIHRtcDsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl94ICogdi5f
eCArIHRoaXMuX3kgKiB2Ll95ICsgdGhpcy5feiAqIHYuX3ogKyB0aGlzLl93ICogdi5fdzsKIAot
ICAgICAgICAgICAgdG1wID0gdGVbIDEgXTsgdGVbIDEgXSA9IHRlWyA0IF07IHRlWyA0IF0gPSB0
bXA7Ci0gICAgICAgICAgICB0bXAgPSB0ZVsgMiBdOyB0ZVsgMiBdID0gdGVbIDggXTsgdGVbIDgg
XSA9IHRtcDsKLSAgICAgICAgICAgIHRtcCA9IHRlWyA2IF07IHRlWyA2IF0gPSB0ZVsgOSBdOyB0
ZVsgOSBdID0gdG1wOworICAgICAgICB9LAogCi0gICAgICAgICAgICB0bXAgPSB0ZVsgMyBdOyB0
ZVsgMyBdID0gdGVbIDEyIF07IHRlWyAxMiBdID0gdG1wOwotICAgICAgICAgICAgdG1wID0gdGVb
IDcgXTsgdGVbIDcgXSA9IHRlWyAxMyBdOyB0ZVsgMTMgXSA9IHRtcDsKLSAgICAgICAgICAgIHRt
cCA9IHRlWyAxMSBdOyB0ZVsgMTEgXSA9IHRlWyAxNCBdOyB0ZVsgMTQgXSA9IHRtcDsKKyAgICAg
ICAgbGVuZ3RoU3E6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5feCAqIHRoaXMuX3ggKyB0aGlzLl95ICogdGhpcy5feSAr
IHRoaXMuX3ogKiB0aGlzLl96ICsgdGhpcy5fdyAqIHRoaXMuX3c7CiAKICAgICAgICAgfSwKIAot
ICAgICAgICBzZXRQb3NpdGlvbjogZnVuY3Rpb24gKCB2ICkgewotCi0gICAgICAgICAgICB2YXIg
dGUgPSB0aGlzLmVsZW1lbnRzOwotCi0gICAgICAgICAgICB0ZVsgMTIgXSA9IHYueDsKLSAgICAg
ICAgICAgIHRlWyAxMyBdID0gdi55OwotICAgICAgICAgICAgdGVbIDE0IF0gPSB2Lno7CisgICAg
ICAgIGxlbmd0aDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoIHRoaXMuX3ggKiB0aGlzLl94ICsgdGhpcy5feSAq
IHRoaXMuX3kgKyB0aGlzLl96ICogdGhpcy5feiArIHRoaXMuX3cgKiB0aGlzLl93ICk7CiAKICAg
ICAgICAgfSwKIAotICAgICAgICBnZXRJbnZlcnNlOiBmdW5jdGlvbiAoIG0sIHRocm93T25EZWdl
bmVyYXRlICkgeworICAgICAgICBub3JtYWxpemU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAg
ICAgLy8gYmFzZWQgb24gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvYWxnZWJy
YS9tYXRyaXgvZnVuY3Rpb25zL2ludmVyc2UvZm91ckQvaW5kZXguaHRtCi0gICAgICAgICAgICB2
YXIgdGUgPSB0aGlzLmVsZW1lbnRzLAotICAgICAgICAgICAgICAgIG1lID0gbS5lbGVtZW50cywK
KyAgICAgICAgICAgIHZhciBsID0gdGhpcy5sZW5ndGgoKTsKIAotICAgICAgICAgICAgICAgIG4x
MSA9IG1lWyAwIF0sIG4yMSA9IG1lWyAxIF0sIG4zMSA9IG1lWyAyIF0sIG40MSA9IG1lWyAzIF0s
Ci0gICAgICAgICAgICAgICAgbjEyID0gbWVbIDQgXSwgbjIyID0gbWVbIDUgXSwgbjMyID0gbWVb
IDYgXSwgbjQyID0gbWVbIDcgXSwKLSAgICAgICAgICAgICAgICBuMTMgPSBtZVsgOCBdLCBuMjMg
PSBtZVsgOSBdLCBuMzMgPSBtZVsgMTAgXSwgbjQzID0gbWVbIDExIF0sCi0gICAgICAgICAgICAg
ICAgbjE0ID0gbWVbIDEyIF0sIG4yNCA9IG1lWyAxMyBdLCBuMzQgPSBtZVsgMTQgXSwgbjQ0ID0g
bWVbIDE1IF0sCisgICAgICAgICAgICBpZiAoIGwgPT09IDAgKSB7CiAKLSAgICAgICAgICAgICAg
ICB0MTEgPSBuMjMgKiBuMzQgKiBuNDIgLSBuMjQgKiBuMzMgKiBuNDIgKyBuMjQgKiBuMzIgKiBu
NDMgLSBuMjIgKiBuMzQgKiBuNDMgLSBuMjMgKiBuMzIgKiBuNDQgKyBuMjIgKiBuMzMgKiBuNDQs
Ci0gICAgICAgICAgICAgICAgdDEyID0gbjE0ICogbjMzICogbjQyIC0gbjEzICogbjM0ICogbjQy
IC0gbjE0ICogbjMyICogbjQzICsgbjEyICogbjM0ICogbjQzICsgbjEzICogbjMyICogbjQ0IC0g
bjEyICogbjMzICogbjQ0LAotICAgICAgICAgICAgICAgIHQxMyA9IG4xMyAqIG4yNCAqIG40MiAt
IG4xNCAqIG4yMyAqIG40MiArIG4xNCAqIG4yMiAqIG40MyAtIG4xMiAqIG4yNCAqIG40MyAtIG4x
MyAqIG4yMiAqIG40NCArIG4xMiAqIG4yMyAqIG40NCwKLSAgICAgICAgICAgICAgICB0MTQgPSBu
MTQgKiBuMjMgKiBuMzIgLSBuMTMgKiBuMjQgKiBuMzIgLSBuMTQgKiBuMjIgKiBuMzMgKyBuMTIg
KiBuMjQgKiBuMzMgKyBuMTMgKiBuMjIgKiBuMzQgLSBuMTIgKiBuMjMgKiBuMzQ7CisgICAgICAg
ICAgICAgICAgdGhpcy5feCA9IDA7CisgICAgICAgICAgICAgICAgdGhpcy5feSA9IDA7CisgICAg
ICAgICAgICAgICAgdGhpcy5feiA9IDA7CisgICAgICAgICAgICAgICAgdGhpcy5fdyA9IDE7CiAK
LSAgICAgICAgICAgIHZhciBkZXQgPSBuMTEgKiB0MTEgKyBuMjEgKiB0MTIgKyBuMzEgKiB0MTMg
KyBuNDEgKiB0MTQ7CisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICBpZiAoIGRl
dCA9PT0gMCApIHsKKyAgICAgICAgICAgICAgICBsID0gMSAvIGw7CiAKLSAgICAgICAgICAgICAg
ICB2YXIgbXNnID0gIlRIUkVFLk1hdHJpeDQ6IC5nZXRJbnZlcnNlKCkgY2FuJ3QgaW52ZXJ0IG1h
dHJpeCwgZGV0ZXJtaW5hbnQgaXMgMCI7CisgICAgICAgICAgICAgICAgdGhpcy5feCA9IHRoaXMu
X3ggKiBsOworICAgICAgICAgICAgICAgIHRoaXMuX3kgPSB0aGlzLl95ICogbDsKKyAgICAgICAg
ICAgICAgICB0aGlzLl96ID0gdGhpcy5feiAqIGw7CisgICAgICAgICAgICAgICAgdGhpcy5fdyA9
IHRoaXMuX3cgKiBsOwogCi0gICAgICAgICAgICAgICAgaWYgKCB0aHJvd09uRGVnZW5lcmF0ZSA9
PT0gdHJ1ZSApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIG1zZyApOworICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpOwog
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggbXNnICk7CisgICAgICAgIH0sCiAKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoIHEsIHAgKSB7CiAK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pZGVudGl0eSgpOworICAgICAgICAgICAgaWYg
KCBwICE9PSB1bmRlZmluZWQgKSB7CisKKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdU
SFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVu
dC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4nICk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyggcSwgcCApOwogCiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBkZXRJbnYgPSAxIC8gZGV0OworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyggdGhpcywgcSApOwogCi0gICAgICAg
ICAgICB0ZVsgMCBdID0gdDExICogZGV0SW52OwotICAgICAgICAgICAgdGVbIDEgXSA9ICggbjI0
ICogbjMzICogbjQxIC0gbjIzICogbjM0ICogbjQxIC0gbjI0ICogbjMxICogbjQzICsgbjIxICog
bjM0ICogbjQzICsgbjIzICogbjMxICogbjQ0IC0gbjIxICogbjMzICogbjQ0ICkgKiBkZXRJbnY7
Ci0gICAgICAgICAgICB0ZVsgMiBdID0gKCBuMjIgKiBuMzQgKiBuNDEgLSBuMjQgKiBuMzIgKiBu
NDEgKyBuMjQgKiBuMzEgKiBuNDIgLSBuMjEgKiBuMzQgKiBuNDIgLSBuMjIgKiBuMzEgKiBuNDQg
KyBuMjEgKiBuMzIgKiBuNDQgKSAqIGRldEludjsKLSAgICAgICAgICAgIHRlWyAzIF0gPSAoIG4y
MyAqIG4zMiAqIG40MSAtIG4yMiAqIG4zMyAqIG40MSAtIG4yMyAqIG4zMSAqIG40MiArIG4yMSAq
IG4zMyAqIG40MiArIG4yMiAqIG4zMSAqIG40MyAtIG4yMSAqIG4zMiAqIG40MyApICogZGV0SW52
OworICAgICAgICB9LAogCi0gICAgICAgICAgICB0ZVsgNCBdID0gdDEyICogZGV0SW52OwotICAg
ICAgICAgICAgdGVbIDUgXSA9ICggbjEzICogbjM0ICogbjQxIC0gbjE0ICogbjMzICogbjQxICsg
bjE0ICogbjMxICogbjQzIC0gbjExICogbjM0ICogbjQzIC0gbjEzICogbjMxICogbjQ0ICsgbjEx
ICogbjMzICogbjQ0ICkgKiBkZXRJbnY7Ci0gICAgICAgICAgICB0ZVsgNiBdID0gKCBuMTQgKiBu
MzIgKiBuNDEgLSBuMTIgKiBuMzQgKiBuNDEgLSBuMTQgKiBuMzEgKiBuNDIgKyBuMTEgKiBuMzQg
KiBuNDIgKyBuMTIgKiBuMzEgKiBuNDQgLSBuMTEgKiBuMzIgKiBuNDQgKSAqIGRldEludjsKLSAg
ICAgICAgICAgIHRlWyA3IF0gPSAoIG4xMiAqIG4zMyAqIG40MSAtIG4xMyAqIG4zMiAqIG40MSAr
IG4xMyAqIG4zMSAqIG40MiAtIG4xMSAqIG4zMyAqIG40MiAtIG4xMiAqIG4zMSAqIG40MyArIG4x
MSAqIG4zMiAqIG40MyApICogZGV0SW52OworICAgICAgICBwcmVtdWx0aXBseTogZnVuY3Rpb24g
KCBxICkgewogCi0gICAgICAgICAgICB0ZVsgOCBdID0gdDEzICogZGV0SW52OwotICAgICAgICAg
ICAgdGVbIDkgXSA9ICggbjE0ICogbjIzICogbjQxIC0gbjEzICogbjI0ICogbjQxIC0gbjE0ICog
bjIxICogbjQzICsgbjExICogbjI0ICogbjQzICsgbjEzICogbjIxICogbjQ0IC0gbjExICogbjIz
ICogbjQ0ICkgKiBkZXRJbnY7Ci0gICAgICAgICAgICB0ZVsgMTAgXSA9ICggbjEyICogbjI0ICog
bjQxIC0gbjE0ICogbjIyICogbjQxICsgbjE0ICogbjIxICogbjQyIC0gbjExICogbjI0ICogbjQy
IC0gbjEyICogbjIxICogbjQ0ICsgbjExICogbjIyICogbjQ0ICkgKiBkZXRJbnY7Ci0gICAgICAg
ICAgICB0ZVsgMTEgXSA9ICggbjEzICogbjIyICogbjQxIC0gbjEyICogbjIzICogbjQxIC0gbjEz
ICogbjIxICogbjQyICsgbjExICogbjIzICogbjQyICsgbjEyICogbjIxICogbjQzIC0gbjExICog
bjIyICogbjQzICkgKiBkZXRJbnY7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBseVF1
YXRlcm5pb25zKCBxLCB0aGlzICk7CiAKLSAgICAgICAgICAgIHRlWyAxMiBdID0gdDE0ICogZGV0
SW52OwotICAgICAgICAgICAgdGVbIDEzIF0gPSAoIG4xMyAqIG4yNCAqIG4zMSAtIG4xNCAqIG4y
MyAqIG4zMSArIG4xNCAqIG4yMSAqIG4zMyAtIG4xMSAqIG4yNCAqIG4zMyAtIG4xMyAqIG4yMSAq
IG4zNCArIG4xMSAqIG4yMyAqIG4zNCApICogZGV0SW52OwotICAgICAgICAgICAgdGVbIDE0IF0g
PSAoIG4xNCAqIG4yMiAqIG4zMSAtIG4xMiAqIG4yNCAqIG4zMSAtIG4xNCAqIG4yMSAqIG4zMiAr
IG4xMSAqIG4yNCAqIG4zMiArIG4xMiAqIG4yMSAqIG4zNCAtIG4xMSAqIG4yMiAqIG4zNCApICog
ZGV0SW52OwotICAgICAgICAgICAgdGVbIDE1IF0gPSAoIG4xMiAqIG4yMyAqIG4zMSAtIG4xMyAq
IG4yMiAqIG4zMSArIG4xMyAqIG4yMSAqIG4zMiAtIG4xMSAqIG4yMyAqIG4zMiAtIG4xMiAqIG4y
MSAqIG4zMyArIG4xMSAqIG4yMiAqIG4zMyApICogZGV0SW52OworICAgICAgICB9LAogCi0gICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgbXVsdGlwbHlRdWF0ZXJuaW9uczogZnVuY3Rp
b24gKCBhLCBiICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAvLyBmcm9tIGh0dHA6Ly93
d3cuZXVjbGlkZWFuc3BhY2UuY29tL21hdGhzL2FsZ2VicmEvcmVhbE5vcm1lZEFsZ2VicmEvcXVh
dGVybmlvbnMvY29kZS9pbmRleC5odG0KIAotICAgICAgICBzY2FsZTogZnVuY3Rpb24gKCB2ICkg
eworICAgICAgICAgICAgdmFyIHFheCA9IGEuX3gsIHFheSA9IGEuX3ksIHFheiA9IGEuX3osIHFh
dyA9IGEuX3c7CisgICAgICAgICAgICB2YXIgcWJ4ID0gYi5feCwgcWJ5ID0gYi5feSwgcWJ6ID0g
Yi5feiwgcWJ3ID0gYi5fdzsKIAotICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsK
LSAgICAgICAgICAgIHZhciB4ID0gdi54LCB5ID0gdi55LCB6ID0gdi56OworICAgICAgICAgICAg
dGhpcy5feCA9IHFheCAqIHFidyArIHFhdyAqIHFieCArIHFheSAqIHFieiAtIHFheiAqIHFieTsK
KyAgICAgICAgICAgIHRoaXMuX3kgPSBxYXkgKiBxYncgKyBxYXcgKiBxYnkgKyBxYXogKiBxYngg
LSBxYXggKiBxYno7CisgICAgICAgICAgICB0aGlzLl96ID0gcWF6ICogcWJ3ICsgcWF3ICogcWJ6
ICsgcWF4ICogcWJ5IC0gcWF5ICogcWJ4OworICAgICAgICAgICAgdGhpcy5fdyA9IHFhdyAqIHFi
dyAtIHFheCAqIHFieCAtIHFheSAqIHFieSAtIHFheiAqIHFiejsKIAotICAgICAgICAgICAgdGVb
IDAgXSAqPSB4OyB0ZVsgNCBdICo9IHk7IHRlWyA4IF0gKj0gejsKLSAgICAgICAgICAgIHRlWyAx
IF0gKj0geDsgdGVbIDUgXSAqPSB5OyB0ZVsgOSBdICo9IHo7Ci0gICAgICAgICAgICB0ZVsgMiBd
ICo9IHg7IHRlWyA2IF0gKj0geTsgdGVbIDEwIF0gKj0gejsKLSAgICAgICAgICAgIHRlWyAzIF0g
Kj0geDsgdGVbIDcgXSAqPSB5OyB0ZVsgMTEgXSAqPSB6OworICAgICAgICAgICAgdGhpcy5fb25D
aGFuZ2VDYWxsYmFjaygpOwogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9
LAogCi0gICAgICAgIGdldE1heFNjYWxlT25BeGlzOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHNs
ZXJwOiBmdW5jdGlvbiAoIHFiLCB0ICkgewogCi0gICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVs
ZW1lbnRzOworICAgICAgICAgICAgaWYgKCB0ID09PSAwICkgcmV0dXJuIHRoaXM7CisgICAgICAg
ICAgICBpZiAoIHQgPT09IDEgKSByZXR1cm4gdGhpcy5jb3B5KCBxYiApOwogCi0gICAgICAgICAg
ICB2YXIgc2NhbGVYU3EgPSB0ZVsgMCBdICogdGVbIDAgXSArIHRlWyAxIF0gKiB0ZVsgMSBdICsg
dGVbIDIgXSAqIHRlWyAyIF07Ci0gICAgICAgICAgICB2YXIgc2NhbGVZU3EgPSB0ZVsgNCBdICog
dGVbIDQgXSArIHRlWyA1IF0gKiB0ZVsgNSBdICsgdGVbIDYgXSAqIHRlWyA2IF07Ci0gICAgICAg
ICAgICB2YXIgc2NhbGVaU3EgPSB0ZVsgOCBdICogdGVbIDggXSArIHRlWyA5IF0gKiB0ZVsgOSBd
ICsgdGVbIDEwIF0gKiB0ZVsgMTAgXTsKKyAgICAgICAgICAgIHZhciB4ID0gdGhpcy5feCwgeSA9
IHRoaXMuX3ksIHogPSB0aGlzLl96LCB3ID0gdGhpcy5fdzsKIAotICAgICAgICAgICAgcmV0dXJu
IE1hdGguc3FydCggTWF0aC5tYXgoIHNjYWxlWFNxLCBzY2FsZVlTcSwgc2NhbGVaU3EgKSApOwor
ICAgICAgICAgICAgLy8gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvYWxnZWJy
YS9yZWFsTm9ybWVkQWxnZWJyYS9xdWF0ZXJuaW9ucy9zbGVycC8KIAotICAgICAgICB9LAorICAg
ICAgICAgICAgdmFyIGNvc0hhbGZUaGV0YSA9IHcgKiBxYi5fdyArIHggKiBxYi5feCArIHkgKiBx
Yi5feSArIHogKiBxYi5fejsKIAotICAgICAgICBtYWtlVHJhbnNsYXRpb246IGZ1bmN0aW9uICgg
eCwgeSwgeiApIHsKKyAgICAgICAgICAgIGlmICggY29zSGFsZlRoZXRhIDwgMCApIHsKIAotICAg
ICAgICAgICAgdGhpcy5zZXQoCisgICAgICAgICAgICAgICAgdGhpcy5fdyA9IC0gcWIuX3c7Cisg
ICAgICAgICAgICAgICAgdGhpcy5feCA9IC0gcWIuX3g7CisgICAgICAgICAgICAgICAgdGhpcy5f
eSA9IC0gcWIuX3k7CisgICAgICAgICAgICAgICAgdGhpcy5feiA9IC0gcWIuX3o7CiAKLSAgICAg
ICAgICAgICAgICAxLCAwLCAwLCB4LAotICAgICAgICAgICAgICAgIDAsIDEsIDAsIHksCi0gICAg
ICAgICAgICAgICAgMCwgMCwgMSwgeiwKLSAgICAgICAgICAgICAgICAwLCAwLCAwLCAxCisgICAg
ICAgICAgICAgICAgY29zSGFsZlRoZXRhID0gLSBjb3NIYWxmVGhldGE7CiAKLSAgICAgICAgICAg
ICk7CisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgICAgICAgICB0aGlzLmNvcHkoIHFiICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAg
IH0KIAotICAgICAgICBtYWtlUm90YXRpb25YOiBmdW5jdGlvbiAoIHRoZXRhICkgeworICAgICAg
ICAgICAgaWYgKCBjb3NIYWxmVGhldGEgPj0gMS4wICkgewogCi0gICAgICAgICAgICB2YXIgYyA9
IE1hdGguY29zKCB0aGV0YSApLCBzID0gTWF0aC5zaW4oIHRoZXRhICk7CisgICAgICAgICAgICAg
ICAgdGhpcy5fdyA9IHc7CisgICAgICAgICAgICAgICAgdGhpcy5feCA9IHg7CisgICAgICAgICAg
ICAgICAgdGhpcy5feSA9IHk7CisgICAgICAgICAgICAgICAgdGhpcy5feiA9IHo7CiAKLSAgICAg
ICAgICAgIHRoaXMuc2V0KAorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAg
ICAgICAgICAgMSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAwLCBjLCAtIHMsIDAsCi0gICAg
ICAgICAgICAgICAgMCwgcywgYywgMCwKLSAgICAgICAgICAgICAgICAwLCAwLCAwLCAxCisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICk7CisgICAgICAgICAgICB2YXIgc3FyU2luSGFsZlRo
ZXRhID0gMS4wIC0gY29zSGFsZlRoZXRhICogY29zSGFsZlRoZXRhOwogCi0gICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgICAgIGlmICggc3FyU2luSGFsZlRoZXRhIDw9IE51bWJlci5F
UFNJTE9OICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgdmFyIHMgPSAxIC0gdDsK
KyAgICAgICAgICAgICAgICB0aGlzLl93ID0gcyAqIHcgKyB0ICogdGhpcy5fdzsKKyAgICAgICAg
ICAgICAgICB0aGlzLl94ID0gcyAqIHggKyB0ICogdGhpcy5feDsKKyAgICAgICAgICAgICAgICB0
aGlzLl95ID0gcyAqIHkgKyB0ICogdGhpcy5feTsKKyAgICAgICAgICAgICAgICB0aGlzLl96ID0g
cyAqIHogKyB0ICogdGhpcy5fejsKIAotICAgICAgICBtYWtlUm90YXRpb25ZOiBmdW5jdGlvbiAo
IHRoZXRhICkgeworICAgICAgICAgICAgICAgIHRoaXMubm9ybWFsaXplKCk7CisgICAgICAgICAg
ICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpOwogCi0gICAgICAgICAgICB2YXIgYyA9IE1h
dGguY29zKCB0aGV0YSApLCBzID0gTWF0aC5zaW4oIHRoZXRhICk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIHRoaXMuc2V0KAorICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgIGMsIDAsIHMsIDAsCi0gICAgICAgICAgICAgICAgIDAsIDEsIDAsIDAs
Ci0gICAgICAgICAgICAgICAgLSBzLCAwLCBjLCAwLAotICAgICAgICAgICAgICAgICAwLCAwLCAw
LCAxCisgICAgICAgICAgICB2YXIgc2luSGFsZlRoZXRhID0gTWF0aC5zcXJ0KCBzcXJTaW5IYWxm
VGhldGEgKTsKKyAgICAgICAgICAgIHZhciBoYWxmVGhldGEgPSBNYXRoLmF0YW4yKCBzaW5IYWxm
VGhldGEsIGNvc0hhbGZUaGV0YSApOworICAgICAgICAgICAgdmFyIHJhdGlvQSA9IE1hdGguc2lu
KCAoIDEgLSB0ICkgKiBoYWxmVGhldGEgKSAvIHNpbkhhbGZUaGV0YSwKKyAgICAgICAgICAgICAg
ICByYXRpb0IgPSBNYXRoLnNpbiggdCAqIGhhbGZUaGV0YSApIC8gc2luSGFsZlRoZXRhOwogCi0g
ICAgICAgICAgICApOworICAgICAgICAgICAgdGhpcy5fdyA9ICggdyAqIHJhdGlvQSArIHRoaXMu
X3cgKiByYXRpb0IgKTsKKyAgICAgICAgICAgIHRoaXMuX3ggPSAoIHggKiByYXRpb0EgKyB0aGlz
Ll94ICogcmF0aW9CICk7CisgICAgICAgICAgICB0aGlzLl95ID0gKCB5ICogcmF0aW9BICsgdGhp
cy5feSAqIHJhdGlvQiApOworICAgICAgICAgICAgdGhpcy5feiA9ICggeiAqIHJhdGlvQSArIHRo
aXMuX3ogKiByYXRpb0IgKTsKKworICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygp
OwogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIG1h
a2VSb3RhdGlvblo6IGZ1bmN0aW9uICggdGhldGEgKSB7CisgICAgICAgIGVxdWFsczogZnVuY3Rp
b24gKCBxdWF0ZXJuaW9uICkgewogCi0gICAgICAgICAgICB2YXIgYyA9IE1hdGguY29zKCB0aGV0
YSApLCBzID0gTWF0aC5zaW4oIHRoZXRhICk7CisgICAgICAgICAgICByZXR1cm4gKCBxdWF0ZXJu
aW9uLl94ID09PSB0aGlzLl94ICkgJiYgKCBxdWF0ZXJuaW9uLl95ID09PSB0aGlzLl95ICkgJiYg
KCBxdWF0ZXJuaW9uLl96ID09PSB0aGlzLl96ICkgJiYgKCBxdWF0ZXJuaW9uLl93ID09PSB0aGlz
Ll93ICk7CiAKLSAgICAgICAgICAgIHRoaXMuc2V0KAorICAgICAgICB9LAogCi0gICAgICAgICAg
ICAgICAgYywgLSBzLCAwLCAwLAotICAgICAgICAgICAgICAgIHMsIGMsIDAsIDAsCi0gICAgICAg
ICAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgICAgICAgICAwLCAwLCAwLCAxCisgICAgICAg
IGZyb21BcnJheTogZnVuY3Rpb24gKCBhcnJheSwgb2Zmc2V0ICkgewogCi0gICAgICAgICAgICAp
OworICAgICAgICAgICAgaWYgKCBvZmZzZXQgPT09IHVuZGVmaW5lZCApIG9mZnNldCA9IDA7CisK
KyAgICAgICAgICAgIHRoaXMuX3ggPSBhcnJheVsgb2Zmc2V0IF07CisgICAgICAgICAgICB0aGlz
Ll95ID0gYXJyYXlbIG9mZnNldCArIDEgXTsKKyAgICAgICAgICAgIHRoaXMuX3ogPSBhcnJheVsg
b2Zmc2V0ICsgMiBdOworICAgICAgICAgICAgdGhpcy5fdyA9IGFycmF5WyBvZmZzZXQgKyAzIF07
CisKKyAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTsKIAogICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBtYWtlUm90YXRpb25BeGlzOiBm
dW5jdGlvbiAoIGF4aXMsIGFuZ2xlICkgeworICAgICAgICB0b0FycmF5OiBmdW5jdGlvbiAoIGFy
cmF5LCBvZmZzZXQgKSB7CiAKLSAgICAgICAgICAgIC8vIEJhc2VkIG9uIGh0dHA6Ly93d3cuZ2Ft
ZWRldi5uZXQvcmVmZXJlbmNlL2FydGljbGVzL2FydGljbGUxMTk5LmFzcAorICAgICAgICAgICAg
aWYgKCBhcnJheSA9PT0gdW5kZWZpbmVkICkgYXJyYXkgPSBbXTsKKyAgICAgICAgICAgIGlmICgg
b2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwOwogCi0gICAgICAgICAgICB2YXIgYyA9
IE1hdGguY29zKCBhbmdsZSApOwotICAgICAgICAgICAgdmFyIHMgPSBNYXRoLnNpbiggYW5nbGUg
KTsKLSAgICAgICAgICAgIHZhciB0ID0gMSAtIGM7Ci0gICAgICAgICAgICB2YXIgeCA9IGF4aXMu
eCwgeSA9IGF4aXMueSwgeiA9IGF4aXMuejsKLSAgICAgICAgICAgIHZhciB0eCA9IHQgKiB4LCB0
eSA9IHQgKiB5OworICAgICAgICAgICAgYXJyYXlbIG9mZnNldCBdID0gdGhpcy5feDsKKyAgICAg
ICAgICAgIGFycmF5WyBvZmZzZXQgKyAxIF0gPSB0aGlzLl95OworICAgICAgICAgICAgYXJyYXlb
IG9mZnNldCArIDIgXSA9IHRoaXMuX3o7CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMyBd
ID0gdGhpcy5fdzsKIAotICAgICAgICAgICAgdGhpcy5zZXQoCisgICAgICAgICAgICByZXR1cm4g
YXJyYXk7CiAKLSAgICAgICAgICAgICAgICB0eCAqIHggKyBjLCB0eCAqIHkgLSBzICogeiwgdHgg
KiB6ICsgcyAqIHksIDAsCi0gICAgICAgICAgICAgICAgdHggKiB5ICsgcyAqIHosIHR5ICogeSAr
IGMsIHR5ICogeiAtIHMgKiB4LCAwLAotICAgICAgICAgICAgICAgIHR4ICogeiAtIHMgKiB5LCB0
eSAqIHogKyBzICogeCwgdCAqIHogKiB6ICsgYywgMCwKLSAgICAgICAgICAgICAgICAwLCAwLCAw
LCAxCisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICk7CisgICAgICAgIF9vbkNoYW5nZTogZnVu
Y3Rpb24gKCBjYWxsYmFjayApIHsKIAotICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGNhbGxiYWNrOworCisgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIG1ha2VTY2FsZTogZnVuY3Rpb24g
KCB4LCB5LCB6ICkgeworICAgICAgICBfb25DaGFuZ2VDYWxsYmFjazogZnVuY3Rpb24gKCkge30K
IAotICAgICAgICAgICAgdGhpcy5zZXQoCisgICAgfSApOwogCi0gICAgICAgICAgICAgICAgeCwg
MCwgMCwgMCwKLSAgICAgICAgICAgICAgICAwLCB5LCAwLCAwLAotICAgICAgICAgICAgICAgIDAs
IDAsIHosIDAsCi0gICAgICAgICAgICAgICAgMCwgMCwgMCwgMQorICAgIC8qKgorICAgICAqIEBh
dXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICogQGF1dGhvciBraWxlIC8g
aHR0cDovL2tpbGUuc3RyYXZhZ2FuemEub3JnLworICAgICAqIEBhdXRob3IgcGhpbG9nYiAvIGh0
dHA6Ly9ibG9nLnRoZWppdC5vcmcvCisgICAgICogQGF1dGhvciBtaWthZWwgZW10aW5nZXIgLyBo
dHRwOi8vZ29tby5zZS8KKyAgICAgKiBAYXV0aG9yIGVncmFldGhlciAvIGh0dHA6Ly9lZ3JhZXRo
ZXIuY29tLworICAgICAqIEBhdXRob3IgV2VzdExhbmdsZXkgLyBodHRwOi8vZ2l0aHViLmNvbS9X
ZXN0TGFuZ2xleQorICAgICAqLwogCi0gICAgICAgICAgICApOworICAgIGZ1bmN0aW9uIFZlY3Rv
cjMoIHgsIHksIHogKSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB0aGlz
LnggPSB4IHx8IDA7CisgICAgICAgIHRoaXMueSA9IHkgfHwgMDsKKyAgICAgICAgdGhpcy56ID0g
eiB8fCAwOwogCi0gICAgICAgIH0sCisgICAgfQogCi0gICAgICAgIG1ha2VTaGVhcjogZnVuY3Rp
b24gKCB4LCB5LCB6ICkgeworICAgIE9iamVjdC5hc3NpZ24oIFZlY3RvcjMucHJvdG90eXBlLCB7
CiAKLSAgICAgICAgICAgIHRoaXMuc2V0KAorICAgICAgICBpc1ZlY3RvcjM6IHRydWUsCiAKLSAg
ICAgICAgICAgICAgICAxLCB5LCB6LCAwLAotICAgICAgICAgICAgICAgIHgsIDEsIHosIDAsCi0g
ICAgICAgICAgICAgICAgeCwgeSwgMSwgMCwKLSAgICAgICAgICAgICAgICAwLCAwLCAwLCAxCisg
ICAgICAgIHNldDogZnVuY3Rpb24gKCB4LCB5LCB6ICkgewogCi0gICAgICAgICAgICApOworICAg
ICAgICAgICAgdGhpcy54ID0geDsKKyAgICAgICAgICAgIHRoaXMueSA9IHk7CisgICAgICAgICAg
ICB0aGlzLnogPSB6OwogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAog
Ci0gICAgICAgIGNvbXBvc2U6IGZ1bmN0aW9uICggcG9zaXRpb24sIHF1YXRlcm5pb24sIHNjYWxl
ICkgewotCi0gICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzOwotCi0gICAgICAgICAg
ICB2YXIgeCA9IHF1YXRlcm5pb24uX3gsIHkgPSBxdWF0ZXJuaW9uLl95LCB6ID0gcXVhdGVybmlv
bi5feiwgdyA9IHF1YXRlcm5pb24uX3c7Ci0gICAgICAgICAgICB2YXIgeDIgPSB4ICsgeCwgeTIg
PSB5ICsgeSwgejIgPSB6ICsgejsKLSAgICAgICAgICAgIHZhciB4eCA9IHggKiB4MiwgeHkgPSB4
ICogeTIsIHh6ID0geCAqIHoyOwotICAgICAgICAgICAgdmFyIHl5ID0geSAqIHkyLCB5eiA9IHkg
KiB6MiwgenogPSB6ICogejI7Ci0gICAgICAgICAgICB2YXIgd3ggPSB3ICogeDIsIHd5ID0gdyAq
IHkyLCB3eiA9IHcgKiB6MjsKKyAgICAgICAgc2V0U2NhbGFyOiBmdW5jdGlvbiAoIHNjYWxhciAp
IHsKIAotICAgICAgICAgICAgdmFyIHN4ID0gc2NhbGUueCwgc3kgPSBzY2FsZS55LCBzeiA9IHNj
YWxlLno7CisgICAgICAgICAgICB0aGlzLnggPSBzY2FsYXI7CisgICAgICAgICAgICB0aGlzLnkg
PSBzY2FsYXI7CisgICAgICAgICAgICB0aGlzLnogPSBzY2FsYXI7CiAKLSAgICAgICAgICAgICAg
ICB0ZVsgMCBdID0gKCAxIC0gKCB5eSArIHp6ICkgKSAqIHN4OwotICAgICAgICAgICAgICAgIHRl
WyAxIF0gPSAoIHh5ICsgd3ogKSAqIHN4OwotICAgICAgICAgICAgICAgIHRlWyAyIF0gPSAoIHh6
IC0gd3kgKSAqIHN4OwotICAgICAgICAgICAgICAgIHRlWyAzIF0gPSAwOworICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICB0ZVsgNCBdID0gKCB4eSAtIHd6ICkgKiBz
eTsKLSAgICAgICAgICAgICAgICB0ZVsgNSBdID0gKCAxIC0gKCB4eCArIHp6ICkgKSAqIHN5Owot
ICAgICAgICAgICAgICAgIHRlWyA2IF0gPSAoIHl6ICsgd3ggKSAqIHN5OwotICAgICAgICAgICAg
ICAgIHRlWyA3IF0gPSAwOworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgdGVbIDggXSA9
ICggeHogKyB3eSApICogc3o7Ci0gICAgICAgICAgICAgICAgdGVbIDkgXSA9ICggeXogLSB3eCAp
ICogc3o7Ci0gICAgICAgICAgICAgICAgdGVbIDEwIF0gPSAoIDEgLSAoIHh4ICsgeXkgKSApICog
c3o7Ci0gICAgICAgICAgICAgICAgdGVbIDExIF0gPSAwOworICAgICAgICBzZXRYOiBmdW5jdGlv
biAoIHggKSB7CiAKLSAgICAgICAgICAgICAgICB0ZVsgMTIgXSA9IHBvc2l0aW9uLng7Ci0gICAg
ICAgICAgICAgICAgdGVbIDEzIF0gPSBwb3NpdGlvbi55OwotICAgICAgICAgICAgICAgIHRlWyAx
NCBdID0gcG9zaXRpb24uejsKLSAgICAgICAgICAgICAgICB0ZVsgMTUgXSA9IDE7CisgICAgICAg
ICAgICB0aGlzLnggPSB4OwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIGRlY29tcG9zZTogZnVu
Y3Rpb24gKCkgeworICAgICAgICBzZXRZOiBmdW5jdGlvbiAoIHkgKSB7CiAKLSAgICAgICAgICAg
IHZhciB2ZWN0b3IgPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgdmFyIG1hdHJpeCA9IG5l
dyBNYXRyaXg0KCk7CisgICAgICAgICAgICB0aGlzLnkgPSB5OwogCi0gICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb24gZGVjb21wb3NlKCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgc2NhbGUgKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMu
ZWxlbWVudHM7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB2YXIgc3ggPSB2ZWN0b3Iu
c2V0KCB0ZVsgMCBdLCB0ZVsgMSBdLCB0ZVsgMiBdICkubGVuZ3RoKCk7Ci0gICAgICAgICAgICAg
ICAgdmFyIHN5ID0gdmVjdG9yLnNldCggdGVbIDQgXSwgdGVbIDUgXSwgdGVbIDYgXSApLmxlbmd0
aCgpOwotICAgICAgICAgICAgICAgIHZhciBzeiA9IHZlY3Rvci5zZXQoIHRlWyA4IF0sIHRlWyA5
IF0sIHRlWyAxMCBdICkubGVuZ3RoKCk7CisgICAgICAgIHNldFo6IGZ1bmN0aW9uICggeiApIHsK
IAotICAgICAgICAgICAgICAgIC8vIGlmIGRldGVybWluZSBpcyBuZWdhdGl2ZSwgd2UgbmVlZCB0
byBpbnZlcnQgb25lIHNjYWxlCi0gICAgICAgICAgICAgICAgdmFyIGRldCA9IHRoaXMuZGV0ZXJt
aW5hbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIGRldCA8IDAgKSBzeCA9IC0gc3g7CisgICAg
ICAgICAgICB0aGlzLnogPSB6OwogCi0gICAgICAgICAgICAgICAgcG9zaXRpb24ueCA9IHRlWyAx
MiBdOwotICAgICAgICAgICAgICAgIHBvc2l0aW9uLnkgPSB0ZVsgMTMgXTsKLSAgICAgICAgICAg
ICAgICBwb3NpdGlvbi56ID0gdGVbIDE0IF07CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAot
ICAgICAgICAgICAgICAgIC8vIHNjYWxlIHRoZSByb3RhdGlvbiBwYXJ0Ci0gICAgICAgICAgICAg
ICAgbWF0cml4LmNvcHkoIHRoaXMgKTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHZh
ciBpbnZTWCA9IDEgLyBzeDsKLSAgICAgICAgICAgICAgICB2YXIgaW52U1kgPSAxIC8gc3k7Ci0g
ICAgICAgICAgICAgICAgdmFyIGludlNaID0gMSAvIHN6OworICAgICAgICBzZXRDb21wb25lbnQ6
IGZ1bmN0aW9uICggaW5kZXgsIHZhbHVlICkgewogCi0gICAgICAgICAgICAgICAgbWF0cml4LmVs
ZW1lbnRzWyAwIF0gKj0gaW52U1g7Ci0gICAgICAgICAgICAgICAgbWF0cml4LmVsZW1lbnRzWyAx
IF0gKj0gaW52U1g7Ci0gICAgICAgICAgICAgICAgbWF0cml4LmVsZW1lbnRzWyAyIF0gKj0gaW52
U1g7CisgICAgICAgICAgICBzd2l0Y2ggKCBpbmRleCApIHsKIAotICAgICAgICAgICAgICAgIG1h
dHJpeC5lbGVtZW50c1sgNCBdICo9IGludlNZOwotICAgICAgICAgICAgICAgIG1hdHJpeC5lbGVt
ZW50c1sgNSBdICo9IGludlNZOwotICAgICAgICAgICAgICAgIG1hdHJpeC5lbGVtZW50c1sgNiBd
ICo9IGludlNZOworICAgICAgICAgICAgICAgIGNhc2UgMDogdGhpcy54ID0gdmFsdWU7IGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgMTogdGhpcy55ID0gdmFsdWU7IGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgMjogdGhpcy56ID0gdmFsdWU7IGJyZWFrOworICAgICAgICAgICAgICAg
IGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvciggJ2luZGV4IGlzIG91dCBvZiByYW5nZTogJyArIGlu
ZGV4ICk7CiAKLSAgICAgICAgICAgICAgICBtYXRyaXguZWxlbWVudHNbIDggXSAqPSBpbnZTWjsK
LSAgICAgICAgICAgICAgICBtYXRyaXguZWxlbWVudHNbIDkgXSAqPSBpbnZTWjsKLSAgICAgICAg
ICAgICAgICBtYXRyaXguZWxlbWVudHNbIDEwIF0gKj0gaW52U1o7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBxdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeCggbWF0cml4
ICk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIHNjYWxlLngg
PSBzeDsKLSAgICAgICAgICAgICAgICBzY2FsZS55ID0gc3k7Ci0gICAgICAgICAgICAgICAgc2Nh
bGUueiA9IHN6OworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgIGdldENvbXBvbmVudDogZnVuY3Rpb24gKCBpbmRleCApIHsKIAotICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIHN3aXRjaCAoIGluZGV4ICkgewogCi0gICAgICAgIH0oKSwKKyAgICAg
ICAgICAgICAgICBjYXNlIDA6IHJldHVybiB0aGlzLng7CisgICAgICAgICAgICAgICAgY2FzZSAx
OiByZXR1cm4gdGhpcy55OworICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIHRoaXMuejsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoICdpbmRleCBpcyBvdXQg
b2YgcmFuZ2U6ICcgKyBpbmRleCApOwogCi0gICAgICAgIG1ha2VQZXJzcGVjdGl2ZTogZnVuY3Rp
b24gKCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhciApIHsKKyAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCBmYXIgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgfSwK
IAotICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdHJpeDQ6IC5tYWtlUGVy
c3BlY3RpdmUoKSBoYXMgYmVlbiByZWRlZmluZWQgYW5kIGhhcyBhIG5ldyBzaWduYXR1cmUuIFBs
ZWFzZSBjaGVjayB0aGUgZG9jcy4nICk7CisgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CiAK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcigg
dGhpcy54LCB0aGlzLnksIHRoaXMueiApOwogCi0gICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVs
ZW1lbnRzOwotICAgICAgICAgICAgdmFyIHggPSAyICogbmVhciAvICggcmlnaHQgLSBsZWZ0ICk7
Ci0gICAgICAgICAgICB2YXIgeSA9IDIgKiBuZWFyIC8gKCB0b3AgLSBib3R0b20gKTsKKyAgICAg
ICAgfSwKIAotICAgICAgICAgICAgdmFyIGEgPSAoIHJpZ2h0ICsgbGVmdCApIC8gKCByaWdodCAt
IGxlZnQgKTsKLSAgICAgICAgICAgIHZhciBiID0gKCB0b3AgKyBib3R0b20gKSAvICggdG9wIC0g
Ym90dG9tICk7Ci0gICAgICAgICAgICB2YXIgYyA9IC0gKCBmYXIgKyBuZWFyICkgLyAoIGZhciAt
IG5lYXIgKTsKLSAgICAgICAgICAgIHZhciBkID0gLSAyICogZmFyICogbmVhciAvICggZmFyIC0g
bmVhciApOworICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHYgKSB7CiAKLSAgICAgICAgICAgIHRl
WyAwIF0gPSB4OyAgICB0ZVsgNCBdID0gMDsgICAgdGVbIDggXSA9IGE7ICAgIHRlWyAxMiBdID0g
MDsKLSAgICAgICAgICAgIHRlWyAxIF0gPSAwOyAgICB0ZVsgNSBdID0geTsgICAgdGVbIDkgXSA9
IGI7ICAgIHRlWyAxMyBdID0gMDsKLSAgICAgICAgICAgIHRlWyAyIF0gPSAwOyAgICB0ZVsgNiBd
ID0gMDsgICAgdGVbIDEwIF0gPSBjOyAgIHRlWyAxNCBdID0gZDsKLSAgICAgICAgICAgIHRlWyAz
IF0gPSAwOyAgICB0ZVsgNyBdID0gMDsgICAgdGVbIDExIF0gPSAtIDE7IHRlWyAxNSBdID0gMDsK
KyAgICAgICAgICAgIHRoaXMueCA9IHYueDsKKyAgICAgICAgICAgIHRoaXMueSA9IHYueTsKKyAg
ICAgICAgICAgIHRoaXMueiA9IHYuejsKIAogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAg
ICAgICAgfSwKIAotICAgICAgICBtYWtlT3J0aG9ncmFwaGljOiBmdW5jdGlvbiAoIGxlZnQsIHJp
Z2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkgeworICAgICAgICBhZGQ6IGZ1bmN0aW9uICgg
diwgdyApIHsKIAotICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKLSAgICAgICAg
ICAgIHZhciB3ID0gMS4wIC8gKCByaWdodCAtIGxlZnQgKTsKLSAgICAgICAgICAgIHZhciBoID0g
MS4wIC8gKCB0b3AgLSBib3R0b20gKTsKLSAgICAgICAgICAgIHZhciBwID0gMS4wIC8gKCBmYXIg
LSBuZWFyICk7CisgICAgICAgICAgICBpZiAoIHcgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAg
ICAgICAgdmFyIHggPSAoIHJpZ2h0ICsgbGVmdCApICogdzsKLSAgICAgICAgICAgIHZhciB5ID0g
KCB0b3AgKyBib3R0b20gKSAqIGg7Ci0gICAgICAgICAgICB2YXIgeiA9ICggZmFyICsgbmVhciAp
ICogcDsKKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IzOiAuYWRk
KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiAp
IGluc3RlYWQuJyApOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZFZlY3RvcnMoIHYs
IHcgKTsKIAotICAgICAgICAgICAgdGVbIDAgXSA9IDIgKiB3OyAgICB0ZVsgNCBdID0gMDsgICAg
dGVbIDggXSA9IDA7ICAgIHRlWyAxMiBdID0gLSB4OwotICAgICAgICAgICAgdGVbIDEgXSA9IDA7
ICAgIHRlWyA1IF0gPSAyICogaDsgICAgdGVbIDkgXSA9IDA7ICAgIHRlWyAxMyBdID0gLSB5Owot
ICAgICAgICAgICAgdGVbIDIgXSA9IDA7ICAgIHRlWyA2IF0gPSAwOyAgICB0ZVsgMTAgXSA9IC0g
MiAqIHA7IHRlWyAxNCBdID0gLSB6OwotICAgICAgICAgICAgdGVbIDMgXSA9IDA7ICAgIHRlWyA3
IF0gPSAwOyAgICB0ZVsgMTEgXSA9IDA7ICAgdGVbIDE1IF0gPSAxOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICB0aGlzLnggKz0gdi54OworICAgICAgICAgICAgdGhpcy55ICs9IHYueTsK
KyAgICAgICAgICAgIHRoaXMueiArPSB2Lno7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwog
CiAgICAgICAgIH0sCiAKLSAgICAgICAgZXF1YWxzOiBmdW5jdGlvbiAoIG1hdHJpeCApIHsKKyAg
ICAgICAgYWRkU2NhbGFyOiBmdW5jdGlvbiAoIHMgKSB7CiAKLSAgICAgICAgICAgIHZhciB0ZSA9
IHRoaXMuZWxlbWVudHM7Ci0gICAgICAgICAgICB2YXIgbWUgPSBtYXRyaXguZWxlbWVudHM7Cisg
ICAgICAgICAgICB0aGlzLnggKz0gczsKKyAgICAgICAgICAgIHRoaXMueSArPSBzOworICAgICAg
ICAgICAgdGhpcy56ICs9IHM7CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IDE2
OyBpICsrICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoIHRlWyBpIF0gIT09IG1lWyBpIF0gKSByZXR1cm4gZmFsc2U7CisgICAgICAgIH0sCiAKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgYWRkVmVjdG9yczogZnVuY3Rpb24gKCBhLCBiICkgewogCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMueCA9IGEueCArIGIueDsK
KyAgICAgICAgICAgIHRoaXMueSA9IGEueSArIGIueTsKKyAgICAgICAgICAgIHRoaXMueiA9IGEu
eiArIGIuejsKKworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAg
ICAgICBmcm9tQXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9mZnNldCApIHsKKyAgICAgICAgYWRk
U2NhbGVkVmVjdG9yOiBmdW5jdGlvbiAoIHYsIHMgKSB7CiAKLSAgICAgICAgICAgIGlmICggb2Zm
c2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwOworICAgICAgICAgICAgdGhpcy54ICs9IHYu
eCAqIHM7CisgICAgICAgICAgICB0aGlzLnkgKz0gdi55ICogczsKKyAgICAgICAgICAgIHRoaXMu
eiArPSB2LnogKiBzOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCAxNjsgaSAr
KyApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgdGhpcy5l
bGVtZW50c1sgaSBdID0gYXJyYXlbIGkgKyBvZmZzZXQgXTsKKyAgICAgICAgfSwKKworICAgICAg
ICBzdWI6IGZ1bmN0aW9uICggdiwgdyApIHsKKworICAgICAgICAgICAgaWYgKCB3ICE9PSB1bmRl
ZmluZWQgKSB7CisKKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3Iz
OiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycygg
YSwgYiApIGluc3RlYWQuJyApOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1YlZlY3Rv
cnMoIHYsIHcgKTsKIAogICAgICAgICAgICAgfQogCisgICAgICAgICAgICB0aGlzLnggLT0gdi54
OworICAgICAgICAgICAgdGhpcy55IC09IHYueTsKKyAgICAgICAgICAgIHRoaXMueiAtPSB2Lno7
CisKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgdG9B
cnJheTogZnVuY3Rpb24gKCBhcnJheSwgb2Zmc2V0ICkgeworICAgICAgICBzdWJTY2FsYXI6IGZ1
bmN0aW9uICggcyApIHsKIAotICAgICAgICAgICAgaWYgKCBhcnJheSA9PT0gdW5kZWZpbmVkICkg
YXJyYXkgPSBbXTsKLSAgICAgICAgICAgIGlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZz
ZXQgPSAwOworICAgICAgICAgICAgdGhpcy54IC09IHM7CisgICAgICAgICAgICB0aGlzLnkgLT0g
czsKKyAgICAgICAgICAgIHRoaXMueiAtPSBzOwogCi0gICAgICAgICAgICB2YXIgdGUgPSB0aGlz
LmVsZW1lbnRzOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIGFycmF5
WyBvZmZzZXQgXSA9IHRlWyAwIF07Ci0gICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMSBdID0g
dGVbIDEgXTsKLSAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyAyIF0gPSB0ZVsgMiBdOwotICAg
ICAgICAgICAgYXJyYXlbIG9mZnNldCArIDMgXSA9IHRlWyAzIF07CisgICAgICAgIH0sCiAKLSAg
ICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyA0IF0gPSB0ZVsgNCBdOwotICAgICAgICAgICAgYXJy
YXlbIG9mZnNldCArIDUgXSA9IHRlWyA1IF07Ci0gICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsg
NiBdID0gdGVbIDYgXTsKLSAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyA3IF0gPSB0ZVsgNyBd
OworICAgICAgICBzdWJWZWN0b3JzOiBmdW5jdGlvbiAoIGEsIGIgKSB7CiAKLSAgICAgICAgICAg
IGFycmF5WyBvZmZzZXQgKyA4IF0gPSB0ZVsgOCBdOwotICAgICAgICAgICAgYXJyYXlbIG9mZnNl
dCArIDkgXSA9IHRlWyA5IF07Ci0gICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMTAgXSA9IHRl
WyAxMCBdOwotICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDExIF0gPSB0ZVsgMTEgXTsKKyAg
ICAgICAgICAgIHRoaXMueCA9IGEueCAtIGIueDsKKyAgICAgICAgICAgIHRoaXMueSA9IGEueSAt
IGIueTsKKyAgICAgICAgICAgIHRoaXMueiA9IGEueiAtIGIuejsKIAotICAgICAgICAgICAgYXJy
YXlbIG9mZnNldCArIDEyIF0gPSB0ZVsgMTIgXTsKLSAgICAgICAgICAgIGFycmF5WyBvZmZzZXQg
KyAxMyBdID0gdGVbIDEzIF07Ci0gICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMTQgXSA9IHRl
WyAxNCBdOwotICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDE1IF0gPSB0ZVsgMTUgXTsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAg
ICAgIH0sCiAKLSAgICAgICAgfQorICAgICAgICBtdWx0aXBseTogZnVuY3Rpb24gKCB2LCB3ICkg
ewogCi0gICAgfSApOworICAgICAgICAgICAgaWYgKCB3ICE9PSB1bmRlZmluZWQgKSB7CiAKLSAg
ICAvKioKLSAgICAgKiBAYXV0aG9yIG1pa2FlbCBlbXRpbmdlciAvIGh0dHA6Ly9nb21vLnNlLwot
ICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAg
ICogQGF1dGhvciBXZXN0TGFuZ2xleSAvIGh0dHA6Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5Ci0g
ICAgICogQGF1dGhvciBiaG91c3RvbiAvIGh0dHA6Ly9jbGFyYS5pbwotICAgICAqLwotCi0gICAg
ZnVuY3Rpb24gUXVhdGVybmlvbiggeCwgeSwgeiwgdyApIHsKKyAgICAgICAgICAgICAgICBjb25z
b2xlLndhcm4oICdUSFJFRS5WZWN0b3IzOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9u
ZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicgKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBseVZlY3RvcnMoIHYsIHcgKTsKIAotICAg
ICAgICB0aGlzLl94ID0geCB8fCAwOwotICAgICAgICB0aGlzLl95ID0geSB8fCAwOwotICAgICAg
ICB0aGlzLl96ID0geiB8fCAwOwotICAgICAgICB0aGlzLl93ID0gKCB3ICE9PSB1bmRlZmluZWQg
KSA/IHcgOiAxOworICAgICAgICAgICAgfQogCi0gICAgfQorICAgICAgICAgICAgdGhpcy54ICo9
IHYueDsKKyAgICAgICAgICAgIHRoaXMueSAqPSB2Lnk7CisgICAgICAgICAgICB0aGlzLnogKj0g
di56OwogCi0gICAgT2JqZWN0LmFzc2lnbiggUXVhdGVybmlvbiwgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CiAKLSAgICAgICAgc2xlcnA6IGZ1bmN0aW9uICggcWEsIHFiLCBxbSwgdCApIHsK
KyAgICAgICAgfSwKIAotICAgICAgICAgICAgcmV0dXJuIHFtLmNvcHkoIHFhICkuc2xlcnAoIHFi
LCB0ICk7CisgICAgICAgIG11bHRpcGx5U2NhbGFyOiBmdW5jdGlvbiAoIHNjYWxhciApIHsKIAot
ICAgICAgICB9LAorICAgICAgICAgICAgdGhpcy54ICo9IHNjYWxhcjsKKyAgICAgICAgICAgIHRo
aXMueSAqPSBzY2FsYXI7CisgICAgICAgICAgICB0aGlzLnogKj0gc2NhbGFyOwogCi0gICAgICAg
IHNsZXJwRmxhdDogZnVuY3Rpb24gKCBkc3QsIGRzdE9mZnNldCwgc3JjMCwgc3JjT2Zmc2V0MCwg
c3JjMSwgc3JjT2Zmc2V0MSwgdCApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAg
ICAgICAgICAvLyBmdXp6LWZyZWUsIGFycmF5LWJhc2VkIFF1YXRlcm5pb24gU0xFUlAgb3BlcmF0
aW9uCisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIHZhciB4MCA9IHNyYzBbIHNyY09mZnNldDAg
KyAwIF0sCi0gICAgICAgICAgICAgICAgeTAgPSBzcmMwWyBzcmNPZmZzZXQwICsgMSBdLAotICAg
ICAgICAgICAgICAgIHowID0gc3JjMFsgc3JjT2Zmc2V0MCArIDIgXSwKLSAgICAgICAgICAgICAg
ICB3MCA9IHNyYzBbIHNyY09mZnNldDAgKyAzIF0sCisgICAgICAgIG11bHRpcGx5VmVjdG9yczog
ZnVuY3Rpb24gKCBhLCBiICkgewogCi0gICAgICAgICAgICAgICAgeDEgPSBzcmMxWyBzcmNPZmZz
ZXQxICsgMCBdLAotICAgICAgICAgICAgICAgIHkxID0gc3JjMVsgc3JjT2Zmc2V0MSArIDEgXSwK
LSAgICAgICAgICAgICAgICB6MSA9IHNyYzFbIHNyY09mZnNldDEgKyAyIF0sCi0gICAgICAgICAg
ICAgICAgdzEgPSBzcmMxWyBzcmNPZmZzZXQxICsgMyBdOworICAgICAgICAgICAgdGhpcy54ID0g
YS54ICogYi54OworICAgICAgICAgICAgdGhpcy55ID0gYS55ICogYi55OworICAgICAgICAgICAg
dGhpcy56ID0gYS56ICogYi56OwogCi0gICAgICAgICAgICBpZiAoIHcwICE9PSB3MSB8fCB4MCAh
PT0geDEgfHwgeTAgIT09IHkxIHx8IHowICE9PSB6MSApIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzOwogCi0gICAgICAgICAgICAgICAgdmFyIHMgPSAxIC0gdCwKKyAgICAgICAgfSwKIAotICAg
ICAgICAgICAgICAgICAgICBjb3MgPSB4MCAqIHgxICsgeTAgKiB5MSArIHowICogejEgKyB3MCAq
IHcxLAorICAgICAgICBhcHBseUV1bGVyOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgZGlyID0gKCBjb3MgPj0gMCA/IDEgOiAtIDEgKSwKLSAgICAgICAgICAgICAgICAgICAg
c3FyU2luID0gMSAtIGNvcyAqIGNvczsKKyAgICAgICAgICAgIHZhciBxdWF0ZXJuaW9uID0gbmV3
IFF1YXRlcm5pb24oKTsKIAotICAgICAgICAgICAgICAgIC8vIFNraXAgdGhlIFNsZXJwIGZvciB0
aW55IHN0ZXBzIHRvIGF2b2lkIG51bWVyaWMgcHJvYmxlbXM6Ci0gICAgICAgICAgICAgICAgaWYg
KCBzcXJTaW4gPiBOdW1iZXIuRVBTSUxPTiApIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
biBhcHBseUV1bGVyKCBldWxlciApIHsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgc2luID0g
TWF0aC5zcXJ0KCBzcXJTaW4gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IE1hdGgu
YXRhbjIoIHNpbiwgY29zICogZGlyICk7CisgICAgICAgICAgICAgICAgaWYgKCAhICggZXVsZXIg
JiYgZXVsZXIuaXNFdWxlciApICkgewogCi0gICAgICAgICAgICAgICAgICAgIHMgPSBNYXRoLnNp
biggcyAqIGxlbiApIC8gc2luOwotICAgICAgICAgICAgICAgICAgICB0ID0gTWF0aC5zaW4oIHQg
KiBsZW4gKSAvIHNpbjsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVF
LlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0
aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4nICk7CiAKICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICB2YXIgdERpciA9IHQgKiBkaXI7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uLnNldEZyb21FdWxlciggZXVsZXIg
KSApOwogCi0gICAgICAgICAgICAgICAgeDAgPSB4MCAqIHMgKyB4MSAqIHREaXI7Ci0gICAgICAg
ICAgICAgICAgeTAgPSB5MCAqIHMgKyB5MSAqIHREaXI7Ci0gICAgICAgICAgICAgICAgejAgPSB6
MCAqIHMgKyB6MSAqIHREaXI7Ci0gICAgICAgICAgICAgICAgdzAgPSB3MCAqIHMgKyB3MSAqIHRE
aXI7CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplIGluIGNh
c2Ugd2UganVzdCBkaWQgYSBsZXJwOgotICAgICAgICAgICAgICAgIGlmICggcyA9PT0gMSAtIHQg
KSB7CisgICAgICAgIH0oKSwKIAotICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IDEgLyBNYXRo
LnNxcnQoIHgwICogeDAgKyB5MCAqIHkwICsgejAgKiB6MCArIHcwICogdzAgKTsKKyAgICAgICAg
YXBwbHlBeGlzQW5nbGU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgICAgICB4MCAq
PSBmOwotICAgICAgICAgICAgICAgICAgICB5MCAqPSBmOwotICAgICAgICAgICAgICAgICAgICB6
MCAqPSBmOwotICAgICAgICAgICAgICAgICAgICB3MCAqPSBmOworICAgICAgICAgICAgdmFyIHF1
YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uIGFwcGx5QXhpc0FuZ2xlKCBheGlzLCBhbmdsZSApIHsKIAot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5UXVhdGVybmlv
biggcXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKCBheGlzLCBhbmdsZSApICk7CiAKLSAgICAg
ICAgICAgIGRzdFsgZHN0T2Zmc2V0IF0gPSB4MDsKLSAgICAgICAgICAgIGRzdFsgZHN0T2Zmc2V0
ICsgMSBdID0geTA7Ci0gICAgICAgICAgICBkc3RbIGRzdE9mZnNldCArIDIgXSA9IHowOwotICAg
ICAgICAgICAgZHN0WyBkc3RPZmZzZXQgKyAzIF0gPSB3MDsKKyAgICAgICAgICAgIH07CiAKLSAg
ICAgICAgfQorICAgICAgICB9KCksCiAKLSAgICB9ICk7CisgICAgICAgIGFwcGx5TWF0cml4Mzog
ZnVuY3Rpb24gKCBtICkgewogCi0gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFF1YXRlcm5p
b24ucHJvdG90eXBlLCB7CisgICAgICAgICAgICB2YXIgeCA9IHRoaXMueCwgeSA9IHRoaXMueSwg
eiA9IHRoaXMuejsKKyAgICAgICAgICAgIHZhciBlID0gbS5lbGVtZW50czsKIAotICAgICAgICB4
OiB7CisgICAgICAgICAgICB0aGlzLnggPSBlWyAwIF0gKiB4ICsgZVsgMyBdICogeSArIGVbIDYg
XSAqIHo7CisgICAgICAgICAgICB0aGlzLnkgPSBlWyAxIF0gKiB4ICsgZVsgNCBdICogeSArIGVb
IDcgXSAqIHo7CisgICAgICAgICAgICB0aGlzLnogPSBlWyAyIF0gKiB4ICsgZVsgNSBdICogeSAr
IGVbIDggXSAqIHo7CiAKLSAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feDsKKyAgICAg
ICAgfSwKIAotICAgICAgICAgICAgfSwKKyAgICAgICAgYXBwbHlNYXRyaXg0OiBmdW5jdGlvbiAo
IG0gKSB7CiAKLSAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKyAgICAgICAg
ICAgIHZhciB4ID0gdGhpcy54LCB5ID0gdGhpcy55LCB6ID0gdGhpcy56OworICAgICAgICAgICAg
dmFyIGUgPSBtLmVsZW1lbnRzOwogCi0gICAgICAgICAgICAgICAgdGhpcy5feCA9IHZhbHVlOwot
ICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjaygpOworICAgICAgICAgICAgdmFy
IHcgPSAxIC8gKCBlWyAzIF0gKiB4ICsgZVsgNyBdICogeSArIGVbIDExIF0gKiB6ICsgZVsgMTUg
XSApOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLnggPSAoIGVbIDAgXSAqIHgg
KyBlWyA0IF0gKiB5ICsgZVsgOCBdICogeiArIGVbIDEyIF0gKSAqIHc7CisgICAgICAgICAgICB0
aGlzLnkgPSAoIGVbIDEgXSAqIHggKyBlWyA1IF0gKiB5ICsgZVsgOSBdICogeiArIGVbIDEzIF0g
KSAqIHc7CisgICAgICAgICAgICB0aGlzLnogPSAoIGVbIDIgXSAqIHggKyBlWyA2IF0gKiB5ICsg
ZVsgMTAgXSAqIHogKyBlWyAxNCBdICkgKiB3OworCisgICAgICAgICAgICByZXR1cm4gdGhpczsK
IAogICAgICAgICB9LAogCi0gICAgICAgIHk6IHsKKyAgICAgICAgYXBwbHlRdWF0ZXJuaW9uOiBm
dW5jdGlvbiAoIHEgKSB7CiAKLSAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgdmFyIHggPSB0aGlzLngsIHkgPSB0aGlzLnksIHogPSB0aGlzLno7CisgICAgICAgICAg
ICB2YXIgcXggPSBxLngsIHF5ID0gcS55LCBxeiA9IHEueiwgcXcgPSBxLnc7CiAKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5feTsKKyAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBxdWF0ICog
dmVjdG9yCiAKLSAgICAgICAgICAgIH0sCisgICAgICAgICAgICB2YXIgaXggPSBxdyAqIHggKyBx
eSAqIHogLSBxeiAqIHk7CisgICAgICAgICAgICB2YXIgaXkgPSBxdyAqIHkgKyBxeiAqIHggLSBx
eCAqIHo7CisgICAgICAgICAgICB2YXIgaXogPSBxdyAqIHogKyBxeCAqIHkgLSBxeSAqIHg7Cisg
ICAgICAgICAgICB2YXIgaXcgPSAtIHF4ICogeCAtIHF5ICogeSAtIHF6ICogejsKIAotICAgICAg
ICAgICAgc2V0OiBmdW5jdGlvbiAoIHZhbHVlICkgeworICAgICAgICAgICAgLy8gY2FsY3VsYXRl
IHJlc3VsdCAqIGludmVyc2UgcXVhdAogCi0gICAgICAgICAgICAgICAgdGhpcy5feSA9IHZhbHVl
OwotICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjaygpOworICAgICAgICAgICAg
dGhpcy54ID0gaXggKiBxdyArIGl3ICogLSBxeCArIGl5ICogLSBxeiAtIGl6ICogLSBxeTsKKyAg
ICAgICAgICAgIHRoaXMueSA9IGl5ICogcXcgKyBpdyAqIC0gcXkgKyBpeiAqIC0gcXggLSBpeCAq
IC0gcXo7CisgICAgICAgICAgICB0aGlzLnogPSBpeiAqIHF3ICsgaXcgKiAtIHF6ICsgaXggKiAt
IHF5IC0gaXkgKiAtIHF4OwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhp
czsKIAogICAgICAgICB9LAogCi0gICAgICAgIHo6IHsKKyAgICAgICAgcHJvamVjdDogZnVuY3Rp
b24gKCBjYW1lcmEgKSB7CiAKLSAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KCBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNl
ICkuYXBwbHlNYXRyaXg0KCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeCApOwogCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3o7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIH0sCisgICAg
ICAgIHVucHJvamVjdDogZnVuY3Rpb24gKCBjYW1lcmEgKSB7CiAKLSAgICAgICAgICAgIHNldDog
ZnVuY3Rpb24gKCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5TWF0cml4
NCggY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlICkuYXBwbHlNYXRyaXg0KCBjYW1lcmEu
bWF0cml4V29ybGQgKTsKIAotICAgICAgICAgICAgICAgIHRoaXMuX3ogPSB2YWx1ZTsKLSAgICAg
ICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTsKKyAgICAgICAgfSwKIAotICAgICAg
ICAgICAgfQorICAgICAgICB0cmFuc2Zvcm1EaXJlY3Rpb246IGZ1bmN0aW9uICggbSApIHsKIAot
ICAgICAgICB9LAorICAgICAgICAgICAgLy8gaW5wdXQ6IFRIUkVFLk1hdHJpeDQgYWZmaW5lIG1h
dHJpeAorICAgICAgICAgICAgLy8gdmVjdG9yIGludGVycHJldGVkIGFzIGEgZGlyZWN0aW9uCiAK
LSAgICAgICAgdzogeworICAgICAgICAgICAgdmFyIHggPSB0aGlzLngsIHkgPSB0aGlzLnksIHog
PSB0aGlzLno7CisgICAgICAgICAgICB2YXIgZSA9IG0uZWxlbWVudHM7CiAKLSAgICAgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy54ID0gZVsgMCBdICogeCArIGVb
IDQgXSAqIHkgKyBlWyA4IF0gKiB6OworICAgICAgICAgICAgdGhpcy55ID0gZVsgMSBdICogeCAr
IGVbIDUgXSAqIHkgKyBlWyA5IF0gKiB6OworICAgICAgICAgICAgdGhpcy56ID0gZVsgMiBdICog
eCArIGVbIDYgXSAqIHkgKyBlWyAxMCBdICogejsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLl93OworICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplKCk7CiAKLSAgICAgICAg
ICAgIH0sCisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKCB2YWx1ZSAp
IHsKKyAgICAgICAgZGl2aWRlOiBmdW5jdGlvbiAoIHYgKSB7CiAKLSAgICAgICAgICAgICAgICB0
aGlzLl93ID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7
CisgICAgICAgICAgICB0aGlzLnggLz0gdi54OworICAgICAgICAgICAgdGhpcy55IC89IHYueTsK
KyAgICAgICAgICAgIHRoaXMueiAvPSB2Lno7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiB0aGlzOwogCi0gICAgICAgIH0KKyAgICAgICAgfSwKIAotICAgIH0gKTsKKyAgICAg
ICAgZGl2aWRlU2NhbGFyOiBmdW5jdGlvbiAoIHNjYWxhciApIHsKIAotICAgIE9iamVjdC5hc3Np
Z24oIFF1YXRlcm5pb24ucHJvdG90eXBlLCB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5tdWx0
aXBseVNjYWxhciggMSAvIHNjYWxhciApOwogCi0gICAgICAgIHNldDogZnVuY3Rpb24gKCB4LCB5
LCB6LCB3ICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICB0aGlzLl94ID0geDsKLSAgICAg
ICAgICAgIHRoaXMuX3kgPSB5OwotICAgICAgICAgICAgdGhpcy5feiA9IHo7Ci0gICAgICAgICAg
ICB0aGlzLl93ID0gdzsKKyAgICAgICAgbWluOiBmdW5jdGlvbiAoIHYgKSB7CiAKLSAgICAgICAg
ICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjaygpOworICAgICAgICAgICAgdGhpcy54ID0gTWF0aC5t
aW4oIHRoaXMueCwgdi54ICk7CisgICAgICAgICAgICB0aGlzLnkgPSBNYXRoLm1pbiggdGhpcy55
LCB2LnkgKTsKKyAgICAgICAgICAgIHRoaXMueiA9IE1hdGgubWluKCB0aGlzLnosIHYueiApOwog
CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIGNsb25l
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIG1heDogZnVuY3Rpb24gKCB2ICkgewogCi0gICAgICAg
ICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRoaXMuX3gsIHRoaXMuX3ksIHRoaXMu
X3osIHRoaXMuX3cgKTsKKyAgICAgICAgICAgIHRoaXMueCA9IE1hdGgubWF4KCB0aGlzLngsIHYu
eCApOworICAgICAgICAgICAgdGhpcy55ID0gTWF0aC5tYXgoIHRoaXMueSwgdi55ICk7CisgICAg
ICAgICAgICB0aGlzLnogPSBNYXRoLm1heCggdGhpcy56LCB2LnogKTsKKworICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHF1
YXRlcm5pb24gKSB7CisgICAgICAgIGNsYW1wOiBmdW5jdGlvbiAoIG1pbiwgbWF4ICkgewogCi0g
ICAgICAgICAgICB0aGlzLl94ID0gcXVhdGVybmlvbi54OwotICAgICAgICAgICAgdGhpcy5feSA9
IHF1YXRlcm5pb24ueTsKLSAgICAgICAgICAgIHRoaXMuX3ogPSBxdWF0ZXJuaW9uLno7Ci0gICAg
ICAgICAgICB0aGlzLl93ID0gcXVhdGVybmlvbi53OworICAgICAgICAgICAgLy8gYXNzdW1lcyBt
aW4gPCBtYXgsIGNvbXBvbmVudHdpc2UKIAotICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxi
YWNrKCk7CisgICAgICAgICAgICB0aGlzLnggPSBNYXRoLm1heCggbWluLngsIE1hdGgubWluKCBt
YXgueCwgdGhpcy54ICkgKTsKKyAgICAgICAgICAgIHRoaXMueSA9IE1hdGgubWF4KCBtaW4ueSwg
TWF0aC5taW4oIG1heC55LCB0aGlzLnkgKSApOworICAgICAgICAgICAgdGhpcy56ID0gTWF0aC5t
YXgoIG1pbi56LCBNYXRoLm1pbiggbWF4LnosIHRoaXMueiApICk7CiAKICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgc2V0RnJvbUV1bGVyOiBmdW5jdGlv
biAoIGV1bGVyLCB1cGRhdGUgKSB7Ci0KLSAgICAgICAgICAgIGlmICggISAoIGV1bGVyICYmIGV1
bGVyLmlzRXVsZXIgKSApIHsKKyAgICAgICAgY2xhbXBTY2FsYXI6IGZ1bmN0aW9uICggbWluVmFs
LCBtYXhWYWwgKSB7CiAKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoICdUSFJFRS5R
dWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24g
cmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4nICk7CisgICAgICAgICAgICB0aGlzLngg
PSBNYXRoLm1heCggbWluVmFsLCBNYXRoLm1pbiggbWF4VmFsLCB0aGlzLnggKSApOworICAgICAg
ICAgICAgdGhpcy55ID0gTWF0aC5tYXgoIG1pblZhbCwgTWF0aC5taW4oIG1heFZhbCwgdGhpcy55
ICkgKTsKKyAgICAgICAgICAgIHRoaXMueiA9IE1hdGgubWF4KCBtaW5WYWwsIE1hdGgubWluKCBt
YXhWYWwsIHRoaXMueiApICk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0
aGlzOwogCi0gICAgICAgICAgICB2YXIgeCA9IGV1bGVyLl94LCB5ID0gZXVsZXIuX3ksIHogPSBl
dWxlci5feiwgb3JkZXIgPSBldWxlci5vcmRlcjsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAg
Ly8gaHR0cDovL3d3dy5tYXRod29ya3MuY29tL21hdGxhYmNlbnRyYWwvZmlsZWV4Y2hhbmdlLwot
ICAgICAgICAgICAgLy8gIDIwNjk2LWZ1bmN0aW9uLXRvLWNvbnZlcnQtYmV0d2Vlbi1kY20tZXVs
ZXItYW5nbGVzLXF1YXRlcm5pb25zLWFuZC1ldWxlci12ZWN0b3JzLwotICAgICAgICAgICAgLy8g
IGNvbnRlbnQvU3BpbkNhbGMubQorICAgICAgICBjbGFtcExlbmd0aDogZnVuY3Rpb24gKCBtaW4s
IG1heCApIHsKIAotICAgICAgICAgICAgdmFyIGNvcyA9IE1hdGguY29zOwotICAgICAgICAgICAg
dmFyIHNpbiA9IE1hdGguc2luOworICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3Ro
KCk7CiAKLSAgICAgICAgICAgIHZhciBjMSA9IGNvcyggeCAvIDIgKTsKLSAgICAgICAgICAgIHZh
ciBjMiA9IGNvcyggeSAvIDIgKTsKLSAgICAgICAgICAgIHZhciBjMyA9IGNvcyggeiAvIDIgKTsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLmRpdmlkZVNjYWxhciggbGVuZ3RoIHx8IDEgKS5tdWx0
aXBseVNjYWxhciggTWF0aC5tYXgoIG1pbiwgTWF0aC5taW4oIG1heCwgbGVuZ3RoICkgKSApOwog
Ci0gICAgICAgICAgICB2YXIgczEgPSBzaW4oIHggLyAyICk7Ci0gICAgICAgICAgICB2YXIgczIg
PSBzaW4oIHkgLyAyICk7Ci0gICAgICAgICAgICB2YXIgczMgPSBzaW4oIHogLyAyICk7CisgICAg
ICAgIH0sCiAKLSAgICAgICAgICAgIGlmICggb3JkZXIgPT09ICdYWVonICkgeworICAgICAgICBm
bG9vcjogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgdGhpcy5feCA9IHMxICogYzIg
KiBjMyArIGMxICogczIgKiBzMzsKLSAgICAgICAgICAgICAgICB0aGlzLl95ID0gYzEgKiBzMiAq
IGMzIC0gczEgKiBjMiAqIHMzOwotICAgICAgICAgICAgICAgIHRoaXMuX3ogPSBjMSAqIGMyICog
czMgKyBzMSAqIHMyICogYzM7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdyA9IGMxICogYzIgKiBj
MyAtIHMxICogczIgKiBzMzsKKyAgICAgICAgICAgIHRoaXMueCA9IE1hdGguZmxvb3IoIHRoaXMu
eCApOworICAgICAgICAgICAgdGhpcy55ID0gTWF0aC5mbG9vciggdGhpcy55ICk7CisgICAgICAg
ICAgICB0aGlzLnogPSBNYXRoLmZsb29yKCB0aGlzLnogKTsKIAotICAgICAgICAgICAgfSBlbHNl
IGlmICggb3JkZXIgPT09ICdZWFonICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAg
ICAgICAgICAgICAgICB0aGlzLl94ID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzOwotICAg
ICAgICAgICAgICAgIHRoaXMuX3kgPSBjMSAqIHMyICogYzMgLSBzMSAqIGMyICogczM7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5feiA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMzsKLSAgICAg
ICAgICAgICAgICB0aGlzLl93ID0gYzEgKiBjMiAqIGMzICsgczEgKiBzMiAqIHMzOworICAgICAg
ICB9LAogCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCBvcmRlciA9PT0gJ1pYWScgKSB7CisgICAg
ICAgIGNlaWw6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgIHRoaXMuX3ggPSBzMSAq
IGMyICogYzMgLSBjMSAqIHMyICogczM7Ci0gICAgICAgICAgICAgICAgdGhpcy5feSA9IGMxICog
czIgKiBjMyArIHMxICogYzIgKiBzMzsKLSAgICAgICAgICAgICAgICB0aGlzLl96ID0gYzEgKiBj
MiAqIHMzICsgczEgKiBzMiAqIGMzOwotICAgICAgICAgICAgICAgIHRoaXMuX3cgPSBjMSAqIGMy
ICogYzMgLSBzMSAqIHMyICogczM7CisgICAgICAgICAgICB0aGlzLnggPSBNYXRoLmNlaWwoIHRo
aXMueCApOworICAgICAgICAgICAgdGhpcy55ID0gTWF0aC5jZWlsKCB0aGlzLnkgKTsKKyAgICAg
ICAgICAgIHRoaXMueiA9IE1hdGguY2VpbCggdGhpcy56ICk7CiAKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIG9yZGVyID09PSAnWllYJyApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0g
ICAgICAgICAgICAgICAgdGhpcy5feCA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMzsKLSAg
ICAgICAgICAgICAgICB0aGlzLl95ID0gYzEgKiBzMiAqIGMzICsgczEgKiBjMiAqIHMzOwotICAg
ICAgICAgICAgICAgIHRoaXMuX3ogPSBjMSAqIGMyICogczMgLSBzMSAqIHMyICogYzM7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5fdyA9IGMxICogYzIgKiBjMyArIHMxICogczIgKiBzMzsKKyAgICAg
ICAgfSwKIAotICAgICAgICAgICAgfSBlbHNlIGlmICggb3JkZXIgPT09ICdZWlgnICkgeworICAg
ICAgICByb3VuZDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgdGhpcy5feCA9IHMx
ICogYzIgKiBjMyArIGMxICogczIgKiBzMzsKLSAgICAgICAgICAgICAgICB0aGlzLl95ID0gYzEg
KiBzMiAqIGMzICsgczEgKiBjMiAqIHMzOwotICAgICAgICAgICAgICAgIHRoaXMuX3ogPSBjMSAq
IGMyICogczMgLSBzMSAqIHMyICogYzM7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdyA9IGMxICog
YzIgKiBjMyAtIHMxICogczIgKiBzMzsKKyAgICAgICAgICAgIHRoaXMueCA9IE1hdGgucm91bmQo
IHRoaXMueCApOworICAgICAgICAgICAgdGhpcy55ID0gTWF0aC5yb3VuZCggdGhpcy55ICk7Cisg
ICAgICAgICAgICB0aGlzLnogPSBNYXRoLnJvdW5kKCB0aGlzLnogKTsKIAotICAgICAgICAgICAg
fSBlbHNlIGlmICggb3JkZXIgPT09ICdYWlknICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAKLSAgICAgICAgICAgICAgICB0aGlzLl94ID0gczEgKiBjMiAqIGMzIC0gYzEgKiBzMiAqIHMz
OwotICAgICAgICAgICAgICAgIHRoaXMuX3kgPSBjMSAqIHMyICogYzMgLSBzMSAqIGMyICogczM7
Ci0gICAgICAgICAgICAgICAgdGhpcy5feiA9IGMxICogYzIgKiBzMyArIHMxICogczIgKiBjMzsK
LSAgICAgICAgICAgICAgICB0aGlzLl93ID0gYzEgKiBjMiAqIGMzICsgczEgKiBzMiAqIHMzOwor
ICAgICAgICB9LAogCi0gICAgICAgICAgICB9CisgICAgICAgIHJvdW5kVG9aZXJvOiBmdW5jdGlv
biAoKSB7CiAKLSAgICAgICAgICAgIGlmICggdXBkYXRlICE9PSBmYWxzZSApIHRoaXMub25DaGFu
Z2VDYWxsYmFjaygpOworICAgICAgICAgICAgdGhpcy54ID0gKCB0aGlzLnggPCAwICkgPyBNYXRo
LmNlaWwoIHRoaXMueCApIDogTWF0aC5mbG9vciggdGhpcy54ICk7CisgICAgICAgICAgICB0aGlz
LnkgPSAoIHRoaXMueSA8IDAgKSA/IE1hdGguY2VpbCggdGhpcy55ICkgOiBNYXRoLmZsb29yKCB0
aGlzLnkgKTsKKyAgICAgICAgICAgIHRoaXMueiA9ICggdGhpcy56IDwgMCApID8gTWF0aC5jZWls
KCB0aGlzLnogKSA6IE1hdGguZmxvb3IoIHRoaXMueiApOwogCiAgICAgICAgICAgICByZXR1cm4g
dGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIHNldEZyb21BeGlzQW5nbGU6IGZ1bmN0aW9u
ICggYXhpcywgYW5nbGUgKSB7Ci0KLSAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cuZXVjbGlkZWFu
c3BhY2UuY29tL21hdGhzL2dlb21ldHJ5L3JvdGF0aW9ucy9jb252ZXJzaW9ucy9hbmdsZVRvUXVh
dGVybmlvbi9pbmRleC5odG0KKyAgICAgICAgbmVnYXRlOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAg
ICAgICAgIC8vIGFzc3VtZXMgYXhpcyBpcyBub3JtYWxpemVkCisgICAgICAgICAgICB0aGlzLngg
PSAtIHRoaXMueDsKKyAgICAgICAgICAgIHRoaXMueSA9IC0gdGhpcy55OworICAgICAgICAgICAg
dGhpcy56ID0gLSB0aGlzLno7CiAKLSAgICAgICAgICAgIHZhciBoYWxmQW5nbGUgPSBhbmdsZSAv
IDIsIHMgPSBNYXRoLnNpbiggaGFsZkFuZ2xlICk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsK
IAotICAgICAgICAgICAgdGhpcy5feCA9IGF4aXMueCAqIHM7Ci0gICAgICAgICAgICB0aGlzLl95
ID0gYXhpcy55ICogczsKLSAgICAgICAgICAgIHRoaXMuX3ogPSBheGlzLnogKiBzOwotICAgICAg
ICAgICAgdGhpcy5fdyA9IE1hdGguY29zKCBoYWxmQW5nbGUgKTsKKyAgICAgICAgfSwKIAotICAg
ICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7CisgICAgICAgIGRvdDogZnVuY3Rpb24g
KCB2ICkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLnggKiB2LnggKyB0aGlzLnkgKiB2LnkgKyB0aGlzLnogKiB2Lno7CiAKICAgICAgICAgfSwK
IAotICAgICAgICBzZXRGcm9tUm90YXRpb25NYXRyaXg6IGZ1bmN0aW9uICggbSApIHsKKyAgICAg
ICAgLy8gVE9ETyBsZW5ndGhTcXVhcmVkPwogCi0gICAgICAgICAgICAvLyBodHRwOi8vd3d3LmV1
Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9nZW9tZXRyeS9yb3RhdGlvbnMvY29udmVyc2lvbnMvbWF0
cml4VG9RdWF0ZXJuaW9uL2luZGV4Lmh0bQorICAgICAgICBsZW5ndGhTcTogZnVuY3Rpb24gKCkg
ewogCi0gICAgICAgICAgICAvLyBhc3N1bWVzIHRoZSB1cHBlciAzeDMgb2YgbSBpcyBhIHB1cmUg
cm90YXRpb24gbWF0cml4IChpLmUsIHVuc2NhbGVkKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMu
eCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMuejsKIAotICAgICAg
ICAgICAgdmFyIHRlID0gbS5lbGVtZW50cywKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAg
IG0xMSA9IHRlWyAwIF0sIG0xMiA9IHRlWyA0IF0sIG0xMyA9IHRlWyA4IF0sCi0gICAgICAgICAg
ICAgICAgbTIxID0gdGVbIDEgXSwgbTIyID0gdGVbIDUgXSwgbTIzID0gdGVbIDkgXSwKLSAgICAg
ICAgICAgICAgICBtMzEgPSB0ZVsgMiBdLCBtMzIgPSB0ZVsgNiBdLCBtMzMgPSB0ZVsgMTAgXSwK
KyAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICB0cmFjZSA9
IG0xMSArIG0yMiArIG0zMywKLSAgICAgICAgICAgICAgICBzOworICAgICAgICAgICAgcmV0dXJu
IE1hdGguc3FydCggdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICsgdGhpcy56ICog
dGhpcy56ICk7CiAKLSAgICAgICAgICAgIGlmICggdHJhY2UgPiAwICkgeworICAgICAgICB9LAog
Ci0gICAgICAgICAgICAgICAgcyA9IDAuNSAvIE1hdGguc3FydCggdHJhY2UgKyAxLjAgKTsKKyAg
ICAgICAgbWFuaGF0dGFuTGVuZ3RoOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICB0
aGlzLl93ID0gMC4yNSAvIHM7Ci0gICAgICAgICAgICAgICAgdGhpcy5feCA9ICggbTMyIC0gbTIz
ICkgKiBzOwotICAgICAgICAgICAgICAgIHRoaXMuX3kgPSAoIG0xMyAtIG0zMSApICogczsKLSAg
ICAgICAgICAgICAgICB0aGlzLl96ID0gKCBtMjEgLSBtMTIgKSAqIHM7CisgICAgICAgICAgICBy
ZXR1cm4gTWF0aC5hYnMoIHRoaXMueCApICsgTWF0aC5hYnMoIHRoaXMueSApICsgTWF0aC5hYnMo
IHRoaXMueiApOwogCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCBtMTEgPiBtMjIgJiYgbTExID4g
bTMzICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgcyA9IDIuMCAqIE1hdGguc3Fy
dCggMS4wICsgbTExIC0gbTIyIC0gbTMzICk7CisgICAgICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24g
KCkgewogCi0gICAgICAgICAgICAgICAgdGhpcy5fdyA9ICggbTMyIC0gbTIzICkgLyBzOwotICAg
ICAgICAgICAgICAgIHRoaXMuX3ggPSAwLjI1ICogczsKLSAgICAgICAgICAgICAgICB0aGlzLl95
ID0gKCBtMTIgKyBtMjEgKSAvIHM7Ci0gICAgICAgICAgICAgICAgdGhpcy5feiA9ICggbTEzICsg
bTMxICkgLyBzOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKCB0aGlzLmxl
bmd0aCgpIHx8IDEgKTsKIAotICAgICAgICAgICAgfSBlbHNlIGlmICggbTIyID4gbTMzICkgewor
ICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgcyA9IDIuMCAqIE1hdGguc3FydCggMS4wICsg
bTIyIC0gbTExIC0gbTMzICk7CisgICAgICAgIHNldExlbmd0aDogZnVuY3Rpb24gKCBsZW5ndGgg
KSB7CiAKLSAgICAgICAgICAgICAgICB0aGlzLl93ID0gKCBtMTMgLSBtMzEgKSAvIHM7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5feCA9ICggbTEyICsgbTIxICkgLyBzOwotICAgICAgICAgICAgICAg
IHRoaXMuX3kgPSAwLjI1ICogczsKLSAgICAgICAgICAgICAgICB0aGlzLl96ID0gKCBtMjMgKyBt
MzIgKSAvIHM7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNj
YWxhciggbGVuZ3RoICk7CiAKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0sCiAKLSAg
ICAgICAgICAgICAgICBzID0gMi4wICogTWF0aC5zcXJ0KCAxLjAgKyBtMzMgLSBtMTEgLSBtMjIg
KTsKKyAgICAgICAgbGVycDogZnVuY3Rpb24gKCB2LCBhbHBoYSApIHsKIAotICAgICAgICAgICAg
ICAgIHRoaXMuX3cgPSAoIG0yMSAtIG0xMiApIC8gczsKLSAgICAgICAgICAgICAgICB0aGlzLl94
ID0gKCBtMTMgKyBtMzEgKSAvIHM7Ci0gICAgICAgICAgICAgICAgdGhpcy5feSA9ICggbTIzICsg
bTMyICkgLyBzOwotICAgICAgICAgICAgICAgIHRoaXMuX3ogPSAwLjI1ICogczsKKyAgICAgICAg
ICAgIHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7CisgICAgICAgICAgICB0aGlz
LnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhOworICAgICAgICAgICAgdGhpcy56ICs9ICgg
di56IC0gdGhpcy56ICkgKiBhbHBoYTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjaygpOworICAgICAg
ICB9LAogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgbGVycFZlY3RvcnM6IGZ1
bmN0aW9uICggdjEsIHYyLCBhbHBoYSApIHsKKworICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3Vi
VmVjdG9ycyggdjIsIHYxICkubXVsdGlwbHlTY2FsYXIoIGFscGhhICkuYWRkKCB2MSApOwogCiAg
ICAgICAgIH0sCiAKLSAgICAgICAgc2V0RnJvbVVuaXRWZWN0b3JzOiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGNyb3NzOiBmdW5jdGlvbiAoIHYsIHcgKSB7CiAKLSAgICAgICAgICAgIC8vIGFzc3Vt
ZXMgZGlyZWN0aW9uIHZlY3RvcnMgdkZyb20gYW5kIHZUbyBhcmUgbm9ybWFsaXplZAorICAgICAg
ICAgICAgaWYgKCB3ICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgIHZhciB2MSA9IG5l
dyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICB2YXIgcjsKKyAgICAgICAgICAgICAgICBjb25zb2xl
Lndhcm4oICdUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1
bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicgKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5jcm9zc1ZlY3RvcnMoIHYsIHcgKTsKIAotICAgICAgICAgICAgdmFy
IEVQUyA9IDAuMDAwMDAxOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb24gc2V0RnJvbVVuaXRWZWN0b3JzKCB2RnJvbSwgdlRvICkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuY3Jvc3NWZWN0b3JzKCB0aGlzLCB2ICk7CiAKLSAgICAgICAgICAgICAgICBpZiAo
IHYxID09PSB1bmRlZmluZWQgKSB2MSA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgIH0sCiAKLSAg
ICAgICAgICAgICAgICByID0gdkZyb20uZG90KCB2VG8gKSArIDE7CisgICAgICAgIGNyb3NzVmVj
dG9yczogZnVuY3Rpb24gKCBhLCBiICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCByIDwgRVBT
ICkgeworICAgICAgICAgICAgdmFyIGF4ID0gYS54LCBheSA9IGEueSwgYXogPSBhLno7CisgICAg
ICAgICAgICB2YXIgYnggPSBiLngsIGJ5ID0gYi55LCBieiA9IGIuejsKIAotICAgICAgICAgICAg
ICAgICAgICByID0gMDsKKyAgICAgICAgICAgIHRoaXMueCA9IGF5ICogYnogLSBheiAqIGJ5Owor
ICAgICAgICAgICAgdGhpcy55ID0gYXogKiBieCAtIGF4ICogYno7CisgICAgICAgICAgICB0aGlz
LnogPSBheCAqIGJ5IC0gYXkgKiBieDsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIE1hdGgu
YWJzKCB2RnJvbS54ICkgPiBNYXRoLmFicyggdkZyb20ueiApICkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHYxLnNldCggLSB2RnJvbS55LCB2
RnJvbS54LCAwICk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgcHJvamVjdE9uVmVjdG9yOiBmdW5jdGlvbiAoIHZlY3RvciApIHsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgdjEuc2V0KCAwLCAtIHZGcm9tLnosIHZGcm9tLnkgKTsKKyAgICAg
ICAgICAgIHZhciBzY2FsYXIgPSB2ZWN0b3IuZG90KCB0aGlzICkgLyB2ZWN0b3IubGVuZ3RoU3Eo
KTsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3B5
KCB2ZWN0b3IgKS5tdWx0aXBseVNjYWxhciggc2NhbGFyICk7CiAKLSAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAgIHYxLmNyb3NzVmVjdG9y
cyggdkZyb20sIHZUbyApOworICAgICAgICBwcm9qZWN0T25QbGFuZTogZnVuY3Rpb24gKCkgewog
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTsK
IAotICAgICAgICAgICAgICAgIHRoaXMuX3ggPSB2MS54OwotICAgICAgICAgICAgICAgIHRoaXMu
X3kgPSB2MS55OwotICAgICAgICAgICAgICAgIHRoaXMuX3ogPSB2MS56OwotICAgICAgICAgICAg
ICAgIHRoaXMuX3cgPSByOworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHByb2plY3RPblBs
YW5lKCBwbGFuZU5vcm1hbCApIHsKKworICAgICAgICAgICAgICAgIHYxLmNvcHkoIHRoaXMgKS5w
cm9qZWN0T25WZWN0b3IoIHBsYW5lTm9ybWFsICk7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWIoIHYxICk7
CiAKICAgICAgICAgICAgIH07CiAKICAgICAgICAgfSgpLAogCi0gICAgICAgIGludmVyc2U6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmVmbGVjdDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAg
ICAvLyBxdWF0ZXJuaW9uIGlzIGFzc3VtZWQgdG8gaGF2ZSB1bml0IGxlbmd0aAorICAgICAgICAg
ICAgLy8gcmVmbGVjdCBpbmNpZGVudCB2ZWN0b3Igb2ZmIHBsYW5lIG9ydGhvZ29uYWwgdG8gbm9y
bWFsCisgICAgICAgICAgICAvLyBub3JtYWwgaXMgYXNzdW1lZCB0byBoYXZlIHVuaXQgbGVuZ3Ro
CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmp1Z2F0ZSgpOworICAgICAgICAgICAgdmFy
IHYxID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uIHJlZmxlY3QoIG5vcm1hbCApIHsKIAotICAgICAgICBjb25qdWdhdGU6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWIoIHYxLmNvcHkoIG5vcm1hbCAp
Lm11bHRpcGx5U2NhbGFyKCAyICogdGhpcy5kb3QoIG5vcm1hbCApICkgKTsKIAotICAgICAgICAg
ICAgdGhpcy5feCAqPSAtIDE7Ci0gICAgICAgICAgICB0aGlzLl95ICo9IC0gMTsKLSAgICAgICAg
ICAgIHRoaXMuX3ogKj0gLSAxOworICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgdGhpcy5v
bkNoYW5nZUNhbGxiYWNrKCk7CisgICAgICAgIH0oKSwKIAotICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgIGFuZ2xlVG86IGZ1bmN0aW9uICggdiApIHsKIAotICAgICAgICB9LAorICAg
ICAgICAgICAgdmFyIHRoZXRhID0gdGhpcy5kb3QoIHYgKSAvICggTWF0aC5zcXJ0KCB0aGlzLmxl
bmd0aFNxKCkgKiB2Lmxlbmd0aFNxKCkgKSApOwogCi0gICAgICAgIGRvdDogZnVuY3Rpb24gKCB2
ICkgeworICAgICAgICAgICAgLy8gY2xhbXAsIHRvIGhhbmRsZSBudW1lcmljYWwgcHJvYmxlbXMK
IAotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ggKiB2Ll94ICsgdGhpcy5feSAqIHYuX3kgKyB0
aGlzLl96ICogdi5feiArIHRoaXMuX3cgKiB2Ll93OworICAgICAgICAgICAgcmV0dXJuIE1hdGgu
YWNvcyggX01hdGguY2xhbXAoIHRoZXRhLCAtIDEsIDEgKSApOwogCiAgICAgICAgIH0sCiAKLSAg
ICAgICAgbGVuZ3RoU3E6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZGlzdGFuY2VUbzogZnVuY3Rp
b24gKCB2ICkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5feCAqIHRoaXMuX3ggKyB0aGlz
Ll95ICogdGhpcy5feSArIHRoaXMuX3ogKiB0aGlzLl96ICsgdGhpcy5fdyAqIHRoaXMuX3c7Cisg
ICAgICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKCB2ICkg
KTsKIAogICAgICAgICB9LAogCi0gICAgICAgIGxlbmd0aDogZnVuY3Rpb24gKCkgeworICAgICAg
ICBkaXN0YW5jZVRvU3F1YXJlZDogZnVuY3Rpb24gKCB2ICkgewogCi0gICAgICAgICAgICByZXR1
cm4gTWF0aC5zcXJ0KCB0aGlzLl94ICogdGhpcy5feCArIHRoaXMuX3kgKiB0aGlzLl95ICsgdGhp
cy5feiAqIHRoaXMuX3ogKyB0aGlzLl93ICogdGhpcy5fdyApOworICAgICAgICAgICAgdmFyIGR4
ID0gdGhpcy54IC0gdi54LCBkeSA9IHRoaXMueSAtIHYueSwgZHogPSB0aGlzLnogLSB2Lno7CisK
KyAgICAgICAgICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeSArIGR6ICogZHo7CiAKICAgICAg
ICAgfSwKIAotICAgICAgICBub3JtYWxpemU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgbWFuaGF0
dGFuRGlzdGFuY2VUbzogZnVuY3Rpb24gKCB2ICkgewogCi0gICAgICAgICAgICB2YXIgbCA9IHRo
aXMubGVuZ3RoKCk7CisgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMoIHRoaXMueCAtIHYueCAp
ICsgTWF0aC5hYnMoIHRoaXMueSAtIHYueSApICsgTWF0aC5hYnMoIHRoaXMueiAtIHYueiApOwog
Ci0gICAgICAgICAgICBpZiAoIGwgPT09IDAgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAg
ICAgICB0aGlzLl94ID0gMDsKLSAgICAgICAgICAgICAgICB0aGlzLl95ID0gMDsKLSAgICAgICAg
ICAgICAgICB0aGlzLl96ID0gMDsKLSAgICAgICAgICAgICAgICB0aGlzLl93ID0gMTsKKyAgICAg
ICAgc2V0RnJvbVNwaGVyaWNhbDogZnVuY3Rpb24gKCBzICkgewogCi0gICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0RnJvbVNwaGVyaWNhbENvb3Jkcyggcy5y
YWRpdXMsIHMucGhpLCBzLnRoZXRhICk7CiAKLSAgICAgICAgICAgICAgICBsID0gMSAvIGw7Cisg
ICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB0aGlzLl94ID0gdGhpcy5feCAqIGw7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5feSA9IHRoaXMuX3kgKiBsOwotICAgICAgICAgICAgICAgIHRoaXMu
X3ogPSB0aGlzLl96ICogbDsKLSAgICAgICAgICAgICAgICB0aGlzLl93ID0gdGhpcy5fdyAqIGw7
CisgICAgICAgIHNldEZyb21TcGhlcmljYWxDb29yZHM6IGZ1bmN0aW9uICggcmFkaXVzLCBwaGks
IHRoZXRhICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgc2luUGhpUmFkaXVz
ID0gTWF0aC5zaW4oIHBoaSApICogcmFkaXVzOwogCi0gICAgICAgICAgICB0aGlzLm9uQ2hhbmdl
Q2FsbGJhY2soKTsKKyAgICAgICAgICAgIHRoaXMueCA9IHNpblBoaVJhZGl1cyAqIE1hdGguc2lu
KCB0aGV0YSApOworICAgICAgICAgICAgdGhpcy55ID0gTWF0aC5jb3MoIHBoaSApICogcmFkaXVz
OworICAgICAgICAgICAgdGhpcy56ID0gc2luUGhpUmFkaXVzICogTWF0aC5jb3MoIHRoZXRhICk7
CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgbXVs
dGlwbHk6IGZ1bmN0aW9uICggcSwgcCApIHsKKyAgICAgICAgc2V0RnJvbUN5bGluZHJpY2FsOiBm
dW5jdGlvbiAoIGMgKSB7CiAKLSAgICAgICAgICAgIGlmICggcCAhPT0gdW5kZWZpbmVkICkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKCBjLnJhZGl1
cywgYy50aGV0YSwgYy55ICk7CiAKLSAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJF
RS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4g
VXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4nICk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyggcSwgcCApOworICAgICAgICB9
LAogCi0gICAgICAgICAgICB9CisgICAgICAgIHNldEZyb21DeWxpbmRyaWNhbENvb3JkczogZnVu
Y3Rpb24gKCByYWRpdXMsIHRoZXRhLCB5ICkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5t
dWx0aXBseVF1YXRlcm5pb25zKCB0aGlzLCBxICk7CisgICAgICAgICAgICB0aGlzLnggPSByYWRp
dXMgKiBNYXRoLnNpbiggdGhldGEgKTsKKyAgICAgICAgICAgIHRoaXMueSA9IHk7CisgICAgICAg
ICAgICB0aGlzLnogPSByYWRpdXMgKiBNYXRoLmNvcyggdGhldGEgKTsKKworICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBwcmVtdWx0aXBseTogZnVuY3Rp
b24gKCBxICkgeworICAgICAgICBzZXRGcm9tTWF0cml4UG9zaXRpb246IGZ1bmN0aW9uICggbSAp
IHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyggcSwgdGhp
cyApOworICAgICAgICAgICAgdmFyIGUgPSBtLmVsZW1lbnRzOwogCi0gICAgICAgIH0sCisgICAg
ICAgICAgICB0aGlzLnggPSBlWyAxMiBdOworICAgICAgICAgICAgdGhpcy55ID0gZVsgMTMgXTsK
KyAgICAgICAgICAgIHRoaXMueiA9IGVbIDE0IF07CiAKLSAgICAgICAgbXVsdGlwbHlRdWF0ZXJu
aW9uczogZnVuY3Rpb24gKCBhLCBiICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAg
ICAgICAgICAgIC8vIGZyb20gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvYWxn
ZWJyYS9yZWFsTm9ybWVkQWxnZWJyYS9xdWF0ZXJuaW9ucy9jb2RlL2luZGV4Lmh0bQorICAgICAg
ICB9LAogCi0gICAgICAgICAgICB2YXIgcWF4ID0gYS5feCwgcWF5ID0gYS5feSwgcWF6ID0gYS5f
eiwgcWF3ID0gYS5fdzsKLSAgICAgICAgICAgIHZhciBxYnggPSBiLl94LCBxYnkgPSBiLl95LCBx
YnogPSBiLl96LCBxYncgPSBiLl93OworICAgICAgICBzZXRGcm9tTWF0cml4U2NhbGU6IGZ1bmN0
aW9uICggbSApIHsKIAotICAgICAgICAgICAgdGhpcy5feCA9IHFheCAqIHFidyArIHFhdyAqIHFi
eCArIHFheSAqIHFieiAtIHFheiAqIHFieTsKLSAgICAgICAgICAgIHRoaXMuX3kgPSBxYXkgKiBx
YncgKyBxYXcgKiBxYnkgKyBxYXogKiBxYnggLSBxYXggKiBxYno7Ci0gICAgICAgICAgICB0aGlz
Ll96ID0gcWF6ICogcWJ3ICsgcWF3ICogcWJ6ICsgcWF4ICogcWJ5IC0gcWF5ICogcWJ4OwotICAg
ICAgICAgICAgdGhpcy5fdyA9IHFhdyAqIHFidyAtIHFheCAqIHFieCAtIHFheSAqIHFieSAtIHFh
eiAqIHFiejsKKyAgICAgICAgICAgIHZhciBzeCA9IHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbigg
bSwgMCApLmxlbmd0aCgpOworICAgICAgICAgICAgdmFyIHN5ID0gdGhpcy5zZXRGcm9tTWF0cml4
Q29sdW1uKCBtLCAxICkubGVuZ3RoKCk7CisgICAgICAgICAgICB2YXIgc3ogPSB0aGlzLnNldEZy
b21NYXRyaXhDb2x1bW4oIG0sIDIgKS5sZW5ndGgoKTsKIAotICAgICAgICAgICAgdGhpcy5vbkNo
YW5nZUNhbGxiYWNrKCk7CisgICAgICAgICAgICB0aGlzLnggPSBzeDsKKyAgICAgICAgICAgIHRo
aXMueSA9IHN5OworICAgICAgICAgICAgdGhpcy56ID0gc3o7CiAKICAgICAgICAgICAgIHJldHVy
biB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgc2xlcnA6IGZ1bmN0aW9uICggcWIsIHQg
KSB7CisgICAgICAgIHNldEZyb21NYXRyaXhDb2x1bW46IGZ1bmN0aW9uICggbSwgaW5kZXggKSB7
CiAKLSAgICAgICAgICAgIGlmICggdCA9PT0gMCApIHJldHVybiB0aGlzOwotICAgICAgICAgICAg
aWYgKCB0ID09PSAxICkgcmV0dXJuIHRoaXMuY29weSggcWIgKTsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLmZyb21BcnJheSggbS5lbGVtZW50cywgaW5kZXggKiA0ICk7CiAKLSAgICAgICAgICAg
IHZhciB4ID0gdGhpcy5feCwgeSA9IHRoaXMuX3ksIHogPSB0aGlzLl96LCB3ID0gdGhpcy5fdzsK
KyAgICAgICAgfSwKIAotICAgICAgICAgICAgLy8gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5j
b20vbWF0aHMvYWxnZWJyYS9yZWFsTm9ybWVkQWxnZWJyYS9xdWF0ZXJuaW9ucy9zbGVycC8KKyAg
ICAgICAgZXF1YWxzOiBmdW5jdGlvbiAoIHYgKSB7CiAKLSAgICAgICAgICAgIHZhciBjb3NIYWxm
VGhldGEgPSB3ICogcWIuX3cgKyB4ICogcWIuX3ggKyB5ICogcWIuX3kgKyB6ICogcWIuX3o7Cisg
ICAgICAgICAgICByZXR1cm4gKCAoIHYueCA9PT0gdGhpcy54ICkgJiYgKCB2LnkgPT09IHRoaXMu
eSApICYmICggdi56ID09PSB0aGlzLnogKSApOwogCi0gICAgICAgICAgICBpZiAoIGNvc0hhbGZU
aGV0YSA8IDAgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB0aGlzLl93ID0gLSBx
Yi5fdzsKLSAgICAgICAgICAgICAgICB0aGlzLl94ID0gLSBxYi5feDsKLSAgICAgICAgICAgICAg
ICB0aGlzLl95ID0gLSBxYi5feTsKLSAgICAgICAgICAgICAgICB0aGlzLl96ID0gLSBxYi5fejsK
KyAgICAgICAgZnJvbUFycmF5OiBmdW5jdGlvbiAoIGFycmF5LCBvZmZzZXQgKSB7CiAKLSAgICAg
ICAgICAgICAgICBjb3NIYWxmVGhldGEgPSAtIGNvc0hhbGZUaGV0YTsKKyAgICAgICAgICAgIGlm
ICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwOwogCi0gICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgdGhpcy54ID0gYXJyYXlbIG9mZnNldCBdOworICAgICAgICAgICAg
dGhpcy55ID0gYXJyYXlbIG9mZnNldCArIDEgXTsKKyAgICAgICAgICAgIHRoaXMueiA9IGFycmF5
WyBvZmZzZXQgKyAyIF07CiAKLSAgICAgICAgICAgICAgICB0aGlzLmNvcHkoIHFiICk7CisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgfQorICAgICAgICB9LAogCi0gICAg
ICAgICAgICBpZiAoIGNvc0hhbGZUaGV0YSA+PSAxLjAgKSB7CisgICAgICAgIHRvQXJyYXk6IGZ1
bmN0aW9uICggYXJyYXksIG9mZnNldCApIHsKIAotICAgICAgICAgICAgICAgIHRoaXMuX3cgPSB3
OwotICAgICAgICAgICAgICAgIHRoaXMuX3ggPSB4OwotICAgICAgICAgICAgICAgIHRoaXMuX3kg
PSB5OwotICAgICAgICAgICAgICAgIHRoaXMuX3ogPSB6OworICAgICAgICAgICAgaWYgKCBhcnJh
eSA9PT0gdW5kZWZpbmVkICkgYXJyYXkgPSBbXTsKKyAgICAgICAgICAgIGlmICggb2Zmc2V0ID09
PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0IF0gPSB0aGlzLng7CisgICAgICAgICAgICBhcnJh
eVsgb2Zmc2V0ICsgMSBdID0gdGhpcy55OworICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDIg
XSA9IHRoaXMuejsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5Owog
Ci0gICAgICAgICAgICB2YXIgc3FyU2luSGFsZlRoZXRhID0gMS4wIC0gY29zSGFsZlRoZXRhICog
Y29zSGFsZlRoZXRhOworICAgICAgICB9LAogCi0gICAgICAgICAgICBpZiAoIHNxclNpbkhhbGZU
aGV0YSA8PSBOdW1iZXIuRVBTSUxPTiApIHsKKyAgICAgICAgZnJvbUJ1ZmZlckF0dHJpYnV0ZTog
ZnVuY3Rpb24gKCBhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQgKSB7CiAKLSAgICAgICAgICAgICAg
ICB2YXIgcyA9IDEgLSB0OwotICAgICAgICAgICAgICAgIHRoaXMuX3cgPSBzICogdyArIHQgKiB0
aGlzLl93OwotICAgICAgICAgICAgICAgIHRoaXMuX3ggPSBzICogeCArIHQgKiB0aGlzLl94Owot
ICAgICAgICAgICAgICAgIHRoaXMuX3kgPSBzICogeSArIHQgKiB0aGlzLl95OwotICAgICAgICAg
ICAgICAgIHRoaXMuX3ogPSBzICogeiArIHQgKiB0aGlzLl96OworICAgICAgICAgICAgaWYgKCBv
ZmZzZXQgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5v
cm1hbGl6ZSgpOworICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6
IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4nICk7
CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIHNpbkhhbGZUaGV0YSA9IE1hdGgu
c3FydCggc3FyU2luSGFsZlRoZXRhICk7Ci0gICAgICAgICAgICB2YXIgaGFsZlRoZXRhID0gTWF0
aC5hdGFuMiggc2luSGFsZlRoZXRhLCBjb3NIYWxmVGhldGEgKTsKLSAgICAgICAgICAgIHZhciBy
YXRpb0EgPSBNYXRoLnNpbiggKCAxIC0gdCApICogaGFsZlRoZXRhICkgLyBzaW5IYWxmVGhldGEs
Ci0gICAgICAgICAgICAgICAgcmF0aW9CID0gTWF0aC5zaW4oIHQgKiBoYWxmVGhldGEgKSAvIHNp
bkhhbGZUaGV0YTsKLQotICAgICAgICAgICAgdGhpcy5fdyA9ICggdyAqIHJhdGlvQSArIHRoaXMu
X3cgKiByYXRpb0IgKTsKLSAgICAgICAgICAgIHRoaXMuX3ggPSAoIHggKiByYXRpb0EgKyB0aGlz
Ll94ICogcmF0aW9CICk7Ci0gICAgICAgICAgICB0aGlzLl95ID0gKCB5ICogcmF0aW9BICsgdGhp
cy5feSAqIHJhdGlvQiApOwotICAgICAgICAgICAgdGhpcy5feiA9ICggeiAqIHJhdGlvQSArIHRo
aXMuX3ogKiByYXRpb0IgKTsKLQotICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7
CisgICAgICAgICAgICB0aGlzLnggPSBhdHRyaWJ1dGUuZ2V0WCggaW5kZXggKTsKKyAgICAgICAg
ICAgIHRoaXMueSA9IGF0dHJpYnV0ZS5nZXRZKCBpbmRleCApOworICAgICAgICAgICAgdGhpcy56
ID0gYXR0cmlidXRlLmdldFooIGluZGV4ICk7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwog
Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZXF1YWxzOiBmdW5jdGlvbiAoIHF1YXRlcm5pb24gKSB7
CisgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuICggcXVhdGVybmlvbi5feCA9PT0gdGhp
cy5feCApICYmICggcXVhdGVybmlvbi5feSA9PT0gdGhpcy5feSApICYmICggcXVhdGVybmlvbi5f
eiA9PT0gdGhpcy5feiApICYmICggcXVhdGVybmlvbi5fdyA9PT0gdGhpcy5fdyApOworICAgIH0g
KTsKIAotICAgICAgICB9LAorICAgIC8qKgorICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRw
Oi8vYWx0ZXJlZHF1YWxpYS5jb20vCisgICAgICogQGF1dGhvciBXZXN0TGFuZ2xleSAvIGh0dHA6
Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5CisgICAgICogQGF1dGhvciBiaG91c3RvbiAvIGh0dHA6
Ly9jbGFyYS5pbworICAgICAqIEBhdXRob3IgdHNjaHcKKyAgICAgKi8KIAotICAgICAgICBmcm9t
QXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9mZnNldCApIHsKKyAgICBmdW5jdGlvbiBNYXRyaXgz
KCkgewogCi0gICAgICAgICAgICBpZiAoIG9mZnNldCA9PT0gdW5kZWZpbmVkICkgb2Zmc2V0ID0g
MDsKKyAgICAgICAgdGhpcy5lbGVtZW50cyA9IFsKIAotICAgICAgICAgICAgdGhpcy5feCA9IGFy
cmF5WyBvZmZzZXQgXTsKLSAgICAgICAgICAgIHRoaXMuX3kgPSBhcnJheVsgb2Zmc2V0ICsgMSBd
OwotICAgICAgICAgICAgdGhpcy5feiA9IGFycmF5WyBvZmZzZXQgKyAyIF07Ci0gICAgICAgICAg
ICB0aGlzLl93ID0gYXJyYXlbIG9mZnNldCArIDMgXTsKKyAgICAgICAgICAgIDEsIDAsIDAsCisg
ICAgICAgICAgICAwLCAxLCAwLAorICAgICAgICAgICAgMCwgMCwgMQogCi0gICAgICAgICAgICB0
aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTsKKyAgICAgICAgXTsKIAotICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCA+IDAgKSB7CiAKLSAgICAgICAg
fSwKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5NYXRyaXgzOiB0aGUgY29uc3Ry
dWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLicgKTsK
IAotICAgICAgICB0b0FycmF5OiBmdW5jdGlvbiAoIGFycmF5LCBvZmZzZXQgKSB7CisgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCBhcnJheSA9PT0gdW5kZWZpbmVkICkgYXJyYXkgPSBbXTsK
LSAgICAgICAgICAgIGlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwOworICAg
IH0KIAotICAgICAgICAgICAgYXJyYXlbIG9mZnNldCBdID0gdGhpcy5feDsKLSAgICAgICAgICAg
IGFycmF5WyBvZmZzZXQgKyAxIF0gPSB0aGlzLl95OwotICAgICAgICAgICAgYXJyYXlbIG9mZnNl
dCArIDIgXSA9IHRoaXMuX3o7Ci0gICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMyBdID0gdGhp
cy5fdzsKKyAgICBPYmplY3QuYXNzaWduKCBNYXRyaXgzLnByb3RvdHlwZSwgewogCi0gICAgICAg
ICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIGlzTWF0cml4MzogdHJ1ZSwKIAotICAgICAgICB9
LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICggbjExLCBuMTIsIG4xMywgbjIxLCBuMjIsIG4yMywg
bjMxLCBuMzIsIG4zMyApIHsKIAotICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gKCBjYWxsYmFj
ayApIHsKKyAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7CiAKLSAgICAgICAgICAg
IHRoaXMub25DaGFuZ2VDYWxsYmFjayA9IGNhbGxiYWNrOworICAgICAgICAgICAgdGVbIDAgXSA9
IG4xMTsgdGVbIDEgXSA9IG4yMTsgdGVbIDIgXSA9IG4zMTsKKyAgICAgICAgICAgIHRlWyAzIF0g
PSBuMTI7IHRlWyA0IF0gPSBuMjI7IHRlWyA1IF0gPSBuMzI7CisgICAgICAgICAgICB0ZVsgNiBd
ID0gbjEzOyB0ZVsgNyBdID0gbjIzOyB0ZVsgOCBdID0gbjMzOwogCiAgICAgICAgICAgICByZXR1
cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIG9uQ2hhbmdlQ2FsbGJhY2s6IGZ1bmN0
aW9uICgpIHt9Ci0KLSAgICB9ICk7Ci0KLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAv
IGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqIEBhdXRob3Iga2lsZSAvIGh0dHA6Ly9raWxlLnN0
cmF2YWdhbnphLm9yZy8KLSAgICAgKiBAYXV0aG9yIHBoaWxvZ2IgLyBodHRwOi8vYmxvZy50aGVq
aXQub3JnLwotICAgICAqIEBhdXRob3IgbWlrYWVsIGVtdGluZ2VyIC8gaHR0cDovL2dvbW8uc2Uv
Ci0gICAgICogQGF1dGhvciBlZ3JhZXRoZXIgLyBodHRwOi8vZWdyYWV0aGVyLmNvbS8KLSAgICAg
KiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExhbmdsZXkKLSAg
ICAgKi8KLQotICAgIGZ1bmN0aW9uIFZlY3RvcjMoIHgsIHksIHogKSB7Ci0KLSAgICAgICAgdGhp
cy54ID0geCB8fCAwOwotICAgICAgICB0aGlzLnkgPSB5IHx8IDA7Ci0gICAgICAgIHRoaXMueiA9
IHogfHwgMDsKLQotICAgIH0KLQotICAgIE9iamVjdC5hc3NpZ24oIFZlY3RvcjMucHJvdG90eXBl
LCB7CisgICAgICAgIGlkZW50aXR5OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgaXNWZWN0b3Iz
OiB0cnVlLAorICAgICAgICAgICAgdGhpcy5zZXQoCiAKLSAgICAgICAgc2V0OiBmdW5jdGlvbiAo
IHgsIHksIHogKSB7CisgICAgICAgICAgICAgICAgMSwgMCwgMCwKKyAgICAgICAgICAgICAgICAw
LCAxLCAwLAorICAgICAgICAgICAgICAgIDAsIDAsIDEKIAotICAgICAgICAgICAgdGhpcy54ID0g
eDsKLSAgICAgICAgICAgIHRoaXMueSA9IHk7Ci0gICAgICAgICAgICB0aGlzLnogPSB6OworICAg
ICAgICAgICAgKTsKIAogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAot
ICAgICAgICBzZXRTY2FsYXI6IGZ1bmN0aW9uICggc2NhbGFyICkgewotCi0gICAgICAgICAgICB0
aGlzLnggPSBzY2FsYXI7Ci0gICAgICAgICAgICB0aGlzLnkgPSBzY2FsYXI7Ci0gICAgICAgICAg
ICB0aGlzLnogPSBzY2FsYXI7CisgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVj
dG9yKCkuZnJvbUFycmF5KCB0aGlzLmVsZW1lbnRzICk7CiAKICAgICAgICAgfSwKIAotICAgICAg
ICBzZXRYOiBmdW5jdGlvbiAoIHggKSB7CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggbSApIHsK
IAotICAgICAgICAgICAgdGhpcy54ID0geDsKKyAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxl
bWVudHM7CisgICAgICAgICAgICB2YXIgbWUgPSBtLmVsZW1lbnRzOworCisgICAgICAgICAgICB0
ZVsgMCBdID0gbWVbIDAgXTsgdGVbIDEgXSA9IG1lWyAxIF07IHRlWyAyIF0gPSBtZVsgMiBdOwor
ICAgICAgICAgICAgdGVbIDMgXSA9IG1lWyAzIF07IHRlWyA0IF0gPSBtZVsgNCBdOyB0ZVsgNSBd
ID0gbWVbIDUgXTsKKyAgICAgICAgICAgIHRlWyA2IF0gPSBtZVsgNiBdOyB0ZVsgNyBdID0gbWVb
IDcgXTsgdGVbIDggXSA9IG1lWyA4IF07CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAg
ICAgICAgIH0sCiAKLSAgICAgICAgc2V0WTogZnVuY3Rpb24gKCB5ICkgewotCi0gICAgICAgICAg
ICB0aGlzLnkgPSB5OworICAgICAgICBzZXRGcm9tTWF0cml4NDogZnVuY3Rpb24gKCBtICkgewog
Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIHZhciBtZSA9IG0uZWxlbWVu
dHM7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIHRoaXMuc2V0KAogCi0gICAgICAgIHNldFo6
IGZ1bmN0aW9uICggeiApIHsKKyAgICAgICAgICAgICAgICBtZVsgMCBdLCBtZVsgNCBdLCBtZVsg
OCBdLAorICAgICAgICAgICAgICAgIG1lWyAxIF0sIG1lWyA1IF0sIG1lWyA5IF0sCisgICAgICAg
ICAgICAgICAgbWVbIDIgXSwgbWVbIDYgXSwgbWVbIDEwIF0KIAotICAgICAgICAgICAgdGhpcy56
ID0gejsKKyAgICAgICAgICAgICk7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAg
ICAgIH0sCiAKLSAgICAgICAgc2V0Q29tcG9uZW50OiBmdW5jdGlvbiAoIGluZGV4LCB2YWx1ZSAp
IHsKKyAgICAgICAgYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZTogZnVuY3Rpb24gKCkgewogCi0gICAg
ICAgICAgICBzd2l0Y2ggKCBpbmRleCApIHsKKyAgICAgICAgICAgIHZhciB2MSA9IG5ldyBWZWN0
b3IzKCk7CiAKLSAgICAgICAgICAgICAgICBjYXNlIDA6IHRoaXMueCA9IHZhbHVlOyBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMueSA9IHZhbHVlOyBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIDI6IHRoaXMueiA9IHZhbHVlOyBicmVhazsKLSAgICAgICAgICAgICAgICBk
ZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoICdpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICcgKyBpbmRl
eCApOworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUo
IGF0dHJpYnV0ZSApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoIHZh
ciBpID0gMCwgbCA9IGF0dHJpYnV0ZS5jb3VudDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgICAgICB2MS54ID0gYXR0cmlidXRlLmdl
dFgoIGkgKTsKKyAgICAgICAgICAgICAgICAgICAgdjEueSA9IGF0dHJpYnV0ZS5nZXRZKCBpICk7
CisgICAgICAgICAgICAgICAgICAgIHYxLnogPSBhdHRyaWJ1dGUuZ2V0WiggaSApOwogCi0gICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHYxLmFwcGx5TWF0cml4MyggdGhpcyApOwogCi0g
ICAgICAgIGdldENvbXBvbmVudDogZnVuY3Rpb24gKCBpbmRleCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXR0cmlidXRlLnNldFhZWiggaSwgdjEueCwgdjEueSwgdjEueiApOwogCi0gICAgICAg
ICAgICBzd2l0Y2ggKCBpbmRleCApIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBjYXNlIDA6IHJldHVybiB0aGlzLng7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1
cm4gdGhpcy55OwotICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIHRoaXMuejsKLSAgICAg
ICAgICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoICdpbmRleCBpcyBvdXQgb2YgcmFu
Z2U6ICcgKyBpbmRleCApOworICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGU7CiAKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgfSwKKyAgICAgICAgfSgpLAog
Ci0gICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIG11bHRpcGx5OiBmdW5jdGlv
biAoIG0gKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvciggdGhp
cy54LCB0aGlzLnksIHRoaXMueiApOworICAgICAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbHlN
YXRyaWNlcyggdGhpcywgbSApOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgY29weTogZnVuY3Rp
b24gKCB2ICkgewotCi0gICAgICAgICAgICB0aGlzLnggPSB2Lng7Ci0gICAgICAgICAgICB0aGlz
LnkgPSB2Lnk7Ci0gICAgICAgICAgICB0aGlzLnogPSB2Lno7CisgICAgICAgIHByZW11bHRpcGx5
OiBmdW5jdGlvbiAoIG0gKSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyggbSwgdGhpcyApOwogCiAgICAgICAgIH0s
CiAKLSAgICAgICAgYWRkOiBmdW5jdGlvbiAoIHYsIHcgKSB7Ci0KLSAgICAgICAgICAgIGlmICgg
dyAhPT0gdW5kZWZpbmVkICkgewotCi0gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhS
RUUuVmVjdG9yMzogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFk
ZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5hZGRWZWN0b3JzKCB2LCB3ICk7CisgICAgICAgIG11bHRpcGx5TWF0cmljZXM6IGZ1bmN0aW9u
ICggYSwgYiApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGFlID0gYS5lbGVt
ZW50czsKKyAgICAgICAgICAgIHZhciBiZSA9IGIuZWxlbWVudHM7CisgICAgICAgICAgICB2YXIg
dGUgPSB0aGlzLmVsZW1lbnRzOwogCi0gICAgICAgICAgICB0aGlzLnggKz0gdi54OwotICAgICAg
ICAgICAgdGhpcy55ICs9IHYueTsKLSAgICAgICAgICAgIHRoaXMueiArPSB2Lno7CisgICAgICAg
ICAgICB2YXIgYTExID0gYWVbIDAgXSwgYTEyID0gYWVbIDMgXSwgYTEzID0gYWVbIDYgXTsKKyAg
ICAgICAgICAgIHZhciBhMjEgPSBhZVsgMSBdLCBhMjIgPSBhZVsgNCBdLCBhMjMgPSBhZVsgNyBd
OworICAgICAgICAgICAgdmFyIGEzMSA9IGFlWyAyIF0sIGEzMiA9IGFlWyA1IF0sIGEzMyA9IGFl
WyA4IF07CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgdmFyIGIxMSA9
IGJlWyAwIF0sIGIxMiA9IGJlWyAzIF0sIGIxMyA9IGJlWyA2IF07CisgICAgICAgICAgICB2YXIg
YjIxID0gYmVbIDEgXSwgYjIyID0gYmVbIDQgXSwgYjIzID0gYmVbIDcgXTsKKyAgICAgICAgICAg
IHZhciBiMzEgPSBiZVsgMiBdLCBiMzIgPSBiZVsgNSBdLCBiMzMgPSBiZVsgOCBdOwogCi0gICAg
ICAgIH0sCisgICAgICAgICAgICB0ZVsgMCBdID0gYTExICogYjExICsgYTEyICogYjIxICsgYTEz
ICogYjMxOworICAgICAgICAgICAgdGVbIDMgXSA9IGExMSAqIGIxMiArIGExMiAqIGIyMiArIGEx
MyAqIGIzMjsKKyAgICAgICAgICAgIHRlWyA2IF0gPSBhMTEgKiBiMTMgKyBhMTIgKiBiMjMgKyBh
MTMgKiBiMzM7CiAKLSAgICAgICAgYWRkU2NhbGFyOiBmdW5jdGlvbiAoIHMgKSB7CisgICAgICAg
ICAgICB0ZVsgMSBdID0gYTIxICogYjExICsgYTIyICogYjIxICsgYTIzICogYjMxOworICAgICAg
ICAgICAgdGVbIDQgXSA9IGEyMSAqIGIxMiArIGEyMiAqIGIyMiArIGEyMyAqIGIzMjsKKyAgICAg
ICAgICAgIHRlWyA3IF0gPSBhMjEgKiBiMTMgKyBhMjIgKiBiMjMgKyBhMjMgKiBiMzM7CiAKLSAg
ICAgICAgICAgIHRoaXMueCArPSBzOwotICAgICAgICAgICAgdGhpcy55ICs9IHM7Ci0gICAgICAg
ICAgICB0aGlzLnogKz0gczsKKyAgICAgICAgICAgIHRlWyAyIF0gPSBhMzEgKiBiMTEgKyBhMzIg
KiBiMjEgKyBhMzMgKiBiMzE7CisgICAgICAgICAgICB0ZVsgNSBdID0gYTMxICogYjEyICsgYTMy
ICogYjIyICsgYTMzICogYjMyOworICAgICAgICAgICAgdGVbIDggXSA9IGEzMSAqIGIxMyArIGEz
MiAqIGIyMyArIGEzMyAqIGIzMzsKIAogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAg
ICAgfSwKIAotICAgICAgICBhZGRWZWN0b3JzOiBmdW5jdGlvbiAoIGEsIGIgKSB7CisgICAgICAg
IG11bHRpcGx5U2NhbGFyOiBmdW5jdGlvbiAoIHMgKSB7CiAKLSAgICAgICAgICAgIHRoaXMueCA9
IGEueCArIGIueDsKLSAgICAgICAgICAgIHRoaXMueSA9IGEueSArIGIueTsKLSAgICAgICAgICAg
IHRoaXMueiA9IGEueiArIGIuejsKKyAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7
CisKKyAgICAgICAgICAgIHRlWyAwIF0gKj0gczsgdGVbIDMgXSAqPSBzOyB0ZVsgNiBdICo9IHM7
CisgICAgICAgICAgICB0ZVsgMSBdICo9IHM7IHRlWyA0IF0gKj0gczsgdGVbIDcgXSAqPSBzOwor
ICAgICAgICAgICAgdGVbIDIgXSAqPSBzOyB0ZVsgNSBdICo9IHM7IHRlWyA4IF0gKj0gczsKIAog
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBhZGRTY2Fs
ZWRWZWN0b3I6IGZ1bmN0aW9uICggdiwgcyApIHsKKyAgICAgICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0
aW9uICgpIHsKIAotICAgICAgICAgICAgdGhpcy54ICs9IHYueCAqIHM7Ci0gICAgICAgICAgICB0
aGlzLnkgKz0gdi55ICogczsKLSAgICAgICAgICAgIHRoaXMueiArPSB2LnogKiBzOworICAgICAg
ICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgICAgICAgICB2YXIgYSA9IHRlWyAwIF0sIGIgPSB0ZVsgMSBdLCBjID0gdGVbIDIgXSwK
KyAgICAgICAgICAgICAgICBkID0gdGVbIDMgXSwgZSA9IHRlWyA0IF0sIGYgPSB0ZVsgNSBdLAor
ICAgICAgICAgICAgICAgIGcgPSB0ZVsgNiBdLCBoID0gdGVbIDcgXSwgaSA9IHRlWyA4IF07CisK
KyAgICAgICAgICAgIHJldHVybiBhICogZSAqIGkgLSBhICogZiAqIGggLSBiICogZCAqIGkgKyBi
ICogZiAqIGcgKyBjICogZCAqIGggLSBjICogZSAqIGc7CiAKICAgICAgICAgfSwKIAotICAgICAg
ICBzdWI6IGZ1bmN0aW9uICggdiwgdyApIHsKKyAgICAgICAgZ2V0SW52ZXJzZTogZnVuY3Rpb24g
KCBtYXRyaXgsIHRocm93T25EZWdlbmVyYXRlICkgewogCi0gICAgICAgICAgICBpZiAoIHcgIT09
IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIGlmICggbWF0cml4ICYmIG1hdHJpeC5pc01hdHJp
eDQgKSB7CiAKLSAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IzOiAu
c3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwg
YiApIGluc3RlYWQuJyApOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1YlZlY3RvcnMo
IHYsIHcgKTsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAiVEhSRUUuTWF0cml4Mzog
LmdldEludmVyc2UoKSBubyBsb25nZXIgdGFrZXMgYSBNYXRyaXg0IGFyZ3VtZW50LiIgKTsKIAog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLnggLT0gdi54OwotICAgICAgICAgICAg
dGhpcy55IC09IHYueTsKLSAgICAgICAgICAgIHRoaXMueiAtPSB2Lno7CisgICAgICAgICAgICB2
YXIgbWUgPSBtYXRyaXguZWxlbWVudHMsCisgICAgICAgICAgICAgICAgdGUgPSB0aGlzLmVsZW1l
bnRzLAogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICBuMTEgPSBt
ZVsgMCBdLCBuMjEgPSBtZVsgMSBdLCBuMzEgPSBtZVsgMiBdLAorICAgICAgICAgICAgICAgIG4x
MiA9IG1lWyAzIF0sIG4yMiA9IG1lWyA0IF0sIG4zMiA9IG1lWyA1IF0sCisgICAgICAgICAgICAg
ICAgbjEzID0gbWVbIDYgXSwgbjIzID0gbWVbIDcgXSwgbjMzID0gbWVbIDggXSwKIAotICAgICAg
ICB9LAorICAgICAgICAgICAgICAgIHQxMSA9IG4zMyAqIG4yMiAtIG4zMiAqIG4yMywKKyAgICAg
ICAgICAgICAgICB0MTIgPSBuMzIgKiBuMTMgLSBuMzMgKiBuMTIsCisgICAgICAgICAgICAgICAg
dDEzID0gbjIzICogbjEyIC0gbjIyICogbjEzLAogCi0gICAgICAgIHN1YlNjYWxhcjogZnVuY3Rp
b24gKCBzICkgeworICAgICAgICAgICAgICAgIGRldCA9IG4xMSAqIHQxMSArIG4yMSAqIHQxMiAr
IG4zMSAqIHQxMzsKIAotICAgICAgICAgICAgdGhpcy54IC09IHM7Ci0gICAgICAgICAgICB0aGlz
LnkgLT0gczsKLSAgICAgICAgICAgIHRoaXMueiAtPSBzOworICAgICAgICAgICAgaWYgKCBkZXQg
PT09IDAgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIHZh
ciBtc2cgPSAiVEhSRUUuTWF0cml4MzogLmdldEludmVyc2UoKSBjYW4ndCBpbnZlcnQgbWF0cml4
LCBkZXRlcm1pbmFudCBpcyAwIjsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIGlmICgg
dGhyb3dPbkRlZ2VuZXJhdGUgPT09IHRydWUgKSB7CiAKLSAgICAgICAgc3ViVmVjdG9yczogZnVu
Y3Rpb24gKCBhLCBiICkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIG1z
ZyApOwogCi0gICAgICAgICAgICB0aGlzLnggPSBhLnggLSBiLng7Ci0gICAgICAgICAgICB0aGlz
LnkgPSBhLnkgLSBiLnk7Ci0gICAgICAgICAgICB0aGlzLnogPSBhLnogLSBiLno7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnNvbGUud2FybiggbXNnICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgbXVsdGlwbHk6IGZ1bmN0aW9uICggdiwgdyApIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5pZGVudGl0eSgpOwogCi0gICAgICAgICAgICBpZiAoIHcgIT09
IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGNvbnNvbGUu
d2FybiggJ1RIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFy
Z3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuJyApOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLm11bHRpcGx5VmVjdG9ycyggdiwgdyApOworICAgICAgICAg
ICAgdmFyIGRldEludiA9IDEgLyBkZXQ7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRl
WyAwIF0gPSB0MTEgKiBkZXRJbnY7CisgICAgICAgICAgICB0ZVsgMSBdID0gKCBuMzEgKiBuMjMg
LSBuMzMgKiBuMjEgKSAqIGRldEludjsKKyAgICAgICAgICAgIHRlWyAyIF0gPSAoIG4zMiAqIG4y
MSAtIG4zMSAqIG4yMiApICogZGV0SW52OwogCi0gICAgICAgICAgICB0aGlzLnggKj0gdi54Owot
ICAgICAgICAgICAgdGhpcy55ICo9IHYueTsKLSAgICAgICAgICAgIHRoaXMueiAqPSB2Lno7Cisg
ICAgICAgICAgICB0ZVsgMyBdID0gdDEyICogZGV0SW52OworICAgICAgICAgICAgdGVbIDQgXSA9
ICggbjMzICogbjExIC0gbjMxICogbjEzICkgKiBkZXRJbnY7CisgICAgICAgICAgICB0ZVsgNSBd
ID0gKCBuMzEgKiBuMTIgLSBuMzIgKiBuMTEgKSAqIGRldEludjsKKworICAgICAgICAgICAgdGVb
IDYgXSA9IHQxMyAqIGRldEludjsKKyAgICAgICAgICAgIHRlWyA3IF0gPSAoIG4yMSAqIG4xMyAt
IG4yMyAqIG4xMSApICogZGV0SW52OworICAgICAgICAgICAgdGVbIDggXSA9ICggbjIyICogbjEx
IC0gbjIxICogbjEyICkgKiBkZXRJbnY7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAg
ICAgICAgIH0sCiAKLSAgICAgICAgbXVsdGlwbHlTY2FsYXI6IGZ1bmN0aW9uICggc2NhbGFyICkg
eworICAgICAgICB0cmFuc3Bvc2U6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgdGhpcy54
ICo9IHNjYWxhcjsKLSAgICAgICAgICAgIHRoaXMueSAqPSBzY2FsYXI7Ci0gICAgICAgICAgICB0
aGlzLnogKj0gc2NhbGFyOworICAgICAgICAgICAgdmFyIHRtcCwgbSA9IHRoaXMuZWxlbWVudHM7
CisKKyAgICAgICAgICAgIHRtcCA9IG1bIDEgXTsgbVsgMSBdID0gbVsgMyBdOyBtWyAzIF0gPSB0
bXA7CisgICAgICAgICAgICB0bXAgPSBtWyAyIF07IG1bIDIgXSA9IG1bIDYgXTsgbVsgNiBdID0g
dG1wOworICAgICAgICAgICAgdG1wID0gbVsgNSBdOyBtWyA1IF0gPSBtWyA3IF07IG1bIDcgXSA9
IHRtcDsKIAogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAg
ICBtdWx0aXBseVZlY3RvcnM6IGZ1bmN0aW9uICggYSwgYiApIHsKLQotICAgICAgICAgICAgdGhp
cy54ID0gYS54ICogYi54OwotICAgICAgICAgICAgdGhpcy55ID0gYS55ICogYi55OwotICAgICAg
ICAgICAgdGhpcy56ID0gYS56ICogYi56OworICAgICAgICBnZXROb3JtYWxNYXRyaXg6IGZ1bmN0
aW9uICggbWF0cml4NCApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4NCggbWF0cml4NCApLmdldEludmVyc2UoIHRoaXMg
KS50cmFuc3Bvc2UoKTsKIAogICAgICAgICB9LAogCi0gICAgICAgIGFwcGx5RXVsZXI6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdHJhbnNwb3NlSW50b0FycmF5OiBmdW5jdGlvbiAoIHIgKSB7CiAK
LSAgICAgICAgICAgIHZhciBxdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTsKKyAgICAgICAg
ICAgIHZhciBtID0gdGhpcy5lbGVtZW50czsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
IGFwcGx5RXVsZXIoIGV1bGVyICkgeworICAgICAgICAgICAgclsgMCBdID0gbVsgMCBdOworICAg
ICAgICAgICAgclsgMSBdID0gbVsgMyBdOworICAgICAgICAgICAgclsgMiBdID0gbVsgNiBdOwor
ICAgICAgICAgICAgclsgMyBdID0gbVsgMSBdOworICAgICAgICAgICAgclsgNCBdID0gbVsgNCBd
OworICAgICAgICAgICAgclsgNSBdID0gbVsgNyBdOworICAgICAgICAgICAgclsgNiBdID0gbVsg
MiBdOworICAgICAgICAgICAgclsgNyBdID0gbVsgNSBdOworICAgICAgICAgICAgclsgOCBdID0g
bVsgOCBdOwogCi0gICAgICAgICAgICAgICAgaWYgKCAhICggZXVsZXIgJiYgZXVsZXIuaXNFdWxl
ciApICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICAgICAg
Y29uc29sZS5lcnJvciggJ1RIUkVFLlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMg
YW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4nICk7Cisg
ICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIHNldFV2VHJhbnNmb3JtOiBm
dW5jdGlvbiAoIHR4LCB0eSwgc3gsIHN5LCByb3RhdGlvbiwgY3gsIGN5ICkgewogCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uLnNldEZyb21F
dWxlciggZXVsZXIgKSApOworICAgICAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyggcm90YXRpb24g
KTsKKyAgICAgICAgICAgIHZhciBzID0gTWF0aC5zaW4oIHJvdGF0aW9uICk7CiAKLSAgICAgICAg
ICAgIH07CisgICAgICAgICAgICB0aGlzLnNldCgKKyAgICAgICAgICAgICAgICBzeCAqIGMsIHN4
ICogcywgLSBzeCAqICggYyAqIGN4ICsgcyAqIGN5ICkgKyBjeCArIHR4LAorICAgICAgICAgICAg
ICAgIC0gc3kgKiBzLCBzeSAqIGMsIC0gc3kgKiAoIC0gcyAqIGN4ICsgYyAqIGN5ICkgKyBjeSAr
IHR5LAorICAgICAgICAgICAgICAgIDAsIDAsIDEKKyAgICAgICAgICAgICk7CiAKLSAgICAgICAg
fSgpLAorICAgICAgICB9LAogCi0gICAgICAgIGFwcGx5QXhpc0FuZ2xlOiBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHNjYWxlOiBmdW5jdGlvbiAoIHN4LCBzeSApIHsKIAotICAgICAgICAgICAgdmFy
IHF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpOworICAgICAgICAgICAgdmFyIHRlID0gdGhp
cy5lbGVtZW50czsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGFwcGx5QXhpc0FuZ2xl
KCBheGlzLCBhbmdsZSApIHsKKyAgICAgICAgICAgIHRlWyAwIF0gKj0gc3g7IHRlWyAzIF0gKj0g
c3g7IHRlWyA2IF0gKj0gc3g7CisgICAgICAgICAgICB0ZVsgMSBdICo9IHN5OyB0ZVsgNCBdICo9
IHN5OyB0ZVsgNyBdICo9IHN5OwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlR
dWF0ZXJuaW9uKCBxdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoIGF4aXMsIGFuZ2xlICkgKTsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICB9OworICAgICAgICB9LAog
Ci0gICAgICAgIH0oKSwKKyAgICAgICAgcm90YXRlOiBmdW5jdGlvbiAoIHRoZXRhICkgewogCi0g
ICAgICAgIGFwcGx5TWF0cml4MzogZnVuY3Rpb24gKCBtICkgeworICAgICAgICAgICAgdmFyIGMg
PSBNYXRoLmNvcyggdGhldGEgKTsKKyAgICAgICAgICAgIHZhciBzID0gTWF0aC5zaW4oIHRoZXRh
ICk7CiAKLSAgICAgICAgICAgIHZhciB4ID0gdGhpcy54LCB5ID0gdGhpcy55LCB6ID0gdGhpcy56
OwotICAgICAgICAgICAgdmFyIGUgPSBtLmVsZW1lbnRzOworICAgICAgICAgICAgdmFyIHRlID0g
dGhpcy5lbGVtZW50czsKIAotICAgICAgICAgICAgdGhpcy54ID0gZVsgMCBdICogeCArIGVbIDMg
XSAqIHkgKyBlWyA2IF0gKiB6OwotICAgICAgICAgICAgdGhpcy55ID0gZVsgMSBdICogeCArIGVb
IDQgXSAqIHkgKyBlWyA3IF0gKiB6OwotICAgICAgICAgICAgdGhpcy56ID0gZVsgMiBdICogeCAr
IGVbIDUgXSAqIHkgKyBlWyA4IF0gKiB6OworICAgICAgICAgICAgdmFyIGExMSA9IHRlWyAwIF0s
IGExMiA9IHRlWyAzIF0sIGExMyA9IHRlWyA2IF07CisgICAgICAgICAgICB2YXIgYTIxID0gdGVb
IDEgXSwgYTIyID0gdGVbIDQgXSwgYTIzID0gdGVbIDcgXTsKKworICAgICAgICAgICAgdGVbIDAg
XSA9IGMgKiBhMTEgKyBzICogYTIxOworICAgICAgICAgICAgdGVbIDMgXSA9IGMgKiBhMTIgKyBz
ICogYTIyOworICAgICAgICAgICAgdGVbIDYgXSA9IGMgKiBhMTMgKyBzICogYTIzOworCisgICAg
ICAgICAgICB0ZVsgMSBdID0gLSBzICogYTExICsgYyAqIGEyMTsKKyAgICAgICAgICAgIHRlWyA0
IF0gPSAtIHMgKiBhMTIgKyBjICogYTIyOworICAgICAgICAgICAgdGVbIDcgXSA9IC0gcyAqIGEx
MyArIGMgKiBhMjM7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAK
LSAgICAgICAgYXBwbHlNYXRyaXg0OiBmdW5jdGlvbiAoIG0gKSB7Ci0KLSAgICAgICAgICAgIHZh
ciB4ID0gdGhpcy54LCB5ID0gdGhpcy55LCB6ID0gdGhpcy56OwotICAgICAgICAgICAgdmFyIGUg
PSBtLmVsZW1lbnRzOworICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uICggdHgsIHR5ICkgewog
Ci0gICAgICAgICAgICB2YXIgdyA9IDEgLyAoIGVbIDMgXSAqIHggKyBlWyA3IF0gKiB5ICsgZVsg
MTEgXSAqIHogKyBlWyAxNSBdICk7CisgICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRz
OwogCi0gICAgICAgICAgICB0aGlzLnggPSAoIGVbIDAgXSAqIHggKyBlWyA0IF0gKiB5ICsgZVsg
OCBdICogeiArIGVbIDEyIF0gKSAqIHc7Ci0gICAgICAgICAgICB0aGlzLnkgPSAoIGVbIDEgXSAq
IHggKyBlWyA1IF0gKiB5ICsgZVsgOSBdICogeiArIGVbIDEzIF0gKSAqIHc7Ci0gICAgICAgICAg
ICB0aGlzLnogPSAoIGVbIDIgXSAqIHggKyBlWyA2IF0gKiB5ICsgZVsgMTAgXSAqIHogKyBlWyAx
NCBdICkgKiB3OworICAgICAgICAgICAgdGVbIDAgXSArPSB0eCAqIHRlWyAyIF07IHRlWyAzIF0g
Kz0gdHggKiB0ZVsgNSBdOyB0ZVsgNiBdICs9IHR4ICogdGVbIDggXTsKKyAgICAgICAgICAgIHRl
WyAxIF0gKz0gdHkgKiB0ZVsgMiBdOyB0ZVsgNCBdICs9IHR5ICogdGVbIDUgXTsgdGVbIDcgXSAr
PSB0eSAqIHRlWyA4IF07CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0s
CiAKLSAgICAgICAgYXBwbHlRdWF0ZXJuaW9uOiBmdW5jdGlvbiAoIHEgKSB7Ci0KLSAgICAgICAg
ICAgIHZhciB4ID0gdGhpcy54LCB5ID0gdGhpcy55LCB6ID0gdGhpcy56OwotICAgICAgICAgICAg
dmFyIHF4ID0gcS54LCBxeSA9IHEueSwgcXogPSBxLnosIHF3ID0gcS53OworICAgICAgICBlcXVh
bHM6IGZ1bmN0aW9uICggbWF0cml4ICkgewogCi0gICAgICAgICAgICAvLyBjYWxjdWxhdGUgcXVh
dCAqIHZlY3RvcgorICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKKyAgICAgICAg
ICAgIHZhciBtZSA9IG1hdHJpeC5lbGVtZW50czsKIAotICAgICAgICAgICAgdmFyIGl4ID0gcXcg
KiB4ICsgcXkgKiB6IC0gcXogKiB5OwotICAgICAgICAgICAgdmFyIGl5ID0gcXcgKiB5ICsgcXog
KiB4IC0gcXggKiB6OwotICAgICAgICAgICAgdmFyIGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkg
KiB4OwotICAgICAgICAgICAgdmFyIGl3ID0gLSBxeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7Cisg
ICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCA5OyBpICsrICkgewogCi0gICAgICAgICAg
ICAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0CisgICAgICAgICAgICAgICAgaWYg
KCB0ZVsgaSBdICE9PSBtZVsgaSBdICkgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICB0aGlz
LnggPSBpeCAqIHF3ICsgaXcgKiAtIHF4ICsgaXkgKiAtIHF6IC0gaXogKiAtIHF5OwotICAgICAg
ICAgICAgdGhpcy55ID0gaXkgKiBxdyArIGl3ICogLSBxeSArIGl6ICogLSBxeCAtIGl4ICogLSBx
ejsKLSAgICAgICAgICAgIHRoaXMueiA9IGl6ICogcXcgKyBpdyAqIC0gcXogKyBpeCAqIC0gcXkg
LSBpeSAqIC0gcXg7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgfSwKIAotICAgICAgICBwcm9qZWN0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGZyb21BcnJheTogZnVuY3Rpb24gKCBhcnJheSwgb2Zm
c2V0ICkgewogCi0gICAgICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeDQoKTsKKyAgICAg
ICAgICAgIGlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwOwogCi0gICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gcHJvamVjdCggY2FtZXJhICkgeworICAgICAgICAgICAgZm9y
ICggdmFyIGkgPSAwOyBpIDwgOTsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgIG1hdHJpeC5t
dWx0aXBseU1hdHJpY2VzKCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeCwgbWF0cml4LmdldEludmVy
c2UoIGNhbWVyYS5tYXRyaXhXb3JsZCApICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
YXBwbHlNYXRyaXg0KCBtYXRyaXggKTsKKyAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzWyBp
IF0gPSBhcnJheVsgaSArIG9mZnNldCBdOwogCi0gICAgICAgICAgICB9OworICAgICAgICAgICAg
fQogCi0gICAgICAgIH0oKSwKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIHVu
cHJvamVjdDogZnVuY3Rpb24gKCkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICB2YXIgbWF0
cml4ID0gbmV3IE1hdHJpeDQoKTsKKyAgICAgICAgdG9BcnJheTogZnVuY3Rpb24gKCBhcnJheSwg
b2Zmc2V0ICkgewogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdW5wcm9qZWN0KCBjYW1l
cmEgKSB7CisgICAgICAgICAgICBpZiAoIGFycmF5ID09PSB1bmRlZmluZWQgKSBhcnJheSA9IFtd
OworICAgICAgICAgICAgaWYgKCBvZmZzZXQgPT09IHVuZGVmaW5lZCApIG9mZnNldCA9IDA7CiAK
LSAgICAgICAgICAgICAgICBtYXRyaXgubXVsdGlwbHlNYXRyaWNlcyggY2FtZXJhLm1hdHJpeFdv
cmxkLCBtYXRyaXguZ2V0SW52ZXJzZSggY2FtZXJhLnByb2plY3Rpb25NYXRyaXggKSApOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5TWF0cml4NCggbWF0cml4ICk7CisgICAgICAg
ICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzOwogCi0gICAgICAgICAgICB9OworICAgICAgICAg
ICAgYXJyYXlbIG9mZnNldCBdID0gdGVbIDAgXTsKKyAgICAgICAgICAgIGFycmF5WyBvZmZzZXQg
KyAxIF0gPSB0ZVsgMSBdOworICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDIgXSA9IHRlWyAy
IF07CiAKLSAgICAgICAgfSgpLAorICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDMgXSA9IHRl
WyAzIF07CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgNCBdID0gdGVbIDQgXTsKKyAgICAg
ICAgICAgIGFycmF5WyBvZmZzZXQgKyA1IF0gPSB0ZVsgNSBdOwogCi0gICAgICAgIHRyYW5zZm9y
bURpcmVjdGlvbjogZnVuY3Rpb24gKCBtICkgeworICAgICAgICAgICAgYXJyYXlbIG9mZnNldCAr
IDYgXSA9IHRlWyA2IF07CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgNyBdID0gdGVbIDcg
XTsKKyAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyA4IF0gPSB0ZVsgOCBdOwogCi0gICAgICAg
ICAgICAvLyBpbnB1dDogVEhSRUUuTWF0cml4NCBhZmZpbmUgbWF0cml4Ci0gICAgICAgICAgICAv
LyB2ZWN0b3IgaW50ZXJwcmV0ZWQgYXMgYSBkaXJlY3Rpb24KKyAgICAgICAgICAgIHJldHVybiBh
cnJheTsKIAotICAgICAgICAgICAgdmFyIHggPSB0aGlzLngsIHkgPSB0aGlzLnksIHogPSB0aGlz
Lno7Ci0gICAgICAgICAgICB2YXIgZSA9IG0uZWxlbWVudHM7CisgICAgICAgIH0KIAotICAgICAg
ICAgICAgdGhpcy54ID0gZVsgMCBdICogeCArIGVbIDQgXSAqIHkgKyBlWyA4IF0gKiB6OwotICAg
ICAgICAgICAgdGhpcy55ID0gZVsgMSBdICogeCArIGVbIDUgXSAqIHkgKyBlWyA5IF0gKiB6Owot
ICAgICAgICAgICAgdGhpcy56ID0gZVsgMiBdICogeCArIGVbIDYgXSAqIHkgKyBlWyAxMCBdICog
ejsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZSgpOworICAg
IC8qKgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICog
QGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KKyAgICAgKiBAYXV0
aG9yIHN6aW1layAvIGh0dHBzOi8vZ2l0aHViLmNvbS9zemltZWsvCisgICAgICovCiAKLSAgICAg
ICAgfSwKKyAgICB2YXIgX2NhbnZhczsKIAotICAgICAgICBkaXZpZGU6IGZ1bmN0aW9uICggdiAp
IHsKKyAgICB2YXIgSW1hZ2VVdGlscyA9IHsKIAotICAgICAgICAgICAgdGhpcy54IC89IHYueDsK
LSAgICAgICAgICAgIHRoaXMueSAvPSB2Lnk7Ci0gICAgICAgICAgICB0aGlzLnogLz0gdi56Owor
ICAgICAgICBnZXREYXRhVVJMOiBmdW5jdGlvbiAoIGltYWdlICkgewogCi0gICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgICAgIHZhciBjYW52YXM7CiAKLSAgICAgICAgfSwKKyAgICAg
ICAgICAgIGlmICggdHlwZW9mIEhUTUxDYW52YXNFbGVtZW50ID09ICd1bmRlZmluZWQnICkgewog
Ci0gICAgICAgIGRpdmlkZVNjYWxhcjogZnVuY3Rpb24gKCBzY2FsYXIgKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGltYWdlLnNyYzsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlw
bHlTY2FsYXIoIDEgLyBzY2FsYXIgKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIGltYWdlIGlu
c3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICBjYW52YXMgPSBpbWFnZTsKIAotICAgICAgICBtaW46IGZ1bmN0aW9uICggdiApIHsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgIHRoaXMueCA9IE1hdGgubWluKCB0aGlz
LngsIHYueCApOwotICAgICAgICAgICAgdGhpcy55ID0gTWF0aC5taW4oIHRoaXMueSwgdi55ICk7
Ci0gICAgICAgICAgICB0aGlzLnogPSBNYXRoLm1pbiggdGhpcy56LCB2LnogKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIF9jYW52YXMgPT09IHVuZGVmaW5lZCApIF9jYW52YXMgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50TlMoICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2NhbnZhcycg
KTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgX2NhbnZhcy53
aWR0aCA9IGltYWdlLndpZHRoOworICAgICAgICAgICAgICAgIF9jYW52YXMuaGVpZ2h0ID0gaW1h
Z2UuaGVpZ2h0OwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBf
Y2FudmFzLmdldENvbnRleHQoICcyZCcgKTsKIAotICAgICAgICBtYXg6IGZ1bmN0aW9uICggdiAp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIGltYWdlIGluc3RhbmNlb2YgSW1hZ2VEYXRhICkgewog
Ci0gICAgICAgICAgICB0aGlzLnggPSBNYXRoLm1heCggdGhpcy54LCB2LnggKTsKLSAgICAgICAg
ICAgIHRoaXMueSA9IE1hdGgubWF4KCB0aGlzLnksIHYueSApOwotICAgICAgICAgICAgdGhpcy56
ID0gTWF0aC5tYXgoIHRoaXMueiwgdi56ICk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cHV0SW1hZ2VEYXRhKCBpbWFnZSwgMCwgMCApOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQuZHJhd0ltYWdlKCBpbWFnZSwgMCwgMCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhl
aWdodCApOwogCi0gICAgICAgIGNsYW1wOiBmdW5jdGlvbiAoIG1pbiwgbWF4ICkgeworICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gYXNzdW1lcyBtaW4gPCBtYXgsIGNvbXBvbmVu
dHdpc2UKKyAgICAgICAgICAgICAgICBjYW52YXMgPSBfY2FudmFzOwogCi0gICAgICAgICAgICB0
aGlzLnggPSBNYXRoLm1heCggbWluLngsIE1hdGgubWluKCBtYXgueCwgdGhpcy54ICkgKTsKLSAg
ICAgICAgICAgIHRoaXMueSA9IE1hdGgubWF4KCBtaW4ueSwgTWF0aC5taW4oIG1heC55LCB0aGlz
LnkgKSApOwotICAgICAgICAgICAgdGhpcy56ID0gTWF0aC5tYXgoIG1pbi56LCBNYXRoLm1pbigg
bWF4LnosIHRoaXMueiApICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICAgICAgaWYgKCBjYW52YXMud2lkdGggPiAyMDQ4IHx8IGNhbnZhcy5oZWln
aHQgPiAyMDQ4ICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbnZh
cy50b0RhdGFVUkwoICdpbWFnZS9qcGVnJywgMC42ICk7CiAKLSAgICAgICAgY2xhbXBTY2FsYXI6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgIHZhciBt
aW4gPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgdmFyIG1heCA9IG5ldyBWZWN0b3IzKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbnZhcy50b0RhdGFVUkwoICdpbWFnZS9wbmcnICk7
CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjbGFtcFNjYWxhciggbWluVmFsLCBtYXhW
YWwgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBtaW4uc2V0KCBtaW5WYWws
IG1pblZhbCwgbWluVmFsICk7Ci0gICAgICAgICAgICAgICAgbWF4LnNldCggbWF4VmFsLCBtYXhW
YWwsIG1heFZhbCApOworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5j
bGFtcCggbWluLCBtYXggKTsKKyAgICB9OwogCi0gICAgICAgICAgICB9OworICAgIC8qKgorICAg
ICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICogQGF1dGhvciBh
bHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KKyAgICAgKiBAYXV0aG9yIHN6aW1l
ayAvIGh0dHBzOi8vZ2l0aHViLmNvbS9zemltZWsvCisgICAgICovCiAKLSAgICAgICAgfSgpLAor
ICAgIHZhciB0ZXh0dXJlSWQgPSAwOwogCi0gICAgICAgIGNsYW1wTGVuZ3RoOiBmdW5jdGlvbiAo
IG1pbiwgbWF4ICkgeworICAgIGZ1bmN0aW9uIFRleHR1cmUoIGltYWdlLCBtYXBwaW5nLCB3cmFw
Uywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHks
IGVuY29kaW5nICkgewogCi0gICAgICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKTsK
LQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKCBsZW5ndGggfHwgMSApLm11
bHRpcGx5U2NhbGFyKCBNYXRoLm1heCggbWluLCBNYXRoLm1pbiggbWF4LCBsZW5ndGggKSApICk7
Ci0KLSAgICAgICAgfSwKLQotICAgICAgICBmbG9vcjogZnVuY3Rpb24gKCkgewotCi0gICAgICAg
ICAgICB0aGlzLnggPSBNYXRoLmZsb29yKCB0aGlzLnggKTsKLSAgICAgICAgICAgIHRoaXMueSA9
IE1hdGguZmxvb3IoIHRoaXMueSApOwotICAgICAgICAgICAgdGhpcy56ID0gTWF0aC5mbG9vcigg
dGhpcy56ICk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotCi0gICAgICAgIH0sCi0KLSAg
ICAgICAgY2VpbDogZnVuY3Rpb24gKCkgewotCi0gICAgICAgICAgICB0aGlzLnggPSBNYXRoLmNl
aWwoIHRoaXMueCApOwotICAgICAgICAgICAgdGhpcy55ID0gTWF0aC5jZWlsKCB0aGlzLnkgKTsK
LSAgICAgICAgICAgIHRoaXMueiA9IE1hdGguY2VpbCggdGhpcy56ICk7CisgICAgICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgJ2lkJywgeyB2YWx1ZTogdGV4dHVyZUlkICsrIH0gKTsK
IAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIHRoaXMudXVpZCA9IF9NYXRoLmdl
bmVyYXRlVVVJRCgpOwogCi0gICAgICAgIH0sCisgICAgICAgIHRoaXMubmFtZSA9ICcnOwogCi0g
ICAgICAgIHJvdW5kOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuaW1hZ2UgPSBpbWFnZSAh
PT0gdW5kZWZpbmVkID8gaW1hZ2UgOiBUZXh0dXJlLkRFRkFVTFRfSU1BR0U7CisgICAgICAgIHRo
aXMubWlwbWFwcyA9IFtdOwogCi0gICAgICAgICAgICB0aGlzLnggPSBNYXRoLnJvdW5kKCB0aGlz
LnggKTsKLSAgICAgICAgICAgIHRoaXMueSA9IE1hdGgucm91bmQoIHRoaXMueSApOwotICAgICAg
ICAgICAgdGhpcy56ID0gTWF0aC5yb3VuZCggdGhpcy56ICk7CisgICAgICAgIHRoaXMubWFwcGlu
ZyA9IG1hcHBpbmcgIT09IHVuZGVmaW5lZCA/IG1hcHBpbmcgOiBUZXh0dXJlLkRFRkFVTFRfTUFQ
UElORzsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIHRoaXMud3JhcFMgPSB3
cmFwUyAhPT0gdW5kZWZpbmVkID8gd3JhcFMgOiBDbGFtcFRvRWRnZVdyYXBwaW5nOworICAgICAg
ICB0aGlzLndyYXBUID0gd3JhcFQgIT09IHVuZGVmaW5lZCA/IHdyYXBUIDogQ2xhbXBUb0VkZ2VX
cmFwcGluZzsKIAotICAgICAgICB9LAorICAgICAgICB0aGlzLm1hZ0ZpbHRlciA9IG1hZ0ZpbHRl
ciAhPT0gdW5kZWZpbmVkID8gbWFnRmlsdGVyIDogTGluZWFyRmlsdGVyOworICAgICAgICB0aGlz
Lm1pbkZpbHRlciA9IG1pbkZpbHRlciAhPT0gdW5kZWZpbmVkID8gbWluRmlsdGVyIDogTGluZWFy
TWlwTWFwTGluZWFyRmlsdGVyOwogCi0gICAgICAgIHJvdW5kVG9aZXJvOiBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHRoaXMuYW5pc290cm9weSA9IGFuaXNvdHJvcHkgIT09IHVuZGVmaW5lZCA/IGFu
aXNvdHJvcHkgOiAxOwogCi0gICAgICAgICAgICB0aGlzLnggPSAoIHRoaXMueCA8IDAgKSA/IE1h
dGguY2VpbCggdGhpcy54ICkgOiBNYXRoLmZsb29yKCB0aGlzLnggKTsKLSAgICAgICAgICAgIHRo
aXMueSA9ICggdGhpcy55IDwgMCApID8gTWF0aC5jZWlsKCB0aGlzLnkgKSA6IE1hdGguZmxvb3Io
IHRoaXMueSApOwotICAgICAgICAgICAgdGhpcy56ID0gKCB0aGlzLnogPCAwICkgPyBNYXRoLmNl
aWwoIHRoaXMueiApIDogTWF0aC5mbG9vciggdGhpcy56ICk7CisgICAgICAgIHRoaXMuZm9ybWF0
ID0gZm9ybWF0ICE9PSB1bmRlZmluZWQgPyBmb3JtYXQgOiBSR0JBRm9ybWF0OworICAgICAgICB0
aGlzLnR5cGUgPSB0eXBlICE9PSB1bmRlZmluZWQgPyB0eXBlIDogVW5zaWduZWRCeXRlVHlwZTsK
IAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFZl
Y3RvcjIoIDAsIDAgKTsKKyAgICAgICAgdGhpcy5yZXBlYXQgPSBuZXcgVmVjdG9yMiggMSwgMSAp
OworICAgICAgICB0aGlzLmNlbnRlciA9IG5ldyBWZWN0b3IyKCAwLCAwICk7CisgICAgICAgIHRo
aXMucm90YXRpb24gPSAwOwogCi0gICAgICAgIH0sCisgICAgICAgIHRoaXMubWF0cml4QXV0b1Vw
ZGF0ZSA9IHRydWU7CisgICAgICAgIHRoaXMubWF0cml4ID0gbmV3IE1hdHJpeDMoKTsKIAotICAg
ICAgICBuZWdhdGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5nZW5lcmF0ZU1pcG1hcHMg
PSB0cnVlOworICAgICAgICB0aGlzLnByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTsKKyAgICAgICAg
dGhpcy5mbGlwWSA9IHRydWU7CisgICAgICAgIHRoaXMudW5wYWNrQWxpZ25tZW50ID0gNDsgICAv
LyB2YWxpZCB2YWx1ZXM6IDEsIDIsIDQsIDggKHNlZSBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL29w
ZW5nbGVzL3Nkay9kb2NzL21hbi94aHRtbC9nbFBpeGVsU3RvcmVpLnhtbCkKIAotICAgICAgICAg
ICAgdGhpcy54ID0gLSB0aGlzLng7Ci0gICAgICAgICAgICB0aGlzLnkgPSAtIHRoaXMueTsKLSAg
ICAgICAgICAgIHRoaXMueiA9IC0gdGhpcy56OworICAgICAgICAvLyBWYWx1ZXMgb2YgZW5jb2Rp
bmcgIT09IFRIUkVFLkxpbmVhckVuY29kaW5nIG9ubHkgc3VwcG9ydGVkIG9uIG1hcCwgZW52TWFw
IGFuZCBlbWlzc2l2ZU1hcC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gQWxzbyBjaGFuZ2luZyB0
aGUgZW5jb2RpbmcgYWZ0ZXIgYWxyZWFkeSB1c2VkIGJ5IGEgTWF0ZXJpYWwgd2lsbCBub3QgYXV0
b21hdGljYWxseSBtYWtlIHRoZSBNYXRlcmlhbAorICAgICAgICAvLyB1cGRhdGUuIFlvdSBuZWVk
IHRvIGV4cGxpY2l0bHkgY2FsbCBNYXRlcmlhbC5uZWVkc1VwZGF0ZSB0byB0cmlnZ2VyIGl0IHRv
IHJlY29tcGlsZS4KKyAgICAgICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nICE9PSB1bmRlZmlu
ZWQgPyBlbmNvZGluZyA6IExpbmVhckVuY29kaW5nOwogCi0gICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgdGhpcy52ZXJzaW9uID0gMDsKKyAgICAgICAgdGhpcy5vblVwZGF0ZSA9IG51
bGw7CiAKLSAgICAgICAgfSwKKyAgICB9CiAKLSAgICAgICAgZG90OiBmdW5jdGlvbiAoIHYgKSB7
CisgICAgVGV4dHVyZS5ERUZBVUxUX0lNQUdFID0gdW5kZWZpbmVkOworICAgIFRleHR1cmUuREVG
QVVMVF9NQVBQSU5HID0gVVZNYXBwaW5nOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpcy54ICog
di54ICsgdGhpcy55ICogdi55ICsgdGhpcy56ICogdi56OworICAgIFRleHR1cmUucHJvdG90eXBl
ID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggRXZlbnREaXNwYXRjaGVyLnByb3RvdHlw
ZSApLCB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgY29uc3RydWN0b3I6IFRleHR1cmUsCiAKLSAg
ICAgICAgLy8gVE9ETyBsZW5ndGhTcXVhcmVkPworICAgICAgICBpc1RleHR1cmU6IHRydWUsCiAK
LSAgICAgICAgbGVuZ3RoU3E6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdXBkYXRlTWF0cml4OiBm
dW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnggKiB0aGlzLnggKyB0aGlz
LnkgKiB0aGlzLnkgKyB0aGlzLnogKiB0aGlzLno7CisgICAgICAgICAgICB0aGlzLm1hdHJpeC5z
ZXRVdlRyYW5zZm9ybSggdGhpcy5vZmZzZXQueCwgdGhpcy5vZmZzZXQueSwgdGhpcy5yZXBlYXQu
eCwgdGhpcy5yZXBlYXQueSwgdGhpcy5yb3RhdGlvbiwgdGhpcy5jZW50ZXIueCwgdGhpcy5jZW50
ZXIueSApOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBNYXRoLnNx
cnQoIHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMueiAp
OworICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyAp
OwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgbWFuaGF0dGFuTGVuZ3RoOiBmdW5jdGlvbiAoKSB7
CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkgewogCi0gICAgICAgICAgICByZXR1
cm4gTWF0aC5hYnMoIHRoaXMueCApICsgTWF0aC5hYnMoIHRoaXMueSApICsgTWF0aC5hYnMoIHRo
aXMueiApOworICAgICAgICAgICAgdGhpcy5uYW1lID0gc291cmNlLm5hbWU7CiAKLSAgICAgICAg
fSwKKyAgICAgICAgICAgIHRoaXMuaW1hZ2UgPSBzb3VyY2UuaW1hZ2U7CisgICAgICAgICAgICB0
aGlzLm1pcG1hcHMgPSBzb3VyY2UubWlwbWFwcy5zbGljZSggMCApOwogCi0gICAgICAgIG5vcm1h
bGl6ZTogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5tYXBwaW5nID0gc291cmNlLm1h
cHBpbmc7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmRpdmlkZVNjYWxhciggdGhpcy5sZW5n
dGgoKSB8fCAxICk7CisgICAgICAgICAgICB0aGlzLndyYXBTID0gc291cmNlLndyYXBTOworICAg
ICAgICAgICAgdGhpcy53cmFwVCA9IHNvdXJjZS53cmFwVDsKIAotICAgICAgICB9LAorICAgICAg
ICAgICAgdGhpcy5tYWdGaWx0ZXIgPSBzb3VyY2UubWFnRmlsdGVyOworICAgICAgICAgICAgdGhp
cy5taW5GaWx0ZXIgPSBzb3VyY2UubWluRmlsdGVyOwogCi0gICAgICAgIHNldExlbmd0aDogZnVu
Y3Rpb24gKCBsZW5ndGggKSB7CisgICAgICAgICAgICB0aGlzLmFuaXNvdHJvcHkgPSBzb3VyY2Uu
YW5pc290cm9weTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlw
bHlTY2FsYXIoIGxlbmd0aCApOworICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBzb3VyY2UuZm9y
bWF0OworICAgICAgICAgICAgdGhpcy50eXBlID0gc291cmNlLnR5cGU7CiAKLSAgICAgICAgfSwK
KyAgICAgICAgICAgIHRoaXMub2Zmc2V0LmNvcHkoIHNvdXJjZS5vZmZzZXQgKTsKKyAgICAgICAg
ICAgIHRoaXMucmVwZWF0LmNvcHkoIHNvdXJjZS5yZXBlYXQgKTsKKyAgICAgICAgICAgIHRoaXMu
Y2VudGVyLmNvcHkoIHNvdXJjZS5jZW50ZXIgKTsKKyAgICAgICAgICAgIHRoaXMucm90YXRpb24g
PSBzb3VyY2Uucm90YXRpb247CiAKLSAgICAgICAgbGVycDogZnVuY3Rpb24gKCB2LCBhbHBoYSAp
IHsKKyAgICAgICAgICAgIHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IHNvdXJjZS5tYXRyaXhBdXRv
VXBkYXRlOworICAgICAgICAgICAgdGhpcy5tYXRyaXguY29weSggc291cmNlLm1hdHJpeCApOwog
Ci0gICAgICAgICAgICB0aGlzLnggKz0gKCB2LnggLSB0aGlzLnggKSAqIGFscGhhOwotICAgICAg
ICAgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTsKLSAgICAgICAgICAgIHRo
aXMueiArPSAoIHYueiAtIHRoaXMueiApICogYWxwaGE7CisgICAgICAgICAgICB0aGlzLmdlbmVy
YXRlTWlwbWFwcyA9IHNvdXJjZS5nZW5lcmF0ZU1pcG1hcHM7CisgICAgICAgICAgICB0aGlzLnBy
ZW11bHRpcGx5QWxwaGEgPSBzb3VyY2UucHJlbXVsdGlwbHlBbHBoYTsKKyAgICAgICAgICAgIHRo
aXMuZmxpcFkgPSBzb3VyY2UuZmxpcFk7CisgICAgICAgICAgICB0aGlzLnVucGFja0FsaWdubWVu
dCA9IHNvdXJjZS51bnBhY2tBbGlnbm1lbnQ7CisgICAgICAgICAgICB0aGlzLmVuY29kaW5nID0g
c291cmNlLmVuY29kaW5nOwogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9
LAogCi0gICAgICAgIGxlcnBWZWN0b3JzOiBmdW5jdGlvbiAoIHYxLCB2MiwgYWxwaGEgKSB7Ci0K
LSAgICAgICAgICAgIHJldHVybiB0aGlzLnN1YlZlY3RvcnMoIHYyLCB2MSApLm11bHRpcGx5U2Nh
bGFyKCBhbHBoYSApLmFkZCggdjEgKTsKLQotICAgICAgICB9LAorICAgICAgICB0b0pTT046IGZ1
bmN0aW9uICggbWV0YSApIHsKIAotICAgICAgICBjcm9zczogZnVuY3Rpb24gKCB2LCB3ICkgewor
ICAgICAgICAgICAgdmFyIGlzUm9vdE9iamVjdCA9ICggbWV0YSA9PT0gdW5kZWZpbmVkIHx8IHR5
cGVvZiBtZXRhID09PSAnc3RyaW5nJyApOwogCi0gICAgICAgICAgICBpZiAoIHcgIT09IHVuZGVm
aW5lZCApIHsKKyAgICAgICAgICAgIGlmICggISBpc1Jvb3RPYmplY3QgJiYgbWV0YS50ZXh0dXJl
c1sgdGhpcy51dWlkIF0gIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgIGNvbnNv
bGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IC5jcm9zcygpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFy
Z3VtZW50LiBVc2UgLmNyb3NzVmVjdG9ycyggYSwgYiApIGluc3RlYWQuJyApOwotICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLmNyb3NzVmVjdG9ycyggdiwgdyApOworICAgICAgICAgICAgICAg
IHJldHVybiBtZXRhLnRleHR1cmVzWyB0aGlzLnV1aWQgXTsKIAogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICByZXR1cm4gdGhpcy5jcm9zc1ZlY3RvcnMoIHRoaXMsIHYgKTsKKyAgICAgICAg
ICAgIHZhciBvdXRwdXQgPSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBtZXRhZGF0
YTogeworICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiA0LjUsCisgICAgICAgICAgICAgICAg
ICAgIHR5cGU6ICdUZXh0dXJlJywKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiAnVGV4
dHVyZS50b0pTT04nCisgICAgICAgICAgICAgICAgfSwKIAotICAgICAgICBjcm9zc1ZlY3RvcnM6
IGZ1bmN0aW9uICggYSwgYiApIHsKKyAgICAgICAgICAgICAgICB1dWlkOiB0aGlzLnV1aWQsCisg
ICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLAogCi0gICAgICAgICAgICB2YXIgYXggPSBh
LngsIGF5ID0gYS55LCBheiA9IGEuejsKLSAgICAgICAgICAgIHZhciBieCA9IGIueCwgYnkgPSBi
LnksIGJ6ID0gYi56OworICAgICAgICAgICAgICAgIG1hcHBpbmc6IHRoaXMubWFwcGluZywKIAot
ICAgICAgICAgICAgdGhpcy54ID0gYXkgKiBieiAtIGF6ICogYnk7Ci0gICAgICAgICAgICB0aGlz
LnkgPSBheiAqIGJ4IC0gYXggKiBiejsKLSAgICAgICAgICAgIHRoaXMueiA9IGF4ICogYnkgLSBh
eSAqIGJ4OworICAgICAgICAgICAgICAgIHJlcGVhdDogWyB0aGlzLnJlcGVhdC54LCB0aGlzLnJl
cGVhdC55IF0sCisgICAgICAgICAgICAgICAgb2Zmc2V0OiBbIHRoaXMub2Zmc2V0LngsIHRoaXMu
b2Zmc2V0LnkgXSwKKyAgICAgICAgICAgICAgICBjZW50ZXI6IFsgdGhpcy5jZW50ZXIueCwgdGhp
cy5jZW50ZXIueSBdLAorICAgICAgICAgICAgICAgIHJvdGF0aW9uOiB0aGlzLnJvdGF0aW9uLAog
Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB3cmFwOiBbIHRoaXMu
d3JhcFMsIHRoaXMud3JhcFQgXSwKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIGZvcm1h
dDogdGhpcy5mb3JtYXQsCisgICAgICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLAorICAgICAg
ICAgICAgICAgIGVuY29kaW5nOiB0aGlzLmVuY29kaW5nLAogCi0gICAgICAgIHByb2plY3RPblZl
Y3RvcjogZnVuY3Rpb24gKCB2ZWN0b3IgKSB7CisgICAgICAgICAgICAgICAgbWluRmlsdGVyOiB0
aGlzLm1pbkZpbHRlciwKKyAgICAgICAgICAgICAgICBtYWdGaWx0ZXI6IHRoaXMubWFnRmlsdGVy
LAorICAgICAgICAgICAgICAgIGFuaXNvdHJvcHk6IHRoaXMuYW5pc290cm9weSwKIAotICAgICAg
ICAgICAgdmFyIHNjYWxhciA9IHZlY3Rvci5kb3QoIHRoaXMgKSAvIHZlY3Rvci5sZW5ndGhTcSgp
OworICAgICAgICAgICAgICAgIGZsaXBZOiB0aGlzLmZsaXBZLAogCi0gICAgICAgICAgICByZXR1
cm4gdGhpcy5jb3B5KCB2ZWN0b3IgKS5tdWx0aXBseVNjYWxhciggc2NhbGFyICk7CisgICAgICAg
ICAgICAgICAgcHJlbXVsdGlwbHlBbHBoYTogdGhpcy5wcmVtdWx0aXBseUFscGhhLAorICAgICAg
ICAgICAgICAgIHVucGFja0FsaWdubWVudDogdGhpcy51bnBhY2tBbGlnbm1lbnQKIAotICAgICAg
ICB9LAorICAgICAgICAgICAgfTsKIAotICAgICAgICBwcm9qZWN0T25QbGFuZTogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgaWYgKCB0aGlzLmltYWdlICE9PSB1bmRlZmluZWQgKSB7CiAKLSAg
ICAgICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICAgICAgLy8gVE9E
TzogTW92ZSB0byBUSFJFRS5JbWFnZQogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcHJv
amVjdE9uUGxhbmUoIHBsYW5lTm9ybWFsICkgeworICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9
IHRoaXMuaW1hZ2U7CiAKLSAgICAgICAgICAgICAgICB2MS5jb3B5KCB0aGlzICkucHJvamVjdE9u
VmVjdG9yKCBwbGFuZU5vcm1hbCApOworICAgICAgICAgICAgICAgIGlmICggaW1hZ2UudXVpZCA9
PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ViKCB2MSAp
OworICAgICAgICAgICAgICAgICAgICBpbWFnZS51dWlkID0gX01hdGguZ2VuZXJhdGVVVUlEKCk7
IC8vIFVHSAogCi0gICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB9
KCksCisgICAgICAgICAgICAgICAgaWYgKCAhIGlzUm9vdE9iamVjdCAmJiBtZXRhLmltYWdlc1sg
aW1hZ2UudXVpZCBdID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgcmVmbGVjdDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgdXJsOwogCi0gICAgICAgICAgICAvLyBy
ZWZsZWN0IGluY2lkZW50IHZlY3RvciBvZmYgcGxhbmUgb3J0aG9nb25hbCB0byBub3JtYWwKLSAg
ICAgICAgICAgIC8vIG5vcm1hbCBpcyBhc3N1bWVkIHRvIGhhdmUgdW5pdCBsZW5ndGgKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCBBcnJheS5pc0FycmF5KCBpbWFnZSApICkgewogCi0gICAgICAg
ICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
cHJvY2VzcyBhcnJheSBvZiBpbWFnZXMgZS5nLiBDdWJlVGV4dHVyZQogCi0gICAgICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24gcmVmbGVjdCggbm9ybWFsICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdXJsID0gW107CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWIoIHYxLmNvcHko
IG5vcm1hbCApLm11bHRpcGx5U2NhbGFyKCAyICogdGhpcy5kb3QoIG5vcm1hbCApICkgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGltYWdlLmxlbmd0aDsg
aSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXJsLnB1c2goIEltYWdlVXRpbHMuZ2V0RGF0YVVSTCggaW1hZ2VbIGkgXSApICk7CiAK
LSAgICAgICAgfSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIGFuZ2xl
VG86IGZ1bmN0aW9uICggdiApIHsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAg
ICAgICAgICAgdmFyIHRoZXRhID0gdGhpcy5kb3QoIHYgKSAvICggTWF0aC5zcXJ0KCB0aGlzLmxl
bmd0aFNxKCkgKiB2Lmxlbmd0aFNxKCkgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
cHJvY2VzcyBzaW5nbGUgaW1hZ2UKIAotICAgICAgICAgICAgLy8gY2xhbXAsIHRvIGhhbmRsZSBu
dW1lcmljYWwgcHJvYmxlbXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IEltYWdlVXRp
bHMuZ2V0RGF0YVVSTCggaW1hZ2UgKTsKIAotICAgICAgICAgICAgcmV0dXJuIE1hdGguYWNvcygg
X01hdGguY2xhbXAoIHRoZXRhLCAtIDEsIDEgKSApOworICAgICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgbWV0YS5pbWFnZXNbIGltYWdlLnV1aWQg
XSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQ6IGltYWdlLnV1aWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICB1cmw6IHVybAorICAgICAgICAgICAgICAgICAgICB9OwogCi0gICAg
ICAgIGRpc3RhbmNlVG86IGZ1bmN0aW9uICggdiApIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoIHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQoIHYgKSAp
OworICAgICAgICAgICAgICAgIG91dHB1dC5pbWFnZSA9IGltYWdlLnV1aWQ7CiAKLSAgICAgICAg
fSwKKyAgICAgICAgICAgIH0KIAotICAgICAgICBkaXN0YW5jZVRvU3F1YXJlZDogZnVuY3Rpb24g
KCB2ICkgeworICAgICAgICAgICAgaWYgKCAhIGlzUm9vdE9iamVjdCApIHsKIAotICAgICAgICAg
ICAgdmFyIGR4ID0gdGhpcy54IC0gdi54LCBkeSA9IHRoaXMueSAtIHYueSwgZHogPSB0aGlzLnog
LSB2Lno7CisgICAgICAgICAgICAgICAgbWV0YS50ZXh0dXJlc1sgdGhpcy51dWlkIF0gPSBvdXRw
dXQ7CiAKLSAgICAgICAgICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeSArIGR6ICogZHo7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7CiAKICAgICAgICAgfSwK
IAotICAgICAgICBtYW5oYXR0YW5EaXN0YW5jZVRvOiBmdW5jdGlvbiAoIHYgKSB7CisgICAgICAg
IGRpc3Bvc2U6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKCB0
aGlzLnggLSB2LnggKSArIE1hdGguYWJzKCB0aGlzLnkgLSB2LnkgKSArIE1hdGguYWJzKCB0aGlz
LnogLSB2LnogKTsKKyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggeyB0eXBlOiAnZGlz
cG9zZScgfSApOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgc2V0RnJvbVNwaGVyaWNhbDogZnVu
Y3Rpb24gKCBzICkgewotCi0gICAgICAgICAgICB2YXIgc2luUGhpUmFkaXVzID0gTWF0aC5zaW4o
IHMucGhpICkgKiBzLnJhZGl1czsKKyAgICAgICAgdHJhbnNmb3JtVXY6IGZ1bmN0aW9uICggdXYg
KSB7CiAKLSAgICAgICAgICAgIHRoaXMueCA9IHNpblBoaVJhZGl1cyAqIE1hdGguc2luKCBzLnRo
ZXRhICk7Ci0gICAgICAgICAgICB0aGlzLnkgPSBNYXRoLmNvcyggcy5waGkgKSAqIHMucmFkaXVz
OwotICAgICAgICAgICAgdGhpcy56ID0gc2luUGhpUmFkaXVzICogTWF0aC5jb3MoIHMudGhldGEg
KTsKKyAgICAgICAgICAgIGlmICggdGhpcy5tYXBwaW5nICE9PSBVVk1hcHBpbmcgKSByZXR1cm4g
dXY7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgdXYuYXBwbHlNYXRy
aXgzKCB0aGlzLm1hdHJpeCApOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICBpZiAoIHV2Lngg
PCAwIHx8IHV2LnggPiAxICkgewogCi0gICAgICAgIHNldEZyb21DeWxpbmRyaWNhbDogZnVuY3Rp
b24gKCBjICkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoIHRoaXMud3JhcFMgKSB7CiAKLSAg
ICAgICAgICAgIHRoaXMueCA9IGMucmFkaXVzICogTWF0aC5zaW4oIGMudGhldGEgKTsKLSAgICAg
ICAgICAgIHRoaXMueSA9IGMueTsKLSAgICAgICAgICAgIHRoaXMueiA9IGMucmFkaXVzICogTWF0
aC5jb3MoIGMudGhldGEgKTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBSZXBlYXRXcmFwcGlu
ZzoKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgICAgICB1
di54ID0gdXYueCAtIE1hdGguZmxvb3IoIHV2LnggKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2xhbXBUb0Vk
Z2VXcmFwcGluZzoKIAotICAgICAgICBzZXRGcm9tTWF0cml4UG9zaXRpb246IGZ1bmN0aW9uICgg
bSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHV2LnggPSB1di54IDwgMCA/IDAgOiAxOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIHZhciBlID0gbS5l
bGVtZW50czsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNaXJyb3JlZFJlcGVhdFdyYXBwaW5n
OgogCi0gICAgICAgICAgICB0aGlzLnggPSBlWyAxMiBdOwotICAgICAgICAgICAgdGhpcy55ID0g
ZVsgMTMgXTsKLSAgICAgICAgICAgIHRoaXMueiA9IGVbIDE0IF07CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIE1hdGguYWJzKCBNYXRoLmZsb29yKCB1di54ICkgJSAyICkgPT09IDEgKSB7
CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHV2LnggPSBNYXRoLmNlaWwoIHV2LnggKSAtIHV2Lng7CiAKLSAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgc2V0RnJvbU1hdHJpeFNjYWxlOiBm
dW5jdGlvbiAoIG0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXYueCA9IHV2Lngg
LSBNYXRoLmZsb29yKCB1di54ICk7CiAKLSAgICAgICAgICAgIHZhciBzeCA9IHRoaXMuc2V0RnJv
bU1hdHJpeENvbHVtbiggbSwgMCApLmxlbmd0aCgpOwotICAgICAgICAgICAgdmFyIHN5ID0gdGhp
cy5zZXRGcm9tTWF0cml4Q29sdW1uKCBtLCAxICkubGVuZ3RoKCk7Ci0gICAgICAgICAgICB2YXIg
c3ogPSB0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oIG0sIDIgKS5sZW5ndGgoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgICAgICB0aGlzLnggPSBzeDsKLSAgICAgICAgICAgIHRoaXMueSA9IHN5OwotICAgICAgICAg
ICAgdGhpcy56ID0gc3o7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4g
dGhpczsKKyAgICAgICAgICAgIH0KIAotICAgICAgICB9LAorICAgICAgICAgICAgaWYgKCB1di55
IDwgMCB8fCB1di55ID4gMSApIHsKIAotICAgICAgICBzZXRGcm9tTWF0cml4Q29sdW1uOiBmdW5j
dGlvbiAoIG0sIGluZGV4ICkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoIHRoaXMud3JhcFQg
KSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21BcnJheSggbS5lbGVtZW50cywgaW5k
ZXggKiA0ICk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUmVwZWF0V3JhcHBpbmc6CiAKLSAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHV2LnkgPSB1di55IC0gTWF0aC5mbG9v
ciggdXYueSApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgZXF1
YWxzOiBmdW5jdGlvbiAoIHYgKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2xhbXBUb0Vk
Z2VXcmFwcGluZzoKIAotICAgICAgICAgICAgcmV0dXJuICggKCB2LnggPT09IHRoaXMueCApICYm
ICggdi55ID09PSB0aGlzLnkgKSAmJiAoIHYueiA9PT0gdGhpcy56ICkgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHV2LnkgPSB1di55IDwgMCA/IDAgOiAxOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNaXJy
b3JlZFJlcGVhdFdyYXBwaW5nOgogCi0gICAgICAgIGZyb21BcnJheTogZnVuY3Rpb24gKCBhcnJh
eSwgb2Zmc2V0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBNYXRoLmFicyggTWF0
aC5mbG9vciggdXYueSApICUgMiApID09PSAxICkgewogCi0gICAgICAgICAgICBpZiAoIG9mZnNl
dCA9PT0gdW5kZWZpbmVkICkgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1di55ID0gTWF0aC5jZWlsKCB1di55ICkgLSB1di55OwogCi0gICAgICAgICAgICB0aGlzLngg
PSBhcnJheVsgb2Zmc2V0IF07Ci0gICAgICAgICAgICB0aGlzLnkgPSBhcnJheVsgb2Zmc2V0ICsg
MSBdOwotICAgICAgICAgICAgdGhpcy56ID0gYXJyYXlbIG9mZnNldCArIDIgXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHV2LnkgPSB1di55IC0gTWF0aC5mbG9vciggdXYueSAp
OwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKIAotICAgICAgICB0b0FycmF5OiBmdW5jdGlvbiAoIGFycmF5LCBv
ZmZzZXQgKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIGFycmF5ID09
PSB1bmRlZmluZWQgKSBhcnJheSA9IFtdOwotICAgICAgICAgICAgaWYgKCBvZmZzZXQgPT09IHVu
ZGVmaW5lZCApIG9mZnNldCA9IDA7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGFycmF5
WyBvZmZzZXQgXSA9IHRoaXMueDsKLSAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyAxIF0gPSB0
aGlzLnk7Ci0gICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMiBdID0gdGhpcy56OworICAgICAg
ICAgICAgaWYgKCB0aGlzLmZsaXBZICkgewogCi0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Cisg
ICAgICAgICAgICAgICAgdXYueSA9IDEgLSB1di55OwogCi0gICAgICAgIH0sCisgICAgICAgICAg
ICB9CiAKLSAgICAgICAgZnJvbUJ1ZmZlckF0dHJpYnV0ZTogZnVuY3Rpb24gKCBhdHRyaWJ1dGUs
IGluZGV4LCBvZmZzZXQgKSB7CisgICAgICAgICAgICByZXR1cm4gdXY7CiAKLSAgICAgICAgICAg
IGlmICggb2Zmc2V0ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVk
IGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4nICk7CisgICAgfSApOwogCi0gICAgICAgICAg
ICB9CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KCBUZXh0dXJlLnByb3RvdHlwZSwgIm5lZWRz
VXBkYXRlIiwgewogCi0gICAgICAgICAgICB0aGlzLnggPSBhdHRyaWJ1dGUuZ2V0WCggaW5kZXgg
KTsKLSAgICAgICAgICAgIHRoaXMueSA9IGF0dHJpYnV0ZS5nZXRZKCBpbmRleCApOwotICAgICAg
ICAgICAgdGhpcy56ID0gYXR0cmlidXRlLmdldFooIGluZGV4ICk7CisgICAgICAgIHNldDogZnVu
Y3Rpb24gKCB2YWx1ZSApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAg
ICBpZiAoIHZhbHVlID09PSB0cnVlICkgdGhpcy52ZXJzaW9uICsrOwogCiAgICAgICAgIH0KIAog
ICAgIH0gKTsKIAogICAgIC8qKgotICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0
ZXJlZHF1YWxpYS5jb20vCisgICAgICogQGF1dGhvciBzdXBlcmVnZ2JlcnQgLyBodHRwOi8vd3d3
LnBhdWxicnVudC5jby51ay8KKyAgICAgKiBAYXV0aG9yIHBoaWxvZ2IgLyBodHRwOi8vYmxvZy50
aGVqaXQub3JnLworICAgICAqIEBhdXRob3IgbWlrYWVsIGVtdGluZ2VyIC8gaHR0cDovL2dvbW8u
c2UvCisgICAgICogQGF1dGhvciBlZ3JhZXRoZXIgLyBodHRwOi8vZWdyYWV0aGVyLmNvbS8KICAg
ICAgKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExhbmdsZXkK
LSAgICAgKiBAYXV0aG9yIGJob3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvCi0gICAgICogQGF1dGhv
ciB0c2NodwogICAgICAqLwogCi0gICAgZnVuY3Rpb24gTWF0cml4MygpIHsKKyAgICBmdW5jdGlv
biBWZWN0b3I0KCB4LCB5LCB6LCB3ICkgewogCi0gICAgICAgIHRoaXMuZWxlbWVudHMgPSBbCisg
ICAgICAgIHRoaXMueCA9IHggfHwgMDsKKyAgICAgICAgdGhpcy55ID0geSB8fCAwOworICAgICAg
ICB0aGlzLnogPSB6IHx8IDA7CisgICAgICAgIHRoaXMudyA9ICggdyAhPT0gdW5kZWZpbmVkICkg
PyB3IDogMTsKIAotICAgICAgICAgICAgMSwgMCwgMCwKLSAgICAgICAgICAgIDAsIDEsIDAsCi0g
ICAgICAgICAgICAwLCAwLCAxCisgICAgfQogCi0gICAgICAgIF07CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnRpZXMoIFZlY3RvcjQucHJvdG90eXBlLCB7CiAKLSAgICAgICAgaWYgKCBhcmd1bWVu
dHMubGVuZ3RoID4gMCApIHsKKyAgICAgICAgIndpZHRoIjogewogCi0gICAgICAgICAgICBjb25z
b2xlLmVycm9yKCAnVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFk
cyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4nICk7CisgICAgICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKIAotICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuejsK
IAotICAgIH0KKyAgICAgICAgICAgIH0sCiAKLSAgICBPYmplY3QuYXNzaWduKCBNYXRyaXgzLnBy
b3RvdHlwZSwgeworICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoIHZhbHVlICkgewogCi0gICAg
ICAgIGlzTWF0cml4MzogdHJ1ZSwKKyAgICAgICAgICAgICAgICB0aGlzLnogPSB2YWx1ZTsKIAot
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICggbjExLCBuMTIsIG4xMywgbjIxLCBuMjIsIG4yMywgbjMx
LCBuMzIsIG4zMyApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIHRlID0gdGhp
cy5lbGVtZW50czsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgdGVbIDAgXSA9IG4xMTsgdGVb
IDEgXSA9IG4yMTsgdGVbIDIgXSA9IG4zMTsKLSAgICAgICAgICAgIHRlWyAzIF0gPSBuMTI7IHRl
WyA0IF0gPSBuMjI7IHRlWyA1IF0gPSBuMzI7Ci0gICAgICAgICAgICB0ZVsgNiBdID0gbjEzOyB0
ZVsgNyBdID0gbjIzOyB0ZVsgOCBdID0gbjMzOworICAgICAgICAiaGVpZ2h0IjogewogCi0gICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewogCi0g
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudzsKIAotICAgICAgICBpZGVu
dGl0eTogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgfSwKIAotICAgICAgICAgICAgdGhpcy5z
ZXQoCisgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7CiAKLSAgICAgICAgICAg
ICAgICAxLCAwLCAwLAotICAgICAgICAgICAgICAgIDAsIDEsIDAsCi0gICAgICAgICAgICAgICAg
MCwgMCwgMQorICAgICAgICAgICAgICAgIHRoaXMudyA9IHZhbHVlOwogCi0gICAgICAgICAgICAp
OworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKworICAgIH0gKTsKKworICAgIE9iamVjdC5h
c3NpZ24oIFZlY3RvcjQucHJvdG90eXBlLCB7CisKKyAgICAgICAgaXNWZWN0b3I0OiB0cnVlLAor
CisgICAgICAgIHNldDogZnVuY3Rpb24gKCB4LCB5LCB6LCB3ICkgeworCisgICAgICAgICAgICB0
aGlzLnggPSB4OworICAgICAgICAgICAgdGhpcy55ID0geTsKKyAgICAgICAgICAgIHRoaXMueiA9
IHo7CisgICAgICAgICAgICB0aGlzLncgPSB3OwogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsK
IAogICAgICAgICB9LAogCi0gICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHNl
dFNjYWxhcjogZnVuY3Rpb24gKCBzY2FsYXIgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcg
dGhpcy5jb25zdHJ1Y3RvcigpLmZyb21BcnJheSggdGhpcy5lbGVtZW50cyApOworICAgICAgICAg
ICAgdGhpcy54ID0gc2NhbGFyOworICAgICAgICAgICAgdGhpcy55ID0gc2NhbGFyOworICAgICAg
ICAgICAgdGhpcy56ID0gc2NhbGFyOworICAgICAgICAgICAgdGhpcy53ID0gc2NhbGFyOwogCi0g
ICAgICAgIH0sCisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICBjb3B5OiBmdW5j
dGlvbiAoIG0gKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxl
bWVudHM7Ci0gICAgICAgICAgICB2YXIgbWUgPSBtLmVsZW1lbnRzOworICAgICAgICBzZXRYOiBm
dW5jdGlvbiAoIHggKSB7CiAKLSAgICAgICAgICAgIHRlWyAwIF0gPSBtZVsgMCBdOyB0ZVsgMSBd
ID0gbWVbIDEgXTsgdGVbIDIgXSA9IG1lWyAyIF07Ci0gICAgICAgICAgICB0ZVsgMyBdID0gbWVb
IDMgXTsgdGVbIDQgXSA9IG1lWyA0IF07IHRlWyA1IF0gPSBtZVsgNSBdOwotICAgICAgICAgICAg
dGVbIDYgXSA9IG1lWyA2IF07IHRlWyA3IF0gPSBtZVsgNyBdOyB0ZVsgOCBdID0gbWVbIDggXTsK
KyAgICAgICAgICAgIHRoaXMueCA9IHg7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAg
ICAgICAgIH0sCiAKLSAgICAgICAgc2V0RnJvbU1hdHJpeDQ6IGZ1bmN0aW9uICggbSApIHsKKyAg
ICAgICAgc2V0WTogZnVuY3Rpb24gKCB5ICkgewogCi0gICAgICAgICAgICB2YXIgbWUgPSBtLmVs
ZW1lbnRzOworICAgICAgICAgICAgdGhpcy55ID0geTsKIAotICAgICAgICAgICAgdGhpcy5zZXQo
CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIG1lWyAwIF0sIG1l
WyA0IF0sIG1lWyA4IF0sCi0gICAgICAgICAgICAgICAgbWVbIDEgXSwgbWVbIDUgXSwgbWVbIDkg
XSwKLSAgICAgICAgICAgICAgICBtZVsgMiBdLCBtZVsgNiBdLCBtZVsgMTAgXQorICAgICAgICB9
LAogCi0gICAgICAgICAgICApOworICAgICAgICBzZXRaOiBmdW5jdGlvbiAoIHogKSB7CisKKyAg
ICAgICAgICAgIHRoaXMueiA9IHo7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAg
ICAgIH0sCiAKLSAgICAgICAgYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZTogZnVuY3Rpb24gKCkgewor
ICAgICAgICBzZXRXOiBmdW5jdGlvbiAoIHcgKSB7CiAKLSAgICAgICAgICAgIHZhciB2MSA9IG5l
dyBWZWN0b3IzKCk7CisgICAgICAgICAgICB0aGlzLncgPSB3OwogCi0gICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb24gYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSggYXR0cmlidXRlICkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwg
PSBhdHRyaWJ1dGUuY291bnQ7IGkgPCBsOyBpICsrICkgeworICAgICAgICB9LAogCi0gICAgICAg
ICAgICAgICAgICAgIHYxLnggPSBhdHRyaWJ1dGUuZ2V0WCggaSApOwotICAgICAgICAgICAgICAg
ICAgICB2MS55ID0gYXR0cmlidXRlLmdldFkoIGkgKTsKLSAgICAgICAgICAgICAgICAgICAgdjEu
eiA9IGF0dHJpYnV0ZS5nZXRaKCBpICk7CisgICAgICAgIHNldENvbXBvbmVudDogZnVuY3Rpb24g
KCBpbmRleCwgdmFsdWUgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgdjEuYXBwbHlNYXRyaXgz
KCB0aGlzICk7CisgICAgICAgICAgICBzd2l0Y2ggKCBpbmRleCApIHsKIAotICAgICAgICAgICAg
ICAgICAgICBhdHRyaWJ1dGUuc2V0WFlaKCBpLCB2MS54LCB2MS55LCB2MS56ICk7CisgICAgICAg
ICAgICAgICAgY2FzZSAwOiB0aGlzLnggPSB2YWx1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSAxOiB0aGlzLnkgPSB2YWx1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiB0
aGlzLnogPSB2YWx1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiB0aGlzLncgPSB2
YWx1ZTsgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCAn
aW5kZXggaXMgb3V0IG9mIHJhbmdlOiAnICsgaW5kZXggKTsKIAotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGU7CisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKIAotICAg
ICAgICB9KCksCisgICAgICAgIGdldENvbXBvbmVudDogZnVuY3Rpb24gKCBpbmRleCApIHsKIAot
ICAgICAgICBtdWx0aXBseTogZnVuY3Rpb24gKCBtICkgeworICAgICAgICAgICAgc3dpdGNoICgg
aW5kZXggKSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXMoIHRo
aXMsIG0gKTsKKyAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiB0aGlzLng7CisgICAgICAg
ICAgICAgICAgY2FzZSAxOiByZXR1cm4gdGhpcy55OworICAgICAgICAgICAgICAgIGNhc2UgMjog
cmV0dXJuIHRoaXMuejsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiB0aGlzLnc7Cisg
ICAgICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCAnaW5kZXggaXMgb3V0IG9m
IHJhbmdlOiAnICsgaW5kZXggKTsKKworICAgICAgICAgICAgfQogCiAgICAgICAgIH0sCiAKLSAg
ICAgICAgcHJlbXVsdGlwbHk6IGZ1bmN0aW9uICggbSApIHsKKyAgICAgICAgY2xvbmU6IGZ1bmN0
aW9uICgpIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyggbSwg
dGhpcyApOworICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCB0aGlzLngs
IHRoaXMueSwgdGhpcy56LCB0aGlzLncgKTsKIAogICAgICAgICB9LAogCi0gICAgICAgIG11bHRp
cGx5TWF0cmljZXM6IGZ1bmN0aW9uICggYSwgYiApIHsKKyAgICAgICAgY29weTogZnVuY3Rpb24g
KCB2ICkgewogCi0gICAgICAgICAgICB2YXIgYWUgPSBhLmVsZW1lbnRzOwotICAgICAgICAgICAg
dmFyIGJlID0gYi5lbGVtZW50czsKLSAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7
CisgICAgICAgICAgICB0aGlzLnggPSB2Lng7CisgICAgICAgICAgICB0aGlzLnkgPSB2Lnk7Cisg
ICAgICAgICAgICB0aGlzLnogPSB2Lno7CisgICAgICAgICAgICB0aGlzLncgPSAoIHYudyAhPT0g
dW5kZWZpbmVkICkgPyB2LncgOiAxOwogCi0gICAgICAgICAgICB2YXIgYTExID0gYWVbIDAgXSwg
YTEyID0gYWVbIDMgXSwgYTEzID0gYWVbIDYgXTsKLSAgICAgICAgICAgIHZhciBhMjEgPSBhZVsg
MSBdLCBhMjIgPSBhZVsgNCBdLCBhMjMgPSBhZVsgNyBdOwotICAgICAgICAgICAgdmFyIGEzMSA9
IGFlWyAyIF0sIGEzMiA9IGFlWyA1IF0sIGEzMyA9IGFlWyA4IF07CisgICAgICAgICAgICByZXR1
cm4gdGhpczsKIAotICAgICAgICAgICAgdmFyIGIxMSA9IGJlWyAwIF0sIGIxMiA9IGJlWyAzIF0s
IGIxMyA9IGJlWyA2IF07Ci0gICAgICAgICAgICB2YXIgYjIxID0gYmVbIDEgXSwgYjIyID0gYmVb
IDQgXSwgYjIzID0gYmVbIDcgXTsKLSAgICAgICAgICAgIHZhciBiMzEgPSBiZVsgMiBdLCBiMzIg
PSBiZVsgNSBdLCBiMzMgPSBiZVsgOCBdOworICAgICAgICB9LAogCi0gICAgICAgICAgICB0ZVsg
MCBdID0gYTExICogYjExICsgYTEyICogYjIxICsgYTEzICogYjMxOwotICAgICAgICAgICAgdGVb
IDMgXSA9IGExMSAqIGIxMiArIGExMiAqIGIyMiArIGExMyAqIGIzMjsKLSAgICAgICAgICAgIHRl
WyA2IF0gPSBhMTEgKiBiMTMgKyBhMTIgKiBiMjMgKyBhMTMgKiBiMzM7CisgICAgICAgIGFkZDog
ZnVuY3Rpb24gKCB2LCB3ICkgewogCi0gICAgICAgICAgICB0ZVsgMSBdID0gYTIxICogYjExICsg
YTIyICogYjIxICsgYTIzICogYjMxOwotICAgICAgICAgICAgdGVbIDQgXSA9IGEyMSAqIGIxMiAr
IGEyMiAqIGIyMiArIGEyMyAqIGIzMjsKLSAgICAgICAgICAgIHRlWyA3IF0gPSBhMjEgKiBiMTMg
KyBhMjIgKiBiMjMgKyBhMjMgKiBiMzM7CisgICAgICAgICAgICBpZiAoIHcgIT09IHVuZGVmaW5l
ZCApIHsKIAotICAgICAgICAgICAgdGVbIDIgXSA9IGEzMSAqIGIxMSArIGEzMiAqIGIyMSArIGEz
MyAqIGIzMTsKLSAgICAgICAgICAgIHRlWyA1IF0gPSBhMzEgKiBiMTIgKyBhMzIgKiBiMjIgKyBh
MzMgKiBiMzI7Ci0gICAgICAgICAgICB0ZVsgOCBdID0gYTMxICogYjEzICsgYTMyICogYjIzICsg
YTMzICogYjMzOworICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjQ6
IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBh
LCBiICkgaW5zdGVhZC4nICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkVmVjdG9y
cyggdiwgdyApOworCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMueCArPSB2Lng7
CisgICAgICAgICAgICB0aGlzLnkgKz0gdi55OworICAgICAgICAgICAgdGhpcy56ICs9IHYuejsK
KyAgICAgICAgICAgIHRoaXMudyArPSB2Lnc7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwog
CiAgICAgICAgIH0sCiAKLSAgICAgICAgbXVsdGlwbHlTY2FsYXI6IGZ1bmN0aW9uICggcyApIHsK
LQotICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKKyAgICAgICAgYWRkU2NhbGFy
OiBmdW5jdGlvbiAoIHMgKSB7CiAKLSAgICAgICAgICAgIHRlWyAwIF0gKj0gczsgdGVbIDMgXSAq
PSBzOyB0ZVsgNiBdICo9IHM7Ci0gICAgICAgICAgICB0ZVsgMSBdICo9IHM7IHRlWyA0IF0gKj0g
czsgdGVbIDcgXSAqPSBzOwotICAgICAgICAgICAgdGVbIDIgXSAqPSBzOyB0ZVsgNSBdICo9IHM7
IHRlWyA4IF0gKj0gczsKKyAgICAgICAgICAgIHRoaXMueCArPSBzOworICAgICAgICAgICAgdGhp
cy55ICs9IHM7CisgICAgICAgICAgICB0aGlzLnogKz0gczsKKyAgICAgICAgICAgIHRoaXMudyAr
PSBzOwogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAg
IGRldGVybWluYW50OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGFkZFZlY3RvcnM6IGZ1bmN0aW9u
ICggYSwgYiApIHsKIAotICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKLQotICAg
ICAgICAgICAgdmFyIGEgPSB0ZVsgMCBdLCBiID0gdGVbIDEgXSwgYyA9IHRlWyAyIF0sCi0gICAg
ICAgICAgICAgICAgZCA9IHRlWyAzIF0sIGUgPSB0ZVsgNCBdLCBmID0gdGVbIDUgXSwKLSAgICAg
ICAgICAgICAgICBnID0gdGVbIDYgXSwgaCA9IHRlWyA3IF0sIGkgPSB0ZVsgOCBdOworICAgICAg
ICAgICAgdGhpcy54ID0gYS54ICsgYi54OworICAgICAgICAgICAgdGhpcy55ID0gYS55ICsgYi55
OworICAgICAgICAgICAgdGhpcy56ID0gYS56ICsgYi56OworICAgICAgICAgICAgdGhpcy53ID0g
YS53ICsgYi53OwogCi0gICAgICAgICAgICByZXR1cm4gYSAqIGUgKiBpIC0gYSAqIGYgKiBoIC0g
YiAqIGQgKiBpICsgYiAqIGYgKiBnICsgYyAqIGQgKiBoIC0gYyAqIGUgKiBnOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBnZXRJbnZlcnNlOiBmdW5j
dGlvbiAoIG1hdHJpeCwgdGhyb3dPbkRlZ2VuZXJhdGUgKSB7CisgICAgICAgIGFkZFNjYWxlZFZl
Y3RvcjogZnVuY3Rpb24gKCB2LCBzICkgewogCi0gICAgICAgICAgICBpZiAoIG1hdHJpeCAmJiBt
YXRyaXguaXNNYXRyaXg0ICkgeworICAgICAgICAgICAgdGhpcy54ICs9IHYueCAqIHM7CisgICAg
ICAgICAgICB0aGlzLnkgKz0gdi55ICogczsKKyAgICAgICAgICAgIHRoaXMueiArPSB2LnogKiBz
OworICAgICAgICAgICAgdGhpcy53ICs9IHYudyAqIHM7CiAKLSAgICAgICAgICAgICAgICBjb25z
b2xlLmVycm9yKCAiVEhSRUUuTWF0cml4MzogLmdldEludmVyc2UoKSBubyBsb25nZXIgdGFrZXMg
YSBNYXRyaXg0IGFyZ3VtZW50LiIgKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAg
ICAgICAgICB9CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIHZhciBtZSA9IG1hdHJpeC5lbGVt
ZW50cywKLSAgICAgICAgICAgICAgICB0ZSA9IHRoaXMuZWxlbWVudHMsCisgICAgICAgIHN1Yjog
ZnVuY3Rpb24gKCB2LCB3ICkgewogCi0gICAgICAgICAgICAgICAgbjExID0gbWVbIDAgXSwgbjIx
ID0gbWVbIDEgXSwgbjMxID0gbWVbIDIgXSwKLSAgICAgICAgICAgICAgICBuMTIgPSBtZVsgMyBd
LCBuMjIgPSBtZVsgNCBdLCBuMzIgPSBtZVsgNSBdLAotICAgICAgICAgICAgICAgIG4xMyA9IG1l
WyA2IF0sIG4yMyA9IG1lWyA3IF0sIG4zMyA9IG1lWyA4IF0sCisgICAgICAgICAgICBpZiAoIHcg
IT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgIHQxMSA9IG4zMyAqIG4yMiAtIG4z
MiAqIG4yMywKLSAgICAgICAgICAgICAgICB0MTIgPSBuMzIgKiBuMTMgLSBuMzMgKiBuMTIsCi0g
ICAgICAgICAgICAgICAgdDEzID0gbjIzICogbjEyIC0gbjIyICogbjEzLAorICAgICAgICAgICAg
ICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjQ6IC5zdWIoKSBub3cgb25seSBhY2NlcHRz
IG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ViVmVjdG9ycyggdiwgdyApOwogCi0gICAgICAgICAg
ICAgICAgZGV0ID0gbjExICogdDExICsgbjIxICogdDEyICsgbjMxICogdDEzOworICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAoIGRldCA9PT0gMCApIHsKKyAgICAgICAgICAgIHRoaXMu
eCAtPSB2Lng7CisgICAgICAgICAgICB0aGlzLnkgLT0gdi55OworICAgICAgICAgICAgdGhpcy56
IC09IHYuejsKKyAgICAgICAgICAgIHRoaXMudyAtPSB2Lnc7CiAKLSAgICAgICAgICAgICAgICB2
YXIgbXNnID0gIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgY2FuJ3QgaW52ZXJ0IG1hdHJp
eCwgZGV0ZXJtaW5hbnQgaXMgMCI7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAg
ICAgICAgICAgIGlmICggdGhyb3dPbkRlZ2VuZXJhdGUgPT09IHRydWUgKSB7CisgICAgICAgIH0s
CiAKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCBtc2cgKTsKKyAgICAgICAg
c3ViU2NhbGFyOiBmdW5jdGlvbiAoIHMgKSB7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgdGhpcy54IC09IHM7CisgICAgICAgICAgICB0aGlzLnkgLT0gczsKKyAgICAg
ICAgICAgIHRoaXMueiAtPSBzOworICAgICAgICAgICAgdGhpcy53IC09IHM7CiAKLSAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS53YXJuKCBtc2cgKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuaWRlbnRpdHkoKTsKKyAgICAgICAgc3ViVmVjdG9yczogZnVuY3Rpb24gKCBhLCBi
ICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLnggPSBhLnggLSBiLng7Cisg
ICAgICAgICAgICB0aGlzLnkgPSBhLnkgLSBiLnk7CisgICAgICAgICAgICB0aGlzLnogPSBhLnog
LSBiLno7CisgICAgICAgICAgICB0aGlzLncgPSBhLncgLSBiLnc7CiAKLSAgICAgICAgICAgIHZh
ciBkZXRJbnYgPSAxIC8gZGV0OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAg
ICAgIHRlWyAwIF0gPSB0MTEgKiBkZXRJbnY7Ci0gICAgICAgICAgICB0ZVsgMSBdID0gKCBuMzEg
KiBuMjMgLSBuMzMgKiBuMjEgKSAqIGRldEludjsKLSAgICAgICAgICAgIHRlWyAyIF0gPSAoIG4z
MiAqIG4yMSAtIG4zMSAqIG4yMiApICogZGV0SW52OworICAgICAgICB9LAogCi0gICAgICAgICAg
ICB0ZVsgMyBdID0gdDEyICogZGV0SW52OwotICAgICAgICAgICAgdGVbIDQgXSA9ICggbjMzICog
bjExIC0gbjMxICogbjEzICkgKiBkZXRJbnY7Ci0gICAgICAgICAgICB0ZVsgNSBdID0gKCBuMzEg
KiBuMTIgLSBuMzIgKiBuMTEgKSAqIGRldEludjsKKyAgICAgICAgbXVsdGlwbHlTY2FsYXI6IGZ1
bmN0aW9uICggc2NhbGFyICkgewogCi0gICAgICAgICAgICB0ZVsgNiBdID0gdDEzICogZGV0SW52
OwotICAgICAgICAgICAgdGVbIDcgXSA9ICggbjIxICogbjEzIC0gbjIzICogbjExICkgKiBkZXRJ
bnY7Ci0gICAgICAgICAgICB0ZVsgOCBdID0gKCBuMjIgKiBuMTEgLSBuMjEgKiBuMTIgKSAqIGRl
dEludjsKKyAgICAgICAgICAgIHRoaXMueCAqPSBzY2FsYXI7CisgICAgICAgICAgICB0aGlzLnkg
Kj0gc2NhbGFyOworICAgICAgICAgICAgdGhpcy56ICo9IHNjYWxhcjsKKyAgICAgICAgICAgIHRo
aXMudyAqPSBzY2FsYXI7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0s
CiAKLSAgICAgICAgdHJhbnNwb3NlOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGFwcGx5TWF0cml4
NDogZnVuY3Rpb24gKCBtICkgewogCi0gICAgICAgICAgICB2YXIgdG1wLCBtID0gdGhpcy5lbGVt
ZW50czsKKyAgICAgICAgICAgIHZhciB4ID0gdGhpcy54LCB5ID0gdGhpcy55LCB6ID0gdGhpcy56
LCB3ID0gdGhpcy53OworICAgICAgICAgICAgdmFyIGUgPSBtLmVsZW1lbnRzOwogCi0gICAgICAg
ICAgICB0bXAgPSBtWyAxIF07IG1bIDEgXSA9IG1bIDMgXTsgbVsgMyBdID0gdG1wOwotICAgICAg
ICAgICAgdG1wID0gbVsgMiBdOyBtWyAyIF0gPSBtWyA2IF07IG1bIDYgXSA9IHRtcDsKLSAgICAg
ICAgICAgIHRtcCA9IG1bIDUgXTsgbVsgNSBdID0gbVsgNyBdOyBtWyA3IF0gPSB0bXA7CisgICAg
ICAgICAgICB0aGlzLnggPSBlWyAwIF0gKiB4ICsgZVsgNCBdICogeSArIGVbIDggXSAqIHogKyBl
WyAxMiBdICogdzsKKyAgICAgICAgICAgIHRoaXMueSA9IGVbIDEgXSAqIHggKyBlWyA1IF0gKiB5
ICsgZVsgOSBdICogeiArIGVbIDEzIF0gKiB3OworICAgICAgICAgICAgdGhpcy56ID0gZVsgMiBd
ICogeCArIGVbIDYgXSAqIHkgKyBlWyAxMCBdICogeiArIGVbIDE0IF0gKiB3OworICAgICAgICAg
ICAgdGhpcy53ID0gZVsgMyBdICogeCArIGVbIDcgXSAqIHkgKyBlWyAxMSBdICogeiArIGVbIDE1
IF0gKiB3OwogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAg
ICAgIGdldE5vcm1hbE1hdHJpeDogZnVuY3Rpb24gKCBtYXRyaXg0ICkgeworICAgICAgICBkaXZp
ZGVTY2FsYXI6IGZ1bmN0aW9uICggc2NhbGFyICkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhp
cy5zZXRGcm9tTWF0cml4NCggbWF0cml4NCApLmdldEludmVyc2UoIHRoaXMgKS50cmFuc3Bvc2Uo
KTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKCAxIC8gc2NhbGFyICk7
CiAKICAgICAgICAgfSwKIAotICAgICAgICB0cmFuc3Bvc2VJbnRvQXJyYXk6IGZ1bmN0aW9uICgg
ciApIHsKLQotICAgICAgICAgICAgdmFyIG0gPSB0aGlzLmVsZW1lbnRzOwotCi0gICAgICAgICAg
ICByWyAwIF0gPSBtWyAwIF07Ci0gICAgICAgICAgICByWyAxIF0gPSBtWyAzIF07Ci0gICAgICAg
ICAgICByWyAyIF0gPSBtWyA2IF07Ci0gICAgICAgICAgICByWyAzIF0gPSBtWyAxIF07Ci0gICAg
ICAgICAgICByWyA0IF0gPSBtWyA0IF07Ci0gICAgICAgICAgICByWyA1IF0gPSBtWyA3IF07Ci0g
ICAgICAgICAgICByWyA2IF0gPSBtWyAyIF07Ci0gICAgICAgICAgICByWyA3IF0gPSBtWyA1IF07
Ci0gICAgICAgICAgICByWyA4IF0gPSBtWyA4IF07CisgICAgICAgIHNldEF4aXNBbmdsZUZyb21R
dWF0ZXJuaW9uOiBmdW5jdGlvbiAoIHEgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwor
ICAgICAgICAgICAgLy8gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvZ2VvbWV0
cnkvcm90YXRpb25zL2NvbnZlcnNpb25zL3F1YXRlcm5pb25Ub0FuZ2xlL2luZGV4Lmh0bQogCi0g
ICAgICAgIH0sCisgICAgICAgICAgICAvLyBxIGlzIGFzc3VtZWQgdG8gYmUgbm9ybWFsaXplZAog
Ci0gICAgICAgIHNldFV2VHJhbnNmb3JtOiBmdW5jdGlvbiAoIHR4LCB0eSwgc3gsIHN5LCByb3Rh
dGlvbiwgY3gsIGN5ICkgeworICAgICAgICAgICAgdGhpcy53ID0gMiAqIE1hdGguYWNvcyggcS53
ICk7CiAKLSAgICAgICAgICAgIHZhciBjID0gTWF0aC5jb3MoIHJvdGF0aW9uICk7Ci0gICAgICAg
ICAgICB2YXIgcyA9IE1hdGguc2luKCByb3RhdGlvbiApOworICAgICAgICAgICAgdmFyIHMgPSBN
YXRoLnNxcnQoIDEgLSBxLncgKiBxLncgKTsKIAotICAgICAgICAgICAgdGhpcy5zZXQoCi0gICAg
ICAgICAgICAgICAgc3ggKiBjLCBzeCAqIHMsIC0gc3ggKiAoIGMgKiBjeCArIHMgKiBjeSApICsg
Y3ggKyB0eCwKLSAgICAgICAgICAgICAgICAtIHN5ICogcywgc3kgKiBjLCAtIHN5ICogKCAtIHMg
KiBjeCArIGMgKiBjeSApICsgY3kgKyB0eSwKLSAgICAgICAgICAgICAgICAwLCAwLCAxCi0gICAg
ICAgICAgICApOworICAgICAgICAgICAgaWYgKCBzIDwgMC4wMDAxICkgewogCi0gICAgICAgIH0s
CisgICAgICAgICAgICAgICAgdGhpcy54ID0gMTsKKyAgICAgICAgICAgICAgICB0aGlzLnkgPSAw
OworICAgICAgICAgICAgICAgIHRoaXMueiA9IDA7CiAKLSAgICAgICAgc2NhbGU6IGZ1bmN0aW9u
ICggc3gsIHN5ICkgeworICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgdmFyIHRl
ID0gdGhpcy5lbGVtZW50czsKKyAgICAgICAgICAgICAgICB0aGlzLnggPSBxLnggLyBzOworICAg
ICAgICAgICAgICAgIHRoaXMueSA9IHEueSAvIHM7CisgICAgICAgICAgICAgICAgdGhpcy56ID0g
cS56IC8gczsKIAotICAgICAgICAgICAgdGVbIDAgXSAqPSBzeDsgdGVbIDMgXSAqPSBzeDsgdGVb
IDYgXSAqPSBzeDsKLSAgICAgICAgICAgIHRlWyAxIF0gKj0gc3k7IHRlWyA0IF0gKj0gc3k7IHRl
WyA3IF0gKj0gc3k7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwog
CiAgICAgICAgIH0sCiAKLSAgICAgICAgcm90YXRlOiBmdW5jdGlvbiAoIHRoZXRhICkgeworICAg
ICAgICBzZXRBeGlzQW5nbGVGcm9tUm90YXRpb25NYXRyaXg6IGZ1bmN0aW9uICggbSApIHsKIAot
ICAgICAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyggdGhldGEgKTsKLSAgICAgICAgICAgIHZhciBz
ID0gTWF0aC5zaW4oIHRoZXRhICk7CisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LmV1Y2xpZGVh
bnNwYWNlLmNvbS9tYXRocy9nZW9tZXRyeS9yb3RhdGlvbnMvY29udmVyc2lvbnMvbWF0cml4VG9B
bmdsZS9pbmRleC5odG0KIAotICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKKyAg
ICAgICAgICAgIC8vIGFzc3VtZXMgdGhlIHVwcGVyIDN4MyBvZiBtIGlzIGEgcHVyZSByb3RhdGlv
biBtYXRyaXggKGkuZSwgdW5zY2FsZWQpCiAKLSAgICAgICAgICAgIHZhciBhMTEgPSB0ZVsgMCBd
LCBhMTIgPSB0ZVsgMyBdLCBhMTMgPSB0ZVsgNiBdOwotICAgICAgICAgICAgdmFyIGEyMSA9IHRl
WyAxIF0sIGEyMiA9IHRlWyA0IF0sIGEyMyA9IHRlWyA3IF07CisgICAgICAgICAgICB2YXIgYW5n
bGUsIHgsIHksIHosICAgICAvLyB2YXJpYWJsZXMgZm9yIHJlc3VsdAorICAgICAgICAgICAgICAg
IGVwc2lsb24gPSAwLjAxLCAgICAgLy8gbWFyZ2luIHRvIGFsbG93IGZvciByb3VuZGluZyBlcnJv
cnMKKyAgICAgICAgICAgICAgICBlcHNpbG9uMiA9IDAuMSwgICAgIC8vIG1hcmdpbiB0byBkaXN0
aW5ndWlzaCBiZXR3ZWVuIDAgYW5kIDE4MCBkZWdyZWVzCiAKLSAgICAgICAgICAgIHRlWyAwIF0g
PSBjICogYTExICsgcyAqIGEyMTsKLSAgICAgICAgICAgIHRlWyAzIF0gPSBjICogYTEyICsgcyAq
IGEyMjsKLSAgICAgICAgICAgIHRlWyA2IF0gPSBjICogYTEzICsgcyAqIGEyMzsKKyAgICAgICAg
ICAgICAgICB0ZSA9IG0uZWxlbWVudHMsCiAKLSAgICAgICAgICAgIHRlWyAxIF0gPSAtIHMgKiBh
MTEgKyBjICogYTIxOwotICAgICAgICAgICAgdGVbIDQgXSA9IC0gcyAqIGExMiArIGMgKiBhMjI7
Ci0gICAgICAgICAgICB0ZVsgNyBdID0gLSBzICogYTEzICsgYyAqIGEyMzsKKyAgICAgICAgICAg
ICAgICBtMTEgPSB0ZVsgMCBdLCBtMTIgPSB0ZVsgNCBdLCBtMTMgPSB0ZVsgOCBdLAorICAgICAg
ICAgICAgICAgIG0yMSA9IHRlWyAxIF0sIG0yMiA9IHRlWyA1IF0sIG0yMyA9IHRlWyA5IF0sCisg
ICAgICAgICAgICAgICAgbTMxID0gdGVbIDIgXSwgbTMyID0gdGVbIDYgXSwgbTMzID0gdGVbIDEw
IF07CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgaWYgKCAoIE1hdGgu
YWJzKCBtMTIgLSBtMjEgKSA8IGVwc2lsb24gKSAmJgorICAgICAgICAgICAgICAgICAoIE1hdGgu
YWJzKCBtMTMgLSBtMzEgKSA8IGVwc2lsb24gKSAmJgorICAgICAgICAgICAgICAgICAoIE1hdGgu
YWJzKCBtMjMgLSBtMzIgKSA8IGVwc2lsb24gKSApIHsKIAotICAgICAgICB9LAorICAgICAgICAg
ICAgICAgIC8vIHNpbmd1bGFyaXR5IGZvdW5kCisgICAgICAgICAgICAgICAgLy8gZmlyc3QgY2hl
Y2sgZm9yIGlkZW50aXR5IG1hdHJpeCB3aGljaCBtdXN0IGhhdmUgKzEgZm9yIGFsbCB0ZXJtcwor
ICAgICAgICAgICAgICAgIC8vIGluIGxlYWRpbmcgZGlhZ29uYWwgYW5kIHplcm8gaW4gb3RoZXIg
dGVybXMKIAotICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uICggdHgsIHR5ICkgeworICAgICAg
ICAgICAgICAgIGlmICggKCBNYXRoLmFicyggbTEyICsgbTIxICkgPCBlcHNpbG9uMiApICYmCisg
ICAgICAgICAgICAgICAgICAgICAoIE1hdGguYWJzKCBtMTMgKyBtMzEgKSA8IGVwc2lsb24yICkg
JiYKKyAgICAgICAgICAgICAgICAgICAgICggTWF0aC5hYnMoIG0yMyArIG0zMiApIDwgZXBzaWxv
bjIgKSAmJgorICAgICAgICAgICAgICAgICAgICAgKCBNYXRoLmFicyggbTExICsgbTIyICsgbTMz
IC0gMyApIDwgZXBzaWxvbjIgKSApIHsKIAotICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVt
ZW50czsKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBzaW5ndWxhcml0eSBpcyBpZGVudGl0
eSBtYXRyaXggc28gYW5nbGUgPSAwCiAKLSAgICAgICAgICAgIHRlWyAwIF0gKz0gdHggKiB0ZVsg
MiBdOyB0ZVsgMyBdICs9IHR4ICogdGVbIDUgXTsgdGVbIDYgXSArPSB0eCAqIHRlWyA4IF07Ci0g
ICAgICAgICAgICB0ZVsgMSBdICs9IHR5ICogdGVbIDIgXTsgdGVbIDQgXSArPSB0eSAqIHRlWyA1
IF07IHRlWyA3IF0gKz0gdHkgKiB0ZVsgOCBdOworICAgICAgICAgICAgICAgICAgICB0aGlzLnNl
dCggMSwgMCwgMCwgMCApOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7IC8vIHplcm8gYW5nbGUsIGFyYml0cmFyeSBheGlzCiAKLSAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgZXF1YWxzOiBmdW5jdGlvbiAo
IG1hdHJpeCApIHsKKyAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhpcyBzaW5ndWxhcml0
eSBpcyBhbmdsZSA9IDE4MAogCi0gICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzOwot
ICAgICAgICAgICAgdmFyIG1lID0gbWF0cml4LmVsZW1lbnRzOworICAgICAgICAgICAgICAgIGFu
Z2xlID0gTWF0aC5QSTsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgOTsgaSAr
KyApIHsKKyAgICAgICAgICAgICAgICB2YXIgeHggPSAoIG0xMSArIDEgKSAvIDI7CisgICAgICAg
ICAgICAgICAgdmFyIHl5ID0gKCBtMjIgKyAxICkgLyAyOworICAgICAgICAgICAgICAgIHZhciB6
eiA9ICggbTMzICsgMSApIC8gMjsKKyAgICAgICAgICAgICAgICB2YXIgeHkgPSAoIG0xMiArIG0y
MSApIC8gNDsKKyAgICAgICAgICAgICAgICB2YXIgeHogPSAoIG0xMyArIG0zMSApIC8gNDsKKyAg
ICAgICAgICAgICAgICB2YXIgeXogPSAoIG0yMyArIG0zMiApIC8gNDsKIAotICAgICAgICAgICAg
ICAgIGlmICggdGVbIGkgXSAhPT0gbWVbIGkgXSApIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBpZiAoICggeHggPiB5eSApICYmICggeHggPiB6eiApICkgewogCi0gICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIC8vIG0xMSBpcyB0aGUgbGFyZ2VzdCBkaWFnb25hbCB0ZXJt
CiAKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoIHh4
IDwgZXBzaWxvbiApIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeCA9
IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB5ID0gMC43MDcxMDY3ODE7CisgICAgICAgICAg
ICAgICAgICAgICAgICB6ID0gMC43MDcxMDY3ODE7CiAKLSAgICAgICAgZnJvbUFycmF5OiBmdW5j
dGlvbiAoIGFycmF5LCBvZmZzZXQgKSB7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAK
LSAgICAgICAgICAgIGlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwOworICAg
ICAgICAgICAgICAgICAgICAgICAgeCA9IE1hdGguc3FydCggeHggKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHkgPSB4eSAvIHg7CisgICAgICAgICAgICAgICAgICAgICAgICB6ID0geHogLyB4
OwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCA5OyBpICsrICkgeworICAgICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzWyBpIF0gPSBh
cnJheVsgaSArIG9mZnNldCBdOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHl5ID4genog
KSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gbTIyIGlzIHRoZSBs
YXJnZXN0IGRpYWdvbmFsIHRlcm0KIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
ICAgICAgICAgICAgIGlmICggeXkgPCBlcHNpbG9uICkgewogCi0gICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgICAgICAgICB4ID0gMC43MDcxMDY3ODE7CisgICAgICAgICAgICAgICAgICAgICAg
ICB5ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHogPSAwLjcwNzEwNjc4MTsKIAotICAg
ICAgICB0b0FycmF5OiBmdW5jdGlvbiAoIGFycmF5LCBvZmZzZXQgKSB7CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgIGlmICggYXJyYXkgPT09IHVuZGVmaW5lZCAp
IGFycmF5ID0gW107Ci0gICAgICAgICAgICBpZiAoIG9mZnNldCA9PT0gdW5kZWZpbmVkICkgb2Zm
c2V0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBNYXRoLnNxcnQoIHl5ICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB4ID0geHkgLyB5OworICAgICAgICAgICAgICAgICAgICAg
ICAgeiA9IHl6IC8geTsKIAotICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKKyAg
ICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBhcnJheVsgb2Zmc2V0IF0gPSB0ZVsg
MCBdOwotICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDEgXSA9IHRlWyAxIF07Ci0gICAgICAg
ICAgICBhcnJheVsgb2Zmc2V0ICsgMiBdID0gdGVbIDIgXTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgewogCi0gICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMyBdID0gdGVbIDMgXTsKLSAgICAg
ICAgICAgIGFycmF5WyBvZmZzZXQgKyA0IF0gPSB0ZVsgNCBdOwotICAgICAgICAgICAgYXJyYXlb
IG9mZnNldCArIDUgXSA9IHRlWyA1IF07CisgICAgICAgICAgICAgICAgICAgIC8vIG0zMyBpcyB0
aGUgbGFyZ2VzdCBkaWFnb25hbCB0ZXJtIHNvIGJhc2UgcmVzdWx0IG9uIHRoaXMKIAotICAgICAg
ICAgICAgYXJyYXlbIG9mZnNldCArIDYgXSA9IHRlWyA2IF07Ci0gICAgICAgICAgICBhcnJheVsg
b2Zmc2V0ICsgNyBdID0gdGVbIDcgXTsKLSAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyA4IF0g
PSB0ZVsgOCBdOworICAgICAgICAgICAgICAgICAgICBpZiAoIHp6IDwgZXBzaWxvbiApIHsKIAot
ICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDAu
NzA3MTA2NzgxOworICAgICAgICAgICAgICAgICAgICAgICAgeSA9IDAuNzA3MTA2NzgxOworICAg
ICAgICAgICAgICAgICAgICAgICAgeiA9IDA7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogCi0gICAgfSApOworICAgICAgICAgICAgICAgICAgICAgICAgeiA9IE1h
dGguc3FydCggenogKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4eiAvIHo7CisgICAg
ICAgICAgICAgICAgICAgICAgICB5ID0geXogLyB6OwogCi0gICAgLyoqCi0gICAgICogQGF1dGhv
ciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8g
aHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAgICAqIEBhdXRob3Igc3ppbWVrIC8gaHR0cHM6
Ly9naXRodWIuY29tL3N6aW1lay8KLSAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgfQogCi0g
ICAgdmFyIHRleHR1cmVJZCA9IDA7CisgICAgICAgICAgICAgICAgfQogCi0gICAgZnVuY3Rpb24g
VGV4dHVyZSggaW1hZ2UsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0
ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSwgZW5jb2RpbmcgKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5zZXQoIHgsIHksIHosIGFuZ2xlICk7CiAKLSAgICAgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KCB0aGlzLCAnaWQnLCB7IHZhbHVlOiB0ZXh0dXJlSWQgKysgfSApOworICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOyAvLyByZXR1cm4gMTgwIGRlZyByb3RhdGlvbgogCi0gICAgICAg
IHRoaXMudXVpZCA9IF9NYXRoLmdlbmVyYXRlVVVJRCgpOworICAgICAgICAgICAgfQogCi0gICAg
ICAgIHRoaXMubmFtZSA9ICcnOworICAgICAgICAgICAgLy8gYXMgd2UgaGF2ZSByZWFjaGVkIGhl
cmUgdGhlcmUgYXJlIG5vIHNpbmd1bGFyaXRpZXMgc28gd2UgY2FuIGhhbmRsZSBub3JtYWxseQog
Ci0gICAgICAgIHRoaXMuaW1hZ2UgPSBpbWFnZSAhPT0gdW5kZWZpbmVkID8gaW1hZ2UgOiBUZXh0
dXJlLkRFRkFVTFRfSU1BR0U7Ci0gICAgICAgIHRoaXMubWlwbWFwcyA9IFtdOworICAgICAgICAg
ICAgdmFyIHMgPSBNYXRoLnNxcnQoICggbTMyIC0gbTIzICkgKiAoIG0zMiAtIG0yMyApICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIG0xMyAtIG0zMSApICogKCBtMTMgLSBtMzEg
KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBtMjEgLSBtMTIgKSAqICggbTIx
IC0gbTEyICkgKTsgLy8gdXNlZCB0byBub3JtYWxpemUKIAotICAgICAgICB0aGlzLm1hcHBpbmcg
PSBtYXBwaW5nICE9PSB1bmRlZmluZWQgPyBtYXBwaW5nIDogVGV4dHVyZS5ERUZBVUxUX01BUFBJ
Tkc7CisgICAgICAgICAgICBpZiAoIE1hdGguYWJzKCBzICkgPCAwLjAwMSApIHMgPSAxOwogCi0g
ICAgICAgIHRoaXMud3JhcFMgPSB3cmFwUyAhPT0gdW5kZWZpbmVkID8gd3JhcFMgOiBDbGFtcFRv
RWRnZVdyYXBwaW5nOwotICAgICAgICB0aGlzLndyYXBUID0gd3JhcFQgIT09IHVuZGVmaW5lZCA/
IHdyYXBUIDogQ2xhbXBUb0VkZ2VXcmFwcGluZzsKKyAgICAgICAgICAgIC8vIHByZXZlbnQgZGl2
aWRlIGJ5IHplcm8sIHNob3VsZCBub3QgaGFwcGVuIGlmIG1hdHJpeCBpcyBvcnRob2dvbmFsIGFu
ZCBzaG91bGQgYmUKKyAgICAgICAgICAgIC8vIGNhdWdodCBieSBzaW5ndWxhcml0eSB0ZXN0IGFi
b3ZlLCBidXQgSSd2ZSBsZWZ0IGl0IGluIGp1c3QgaW4gY2FzZQogCi0gICAgICAgIHRoaXMubWFn
RmlsdGVyID0gbWFnRmlsdGVyICE9PSB1bmRlZmluZWQgPyBtYWdGaWx0ZXIgOiBMaW5lYXJGaWx0
ZXI7Ci0gICAgICAgIHRoaXMubWluRmlsdGVyID0gbWluRmlsdGVyICE9PSB1bmRlZmluZWQgPyBt
aW5GaWx0ZXIgOiBMaW5lYXJNaXBNYXBMaW5lYXJGaWx0ZXI7CisgICAgICAgICAgICB0aGlzLngg
PSAoIG0zMiAtIG0yMyApIC8gczsKKyAgICAgICAgICAgIHRoaXMueSA9ICggbTEzIC0gbTMxICkg
LyBzOworICAgICAgICAgICAgdGhpcy56ID0gKCBtMjEgLSBtMTIgKSAvIHM7CisgICAgICAgICAg
ICB0aGlzLncgPSBNYXRoLmFjb3MoICggbTExICsgbTIyICsgbTMzIC0gMSApIC8gMiApOwogCi0g
ICAgICAgIHRoaXMuYW5pc290cm9weSA9IGFuaXNvdHJvcHkgIT09IHVuZGVmaW5lZCA/IGFuaXNv
dHJvcHkgOiAxOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgdGhpcy5mb3Jt
YXQgPSBmb3JtYXQgIT09IHVuZGVmaW5lZCA/IGZvcm1hdCA6IFJHQkFGb3JtYXQ7Ci0gICAgICAg
IHRoaXMudHlwZSA9IHR5cGUgIT09IHVuZGVmaW5lZCA/IHR5cGUgOiBVbnNpZ25lZEJ5dGVUeXBl
OworICAgICAgICB9LAogCi0gICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFZlY3RvcjIoIDAsIDAg
KTsKLSAgICAgICAgdGhpcy5yZXBlYXQgPSBuZXcgVmVjdG9yMiggMSwgMSApOwotICAgICAgICB0
aGlzLmNlbnRlciA9IG5ldyBWZWN0b3IyKCAwLCAwICk7Ci0gICAgICAgIHRoaXMucm90YXRpb24g
PSAwOworICAgICAgICBtaW46IGZ1bmN0aW9uICggdiApIHsKIAotICAgICAgICB0aGlzLm1hdHJp
eEF1dG9VcGRhdGUgPSB0cnVlOwotICAgICAgICB0aGlzLm1hdHJpeCA9IG5ldyBNYXRyaXgzKCk7
CisgICAgICAgICAgICB0aGlzLnggPSBNYXRoLm1pbiggdGhpcy54LCB2LnggKTsKKyAgICAgICAg
ICAgIHRoaXMueSA9IE1hdGgubWluKCB0aGlzLnksIHYueSApOworICAgICAgICAgICAgdGhpcy56
ID0gTWF0aC5taW4oIHRoaXMueiwgdi56ICk7CisgICAgICAgICAgICB0aGlzLncgPSBNYXRoLm1p
biggdGhpcy53LCB2LncgKTsKIAotICAgICAgICB0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IHRydWU7
Ci0gICAgICAgIHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlOwotICAgICAgICB0aGlzLmZs
aXBZID0gdHJ1ZTsKLSAgICAgICAgdGhpcy51bnBhY2tBbGlnbm1lbnQgPSA0OyAgIC8vIHZhbGlk
IHZhbHVlczogMSwgMiwgNCwgOCAoc2VlIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvb3BlbmdsZXMv
c2RrL2RvY3MvbWFuL3hodG1sL2dsUGl4ZWxTdG9yZWkueG1sKQorICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CiAKLSAgICAgICAgLy8gVmFsdWVzIG9mIGVuY29kaW5nICE9PSBUSFJFRS5MaW5lYXJF
bmNvZGluZyBvbmx5IHN1cHBvcnRlZCBvbiBtYXAsIGVudk1hcCBhbmQgZW1pc3NpdmVNYXAuCi0g
ICAgICAgIC8vCi0gICAgICAgIC8vIEFsc28gY2hhbmdpbmcgdGhlIGVuY29kaW5nIGFmdGVyIGFs
cmVhZHkgdXNlZCBieSBhIE1hdGVyaWFsIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgbWFrZSB0aGUg
TWF0ZXJpYWwKLSAgICAgICAgLy8gdXBkYXRlLiAgWW91IG5lZWQgdG8gZXhwbGljaXRseSBjYWxs
IE1hdGVyaWFsLm5lZWRzVXBkYXRlIHRvIHRyaWdnZXIgaXQgdG8gcmVjb21waWxlLgotICAgICAg
ICB0aGlzLmVuY29kaW5nID0gZW5jb2RpbmcgIT09IHVuZGVmaW5lZCA/IGVuY29kaW5nIDogTGlu
ZWFyRW5jb2Rpbmc7CisgICAgICAgIH0sCiAKLSAgICAgICAgdGhpcy52ZXJzaW9uID0gMDsKLSAg
ICAgICAgdGhpcy5vblVwZGF0ZSA9IG51bGw7CisgICAgICAgIG1heDogZnVuY3Rpb24gKCB2ICkg
ewogCi0gICAgfQorICAgICAgICAgICAgdGhpcy54ID0gTWF0aC5tYXgoIHRoaXMueCwgdi54ICk7
CisgICAgICAgICAgICB0aGlzLnkgPSBNYXRoLm1heCggdGhpcy55LCB2LnkgKTsKKyAgICAgICAg
ICAgIHRoaXMueiA9IE1hdGgubWF4KCB0aGlzLnosIHYueiApOworICAgICAgICAgICAgdGhpcy53
ID0gTWF0aC5tYXgoIHRoaXMudywgdi53ICk7CiAKLSAgICBUZXh0dXJlLkRFRkFVTFRfSU1BR0Ug
PSB1bmRlZmluZWQ7Ci0gICAgVGV4dHVyZS5ERUZBVUxUX01BUFBJTkcgPSBVVk1hcHBpbmc7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgIFRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0
LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggRXZlbnREaXNwYXRjaGVyLnByb3RvdHlwZSApLCB7Cisg
ICAgICAgIH0sCiAKLSAgICAgICAgY29uc3RydWN0b3I6IFRleHR1cmUsCisgICAgICAgIGNsYW1w
OiBmdW5jdGlvbiAoIG1pbiwgbWF4ICkgewogCi0gICAgICAgIGlzVGV4dHVyZTogdHJ1ZSwKKyAg
ICAgICAgICAgIC8vIGFzc3VtZXMgbWluIDwgbWF4LCBjb21wb25lbnR3aXNlCiAKLSAgICAgICAg
dXBkYXRlTWF0cml4OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLnggPSBNYXRoLm1h
eCggbWluLngsIE1hdGgubWluKCBtYXgueCwgdGhpcy54ICkgKTsKKyAgICAgICAgICAgIHRoaXMu
eSA9IE1hdGgubWF4KCBtaW4ueSwgTWF0aC5taW4oIG1heC55LCB0aGlzLnkgKSApOworICAgICAg
ICAgICAgdGhpcy56ID0gTWF0aC5tYXgoIG1pbi56LCBNYXRoLm1pbiggbWF4LnosIHRoaXMueiAp
ICk7CisgICAgICAgICAgICB0aGlzLncgPSBNYXRoLm1heCggbWluLncsIE1hdGgubWluKCBtYXgu
dywgdGhpcy53ICkgKTsKIAotICAgICAgICAgICAgdGhpcy5tYXRyaXguc2V0VXZUcmFuc2Zvcm0o
IHRoaXMub2Zmc2V0LngsIHRoaXMub2Zmc2V0LnksIHRoaXMucmVwZWF0LngsIHRoaXMucmVwZWF0
LnksIHRoaXMucm90YXRpb24sIHRoaXMuY2VudGVyLngsIHRoaXMuY2VudGVyLnkgKTsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgY2xvbmU6IGZ1bmN0
aW9uICgpIHsKLQotICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29w
eSggdGhpcyApOwotCi0gICAgICAgIH0sCisgICAgICAgIGNsYW1wU2NhbGFyOiBmdW5jdGlvbiAo
KSB7CiAKLSAgICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisgICAgICAgICAgICB2
YXIgbWluLCBtYXg7CiAKLSAgICAgICAgICAgIHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lOworICAg
ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNsYW1wU2NhbGFyKCBtaW5WYWwsIG1heFZhbCApIHsK
IAotICAgICAgICAgICAgdGhpcy5pbWFnZSA9IHNvdXJjZS5pbWFnZTsKLSAgICAgICAgICAgIHRo
aXMubWlwbWFwcyA9IHNvdXJjZS5taXBtYXBzLnNsaWNlKCAwICk7CisgICAgICAgICAgICAgICAg
aWYgKCBtaW4gPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgdGhpcy5tYXBwaW5nID0g
c291cmNlLm1hcHBpbmc7CisgICAgICAgICAgICAgICAgICAgIG1pbiA9IG5ldyBWZWN0b3I0KCk7
CisgICAgICAgICAgICAgICAgICAgIG1heCA9IG5ldyBWZWN0b3I0KCk7CiAKLSAgICAgICAgICAg
IHRoaXMud3JhcFMgPSBzb3VyY2Uud3JhcFM7Ci0gICAgICAgICAgICB0aGlzLndyYXBUID0gc291
cmNlLndyYXBUOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdGhpcy5tYWdGaWx0
ZXIgPSBzb3VyY2UubWFnRmlsdGVyOwotICAgICAgICAgICAgdGhpcy5taW5GaWx0ZXIgPSBzb3Vy
Y2UubWluRmlsdGVyOworICAgICAgICAgICAgICAgIG1pbi5zZXQoIG1pblZhbCwgbWluVmFsLCBt
aW5WYWwsIG1pblZhbCApOworICAgICAgICAgICAgICAgIG1heC5zZXQoIG1heFZhbCwgbWF4VmFs
LCBtYXhWYWwsIG1heFZhbCApOwogCi0gICAgICAgICAgICB0aGlzLmFuaXNvdHJvcHkgPSBzb3Vy
Y2UuYW5pc290cm9weTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGFtcCggbWluLCBt
YXggKTsKIAotICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBzb3VyY2UuZm9ybWF0OwotICAgICAg
ICAgICAgdGhpcy50eXBlID0gc291cmNlLnR5cGU7CisgICAgICAgICAgICB9OwogCi0gICAgICAg
ICAgICB0aGlzLm9mZnNldC5jb3B5KCBzb3VyY2Uub2Zmc2V0ICk7Ci0gICAgICAgICAgICB0aGlz
LnJlcGVhdC5jb3B5KCBzb3VyY2UucmVwZWF0ICk7Ci0gICAgICAgICAgICB0aGlzLmNlbnRlci5j
b3B5KCBzb3VyY2UuY2VudGVyICk7Ci0gICAgICAgICAgICB0aGlzLnJvdGF0aW9uID0gc291cmNl
LnJvdGF0aW9uOworICAgICAgICB9KCksCiAKLSAgICAgICAgICAgIHRoaXMubWF0cml4QXV0b1Vw
ZGF0ZSA9IHNvdXJjZS5tYXRyaXhBdXRvVXBkYXRlOwotICAgICAgICAgICAgdGhpcy5tYXRyaXgu
Y29weSggc291cmNlLm1hdHJpeCApOworICAgICAgICBjbGFtcExlbmd0aDogZnVuY3Rpb24gKCBt
aW4sIG1heCApIHsKIAotICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZU1pcG1hcHMgPSBzb3VyY2Uu
Z2VuZXJhdGVNaXBtYXBzOwotICAgICAgICAgICAgdGhpcy5wcmVtdWx0aXBseUFscGhhID0gc291
cmNlLnByZW11bHRpcGx5QWxwaGE7Ci0gICAgICAgICAgICB0aGlzLmZsaXBZID0gc291cmNlLmZs
aXBZOwotICAgICAgICAgICAgdGhpcy51bnBhY2tBbGlnbm1lbnQgPSBzb3VyY2UudW5wYWNrQWxp
Z25tZW50OwotICAgICAgICAgICAgdGhpcy5lbmNvZGluZyA9IHNvdXJjZS5lbmNvZGluZzsKKyAg
ICAgICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCgpOwogCi0gICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmRpdmlkZVNjYWxhciggbGVuZ3RoIHx8
IDEgKS5tdWx0aXBseVNjYWxhciggTWF0aC5tYXgoIG1pbiwgTWF0aC5taW4oIG1heCwgbGVuZ3Ro
ICkgKSApOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoIG1ldGEg
KSB7CisgICAgICAgIGZsb29yOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHZhciBpc1Jv
b3RPYmplY3QgPSAoIG1ldGEgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgbWV0YSA9PT0gJ3N0cmlu
ZycgKTsKKyAgICAgICAgICAgIHRoaXMueCA9IE1hdGguZmxvb3IoIHRoaXMueCApOworICAgICAg
ICAgICAgdGhpcy55ID0gTWF0aC5mbG9vciggdGhpcy55ICk7CisgICAgICAgICAgICB0aGlzLnog
PSBNYXRoLmZsb29yKCB0aGlzLnogKTsKKyAgICAgICAgICAgIHRoaXMudyA9IE1hdGguZmxvb3Io
IHRoaXMudyApOwogCi0gICAgICAgICAgICBpZiAoICEgaXNSb290T2JqZWN0ICYmIG1ldGEudGV4
dHVyZXNbIHRoaXMudXVpZCBdICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpczsKIAotICAgICAgICAgICAgICAgIHJldHVybiBtZXRhLnRleHR1cmVzWyB0aGlzLnV1aWQg
XTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgfQorICAgICAgICBjZWlsOiBmdW5jdGlvbiAo
KSB7CiAKLSAgICAgICAgICAgIGZ1bmN0aW9uIGdldERhdGFVUkwoIGltYWdlICkgeworICAgICAg
ICAgICAgdGhpcy54ID0gTWF0aC5jZWlsKCB0aGlzLnggKTsKKyAgICAgICAgICAgIHRoaXMueSA9
IE1hdGguY2VpbCggdGhpcy55ICk7CisgICAgICAgICAgICB0aGlzLnogPSBNYXRoLmNlaWwoIHRo
aXMueiApOworICAgICAgICAgICAgdGhpcy53ID0gTWF0aC5jZWlsKCB0aGlzLncgKTsKIAotICAg
ICAgICAgICAgICAgIHZhciBjYW52YXM7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAg
ICAgICAgICAgICAgIGlmICggaW1hZ2UgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCApIHsK
KyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgICAgICBjYW52YXMgPSBpbWFnZTsKKyAgICAg
ICAgcm91bmQ6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB0aGlzLnggPSBNYXRoLnJvdW5kKCB0aGlzLnggKTsKKyAgICAgICAgICAgIHRoaXMu
eSA9IE1hdGgucm91bmQoIHRoaXMueSApOworICAgICAgICAgICAgdGhpcy56ID0gTWF0aC5yb3Vu
ZCggdGhpcy56ICk7CisgICAgICAgICAgICB0aGlzLncgPSBNYXRoLnJvdW5kKCB0aGlzLncgKTsK
IAotICAgICAgICAgICAgICAgICAgICBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMo
ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2NhbnZhcycgKTsKLSAgICAgICAgICAg
ICAgICAgICAgY2FudmFzLndpZHRoID0gaW1hZ2Uud2lkdGg7Ci0gICAgICAgICAgICAgICAgICAg
IGNhbnZhcy5oZWlnaHQgPSBpbWFnZS5oZWlnaHQ7CisgICAgICAgICAgICByZXR1cm4gdGhpczsK
IAotICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAn
MmQnICk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBpbWFnZSBpbnN0
YW5jZW9mIEltYWdlRGF0YSApIHsKKyAgICAgICAgcm91bmRUb1plcm86IGZ1bmN0aW9uICgpIHsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5wdXRJbWFnZURhdGEoIGltYWdlLCAw
LCAwICk7CisgICAgICAgICAgICB0aGlzLnggPSAoIHRoaXMueCA8IDAgKSA/IE1hdGguY2VpbCgg
dGhpcy54ICkgOiBNYXRoLmZsb29yKCB0aGlzLnggKTsKKyAgICAgICAgICAgIHRoaXMueSA9ICgg
dGhpcy55IDwgMCApID8gTWF0aC5jZWlsKCB0aGlzLnkgKSA6IE1hdGguZmxvb3IoIHRoaXMueSAp
OworICAgICAgICAgICAgdGhpcy56ID0gKCB0aGlzLnogPCAwICkgPyBNYXRoLmNlaWwoIHRoaXMu
eiApIDogTWF0aC5mbG9vciggdGhpcy56ICk7CisgICAgICAgICAgICB0aGlzLncgPSAoIHRoaXMu
dyA8IDAgKSA/IE1hdGguY2VpbCggdGhpcy53ICkgOiBNYXRoLmZsb29yKCB0aGlzLncgKTsKIAot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCBpbWFnZSwgMCwgMCwg
aW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCApOworICAgICAgICB9LAogCi0gICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgbmVnYXRlOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLnggPSAtIHRoaXMueDsKKyAgICAgICAgICAgIHRoaXMueSA9
IC0gdGhpcy55OworICAgICAgICAgICAgdGhpcy56ID0gLSB0aGlzLno7CisgICAgICAgICAgICB0
aGlzLncgPSAtIHRoaXMudzsKIAotICAgICAgICAgICAgICAgIGlmICggY2FudmFzLndpZHRoID4g
MjA0OCB8fCBjYW52YXMuaGVpZ2h0ID4gMjA0OCApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OwogCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW52YXMudG9EYXRhVVJMKCAnaW1hZ2Uv
anBlZycsIDAuNiApOworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgZG90OiBmdW5jdGlvbiAoIHYgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNhbnZhcy50b0RhdGFVUkwoICdpbWFnZS9wbmcnICk7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy54ICogdi54ICsgdGhpcy55ICogdi55ICsgdGhpcy56ICogdi56ICsgdGhpcy53ICogdi53Owog
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAgICB9CisgICAgICAg
IGxlbmd0aFNxOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHZhciBvdXRwdXQgPSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICsgdGhp
cy56ICogdGhpcy56ICsgdGhpcy53ICogdGhpcy53OwogCi0gICAgICAgICAgICAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogNC41LAotICAgICAgICAgICAgICAg
ICAgICB0eXBlOiAnVGV4dHVyZScsCi0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogJ1Rl
eHR1cmUudG9KU09OJwotICAgICAgICAgICAgICAgIH0sCisgICAgICAgIH0sCiAKLSAgICAgICAg
ICAgICAgICB1dWlkOiB0aGlzLnV1aWQsCi0gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1l
LAorICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgIG1hcHBp
bmc6IHRoaXMubWFwcGluZywKKyAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoIHRoaXMueCAq
IHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMueiArIHRoaXMudyAqIHRo
aXMudyApOwogCi0gICAgICAgICAgICAgICAgcmVwZWF0OiBbIHRoaXMucmVwZWF0LngsIHRoaXMu
cmVwZWF0LnkgXSwKLSAgICAgICAgICAgICAgICBvZmZzZXQ6IFsgdGhpcy5vZmZzZXQueCwgdGhp
cy5vZmZzZXQueSBdLAotICAgICAgICAgICAgICAgIGNlbnRlcjogWyB0aGlzLmNlbnRlci54LCB0
aGlzLmNlbnRlci55IF0sCi0gICAgICAgICAgICAgICAgcm90YXRpb246IHRoaXMucm90YXRpb24s
CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB3cmFwOiBbIHRoaXMud3JhcFMsIHRoaXMu
d3JhcFQgXSwKKyAgICAgICAgbWFuaGF0dGFuTGVuZ3RoOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAg
ICAgICAgICAgICBmb3JtYXQ6IHRoaXMuZm9ybWF0LAotICAgICAgICAgICAgICAgIG1pbkZpbHRl
cjogdGhpcy5taW5GaWx0ZXIsCi0gICAgICAgICAgICAgICAgbWFnRmlsdGVyOiB0aGlzLm1hZ0Zp
bHRlciwKLSAgICAgICAgICAgICAgICBhbmlzb3Ryb3B5OiB0aGlzLmFuaXNvdHJvcHksCisgICAg
ICAgICAgICByZXR1cm4gTWF0aC5hYnMoIHRoaXMueCApICsgTWF0aC5hYnMoIHRoaXMueSApICsg
TWF0aC5hYnMoIHRoaXMueiApICsgTWF0aC5hYnMoIHRoaXMudyApOwogCi0gICAgICAgICAgICAg
ICAgZmxpcFk6IHRoaXMuZmxpcFkKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgfTsKKyAgICAg
ICAgbm9ybWFsaXplOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIGlmICggdGhpcy5pbWFn
ZSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFy
KCB0aGlzLmxlbmd0aCgpIHx8IDEgKTsKIAotICAgICAgICAgICAgICAgIC8vIFRPRE86IE1vdmUg
dG8gVEhSRUUuSW1hZ2UKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9
IHRoaXMuaW1hZ2U7CisgICAgICAgIHNldExlbmd0aDogZnVuY3Rpb24gKCBsZW5ndGggKSB7CiAK
LSAgICAgICAgICAgICAgICBpZiAoIGltYWdlLnV1aWQgPT09IHVuZGVmaW5lZCApIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKCBsZW5ndGggKTsK
IAotICAgICAgICAgICAgICAgICAgICBpbWFnZS51dWlkID0gX01hdGguZ2VuZXJhdGVVVUlEKCk7
IC8vIFVHSAorICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICBsZXJwOiBm
dW5jdGlvbiAoIHYsIGFscGhhICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCAhIGlzUm9vdE9i
amVjdCAmJiBtZXRhLmltYWdlc1sgaW1hZ2UudXVpZCBdID09PSB1bmRlZmluZWQgKSB7CisgICAg
ICAgICAgICB0aGlzLnggKz0gKCB2LnggLSB0aGlzLnggKSAqIGFscGhhOworICAgICAgICAgICAg
dGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTsKKyAgICAgICAgICAgIHRoaXMueiAr
PSAoIHYueiAtIHRoaXMueiApICogYWxwaGE7CisgICAgICAgICAgICB0aGlzLncgKz0gKCB2Lncg
LSB0aGlzLncgKSAqIGFscGhhOwogCi0gICAgICAgICAgICAgICAgICAgIHZhciB1cmw7CisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIEFycmF5Lmlz
QXJyYXkoIGltYWdlICkgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHByb2Nlc3MgYXJyYXkgb2YgaW1hZ2VzIGUuZy4gQ3ViZVRleHR1cmUKKyAgICAgICAgbGVy
cFZlY3RvcnM6IGZ1bmN0aW9uICggdjEsIHYyLCBhbHBoYSApIHsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgdXJsID0gW107CisgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJWZWN0b3JzKCB2
MiwgdjEgKS5tdWx0aXBseVNjYWxhciggYWxwaGEgKS5hZGQoIHYxICk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGltYWdlLmxlbmd0aDsgaSA8IGw7IGkg
KysgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwucHVz
aCggZ2V0RGF0YVVSTCggaW1hZ2VbIGkgXSApICk7CisgICAgICAgIGVxdWFsczogZnVuY3Rpb24g
KCB2ICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
KCAoIHYueCA9PT0gdGhpcy54ICkgJiYgKCB2LnkgPT09IHRoaXMueSApICYmICggdi56ID09PSB0
aGlzLnogKSAmJiAoIHYudyA9PT0gdGhpcy53ICkgKTsKIAotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZXNz
IHNpbmdsZSBpbWFnZQorICAgICAgICBmcm9tQXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9mZnNl
dCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gZ2V0RGF0YVVSTCggaW1hZ2Ug
KTsKKyAgICAgICAgICAgIGlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwOwog
Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMueCA9IGFycmF5WyBvZmZz
ZXQgXTsKKyAgICAgICAgICAgIHRoaXMueSA9IGFycmF5WyBvZmZzZXQgKyAxIF07CisgICAgICAg
ICAgICB0aGlzLnogPSBhcnJheVsgb2Zmc2V0ICsgMiBdOworICAgICAgICAgICAgdGhpcy53ID0g
YXJyYXlbIG9mZnNldCArIDMgXTsKIAotICAgICAgICAgICAgICAgICAgICBtZXRhLmltYWdlc1sg
aW1hZ2UudXVpZCBdID0gewotICAgICAgICAgICAgICAgICAgICAgICAgdXVpZDogaW1hZ2UudXVp
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdXJsCi0gICAgICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwKIAotICAgICAgICAgICAgICAgIG91dHB1dC5pbWFnZSA9IGltYWdlLnV1aWQ7CisgICAg
ICAgIHRvQXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9mZnNldCApIHsKIAotICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCBhcnJheSA9PT0gdW5kZWZpbmVkICkgYXJyYXkgPSBbXTsKKyAg
ICAgICAgICAgIGlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwOwogCi0gICAg
ICAgICAgICBpZiAoICEgaXNSb290T2JqZWN0ICkgewotCi0gICAgICAgICAgICAgICAgbWV0YS50
ZXh0dXJlc1sgdGhpcy51dWlkIF0gPSBvdXRwdXQ7Ci0KLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGFycmF5WyBvZmZzZXQgXSA9IHRoaXMueDsKKyAgICAgICAgICAgIGFycmF5WyBvZmZzZXQg
KyAxIF0gPSB0aGlzLnk7CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMiBdID0gdGhpcy56
OworICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDMgXSA9IHRoaXMudzsKIAotICAgICAgICAg
ICAgcmV0dXJuIG91dHB1dDsKKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKIAogICAgICAgICB9
LAogCi0gICAgICAgIGRpc3Bvc2U6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZnJvbUJ1ZmZlckF0
dHJpYnV0ZTogZnVuY3Rpb24gKCBhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQgKSB7CiAKLSAgICAg
ICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggeyB0eXBlOiAnZGlzcG9zZScgfSApOworICAgICAg
ICAgICAgaWYgKCBvZmZzZXQgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICB9LAorICAgICAg
ICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjQ6IG9mZnNldCBoYXMgYmVlbiBy
ZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4nICk7CiAKLSAgICAgICAgdHJhbnNm
b3JtVXY6IGZ1bmN0aW9uICggdXYgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
ICggdGhpcy5tYXBwaW5nICE9PSBVVk1hcHBpbmcgKSByZXR1cm47CisgICAgICAgICAgICB0aGlz
LnggPSBhdHRyaWJ1dGUuZ2V0WCggaW5kZXggKTsKKyAgICAgICAgICAgIHRoaXMueSA9IGF0dHJp
YnV0ZS5nZXRZKCBpbmRleCApOworICAgICAgICAgICAgdGhpcy56ID0gYXR0cmlidXRlLmdldFoo
IGluZGV4ICk7CisgICAgICAgICAgICB0aGlzLncgPSBhdHRyaWJ1dGUuZ2V0VyggaW5kZXggKTsK
IAotICAgICAgICAgICAgdXYuYXBwbHlNYXRyaXgzKCB0aGlzLm1hdHJpeCApOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIGlmICggdXYueCA8IDAgfHwgdXYueCA+IDEg
KSB7CisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHN3aXRjaCAoIHRoaXMud3JhcFMgKSB7
CisgICAgfSApOwogCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgUmVwZWF0V3JhcHBpbmc6Cisg
ICAgLyoqCisgICAgICogQGF1dGhvciBzemltZWsgLyBodHRwczovL2dpdGh1Yi5jb20vc3ppbWVr
LworICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCisg
ICAgICogQGF1dGhvciBNYXJpdXMgS2ludGVsIC8gaHR0cHM6Ly9naXRodWIuY29tL2tpbnRlbAor
ICAgICAqLwogCi0gICAgICAgICAgICAgICAgICAgICAgICB1di54ID0gdXYueCAtIE1hdGguZmxv
b3IoIHV2LnggKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgIC8qCisgICAg
IEluIG9wdGlvbnMsIHdlIGNhbiBzcGVjaWZ5OgorICAgICAqIFRleHR1cmUgcGFyYW1ldGVycyBm
b3IgYW4gYXV0by1nZW5lcmF0ZWQgdGFyZ2V0IHRleHR1cmUKKyAgICAgKiBkZXB0aEJ1ZmZlci9z
dGVuY2lsQnVmZmVyOiBCb29sZWFucyB0byBpbmRpY2F0ZSBpZiB3ZSBzaG91bGQgZ2VuZXJhdGUg
dGhlc2UgYnVmZmVycworICAgICovCisgICAgZnVuY3Rpb24gV2ViR0xSZW5kZXJUYXJnZXQoIHdp
ZHRoLCBoZWlnaHQsIG9wdGlvbnMgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDbGFt
cFRvRWRnZVdyYXBwaW5nOgorICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7CisgICAgICAgIHRo
aXMuaGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgICAgICAgICAgICAgICAgICAgICB1di54ID0gdXYu
eCA8IDAgPyAwIDogMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB0
aGlzLnNjaXNzb3IgPSBuZXcgVmVjdG9yNCggMCwgMCwgd2lkdGgsIGhlaWdodCApOworICAgICAg
ICB0aGlzLnNjaXNzb3JUZXN0ID0gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBN
aXJyb3JlZFJlcGVhdFdyYXBwaW5nOgorICAgICAgICB0aGlzLnZpZXdwb3J0ID0gbmV3IFZlY3Rv
cjQoIDAsIDAsIHdpZHRoLCBoZWlnaHQgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBNYXRoLmFicyggTWF0aC5mbG9vciggdXYueCApICUgMiApID09PSAxICkgeworICAgICAgICBv
cHRpb25zID0gb3B0aW9ucyB8fCB7fTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2
LnggPSBNYXRoLmNlaWwoIHV2LnggKSAtIHV2Lng7CisgICAgICAgIHRoaXMudGV4dHVyZSA9IG5l
dyBUZXh0dXJlKCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgb3B0aW9ucy53cmFwUywgb3B0aW9ucy53
cmFwVCwgb3B0aW9ucy5tYWdGaWx0ZXIsIG9wdGlvbnMubWluRmlsdGVyLCBvcHRpb25zLmZvcm1h
dCwgb3B0aW9ucy50eXBlLCBvcHRpb25zLmFuaXNvdHJvcHksIG9wdGlvbnMuZW5jb2RpbmcgKTsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy50ZXh0dXJl
LmltYWdlID0ge307CisgICAgICAgIHRoaXMudGV4dHVyZS5pbWFnZS53aWR0aCA9IHdpZHRoOwor
ICAgICAgICB0aGlzLnRleHR1cmUuaW1hZ2UuaGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXYueCA9IHV2LnggLSBNYXRoLmZsb29yKCB1di54ICk7CisgICAg
ICAgIHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMgPSBvcHRpb25zLmdlbmVyYXRlTWlwbWFw
cyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5nZW5lcmF0ZU1pcG1hcHMgOiBmYWxzZTsKKyAgICAg
ICAgdGhpcy50ZXh0dXJlLm1pbkZpbHRlciA9IG9wdGlvbnMubWluRmlsdGVyICE9PSB1bmRlZmlu
ZWQgPyBvcHRpb25zLm1pbkZpbHRlciA6IExpbmVhckZpbHRlcjsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHRoaXMu
ZGVwdGhCdWZmZXIgPSBvcHRpb25zLmRlcHRoQnVmZmVyICE9PSB1bmRlZmluZWQgPyBvcHRpb25z
LmRlcHRoQnVmZmVyIDogdHJ1ZTsKKyAgICAgICAgdGhpcy5zdGVuY2lsQnVmZmVyID0gb3B0aW9u
cy5zdGVuY2lsQnVmZmVyICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnN0ZW5jaWxCdWZmZXIgOiB0
cnVlOworICAgICAgICB0aGlzLmRlcHRoVGV4dHVyZSA9IG9wdGlvbnMuZGVwdGhUZXh0dXJlICE9
PSB1bmRlZmluZWQgPyBvcHRpb25zLmRlcHRoVGV4dHVyZSA6IG51bGw7CiAKLSAgICAgICAgICAg
ICAgICB9CisgICAgfQogCi0gICAgICAgICAgICB9CisgICAgV2ViR0xSZW5kZXJUYXJnZXQucHJv
dG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggRXZlbnREaXNwYXRjaGVyLnBy
b3RvdHlwZSApLCB7CiAKLSAgICAgICAgICAgIGlmICggdXYueSA8IDAgfHwgdXYueSA+IDEgKSB7
CisgICAgICAgIGNvbnN0cnVjdG9yOiBXZWJHTFJlbmRlclRhcmdldCwKIAotICAgICAgICAgICAg
ICAgIHN3aXRjaCAoIHRoaXMud3JhcFQgKSB7CisgICAgICAgIGlzV2ViR0xSZW5kZXJUYXJnZXQ6
IHRydWUsCiAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBSZXBlYXRXcmFwcGluZzoKKyAgICAg
ICAgc2V0U2l6ZTogZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0ICkgewogCi0gICAgICAgICAgICAg
ICAgICAgICAgICB1di55ID0gdXYueSAtIE1hdGguZmxvb3IoIHV2LnkgKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKCB0aGlzLndpZHRoICE9PSB3aWR0
aCB8fCB0aGlzLmhlaWdodCAhPT0gaGVpZ2h0ICkgewogCi0gICAgICAgICAgICAgICAgICAgIGNh
c2UgQ2xhbXBUb0VkZ2VXcmFwcGluZzoKKyAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gd2lk
dGg7CisgICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHV2LnkgPSB1di55IDwgMCA/IDAgOiAxOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlLmltYWdlLndpZHRoID0g
d2lkdGg7CisgICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlLmltYWdlLmhlaWdodCA9IGhlaWdo
dDsKIAotICAgICAgICAgICAgICAgICAgICBjYXNlIE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6Cisg
ICAgICAgICAgICAgICAgdGhpcy5kaXNwb3NlKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggTWF0aC5hYnMoIE1hdGguZmxvb3IoIHV2LnkgKSAlIDIgKSA9PT0gMSApIHsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2LnkgPSBNYXRoLmNlaWwo
IHV2LnkgKSAtIHV2Lnk7CisgICAgICAgICAgICB0aGlzLnZpZXdwb3J0LnNldCggMCwgMCwgd2lk
dGgsIGhlaWdodCApOworICAgICAgICAgICAgdGhpcy5zY2lzc29yLnNldCggMCwgMCwgd2lkdGgs
IGhlaWdodCApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICB9
LAogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXYueSA9IHV2LnkgLSBNYXRoLmZsb29y
KCB1di55ICk7CisgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApOwogCi0gICAgICAgICAg
ICAgICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAgICB9CisgICAgICAgIGNvcHk6IGZ1bmN0
aW9uICggc291cmNlICkgewogCi0gICAgICAgICAgICBpZiAoIHRoaXMuZmxpcFkgKSB7CisgICAg
ICAgICAgICB0aGlzLndpZHRoID0gc291cmNlLndpZHRoOworICAgICAgICAgICAgdGhpcy5oZWln
aHQgPSBzb3VyY2UuaGVpZ2h0OwogCi0gICAgICAgICAgICAgICAgdXYueSA9IDEgLSB1di55Owor
ICAgICAgICAgICAgdGhpcy52aWV3cG9ydC5jb3B5KCBzb3VyY2Uudmlld3BvcnQgKTsKIAotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy50ZXh0dXJlID0gc291cmNlLnRleHR1cmUuY2xv
bmUoKTsKIAotICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmRlcHRoQnVmZmVyID0gc291cmNl
LmRlcHRoQnVmZmVyOworICAgICAgICAgICAgdGhpcy5zdGVuY2lsQnVmZmVyID0gc291cmNlLnN0
ZW5jaWxCdWZmZXI7CisgICAgICAgICAgICB0aGlzLmRlcHRoVGV4dHVyZSA9IHNvdXJjZS5kZXB0
aFRleHR1cmU7CiAKLSAgICB9ICk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eSggVGV4dHVyZS5wcm90b3R5cGUsICJuZWVkc1VwZGF0ZSIsIHsK
KyAgICAgICAgfSwKIAotICAgICAgICBzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAgICAg
IGRpc3Bvc2U6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gdHJ1
ZSApIHRoaXMudmVyc2lvbiArKzsKKyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggeyB0
eXBlOiAnZGlzcG9zZScgfSApOwogCiAgICAgICAgIH0KIAogICAgIH0gKTsKIAogICAgIC8qKgot
ICAgICAqIEBhdXRob3Igc3VwZXJlZ2diZXJ0IC8gaHR0cDovL3d3dy5wYXVsYnJ1bnQuY28udWsv
Ci0gICAgICogQGF1dGhvciBwaGlsb2diIC8gaHR0cDovL2Jsb2cudGhlaml0Lm9yZy8KLSAgICAg
KiBAYXV0aG9yIG1pa2FlbCBlbXRpbmdlciAvIGh0dHA6Ly9nb21vLnNlLwotICAgICAqIEBhdXRo
b3IgZWdyYWV0aGVyIC8gaHR0cDovL2VncmFldGhlci5jb20vCi0gICAgICogQGF1dGhvciBXZXN0
TGFuZ2xleSAvIGh0dHA6Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5CisgICAgICogQGF1dGhvciBN
dWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29tL011Z2VuODcKKyAgICAgKiBAYXV0aG9yIE1hdHQg
RGVzTGF1cmllcnMgLyBAbWF0dGRlc2wKICAgICAgKi8KIAotICAgIGZ1bmN0aW9uIFZlY3RvcjQo
IHgsIHksIHosIHcgKSB7Ci0KLSAgICAgICAgdGhpcy54ID0geCB8fCAwOwotICAgICAgICB0aGlz
LnkgPSB5IHx8IDA7Ci0gICAgICAgIHRoaXMueiA9IHogfHwgMDsKLSAgICAgICAgdGhpcy53ID0g
KCB3ICE9PSB1bmRlZmluZWQgKSA/IHcgOiAxOworICAgIGZ1bmN0aW9uIFdlYkdMTXVsdGlzYW1w
bGVSZW5kZXJUYXJnZXQoIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMgKSB7CiAKLSAgICB9CisgICAg
ICAgIFdlYkdMUmVuZGVyVGFyZ2V0LmNhbGwoIHRoaXMsIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMg
KTsKIAotICAgIE9iamVjdC5hc3NpZ24oIFZlY3RvcjQucHJvdG90eXBlLCB7CisgICAgICAgIHRo
aXMuc2FtcGxlcyA9IDQ7CiAKLSAgICAgICAgaXNWZWN0b3I0OiB0cnVlLAorICAgIH0KIAotICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICggeCwgeSwgeiwgdyApIHsKKyAgICBXZWJHTE11bHRpc2FtcGxl
UmVuZGVyVGFyZ2V0LnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIFdl
YkdMUmVuZGVyVGFyZ2V0LnByb3RvdHlwZSApLCB7CiAKLSAgICAgICAgICAgIHRoaXMueCA9IHg7
Ci0gICAgICAgICAgICB0aGlzLnkgPSB5OwotICAgICAgICAgICAgdGhpcy56ID0gejsKLSAgICAg
ICAgICAgIHRoaXMudyA9IHc7CisgICAgICAgIGNvbnN0cnVjdG9yOiBXZWJHTE11bHRpc2FtcGxl
UmVuZGVyVGFyZ2V0LAogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgaXNXZWJH
TE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0OiB0cnVlLAogCi0gICAgICAgIH0sCisgICAgICAgIGNv
cHk6IGZ1bmN0aW9uICggc291cmNlICkgewogCi0gICAgICAgIHNldFNjYWxhcjogZnVuY3Rpb24g
KCBzY2FsYXIgKSB7CisgICAgICAgICAgICBXZWJHTFJlbmRlclRhcmdldC5wcm90b3R5cGUuY29w
eS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKIAotICAgICAgICAgICAgdGhpcy54ID0gc2NhbGFyOwot
ICAgICAgICAgICAgdGhpcy55ID0gc2NhbGFyOwotICAgICAgICAgICAgdGhpcy56ID0gc2NhbGFy
OwotICAgICAgICAgICAgdGhpcy53ID0gc2NhbGFyOworICAgICAgICAgICAgdGhpcy5zYW1wbGVz
ID0gc291cmNlLnNhbXBsZXM7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAg
IH0sCisgICAgICAgIH0KIAotICAgICAgICBzZXRYOiBmdW5jdGlvbiAoIHggKSB7CisgICAgfSAp
OwogCi0gICAgICAgICAgICB0aGlzLnggPSB4OworICAgIC8qKgorICAgICAqIEBhdXRob3IgbXJk
b29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICogQGF1dGhvciBzdXBlcmVnZ2JlcnQgLyBo
dHRwOi8vd3d3LnBhdWxicnVudC5jby51ay8KKyAgICAgKiBAYXV0aG9yIHBoaWxvZ2IgLyBodHRw
Oi8vYmxvZy50aGVqaXQub3JnLworICAgICAqIEBhdXRob3Igam9yZGlfcm9zIC8gaHR0cDovL3Bs
YXR0c29mdC5jb20KKyAgICAgKiBAYXV0aG9yIEQxcGxvMWQgLyBodHRwOi8vZ2l0aHViLmNvbS9E
MXBsbzFkCisgICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNv
bS8KKyAgICAgKiBAYXV0aG9yIG1pa2FlbCBlbXRpbmdlciAvIGh0dHA6Ly9nb21vLnNlLworICAg
ICAqIEBhdXRob3IgdGlta25pcCAvIGh0dHA6Ly93d3cuZmxvb3JwbGFubmVyLmNvbS8KKyAgICAg
KiBAYXV0aG9yIGJob3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvCisgICAgICogQGF1dGhvciBXZXN0
TGFuZ2xleSAvIGh0dHA6Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5CisgICAgICovCiAKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgIGZ1bmN0aW9uIE1hdHJpeDQoKSB7CiAKLSAgICAgICAg
fSwKKyAgICAgICAgdGhpcy5lbGVtZW50cyA9IFsKIAotICAgICAgICBzZXRZOiBmdW5jdGlvbiAo
IHkgKSB7CisgICAgICAgICAgICAxLCAwLCAwLCAwLAorICAgICAgICAgICAgMCwgMSwgMCwgMCwK
KyAgICAgICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICAwLCAwLCAwLCAxCiAKLSAgICAg
ICAgICAgIHRoaXMueSA9IHk7CisgICAgICAgIF07CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGggPiAwICkgewogCi0gICAgICAgIH0sCisg
ICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuTWF0cml4NDogdGhlIGNvbnN0cnVjdG9y
IG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4nICk7CiAKLSAg
ICAgICAgc2V0WjogZnVuY3Rpb24gKCB6ICkgeworICAgICAgICB9CiAKLSAgICAgICAgICAgIHRo
aXMueiA9IHo7CisgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICBPYmplY3Qu
YXNzaWduKCBNYXRyaXg0LnByb3RvdHlwZSwgewogCi0gICAgICAgIH0sCisgICAgICAgIGlzTWF0
cml4NDogdHJ1ZSwKIAotICAgICAgICBzZXRXOiBmdW5jdGlvbiAoIHcgKSB7CisgICAgICAgIHNl
dDogZnVuY3Rpb24gKCBuMTEsIG4xMiwgbjEzLCBuMTQsIG4yMSwgbjIyLCBuMjMsIG4yNCwgbjMx
LCBuMzIsIG4zMywgbjM0LCBuNDEsIG40MiwgbjQzLCBuNDQgKSB7CiAKLSAgICAgICAgICAgIHRo
aXMudyA9IHc7CisgICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzOworCisgICAgICAg
ICAgICB0ZVsgMCBdID0gbjExOyB0ZVsgNCBdID0gbjEyOyB0ZVsgOCBdID0gbjEzOyB0ZVsgMTIg
XSA9IG4xNDsKKyAgICAgICAgICAgIHRlWyAxIF0gPSBuMjE7IHRlWyA1IF0gPSBuMjI7IHRlWyA5
IF0gPSBuMjM7IHRlWyAxMyBdID0gbjI0OworICAgICAgICAgICAgdGVbIDIgXSA9IG4zMTsgdGVb
IDYgXSA9IG4zMjsgdGVbIDEwIF0gPSBuMzM7IHRlWyAxNCBdID0gbjM0OworICAgICAgICAgICAg
dGVbIDMgXSA9IG40MTsgdGVbIDcgXSA9IG40MjsgdGVbIDExIF0gPSBuNDM7IHRlWyAxNSBdID0g
bjQ0OwogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAg
IHNldENvbXBvbmVudDogZnVuY3Rpb24gKCBpbmRleCwgdmFsdWUgKSB7CisgICAgICAgIGlkZW50
aXR5OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHN3aXRjaCAoIGluZGV4ICkgeworICAg
ICAgICAgICAgdGhpcy5zZXQoCiAKLSAgICAgICAgICAgICAgICBjYXNlIDA6IHRoaXMueCA9IHZh
bHVlOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMueSA9IHZhbHVlOyBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMueiA9IHZhbHVlOyBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIDM6IHRoaXMudyA9IHZhbHVlOyBicmVhazsKLSAgICAgICAgICAgICAg
ICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoICdpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICcgKyBp
bmRleCApOworICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgMCwg
MSwgMCwgMCwKKyAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLAorICAgICAgICAgICAgICAgIDAs
IDAsIDAsIDEKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgKTsKIAogICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBnZXRDb21wb25lbnQ6IGZ1bmN0
aW9uICggaW5kZXggKSB7CisgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAg
ICAgIHN3aXRjaCAoIGluZGV4ICkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBNYXRyaXg0KCku
ZnJvbUFycmF5KCB0aGlzLmVsZW1lbnRzICk7CiAKLSAgICAgICAgICAgICAgICBjYXNlIDA6IHJl
dHVybiB0aGlzLng7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gdGhpcy55OwotICAg
ICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIHRoaXMuejsKLSAgICAgICAgICAgICAgICBjYXNl
IDM6IHJldHVybiB0aGlzLnc7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVy
cm9yKCAnaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAnICsgaW5kZXggKTsKKyAgICAgICAgfSwKIAot
ICAgICAgICAgICAgfQorICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIG0gKSB7CiAKLSAgICAgICAg
fSwKKyAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7CisgICAgICAgICAgICB2YXIg
bWUgPSBtLmVsZW1lbnRzOwogCi0gICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICB0ZVsgMCBdID0gbWVbIDAgXTsgdGVbIDEgXSA9IG1lWyAxIF07IHRlWyAyIF0gPSBtZVsg
MiBdOyB0ZVsgMyBdID0gbWVbIDMgXTsKKyAgICAgICAgICAgIHRlWyA0IF0gPSBtZVsgNCBdOyB0
ZVsgNSBdID0gbWVbIDUgXTsgdGVbIDYgXSA9IG1lWyA2IF07IHRlWyA3IF0gPSBtZVsgNyBdOwor
ICAgICAgICAgICAgdGVbIDggXSA9IG1lWyA4IF07IHRlWyA5IF0gPSBtZVsgOSBdOyB0ZVsgMTAg
XSA9IG1lWyAxMCBdOyB0ZVsgMTEgXSA9IG1lWyAxMSBdOworICAgICAgICAgICAgdGVbIDEyIF0g
PSBtZVsgMTIgXTsgdGVbIDEzIF0gPSBtZVsgMTMgXTsgdGVbIDE0IF0gPSBtZVsgMTQgXTsgdGVb
IDE1IF0gPSBtZVsgMTUgXTsKIAotICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVj
dG9yKCB0aGlzLngsIHRoaXMueSwgdGhpcy56LCB0aGlzLncgKTsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgY29weTogZnVuY3Rpb24gKCB2ICkgewor
ICAgICAgICBjb3B5UG9zaXRpb246IGZ1bmN0aW9uICggbSApIHsKIAotICAgICAgICAgICAgdGhp
cy54ID0gdi54OwotICAgICAgICAgICAgdGhpcy55ID0gdi55OwotICAgICAgICAgICAgdGhpcy56
ID0gdi56OwotICAgICAgICAgICAgdGhpcy53ID0gKCB2LncgIT09IHVuZGVmaW5lZCApID8gdi53
IDogMTsKKyAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHMsIG1lID0gbS5lbGVtZW50
czsKKworICAgICAgICAgICAgdGVbIDEyIF0gPSBtZVsgMTIgXTsKKyAgICAgICAgICAgIHRlWyAx
MyBdID0gbWVbIDEzIF07CisgICAgICAgICAgICB0ZVsgMTQgXSA9IG1lWyAxNCBdOwogCiAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIGFkZDogZnVuY3Rp
b24gKCB2LCB3ICkgeworICAgICAgICBleHRyYWN0QmFzaXM6IGZ1bmN0aW9uICggeEF4aXMsIHlB
eGlzLCB6QXhpcyApIHsKIAotICAgICAgICAgICAgaWYgKCB3ICE9PSB1bmRlZmluZWQgKSB7Cisg
ICAgICAgICAgICB4QXhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKCB0aGlzLCAwICk7CisgICAgICAg
ICAgICB5QXhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKCB0aGlzLCAxICk7CisgICAgICAgICAgICB6
QXhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKCB0aGlzLCAyICk7CiAKLSAgICAgICAgICAgICAgICBj
b25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3I0OiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUg
YXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuJyApOwotICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLmFkZFZlY3RvcnMoIHYsIHcgKTsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzOwogCi0gICAgICAgICAgICB9CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIHRoaXMu
eCArPSB2Lng7Ci0gICAgICAgICAgICB0aGlzLnkgKz0gdi55OwotICAgICAgICAgICAgdGhpcy56
ICs9IHYuejsKLSAgICAgICAgICAgIHRoaXMudyArPSB2Lnc7CisgICAgICAgIG1ha2VCYXNpczog
ZnVuY3Rpb24gKCB4QXhpcywgeUF4aXMsIHpBeGlzICkgeworCisgICAgICAgICAgICB0aGlzLnNl
dCgKKyAgICAgICAgICAgICAgICB4QXhpcy54LCB5QXhpcy54LCB6QXhpcy54LCAwLAorICAgICAg
ICAgICAgICAgIHhBeGlzLnksIHlBeGlzLnksIHpBeGlzLnksIDAsCisgICAgICAgICAgICAgICAg
eEF4aXMueiwgeUF4aXMueiwgekF4aXMueiwgMCwKKyAgICAgICAgICAgICAgICAwLCAwLCAwLCAx
CisgICAgICAgICAgICApOwogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9
LAogCi0gICAgICAgIGFkZFNjYWxhcjogZnVuY3Rpb24gKCBzICkgeworICAgICAgICBleHRyYWN0
Um90YXRpb246IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgdGhpcy54ICs9IHM7Ci0gICAg
ICAgICAgICB0aGlzLnkgKz0gczsKLSAgICAgICAgICAgIHRoaXMueiArPSBzOwotICAgICAgICAg
ICAgdGhpcy53ICs9IHM7CisgICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMygpOwogCi0g
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBleHRy
YWN0Um90YXRpb24oIG0gKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAvLyB0aGlz
IG1ldGhvZCBkb2VzIG5vdCBzdXBwb3J0IHJlZmxlY3Rpb24gbWF0cmljZXMKIAotICAgICAgICBh
ZGRWZWN0b3JzOiBmdW5jdGlvbiAoIGEsIGIgKSB7CisgICAgICAgICAgICAgICAgdmFyIHRlID0g
dGhpcy5lbGVtZW50czsKKyAgICAgICAgICAgICAgICB2YXIgbWUgPSBtLmVsZW1lbnRzOwogCi0g
ICAgICAgICAgICB0aGlzLnggPSBhLnggKyBiLng7Ci0gICAgICAgICAgICB0aGlzLnkgPSBhLnkg
KyBiLnk7Ci0gICAgICAgICAgICB0aGlzLnogPSBhLnogKyBiLno7Ci0gICAgICAgICAgICB0aGlz
LncgPSBhLncgKyBiLnc7CisgICAgICAgICAgICAgICAgdmFyIHNjYWxlWCA9IDEgLyB2MS5zZXRG
cm9tTWF0cml4Q29sdW1uKCBtLCAwICkubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgdmFyIHNj
YWxlWSA9IDEgLyB2MS5zZXRGcm9tTWF0cml4Q29sdW1uKCBtLCAxICkubGVuZ3RoKCk7CisgICAg
ICAgICAgICAgICAgdmFyIHNjYWxlWiA9IDEgLyB2MS5zZXRGcm9tTWF0cml4Q29sdW1uKCBtLCAy
ICkubGVuZ3RoKCk7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAg
IHRlWyAwIF0gPSBtZVsgMCBdICogc2NhbGVYOworICAgICAgICAgICAgICAgIHRlWyAxIF0gPSBt
ZVsgMSBdICogc2NhbGVYOworICAgICAgICAgICAgICAgIHRlWyAyIF0gPSBtZVsgMiBdICogc2Nh
bGVYOworICAgICAgICAgICAgICAgIHRlWyAzIF0gPSAwOwogCi0gICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgdGVbIDQgXSA9IG1lWyA0IF0gKiBzY2FsZVk7CisgICAgICAgICAgICAgICAgdGVb
IDUgXSA9IG1lWyA1IF0gKiBzY2FsZVk7CisgICAgICAgICAgICAgICAgdGVbIDYgXSA9IG1lWyA2
IF0gKiBzY2FsZVk7CisgICAgICAgICAgICAgICAgdGVbIDcgXSA9IDA7CiAKLSAgICAgICAgYWRk
U2NhbGVkVmVjdG9yOiBmdW5jdGlvbiAoIHYsIHMgKSB7CisgICAgICAgICAgICAgICAgdGVbIDgg
XSA9IG1lWyA4IF0gKiBzY2FsZVo7CisgICAgICAgICAgICAgICAgdGVbIDkgXSA9IG1lWyA5IF0g
KiBzY2FsZVo7CisgICAgICAgICAgICAgICAgdGVbIDEwIF0gPSBtZVsgMTAgXSAqIHNjYWxlWjsK
KyAgICAgICAgICAgICAgICB0ZVsgMTEgXSA9IDA7CiAKLSAgICAgICAgICAgIHRoaXMueCArPSB2
LnggKiBzOwotICAgICAgICAgICAgdGhpcy55ICs9IHYueSAqIHM7Ci0gICAgICAgICAgICB0aGlz
LnogKz0gdi56ICogczsKLSAgICAgICAgICAgIHRoaXMudyArPSB2LncgKiBzOworICAgICAgICAg
ICAgICAgIHRlWyAxMiBdID0gMDsKKyAgICAgICAgICAgICAgICB0ZVsgMTMgXSA9IDA7CisgICAg
ICAgICAgICAgICAgdGVbIDE0IF0gPSAwOworICAgICAgICAgICAgICAgIHRlWyAxNSBdID0gMTsK
IAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgc3ViOiBmdW5jdGlvbiAo
IHYsIHcgKSB7CisgICAgICAgIH0oKSwKIAotICAgICAgICAgICAgaWYgKCB3ICE9PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgIG1ha2VSb3RhdGlvbkZyb21FdWxlcjogZnVuY3Rpb24gKCBldWxlciAp
IHsKIAotICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjQ6IC5zdWIo
KSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkg
aW5zdGVhZC4nICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ViVmVjdG9ycyggdiwg
dyApOworICAgICAgICAgICAgaWYgKCAhICggZXVsZXIgJiYgZXVsZXIuaXNFdWxlciApICkgewor
CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLk1hdHJpeDQ6IC5tYWtlUm90
YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFu
IGEgVmVjdG9yMyBhbmQgb3JkZXIuJyApOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHRoaXMueCAtPSB2Lng7Ci0gICAgICAgICAgICB0aGlzLnkgLT0gdi55OwotICAgICAgICAgICAg
dGhpcy56IC09IHYuejsKLSAgICAgICAgICAgIHRoaXMudyAtPSB2Lnc7CisgICAgICAgICAgICB2
YXIgdGUgPSB0aGlzLmVsZW1lbnRzOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgICAgIHZhciB4ID0gZXVsZXIueCwgeSA9IGV1bGVyLnksIHogPSBldWxlci56OworICAgICAg
ICAgICAgdmFyIGEgPSBNYXRoLmNvcyggeCApLCBiID0gTWF0aC5zaW4oIHggKTsKKyAgICAgICAg
ICAgIHZhciBjID0gTWF0aC5jb3MoIHkgKSwgZCA9IE1hdGguc2luKCB5ICk7CisgICAgICAgICAg
ICB2YXIgZSA9IE1hdGguY29zKCB6ICksIGYgPSBNYXRoLnNpbiggeiApOwogCi0gICAgICAgIH0s
CisgICAgICAgICAgICBpZiAoIGV1bGVyLm9yZGVyID09PSAnWFlaJyApIHsKIAotICAgICAgICBz
dWJTY2FsYXI6IGZ1bmN0aW9uICggcyApIHsKKyAgICAgICAgICAgICAgICB2YXIgYWUgPSBhICog
ZSwgYWYgPSBhICogZiwgYmUgPSBiICogZSwgYmYgPSBiICogZjsKIAotICAgICAgICAgICAgdGhp
cy54IC09IHM7Ci0gICAgICAgICAgICB0aGlzLnkgLT0gczsKLSAgICAgICAgICAgIHRoaXMueiAt
PSBzOwotICAgICAgICAgICAgdGhpcy53IC09IHM7CisgICAgICAgICAgICAgICAgdGVbIDAgXSA9
IGMgKiBlOworICAgICAgICAgICAgICAgIHRlWyA0IF0gPSAtIGMgKiBmOworICAgICAgICAgICAg
ICAgIHRlWyA4IF0gPSBkOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAg
ICAgICB0ZVsgMSBdID0gYWYgKyBiZSAqIGQ7CisgICAgICAgICAgICAgICAgdGVbIDUgXSA9IGFl
IC0gYmYgKiBkOworICAgICAgICAgICAgICAgIHRlWyA5IF0gPSAtIGIgKiBjOwogCi0gICAgICAg
IH0sCisgICAgICAgICAgICAgICAgdGVbIDIgXSA9IGJmIC0gYWUgKiBkOworICAgICAgICAgICAg
ICAgIHRlWyA2IF0gPSBiZSArIGFmICogZDsKKyAgICAgICAgICAgICAgICB0ZVsgMTAgXSA9IGEg
KiBjOwogCi0gICAgICAgIHN1YlZlY3RvcnM6IGZ1bmN0aW9uICggYSwgYiApIHsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIGV1bGVyLm9yZGVyID09PSAnWVhaJyApIHsKIAotICAgICAgICAgICAg
dGhpcy54ID0gYS54IC0gYi54OwotICAgICAgICAgICAgdGhpcy55ID0gYS55IC0gYi55OwotICAg
ICAgICAgICAgdGhpcy56ID0gYS56IC0gYi56OwotICAgICAgICAgICAgdGhpcy53ID0gYS53IC0g
Yi53OworICAgICAgICAgICAgICAgIHZhciBjZSA9IGMgKiBlLCBjZiA9IGMgKiBmLCBkZSA9IGQg
KiBlLCBkZiA9IGQgKiBmOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAg
ICAgICB0ZVsgMCBdID0gY2UgKyBkZiAqIGI7CisgICAgICAgICAgICAgICAgdGVbIDQgXSA9IGRl
ICogYiAtIGNmOworICAgICAgICAgICAgICAgIHRlWyA4IF0gPSBhICogZDsKIAotICAgICAgICB9
LAorICAgICAgICAgICAgICAgIHRlWyAxIF0gPSBhICogZjsKKyAgICAgICAgICAgICAgICB0ZVsg
NSBdID0gYSAqIGU7CisgICAgICAgICAgICAgICAgdGVbIDkgXSA9IC0gYjsKIAotICAgICAgICBt
dWx0aXBseVNjYWxhcjogZnVuY3Rpb24gKCBzY2FsYXIgKSB7CisgICAgICAgICAgICAgICAgdGVb
IDIgXSA9IGNmICogYiAtIGRlOworICAgICAgICAgICAgICAgIHRlWyA2IF0gPSBkZiArIGNlICog
YjsKKyAgICAgICAgICAgICAgICB0ZVsgMTAgXSA9IGEgKiBjOwogCi0gICAgICAgICAgICB0aGlz
LnggKj0gc2NhbGFyOwotICAgICAgICAgICAgdGhpcy55ICo9IHNjYWxhcjsKLSAgICAgICAgICAg
IHRoaXMueiAqPSBzY2FsYXI7Ci0gICAgICAgICAgICB0aGlzLncgKj0gc2NhbGFyOworICAgICAg
ICAgICAgfSBlbHNlIGlmICggZXVsZXIub3JkZXIgPT09ICdaWFknICkgewogCi0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB2YXIgY2UgPSBjICogZSwgY2YgPSBjICog
ZiwgZGUgPSBkICogZSwgZGYgPSBkICogZjsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAg
IHRlWyAwIF0gPSBjZSAtIGRmICogYjsKKyAgICAgICAgICAgICAgICB0ZVsgNCBdID0gLSBhICog
ZjsKKyAgICAgICAgICAgICAgICB0ZVsgOCBdID0gZGUgKyBjZiAqIGI7CiAKLSAgICAgICAgYXBw
bHlNYXRyaXg0OiBmdW5jdGlvbiAoIG0gKSB7CisgICAgICAgICAgICAgICAgdGVbIDEgXSA9IGNm
ICsgZGUgKiBiOworICAgICAgICAgICAgICAgIHRlWyA1IF0gPSBhICogZTsKKyAgICAgICAgICAg
ICAgICB0ZVsgOSBdID0gZGYgLSBjZSAqIGI7CiAKLSAgICAgICAgICAgIHZhciB4ID0gdGhpcy54
LCB5ID0gdGhpcy55LCB6ID0gdGhpcy56LCB3ID0gdGhpcy53OwotICAgICAgICAgICAgdmFyIGUg
PSBtLmVsZW1lbnRzOworICAgICAgICAgICAgICAgIHRlWyAyIF0gPSAtIGEgKiBkOworICAgICAg
ICAgICAgICAgIHRlWyA2IF0gPSBiOworICAgICAgICAgICAgICAgIHRlWyAxMCBdID0gYSAqIGM7
CiAKLSAgICAgICAgICAgIHRoaXMueCA9IGVbIDAgXSAqIHggKyBlWyA0IF0gKiB5ICsgZVsgOCBd
ICogeiArIGVbIDEyIF0gKiB3OwotICAgICAgICAgICAgdGhpcy55ID0gZVsgMSBdICogeCArIGVb
IDUgXSAqIHkgKyBlWyA5IF0gKiB6ICsgZVsgMTMgXSAqIHc7Ci0gICAgICAgICAgICB0aGlzLnog
PSBlWyAyIF0gKiB4ICsgZVsgNiBdICogeSArIGVbIDEwIF0gKiB6ICsgZVsgMTQgXSAqIHc7Ci0g
ICAgICAgICAgICB0aGlzLncgPSBlWyAzIF0gKiB4ICsgZVsgNyBdICogeSArIGVbIDExIF0gKiB6
ICsgZVsgMTUgXSAqIHc7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBldWxlci5vcmRlciA9PT0g
J1pZWCcgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIHZh
ciBhZSA9IGEgKiBlLCBhZiA9IGEgKiBmLCBiZSA9IGIgKiBlLCBiZiA9IGIgKiBmOwogCi0gICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgdGVbIDAgXSA9IGMgKiBlOworICAgICAgICAgICAgICAg
IHRlWyA0IF0gPSBiZSAqIGQgLSBhZjsKKyAgICAgICAgICAgICAgICB0ZVsgOCBdID0gYWUgKiBk
ICsgYmY7CiAKLSAgICAgICAgZGl2aWRlU2NhbGFyOiBmdW5jdGlvbiAoIHNjYWxhciApIHsKKyAg
ICAgICAgICAgICAgICB0ZVsgMSBdID0gYyAqIGY7CisgICAgICAgICAgICAgICAgdGVbIDUgXSA9
IGJmICogZCArIGFlOworICAgICAgICAgICAgICAgIHRlWyA5IF0gPSBhZiAqIGQgLSBiZTsKIAot
ICAgICAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoIDEgLyBzY2FsYXIgKTsKKyAg
ICAgICAgICAgICAgICB0ZVsgMiBdID0gLSBkOworICAgICAgICAgICAgICAgIHRlWyA2IF0gPSBi
ICogYzsKKyAgICAgICAgICAgICAgICB0ZVsgMTAgXSA9IGEgKiBjOwogCi0gICAgICAgIH0sCisg
ICAgICAgICAgICB9IGVsc2UgaWYgKCBldWxlci5vcmRlciA9PT0gJ1laWCcgKSB7CiAKLSAgICAg
ICAgc2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb246IGZ1bmN0aW9uICggcSApIHsKKyAgICAgICAg
ICAgICAgICB2YXIgYWMgPSBhICogYywgYWQgPSBhICogZCwgYmMgPSBiICogYywgYmQgPSBiICog
ZDsKIAotICAgICAgICAgICAgLy8gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMv
Z2VvbWV0cnkvcm90YXRpb25zL2NvbnZlcnNpb25zL3F1YXRlcm5pb25Ub0FuZ2xlL2luZGV4Lmh0
bQorICAgICAgICAgICAgICAgIHRlWyAwIF0gPSBjICogZTsKKyAgICAgICAgICAgICAgICB0ZVsg
NCBdID0gYmQgLSBhYyAqIGY7CisgICAgICAgICAgICAgICAgdGVbIDggXSA9IGJjICogZiArIGFk
OwogCi0gICAgICAgICAgICAvLyBxIGlzIGFzc3VtZWQgdG8gYmUgbm9ybWFsaXplZAorICAgICAg
ICAgICAgICAgIHRlWyAxIF0gPSBmOworICAgICAgICAgICAgICAgIHRlWyA1IF0gPSBhICogZTsK
KyAgICAgICAgICAgICAgICB0ZVsgOSBdID0gLSBiICogZTsKIAotICAgICAgICAgICAgdGhpcy53
ID0gMiAqIE1hdGguYWNvcyggcS53ICk7CisgICAgICAgICAgICAgICAgdGVbIDIgXSA9IC0gZCAq
IGU7CisgICAgICAgICAgICAgICAgdGVbIDYgXSA9IGFkICogZiArIGJjOworICAgICAgICAgICAg
ICAgIHRlWyAxMCBdID0gYWMgLSBiZCAqIGY7CiAKLSAgICAgICAgICAgIHZhciBzID0gTWF0aC5z
cXJ0KCAxIC0gcS53ICogcS53ICk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBldWxlci5vcmRl
ciA9PT0gJ1haWScgKSB7CiAKLSAgICAgICAgICAgIGlmICggcyA8IDAuMDAwMSApIHsKKyAgICAg
ICAgICAgICAgICB2YXIgYWMgPSBhICogYywgYWQgPSBhICogZCwgYmMgPSBiICogYywgYmQgPSBi
ICogZDsKIAotICAgICAgICAgICAgICAgIHRoaXMueCA9IDE7Ci0gICAgICAgICAgICAgICAgdGhp
cy55ID0gMDsKLSAgICAgICAgICAgICAgICB0aGlzLnogPSAwOworICAgICAgICAgICAgICAgIHRl
WyAwIF0gPSBjICogZTsKKyAgICAgICAgICAgICAgICB0ZVsgNCBdID0gLSBmOworICAgICAgICAg
ICAgICAgIHRlWyA4IF0gPSBkICogZTsKIAotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB0ZVsgMSBdID0gYWMgKiBmICsgYmQ7CisgICAgICAgICAgICAgICAgdGVbIDUgXSA9
IGEgKiBlOworICAgICAgICAgICAgICAgIHRlWyA5IF0gPSBhZCAqIGYgLSBiYzsKIAotICAgICAg
ICAgICAgICAgIHRoaXMueCA9IHEueCAvIHM7Ci0gICAgICAgICAgICAgICAgdGhpcy55ID0gcS55
IC8gczsKLSAgICAgICAgICAgICAgICB0aGlzLnogPSBxLnogLyBzOworICAgICAgICAgICAgICAg
IHRlWyAyIF0gPSBiYyAqIGYgLSBhZDsKKyAgICAgICAgICAgICAgICB0ZVsgNiBdID0gYiAqIGU7
CisgICAgICAgICAgICAgICAgdGVbIDEwIF0gPSBiZCAqIGYgKyBhYzsKIAogICAgICAgICAgICAg
fQogCisgICAgICAgICAgICAvLyBib3R0b20gcm93CisgICAgICAgICAgICB0ZVsgMyBdID0gMDsK
KyAgICAgICAgICAgIHRlWyA3IF0gPSAwOworICAgICAgICAgICAgdGVbIDExIF0gPSAwOworCisg
ICAgICAgICAgICAvLyBsYXN0IGNvbHVtbgorICAgICAgICAgICAgdGVbIDEyIF0gPSAwOworICAg
ICAgICAgICAgdGVbIDEzIF0gPSAwOworICAgICAgICAgICAgdGVbIDE0IF0gPSAwOworICAgICAg
ICAgICAgdGVbIDE1IF0gPSAxOworCiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAg
ICB9LAogCi0gICAgICAgIHNldEF4aXNBbmdsZUZyb21Sb3RhdGlvbk1hdHJpeDogZnVuY3Rpb24g
KCBtICkgeworICAgICAgICBtYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbjogZnVuY3Rpb24gKCkg
ewogCi0gICAgICAgICAgICAvLyBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9n
ZW9tZXRyeS9yb3RhdGlvbnMvY29udmVyc2lvbnMvbWF0cml4VG9BbmdsZS9pbmRleC5odG0KKyAg
ICAgICAgICAgIHZhciB6ZXJvID0gbmV3IFZlY3RvcjMoIDAsIDAsIDAgKTsKKyAgICAgICAgICAg
IHZhciBvbmUgPSBuZXcgVmVjdG9yMyggMSwgMSwgMSApOwogCi0gICAgICAgICAgICAvLyBhc3N1
bWVzIHRoZSB1cHBlciAzeDMgb2YgbSBpcyBhIHB1cmUgcm90YXRpb24gbWF0cml4IChpLmUsIHVu
c2NhbGVkKQorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG1ha2VSb3RhdGlvbkZyb21RdWF0
ZXJuaW9uKCBxICkgewogCi0gICAgICAgICAgICB2YXIgYW5nbGUsIHgsIHksIHosICAgICAvLyB2
YXJpYWJsZXMgZm9yIHJlc3VsdAotICAgICAgICAgICAgICAgIGVwc2lsb24gPSAwLjAxLCAgICAg
Ly8gbWFyZ2luIHRvIGFsbG93IGZvciByb3VuZGluZyBlcnJvcnMKLSAgICAgICAgICAgICAgICBl
cHNpbG9uMiA9IDAuMSwgICAgIC8vIG1hcmdpbiB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIDAgYW5k
IDE4MCBkZWdyZWVzCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9zZSggemVybywg
cSwgb25lICk7CiAKLSAgICAgICAgICAgICAgICB0ZSA9IG0uZWxlbWVudHMsCisgICAgICAgICAg
ICB9OwogCi0gICAgICAgICAgICAgICAgbTExID0gdGVbIDAgXSwgbTEyID0gdGVbIDQgXSwgbTEz
ID0gdGVbIDggXSwKLSAgICAgICAgICAgICAgICBtMjEgPSB0ZVsgMSBdLCBtMjIgPSB0ZVsgNSBd
LCBtMjMgPSB0ZVsgOSBdLAotICAgICAgICAgICAgICAgIG0zMSA9IHRlWyAyIF0sIG0zMiA9IHRl
WyA2IF0sIG0zMyA9IHRlWyAxMCBdOworICAgICAgICB9KCksCiAKLSAgICAgICAgICAgIGlmICgg
KCBNYXRoLmFicyggbTEyIC0gbTIxICkgPCBlcHNpbG9uICkgJiYKLSAgICAgICAgICAgICAgICAg
KCBNYXRoLmFicyggbTEzIC0gbTMxICkgPCBlcHNpbG9uICkgJiYKLSAgICAgICAgICAgICAgICAg
KCBNYXRoLmFicyggbTIzIC0gbTMyICkgPCBlcHNpbG9uICkgKSB7CisgICAgICAgIGxvb2tBdDog
ZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgLy8gc2luZ3VsYXJpdHkgZm91bmQKLSAg
ICAgICAgICAgICAgICAvLyBmaXJzdCBjaGVjayBmb3IgaWRlbnRpdHkgbWF0cml4IHdoaWNoIG11
c3QgaGF2ZSArMSBmb3IgYWxsIHRlcm1zCi0gICAgICAgICAgICAgICAgLy8gaW4gbGVhZGluZyBk
aWFnb25hbCBhbmQgemVybyBpbiBvdGhlciB0ZXJtcworICAgICAgICAgICAgdmFyIHggPSBuZXcg
VmVjdG9yMygpOworICAgICAgICAgICAgdmFyIHkgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAg
ICAgdmFyIHogPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICAgICAgaWYgKCAoIE1hdGgu
YWJzKCBtMTIgKyBtMjEgKSA8IGVwc2lsb24yICkgJiYKLSAgICAgICAgICAgICAgICAgICAgICgg
TWF0aC5hYnMoIG0xMyArIG0zMSApIDwgZXBzaWxvbjIgKSAmJgotICAgICAgICAgICAgICAgICAg
ICAgKCBNYXRoLmFicyggbTIzICsgbTMyICkgPCBlcHNpbG9uMiApICYmCi0gICAgICAgICAgICAg
ICAgICAgICAoIE1hdGguYWJzKCBtMTEgKyBtMjIgKyBtMzMgLSAzICkgPCBlcHNpbG9uMiApICkg
eworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGxvb2tBdCggZXllLCB0YXJnZXQsIHVwICkg
ewogCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgc2luZ3VsYXJpdHkgaXMgaWRlbnRpdHkg
bWF0cml4IHNvIGFuZ2xlID0gMAorICAgICAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVu
dHM7CiAKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoIDEsIDAsIDAsIDAgKTsKKyAgICAg
ICAgICAgICAgICB6LnN1YlZlY3RvcnMoIGV5ZSwgdGFyZ2V0ICk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7IC8vIHplcm8gYW5nbGUsIGFyYml0cmFyeSBheGlzCisgICAgICAg
ICAgICAgICAgaWYgKCB6Lmxlbmd0aFNxKCkgPT09IDAgKSB7CiAKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIC8vIGV5ZSBhbmQgdGFyZ2V0IGFyZSBpbiB0aGUgc2FtZSBw
b3NpdGlvbgogCi0gICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHRoaXMgc2luZ3VsYXJpdHkg
aXMgYW5nbGUgPSAxODAKKyAgICAgICAgICAgICAgICAgICAgei56ID0gMTsKIAotICAgICAgICAg
ICAgICAgIGFuZ2xlID0gTWF0aC5QSTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICB2YXIgeHggPSAoIG0xMSArIDEgKSAvIDI7Ci0gICAgICAgICAgICAgICAgdmFyIHl5ID0g
KCBtMjIgKyAxICkgLyAyOwotICAgICAgICAgICAgICAgIHZhciB6eiA9ICggbTMzICsgMSApIC8g
MjsKLSAgICAgICAgICAgICAgICB2YXIgeHkgPSAoIG0xMiArIG0yMSApIC8gNDsKLSAgICAgICAg
ICAgICAgICB2YXIgeHogPSAoIG0xMyArIG0zMSApIC8gNDsKLSAgICAgICAgICAgICAgICB2YXIg
eXogPSAoIG0yMyArIG0zMiApIC8gNDsKKyAgICAgICAgICAgICAgICB6Lm5vcm1hbGl6ZSgpOwor
ICAgICAgICAgICAgICAgIHguY3Jvc3NWZWN0b3JzKCB1cCwgeiApOwogCi0gICAgICAgICAgICAg
ICAgaWYgKCAoIHh4ID4geXkgKSAmJiAoIHh4ID4genogKSApIHsKLQotICAgICAgICAgICAgICAg
ICAgICAvLyBtMTEgaXMgdGhlIGxhcmdlc3QgZGlhZ29uYWwgdGVybQotCi0gICAgICAgICAgICAg
ICAgICAgIGlmICggeHggPCBlcHNpbG9uICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICB4
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAwLjcwNzEwNjc4MTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHogPSAwLjcwNzEwNjc4MTsKLQotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotCi0gICAgICAgICAgICAgICAgICAgICAgICB4ID0gTWF0aC5zcXJ0KCB4eCApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHh5IC8geDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHogPSB4eiAvIHg7Ci0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggeXkgPiB6eiApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHgubGVuZ3Ro
U3EoKSA9PT0gMCApIHsKIAotICAgICAgICAgICAgICAgICAgICAvLyBtMjIgaXMgdGhlIGxhcmdl
c3QgZGlhZ29uYWwgdGVybQorICAgICAgICAgICAgICAgICAgICAvLyB1cCBhbmQgeiBhcmUgcGFy
YWxsZWwKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIHl5IDwgZXBzaWxvbiApIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCBNYXRoLmFicyggdXAueiApID09PSAxICkgewogCi0gICAgICAg
ICAgICAgICAgICAgICAgICB4ID0gMC43MDcxMDY3ODE7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB5ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHogPSAwLjcwNzEwNjc4MTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHoueCArPSAwLjAwMDE7CiAKICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgeSA9IE1hdGguc3FydCggeXkgKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4eSAvIHk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB6ID0geXogLyB5OworICAgICAgICAgICAgICAgICAgICAgICAgei56ICs9IDAuMDAwMTsK
IAogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICB6Lm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgICAgICAgICB4LmNy
b3NzVmVjdG9ycyggdXAsIHogKTsKIAotICAgICAgICAgICAgICAgICAgICAvLyBtMzMgaXMgdGhl
IGxhcmdlc3QgZGlhZ29uYWwgdGVybSBzbyBiYXNlIHJlc3VsdCBvbiB0aGlzCisgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlmICggenogPCBlcHNpbG9uICkgeworICAg
ICAgICAgICAgICAgIHgubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAgeS5jcm9zc1ZlY3Rv
cnMoIHosIHggKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDAuNzA3MTA2NzgxOwot
ICAgICAgICAgICAgICAgICAgICAgICAgeSA9IDAuNzA3MTA2NzgxOwotICAgICAgICAgICAgICAg
ICAgICAgICAgeiA9IDA7CisgICAgICAgICAgICAgICAgdGVbIDAgXSA9IHgueDsgdGVbIDQgXSA9
IHkueDsgdGVbIDggXSA9IHoueDsKKyAgICAgICAgICAgICAgICB0ZVsgMSBdID0geC55OyB0ZVsg
NSBdID0geS55OyB0ZVsgOSBdID0gei55OworICAgICAgICAgICAgICAgIHRlWyAyIF0gPSB4Lno7
IHRlWyA2IF0gPSB5Lno7IHRlWyAxMCBdID0gei56OwogCi0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHogPSBNYXRoLnNxcnQoIHp6ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4ID0g
eHogLyB6OwotICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHl6IC8gejsKKyAgICAgICAgICAg
IH07CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICB9KCksCiAKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoIG0sIG4gKSB7CiAKLSAgICAgICAg
ICAgICAgICB0aGlzLnNldCggeCwgeSwgeiwgYW5nbGUgKTsKKyAgICAgICAgICAgIGlmICggbiAh
PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7IC8vIHJldHVy
biAxODAgZGVnIHJvdGF0aW9uCisgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUu
TWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAu
bXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuJyApOworICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXMoIG0sIG4gKTsKIAogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAvLyBhcyB3ZSBoYXZlIHJlYWNoZWQgaGVyZSB0aGVyZSBhcmUgbm8gc2luZ3Vs
YXJpdGllcyBzbyB3ZSBjYW4gaGFuZGxlIG5vcm1hbGx5CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5tdWx0aXBseU1hdHJpY2VzKCB0aGlzLCBtICk7CiAKLSAgICAgICAgICAgIHZhciBzID0gTWF0
aC5zcXJ0KCAoIG0zMiAtIG0yMyApICogKCBtMzIgLSBtMjMgKSArCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCBtMTMgLSBtMzEgKSAqICggbTEzIC0gbTMxICkgKwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICggbTIxIC0gbTEyICkgKiAoIG0yMSAtIG0xMiApICk7IC8v
IHVzZWQgdG8gbm9ybWFsaXplCisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIGlmICggTWF0aC5h
YnMoIHMgKSA8IDAuMDAxICkgcyA9IDE7CisgICAgICAgIHByZW11bHRpcGx5OiBmdW5jdGlvbiAo
IG0gKSB7CiAKLSAgICAgICAgICAgIC8vIHByZXZlbnQgZGl2aWRlIGJ5IHplcm8sIHNob3VsZCBu
b3QgaGFwcGVuIGlmIG1hdHJpeCBpcyBvcnRob2dvbmFsIGFuZCBzaG91bGQgYmUKLSAgICAgICAg
ICAgIC8vIGNhdWdodCBieSBzaW5ndWxhcml0eSB0ZXN0IGFib3ZlLCBidXQgSSd2ZSBsZWZ0IGl0
IGluIGp1c3QgaW4gY2FzZQorICAgICAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNl
cyggbSwgdGhpcyApOwogCi0gICAgICAgICAgICB0aGlzLnggPSAoIG0zMiAtIG0yMyApIC8gczsK
LSAgICAgICAgICAgIHRoaXMueSA9ICggbTEzIC0gbTMxICkgLyBzOwotICAgICAgICAgICAgdGhp
cy56ID0gKCBtMjEgLSBtMTIgKSAvIHM7Ci0gICAgICAgICAgICB0aGlzLncgPSBNYXRoLmFjb3Mo
ICggbTExICsgbTIyICsgbTMzIC0gMSApIC8gMiApOworICAgICAgICB9LAogCi0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICAgICAgbXVsdGlwbHlNYXRyaWNlczogZnVuY3Rpb24gKCBhLCBi
ICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICB2YXIgYWUgPSBhLmVsZW1lbnRzOworICAg
ICAgICAgICAgdmFyIGJlID0gYi5lbGVtZW50czsKKyAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMu
ZWxlbWVudHM7CiAKLSAgICAgICAgbWluOiBmdW5jdGlvbiAoIHYgKSB7CisgICAgICAgICAgICB2
YXIgYTExID0gYWVbIDAgXSwgYTEyID0gYWVbIDQgXSwgYTEzID0gYWVbIDggXSwgYTE0ID0gYWVb
IDEyIF07CisgICAgICAgICAgICB2YXIgYTIxID0gYWVbIDEgXSwgYTIyID0gYWVbIDUgXSwgYTIz
ID0gYWVbIDkgXSwgYTI0ID0gYWVbIDEzIF07CisgICAgICAgICAgICB2YXIgYTMxID0gYWVbIDIg
XSwgYTMyID0gYWVbIDYgXSwgYTMzID0gYWVbIDEwIF0sIGEzNCA9IGFlWyAxNCBdOworICAgICAg
ICAgICAgdmFyIGE0MSA9IGFlWyAzIF0sIGE0MiA9IGFlWyA3IF0sIGE0MyA9IGFlWyAxMSBdLCBh
NDQgPSBhZVsgMTUgXTsKIAotICAgICAgICAgICAgdGhpcy54ID0gTWF0aC5taW4oIHRoaXMueCwg
di54ICk7Ci0gICAgICAgICAgICB0aGlzLnkgPSBNYXRoLm1pbiggdGhpcy55LCB2LnkgKTsKLSAg
ICAgICAgICAgIHRoaXMueiA9IE1hdGgubWluKCB0aGlzLnosIHYueiApOwotICAgICAgICAgICAg
dGhpcy53ID0gTWF0aC5taW4oIHRoaXMudywgdi53ICk7CisgICAgICAgICAgICB2YXIgYjExID0g
YmVbIDAgXSwgYjEyID0gYmVbIDQgXSwgYjEzID0gYmVbIDggXSwgYjE0ID0gYmVbIDEyIF07Cisg
ICAgICAgICAgICB2YXIgYjIxID0gYmVbIDEgXSwgYjIyID0gYmVbIDUgXSwgYjIzID0gYmVbIDkg
XSwgYjI0ID0gYmVbIDEzIF07CisgICAgICAgICAgICB2YXIgYjMxID0gYmVbIDIgXSwgYjMyID0g
YmVbIDYgXSwgYjMzID0gYmVbIDEwIF0sIGIzNCA9IGJlWyAxNCBdOworICAgICAgICAgICAgdmFy
IGI0MSA9IGJlWyAzIF0sIGI0MiA9IGJlWyA3IF0sIGI0MyA9IGJlWyAxMSBdLCBiNDQgPSBiZVsg
MTUgXTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB0ZVsgMCBdID0g
YTExICogYjExICsgYTEyICogYjIxICsgYTEzICogYjMxICsgYTE0ICogYjQxOworICAgICAgICAg
ICAgdGVbIDQgXSA9IGExMSAqIGIxMiArIGExMiAqIGIyMiArIGExMyAqIGIzMiArIGExNCAqIGI0
MjsKKyAgICAgICAgICAgIHRlWyA4IF0gPSBhMTEgKiBiMTMgKyBhMTIgKiBiMjMgKyBhMTMgKiBi
MzMgKyBhMTQgKiBiNDM7CisgICAgICAgICAgICB0ZVsgMTIgXSA9IGExMSAqIGIxNCArIGExMiAq
IGIyNCArIGExMyAqIGIzNCArIGExNCAqIGI0NDsKIAotICAgICAgICB9LAorICAgICAgICAgICAg
dGVbIDEgXSA9IGEyMSAqIGIxMSArIGEyMiAqIGIyMSArIGEyMyAqIGIzMSArIGEyNCAqIGI0MTsK
KyAgICAgICAgICAgIHRlWyA1IF0gPSBhMjEgKiBiMTIgKyBhMjIgKiBiMjIgKyBhMjMgKiBiMzIg
KyBhMjQgKiBiNDI7CisgICAgICAgICAgICB0ZVsgOSBdID0gYTIxICogYjEzICsgYTIyICogYjIz
ICsgYTIzICogYjMzICsgYTI0ICogYjQzOworICAgICAgICAgICAgdGVbIDEzIF0gPSBhMjEgKiBi
MTQgKyBhMjIgKiBiMjQgKyBhMjMgKiBiMzQgKyBhMjQgKiBiNDQ7CiAKLSAgICAgICAgbWF4OiBm
dW5jdGlvbiAoIHYgKSB7CisgICAgICAgICAgICB0ZVsgMiBdID0gYTMxICogYjExICsgYTMyICog
YjIxICsgYTMzICogYjMxICsgYTM0ICogYjQxOworICAgICAgICAgICAgdGVbIDYgXSA9IGEzMSAq
IGIxMiArIGEzMiAqIGIyMiArIGEzMyAqIGIzMiArIGEzNCAqIGI0MjsKKyAgICAgICAgICAgIHRl
WyAxMCBdID0gYTMxICogYjEzICsgYTMyICogYjIzICsgYTMzICogYjMzICsgYTM0ICogYjQzOwor
ICAgICAgICAgICAgdGVbIDE0IF0gPSBhMzEgKiBiMTQgKyBhMzIgKiBiMjQgKyBhMzMgKiBiMzQg
KyBhMzQgKiBiNDQ7CiAKLSAgICAgICAgICAgIHRoaXMueCA9IE1hdGgubWF4KCB0aGlzLngsIHYu
eCApOwotICAgICAgICAgICAgdGhpcy55ID0gTWF0aC5tYXgoIHRoaXMueSwgdi55ICk7Ci0gICAg
ICAgICAgICB0aGlzLnogPSBNYXRoLm1heCggdGhpcy56LCB2LnogKTsKLSAgICAgICAgICAgIHRo
aXMudyA9IE1hdGgubWF4KCB0aGlzLncsIHYudyApOworICAgICAgICAgICAgdGVbIDMgXSA9IGE0
MSAqIGIxMSArIGE0MiAqIGIyMSArIGE0MyAqIGIzMSArIGE0NCAqIGI0MTsKKyAgICAgICAgICAg
IHRlWyA3IF0gPSBhNDEgKiBiMTIgKyBhNDIgKiBiMjIgKyBhNDMgKiBiMzIgKyBhNDQgKiBiNDI7
CisgICAgICAgICAgICB0ZVsgMTEgXSA9IGE0MSAqIGIxMyArIGE0MiAqIGIyMyArIGE0MyAqIGIz
MyArIGE0NCAqIGI0MzsKKyAgICAgICAgICAgIHRlWyAxNSBdID0gYTQxICogYjE0ICsgYTQyICog
YjI0ICsgYTQzICogYjM0ICsgYTQ0ICogYjQ0OwogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsK
IAogICAgICAgICB9LAogCi0gICAgICAgIGNsYW1wOiBmdW5jdGlvbiAoIG1pbiwgbWF4ICkgewor
ICAgICAgICBtdWx0aXBseVNjYWxhcjogZnVuY3Rpb24gKCBzICkgewogCi0gICAgICAgICAgICAv
LyBhc3N1bWVzIG1pbiA8IG1heCwgY29tcG9uZW50d2lzZQorICAgICAgICAgICAgdmFyIHRlID0g
dGhpcy5lbGVtZW50czsKIAotICAgICAgICAgICAgdGhpcy54ID0gTWF0aC5tYXgoIG1pbi54LCBN
YXRoLm1pbiggbWF4LngsIHRoaXMueCApICk7Ci0gICAgICAgICAgICB0aGlzLnkgPSBNYXRoLm1h
eCggbWluLnksIE1hdGgubWluKCBtYXgueSwgdGhpcy55ICkgKTsKLSAgICAgICAgICAgIHRoaXMu
eiA9IE1hdGgubWF4KCBtaW4ueiwgTWF0aC5taW4oIG1heC56LCB0aGlzLnogKSApOwotICAgICAg
ICAgICAgdGhpcy53ID0gTWF0aC5tYXgoIG1pbi53LCBNYXRoLm1pbiggbWF4LncsIHRoaXMudyAp
ICk7CisgICAgICAgICAgICB0ZVsgMCBdICo9IHM7IHRlWyA0IF0gKj0gczsgdGVbIDggXSAqPSBz
OyB0ZVsgMTIgXSAqPSBzOworICAgICAgICAgICAgdGVbIDEgXSAqPSBzOyB0ZVsgNSBdICo9IHM7
IHRlWyA5IF0gKj0gczsgdGVbIDEzIF0gKj0gczsKKyAgICAgICAgICAgIHRlWyAyIF0gKj0gczsg
dGVbIDYgXSAqPSBzOyB0ZVsgMTAgXSAqPSBzOyB0ZVsgMTQgXSAqPSBzOworICAgICAgICAgICAg
dGVbIDMgXSAqPSBzOyB0ZVsgNyBdICo9IHM7IHRlWyAxMSBdICo9IHM7IHRlWyAxNSBdICo9IHM7
CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgY2xh
bXBTY2FsYXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZTog
ZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICB2YXIgbWluLCBtYXg7CisgICAgICAgICAgICB2
YXIgdjEgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY2xh
bXBTY2FsYXIoIG1pblZhbCwgbWF4VmFsICkgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
IGFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSApIHsKIAotICAgICAgICAgICAgICAg
IGlmICggbWluID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkg
PSAwLCBsID0gYXR0cmlidXRlLmNvdW50OyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICAgICAg
ICAgICAgICBtaW4gPSBuZXcgVmVjdG9yNCgpOwotICAgICAgICAgICAgICAgICAgICBtYXggPSBu
ZXcgVmVjdG9yNCgpOworICAgICAgICAgICAgICAgICAgICB2MS54ID0gYXR0cmlidXRlLmdldFgo
IGkgKTsKKyAgICAgICAgICAgICAgICAgICAgdjEueSA9IGF0dHJpYnV0ZS5nZXRZKCBpICk7Cisg
ICAgICAgICAgICAgICAgICAgIHYxLnogPSBhdHRyaWJ1dGUuZ2V0WiggaSApOwogCi0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB2MS5hcHBseU1hdHJpeDQoIHRoaXMgKTsK
IAotICAgICAgICAgICAgICAgIG1pbi5zZXQoIG1pblZhbCwgbWluVmFsLCBtaW5WYWwsIG1pblZh
bCApOwotICAgICAgICAgICAgICAgIG1heC5zZXQoIG1heFZhbCwgbWF4VmFsLCBtYXhWYWwsIG1h
eFZhbCApOworICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUuc2V0WFlaKCBpLCB2MS54LCB2
MS55LCB2MS56ICk7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGFtcCggbWluLCBt
YXggKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gYXR0cmli
dXRlOwogCiAgICAgICAgICAgICB9OwogCiAgICAgICAgIH0oKSwKIAotICAgICAgICBjbGFtcExl
bmd0aDogZnVuY3Rpb24gKCBtaW4sIG1heCApIHsKLQotICAgICAgICAgICAgdmFyIGxlbmd0aCA9
IHRoaXMubGVuZ3RoKCk7CisgICAgICAgIGRldGVybWluYW50OiBmdW5jdGlvbiAoKSB7CiAKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLmRpdmlkZVNjYWxhciggbGVuZ3RoIHx8IDEgKS5tdWx0aXBs
eVNjYWxhciggTWF0aC5tYXgoIG1pbiwgTWF0aC5taW4oIG1heCwgbGVuZ3RoICkgKSApOworICAg
ICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKIAotICAgICAgICB9LAorICAgICAgICAg
ICAgdmFyIG4xMSA9IHRlWyAwIF0sIG4xMiA9IHRlWyA0IF0sIG4xMyA9IHRlWyA4IF0sIG4xNCA9
IHRlWyAxMiBdOworICAgICAgICAgICAgdmFyIG4yMSA9IHRlWyAxIF0sIG4yMiA9IHRlWyA1IF0s
IG4yMyA9IHRlWyA5IF0sIG4yNCA9IHRlWyAxMyBdOworICAgICAgICAgICAgdmFyIG4zMSA9IHRl
WyAyIF0sIG4zMiA9IHRlWyA2IF0sIG4zMyA9IHRlWyAxMCBdLCBuMzQgPSB0ZVsgMTQgXTsKKyAg
ICAgICAgICAgIHZhciBuNDEgPSB0ZVsgMyBdLCBuNDIgPSB0ZVsgNyBdLCBuNDMgPSB0ZVsgMTEg
XSwgbjQ0ID0gdGVbIDE1IF07CiAKLSAgICAgICAgZmxvb3I6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIC8vVE9ETzogbWFrZSB0aGlzIG1vcmUgZWZmaWNpZW50CisgICAgICAgICAgICAvLygg
YmFzZWQgb24gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvYWxnZWJyYS9tYXRy
aXgvZnVuY3Rpb25zL2ludmVyc2UvZm91ckQvaW5kZXguaHRtICkKIAotICAgICAgICAgICAgdGhp
cy54ID0gTWF0aC5mbG9vciggdGhpcy54ICk7Ci0gICAgICAgICAgICB0aGlzLnkgPSBNYXRoLmZs
b29yKCB0aGlzLnkgKTsKLSAgICAgICAgICAgIHRoaXMueiA9IE1hdGguZmxvb3IoIHRoaXMueiAp
OwotICAgICAgICAgICAgdGhpcy53ID0gTWF0aC5mbG9vciggdGhpcy53ICk7CisgICAgICAgICAg
ICByZXR1cm4gKAorICAgICAgICAgICAgICAgIG40MSAqICgKKyAgICAgICAgICAgICAgICAgICAg
KyBuMTQgKiBuMjMgKiBuMzIKKyAgICAgICAgICAgICAgICAgICAgIC0gbjEzICogbjI0ICogbjMy
CisgICAgICAgICAgICAgICAgICAgICAtIG4xNCAqIG4yMiAqIG4zMworICAgICAgICAgICAgICAg
ICAgICAgKyBuMTIgKiBuMjQgKiBuMzMKKyAgICAgICAgICAgICAgICAgICAgICsgbjEzICogbjIy
ICogbjM0CisgICAgICAgICAgICAgICAgICAgICAtIG4xMiAqIG4yMyAqIG4zNAorICAgICAgICAg
ICAgICAgICkgKworICAgICAgICAgICAgICAgIG40MiAqICgKKyAgICAgICAgICAgICAgICAgICAg
KyBuMTEgKiBuMjMgKiBuMzQKKyAgICAgICAgICAgICAgICAgICAgIC0gbjExICogbjI0ICogbjMz
CisgICAgICAgICAgICAgICAgICAgICArIG4xNCAqIG4yMSAqIG4zMworICAgICAgICAgICAgICAg
ICAgICAgLSBuMTMgKiBuMjEgKiBuMzQKKyAgICAgICAgICAgICAgICAgICAgICsgbjEzICogbjI0
ICogbjMxCisgICAgICAgICAgICAgICAgICAgICAtIG4xNCAqIG4yMyAqIG4zMQorICAgICAgICAg
ICAgICAgICkgKworICAgICAgICAgICAgICAgIG40MyAqICgKKyAgICAgICAgICAgICAgICAgICAg
KyBuMTEgKiBuMjQgKiBuMzIKKyAgICAgICAgICAgICAgICAgICAgIC0gbjExICogbjIyICogbjM0
CisgICAgICAgICAgICAgICAgICAgICAtIG4xNCAqIG4yMSAqIG4zMgorICAgICAgICAgICAgICAg
ICAgICAgKyBuMTIgKiBuMjEgKiBuMzQKKyAgICAgICAgICAgICAgICAgICAgICsgbjE0ICogbjIy
ICogbjMxCisgICAgICAgICAgICAgICAgICAgICAtIG4xMiAqIG4yNCAqIG4zMQorICAgICAgICAg
ICAgICAgICkgKworICAgICAgICAgICAgICAgIG40NCAqICgKKyAgICAgICAgICAgICAgICAgICAg
LSBuMTMgKiBuMjIgKiBuMzEKKyAgICAgICAgICAgICAgICAgICAgIC0gbjExICogbjIzICogbjMy
CisgICAgICAgICAgICAgICAgICAgICArIG4xMSAqIG4yMiAqIG4zMworICAgICAgICAgICAgICAg
ICAgICAgKyBuMTMgKiBuMjEgKiBuMzIKKyAgICAgICAgICAgICAgICAgICAgIC0gbjEyICogbjIx
ICogbjMzCisgICAgICAgICAgICAgICAgICAgICArIG4xMiAqIG4yMyAqIG4zMQorICAgICAgICAg
ICAgICAgICkKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICApOwogCiAg
ICAgICAgIH0sCiAKLSAgICAgICAgY2VpbDogZnVuY3Rpb24gKCkgewotCi0gICAgICAgICAgICB0
aGlzLnggPSBNYXRoLmNlaWwoIHRoaXMueCApOwotICAgICAgICAgICAgdGhpcy55ID0gTWF0aC5j
ZWlsKCB0aGlzLnkgKTsKLSAgICAgICAgICAgIHRoaXMueiA9IE1hdGguY2VpbCggdGhpcy56ICk7
Ci0gICAgICAgICAgICB0aGlzLncgPSBNYXRoLmNlaWwoIHRoaXMudyApOwotCi0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICAgICAgdHJhbnNwb3NlOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAg
ICAgfSwKKyAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7CisgICAgICAgICAgICB2
YXIgdG1wOwogCi0gICAgICAgIHJvdW5kOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0bXAg
PSB0ZVsgMSBdOyB0ZVsgMSBdID0gdGVbIDQgXTsgdGVbIDQgXSA9IHRtcDsKKyAgICAgICAgICAg
IHRtcCA9IHRlWyAyIF07IHRlWyAyIF0gPSB0ZVsgOCBdOyB0ZVsgOCBdID0gdG1wOworICAgICAg
ICAgICAgdG1wID0gdGVbIDYgXTsgdGVbIDYgXSA9IHRlWyA5IF07IHRlWyA5IF0gPSB0bXA7CiAK
LSAgICAgICAgICAgIHRoaXMueCA9IE1hdGgucm91bmQoIHRoaXMueCApOwotICAgICAgICAgICAg
dGhpcy55ID0gTWF0aC5yb3VuZCggdGhpcy55ICk7Ci0gICAgICAgICAgICB0aGlzLnogPSBNYXRo
LnJvdW5kKCB0aGlzLnogKTsKLSAgICAgICAgICAgIHRoaXMudyA9IE1hdGgucm91bmQoIHRoaXMu
dyApOworICAgICAgICAgICAgdG1wID0gdGVbIDMgXTsgdGVbIDMgXSA9IHRlWyAxMiBdOyB0ZVsg
MTIgXSA9IHRtcDsKKyAgICAgICAgICAgIHRtcCA9IHRlWyA3IF07IHRlWyA3IF0gPSB0ZVsgMTMg
XTsgdGVbIDEzIF0gPSB0bXA7CisgICAgICAgICAgICB0bXAgPSB0ZVsgMTEgXTsgdGVbIDExIF0g
PSB0ZVsgMTQgXTsgdGVbIDE0IF0gPSB0bXA7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwog
CiAgICAgICAgIH0sCiAKLSAgICAgICAgcm91bmRUb1plcm86IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgc2V0UG9zaXRpb246IGZ1bmN0aW9uICggeCwgeSwgeiApIHsKIAotICAgICAgICAgICAgdGhp
cy54ID0gKCB0aGlzLnggPCAwICkgPyBNYXRoLmNlaWwoIHRoaXMueCApIDogTWF0aC5mbG9vcigg
dGhpcy54ICk7Ci0gICAgICAgICAgICB0aGlzLnkgPSAoIHRoaXMueSA8IDAgKSA/IE1hdGguY2Vp
bCggdGhpcy55ICkgOiBNYXRoLmZsb29yKCB0aGlzLnkgKTsKLSAgICAgICAgICAgIHRoaXMueiA9
ICggdGhpcy56IDwgMCApID8gTWF0aC5jZWlsKCB0aGlzLnogKSA6IE1hdGguZmxvb3IoIHRoaXMu
eiApOwotICAgICAgICAgICAgdGhpcy53ID0gKCB0aGlzLncgPCAwICkgPyBNYXRoLmNlaWwoIHRo
aXMudyApIDogTWF0aC5mbG9vciggdGhpcy53ICk7CisgICAgICAgICAgICB2YXIgdGUgPSB0aGlz
LmVsZW1lbnRzOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIGlmICgg
eC5pc1ZlY3RvcjMgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB0ZVsgMTIgXSA9
IHgueDsKKyAgICAgICAgICAgICAgICB0ZVsgMTMgXSA9IHgueTsKKyAgICAgICAgICAgICAgICB0
ZVsgMTQgXSA9IHguejsKIAotICAgICAgICBuZWdhdGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgIHRoaXMueCA9IC0gdGhpcy54OwotICAgICAgICAg
ICAgdGhpcy55ID0gLSB0aGlzLnk7Ci0gICAgICAgICAgICB0aGlzLnogPSAtIHRoaXMuejsKLSAg
ICAgICAgICAgIHRoaXMudyA9IC0gdGhpcy53OworICAgICAgICAgICAgICAgIHRlWyAxMiBdID0g
eDsKKyAgICAgICAgICAgICAgICB0ZVsgMTMgXSA9IHk7CisgICAgICAgICAgICAgICAgdGVbIDE0
IF0gPSB6OworCisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAg
ICAgICAgIH0sCiAKLSAgICAgICAgZG90OiBmdW5jdGlvbiAoIHYgKSB7Ci0KLSAgICAgICAgICAg
IHJldHVybiB0aGlzLnggKiB2LnggKyB0aGlzLnkgKiB2LnkgKyB0aGlzLnogKiB2LnogKyB0aGlz
LncgKiB2Lnc7CisgICAgICAgIGdldEludmVyc2U6IGZ1bmN0aW9uICggbSwgdGhyb3dPbkRlZ2Vu
ZXJhdGUgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIC8vIGJhc2VkIG9uIGh0dHA6Ly93
d3cuZXVjbGlkZWFuc3BhY2UuY29tL21hdGhzL2FsZ2VicmEvbWF0cml4L2Z1bmN0aW9ucy9pbnZl
cnNlL2ZvdXJEL2luZGV4Lmh0bQorICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50cywK
KyAgICAgICAgICAgICAgICBtZSA9IG0uZWxlbWVudHMsCiAKLSAgICAgICAgbGVuZ3RoU3E6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBuMTEgPSBtZVsgMCBdLCBuMjEgPSBtZVsgMSBd
LCBuMzEgPSBtZVsgMiBdLCBuNDEgPSBtZVsgMyBdLAorICAgICAgICAgICAgICAgIG4xMiA9IG1l
WyA0IF0sIG4yMiA9IG1lWyA1IF0sIG4zMiA9IG1lWyA2IF0sIG40MiA9IG1lWyA3IF0sCisgICAg
ICAgICAgICAgICAgbjEzID0gbWVbIDggXSwgbjIzID0gbWVbIDkgXSwgbjMzID0gbWVbIDEwIF0s
IG40MyA9IG1lWyAxMSBdLAorICAgICAgICAgICAgICAgIG4xNCA9IG1lWyAxMiBdLCBuMjQgPSBt
ZVsgMTMgXSwgbjM0ID0gbWVbIDE0IF0sIG40NCA9IG1lWyAxNSBdLAogCi0gICAgICAgICAgICBy
ZXR1cm4gdGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICsgdGhpcy56ICogdGhpcy56
ICsgdGhpcy53ICogdGhpcy53OworICAgICAgICAgICAgICAgIHQxMSA9IG4yMyAqIG4zNCAqIG40
MiAtIG4yNCAqIG4zMyAqIG40MiArIG4yNCAqIG4zMiAqIG40MyAtIG4yMiAqIG4zNCAqIG40MyAt
IG4yMyAqIG4zMiAqIG40NCArIG4yMiAqIG4zMyAqIG40NCwKKyAgICAgICAgICAgICAgICB0MTIg
PSBuMTQgKiBuMzMgKiBuNDIgLSBuMTMgKiBuMzQgKiBuNDIgLSBuMTQgKiBuMzIgKiBuNDMgKyBu
MTIgKiBuMzQgKiBuNDMgKyBuMTMgKiBuMzIgKiBuNDQgLSBuMTIgKiBuMzMgKiBuNDQsCisgICAg
ICAgICAgICAgICAgdDEzID0gbjEzICogbjI0ICogbjQyIC0gbjE0ICogbjIzICogbjQyICsgbjE0
ICogbjIyICogbjQzIC0gbjEyICogbjI0ICogbjQzIC0gbjEzICogbjIyICogbjQ0ICsgbjEyICog
bjIzICogbjQ0LAorICAgICAgICAgICAgICAgIHQxNCA9IG4xNCAqIG4yMyAqIG4zMiAtIG4xMyAq
IG4yNCAqIG4zMiAtIG4xNCAqIG4yMiAqIG4zMyArIG4xMiAqIG4yNCAqIG4zMyArIG4xMyAqIG4y
MiAqIG4zNCAtIG4xMiAqIG4yMyAqIG4zNDsKIAotICAgICAgICB9LAorICAgICAgICAgICAgdmFy
IGRldCA9IG4xMSAqIHQxMSArIG4yMSAqIHQxMiArIG4zMSAqIHQxMyArIG40MSAqIHQxNDsKIAot
ICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICggZGV0ID09PSAw
ICkgewogCi0gICAgICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0
aGlzLnkgKiB0aGlzLnkgKyB0aGlzLnogKiB0aGlzLnogKyB0aGlzLncgKiB0aGlzLncgKTsKKyAg
ICAgICAgICAgICAgICB2YXIgbXNnID0gIlRIUkVFLk1hdHJpeDQ6IC5nZXRJbnZlcnNlKCkgY2Fu
J3QgaW52ZXJ0IG1hdHJpeCwgZGV0ZXJtaW5hbnQgaXMgMCI7CiAKLSAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICBpZiAoIHRocm93T25EZWdlbmVyYXRlID09PSB0cnVlICkgewogCi0gICAgICAg
IG1hbmhhdHRhbkxlbmd0aDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIG1zZyApOwogCi0gICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMoIHRoaXMu
eCApICsgTWF0aC5hYnMoIHRoaXMueSApICsgTWF0aC5hYnMoIHRoaXMueiApICsgTWF0aC5hYnMo
IHRoaXMudyApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCBtc2cgKTsKIAotICAgICAgICBub3JtYWxpemU6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiB0
aGlzLmRpdmlkZVNjYWxhciggdGhpcy5sZW5ndGgoKSB8fCAxICk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuaWRlbnRpdHkoKTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgfQogCi0g
ICAgICAgIHNldExlbmd0aDogZnVuY3Rpb24gKCBsZW5ndGggKSB7CisgICAgICAgICAgICB2YXIg
ZGV0SW52ID0gMSAvIGRldDsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplKCku
bXVsdGlwbHlTY2FsYXIoIGxlbmd0aCApOworICAgICAgICAgICAgdGVbIDAgXSA9IHQxMSAqIGRl
dEludjsKKyAgICAgICAgICAgIHRlWyAxIF0gPSAoIG4yNCAqIG4zMyAqIG40MSAtIG4yMyAqIG4z
NCAqIG40MSAtIG4yNCAqIG4zMSAqIG40MyArIG4yMSAqIG4zNCAqIG40MyArIG4yMyAqIG4zMSAq
IG40NCAtIG4yMSAqIG4zMyAqIG40NCApICogZGV0SW52OworICAgICAgICAgICAgdGVbIDIgXSA9
ICggbjIyICogbjM0ICogbjQxIC0gbjI0ICogbjMyICogbjQxICsgbjI0ICogbjMxICogbjQyIC0g
bjIxICogbjM0ICogbjQyIC0gbjIyICogbjMxICogbjQ0ICsgbjIxICogbjMyICogbjQ0ICkgKiBk
ZXRJbnY7CisgICAgICAgICAgICB0ZVsgMyBdID0gKCBuMjMgKiBuMzIgKiBuNDEgLSBuMjIgKiBu
MzMgKiBuNDEgLSBuMjMgKiBuMzEgKiBuNDIgKyBuMjEgKiBuMzMgKiBuNDIgKyBuMjIgKiBuMzEg
KiBuNDMgLSBuMjEgKiBuMzIgKiBuNDMgKSAqIGRldEludjsKIAotICAgICAgICB9LAorICAgICAg
ICAgICAgdGVbIDQgXSA9IHQxMiAqIGRldEludjsKKyAgICAgICAgICAgIHRlWyA1IF0gPSAoIG4x
MyAqIG4zNCAqIG40MSAtIG4xNCAqIG4zMyAqIG40MSArIG4xNCAqIG4zMSAqIG40MyAtIG4xMSAq
IG4zNCAqIG40MyAtIG4xMyAqIG4zMSAqIG40NCArIG4xMSAqIG4zMyAqIG40NCApICogZGV0SW52
OworICAgICAgICAgICAgdGVbIDYgXSA9ICggbjE0ICogbjMyICogbjQxIC0gbjEyICogbjM0ICog
bjQxIC0gbjE0ICogbjMxICogbjQyICsgbjExICogbjM0ICogbjQyICsgbjEyICogbjMxICogbjQ0
IC0gbjExICogbjMyICogbjQ0ICkgKiBkZXRJbnY7CisgICAgICAgICAgICB0ZVsgNyBdID0gKCBu
MTIgKiBuMzMgKiBuNDEgLSBuMTMgKiBuMzIgKiBuNDEgKyBuMTMgKiBuMzEgKiBuNDIgLSBuMTEg
KiBuMzMgKiBuNDIgLSBuMTIgKiBuMzEgKiBuNDMgKyBuMTEgKiBuMzIgKiBuNDMgKSAqIGRldElu
djsKIAotICAgICAgICBsZXJwOiBmdW5jdGlvbiAoIHYsIGFscGhhICkgeworICAgICAgICAgICAg
dGVbIDggXSA9IHQxMyAqIGRldEludjsKKyAgICAgICAgICAgIHRlWyA5IF0gPSAoIG4xNCAqIG4y
MyAqIG40MSAtIG4xMyAqIG4yNCAqIG40MSAtIG4xNCAqIG4yMSAqIG40MyArIG4xMSAqIG4yNCAq
IG40MyArIG4xMyAqIG4yMSAqIG40NCAtIG4xMSAqIG4yMyAqIG40NCApICogZGV0SW52OworICAg
ICAgICAgICAgdGVbIDEwIF0gPSAoIG4xMiAqIG4yNCAqIG40MSAtIG4xNCAqIG4yMiAqIG40MSAr
IG4xNCAqIG4yMSAqIG40MiAtIG4xMSAqIG4yNCAqIG40MiAtIG4xMiAqIG4yMSAqIG40NCArIG4x
MSAqIG4yMiAqIG40NCApICogZGV0SW52OworICAgICAgICAgICAgdGVbIDExIF0gPSAoIG4xMyAq
IG4yMiAqIG40MSAtIG4xMiAqIG4yMyAqIG40MSAtIG4xMyAqIG4yMSAqIG40MiArIG4xMSAqIG4y
MyAqIG40MiArIG4xMiAqIG4yMSAqIG40MyAtIG4xMSAqIG4yMiAqIG40MyApICogZGV0SW52Owog
Ci0gICAgICAgICAgICB0aGlzLnggKz0gKCB2LnggLSB0aGlzLnggKSAqIGFscGhhOwotICAgICAg
ICAgICAgdGhpcy55ICs9ICggdi55IC0gdGhpcy55ICkgKiBhbHBoYTsKLSAgICAgICAgICAgIHRo
aXMueiArPSAoIHYueiAtIHRoaXMueiApICogYWxwaGE7Ci0gICAgICAgICAgICB0aGlzLncgKz0g
KCB2LncgLSB0aGlzLncgKSAqIGFscGhhOworICAgICAgICAgICAgdGVbIDEyIF0gPSB0MTQgKiBk
ZXRJbnY7CisgICAgICAgICAgICB0ZVsgMTMgXSA9ICggbjEzICogbjI0ICogbjMxIC0gbjE0ICog
bjIzICogbjMxICsgbjE0ICogbjIxICogbjMzIC0gbjExICogbjI0ICogbjMzIC0gbjEzICogbjIx
ICogbjM0ICsgbjExICogbjIzICogbjM0ICkgKiBkZXRJbnY7CisgICAgICAgICAgICB0ZVsgMTQg
XSA9ICggbjE0ICogbjIyICogbjMxIC0gbjEyICogbjI0ICogbjMxIC0gbjE0ICogbjIxICogbjMy
ICsgbjExICogbjI0ICogbjMyICsgbjEyICogbjIxICogbjM0IC0gbjExICogbjIyICogbjM0ICkg
KiBkZXRJbnY7CisgICAgICAgICAgICB0ZVsgMTUgXSA9ICggbjEyICogbjIzICogbjMxIC0gbjEz
ICogbjIyICogbjMxICsgbjEzICogbjIxICogbjMyIC0gbjExICogbjIzICogbjMyIC0gbjEyICog
bjIxICogbjMzICsgbjExICogbjIyICogbjMzICkgKiBkZXRJbnY7CiAKICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgbGVycFZlY3RvcnM6IGZ1bmN0aW9u
ICggdjEsIHYyLCBhbHBoYSApIHsKLQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ViVmVjdG9y
cyggdjIsIHYxICkubXVsdGlwbHlTY2FsYXIoIGFscGhhICkuYWRkKCB2MSApOworICAgICAgICBz
Y2FsZTogZnVuY3Rpb24gKCB2ICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICB2YXIgdGUg
PSB0aGlzLmVsZW1lbnRzOworICAgICAgICAgICAgdmFyIHggPSB2LngsIHkgPSB2LnksIHogPSB2
Lno7CiAKLSAgICAgICAgZXF1YWxzOiBmdW5jdGlvbiAoIHYgKSB7CisgICAgICAgICAgICB0ZVsg
MCBdICo9IHg7IHRlWyA0IF0gKj0geTsgdGVbIDggXSAqPSB6OworICAgICAgICAgICAgdGVbIDEg
XSAqPSB4OyB0ZVsgNSBdICo9IHk7IHRlWyA5IF0gKj0gejsKKyAgICAgICAgICAgIHRlWyAyIF0g
Kj0geDsgdGVbIDYgXSAqPSB5OyB0ZVsgMTAgXSAqPSB6OworICAgICAgICAgICAgdGVbIDMgXSAq
PSB4OyB0ZVsgNyBdICo9IHk7IHRlWyAxMSBdICo9IHo7CiAKLSAgICAgICAgICAgIHJldHVybiAo
ICggdi54ID09PSB0aGlzLnggKSAmJiAoIHYueSA9PT0gdGhpcy55ICkgJiYgKCB2LnogPT09IHRo
aXMueiApICYmICggdi53ID09PSB0aGlzLncgKSApOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAKICAgICAgICAgfSwKIAotICAgICAgICBmcm9tQXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9m
ZnNldCApIHsKKyAgICAgICAgZ2V0TWF4U2NhbGVPbkF4aXM6IGZ1bmN0aW9uICgpIHsKIAotICAg
ICAgICAgICAgaWYgKCBvZmZzZXQgPT09IHVuZGVmaW5lZCApIG9mZnNldCA9IDA7CisgICAgICAg
ICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzOwogCi0gICAgICAgICAgICB0aGlzLnggPSBhcnJh
eVsgb2Zmc2V0IF07Ci0gICAgICAgICAgICB0aGlzLnkgPSBhcnJheVsgb2Zmc2V0ICsgMSBdOwot
ICAgICAgICAgICAgdGhpcy56ID0gYXJyYXlbIG9mZnNldCArIDIgXTsKLSAgICAgICAgICAgIHRo
aXMudyA9IGFycmF5WyBvZmZzZXQgKyAzIF07CisgICAgICAgICAgICB2YXIgc2NhbGVYU3EgPSB0
ZVsgMCBdICogdGVbIDAgXSArIHRlWyAxIF0gKiB0ZVsgMSBdICsgdGVbIDIgXSAqIHRlWyAyIF07
CisgICAgICAgICAgICB2YXIgc2NhbGVZU3EgPSB0ZVsgNCBdICogdGVbIDQgXSArIHRlWyA1IF0g
KiB0ZVsgNSBdICsgdGVbIDYgXSAqIHRlWyA2IF07CisgICAgICAgICAgICB2YXIgc2NhbGVaU3Eg
PSB0ZVsgOCBdICogdGVbIDggXSArIHRlWyA5IF0gKiB0ZVsgOSBdICsgdGVbIDEwIF0gKiB0ZVsg
MTAgXTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICByZXR1cm4gTWF0
aC5zcXJ0KCBNYXRoLm1heCggc2NhbGVYU3EsIHNjYWxlWVNxLCBzY2FsZVpTcSApICk7CiAKICAg
ICAgICAgfSwKIAotICAgICAgICB0b0FycmF5OiBmdW5jdGlvbiAoIGFycmF5LCBvZmZzZXQgKSB7
CisgICAgICAgIG1ha2VUcmFuc2xhdGlvbjogZnVuY3Rpb24gKCB4LCB5LCB6ICkgewogCi0gICAg
ICAgICAgICBpZiAoIGFycmF5ID09PSB1bmRlZmluZWQgKSBhcnJheSA9IFtdOwotICAgICAgICAg
ICAgaWYgKCBvZmZzZXQgPT09IHVuZGVmaW5lZCApIG9mZnNldCA9IDA7CisgICAgICAgICAgICB0
aGlzLnNldCgKIAotICAgICAgICAgICAgYXJyYXlbIG9mZnNldCBdID0gdGhpcy54OwotICAgICAg
ICAgICAgYXJyYXlbIG9mZnNldCArIDEgXSA9IHRoaXMueTsKLSAgICAgICAgICAgIGFycmF5WyBv
ZmZzZXQgKyAyIF0gPSB0aGlzLno7Ci0gICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMyBdID0g
dGhpcy53OworICAgICAgICAgICAgICAgIDEsIDAsIDAsIHgsCisgICAgICAgICAgICAgICAgMCwg
MSwgMCwgeSwKKyAgICAgICAgICAgICAgICAwLCAwLCAxLCB6LAorICAgICAgICAgICAgICAgIDAs
IDAsIDAsIDEKIAotICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICAgICAgKTsKKwor
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBmcm9tQnVm
ZmVyQXR0cmlidXRlOiBmdW5jdGlvbiAoIGF0dHJpYnV0ZSwgaW5kZXgsIG9mZnNldCApIHsKKyAg
ICAgICAgbWFrZVJvdGF0aW9uWDogZnVuY3Rpb24gKCB0aGV0YSApIHsKIAotICAgICAgICAgICAg
aWYgKCBvZmZzZXQgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHZhciBjID0gTWF0aC5j
b3MoIHRoZXRhICksIHMgPSBNYXRoLnNpbiggdGhldGEgKTsKIAotICAgICAgICAgICAgICAgIGNv
bnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjQ6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20g
LmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4nICk7CisgICAgICAgICAgICB0aGlzLnNldCgKIAotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIDEsIDAsIDAsIDAsCisgICAgICAgICAgICAgICAg
MCwgYywgLSBzLCAwLAorICAgICAgICAgICAgICAgIDAsIHMsIGMsIDAsCisgICAgICAgICAgICAg
ICAgMCwgMCwgMCwgMQogCi0gICAgICAgICAgICB0aGlzLnggPSBhdHRyaWJ1dGUuZ2V0WCggaW5k
ZXggKTsKLSAgICAgICAgICAgIHRoaXMueSA9IGF0dHJpYnV0ZS5nZXRZKCBpbmRleCApOwotICAg
ICAgICAgICAgdGhpcy56ID0gYXR0cmlidXRlLmdldFooIGluZGV4ICk7Ci0gICAgICAgICAgICB0
aGlzLncgPSBhdHRyaWJ1dGUuZ2V0VyggaW5kZXggKTsKKyAgICAgICAgICAgICk7CiAKICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIH0KKyAgICAgICAgfSwKIAotICAgIH0gKTsK
KyAgICAgICAgbWFrZVJvdGF0aW9uWTogZnVuY3Rpb24gKCB0aGV0YSApIHsKIAotICAgIC8qKgot
ICAgICAqIEBhdXRob3Igc3ppbWVrIC8gaHR0cHM6Ly9naXRodWIuY29tL3N6aW1lay8KLSAgICAg
KiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAgICAqIEBh
dXRob3IgTWFyaXVzIEtpbnRlbCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9raW50ZWwKLSAgICAgKi8K
KyAgICAgICAgICAgIHZhciBjID0gTWF0aC5jb3MoIHRoZXRhICksIHMgPSBNYXRoLnNpbiggdGhl
dGEgKTsKIAotICAgIC8qCi0gICAgIEluIG9wdGlvbnMsIHdlIGNhbiBzcGVjaWZ5OgotICAgICAq
IFRleHR1cmUgcGFyYW1ldGVycyBmb3IgYW4gYXV0by1nZW5lcmF0ZWQgdGFyZ2V0IHRleHR1cmUK
LSAgICAgKiBkZXB0aEJ1ZmZlci9zdGVuY2lsQnVmZmVyOiBCb29sZWFucyB0byBpbmRpY2F0ZSBp
ZiB3ZSBzaG91bGQgZ2VuZXJhdGUgdGhlc2UgYnVmZmVycwotICAgICovCi0gICAgZnVuY3Rpb24g
V2ViR0xSZW5kZXJUYXJnZXQoIHdpZHRoLCBoZWlnaHQsIG9wdGlvbnMgKSB7CisgICAgICAgICAg
ICB0aGlzLnNldCgKIAotICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgICAgIHRoaXMu
aGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgICAgICBjLCAwLCBzLCAwLAorICAgICAgICAg
ICAgICAgICAwLCAxLCAwLCAwLAorICAgICAgICAgICAgICAgIC0gcywgMCwgYywgMCwKKyAgICAg
ICAgICAgICAgICAgMCwgMCwgMCwgMQogCi0gICAgICAgIHRoaXMuc2Npc3NvciA9IG5ldyBWZWN0
b3I0KCAwLCAwLCB3aWR0aCwgaGVpZ2h0ICk7Ci0gICAgICAgIHRoaXMuc2Npc3NvclRlc3QgPSBm
YWxzZTsKKyAgICAgICAgICAgICk7CiAKLSAgICAgICAgdGhpcy52aWV3cG9ydCA9IG5ldyBWZWN0
b3I0KCAwLCAwLCB3aWR0aCwgaGVpZ2h0ICk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAot
ICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKyAgICAgICAgfSwKIAotICAgICAgICBp
ZiAoIG9wdGlvbnMubWluRmlsdGVyID09PSB1bmRlZmluZWQgKSBvcHRpb25zLm1pbkZpbHRlciA9
IExpbmVhckZpbHRlcjsKKyAgICAgICAgbWFrZVJvdGF0aW9uWjogZnVuY3Rpb24gKCB0aGV0YSAp
IHsKIAotICAgICAgICB0aGlzLnRleHR1cmUgPSBuZXcgVGV4dHVyZSggdW5kZWZpbmVkLCB1bmRl
ZmluZWQsIG9wdGlvbnMud3JhcFMsIG9wdGlvbnMud3JhcFQsIG9wdGlvbnMubWFnRmlsdGVyLCBv
cHRpb25zLm1pbkZpbHRlciwgb3B0aW9ucy5mb3JtYXQsIG9wdGlvbnMudHlwZSwgb3B0aW9ucy5h
bmlzb3Ryb3B5LCBvcHRpb25zLmVuY29kaW5nICk7CisgICAgICAgICAgICB2YXIgYyA9IE1hdGgu
Y29zKCB0aGV0YSApLCBzID0gTWF0aC5zaW4oIHRoZXRhICk7CiAKLSAgICAgICAgdGhpcy50ZXh0
dXJlLmdlbmVyYXRlTWlwbWFwcyA9IG9wdGlvbnMuZ2VuZXJhdGVNaXBtYXBzICE9PSB1bmRlZmlu
ZWQgPyBvcHRpb25zLmdlbmVyYXRlTWlwbWFwcyA6IHRydWU7CisgICAgICAgICAgICB0aGlzLnNl
dCgKIAotICAgICAgICB0aGlzLmRlcHRoQnVmZmVyID0gb3B0aW9ucy5kZXB0aEJ1ZmZlciAhPT0g
dW5kZWZpbmVkID8gb3B0aW9ucy5kZXB0aEJ1ZmZlciA6IHRydWU7Ci0gICAgICAgIHRoaXMuc3Rl
bmNpbEJ1ZmZlciA9IG9wdGlvbnMuc3RlbmNpbEJ1ZmZlciAhPT0gdW5kZWZpbmVkID8gb3B0aW9u
cy5zdGVuY2lsQnVmZmVyIDogdHJ1ZTsKLSAgICAgICAgdGhpcy5kZXB0aFRleHR1cmUgPSBvcHRp
b25zLmRlcHRoVGV4dHVyZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5kZXB0aFRleHR1cmUgOiBu
dWxsOworICAgICAgICAgICAgICAgIGMsIC0gcywgMCwgMCwKKyAgICAgICAgICAgICAgICBzLCBj
LCAwLCAwLAorICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICAgICAgMCwg
MCwgMCwgMQogCi0gICAgfQorICAgICAgICAgICAgKTsKIAotICAgIFdlYkdMUmVuZGVyVGFyZ2V0
LnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIEV2ZW50RGlzcGF0Y2hl
ci5wcm90b3R5cGUgKSwgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgY29u
c3RydWN0b3I6IFdlYkdMUmVuZGVyVGFyZ2V0LAorICAgICAgICB9LAogCi0gICAgICAgIGlzV2Vi
R0xSZW5kZXJUYXJnZXQ6IHRydWUsCisgICAgICAgIG1ha2VSb3RhdGlvbkF4aXM6IGZ1bmN0aW9u
ICggYXhpcywgYW5nbGUgKSB7CiAKLSAgICAgICAgc2V0U2l6ZTogZnVuY3Rpb24gKCB3aWR0aCwg
aGVpZ2h0ICkgeworICAgICAgICAgICAgLy8gQmFzZWQgb24gaHR0cDovL3d3dy5nYW1lZGV2Lm5l
dC9yZWZlcmVuY2UvYXJ0aWNsZXMvYXJ0aWNsZTExOTkuYXNwCiAKLSAgICAgICAgICAgIGlmICgg
dGhpcy53aWR0aCAhPT0gd2lkdGggfHwgdGhpcy5oZWlnaHQgIT09IGhlaWdodCApIHsKKyAgICAg
ICAgICAgIHZhciBjID0gTWF0aC5jb3MoIGFuZ2xlICk7CisgICAgICAgICAgICB2YXIgcyA9IE1h
dGguc2luKCBhbmdsZSApOworICAgICAgICAgICAgdmFyIHQgPSAxIC0gYzsKKyAgICAgICAgICAg
IHZhciB4ID0gYXhpcy54LCB5ID0gYXhpcy55LCB6ID0gYXhpcy56OworICAgICAgICAgICAgdmFy
IHR4ID0gdCAqIHgsIHR5ID0gdCAqIHk7CiAKLSAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0g
d2lkdGg7Ci0gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAg
ICB0aGlzLnNldCgKIAotICAgICAgICAgICAgICAgIHRoaXMuZGlzcG9zZSgpOworICAgICAgICAg
ICAgICAgIHR4ICogeCArIGMsIHR4ICogeSAtIHMgKiB6LCB0eCAqIHogKyBzICogeSwgMCwKKyAg
ICAgICAgICAgICAgICB0eCAqIHkgKyBzICogeiwgdHkgKiB5ICsgYywgdHkgKiB6IC0gcyAqIHgs
IDAsCisgICAgICAgICAgICAgICAgdHggKiB6IC0gcyAqIHksIHR5ICogeiArIHMgKiB4LCB0ICog
eiAqIHogKyBjLCAwLAorICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEKIAotICAgICAgICAgICAg
fQorICAgICAgICAgICAgKTsKIAotICAgICAgICAgICAgdGhpcy52aWV3cG9ydC5zZXQoIDAsIDAs
IHdpZHRoLCBoZWlnaHQgKTsKLSAgICAgICAgICAgIHRoaXMuc2Npc3Nvci5zZXQoIDAsIDAsIHdp
ZHRoLCBoZWlnaHQgKTsKKyAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAog
Ci0gICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIG1ha2VTY2FsZTogZnVuY3Rp
b24gKCB4LCB5LCB6ICkgewogCi0gICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0
b3IoKS5jb3B5KCB0aGlzICk7CisgICAgICAgICAgICB0aGlzLnNldCgKIAotICAgICAgICB9LAor
ICAgICAgICAgICAgICAgIHgsIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgMCwgeSwgMCwgMCwK
KyAgICAgICAgICAgICAgICAwLCAwLCB6LCAwLAorICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEK
IAotICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHNvdXJjZSApIHsKKyAgICAgICAgICAgICk7CiAK
LSAgICAgICAgICAgIHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7Ci0gICAgICAgICAgICB0aGlz
LmhlaWdodCA9IHNvdXJjZS5oZWlnaHQ7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAg
ICAgICAgICAgdGhpcy52aWV3cG9ydC5jb3B5KCBzb3VyY2Uudmlld3BvcnQgKTsKKyAgICAgICAg
fSwKIAotICAgICAgICAgICAgdGhpcy50ZXh0dXJlID0gc291cmNlLnRleHR1cmUuY2xvbmUoKTsK
KyAgICAgICAgbWFrZVNoZWFyOiBmdW5jdGlvbiAoIHgsIHksIHogKSB7CiAKLSAgICAgICAgICAg
IHRoaXMuZGVwdGhCdWZmZXIgPSBzb3VyY2UuZGVwdGhCdWZmZXI7Ci0gICAgICAgICAgICB0aGlz
LnN0ZW5jaWxCdWZmZXIgPSBzb3VyY2Uuc3RlbmNpbEJ1ZmZlcjsKLSAgICAgICAgICAgIHRoaXMu
ZGVwdGhUZXh0dXJlID0gc291cmNlLmRlcHRoVGV4dHVyZTsKKyAgICAgICAgICAgIHRoaXMuc2V0
KAorCisgICAgICAgICAgICAgICAgMSwgeSwgeiwgMCwKKyAgICAgICAgICAgICAgICB4LCAxLCB6
LCAwLAorICAgICAgICAgICAgICAgIHgsIHksIDEsIDAsCisgICAgICAgICAgICAgICAgMCwgMCwg
MCwgMQorCisgICAgICAgICAgICApOwogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAg
ICAgICB9LAogCi0gICAgICAgIGRpc3Bvc2U6IGZ1bmN0aW9uICgpIHsKLQotICAgICAgICAgICAg
dGhpcy5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdkaXNwb3NlJyB9ICk7CisgICAgICAgIGNvbXBv
c2U6IGZ1bmN0aW9uICggcG9zaXRpb24sIHF1YXRlcm5pb24sIHNjYWxlICkgewogCi0gICAgICAg
IH0KKyAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7CiAKLSAgICB9ICk7CisgICAg
ICAgICAgICB2YXIgeCA9IHF1YXRlcm5pb24uX3gsIHkgPSBxdWF0ZXJuaW9uLl95LCB6ID0gcXVh
dGVybmlvbi5feiwgdyA9IHF1YXRlcm5pb24uX3c7CisgICAgICAgICAgICB2YXIgeDIgPSB4ICsg
eCwgeTIgPSB5ICsgeSwgejIgPSB6ICsgejsKKyAgICAgICAgICAgIHZhciB4eCA9IHggKiB4Miwg
eHkgPSB4ICogeTIsIHh6ID0geCAqIHoyOworICAgICAgICAgICAgdmFyIHl5ID0geSAqIHkyLCB5
eiA9IHkgKiB6MiwgenogPSB6ICogejI7CisgICAgICAgICAgICB2YXIgd3ggPSB3ICogeDIsIHd5
ID0gdyAqIHkyLCB3eiA9IHcgKiB6MjsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgYWx0ZXJl
ZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20KLSAgICAgKi8KKyAgICAgICAgICAgIHZhciBz
eCA9IHNjYWxlLngsIHN5ID0gc2NhbGUueSwgc3ogPSBzY2FsZS56OwogCi0gICAgZnVuY3Rpb24g
V2ViR0xSZW5kZXJUYXJnZXRDdWJlKCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zICkgeworICAgICAg
ICAgICAgdGVbIDAgXSA9ICggMSAtICggeXkgKyB6eiApICkgKiBzeDsKKyAgICAgICAgICAgIHRl
WyAxIF0gPSAoIHh5ICsgd3ogKSAqIHN4OworICAgICAgICAgICAgdGVbIDIgXSA9ICggeHogLSB3
eSApICogc3g7CisgICAgICAgICAgICB0ZVsgMyBdID0gMDsKIAotICAgICAgICBXZWJHTFJlbmRl
clRhcmdldC5jYWxsKCB0aGlzLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zICk7CisgICAgICAgICAg
ICB0ZVsgNCBdID0gKCB4eSAtIHd6ICkgKiBzeTsKKyAgICAgICAgICAgIHRlWyA1IF0gPSAoIDEg
LSAoIHh4ICsgenogKSApICogc3k7CisgICAgICAgICAgICB0ZVsgNiBdID0gKCB5eiArIHd4ICkg
KiBzeTsKKyAgICAgICAgICAgIHRlWyA3IF0gPSAwOwogCi0gICAgICAgIHRoaXMuYWN0aXZlQ3Vi
ZUZhY2UgPSAwOyAvLyBQWCAwLCBOWCAxLCBQWSAyLCBOWSAzLCBQWiA0LCBOWiA1Ci0gICAgICAg
IHRoaXMuYWN0aXZlTWlwTWFwTGV2ZWwgPSAwOworICAgICAgICAgICAgdGVbIDggXSA9ICggeHog
KyB3eSApICogc3o7CisgICAgICAgICAgICB0ZVsgOSBdID0gKCB5eiAtIHd4ICkgKiBzejsKKyAg
ICAgICAgICAgIHRlWyAxMCBdID0gKCAxIC0gKCB4eCArIHl5ICkgKSAqIHN6OworICAgICAgICAg
ICAgdGVbIDExIF0gPSAwOwogCi0gICAgfQorICAgICAgICAgICAgdGVbIDEyIF0gPSBwb3NpdGlv
bi54OworICAgICAgICAgICAgdGVbIDEzIF0gPSBwb3NpdGlvbi55OworICAgICAgICAgICAgdGVb
IDE0IF0gPSBwb3NpdGlvbi56OworICAgICAgICAgICAgdGVbIDE1IF0gPSAxOwogCi0gICAgV2Vi
R0xSZW5kZXJUYXJnZXRDdWJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFdlYkdMUmVuZGVy
VGFyZ2V0LnByb3RvdHlwZSApOwotICAgIFdlYkdMUmVuZGVyVGFyZ2V0Q3ViZS5wcm90b3R5cGUu
Y29uc3RydWN0b3IgPSBXZWJHTFJlbmRlclRhcmdldEN1YmU7CisgICAgICAgICAgICByZXR1cm4g
dGhpczsKIAotICAgIFdlYkdMUmVuZGVyVGFyZ2V0Q3ViZS5wcm90b3R5cGUuaXNXZWJHTFJlbmRl
clRhcmdldEN1YmUgPSB0cnVlOworICAgICAgICB9LAogCi0gICAgLyoqCi0gICAgICogQGF1dGhv
ciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KLSAgICAgKi8KKyAgICAgICAg
ZGVjb21wb3NlOiBmdW5jdGlvbiAoKSB7CiAKLSAgICBmdW5jdGlvbiBEYXRhVGV4dHVyZSggZGF0
YSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1h
Z0ZpbHRlciwgbWluRmlsdGVyLCBhbmlzb3Ryb3B5LCBlbmNvZGluZyApIHsKKyAgICAgICAgICAg
IHZhciB2ZWN0b3IgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdmFyIG1hdHJpeCA9IG5l
dyBNYXRyaXg0KCk7CiAKLSAgICAgICAgVGV4dHVyZS5jYWxsKCB0aGlzLCBudWxsLCBtYXBwaW5n
LCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNv
dHJvcHksIGVuY29kaW5nICk7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZGVjb21wb3Nl
KCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgc2NhbGUgKSB7CiAKLSAgICAgICAgdGhpcy5pbWFnZSA9
IHsgZGF0YTogZGF0YSwgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCB9OworICAgICAgICAg
ICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7CiAKLSAgICAgICAgdGhpcy5tYWdGaWx0ZXIg
PSBtYWdGaWx0ZXIgIT09IHVuZGVmaW5lZCA/IG1hZ0ZpbHRlciA6IE5lYXJlc3RGaWx0ZXI7Ci0g
ICAgICAgIHRoaXMubWluRmlsdGVyID0gbWluRmlsdGVyICE9PSB1bmRlZmluZWQgPyBtaW5GaWx0
ZXIgOiBOZWFyZXN0RmlsdGVyOworICAgICAgICAgICAgICAgIHZhciBzeCA9IHZlY3Rvci5zZXQo
IHRlWyAwIF0sIHRlWyAxIF0sIHRlWyAyIF0gKS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB2
YXIgc3kgPSB2ZWN0b3Iuc2V0KCB0ZVsgNCBdLCB0ZVsgNSBdLCB0ZVsgNiBdICkubGVuZ3RoKCk7
CisgICAgICAgICAgICAgICAgdmFyIHN6ID0gdmVjdG9yLnNldCggdGVbIDggXSwgdGVbIDkgXSwg
dGVbIDEwIF0gKS5sZW5ndGgoKTsKIAotICAgICAgICB0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IGZh
bHNlOwotICAgICAgICB0aGlzLmZsaXBZID0gZmFsc2U7Ci0gICAgICAgIHRoaXMudW5wYWNrQWxp
Z25tZW50ID0gMTsKLQotICAgIH0KKyAgICAgICAgICAgICAgICAvLyBpZiBkZXRlcm1pbmUgaXMg
bmVnYXRpdmUsIHdlIG5lZWQgdG8gaW52ZXJ0IG9uZSBzY2FsZQorICAgICAgICAgICAgICAgIHZh
ciBkZXQgPSB0aGlzLmRldGVybWluYW50KCk7CisgICAgICAgICAgICAgICAgaWYgKCBkZXQgPCAw
ICkgc3ggPSAtIHN4OwogCi0gICAgRGF0YVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0
ZSggVGV4dHVyZS5wcm90b3R5cGUgKTsKLSAgICBEYXRhVGV4dHVyZS5wcm90b3R5cGUuY29uc3Ry
dWN0b3IgPSBEYXRhVGV4dHVyZTsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbi54ID0gdGVbIDEy
IF07CisgICAgICAgICAgICAgICAgcG9zaXRpb24ueSA9IHRlWyAxMyBdOworICAgICAgICAgICAg
ICAgIHBvc2l0aW9uLnogPSB0ZVsgMTQgXTsKIAotICAgIERhdGFUZXh0dXJlLnByb3RvdHlwZS5p
c0RhdGFUZXh0dXJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAvLyBzY2FsZSB0aGUgcm90YXRp
b24gcGFydAorICAgICAgICAgICAgICAgIG1hdHJpeC5jb3B5KCB0aGlzICk7CiAKLSAgICAvKioK
LSAgICAgKiBAYXV0aG9yIGJob3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvCi0gICAgICogQGF1dGhv
ciBXZXN0TGFuZ2xleSAvIGh0dHA6Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5Ci0gICAgICovCisg
ICAgICAgICAgICAgICAgdmFyIGludlNYID0gMSAvIHN4OworICAgICAgICAgICAgICAgIHZhciBp
bnZTWSA9IDEgLyBzeTsKKyAgICAgICAgICAgICAgICB2YXIgaW52U1ogPSAxIC8gc3o7CiAKLSAg
ICBmdW5jdGlvbiBCb3gzKCBtaW4sIG1heCApIHsKKyAgICAgICAgICAgICAgICBtYXRyaXguZWxl
bWVudHNbIDAgXSAqPSBpbnZTWDsKKyAgICAgICAgICAgICAgICBtYXRyaXguZWxlbWVudHNbIDEg
XSAqPSBpbnZTWDsKKyAgICAgICAgICAgICAgICBtYXRyaXguZWxlbWVudHNbIDIgXSAqPSBpbnZT
WDsKIAotICAgICAgICB0aGlzLm1pbiA9ICggbWluICE9PSB1bmRlZmluZWQgKSA/IG1pbiA6IG5l
dyBWZWN0b3IzKCArIEluZmluaXR5LCArIEluZmluaXR5LCArIEluZmluaXR5ICk7Ci0gICAgICAg
IHRoaXMubWF4ID0gKCBtYXggIT09IHVuZGVmaW5lZCApID8gbWF4IDogbmV3IFZlY3RvcjMoIC0g
SW5maW5pdHksIC0gSW5maW5pdHksIC0gSW5maW5pdHkgKTsKKyAgICAgICAgICAgICAgICBtYXRy
aXguZWxlbWVudHNbIDQgXSAqPSBpbnZTWTsKKyAgICAgICAgICAgICAgICBtYXRyaXguZWxlbWVu
dHNbIDUgXSAqPSBpbnZTWTsKKyAgICAgICAgICAgICAgICBtYXRyaXguZWxlbWVudHNbIDYgXSAq
PSBpbnZTWTsKIAotICAgIH0KKyAgICAgICAgICAgICAgICBtYXRyaXguZWxlbWVudHNbIDggXSAq
PSBpbnZTWjsKKyAgICAgICAgICAgICAgICBtYXRyaXguZWxlbWVudHNbIDkgXSAqPSBpbnZTWjsK
KyAgICAgICAgICAgICAgICBtYXRyaXguZWxlbWVudHNbIDEwIF0gKj0gaW52U1o7CiAKLSAgICBP
YmplY3QuYXNzaWduKCBCb3gzLnByb3RvdHlwZSwgeworICAgICAgICAgICAgICAgIHF1YXRlcm5p
b24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KCBtYXRyaXggKTsKIAotICAgICAgICBpc0JveDM6IHRy
dWUsCisgICAgICAgICAgICAgICAgc2NhbGUueCA9IHN4OworICAgICAgICAgICAgICAgIHNjYWxl
LnkgPSBzeTsKKyAgICAgICAgICAgICAgICBzY2FsZS56ID0gc3o7CiAKLSAgICAgICAgc2V0OiBm
dW5jdGlvbiAoIG1pbiwgbWF4ICkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0g
ICAgICAgICAgICB0aGlzLm1pbi5jb3B5KCBtaW4gKTsKLSAgICAgICAgICAgIHRoaXMubWF4LmNv
cHkoIG1heCApOworICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgIH0oKSwKIAotICAgICAgICB9LAorICAgICAgICBtYWtlUGVyc3BlY3RpdmU6IGZ1bmN0
aW9uICggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSB7CiAKLSAgICAgICAg
c2V0RnJvbUFycmF5OiBmdW5jdGlvbiAoIGFycmF5ICkgeworICAgICAgICAgICAgaWYgKCBmYXIg
PT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgdmFyIG1pblggPSArIEluZmluaXR5Owot
ICAgICAgICAgICAgdmFyIG1pblkgPSArIEluZmluaXR5OwotICAgICAgICAgICAgdmFyIG1pblog
PSArIEluZmluaXR5OworICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdHJp
eDQ6IC5tYWtlUGVyc3BlY3RpdmUoKSBoYXMgYmVlbiByZWRlZmluZWQgYW5kIGhhcyBhIG5ldyBz
aWduYXR1cmUuIFBsZWFzZSBjaGVjayB0aGUgZG9jcy4nICk7CiAKLSAgICAgICAgICAgIHZhciBt
YXhYID0gLSBJbmZpbml0eTsKLSAgICAgICAgICAgIHZhciBtYXhZID0gLSBJbmZpbml0eTsKLSAg
ICAgICAgICAgIHZhciBtYXhaID0gLSBJbmZpbml0eTsKKyAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSArPSAzICkg
eworICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKKyAgICAgICAgICAgIHZhciB4
ID0gMiAqIG5lYXIgLyAoIHJpZ2h0IC0gbGVmdCApOworICAgICAgICAgICAgdmFyIHkgPSAyICog
bmVhciAvICggdG9wIC0gYm90dG9tICk7CiAKLSAgICAgICAgICAgICAgICB2YXIgeCA9IGFycmF5
WyBpIF07Ci0gICAgICAgICAgICAgICAgdmFyIHkgPSBhcnJheVsgaSArIDEgXTsKLSAgICAgICAg
ICAgICAgICB2YXIgeiA9IGFycmF5WyBpICsgMiBdOworICAgICAgICAgICAgdmFyIGEgPSAoIHJp
Z2h0ICsgbGVmdCApIC8gKCByaWdodCAtIGxlZnQgKTsKKyAgICAgICAgICAgIHZhciBiID0gKCB0
b3AgKyBib3R0b20gKSAvICggdG9wIC0gYm90dG9tICk7CisgICAgICAgICAgICB2YXIgYyA9IC0g
KCBmYXIgKyBuZWFyICkgLyAoIGZhciAtIG5lYXIgKTsKKyAgICAgICAgICAgIHZhciBkID0gLSAy
ICogZmFyICogbmVhciAvICggZmFyIC0gbmVhciApOwogCi0gICAgICAgICAgICAgICAgaWYgKCB4
IDwgbWluWCApIG1pblggPSB4OwotICAgICAgICAgICAgICAgIGlmICggeSA8IG1pblkgKSBtaW5Z
ID0geTsKLSAgICAgICAgICAgICAgICBpZiAoIHogPCBtaW5aICkgbWluWiA9IHo7CisgICAgICAg
ICAgICB0ZVsgMCBdID0geDsgICAgdGVbIDQgXSA9IDA7ICAgIHRlWyA4IF0gPSBhOyAgICB0ZVsg
MTIgXSA9IDA7CisgICAgICAgICAgICB0ZVsgMSBdID0gMDsgICAgdGVbIDUgXSA9IHk7ICAgIHRl
WyA5IF0gPSBiOyAgICB0ZVsgMTMgXSA9IDA7CisgICAgICAgICAgICB0ZVsgMiBdID0gMDsgICAg
dGVbIDYgXSA9IDA7ICAgIHRlWyAxMCBdID0gYzsgICB0ZVsgMTQgXSA9IGQ7CisgICAgICAgICAg
ICB0ZVsgMyBdID0gMDsgICAgdGVbIDcgXSA9IDA7ICAgIHRlWyAxMSBdID0gLSAxOyB0ZVsgMTUg
XSA9IDA7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHggPiBtYXhYICkgbWF4WCA9IHg7Ci0gICAg
ICAgICAgICAgICAgaWYgKCB5ID4gbWF4WSApIG1heFkgPSB5OwotICAgICAgICAgICAgICAgIGlm
ICggeiA+IG1heFogKSBtYXhaID0gejsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAg
ICAgICAgICB9CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIHRoaXMubWluLnNldCggbWluWCwg
bWluWSwgbWluWiApOwotICAgICAgICAgICAgdGhpcy5tYXguc2V0KCBtYXhYLCBtYXhZLCBtYXha
ICk7CisgICAgICAgIG1ha2VPcnRob2dyYXBoaWM6IGZ1bmN0aW9uICggbGVmdCwgcmlnaHQsIHRv
cCwgYm90dG9tLCBuZWFyLCBmYXIgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKKyAgICAgICAgICAgIHZhciB3ID0gMS4w
IC8gKCByaWdodCAtIGxlZnQgKTsKKyAgICAgICAgICAgIHZhciBoID0gMS4wIC8gKCB0b3AgLSBi
b3R0b20gKTsKKyAgICAgICAgICAgIHZhciBwID0gMS4wIC8gKCBmYXIgLSBuZWFyICk7CiAKLSAg
ICAgICAgfSwKKyAgICAgICAgICAgIHZhciB4ID0gKCByaWdodCArIGxlZnQgKSAqIHc7CisgICAg
ICAgICAgICB2YXIgeSA9ICggdG9wICsgYm90dG9tICkgKiBoOworICAgICAgICAgICAgdmFyIHog
PSAoIGZhciArIG5lYXIgKSAqIHA7CiAKLSAgICAgICAgc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZTog
ZnVuY3Rpb24gKCBhdHRyaWJ1dGUgKSB7CisgICAgICAgICAgICB0ZVsgMCBdID0gMiAqIHc7ICAg
IHRlWyA0IF0gPSAwOyAgICB0ZVsgOCBdID0gMDsgICAgdGVbIDEyIF0gPSAtIHg7CisgICAgICAg
ICAgICB0ZVsgMSBdID0gMDsgICAgdGVbIDUgXSA9IDIgKiBoOyAgICB0ZVsgOSBdID0gMDsgICAg
dGVbIDEzIF0gPSAtIHk7CisgICAgICAgICAgICB0ZVsgMiBdID0gMDsgICAgdGVbIDYgXSA9IDA7
ICAgIHRlWyAxMCBdID0gLSAyICogcDsgdGVbIDE0IF0gPSAtIHo7CisgICAgICAgICAgICB0ZVsg
MyBdID0gMDsgICAgdGVbIDcgXSA9IDA7ICAgIHRlWyAxMSBdID0gMDsgICB0ZVsgMTUgXSA9IDE7
CiAKLSAgICAgICAgICAgIHZhciBtaW5YID0gKyBJbmZpbml0eTsKLSAgICAgICAgICAgIHZhciBt
aW5ZID0gKyBJbmZpbml0eTsKLSAgICAgICAgICAgIHZhciBtaW5aID0gKyBJbmZpbml0eTsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICB2YXIgbWF4WCA9IC0gSW5maW5p
dHk7Ci0gICAgICAgICAgICB2YXIgbWF4WSA9IC0gSW5maW5pdHk7Ci0gICAgICAgICAgICB2YXIg
bWF4WiA9IC0gSW5maW5pdHk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gMCwgbCA9IGF0dHJpYnV0ZS5jb3VudDsgaSA8IGw7IGkgKysgKSB7CisgICAgICAgIGVxdWFs
czogZnVuY3Rpb24gKCBtYXRyaXggKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgeCA9IGF0dHJp
YnV0ZS5nZXRYKCBpICk7Ci0gICAgICAgICAgICAgICAgdmFyIHkgPSBhdHRyaWJ1dGUuZ2V0WSgg
aSApOwotICAgICAgICAgICAgICAgIHZhciB6ID0gYXR0cmlidXRlLmdldFooIGkgKTsKKyAgICAg
ICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7CisgICAgICAgICAgICB2YXIgbWUgPSBtYXRy
aXguZWxlbWVudHM7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHggPCBtaW5YICkgbWluWCA9IHg7
Ci0gICAgICAgICAgICAgICAgaWYgKCB5IDwgbWluWSApIG1pblkgPSB5OwotICAgICAgICAgICAg
ICAgIGlmICggeiA8IG1pblogKSBtaW5aID0gejsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0g
MDsgaSA8IDE2OyBpICsrICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCB4ID4gbWF4WCApIG1h
eFggPSB4OwotICAgICAgICAgICAgICAgIGlmICggeSA+IG1heFkgKSBtYXhZID0geTsKLSAgICAg
ICAgICAgICAgICBpZiAoIHogPiBtYXhaICkgbWF4WiA9IHo7CisgICAgICAgICAgICAgICAgaWYg
KCB0ZVsgaSBdICE9PSBtZVsgaSBdICkgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHRoaXMubWluLnNldCggbWluWCwgbWluWSwgbWluWiApOwotICAgICAgICAg
ICAgdGhpcy5tYXguc2V0KCBtYXhYLCBtYXhZLCBtYXhaICk7Ci0KLSAgICAgICAgICAgIHJldHVy
biB0aGlzOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgfSwKIAotICAgICAg
ICBzZXRGcm9tUG9pbnRzOiBmdW5jdGlvbiAoIHBvaW50cyApIHsKKyAgICAgICAgZnJvbUFycmF5
OiBmdW5jdGlvbiAoIGFycmF5LCBvZmZzZXQgKSB7CiAKLSAgICAgICAgICAgIHRoaXMubWFrZUVt
cHR5KCk7CisgICAgICAgICAgICBpZiAoIG9mZnNldCA9PT0gdW5kZWZpbmVkICkgb2Zmc2V0ID0g
MDsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkg
PCBpbDsgaSArKyApIHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IDE2OyBpICsr
ICkgewogCi0gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRCeVBvaW50KCBwb2ludHNbIGkgXSAp
OworICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudHNbIGkgXSA9IGFycmF5WyBpICsgb2Zmc2V0
IF07CiAKICAgICAgICAgICAgIH0KIApAQCAtNDgyOCwxODgxICs0Nzc0LDE2ODMgQEAKIAogICAg
ICAgICB9LAogCi0gICAgICAgIHNldEZyb21DZW50ZXJBbmRTaXplOiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRvQXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9mZnNldCApIHsKIAotICAgICAgICAg
ICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIGlmICggYXJyYXkgPT09IHVu
ZGVmaW5lZCApIGFycmF5ID0gW107CisgICAgICAgICAgICBpZiAoIG9mZnNldCA9PT0gdW5kZWZp
bmVkICkgb2Zmc2V0ID0gMDsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldEZyb21D
ZW50ZXJBbmRTaXplKCBjZW50ZXIsIHNpemUgKSB7CisgICAgICAgICAgICB2YXIgdGUgPSB0aGlz
LmVsZW1lbnRzOwogCi0gICAgICAgICAgICAgICAgdmFyIGhhbGZTaXplID0gdjEuY29weSggc2l6
ZSApLm11bHRpcGx5U2NhbGFyKCAwLjUgKTsKKyAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgXSA9
IHRlWyAwIF07CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMSBdID0gdGVbIDEgXTsKKyAg
ICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyAyIF0gPSB0ZVsgMiBdOworICAgICAgICAgICAgYXJy
YXlbIG9mZnNldCArIDMgXSA9IHRlWyAzIF07CiAKLSAgICAgICAgICAgICAgICB0aGlzLm1pbi5j
b3B5KCBjZW50ZXIgKS5zdWIoIGhhbGZTaXplICk7Ci0gICAgICAgICAgICAgICAgdGhpcy5tYXgu
Y29weSggY2VudGVyICkuYWRkKCBoYWxmU2l6ZSApOworICAgICAgICAgICAgYXJyYXlbIG9mZnNl
dCArIDQgXSA9IHRlWyA0IF07CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgNSBdID0gdGVb
IDUgXTsKKyAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyA2IF0gPSB0ZVsgNiBdOworICAgICAg
ICAgICAgYXJyYXlbIG9mZnNldCArIDcgXSA9IHRlWyA3IF07CiAKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyA4IF0gPSB0ZVsgOCBdOwor
ICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDkgXSA9IHRlWyA5IF07CisgICAgICAgICAgICBh
cnJheVsgb2Zmc2V0ICsgMTAgXSA9IHRlWyAxMCBdOworICAgICAgICAgICAgYXJyYXlbIG9mZnNl
dCArIDExIF0gPSB0ZVsgMTEgXTsKIAotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGFycmF5
WyBvZmZzZXQgKyAxMiBdID0gdGVbIDEyIF07CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsg
MTMgXSA9IHRlWyAxMyBdOworICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDE0IF0gPSB0ZVsg
MTQgXTsKKyAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyAxNSBdID0gdGVbIDE1IF07CiAKLSAg
ICAgICAgfSgpLAorICAgICAgICAgICAgcmV0dXJuIGFycmF5OwogCi0gICAgICAgIHNldEZyb21P
YmplY3Q6IGZ1bmN0aW9uICggb2JqZWN0ICkgeworICAgICAgICB9CiAKLSAgICAgICAgICAgIHRo
aXMubWFrZUVtcHR5KCk7CisgICAgfSApOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5leHBh
bmRCeU9iamVjdCggb2JqZWN0ICk7CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBo
dHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dp
dGh1Yi5jb20vV2VzdExhbmdsZXkKKyAgICAgKiBAYXV0aG9yIGJob3VzdG9uIC8gaHR0cDovL2Ns
YXJhLmlvCisgICAgICovCiAKLSAgICAgICAgfSwKKyAgICBmdW5jdGlvbiBFdWxlciggeCwgeSwg
eiwgb3JkZXIgKSB7CiAKLSAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhp
cy5feCA9IHggfHwgMDsKKyAgICAgICAgdGhpcy5feSA9IHkgfHwgMDsKKyAgICAgICAgdGhpcy5f
eiA9IHogfHwgMDsKKyAgICAgICAgdGhpcy5fb3JkZXIgPSBvcmRlciB8fCBFdWxlci5EZWZhdWx0
T3JkZXI7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHko
IHRoaXMgKTsKKyAgICB9CiAKLSAgICAgICAgfSwKKyAgICBFdWxlci5Sb3RhdGlvbk9yZGVycyA9
IFsgJ1hZWicsICdZWlgnLCAnWlhZJywgJ1haWScsICdZWFonLCAnWllYJyBdOwogCi0gICAgICAg
IGNvcHk6IGZ1bmN0aW9uICggYm94ICkgeworICAgIEV1bGVyLkRlZmF1bHRPcmRlciA9ICdYWVon
OwogCi0gICAgICAgICAgICB0aGlzLm1pbi5jb3B5KCBib3gubWluICk7Ci0gICAgICAgICAgICB0
aGlzLm1heC5jb3B5KCBib3gubWF4ICk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIEV1
bGVyLnByb3RvdHlwZSwgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgeDog
ewogCi0gICAgICAgIH0sCisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKIAotICAgICAg
ICBtYWtlRW1wdHk6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
eDsKIAotICAgICAgICAgICAgdGhpcy5taW4ueCA9IHRoaXMubWluLnkgPSB0aGlzLm1pbi56ID0g
KyBJbmZpbml0eTsKLSAgICAgICAgICAgIHRoaXMubWF4LnggPSB0aGlzLm1heC55ID0gdGhpcy5t
YXgueiA9IC0gSW5maW5pdHk7CisgICAgICAgICAgICB9LAogCi0gICAgICAgICAgICByZXR1cm4g
dGhpczsKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKIAotICAgICAgICB9
LAorICAgICAgICAgICAgICAgIHRoaXMuX3ggPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9vbkNoYW5nZUNhbGxiYWNrKCk7CiAKLSAgICAgICAgaXNFbXB0eTogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyB0aGlzIGlzIGEgbW9yZSByb2J1c3QgY2hl
Y2sgZm9yIGVtcHR5IHRoYW4gKCB2b2x1bWUgPD0gMCApIGJlY2F1c2Ugdm9sdW1lIGNhbiBnZXQg
cG9zaXRpdmUgd2l0aCB0d28gbmVnYXRpdmUgYXhlcworICAgICAgICB9LAogCi0gICAgICAgICAg
ICByZXR1cm4gKCB0aGlzLm1heC54IDwgdGhpcy5taW4ueCApIHx8ICggdGhpcy5tYXgueSA8IHRo
aXMubWluLnkgKSB8fCAoIHRoaXMubWF4LnogPCB0aGlzLm1pbi56ICk7CisgICAgICAgIHk6IHsK
IAotICAgICAgICB9LAorICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAg
Z2V0Q2VudGVyOiBmdW5jdGlvbiAoIHRhcmdldCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5feTsKIAotICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVmaW5lZCApIHsKKyAg
ICAgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5Cb3gz
OiAuZ2V0Q2VudGVyKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCcgKTsKLSAgICAgICAgICAgICAg
ICB0YXJnZXQgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoIHZh
bHVlICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5feSA9IHZhbHVl
OworICAgICAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTsKIAotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuaXNFbXB0eSgpID8gdGFyZ2V0LnNldCggMCwgMCwgMCApIDogdGFyZ2V0
LmFkZFZlY3RvcnMoIHRoaXMubWluLCB0aGlzLm1heCApLm11bHRpcGx5U2NhbGFyKCAwLjUgKTsK
KyAgICAgICAgICAgIH0KIAogICAgICAgICB9LAogCi0gICAgICAgIGdldFNpemU6IGZ1bmN0aW9u
ICggdGFyZ2V0ICkgeworICAgICAgICB6OiB7CiAKLSAgICAgICAgICAgIGlmICggdGFyZ2V0ID09
PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKIAotICAgICAg
ICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkJveDM6IC5nZXRTaXplKCkgdGFyZ2V0IGlz
IG5vdyByZXF1aXJlZCcgKTsKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMygp
OworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl96OwogCi0gICAgICAgICAgICB9CisgICAg
ICAgICAgICB9LAogCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0VtcHR5KCkgPyB0YXJnZXQu
c2V0KCAwLCAwLCAwICkgOiB0YXJnZXQuc3ViVmVjdG9ycyggdGhpcy5tYXgsIHRoaXMubWluICk7
CisgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7CisKKyAgICAgICAgICAgICAg
ICB0aGlzLl96ID0gdmFsdWU7CisgICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFj
aygpOworCisgICAgICAgICAgICB9CiAKICAgICAgICAgfSwKIAotICAgICAgICBleHBhbmRCeVBv
aW50OiBmdW5jdGlvbiAoIHBvaW50ICkgeworICAgICAgICBvcmRlcjogewogCi0gICAgICAgICAg
ICB0aGlzLm1pbi5taW4oIHBvaW50ICk7Ci0gICAgICAgICAgICB0aGlzLm1heC5tYXgoIHBvaW50
ICk7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yZGVyOwogCi0gICAgICAgIH0s
CisgICAgICAgICAgICB9LAogCi0gICAgICAgIGV4cGFuZEJ5VmVjdG9yOiBmdW5jdGlvbiAoIHZl
Y3RvciApIHsKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKIAotICAgICAg
ICAgICAgdGhpcy5taW4uc3ViKCB2ZWN0b3IgKTsKLSAgICAgICAgICAgIHRoaXMubWF4LmFkZCgg
dmVjdG9yICk7CisgICAgICAgICAgICAgICAgdGhpcy5fb3JkZXIgPSB2YWx1ZTsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7CiAKLSAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICAgICAgfQogCi0gICAgICAgIH0sCisgICAgICAgIH0KIAotICAgICAgICBl
eHBhbmRCeVNjYWxhcjogZnVuY3Rpb24gKCBzY2FsYXIgKSB7CisgICAgfSApOwogCi0gICAgICAg
ICAgICB0aGlzLm1pbi5hZGRTY2FsYXIoIC0gc2NhbGFyICk7Ci0gICAgICAgICAgICB0aGlzLm1h
eC5hZGRTY2FsYXIoIHNjYWxhciApOworICAgIE9iamVjdC5hc3NpZ24oIEV1bGVyLnByb3RvdHlw
ZSwgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgaXNFdWxlcjogdHJ1ZSwK
IAotICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICggeCwgeSwgeiwgb3JkZXIgKSB7
CiAKLSAgICAgICAgZXhwYW5kQnlPYmplY3Q6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRo
aXMuX3ggPSB4OworICAgICAgICAgICAgdGhpcy5feSA9IHk7CisgICAgICAgICAgICB0aGlzLl96
ID0gejsKKyAgICAgICAgICAgIHRoaXMuX29yZGVyID0gb3JkZXIgfHwgdGhpcy5fb3JkZXI7CiAK
LSAgICAgICAgICAgIC8vIENvbXB1dGVzIHRoZSB3b3JsZC1heGlzLWFsaWduZWQgYm91bmRpbmcg
Ym94IG9mIGFuIG9iamVjdCAoaW5jbHVkaW5nIGl0cyBjaGlsZHJlbiksCi0gICAgICAgICAgICAv
LyBhY2NvdW50aW5nIGZvciBib3RoIHRoZSBvYmplY3QncywgYW5kIGNoaWxkcmVuJ3MsIHdvcmxk
IHRyYW5zZm9ybXMKKyAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTsKIAotICAg
ICAgICAgICAgdmFyIHNjb3BlLCBpLCBsOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAg
ICAgICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgIH0sCiAKLSAgICAgICAg
ICAgIGZ1bmN0aW9uIHRyYXZlcnNlKCBub2RlICkgeworICAgICAgICBjbG9uZTogZnVuY3Rpb24g
KCkgewogCi0gICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gbm9kZS5nZW9tZXRyeTsKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvciggdGhpcy5feCwgdGhpcy5feSwg
dGhpcy5feiwgdGhpcy5fb3JkZXIgKTsKIAotICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkg
IT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgICAgICBpZiAo
IGdlb21ldHJ5LmlzR2VvbWV0cnkgKSB7CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggZXVsZXIg
KSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2ZXJ0aWNlcyA9IGdlb21ldHJ5LnZl
cnRpY2VzOworICAgICAgICAgICAgdGhpcy5feCA9IGV1bGVyLl94OworICAgICAgICAgICAgdGhp
cy5feSA9IGV1bGVyLl95OworICAgICAgICAgICAgdGhpcy5feiA9IGV1bGVyLl96OworICAgICAg
ICAgICAgdGhpcy5fb3JkZXIgPSBldWxlci5fb3JkZXI7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIGkgPSAwLCBsID0gdmVydGljZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAg
ICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHYxLmNvcHkoIHZlcnRpY2VzWyBpIF0gKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2MS5hcHBseU1hdHJpeDQoIG5vZGUubWF0cml4V29ybGQgKTsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZXhwYW5k
QnlQb2ludCggdjEgKTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICBzZXRGcm9tUm90YXRpb25NYXRyaXg6IGZ1bmN0aW9uICggbSwgb3JkZXIsIHVwZGF0
ZSApIHsKIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBnZW9tZXRyeS5pc0J1ZmZl
ckdlb21ldHJ5ICkgeworICAgICAgICAgICAgdmFyIGNsYW1wID0gX01hdGguY2xhbXA7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSBnZW9tZXRyeS5hdHRyaWJ1dGVz
LnBvc2l0aW9uOworICAgICAgICAgICAgLy8gYXNzdW1lcyB0aGUgdXBwZXIgM3gzIG9mIG0gaXMg
YSBwdXJlIHJvdGF0aW9uIG1hdHJpeCAoaS5lLCB1bnNjYWxlZCkKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBhdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHZh
ciB0ZSA9IG0uZWxlbWVudHM7CisgICAgICAgICAgICB2YXIgbTExID0gdGVbIDAgXSwgbTEyID0g
dGVbIDQgXSwgbTEzID0gdGVbIDggXTsKKyAgICAgICAgICAgIHZhciBtMjEgPSB0ZVsgMSBdLCBt
MjIgPSB0ZVsgNSBdLCBtMjMgPSB0ZVsgOSBdOworICAgICAgICAgICAgdmFyIG0zMSA9IHRlWyAy
IF0sIG0zMiA9IHRlWyA2IF0sIG0zMyA9IHRlWyAxMCBdOwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBhdHRyaWJ1dGUuY291bnQ7IGkgPCBsOyBpICsrICkg
eworICAgICAgICAgICAgb3JkZXIgPSBvcmRlciB8fCB0aGlzLl9vcmRlcjsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2MS5mcm9tQnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUs
IGkgKS5hcHBseU1hdHJpeDQoIG5vZGUubWF0cml4V29ybGQgKTsKKyAgICAgICAgICAgIGlmICgg
b3JkZXIgPT09ICdYWVonICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj
b3BlLmV4cGFuZEJ5UG9pbnQoIHYxICk7CisgICAgICAgICAgICAgICAgdGhpcy5feSA9IE1hdGgu
YXNpbiggY2xhbXAoIG0xMywgLSAxLCAxICkgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIE1hdGguYWJzKCBtMTMgKSA8IDAuOTk5OTkgKSB7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
eCA9IE1hdGguYXRhbjIoIC0gbTIzLCBtMzMgKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
eiA9IE1hdGguYXRhbjIoIC0gbTEyLCBtMTEgKTsKIAotICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5feCA9IE1hdGguYXRhbjIoIG0zMiwgbTIyICk7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX3ogPSAwOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZXhwYW5kQnlPYmplY3QoIG9iamVjdCApIHsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoIG9yZGVyID09PSAnWVhaJyApIHsKIAotICAgICAgICAg
ICAgICAgIHNjb3BlID0gdGhpczsKKyAgICAgICAgICAgICAgICB0aGlzLl94ID0gTWF0aC5hc2lu
KCAtIGNsYW1wKCBtMjMsIC0gMSwgMSApICk7CiAKLSAgICAgICAgICAgICAgICBvYmplY3QudXBk
YXRlTWF0cml4V29ybGQoIHRydWUgKTsKKyAgICAgICAgICAgICAgICBpZiAoIE1hdGguYWJzKCBt
MjMgKSA8IDAuOTk5OTkgKSB7CiAKLSAgICAgICAgICAgICAgICBvYmplY3QudHJhdmVyc2UoIHRy
YXZlcnNlICk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3kgPSBNYXRoLmF0YW4yKCBtMTMs
IG0zMyApOworICAgICAgICAgICAgICAgICAgICB0aGlzLl96ID0gTWF0aC5hdGFuMiggbTIxLCBt
MjIgKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3kgPSBN
YXRoLmF0YW4yKCAtIG0zMSwgbTExICk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ogPSAw
OwogCi0gICAgICAgIH0oKSwKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgY29udGFpbnNQ
b2ludDogZnVuY3Rpb24gKCBwb2ludCApIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIG9yZGVy
ID09PSAnWlhZJyApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHBvaW50LnggPCB0aGlzLm1pbi54
IHx8IHBvaW50LnggPiB0aGlzLm1heC54IHx8Ci0gICAgICAgICAgICAgICAgcG9pbnQueSA8IHRo
aXMubWluLnkgfHwgcG9pbnQueSA+IHRoaXMubWF4LnkgfHwKLSAgICAgICAgICAgICAgICBwb2lu
dC56IDwgdGhpcy5taW4ueiB8fCBwb2ludC56ID4gdGhpcy5tYXgueiA/IGZhbHNlIDogdHJ1ZTsK
KyAgICAgICAgICAgICAgICB0aGlzLl94ID0gTWF0aC5hc2luKCBjbGFtcCggbTMyLCAtIDEsIDEg
KSApOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgaWYgKCBNYXRoLmFicyggbTMyICkg
PCAwLjk5OTk5ICkgewogCi0gICAgICAgIGNvbnRhaW5zQm94OiBmdW5jdGlvbiAoIGJveCApIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5feSA9IE1hdGguYXRhbjIoIC0gbTMxLCBtMzMgKTsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5feiA9IE1hdGguYXRhbjIoIC0gbTEyLCBtMjIgKTsK
IAotICAgICAgICAgICAgcmV0dXJuIHRoaXMubWluLnggPD0gYm94Lm1pbi54ICYmIGJveC5tYXgu
eCA8PSB0aGlzLm1heC54ICYmCi0gICAgICAgICAgICAgICAgdGhpcy5taW4ueSA8PSBib3gubWlu
LnkgJiYgYm94Lm1heC55IDw9IHRoaXMubWF4LnkgJiYKLSAgICAgICAgICAgICAgICB0aGlzLm1p
bi56IDw9IGJveC5taW4ueiAmJiBib3gubWF4LnogPD0gdGhpcy5tYXguejsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3kg
PSAwOworICAgICAgICAgICAgICAgICAgICB0aGlzLl96ID0gTWF0aC5hdGFuMiggbTIxLCBtMTEg
KTsKIAotICAgICAgICBnZXRQYXJhbWV0ZXI6IGZ1bmN0aW9uICggcG9pbnQsIHRhcmdldCApIHsK
KyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFRoaXMgY2FuIHBvdGVudGlhbGx5
IGhhdmUgYSBkaXZpZGUgYnkgemVybyBpZiB0aGUgYm94Ci0gICAgICAgICAgICAvLyBoYXMgYSBz
aXplIGRpbWVuc2lvbiBvZiAwLgorICAgICAgICAgICAgfSBlbHNlIGlmICggb3JkZXIgPT09ICda
WVgnICkgewogCi0gICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVkICkgeworICAg
ICAgICAgICAgICAgIHRoaXMuX3kgPSBNYXRoLmFzaW4oIC0gY2xhbXAoIG0zMSwgLSAxLCAxICkg
KTsKIAotICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkJveDM6IC5nZXRQYXJh
bWV0ZXIoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOwotICAgICAgICAgICAgICAgIHRhcmdl
dCA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICAgICAgaWYgKCBNYXRoLmFicyggbTMxICkg
PCAwLjk5OTk5ICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
X3ggPSBNYXRoLmF0YW4yKCBtMzIsIG0zMyApOworICAgICAgICAgICAgICAgICAgICB0aGlzLl96
ID0gTWF0aC5hdGFuMiggbTIxLCBtMTEgKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5z
ZXQoCi0gICAgICAgICAgICAgICAgKCBwb2ludC54IC0gdGhpcy5taW4ueCApIC8gKCB0aGlzLm1h
eC54IC0gdGhpcy5taW4ueCApLAotICAgICAgICAgICAgICAgICggcG9pbnQueSAtIHRoaXMubWlu
LnkgKSAvICggdGhpcy5tYXgueSAtIHRoaXMubWluLnkgKSwKLSAgICAgICAgICAgICAgICAoIHBv
aW50LnogLSB0aGlzLm1pbi56ICkgLyAoIHRoaXMubWF4LnogLSB0aGlzLm1pbi56ICkKLSAgICAg
ICAgICAgICk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICB9LAorICAgICAg
ICAgICAgICAgICAgICB0aGlzLl94ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5feiA9
IE1hdGguYXRhbjIoIC0gbTEyLCBtMjIgKTsKIAotICAgICAgICBpbnRlcnNlY3RzQm94OiBmdW5j
dGlvbiAoIGJveCApIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIHVzaW5n
IDYgc3BsaXR0aW5nIHBsYW5lcyB0byBydWxlIG91dCBpbnRlcnNlY3Rpb25zLgotICAgICAgICAg
ICAgcmV0dXJuIGJveC5tYXgueCA8IHRoaXMubWluLnggfHwgYm94Lm1pbi54ID4gdGhpcy5tYXgu
eCB8fAotICAgICAgICAgICAgICAgIGJveC5tYXgueSA8IHRoaXMubWluLnkgfHwgYm94Lm1pbi55
ID4gdGhpcy5tYXgueSB8fAotICAgICAgICAgICAgICAgIGJveC5tYXgueiA8IHRoaXMubWluLnog
fHwgYm94Lm1pbi56ID4gdGhpcy5tYXgueiA/IGZhbHNlIDogdHJ1ZTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIG9yZGVyID09PSAnWVpYJyApIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAg
ICAgIHRoaXMuX3ogPSBNYXRoLmFzaW4oIGNsYW1wKCBtMjEsIC0gMSwgMSApICk7CiAKLSAgICAg
ICAgaW50ZXJzZWN0c1NwaGVyZTogKCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgaWYg
KCBNYXRoLmFicyggbTIxICkgPCAwLjk5OTk5ICkgewogCi0gICAgICAgICAgICB2YXIgY2xvc2Vz
dFBvaW50ID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IE1h
dGguYXRhbjIoIC0gbTIzLCBtMjIgKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5feSA9IE1h
dGguYXRhbjIoIC0gbTMxLCBtMTEgKTsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlu
dGVyc2VjdHNTcGhlcmUoIHNwaGVyZSApIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0g
ICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgcG9pbnQgb24gdGhlIEFBQkIgY2xvc2VzdCB0byB0
aGUgc3BoZXJlIGNlbnRlci4KLSAgICAgICAgICAgICAgICB0aGlzLmNsYW1wUG9pbnQoIHNwaGVy
ZS5jZW50ZXIsIGNsb3Nlc3RQb2ludCApOworICAgICAgICAgICAgICAgICAgICB0aGlzLl94ID0g
MDsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5feSA9IE1hdGguYXRhbjIoIG0xMywgbTMzICk7
CiAKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGF0IHBvaW50IGlzIGluc2lkZSB0aGUgc3BoZXJl
LCB0aGUgQUFCQiBhbmQgc3BoZXJlIGludGVyc2VjdC4KLSAgICAgICAgICAgICAgICByZXR1cm4g
Y2xvc2VzdFBvaW50LmRpc3RhbmNlVG9TcXVhcmVkKCBzcGhlcmUuY2VudGVyICkgPD0gKCBzcGhl
cmUucmFkaXVzICogc3BoZXJlLnJhZGl1cyApOworICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIG9yZGVyID09PSAnWFpZJyApIHsKIAot
ICAgICAgICB9ICkoKSwKKyAgICAgICAgICAgICAgICB0aGlzLl96ID0gTWF0aC5hc2luKCAtIGNs
YW1wKCBtMTIsIC0gMSwgMSApICk7CiAKLSAgICAgICAgaW50ZXJzZWN0c1BsYW5lOiBmdW5jdGlv
biAoIHBsYW5lICkgeworICAgICAgICAgICAgICAgIGlmICggTWF0aC5hYnMoIG0xMiApIDwgMC45
OTk5OSApIHsKIAotICAgICAgICAgICAgLy8gV2UgY29tcHV0ZSB0aGUgbWluaW11bSBhbmQgbWF4
aW11bSBkb3QgcHJvZHVjdCB2YWx1ZXMuIElmIHRob3NlIHZhbHVlcwotICAgICAgICAgICAgLy8g
YXJlIG9uIHRoZSBzYW1lIHNpZGUgKGJhY2sgb3IgZnJvbnQpIG9mIHRoZSBwbGFuZSwgdGhlbiB0
aGVyZSBpcyBubyBpbnRlcnNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ggPSBN
YXRoLmF0YW4yKCBtMzIsIG0yMiApOworICAgICAgICAgICAgICAgICAgICB0aGlzLl95ID0gTWF0
aC5hdGFuMiggbTEzLCBtMTEgKTsKIAotICAgICAgICAgICAgdmFyIG1pbiwgbWF4OworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgIGlmICggcGxhbmUubm9ybWFsLnggPiAw
ICkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl94ID0gTWF0aC5hdGFuMiggLSBtMjMsIG0z
MyApOworICAgICAgICAgICAgICAgICAgICB0aGlzLl95ID0gMDsKIAotICAgICAgICAgICAgICAg
IG1pbiA9IHBsYW5lLm5vcm1hbC54ICogdGhpcy5taW4ueDsKLSAgICAgICAgICAgICAgICBtYXgg
PSBwbGFuZS5ub3JtYWwueCAqIHRoaXMubWF4Lng7CisgICAgICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgbWluID0gcGxhbmUubm9ybWFsLngg
KiB0aGlzLm1heC54OwotICAgICAgICAgICAgICAgIG1heCA9IHBsYW5lLm5vcm1hbC54ICogdGhp
cy5taW4ueDsKKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5FdWxlcjogLnNl
dEZyb21Sb3RhdGlvbk1hdHJpeCgpIGdpdmVuIHVuc3VwcG9ydGVkIG9yZGVyOiAnICsgb3JkZXIg
KTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIHBsYW5lLm5vcm1hbC55ID4g
MCApIHsKKyAgICAgICAgICAgIHRoaXMuX29yZGVyID0gb3JkZXI7CiAKLSAgICAgICAgICAgICAg
ICBtaW4gKz0gcGxhbmUubm9ybWFsLnkgKiB0aGlzLm1pbi55OwotICAgICAgICAgICAgICAgIG1h
eCArPSBwbGFuZS5ub3JtYWwueSAqIHRoaXMubWF4Lnk7CisgICAgICAgICAgICBpZiAoIHVwZGF0
ZSAhPT0gZmFsc2UgKSB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7CiAKLSAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIG1pbiAr
PSBwbGFuZS5ub3JtYWwueSAqIHRoaXMubWF4Lnk7Ci0gICAgICAgICAgICAgICAgbWF4ICs9IHBs
YW5lLm5vcm1hbC55ICogdGhpcy5taW4ueTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgfQor
ICAgICAgICBzZXRGcm9tUXVhdGVybmlvbjogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICBp
ZiAoIHBsYW5lLm5vcm1hbC56ID4gMCApIHsKKyAgICAgICAgICAgIHZhciBtYXRyaXggPSBuZXcg
TWF0cml4NCgpOwogCi0gICAgICAgICAgICAgICAgbWluICs9IHBsYW5lLm5vcm1hbC56ICogdGhp
cy5taW4uejsKLSAgICAgICAgICAgICAgICBtYXggKz0gcGxhbmUubm9ybWFsLnogKiB0aGlzLm1h
eC56OworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldEZyb21RdWF0ZXJuaW9uKCBxLCBv
cmRlciwgdXBkYXRlICkgewogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IG1hdHJpeC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbiggcSApOwogCi0gICAgICAgICAgICAg
ICAgbWluICs9IHBsYW5lLm5vcm1hbC56ICogdGhpcy5tYXguejsKLSAgICAgICAgICAgICAgICBt
YXggKz0gcGxhbmUubm9ybWFsLnogKiB0aGlzLm1pbi56OworICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLnNldEZyb21Sb3RhdGlvbk1hdHJpeCggbWF0cml4LCBvcmRlciwgdXBkYXRlICk7CiAK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIHJldHVybiAoIG1p
biA8PSBwbGFuZS5jb25zdGFudCAmJiBtYXggPj0gcGxhbmUuY29uc3RhbnQgKTsKKyAgICAgICAg
fSgpLAogCi0gICAgICAgIH0sCisgICAgICAgIHNldEZyb21WZWN0b3IzOiBmdW5jdGlvbiAoIHYs
IG9yZGVyICkgewogCi0gICAgICAgIGludGVyc2VjdHNUcmlhbmdsZTogKCBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXQoIHYueCwgdi55LCB2LnosIG9yZGVyIHx8IHRo
aXMuX29yZGVyICk7CiAKLSAgICAgICAgICAgIC8vIHRyaWFuZ2xlIGNlbnRlcmVkIHZlcnRpY2Vz
Ci0gICAgICAgICAgICB2YXIgdjAgPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgdmFyIHYx
ID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgICAgIHZhciB2MiA9IG5ldyBWZWN0b3IzKCk7Cisg
ICAgICAgIH0sCiAKLSAgICAgICAgICAgIC8vIHRyaWFuZ2xlIGVkZ2UgdmVjdG9ycwotICAgICAg
ICAgICAgdmFyIGYwID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgICAgIHZhciBmMSA9IG5ldyBW
ZWN0b3IzKCk7Ci0gICAgICAgICAgICB2YXIgZjIgPSBuZXcgVmVjdG9yMygpOworICAgICAgICBy
ZW9yZGVyOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHZhciB0ZXN0QXhpcyA9IG5ldyBW
ZWN0b3IzKCk7CisgICAgICAgICAgICAvLyBXQVJOSU5HOiB0aGlzIGRpc2NhcmRzIHJldm9sdXRp
b24gaW5mb3JtYXRpb24gLWJob3VzdG9uCiAKLSAgICAgICAgICAgIHZhciBjZW50ZXIgPSBuZXcg
VmVjdG9yMygpOwotICAgICAgICAgICAgdmFyIGV4dGVudHMgPSBuZXcgVmVjdG9yMygpOworICAg
ICAgICAgICAgdmFyIHEgPSBuZXcgUXVhdGVybmlvbigpOwogCi0gICAgICAgICAgICB2YXIgdHJp
YW5nbGVOb3JtYWwgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
IHJlb3JkZXIoIG5ld09yZGVyICkgewogCi0gICAgICAgICAgICBmdW5jdGlvbiBzYXRGb3JBeGVz
KCBheGVzICkgeworICAgICAgICAgICAgICAgIHEuc2V0RnJvbUV1bGVyKCB0aGlzICk7CiAKLSAg
ICAgICAgICAgICAgICB2YXIgaSwgajsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRG
cm9tUXVhdGVybmlvbiggcSwgbmV3T3JkZXIgKTsKIAotICAgICAgICAgICAgICAgIGZvciAoIGkg
PSAwLCBqID0gYXhlcy5sZW5ndGggLSAzOyBpIDw9IGo7IGkgKz0gMyApIHsKKyAgICAgICAgICAg
IH07CiAKLSAgICAgICAgICAgICAgICAgICAgdGVzdEF4aXMuZnJvbUFycmF5KCBheGVzLCBpICk7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHByb2plY3QgdGhlIGFhYmIgb250byB0aGUgc2VwZXJh
dGluZyBheGlzCi0gICAgICAgICAgICAgICAgICAgIHZhciByID0gZXh0ZW50cy54ICogTWF0aC5h
YnMoIHRlc3RBeGlzLnggKSArIGV4dGVudHMueSAqIE1hdGguYWJzKCB0ZXN0QXhpcy55ICkgKyBl
eHRlbnRzLnogKiBNYXRoLmFicyggdGVzdEF4aXMueiApOwotICAgICAgICAgICAgICAgICAgICAv
LyBwcm9qZWN0IGFsbCAzIHZlcnRpY2VzIG9mIHRoZSB0cmlhbmdsZSBvbnRvIHRoZSBzZXBlcmF0
aW5nIGF4aXMKLSAgICAgICAgICAgICAgICAgICAgdmFyIHAwID0gdjAuZG90KCB0ZXN0QXhpcyAp
OwotICAgICAgICAgICAgICAgICAgICB2YXIgcDEgPSB2MS5kb3QoIHRlc3RBeGlzICk7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBwMiA9IHYyLmRvdCggdGVzdEF4aXMgKTsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gYWN0dWFsIHRlc3QsIGJhc2ljYWxseSBzZWUgaWYgZWl0aGVyIG9mIHRoZSBt
b3N0IGV4dHJlbWUgb2YgdGhlIHRyaWFuZ2xlIHBvaW50cyBpbnRlcnNlY3RzIHIKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCBNYXRoLm1heCggLSBNYXRoLm1heCggcDAsIHAxLCBwMiApLCBNYXRo
Lm1pbiggcDAsIHAxLCBwMiApICkgPiByICkgeworICAgICAgICB9KCksCiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHBvaW50cyBvZiB0aGUgcHJvamVjdGVkIHRyaWFuZ2xlIGFyZSBvdXRz
aWRlIHRoZSBwcm9qZWN0ZWQgaGFsZi1sZW5ndGggb2YgdGhlIGFhYmIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRoZSBheGlzIGlzIHNlcGVyYXRpbmcgYW5kIHdlIGNhbiBleGl0Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVxdWFsczogZnVuY3Rp
b24gKCBldWxlciApIHsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gKCBldWxlci5feCA9PT0gdGhpcy5feCApICYmICggZXVsZXIuX3kgPT09IHRoaXMuX3kgKSAm
JiAoIGV1bGVyLl96ID09PSB0aGlzLl96ICkgJiYgKCBldWxlci5fb3JkZXIgPT09IHRoaXMuX29y
ZGVyICk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZnJvbUFycmF5OiBmdW5jdGlvbiAoIGFycmF5ICkgewog
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl94ID0gYXJyYXlbIDAgXTsKKyAgICAg
ICAgICAgIHRoaXMuX3kgPSBhcnJheVsgMSBdOworICAgICAgICAgICAgdGhpcy5feiA9IGFycmF5
WyAyIF07CisgICAgICAgICAgICBpZiAoIGFycmF5WyAzIF0gIT09IHVuZGVmaW5lZCApIHRoaXMu
X29yZGVyID0gYXJyYXlbIDMgXTsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGludGVy
c2VjdHNUcmlhbmdsZSggdHJpYW5nbGUgKSB7CisgICAgICAgICAgICB0aGlzLl9vbkNoYW5nZUNh
bGxiYWNrKCk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHRoaXMuaXNFbXB0eSgpICkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICB0b0FycmF5OiBmdW5j
dGlvbiAoIGFycmF5LCBvZmZzZXQgKSB7CiAKLSAgICAgICAgICAgICAgICAvLyBjb21wdXRlIGJv
eCBjZW50ZXIgYW5kIGV4dGVudHMKLSAgICAgICAgICAgICAgICB0aGlzLmdldENlbnRlciggY2Vu
dGVyICk7Ci0gICAgICAgICAgICAgICAgZXh0ZW50cy5zdWJWZWN0b3JzKCB0aGlzLm1heCwgY2Vu
dGVyICk7Ci0KLSAgICAgICAgICAgICAgICAvLyB0cmFuc2xhdGUgdHJpYW5nbGUgdG8gYWFiYiBv
cmlnaW4KLSAgICAgICAgICAgICAgICB2MC5zdWJWZWN0b3JzKCB0cmlhbmdsZS5hLCBjZW50ZXIg
KTsKLSAgICAgICAgICAgICAgICB2MS5zdWJWZWN0b3JzKCB0cmlhbmdsZS5iLCBjZW50ZXIgKTsK
LSAgICAgICAgICAgICAgICB2Mi5zdWJWZWN0b3JzKCB0cmlhbmdsZS5jLCBjZW50ZXIgKTsKLQot
ICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgZWRnZSB2ZWN0b3JzIGZvciB0cmlhbmdsZQotICAg
ICAgICAgICAgICAgIGYwLnN1YlZlY3RvcnMoIHYxLCB2MCApOwotICAgICAgICAgICAgICAgIGYx
LnN1YlZlY3RvcnMoIHYyLCB2MSApOwotICAgICAgICAgICAgICAgIGYyLnN1YlZlY3RvcnMoIHYw
LCB2MiApOwotCi0gICAgICAgICAgICAgICAgLy8gdGVzdCBhZ2FpbnN0IGF4ZXMgdGhhdCBhcmUg
Z2l2ZW4gYnkgY3Jvc3MgcHJvZHVjdCBjb21iaW5hdGlvbnMgb2YgdGhlIGVkZ2VzIG9mIHRoZSB0
cmlhbmdsZSBhbmQgdGhlIGVkZ2VzIG9mIHRoZSBhYWJiCi0gICAgICAgICAgICAgICAgLy8gbWFr
ZSBhbiBheGlzIHRlc3Rpbmcgb2YgZWFjaCBvZiB0aGUgMyBzaWRlcyBvZiB0aGUgYWFiYiBhZ2Fp
bnN0IGVhY2ggb2YgdGhlIDMgc2lkZXMgb2YgdGhlIHRyaWFuZ2xlID0gOSBheGlzIG9mIHNlcGFy
YXRpb24KLSAgICAgICAgICAgICAgICAvLyBheGlzX2lqID0gdV9pIHggZl9qICh1MCwgdTEsIHUy
ID0gZmFjZSBub3JtYWxzIG9mIGFhYmIgPSB4LHkseiBheGVzIHZlY3RvcnMgc2luY2UgYWFiYiBp
cyBheGlzIGFsaWduZWQpCi0gICAgICAgICAgICAgICAgdmFyIGF4ZXMgPSBbCi0gICAgICAgICAg
ICAgICAgICAgIDAsIC0gZjAueiwgZjAueSwgMCwgLSBmMS56LCBmMS55LCAwLCAtIGYyLnosIGYy
LnksCi0gICAgICAgICAgICAgICAgICAgIGYwLnosIDAsIC0gZjAueCwgZjEueiwgMCwgLSBmMS54
LCBmMi56LCAwLCAtIGYyLngsCi0gICAgICAgICAgICAgICAgICAgIC0gZjAueSwgZjAueCwgMCwg
LSBmMS55LCBmMS54LCAwLCAtIGYyLnksIGYyLngsIDAKLSAgICAgICAgICAgICAgICBdOwotICAg
ICAgICAgICAgICAgIGlmICggISBzYXRGb3JBeGVzKCBheGVzICkgKSB7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgLy8gdGVzdCAzIGZhY2Ugbm9ybWFscyBmcm9tIHRoZSBhYWJiCi0gICAgICAgICAgICAg
ICAgYXhlcyA9IFsgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSBdOwotICAgICAgICAgICAgICAg
IGlmICggISBzYXRGb3JBeGVzKCBheGVzICkgKSB7CisgICAgICAgICAgICBpZiAoIGFycmF5ID09
PSB1bmRlZmluZWQgKSBhcnJheSA9IFtdOworICAgICAgICAgICAgaWYgKCBvZmZzZXQgPT09IHVu
ZGVmaW5lZCApIG9mZnNldCA9IDA7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYXJyYXlbIG9mZnNldCBdID0gdGhpcy5feDsKKyAgICAgICAgICAgIGFy
cmF5WyBvZmZzZXQgKyAxIF0gPSB0aGlzLl95OworICAgICAgICAgICAgYXJyYXlbIG9mZnNldCAr
IDIgXSA9IHRoaXMuX3o7CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMyBdID0gdGhpcy5f
b3JkZXI7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CiAK
LSAgICAgICAgICAgICAgICAvLyBmaW5hbGx5IHRlc3RpbmcgdGhlIGZhY2Ugbm9ybWFsIG9mIHRo
ZSB0cmlhbmdsZQotICAgICAgICAgICAgICAgIC8vIHVzZSBhbHJlYWR5IGV4aXN0aW5nIHRyaWFu
Z2xlIGVkZ2UgdmVjdG9ycyBoZXJlCi0gICAgICAgICAgICAgICAgdHJpYW5nbGVOb3JtYWwuY3Jv
c3NWZWN0b3JzKCBmMCwgZjEgKTsKLSAgICAgICAgICAgICAgICBheGVzID0gWyB0cmlhbmdsZU5v
cm1hbC54LCB0cmlhbmdsZU5vcm1hbC55LCB0cmlhbmdsZU5vcm1hbC56IF07Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHNhdEZvckF4ZXMoIGF4ZXMgKTsKKyAgICAgICAgfSwKIAotICAgICAgICAg
ICAgfTsKKyAgICAgICAgdG9WZWN0b3IzOiBmdW5jdGlvbiAoIG9wdGlvbmFsUmVzdWx0ICkgewog
Ci0gICAgICAgIH0gKSgpLAorICAgICAgICAgICAgaWYgKCBvcHRpb25hbFJlc3VsdCApIHsKIAot
ICAgICAgICBjbGFtcFBvaW50OiBmdW5jdGlvbiAoIHBvaW50LCB0YXJnZXQgKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG9wdGlvbmFsUmVzdWx0LnNldCggdGhpcy5feCwgdGhpcy5feSwgdGhp
cy5feiApOwogCi0gICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVkICkgeworICAg
ICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVF
LkJveDM6IC5jbGFtcFBvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCcgKTsKLSAgICAgICAg
ICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgICAgIHJldHVybiBu
ZXcgVmVjdG9yMyggdGhpcy5feCwgdGhpcy5feSwgdGhpcy5feiApOwogCiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIHJldHVybiB0YXJnZXQuY29weSggcG9pbnQgKS5jbGFtcCggdGhpcy5t
aW4sIHRoaXMubWF4ICk7Ci0KICAgICAgICAgfSwKIAotICAgICAgICBkaXN0YW5jZVRvUG9pbnQ6
IGZ1bmN0aW9uICgpIHsKLQotICAgICAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTsKLQot
ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGRpc3RhbmNlVG9Qb2ludCggcG9pbnQgKSB7Ci0K
LSAgICAgICAgICAgICAgICB2YXIgY2xhbXBlZFBvaW50ID0gdjEuY29weSggcG9pbnQgKS5jbGFt
cCggdGhpcy5taW4sIHRoaXMubWF4ICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNsYW1wZWRQ
b2ludC5zdWIoIHBvaW50ICkubGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAg
fSgpLAotCi0gICAgICAgIGdldEJvdW5kaW5nU3BoZXJlOiBmdW5jdGlvbiAoKSB7Ci0KLSAgICAg
ICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBmdW5j
dGlvbiBnZXRCb3VuZGluZ1NwaGVyZSggdGFyZ2V0ICkgeworICAgICAgICBfb25DaGFuZ2U6IGZ1
bmN0aW9uICggY2FsbGJhY2sgKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0g
dW5kZWZpbmVkICkgeworICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGNhbGxi
YWNrOwogCi0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkJveDM6IC5n
ZXRCb3VuZGluZ1NwaGVyZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7Ci0gICAgICAgICAg
ICAgICAgICAgIHRhcmdldCA9IG5ldyBTcGhlcmUoKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgdGhp
cy5nZXRDZW50ZXIoIHRhcmdldC5jZW50ZXIgKTsKKyAgICAgICAgX29uQ2hhbmdlQ2FsbGJhY2s6
IGZ1bmN0aW9uICgpIHt9CiAKLSAgICAgICAgICAgICAgICB0YXJnZXQucmFkaXVzID0gdGhpcy5n
ZXRTaXplKCB2MSApLmxlbmd0aCgpICogMC41OworICAgIH0gKTsKIAotICAgICAgICAgICAgICAg
IHJldHVybiB0YXJnZXQ7CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8v
bXJkb29iLmNvbS8KKyAgICAgKi8KIAotICAgICAgICAgICAgfTsKKyAgICBmdW5jdGlvbiBMYXll
cnMoKSB7CiAKLSAgICAgICAgfSgpLAorICAgICAgICB0aGlzLm1hc2sgPSAxIHwgMDsKIAotICAg
ICAgICBpbnRlcnNlY3Q6IGZ1bmN0aW9uICggYm94ICkgeworICAgIH0KIAotICAgICAgICAgICAg
dGhpcy5taW4ubWF4KCBib3gubWluICk7Ci0gICAgICAgICAgICB0aGlzLm1heC5taW4oIGJveC5t
YXggKTsKKyAgICBPYmplY3QuYXNzaWduKCBMYXllcnMucHJvdG90eXBlLCB7CiAKLSAgICAgICAg
ICAgIC8vIGVuc3VyZSB0aGF0IGlmIHRoZXJlIGlzIG5vIG92ZXJsYXAsIHRoZSByZXN1bHQgaXMg
ZnVsbHkgZW1wdHksIG5vdCBzbGlnaHRseSBlbXB0eSB3aXRoIG5vbi1pbmYvK2luZiB2YWx1ZXMg
dGhhdCB3aWxsIGNhdXNlIHN1YnNlcXVlbmNlIGludGVyc2VjdHMgdG8gZXJyb25lb3VzbHkgcmV0
dXJuIHZhbGlkIHZhbHVlcy4KLSAgICAgICAgICAgIGlmICggdGhpcy5pc0VtcHR5KCkgKSB0aGlz
Lm1ha2VFbXB0eSgpOworICAgICAgICBzZXQ6IGZ1bmN0aW9uICggY2hhbm5lbCApIHsKIAotICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB0aGlzLm1hc2sgPSAxIDw8IGNoYW5u
ZWwgfCAwOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgdW5pb246IGZ1bmN0aW9uICggYm94ICkg
ewotCi0gICAgICAgICAgICB0aGlzLm1pbi5taW4oIGJveC5taW4gKTsKLSAgICAgICAgICAgIHRo
aXMubWF4Lm1heCggYm94Lm1heCApOworICAgICAgICBlbmFibGU6IGZ1bmN0aW9uICggY2hhbm5l
bCApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB0aGlzLm1hc2sg
fD0gMSA8PCBjaGFubmVsIHwgMDsKIAogICAgICAgICB9LAogCi0gICAgICAgIGFwcGx5TWF0cml4
NDogZnVuY3Rpb24gKCBtYXRyaXggKSB7Ci0KLSAgICAgICAgICAgIC8vIHRyYW5zZm9ybSBvZiBl
bXB0eSBib3ggaXMgYW4gZW1wdHkgYm94LgotICAgICAgICAgICAgaWYgKCB0aGlzLmlzRW1wdHko
ICkgKSByZXR1cm4gdGhpczsKLQotICAgICAgICAgICAgdmFyIG0gPSBtYXRyaXguZWxlbWVudHM7
Ci0KLSAgICAgICAgICAgIHZhciB4YXggPSBtWyAwIF0gKiB0aGlzLm1pbi54LCB4YXkgPSBtWyAx
IF0gKiB0aGlzLm1pbi54LCB4YXogPSBtWyAyIF0gKiB0aGlzLm1pbi54OwotICAgICAgICAgICAg
dmFyIHhieCA9IG1bIDAgXSAqIHRoaXMubWF4LngsIHhieSA9IG1bIDEgXSAqIHRoaXMubWF4Lngs
IHhieiA9IG1bIDIgXSAqIHRoaXMubWF4Lng7Ci0gICAgICAgICAgICB2YXIgeWF4ID0gbVsgNCBd
ICogdGhpcy5taW4ueSwgeWF5ID0gbVsgNSBdICogdGhpcy5taW4ueSwgeWF6ID0gbVsgNiBdICog
dGhpcy5taW4ueTsKLSAgICAgICAgICAgIHZhciB5YnggPSBtWyA0IF0gKiB0aGlzLm1heC55LCB5
YnkgPSBtWyA1IF0gKiB0aGlzLm1heC55LCB5YnogPSBtWyA2IF0gKiB0aGlzLm1heC55OwotICAg
ICAgICAgICAgdmFyIHpheCA9IG1bIDggXSAqIHRoaXMubWluLnosIHpheSA9IG1bIDkgXSAqIHRo
aXMubWluLnosIHpheiA9IG1bIDEwIF0gKiB0aGlzLm1pbi56OwotICAgICAgICAgICAgdmFyIHpi
eCA9IG1bIDggXSAqIHRoaXMubWF4LnosIHpieSA9IG1bIDkgXSAqIHRoaXMubWF4LnosIHpieiA9
IG1bIDEwIF0gKiB0aGlzLm1heC56OwotCi0gICAgICAgICAgICB0aGlzLm1pbi54ID0gTWF0aC5t
aW4oIHhheCwgeGJ4ICkgKyBNYXRoLm1pbiggeWF4LCB5YnggKSArIE1hdGgubWluKCB6YXgsIHpi
eCApICsgbVsgMTIgXTsKLSAgICAgICAgICAgIHRoaXMubWluLnkgPSBNYXRoLm1pbiggeGF5LCB4
YnkgKSArIE1hdGgubWluKCB5YXksIHlieSApICsgTWF0aC5taW4oIHpheSwgemJ5ICkgKyBtWyAx
MyBdOwotICAgICAgICAgICAgdGhpcy5taW4ueiA9IE1hdGgubWluKCB4YXosIHhieiApICsgTWF0
aC5taW4oIHlheiwgeWJ6ICkgKyBNYXRoLm1pbiggemF6LCB6YnogKSArIG1bIDE0IF07Ci0gICAg
ICAgICAgICB0aGlzLm1heC54ID0gTWF0aC5tYXgoIHhheCwgeGJ4ICkgKyBNYXRoLm1heCggeWF4
LCB5YnggKSArIE1hdGgubWF4KCB6YXgsIHpieCApICsgbVsgMTIgXTsKLSAgICAgICAgICAgIHRo
aXMubWF4LnkgPSBNYXRoLm1heCggeGF5LCB4YnkgKSArIE1hdGgubWF4KCB5YXksIHlieSApICsg
TWF0aC5tYXgoIHpheSwgemJ5ICkgKyBtWyAxMyBdOwotICAgICAgICAgICAgdGhpcy5tYXgueiA9
IE1hdGgubWF4KCB4YXosIHhieiApICsgTWF0aC5tYXgoIHlheiwgeWJ6ICkgKyBNYXRoLm1heCgg
emF6LCB6YnogKSArIG1bIDE0IF07CisgICAgICAgIHRvZ2dsZTogZnVuY3Rpb24gKCBjaGFubmVs
ICkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIHRoaXMubWFzayBe
PSAxIDw8IGNoYW5uZWwgfCAwOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgdHJhbnNsYXRlOiBm
dW5jdGlvbiAoIG9mZnNldCApIHsKLQotICAgICAgICAgICAgdGhpcy5taW4uYWRkKCBvZmZzZXQg
KTsKLSAgICAgICAgICAgIHRoaXMubWF4LmFkZCggb2Zmc2V0ICk7CisgICAgICAgIGRpc2FibGU6
IGZ1bmN0aW9uICggY2hhbm5lbCApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgICAgICB0aGlzLm1hc2sgJj0gfiAoIDEgPDwgY2hhbm5lbCB8IDAgKTsKIAogICAgICAgICB9
LAogCi0gICAgICAgIGVxdWFsczogZnVuY3Rpb24gKCBib3ggKSB7CisgICAgICAgIHRlc3Q6IGZ1
bmN0aW9uICggbGF5ZXJzICkgewogCi0gICAgICAgICAgICByZXR1cm4gYm94Lm1pbi5lcXVhbHMo
IHRoaXMubWluICkgJiYgYm94Lm1heC5lcXVhbHMoIHRoaXMubWF4ICk7CisgICAgICAgICAgICBy
ZXR1cm4gKCB0aGlzLm1hc2sgJiBsYXllcnMubWFzayApICE9PSAwOwogCiAgICAgICAgIH0KIAog
ICAgIH0gKTsKIAogICAgIC8qKgotICAgICAqIEBhdXRob3IgYmhvdXN0b24gLyBodHRwOi8vY2xh
cmEuaW8KICAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAq
IEBhdXRob3IgbWlrYWVsIGVtdGluZ2VyIC8gaHR0cDovL2dvbW8uc2UvCisgICAgICogQGF1dGhv
ciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KKyAgICAgKiBAYXV0aG9yIFdl
c3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExhbmdsZXkKKyAgICAgKiBAYXV0aG9y
IGVsZXBoYW50YXR3b3JrIC8gd3d3LmVsZXBoYW50YXR3b3JrLmNoCiAgICAgICovCiAKLSAgICBm
dW5jdGlvbiBTcGhlcmUoIGNlbnRlciwgcmFkaXVzICkgeworICAgIHZhciBvYmplY3QzRElkID0g
MDsKIAotICAgICAgICB0aGlzLmNlbnRlciA9ICggY2VudGVyICE9PSB1bmRlZmluZWQgKSA/IGNl
bnRlciA6IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgIHRoaXMucmFkaXVzID0gKCByYWRpdXMgIT09
IHVuZGVmaW5lZCApID8gcmFkaXVzIDogMDsKKyAgICBmdW5jdGlvbiBPYmplY3QzRCgpIHsKIAot
ICAgIH0KKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCAnaWQnLCB7IHZhbHVl
OiBvYmplY3QzRElkICsrIH0gKTsKIAotICAgIE9iamVjdC5hc3NpZ24oIFNwaGVyZS5wcm90b3R5
cGUsIHsKKyAgICAgICAgdGhpcy51dWlkID0gX01hdGguZ2VuZXJhdGVVVUlEKCk7CiAKLSAgICAg
ICAgc2V0OiBmdW5jdGlvbiAoIGNlbnRlciwgcmFkaXVzICkgeworICAgICAgICB0aGlzLm5hbWUg
PSAnJzsKKyAgICAgICAgdGhpcy50eXBlID0gJ09iamVjdDNEJzsKIAotICAgICAgICAgICAgdGhp
cy5jZW50ZXIuY29weSggY2VudGVyICk7Ci0gICAgICAgICAgICB0aGlzLnJhZGl1cyA9IHJhZGl1
czsKKyAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsOworICAgICAgICB0aGlzLmNoaWxkcmVuID0g
W107CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB0aGlzLnVwID0gT2JqZWN0
M0QuRGVmYXVsdFVwLmNsb25lKCk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgdmFyIHBvc2l0aW9u
ID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgdmFyIHJvdGF0aW9uID0gbmV3IEV1bGVyKCk7Cisg
ICAgICAgIHZhciBxdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTsKKyAgICAgICAgdmFyIHNj
YWxlID0gbmV3IFZlY3RvcjMoIDEsIDEsIDEgKTsKIAotICAgICAgICBzZXRGcm9tUG9pbnRzOiBm
dW5jdGlvbiAoKSB7CisgICAgICAgIGZ1bmN0aW9uIG9uUm90YXRpb25DaGFuZ2UoKSB7CiAKLSAg
ICAgICAgICAgIHZhciBib3ggPSBuZXcgQm94MygpOworICAgICAgICAgICAgcXVhdGVybmlvbi5z
ZXRGcm9tRXVsZXIoIHJvdGF0aW9uLCBmYWxzZSApOwogCi0gICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb24gc2V0RnJvbVBvaW50cyggcG9pbnRzLCBvcHRpb25hbENlbnRlciApIHsKKyAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgdmFyIGNlbnRlciA9IHRoaXMuY2VudGVyOworICAgICAgICBm
dW5jdGlvbiBvblF1YXRlcm5pb25DaGFuZ2UoKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIG9w
dGlvbmFsQ2VudGVyICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICByb3RhdGlvbi5zZXRG
cm9tUXVhdGVybmlvbiggcXVhdGVybmlvbiwgdW5kZWZpbmVkLCBmYWxzZSApOwogCi0gICAgICAg
ICAgICAgICAgICAgIGNlbnRlci5jb3B5KCBvcHRpb25hbENlbnRlciApOworICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICByb3RhdGlvbi5fb25DaGFuZ2UoIG9u
Um90YXRpb25DaGFuZ2UgKTsKKyAgICAgICAgcXVhdGVybmlvbi5fb25DaGFuZ2UoIG9uUXVhdGVy
bmlvbkNoYW5nZSApOwogCi0gICAgICAgICAgICAgICAgICAgIGJveC5zZXRGcm9tUG9pbnRzKCBw
b2ludHMgKS5nZXRDZW50ZXIoIGNlbnRlciApOworICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dGllcyggdGhpcywgeworICAgICAgICAgICAgcG9zaXRpb246IHsKKyAgICAgICAgICAgICAgICBj
b25maWd1cmFibGU6IHRydWUsCisgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICAgICAgICAgICAgICB2YWx1ZTogcG9zaXRpb24KKyAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICByb3RhdGlvbjogeworICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICAgICAgICAgIHZhbHVlOiByb3Rh
dGlvbgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHF1YXRlcm5pb246IHsKKyAgICAgICAg
ICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgICAgICAgICAgICAgZW51bWVyYWJsZTog
dHJ1ZSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogcXVhdGVybmlvbgorICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIHNjYWxlOiB7CisgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVl
LAorICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgICAgICAgICAgdmFs
dWU6IHNjYWxlCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgbW9kZWxWaWV3TWF0cml4OiB7
CisgICAgICAgICAgICAgICAgdmFsdWU6IG5ldyBNYXRyaXg0KCkKKyAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICBub3JtYWxNYXRyaXg6IHsKKyAgICAgICAgICAgICAgICB2YWx1ZTogbmV3IE1h
dHJpeDMoKQorICAgICAgICAgICAgfQorICAgICAgICB9ICk7CiAKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgIHRoaXMubWF0cml4ID0gbmV3IE1hdHJpeDQoKTsKKyAgICAgICAgdGhpcy5tYXRy
aXhXb3JsZCA9IG5ldyBNYXRyaXg0KCk7CiAKLSAgICAgICAgICAgICAgICB2YXIgbWF4UmFkaXVz
U3EgPSAwOworICAgICAgICB0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBPYmplY3QzRC5EZWZhdWx0
TWF0cml4QXV0b1VwZGF0ZTsKKyAgICAgICAgdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0g
ZmFsc2U7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGlsID0gcG9pbnRzLmxl
bmd0aDsgaSA8IGlsOyBpICsrICkgeworICAgICAgICB0aGlzLmxheWVycyA9IG5ldyBMYXllcnMo
KTsKKyAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgICAgICBt
YXhSYWRpdXNTcSA9IE1hdGgubWF4KCBtYXhSYWRpdXNTcSwgY2VudGVyLmRpc3RhbmNlVG9TcXVh
cmVkKCBwb2ludHNbIGkgXSApICk7CisgICAgICAgIHRoaXMuY2FzdFNoYWRvdyA9IGZhbHNlOwor
ICAgICAgICB0aGlzLnJlY2VpdmVTaGFkb3cgPSBmYWxzZTsKIAotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgdGhpcy5mcnVzdHVtQ3VsbGVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5yZW5kZXJP
cmRlciA9IDA7CiAKLSAgICAgICAgICAgICAgICB0aGlzLnJhZGl1cyA9IE1hdGguc3FydCggbWF4
UmFkaXVzU3EgKTsKKyAgICAgICAgdGhpcy51c2VyRGF0YSA9IHt9OwogCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgfQogCi0gICAgICAgICAgICB9OworICAgIE9iamVjdDNELkRl
ZmF1bHRVcCA9IG5ldyBWZWN0b3IzKCAwLCAxLCAwICk7CisgICAgT2JqZWN0M0QuRGVmYXVsdE1h
dHJpeEF1dG9VcGRhdGUgPSB0cnVlOwogCi0gICAgICAgIH0oKSwKKyAgICBPYmplY3QzRC5wcm90
b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBFdmVudERpc3BhdGNoZXIucHJv
dG90eXBlICksIHsKIAotICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICBjb25z
dHJ1Y3RvcjogT2JqZWN0M0QsCiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1
Y3RvcigpLmNvcHkoIHRoaXMgKTsKKyAgICAgICAgaXNPYmplY3QzRDogdHJ1ZSwKKworICAgICAg
ICBvbkJlZm9yZVJlbmRlcjogZnVuY3Rpb24gKCkge30sCisgICAgICAgIG9uQWZ0ZXJSZW5kZXI6
IGZ1bmN0aW9uICgpIHt9LAorCisgICAgICAgIGFwcGx5TWF0cml4OiBmdW5jdGlvbiAoIG1hdHJp
eCApIHsKKworICAgICAgICAgICAgaWYgKCB0aGlzLm1hdHJpeEF1dG9VcGRhdGUgKSB0aGlzLnVw
ZGF0ZU1hdHJpeCgpOworCisgICAgICAgICAgICB0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSggbWF0
cml4ICk7CisKKyAgICAgICAgICAgIHRoaXMubWF0cml4LmRlY29tcG9zZSggdGhpcy5wb3NpdGlv
biwgdGhpcy5xdWF0ZXJuaW9uLCB0aGlzLnNjYWxlICk7CiAKICAgICAgICAgfSwKIAotICAgICAg
ICBjb3B5OiBmdW5jdGlvbiAoIHNwaGVyZSApIHsKKyAgICAgICAgYXBwbHlRdWF0ZXJuaW9uOiBm
dW5jdGlvbiAoIHEgKSB7CiAKLSAgICAgICAgICAgIHRoaXMuY2VudGVyLmNvcHkoIHNwaGVyZS5j
ZW50ZXIgKTsKLSAgICAgICAgICAgIHRoaXMucmFkaXVzID0gc3BoZXJlLnJhZGl1czsKKyAgICAg
ICAgICAgIHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSggcSApOwogCiAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIGVtcHR5OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHNldFJvdGF0aW9uRnJvbUF4aXNBbmdsZTogZnVuY3Rpb24gKCBheGlzLCBhbmds
ZSApIHsKIAotICAgICAgICAgICAgcmV0dXJuICggdGhpcy5yYWRpdXMgPD0gMCApOworICAgICAg
ICAgICAgLy8gYXNzdW1lcyBheGlzIGlzIG5vcm1hbGl6ZWQKKworICAgICAgICAgICAgdGhpcy5x
dWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoIGF4aXMsIGFuZ2xlICk7CiAKICAgICAgICAgfSwK
IAotICAgICAgICBjb250YWluc1BvaW50OiBmdW5jdGlvbiAoIHBvaW50ICkgeworICAgICAgICBz
ZXRSb3RhdGlvbkZyb21FdWxlcjogZnVuY3Rpb24gKCBldWxlciApIHsKIAotICAgICAgICAgICAg
cmV0dXJuICggcG9pbnQuZGlzdGFuY2VUb1NxdWFyZWQoIHRoaXMuY2VudGVyICkgPD0gKCB0aGlz
LnJhZGl1cyAqIHRoaXMucmFkaXVzICkgKTsKKyAgICAgICAgICAgIHRoaXMucXVhdGVybmlvbi5z
ZXRGcm9tRXVsZXIoIGV1bGVyLCB0cnVlICk7CiAKICAgICAgICAgfSwKIAotICAgICAgICBkaXN0
YW5jZVRvUG9pbnQ6IGZ1bmN0aW9uICggcG9pbnQgKSB7CisgICAgICAgIHNldFJvdGF0aW9uRnJv
bU1hdHJpeDogZnVuY3Rpb24gKCBtICkgewogCi0gICAgICAgICAgICByZXR1cm4gKCBwb2ludC5k
aXN0YW5jZVRvKCB0aGlzLmNlbnRlciApIC0gdGhpcy5yYWRpdXMgKTsKKyAgICAgICAgICAgIC8v
IGFzc3VtZXMgdGhlIHVwcGVyIDN4MyBvZiBtIGlzIGEgcHVyZSByb3RhdGlvbiBtYXRyaXggKGku
ZSwgdW5zY2FsZWQpCisKKyAgICAgICAgICAgIHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRp
b25NYXRyaXgoIG0gKTsKIAogICAgICAgICB9LAogCi0gICAgICAgIGludGVyc2VjdHNTcGhlcmU6
IGZ1bmN0aW9uICggc3BoZXJlICkgeworICAgICAgICBzZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9u
OiBmdW5jdGlvbiAoIHEgKSB7CiAKLSAgICAgICAgICAgIHZhciByYWRpdXNTdW0gPSB0aGlzLnJh
ZGl1cyArIHNwaGVyZS5yYWRpdXM7CisgICAgICAgICAgICAvLyBhc3N1bWVzIHEgaXMgbm9ybWFs
aXplZAogCi0gICAgICAgICAgICByZXR1cm4gc3BoZXJlLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJl
ZCggdGhpcy5jZW50ZXIgKSA8PSAoIHJhZGl1c1N1bSAqIHJhZGl1c1N1bSApOworICAgICAgICAg
ICAgdGhpcy5xdWF0ZXJuaW9uLmNvcHkoIHEgKTsKIAogICAgICAgICB9LAogCi0gICAgICAgIGlu
dGVyc2VjdHNCb3g6IGZ1bmN0aW9uICggYm94ICkgeworICAgICAgICByb3RhdGVPbkF4aXM6IGZ1
bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgcmV0dXJuIGJveC5pbnRlcnNlY3RzU3BoZXJlKCB0
aGlzICk7CisgICAgICAgICAgICAvLyByb3RhdGUgb2JqZWN0IG9uIGF4aXMgaW4gb2JqZWN0IHNw
YWNlCisgICAgICAgICAgICAvLyBheGlzIGlzIGFzc3VtZWQgdG8gYmUgbm9ybWFsaXplZAogCi0g
ICAgICAgIH0sCisgICAgICAgICAgICB2YXIgcTEgPSBuZXcgUXVhdGVybmlvbigpOwogCi0gICAg
ICAgIGludGVyc2VjdHNQbGFuZTogZnVuY3Rpb24gKCBwbGFuZSApIHsKKyAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbiByb3RhdGVPbkF4aXMoIGF4aXMsIGFuZ2xlICkgewogCi0gICAgICAgICAg
ICByZXR1cm4gTWF0aC5hYnMoIHBsYW5lLmRpc3RhbmNlVG9Qb2ludCggdGhpcy5jZW50ZXIgKSAp
IDw9IHRoaXMucmFkaXVzOworICAgICAgICAgICAgICAgIHExLnNldEZyb21BeGlzQW5nbGUoIGF4
aXMsIGFuZ2xlICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB0aGlzLnF1YXRlcm5p
b24ubXVsdGlwbHkoIHExICk7CiAKLSAgICAgICAgY2xhbXBQb2ludDogZnVuY3Rpb24gKCBwb2lu
dCwgdGFyZ2V0ICkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAg
ICB2YXIgZGVsdGFMZW5ndGhTcSA9IHRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKCBwb2lu
dCApOworICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVm
aW5lZCApIHsKKyAgICAgICAgfSgpLAogCi0gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAn
VEhSRUUuU3BoZXJlOiAuY2xhbXBQb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7Ci0g
ICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgcm90YXRlT25X
b3JsZEF4aXM6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
cm90YXRlIG9iamVjdCBvbiBheGlzIGluIHdvcmxkIHNwYWNlCisgICAgICAgICAgICAvLyBheGlz
IGlzIGFzc3VtZWQgdG8gYmUgbm9ybWFsaXplZAorICAgICAgICAgICAgLy8gbWV0aG9kIGFzc3Vt
ZXMgbm8gcm90YXRlZCBwYXJlbnQKIAotICAgICAgICAgICAgdGFyZ2V0LmNvcHkoIHBvaW50ICk7
CisgICAgICAgICAgICB2YXIgcTEgPSBuZXcgUXVhdGVybmlvbigpOwogCi0gICAgICAgICAgICBp
ZiAoIGRlbHRhTGVuZ3RoU3EgPiAoIHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXMgKSApIHsKKyAg
ICAgICAgICAgIHJldHVybiBmdW5jdGlvbiByb3RhdGVPbldvcmxkQXhpcyggYXhpcywgYW5nbGUg
KSB7CiAKLSAgICAgICAgICAgICAgICB0YXJnZXQuc3ViKCB0aGlzLmNlbnRlciApLm5vcm1hbGl6
ZSgpOwotICAgICAgICAgICAgICAgIHRhcmdldC5tdWx0aXBseVNjYWxhciggdGhpcy5yYWRpdXMg
KS5hZGQoIHRoaXMuY2VudGVyICk7CisgICAgICAgICAgICAgICAgcTEuc2V0RnJvbUF4aXNBbmds
ZSggYXhpcywgYW5nbGUgKTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMu
cXVhdGVybmlvbi5wcmVtdWx0aXBseSggcTEgKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRhcmdl
dDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICB9LAorICAgICAgICAg
ICAgfTsKIAotICAgICAgICBnZXRCb3VuZGluZ0JveDogZnVuY3Rpb24gKCB0YXJnZXQgKSB7Cisg
ICAgICAgIH0oKSwKIAotICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVmaW5lZCApIHsK
KyAgICAgICAgcm90YXRlWDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgY29uc29s
ZS53YXJuKCAnVEhSRUUuU3BoZXJlOiAuZ2V0Qm91bmRpbmdCb3goKSB0YXJnZXQgaXMgbm93IHJl
cXVpcmVkJyApOwotICAgICAgICAgICAgICAgIHRhcmdldCA9IG5ldyBCb3gzKCk7CisgICAgICAg
ICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMyggMSwgMCwgMCApOwogCi0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcm90YXRlWCggYW5nbGUgKSB7CiAKLSAgICAgICAg
ICAgIHRhcmdldC5zZXQoIHRoaXMuY2VudGVyLCB0aGlzLmNlbnRlciApOwotICAgICAgICAgICAg
dGFyZ2V0LmV4cGFuZEJ5U2NhbGFyKCB0aGlzLnJhZGl1cyApOworICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLnJvdGF0ZU9uQXhpcyggdjEsIGFuZ2xlICk7CiAKLSAgICAgICAgICAgIHJldHVy
biB0YXJnZXQ7CisgICAgICAgICAgICB9OwogCi0gICAgICAgIH0sCisgICAgICAgIH0oKSwKIAot
ICAgICAgICBhcHBseU1hdHJpeDQ6IGZ1bmN0aW9uICggbWF0cml4ICkgeworICAgICAgICByb3Rh
dGVZOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4
NCggbWF0cml4ICk7Ci0gICAgICAgICAgICB0aGlzLnJhZGl1cyA9IHRoaXMucmFkaXVzICogbWF0
cml4LmdldE1heFNjYWxlT25BeGlzKCk7CisgICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9y
MyggMCwgMSwgMCApOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbiByb3RhdGVZKCBhbmdsZSApIHsKIAotICAgICAgICB9LAorICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyggdjEsIGFuZ2xlICk7CiAKLSAgICAgICAg
dHJhbnNsYXRlOiBmdW5jdGlvbiAoIG9mZnNldCApIHsKKyAgICAgICAgICAgIH07CiAKLSAgICAg
ICAgICAgIHRoaXMuY2VudGVyLmFkZCggb2Zmc2V0ICk7CisgICAgICAgIH0oKSwKIAotICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIHJvdGF0ZVo6IGZ1bmN0aW9uICgpIHsKIAotICAg
ICAgICB9LAorICAgICAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoIDAsIDAsIDEgKTsKIAot
ICAgICAgICBlcXVhbHM6IGZ1bmN0aW9uICggc3BoZXJlICkgeworICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uIHJvdGF0ZVooIGFuZ2xlICkgewogCi0gICAgICAgICAgICByZXR1cm4gc3BoZXJl
LmNlbnRlci5lcXVhbHMoIHRoaXMuY2VudGVyICkgJiYgKCBzcGhlcmUucmFkaXVzID09PSB0aGlz
LnJhZGl1cyApOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyggdjEs
IGFuZ2xlICk7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgfTsKIAotICAgIH0gKTsKKyAgICAg
ICAgfSgpLAogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBiaG91c3RvbiAvIGh0dHA6Ly9jbGFy
YS5pbwotICAgICAqLworICAgICAgICB0cmFuc2xhdGVPbkF4aXM6IGZ1bmN0aW9uICgpIHsKIAot
ICAgIGZ1bmN0aW9uIFBsYW5lKCBub3JtYWwsIGNvbnN0YW50ICkgeworICAgICAgICAgICAgLy8g
dHJhbnNsYXRlIG9iamVjdCBieSBkaXN0YW5jZSBhbG9uZyBheGlzIGluIG9iamVjdCBzcGFjZQor
ICAgICAgICAgICAgLy8gYXhpcyBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWQKIAotICAgICAg
ICAvLyBub3JtYWwgaXMgYXNzdW1lZCB0byBiZSBub3JtYWxpemVkCisgICAgICAgICAgICB2YXIg
djEgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgIHRoaXMubm9ybWFsID0gKCBub3JtYWwgIT09
IHVuZGVmaW5lZCApID8gbm9ybWFsIDogbmV3IFZlY3RvcjMoIDEsIDAsIDAgKTsKLSAgICAgICAg
dGhpcy5jb25zdGFudCA9ICggY29uc3RhbnQgIT09IHVuZGVmaW5lZCApID8gY29uc3RhbnQgOiAw
OworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRyYW5zbGF0ZU9uQXhpcyggYXhpcywgZGlz
dGFuY2UgKSB7CiAKLSAgICB9CisgICAgICAgICAgICAgICAgdjEuY29weSggYXhpcyApLmFwcGx5
UXVhdGVybmlvbiggdGhpcy5xdWF0ZXJuaW9uICk7CiAKLSAgICBPYmplY3QuYXNzaWduKCBQbGFu
ZS5wcm90b3R5cGUsIHsKKyAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uLmFkZCggdjEubXVs
dGlwbHlTY2FsYXIoIGRpc3RhbmNlICkgKTsKIAotICAgICAgICBzZXQ6IGZ1bmN0aW9uICggbm9y
bWFsLCBjb25zdGFudCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAg
ICAgICAgdGhpcy5ub3JtYWwuY29weSggbm9ybWFsICk7Ci0gICAgICAgICAgICB0aGlzLmNvbnN0
YW50ID0gY29uc3RhbnQ7CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgfSgpLAogCi0gICAgICAgIH0sCisgICAgICAgIHRyYW5zbGF0ZVg6IGZ1bmN0
aW9uICgpIHsKIAotICAgICAgICBzZXRDb21wb25lbnRzOiBmdW5jdGlvbiAoIHgsIHksIHosIHcg
KSB7CisgICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMyggMSwgMCwgMCApOwogCi0gICAg
ICAgICAgICB0aGlzLm5vcm1hbC5zZXQoIHgsIHksIHogKTsKLSAgICAgICAgICAgIHRoaXMuY29u
c3RhbnQgPSB3OworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRyYW5zbGF0ZVgoIGRpc3Rh
bmNlICkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoIHYxLCBkaXN0YW5jZSApOwogCi0gICAgICAgIH0sCisg
ICAgICAgICAgICB9OwogCi0gICAgICAgIHNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50OiBm
dW5jdGlvbiAoIG5vcm1hbCwgcG9pbnQgKSB7CisgICAgICAgIH0oKSwKIAotICAgICAgICAgICAg
dGhpcy5ub3JtYWwuY29weSggbm9ybWFsICk7Ci0gICAgICAgICAgICB0aGlzLmNvbnN0YW50ID0g
LSBwb2ludC5kb3QoIHRoaXMubm9ybWFsICk7CisgICAgICAgIHRyYW5zbGF0ZVk6IGZ1bmN0aW9u
ICgpIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB2YXIgdjEgPSBu
ZXcgVmVjdG9yMyggMCwgMSwgMCApOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICByZXR1cm4g
ZnVuY3Rpb24gdHJhbnNsYXRlWSggZGlzdGFuY2UgKSB7CiAKLSAgICAgICAgc2V0RnJvbUNvcGxh
bmFyUG9pbnRzOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJh
bnNsYXRlT25BeGlzKCB2MSwgZGlzdGFuY2UgKTsKIAotICAgICAgICAgICAgdmFyIHYxID0gbmV3
IFZlY3RvcjMoKTsKLSAgICAgICAgICAgIHZhciB2MiA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAg
ICAgICB9OwogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gc2V0RnJvbUNvcGxhbmFyUG9p
bnRzKCBhLCBiLCBjICkgeworICAgICAgICB9KCksCiAKLSAgICAgICAgICAgICAgICB2YXIgbm9y
bWFsID0gdjEuc3ViVmVjdG9ycyggYywgYiApLmNyb3NzKCB2Mi5zdWJWZWN0b3JzKCBhLCBiICkg
KS5ub3JtYWxpemUoKTsKKyAgICAgICAgdHJhbnNsYXRlWjogZnVuY3Rpb24gKCkgewogCi0gICAg
ICAgICAgICAgICAgLy8gUTogc2hvdWxkIGFuIGVycm9yIGJlIHRocm93biBpZiBub3JtYWwgaXMg
emVybyAoZS5nLiBkZWdlbmVyYXRlIHBsYW5lKT8KKyAgICAgICAgICAgIHZhciB2MSA9IG5ldyBW
ZWN0b3IzKCAwLCAwLCAxICk7CiAKLSAgICAgICAgICAgICAgICB0aGlzLnNldEZyb21Ob3JtYWxB
bmRDb3BsYW5hclBvaW50KCBub3JtYWwsIGEgKTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
biB0cmFuc2xhdGVaKCBkaXN0YW5jZSApIHsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyggdjEsIGRpc3Rh
bmNlICk7CiAKICAgICAgICAgICAgIH07CiAKICAgICAgICAgfSgpLAogCi0gICAgICAgIGNsb25l
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGxvY2FsVG9Xb3JsZDogZnVuY3Rpb24gKCB2ZWN0b3Ig
KSB7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRo
aXMgKTsKKyAgICAgICAgICAgIHJldHVybiB2ZWN0b3IuYXBwbHlNYXRyaXg0KCB0aGlzLm1hdHJp
eFdvcmxkICk7CiAKICAgICAgICAgfSwKIAotICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHBsYW5l
ICkgeworICAgICAgICB3b3JsZFRvTG9jYWw6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAg
dGhpcy5ub3JtYWwuY29weSggcGxhbmUubm9ybWFsICk7Ci0gICAgICAgICAgICB0aGlzLmNvbnN0
YW50ID0gcGxhbmUuY29uc3RhbnQ7CisgICAgICAgICAgICB2YXIgbTEgPSBuZXcgTWF0cml4NCgp
OwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
biB3b3JsZFRvTG9jYWwoIHZlY3RvciApIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAg
IHJldHVybiB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtMS5nZXRJbnZlcnNlKCB0aGlzLm1hdHJpeFdv
cmxkICkgKTsKIAotICAgICAgICBub3JtYWxpemU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IH07CiAKLSAgICAgICAgICAgIC8vIE5vdGU6IHdpbGwgbGVhZCB0byBhIGRpdmlkZSBieSB6ZXJv
IGlmIHRoZSBwbGFuZSBpcyBpbnZhbGlkLgorICAgICAgICB9KCksCiAKLSAgICAgICAgICAgIHZh
ciBpbnZlcnNlTm9ybWFsTGVuZ3RoID0gMS4wIC8gdGhpcy5ub3JtYWwubGVuZ3RoKCk7Ci0gICAg
ICAgICAgICB0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhciggaW52ZXJzZU5vcm1hbExlbmd0aCAp
OwotICAgICAgICAgICAgdGhpcy5jb25zdGFudCAqPSBpbnZlcnNlTm9ybWFsTGVuZ3RoOworICAg
ICAgICBsb29rQXQ6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICAvLyBUaGlzIG1ldGhvZCBkb2VzIG5vdCBzdXBwb3J0IG9iamVjdHMgaGF2aW5n
IG5vbi11bmlmb3JtbHktc2NhbGVkIHBhcmVudChzKQogCi0gICAgICAgIH0sCisgICAgICAgICAg
ICB2YXIgcTEgPSBuZXcgUXVhdGVybmlvbigpOworICAgICAgICAgICAgdmFyIG0xID0gbmV3IE1h
dHJpeDQoKTsKKyAgICAgICAgICAgIHZhciB0YXJnZXQgPSBuZXcgVmVjdG9yMygpOworICAgICAg
ICAgICAgdmFyIHBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICBuZWdhdGU6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBsb29rQXQoIHgsIHksIHog
KSB7CiAKLSAgICAgICAgICAgIHRoaXMuY29uc3RhbnQgKj0gLSAxOwotICAgICAgICAgICAgdGhp
cy5ub3JtYWwubmVnYXRlKCk7CisgICAgICAgICAgICAgICAgaWYgKCB4LmlzVmVjdG9yMyApIHsK
IAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgIHRhcmdldC5j
b3B5KCB4ICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAg
ICAgIGRpc3RhbmNlVG9Qb2ludDogZnVuY3Rpb24gKCBwb2ludCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGFyZ2V0LnNldCggeCwgeSwgeiApOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5u
b3JtYWwuZG90KCBwb2ludCApICsgdGhpcy5jb25zdGFudDsKKyAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQ7CiAK
LSAgICAgICAgZGlzdGFuY2VUb1NwaGVyZTogZnVuY3Rpb24gKCBzcGhlcmUgKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy51cGRhdGVXb3JsZE1hdHJpeCggdHJ1ZSwgZmFsc2UgKTsKIAotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KCBzcGhlcmUuY2VudGVyICkgLSBzcGhl
cmUucmFkaXVzOworICAgICAgICAgICAgICAgIHBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlv
biggdGhpcy5tYXRyaXhXb3JsZCApOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgaWYg
KCB0aGlzLmlzQ2FtZXJhIHx8IHRoaXMuaXNMaWdodCApIHsKIAotICAgICAgICBwcm9qZWN0UG9p
bnQ6IGZ1bmN0aW9uICggcG9pbnQsIHRhcmdldCApIHsKKyAgICAgICAgICAgICAgICAgICAgbTEu
bG9va0F0KCBwb3NpdGlvbiwgdGFyZ2V0LCB0aGlzLnVwICk7CiAKLSAgICAgICAgICAgIGlmICgg
dGFyZ2V0ID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAg
ICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlBsYW5lOiAucHJvamVjdFBvaW50KCkg
dGFyZ2V0IGlzIG5vdyByZXF1aXJlZCcgKTsKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcg
VmVjdG9yMygpOworICAgICAgICAgICAgICAgICAgICBtMS5sb29rQXQoIHRhcmdldCwgcG9zaXRp
b24sIHRoaXMudXAgKTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgcmV0dXJuIHRhcmdldC5jb3B5KCB0aGlzLm5vcm1hbCApLm11bHRpcGx5U2NhbGFy
KCAtIHRoaXMuZGlzdGFuY2VUb1BvaW50KCBwb2ludCApICkuYWRkKCBwb2ludCApOworICAgICAg
ICAgICAgICAgIHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoIG0xICk7CiAK
LSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBpZiAoIHBhcmVudCApIHsKIAotICAgICAgICBp
bnRlcnNlY3RMaW5lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIG0xLmV4dHJh
Y3RSb3RhdGlvbiggcGFyZW50Lm1hdHJpeFdvcmxkICk7CisgICAgICAgICAgICAgICAgICAgIHEx
LnNldEZyb21Sb3RhdGlvbk1hdHJpeCggbTEgKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5x
dWF0ZXJuaW9uLnByZW11bHRpcGx5KCBxMS5pbnZlcnNlKCkgKTsKIAotICAgICAgICAgICAgdmFy
IHYxID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbiBpbnRlcnNlY3RMaW5lKCBsaW5lLCB0YXJnZXQgKSB7CisgICAgICAgICAg
ICB9OwogCi0gICAgICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVmaW5lZCApIHsKKyAg
ICAgICAgfSgpLAogCi0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlBs
YW5lOiAuaW50ZXJzZWN0TGluZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7Ci0gICAgICAg
ICAgICAgICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgIGFkZDogZnVuY3Rp
b24gKCBvYmplY3QgKSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIGFy
Z3VtZW50cy5sZW5ndGggPiAxICkgewogCi0gICAgICAgICAgICAgICAgdmFyIGRpcmVjdGlvbiA9
IGxpbmUuZGVsdGEoIHYxICk7CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwg
YXJndW1lbnRzLmxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgIHZhciBkZW5vbWlu
YXRvciA9IHRoaXMubm9ybWFsLmRvdCggZGlyZWN0aW9uICk7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuYWRkKCBhcmd1bWVudHNbIGkgXSApOwogCi0gICAgICAgICAgICAgICAgaWYgKCBkZW5v
bWluYXRvciA9PT0gMCApIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAg
ICAgLy8gbGluZSBpcyBjb3BsYW5hciwgcmV0dXJuIG9yaWdpbgotICAgICAgICAgICAgICAgICAg
ICBpZiAoIHRoaXMuZGlzdGFuY2VUb1BvaW50KCBsaW5lLnN0YXJ0ICkgPT09IDAgKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0YXJnZXQuY29weSggbGluZS5zdGFydCApOworICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggb2JqZWN0ID09PSB0aGlzICkgewogCi0gICAg
ICAgICAgICAgICAgICAgIC8vIFVuc3VyZSBpZiB0aGlzIGlzIHRoZSBjb3JyZWN0IG1ldGhvZCB0
byBoYW5kbGUgdGhpcyBjYXNlLgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVk
OworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICJUSFJFRS5PYmplY3QzRC5hZGQ6IG9i
amVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLCBvYmplY3QgKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIHZhciB0ID0gLSAoIGxpbmUuc3RhcnQuZG90KCB0aGlz
Lm5vcm1hbCApICsgdGhpcy5jb25zdGFudCApIC8gZGVub21pbmF0b3I7CisgICAgICAgICAgICBp
ZiAoICggb2JqZWN0ICYmIG9iamVjdC5pc09iamVjdDNEICkgKSB7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoIHQgPCAwIHx8IHQgPiAxICkgeworICAgICAgICAgICAgICAgIGlmICggb2JqZWN0LnBh
cmVudCAhPT0gbnVsbCApIHsKIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVk
OworICAgICAgICAgICAgICAgICAgICBvYmplY3QucGFyZW50LnJlbW92ZSggb2JqZWN0ICk7CiAK
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmNvcHko
IGRpcmVjdGlvbiApLm11bHRpcGx5U2NhbGFyKCB0ICkuYWRkKCBsaW5lLnN0YXJ0ICk7Ci0KLSAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgb2JqZWN0LnBhcmVudCA9IHRoaXM7CisgICAg
ICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKCBvYmplY3QgKTsKIAotICAgICAgICB9KCks
CisgICAgICAgICAgICAgICAgb2JqZWN0LmRpc3BhdGNoRXZlbnQoIHsgdHlwZTogJ2FkZGVkJyB9
ICk7CiAKLSAgICAgICAgaW50ZXJzZWN0c0xpbmU6IGZ1bmN0aW9uICggbGluZSApIHsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgIC8vIE5vdGU6IHRoaXMgdGVzdHMgaWYgYSBs
aW5lIGludGVyc2VjdHMgdGhlIHBsYW5lLCBub3Qgd2hldGhlciBpdCAob3IgaXRzIGVuZC1wb2lu
dHMpIGFyZSBjb3BsYW5hciB3aXRoIGl0LgorICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3Io
ICJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuT2Jq
ZWN0M0QuIiwgb2JqZWN0ICk7CiAKLSAgICAgICAgICAgIHZhciBzdGFydFNpZ24gPSB0aGlzLmRp
c3RhbmNlVG9Qb2ludCggbGluZS5zdGFydCApOwotICAgICAgICAgICAgdmFyIGVuZFNpZ24gPSB0
aGlzLmRpc3RhbmNlVG9Qb2ludCggbGluZS5lbmQgKTsKKyAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgcmV0dXJuICggc3RhcnRTaWduIDwgMCAmJiBlbmRTaWduID4gMCApIHx8ICggZW5kU2ln
biA8IDAgJiYgc3RhcnRTaWduID4gMCApOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAg
ICAgICAgfSwKIAotICAgICAgICBpbnRlcnNlY3RzQm94OiBmdW5jdGlvbiAoIGJveCApIHsKKyAg
ICAgICAgcmVtb3ZlOiBmdW5jdGlvbiAoIG9iamVjdCApIHsKIAotICAgICAgICAgICAgcmV0dXJu
IGJveC5pbnRlcnNlY3RzUGxhbmUoIHRoaXMgKTsKKyAgICAgICAgICAgIGlmICggYXJndW1lbnRz
Lmxlbmd0aCA+IDEgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpICsrICkgewogCi0gICAgICAgIGludGVyc2Vj
dHNTcGhlcmU6IGZ1bmN0aW9uICggc3BoZXJlICkgeworICAgICAgICAgICAgICAgICAgICB0aGlz
LnJlbW92ZSggYXJndW1lbnRzWyBpIF0gKTsKIAotICAgICAgICAgICAgcmV0dXJuIHNwaGVyZS5p
bnRlcnNlY3RzUGxhbmUoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICBjb3BsYW5hclBvaW50OiBm
dW5jdGlvbiAoIHRhcmdldCApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCB0
YXJnZXQgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hp
bGRyZW4uaW5kZXhPZiggb2JqZWN0ICk7CiAKLSAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4o
ICdUSFJFRS5QbGFuZTogLmNvcGxhbmFyUG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyAp
OwotICAgICAgICAgICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICBp
ZiAoIGluZGV4ICE9PSAtIDEgKSB7CisKKyAgICAgICAgICAgICAgICBvYmplY3QucGFyZW50ID0g
bnVsbDsKKyAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZSggaW5kZXgsIDEgKTsK
KworICAgICAgICAgICAgICAgIG9iamVjdC5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdyZW1vdmVk
JyB9ICk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5jb3B5
KCB0aGlzLm5vcm1hbCApLm11bHRpcGx5U2NhbGFyKCAtIHRoaXMuY29uc3RhbnQgKTsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgYXBwbHlNYXRyaXg0
OiBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7Ci0g
ICAgICAgICAgICB2YXIgbTEgPSBuZXcgTWF0cml4MygpOworICAgICAgICBhdHRhY2g6IGZ1bmN0
aW9uICgpIHsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGFwcGx5TWF0cml4NCggbWF0
cml4LCBvcHRpb25hbE5vcm1hbE1hdHJpeCApIHsKKyAgICAgICAgICAgIC8vIGFkZHMgb2JqZWN0
IGFzIGEgY2hpbGQgb2YgdGhpcywgd2hpbGUgbWFpbnRhaW5pbmcgdGhlIG9iamVjdCdzIHdvcmxk
IHRyYW5zZm9ybQogCi0gICAgICAgICAgICAgICAgdmFyIG5vcm1hbE1hdHJpeCA9IG9wdGlvbmFs
Tm9ybWFsTWF0cml4IHx8IG0xLmdldE5vcm1hbE1hdHJpeCggbWF0cml4ICk7CisgICAgICAgICAg
ICB2YXIgbSA9IG5ldyBNYXRyaXg0KCk7CiAKLSAgICAgICAgICAgICAgICB2YXIgcmVmZXJlbmNl
UG9pbnQgPSB0aGlzLmNvcGxhbmFyUG9pbnQoIHYxICkuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTsK
KyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBhdHRhY2goIG9iamVjdCApIHsKIAotICAgICAg
ICAgICAgICAgIHZhciBub3JtYWwgPSB0aGlzLm5vcm1hbC5hcHBseU1hdHJpeDMoIG5vcm1hbE1h
dHJpeCApLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlV29ybGRNYXRy
aXgoIHRydWUsIGZhbHNlICk7CiAKLSAgICAgICAgICAgICAgICB0aGlzLmNvbnN0YW50ID0gLSBy
ZWZlcmVuY2VQb2ludC5kb3QoIG5vcm1hbCApOworICAgICAgICAgICAgICAgIG0uZ2V0SW52ZXJz
ZSggdGhpcy5tYXRyaXhXb3JsZCApOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICAgICAgaWYgKCBvYmplY3QucGFyZW50ICE9PSBudWxsICkgewogCi0gICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICBvYmplY3QucGFyZW50LnVwZGF0ZVdvcmxkTWF0
cml4KCB0cnVlLCBmYWxzZSApOwogCi0gICAgICAgIH0oKSwKKyAgICAgICAgICAgICAgICAgICAg
bS5tdWx0aXBseSggb2JqZWN0LnBhcmVudC5tYXRyaXhXb3JsZCApOwogCi0gICAgICAgIHRyYW5z
bGF0ZTogZnVuY3Rpb24gKCBvZmZzZXQgKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICB0aGlzLmNvbnN0YW50IC09IG9mZnNldC5kb3QoIHRoaXMubm9ybWFsICk7CisgICAgICAg
ICAgICAgICAgb2JqZWN0LmFwcGx5TWF0cml4KCBtICk7CiAKLSAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICAgICAgICAgIG9iamVjdC51cGRhdGVXb3JsZE1hdHJpeCggZmFsc2UsIGZh
bHNlICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB0aGlzLmFkZCggb2JqZWN0ICk7
CiAKLSAgICAgICAgZXF1YWxzOiBmdW5jdGlvbiAoIHBsYW5lICkgeworICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICByZXR1cm4gcGxhbmUubm9ybWFsLmVxdWFscygg
dGhpcy5ub3JtYWwgKSAmJiAoIHBsYW5lLmNvbnN0YW50ID09PSB0aGlzLmNvbnN0YW50ICk7Cisg
ICAgICAgICAgICB9OwogCi0gICAgICAgIH0KKyAgICAgICAgfSgpLAogCi0gICAgfSApOworICAg
ICAgICBnZXRPYmplY3RCeUlkOiBmdW5jdGlvbiAoIGlkICkgewogCi0gICAgLyoqCi0gICAgICog
QGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKiBAYXV0aG9yIGFsdGVy
ZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAgICAqIEBhdXRob3IgYmhvdXN0b24g
LyBodHRwOi8vY2xhcmEuaW8KLSAgICAgKi8KKyAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE9i
amVjdEJ5UHJvcGVydHkoICdpZCcsIGlkICk7CiAKLSAgICBmdW5jdGlvbiBGcnVzdHVtKCBwMCwg
cDEsIHAyLCBwMywgcDQsIHA1ICkgeworICAgICAgICB9LAogCi0gICAgICAgIHRoaXMucGxhbmVz
ID0gWworICAgICAgICBnZXRPYmplY3RCeU5hbWU6IGZ1bmN0aW9uICggbmFtZSApIHsKIAotICAg
ICAgICAgICAgKCBwMCAhPT0gdW5kZWZpbmVkICkgPyBwMCA6IG5ldyBQbGFuZSgpLAotICAgICAg
ICAgICAgKCBwMSAhPT0gdW5kZWZpbmVkICkgPyBwMSA6IG5ldyBQbGFuZSgpLAotICAgICAgICAg
ICAgKCBwMiAhPT0gdW5kZWZpbmVkICkgPyBwMiA6IG5ldyBQbGFuZSgpLAotICAgICAgICAgICAg
KCBwMyAhPT0gdW5kZWZpbmVkICkgPyBwMyA6IG5ldyBQbGFuZSgpLAotICAgICAgICAgICAgKCBw
NCAhPT0gdW5kZWZpbmVkICkgPyBwNCA6IG5ldyBQbGFuZSgpLAotICAgICAgICAgICAgKCBwNSAh
PT0gdW5kZWZpbmVkICkgPyBwNSA6IG5ldyBQbGFuZSgpCisgICAgICAgICAgICByZXR1cm4gdGhp
cy5nZXRPYmplY3RCeVByb3BlcnR5KCAnbmFtZScsIG5hbWUgKTsKIAotICAgICAgICBdOworICAg
ICAgICB9LAogCi0gICAgfQorICAgICAgICBnZXRPYmplY3RCeVByb3BlcnR5OiBmdW5jdGlvbiAo
IG5hbWUsIHZhbHVlICkgewogCi0gICAgT2JqZWN0LmFzc2lnbiggRnJ1c3R1bS5wcm90b3R5cGUs
IHsKKyAgICAgICAgICAgIGlmICggdGhpc1sgbmFtZSBdID09PSB2YWx1ZSApIHJldHVybiB0aGlz
OwogCi0gICAgICAgIHNldDogZnVuY3Rpb24gKCBwMCwgcDEsIHAyLCBwMywgcDQsIHA1ICkgewor
ICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkg
PCBsOyBpICsrICkgewogCi0gICAgICAgICAgICB2YXIgcGxhbmVzID0gdGhpcy5wbGFuZXM7Cisg
ICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlblsgaSBdOworICAgICAgICAg
ICAgICAgIHZhciBvYmplY3QgPSBjaGlsZC5nZXRPYmplY3RCeVByb3BlcnR5KCBuYW1lLCB2YWx1
ZSApOwogCi0gICAgICAgICAgICBwbGFuZXNbIDAgXS5jb3B5KCBwMCApOwotICAgICAgICAgICAg
cGxhbmVzWyAxIF0uY29weSggcDEgKTsKLSAgICAgICAgICAgIHBsYW5lc1sgMiBdLmNvcHkoIHAy
ICk7Ci0gICAgICAgICAgICBwbGFuZXNbIDMgXS5jb3B5KCBwMyApOwotICAgICAgICAgICAgcGxh
bmVzWyA0IF0uY29weSggcDQgKTsKLSAgICAgICAgICAgIHBsYW5lc1sgNSBdLmNvcHkoIHA1ICk7
CisgICAgICAgICAgICAgICAgaWYgKCBvYmplY3QgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAK
LSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgY2xvbmU6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0
cnVjdG9yKCkuY29weSggdGhpcyApOworICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKIAog
ICAgICAgICB9LAogCi0gICAgICAgIGNvcHk6IGZ1bmN0aW9uICggZnJ1c3R1bSApIHsKLQotICAg
ICAgICAgICAgdmFyIHBsYW5lcyA9IHRoaXMucGxhbmVzOworICAgICAgICBnZXRXb3JsZFBvc2l0
aW9uOiBmdW5jdGlvbiAoIHRhcmdldCApIHsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
OyBpIDwgNjsgaSArKyApIHsKKyAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRlZmluZWQg
KSB7CiAKLSAgICAgICAgICAgICAgICBwbGFuZXNbIGkgXS5jb3B5KCBmcnVzdHVtLnBsYW5lc1sg
aSBdICk7CisgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0M0Q6IC5n
ZXRXb3JsZFBvc2l0aW9uKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCcgKTsKKyAgICAgICAgICAg
ICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMygpOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzOwotCi0gICAgICAgIH0sCi0KLSAgICAgICAgc2V0RnJvbU1hdHJpeDog
ZnVuY3Rpb24gKCBtICkgeworICAgICAgICAgICAgdGhpcy51cGRhdGVNYXRyaXhXb3JsZCggdHJ1
ZSApOwogCi0gICAgICAgICAgICB2YXIgcGxhbmVzID0gdGhpcy5wbGFuZXM7Ci0gICAgICAgICAg
ICB2YXIgbWUgPSBtLmVsZW1lbnRzOwotICAgICAgICAgICAgdmFyIG1lMCA9IG1lWyAwIF0sIG1l
MSA9IG1lWyAxIF0sIG1lMiA9IG1lWyAyIF0sIG1lMyA9IG1lWyAzIF07Ci0gICAgICAgICAgICB2
YXIgbWU0ID0gbWVbIDQgXSwgbWU1ID0gbWVbIDUgXSwgbWU2ID0gbWVbIDYgXSwgbWU3ID0gbWVb
IDcgXTsKLSAgICAgICAgICAgIHZhciBtZTggPSBtZVsgOCBdLCBtZTkgPSBtZVsgOSBdLCBtZTEw
ID0gbWVbIDEwIF0sIG1lMTEgPSBtZVsgMTEgXTsKLSAgICAgICAgICAgIHZhciBtZTEyID0gbWVb
IDEyIF0sIG1lMTMgPSBtZVsgMTMgXSwgbWUxNCA9IG1lWyAxNCBdLCBtZTE1ID0gbWVbIDE1IF07
CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LnNldEZyb21NYXRyaXhQb3NpdGlvbiggdGhpcy5t
YXRyaXhXb3JsZCApOwogCi0gICAgICAgICAgICBwbGFuZXNbIDAgXS5zZXRDb21wb25lbnRzKCBt
ZTMgLSBtZTAsIG1lNyAtIG1lNCwgbWUxMSAtIG1lOCwgbWUxNSAtIG1lMTIgKS5ub3JtYWxpemUo
KTsKLSAgICAgICAgICAgIHBsYW5lc1sgMSBdLnNldENvbXBvbmVudHMoIG1lMyArIG1lMCwgbWU3
ICsgbWU0LCBtZTExICsgbWU4LCBtZTE1ICsgbWUxMiApLm5vcm1hbGl6ZSgpOwotICAgICAgICAg
ICAgcGxhbmVzWyAyIF0uc2V0Q29tcG9uZW50cyggbWUzICsgbWUxLCBtZTcgKyBtZTUsIG1lMTEg
KyBtZTksIG1lMTUgKyBtZTEzICkubm9ybWFsaXplKCk7Ci0gICAgICAgICAgICBwbGFuZXNbIDMg
XS5zZXRDb21wb25lbnRzKCBtZTMgLSBtZTEsIG1lNyAtIG1lNSwgbWUxMSAtIG1lOSwgbWUxNSAt
IG1lMTMgKS5ub3JtYWxpemUoKTsKLSAgICAgICAgICAgIHBsYW5lc1sgNCBdLnNldENvbXBvbmVu
dHMoIG1lMyAtIG1lMiwgbWU3IC0gbWU2LCBtZTExIC0gbWUxMCwgbWUxNSAtIG1lMTQgKS5ub3Jt
YWxpemUoKTsKLSAgICAgICAgICAgIHBsYW5lc1sgNSBdLnNldENvbXBvbmVudHMoIG1lMyArIG1l
MiwgbWU3ICsgbWU2LCBtZTExICsgbWUxMCwgbWUxNSArIG1lMTQgKS5ub3JtYWxpemUoKTsKKyAg
ICAgICAgfSwKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIGdldFdvcmxkUXVh
dGVybmlvbjogZnVuY3Rpb24gKCkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICB2YXIgcG9z
aXRpb24gPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdmFyIHNjYWxlID0gbmV3IFZlY3Rv
cjMoKTsKIAotICAgICAgICBpbnRlcnNlY3RzT2JqZWN0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gZ2V0V29ybGRRdWF0ZXJuaW9uKCB0YXJnZXQgKSB7CiAKLSAg
ICAgICAgICAgIHZhciBzcGhlcmUgPSBuZXcgU3BoZXJlKCk7CisgICAgICAgICAgICAgICAgaWYg
KCB0YXJnZXQgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
IGludGVyc2VjdHNPYmplY3QoIG9iamVjdCApIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc29s
ZS53YXJuKCAnVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFF1YXRlcm5pb24oKSB0YXJnZXQgaXMg
bm93IHJlcXVpcmVkJyApOworICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgUXVhdGVy
bmlvbigpOwogCi0gICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gb2JqZWN0Lmdlb21ldHJ5
OworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuYm91
bmRpbmdTcGhlcmUgPT09IG51bGwgKQotICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5jb21w
dXRlQm91bmRpbmdTcGhlcmUoKTsKKyAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpeFdv
cmxkKCB0cnVlICk7CiAKLSAgICAgICAgICAgICAgICBzcGhlcmUuY29weSggZ2VvbWV0cnkuYm91
bmRpbmdTcGhlcmUgKQotICAgICAgICAgICAgICAgICAgICAuYXBwbHlNYXRyaXg0KCBvYmplY3Qu
bWF0cml4V29ybGQgKTsKKyAgICAgICAgICAgICAgICB0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9z
ZSggcG9zaXRpb24sIHRhcmdldCwgc2NhbGUgKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLmludGVyc2VjdHNTcGhlcmUoIHNwaGVyZSApOworICAgICAgICAgICAgICAgIHJldHVybiB0
YXJnZXQ7CiAKICAgICAgICAgICAgIH07CiAKICAgICAgICAgfSgpLAogCi0gICAgICAgIGludGVy
c2VjdHNTcHJpdGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZ2V0V29ybGRTY2FsZTogZnVuY3Rp
b24gKCkgewogCi0gICAgICAgICAgICB2YXIgc3BoZXJlID0gbmV3IFNwaGVyZSgpOworICAgICAg
ICAgICAgdmFyIHBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciBxdWF0
ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
IGludGVyc2VjdHNTcHJpdGUoIHNwcml0ZSApIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
biBnZXRXb3JsZFNjYWxlKCB0YXJnZXQgKSB7CiAKLSAgICAgICAgICAgICAgICBzcGhlcmUuY2Vu
dGVyLnNldCggMCwgMCwgMCApOwotICAgICAgICAgICAgICAgIHNwaGVyZS5yYWRpdXMgPSAwLjcw
NzEwNjc4MTE4NjU0NzY7Ci0gICAgICAgICAgICAgICAgc3BoZXJlLmFwcGx5TWF0cml4NCggc3By
aXRlLm1hdHJpeFdvcmxkICk7CisgICAgICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVm
aW5lZCApIHsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmludGVyc2VjdHNTcGhlcmUo
IHNwaGVyZSApOworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5PYmpl
Y3QzRDogLmdldFdvcmxkU2NhbGUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOworICAgICAg
ICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB9KCksCisgICAgICAgICAgICAgICAgdGhpcy51
cGRhdGVNYXRyaXhXb3JsZCggdHJ1ZSApOwogCi0gICAgICAgIGludGVyc2VjdHNTcGhlcmU6IGZ1
bmN0aW9uICggc3BoZXJlICkgeworICAgICAgICAgICAgICAgIHRoaXMubWF0cml4V29ybGQuZGVj
b21wb3NlKCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgdGFyZ2V0ICk7CiAKLSAgICAgICAgICAgIHZh
ciBwbGFuZXMgPSB0aGlzLnBsYW5lczsKLSAgICAgICAgICAgIHZhciBjZW50ZXIgPSBzcGhlcmUu
Y2VudGVyOwotICAgICAgICAgICAgdmFyIG5lZ1JhZGl1cyA9IC0gc3BoZXJlLnJhZGl1czsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0OwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9
IDA7IGkgPCA2OyBpICsrICkgeworICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgIHZh
ciBkaXN0YW5jZSA9IHBsYW5lc1sgaSBdLmRpc3RhbmNlVG9Qb2ludCggY2VudGVyICk7CisgICAg
ICAgIH0oKSwKIAotICAgICAgICAgICAgICAgIGlmICggZGlzdGFuY2UgPCBuZWdSYWRpdXMgKSB7
CisgICAgICAgIGdldFdvcmxkRGlyZWN0aW9uOiBmdW5jdGlvbiAoIHRhcmdldCApIHsKIAotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIHRhcmdldCA9
PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNv
bnNvbGUud2FybiggJ1RIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGREaXJlY3Rpb24oKSB0YXJnZXQg
aXMgbm93IHJlcXVpcmVkJyApOworICAgICAgICAgICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3Iz
KCk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICB0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCB0cnVlICk7CiAKLSAgICAgICAgfSwKKyAgICAg
ICAgICAgIHZhciBlID0gdGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50czsKIAotICAgICAgICBpbnRl
cnNlY3RzQm94OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LnNldCgg
ZVsgOCBdLCBlWyA5IF0sIGVbIDEwIF0gKS5ub3JtYWxpemUoKTsKIAotICAgICAgICAgICAgdmFy
IHAxID0gbmV3IFZlY3RvcjMoKSwKLSAgICAgICAgICAgICAgICBwMiA9IG5ldyBWZWN0b3IzKCk7
CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBpbnRlcnNlY3RzQm94
KCBib3ggKSB7CisgICAgICAgIHJheWNhc3Q6IGZ1bmN0aW9uICgpIHt9LAogCi0gICAgICAgICAg
ICAgICAgdmFyIHBsYW5lcyA9IHRoaXMucGxhbmVzOworICAgICAgICB0cmF2ZXJzZTogZnVuY3Rp
b24gKCBjYWxsYmFjayApIHsKIAotICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8
IDY7IGkgKysgKSB7CisgICAgICAgICAgICBjYWxsYmFjayggdGhpcyApOwogCi0gICAgICAgICAg
ICAgICAgICAgIHZhciBwbGFuZSA9IHBsYW5lc1sgaSBdOworICAgICAgICAgICAgdmFyIGNoaWxk
cmVuID0gdGhpcy5jaGlsZHJlbjsKIAotICAgICAgICAgICAgICAgICAgICBwMS54ID0gcGxhbmUu
bm9ybWFsLnggPiAwID8gYm94Lm1pbi54IDogYm94Lm1heC54OwotICAgICAgICAgICAgICAgICAg
ICBwMi54ID0gcGxhbmUubm9ybWFsLnggPiAwID8gYm94Lm1heC54IDogYm94Lm1pbi54OwotICAg
ICAgICAgICAgICAgICAgICBwMS55ID0gcGxhbmUubm9ybWFsLnkgPiAwID8gYm94Lm1pbi55IDog
Ym94Lm1heC55OwotICAgICAgICAgICAgICAgICAgICBwMi55ID0gcGxhbmUubm9ybWFsLnkgPiAw
ID8gYm94Lm1heC55IDogYm94Lm1pbi55OwotICAgICAgICAgICAgICAgICAgICBwMS56ID0gcGxh
bmUubm9ybWFsLnogPiAwID8gYm94Lm1pbi56IDogYm94Lm1heC56OwotICAgICAgICAgICAgICAg
ICAgICBwMi56ID0gcGxhbmUubm9ybWFsLnogPiAwID8gYm94Lm1heC56IDogYm94Lm1pbi56Owor
ICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsg
aSArKyApIHsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgZDEgPSBwbGFuZS5kaXN0YW5jZVRv
UG9pbnQoIHAxICk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBkMiA9IHBsYW5lLmRpc3RhbmNl
VG9Qb2ludCggcDIgKTsKKyAgICAgICAgICAgICAgICBjaGlsZHJlblsgaSBdLnRyYXZlcnNlKCBj
YWxsYmFjayApOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIGlmIGJvdGggb3V0c2lkZSBwbGFu
ZSwgbm8gaW50ZXJzZWN0aW9uCisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCBkMSA8IDAgJiYgZDIgPCAwICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHRyYXZlcnNlVmlzaWJsZTogZnVuY3Rpb24g
KCBjYWxsYmFjayApIHsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
IHRoaXMudmlzaWJsZSA9PT0gZmFsc2UgKSByZXR1cm47CiAKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYWxsYmFjayggdGhpcyApOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuOwogCi0gICAgICAg
ICAgICB9OworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3Ro
OyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICB9KCksCisgICAgICAgICAgICAgICAgY2hpbGRy
ZW5bIGkgXS50cmF2ZXJzZVZpc2libGUoIGNhbGxiYWNrICk7CiAKLSAgICAgICAgY29udGFpbnNQ
b2ludDogZnVuY3Rpb24gKCBwb2ludCApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
dmFyIHBsYW5lcyA9IHRoaXMucGxhbmVzOworICAgICAgICB9LAogCi0gICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IDA7IGkgPCA2OyBpICsrICkgeworICAgICAgICB0cmF2ZXJzZUFuY2VzdG9yczog
ZnVuY3Rpb24gKCBjYWxsYmFjayApIHsKIAotICAgICAgICAgICAgICAgIGlmICggcGxhbmVzWyBp
IF0uZGlzdGFuY2VUb1BvaW50KCBwb2ludCApIDwgMCApIHsKKyAgICAgICAgICAgIHZhciBwYXJl
bnQgPSB0aGlzLnBhcmVudDsKIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBpZiAoIHBhcmVudCAhPT0gbnVsbCApIHsKIAotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBjYWxsYmFjayggcGFyZW50ICk7CiAKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBwYXJlbnQudHJhdmVyc2VBbmNlc3RvcnMoIGNhbGxiYWNrICk7CiAKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQogCi0gICAgICAgIH0KKyAgICAg
ICAgfSwKIAotICAgIH0gKTsKKyAgICAgICAgdXBkYXRlTWF0cml4OiBmdW5jdGlvbiAoKSB7CiAK
LSAgICB2YXIgYWxwaGFtYXBfZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZm
dXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xuI2VuZGlmXG4iOwor
ICAgICAgICAgICAgdGhpcy5tYXRyaXguY29tcG9zZSggdGhpcy5wb3NpdGlvbiwgdGhpcy5xdWF0
ZXJuaW9uLCB0aGlzLnNjYWxlICk7CiAKLSAgICB2YXIgYWxwaGFtYXBfcGFyc19mcmFnbWVudCA9
ICIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2Vu
ZGlmXG4iOworICAgICAgICAgICAgdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gdHJ1ZTsK
IAotICAgIHZhciBhbHBoYXRlc3RfZnJhZ21lbnQgPSAiI2lmZGVmIEFMUEhBVEVTVFxuXHRpZiAo
IGRpZmZ1c2VDb2xvci5hIDwgQUxQSEFURVNUICkgZGlzY2FyZDtcbiNlbmRpZlxuIjsKKyAgICAg
ICAgfSwKIAotICAgIHZhciBhb21hcF9mcmFnbWVudCA9ICIjaWZkZWYgVVNFX0FPTUFQXG5cdGZs
b2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4w
ICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZm
dXNlICo9IGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYg
ZGVmaW5lZCggUEhZU0lDQUwgKVxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2Vv
bWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5p
bmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmll
bnRPY2NsdXNpb24sIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuI2Vu
ZGlmXG4iOworICAgICAgICB1cGRhdGVNYXRyaXhXb3JsZDogZnVuY3Rpb24gKCBmb3JjZSApIHsK
IAotICAgIHZhciBhb21hcF9wYXJzX2ZyYWdtZW50ID0gIiNpZmRlZiBVU0VfQU9NQVBcblx0dW5p
Zm9ybSBzYW1wbGVyMkQgYW9NYXA7XG5cdHVuaWZvcm0gZmxvYXQgYW9NYXBJbnRlbnNpdHk7XG4j
ZW5kaWYiOworICAgICAgICAgICAgaWYgKCB0aGlzLm1hdHJpeEF1dG9VcGRhdGUgKSB0aGlzLnVw
ZGF0ZU1hdHJpeCgpOwogCi0gICAgdmFyIGJlZ2luX3ZlcnRleCA9ICJcbnZlYzMgdHJhbnNmb3Jt
ZWQgPSB2ZWMzKCBwb3NpdGlvbiApO1xuIjsKKyAgICAgICAgICAgIGlmICggdGhpcy5tYXRyaXhX
b3JsZE5lZWRzVXBkYXRlIHx8IGZvcmNlICkgewogCi0gICAgdmFyIGJlZ2lubm9ybWFsX3ZlcnRl
eCA9ICJcbnZlYzMgb2JqZWN0Tm9ybWFsID0gdmVjMyggbm9ybWFsICk7XG4iOworICAgICAgICAg
ICAgICAgIGlmICggdGhpcy5wYXJlbnQgPT09IG51bGwgKSB7CiAKLSAgICB2YXIgYnNkZnMgPSAi
ZmxvYXQgcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggY29uc3QgaW4g
ZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0
IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7XG5cdGlmKCBkZWNheUV4cG9uZW50ID4gMC4wICkg
e1xuI2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0XHRmbG9hdCBk
aXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBv
bmVudCApLCAwLjAxICk7XG5cdFx0ZmxvYXQgbWF4RGlzdGFuY2VDdXRvZmZGYWN0b3IgPSBwb3cy
KCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkg
KSApO1xuXHRcdHJldHVybiBkaXN0YW5jZUZhbGxvZmYgKiBtYXhEaXN0YW5jZUN1dG9mZkZhY3Rv
cjtcbiNlbHNlXG5cdFx0cmV0dXJuIHBvdyggc2F0dXJhdGUoIC1saWdodERpc3RhbmNlIC8gY3V0
b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApO1xuI2VuZGlmXG5cdH1cblx0cmV0
dXJuIDEuMDtcbn1cbnZlYzMgQlJERl9EaWZmdXNlX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlm
ZnVzZUNvbG9yICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcbn1c
bnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZs
b2F0IGRvdExIICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtNS41NTQ3MyAqIGRvdExI
IC0gNi45ODMxNiApICogZG90TEggKTtcblx0cmV0dXJuICggMS4wIC0gc3BlY3VsYXJDb2xvciAp
ICogZnJlc25lbCArIHNwZWN1bGFyQ29sb3I7XG59XG5mbG9hdCBHX0dHWF9TbWl0aCggY29uc3Qg
aW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25zdCBpbiBmbG9hdCBkb3RO
ViApIHtcblx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xuXHRmbG9hdCBnbCA9IGRvdE5MICsg
c3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdGZsb2F0IGd2ID0g
ZG90TlYgKyBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0cmV0
dXJuIDEuMCAvICggZ2wgKiBndiApO1xufVxuZmxvYXQgR19HR1hfU21pdGhDb3JyZWxhdGVkKCBj
b25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0
IGRvdE5WICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGd2ID0gZG90
TkwgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0ZmxvYXQg
Z2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xu
XHRyZXR1cm4gMC41IC8gbWF4KCBndiArIGdsLCBFUFNJTE9OICk7XG59XG5mbG9hdCBEX0dHWCgg
Y29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBh
MiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGRlbm9tID0gcG93MiggZG90TkggKSAqICggYTIg
LSAxLjAgKSArIDEuMDtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9t
ICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfR0dYKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGlu
Y2lkZW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGlu
IHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9h
dCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUo
IGluY2lkZW50TGlnaHQuZGlyZWN0aW9uICsgZ2VvbWV0cnkudmlld0RpciApO1xuXHRmbG9hdCBk
b3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgaW5jaWRlbnRMaWdodC5kaXJl
Y3Rpb24gKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1h
bCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCgg
Z2VvbWV0cnkubm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90TEggPSBzYXR1cmF0ZSgg
ZG90KCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiwgaGFsZkRpciApICk7XG5cdHZlYzMgRiA9IEZf
U2NobGljayggc3BlY3VsYXJDb2xvciwgZG90TEggKTtcblx0ZmxvYXQgRyA9IEdfR0dYX1NtaXRo
Q29ycmVsYXRlZCggYWxwaGEsIGRvdE5MLCBkb3ROViApO1xuXHRmbG9hdCBEID0gRF9HR1goIGFs
cGhhLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbnZlYzIgTFRDX1V2KCBj
b25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNz
ICkge1xuXHRjb25zdCBmbG9hdCBMVVRfU0laRSAgPSA2NC4wO1xuXHRjb25zdCBmbG9hdCBMVVRf
U0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTtcblx0Y29uc3QgZmxvYXQgTFVU
X0JJQVMgID0gMC41IC8gTFVUX1NJWkU7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCgg
TiwgViApICk7XG5cdHZlYzIgdXYgPSB2ZWMyKCByb3VnaG5lc3MsIHNxcnQoIDEuMCAtIGRvdE5W
ICkgKTtcblx0dXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xuXHRyZXR1cm4gdXY7XG59
XG5mbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtc
blx0ZmxvYXQgbCA9IGxlbmd0aCggZiApO1xuXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkg
LyAoIGwgKyAxLjAgKSwgMC4wICk7XG59XG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3Rvcigg
Y29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcblx0ZmxvYXQgeCA9IGRvdCgg
djEsIHYyICk7XG5cdGZsb2F0IHkgPSBhYnMoIHggKTtcblx0ZmxvYXQgYSA9IDAuODU0Mzk4NSAr
ICggMC40OTY1MTU1ICsgMC4wMTQ1MjA2ICogeSApICogeTtcblx0ZmxvYXQgYiA9IDMuNDE3NTk0
MCArICggNC4xNjE2NzI0ICsgeSApICogeTtcblx0ZmxvYXQgdiA9IGEgLyBiO1xuXHRmbG9hdCB0
aGV0YV9zaW50aGV0YSA9ICggeCA+IDAuMCApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCBtYXgo
IDEuMCAtIHggKiB4LCAxZS03ICkgKSAtIHY7XG5cdHJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0
aGV0YV9zaW50aGV0YTtcbn1cbnZlYzMgTFRDX0V2YWx1YXRlKCBjb25zdCBpbiB2ZWMzIE4sIGNv
bnN0IGluIHZlYzMgViwgY29uc3QgaW4gdmVjMyBQLCBjb25zdCBpbiBtYXQzIG1JbnYsIGNvbnN0
IGluIHZlYzMgcmVjdENvb3Jkc1sgNCBdICkge1xuXHR2ZWMzIHYxID0gcmVjdENvb3Jkc1sgMSBd
IC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENv
b3Jkc1sgMCBdO1xuXHR2ZWMzIGxpZ2h0Tm9ybWFsID0gY3Jvc3MoIHYxLCB2MiApO1xuXHRpZigg
ZG90KCBsaWdodE5vcm1hbCwgUCAtIHJlY3RDb29yZHNbIDAgXSApIDwgMC4wICkgcmV0dXJuIHZl
YzMoIDAuMCApO1xuXHR2ZWMzIFQxLCBUMjtcblx0VDEgPSBub3JtYWxpemUoIFYgLSBOICogZG90
KCBWLCBOICkgKTtcblx0VDIgPSAtIGNyb3NzKCBOLCBUMSApO1xuXHRtYXQzIG1hdCA9IG1JbnYg
KiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApO1xuXHR2ZWMzIGNvb3Jkc1sgNCBd
O1xuXHRjb29yZHNbIDAgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMCBdIC0gUCApO1xuXHRjb29y
ZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApO1xuXHRjb29yZHNbIDIgXSA9
IG1hdCAqICggcmVjdENvb3Jkc1sgMiBdIC0gUCApO1xuXHRjb29yZHNbIDMgXSA9IG1hdCAqICgg
cmVjdENvb3Jkc1sgMyBdIC0gUCApO1xuXHRjb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRz
WyAwIF0gKTtcblx0Y29vcmRzWyAxIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMSBdICk7XG5cdGNv
b3Jkc1sgMiBdID0gbm9ybWFsaXplKCBjb29yZHNbIDIgXSApO1xuXHRjb29yZHNbIDMgXSA9IG5v
cm1hbGl6ZSggY29vcmRzWyAzIF0gKTtcblx0dmVjMyB2ZWN0b3JGb3JtRmFjdG9yID0gdmVjMygg
MC4wICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBj
b29yZHNbIDAgXSwgY29vcmRzWyAxIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRn
ZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApO1xuXHR2ZWN0b3JG
b3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAyIF0sIGNvb3Jk
c1sgMyBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9y
KCBjb29yZHNbIDMgXSwgY29vcmRzWyAwIF0gKTtcblx0ZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBw
ZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7XG5cdHJldHVybiB2ZWMzKCBy
ZXN1bHQgKTtcbn1cbnZlYzMgQlJERl9TcGVjdWxhcl9HR1hfRW52aXJvbm1lbnQoIGNvbnN0IGlu
IEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwg
Y29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBk
b3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdGNvbnN0IHZlYzQg
YzAgPSB2ZWM0KCAtIDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAwLjAyMiApO1xuXHRjb25zdCB2ZWM0
IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTtcblx0dmVjNCByID0gcm91Z2hu
ZXNzICogYzAgKyBjMTtcblx0ZmxvYXQgYTAwNCA9IG1pbiggci54ICogci54LCBleHAyKCAtIDku
MjggKiBkb3ROViApICkgKiByLnggKyByLnk7XG5cdHZlYzIgQUIgPSB2ZWMyKCAtMS4wNCwgMS4w
NCApICogYTAwNCArIHIuenc7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogQUIueCArIEFCLnk7
XG59XG5mbG9hdCBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICkge1xuXHRyZXR1cm4gMC4yNTtcbn1c
bmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBm
bG9hdCBkb3ROSCApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAu
NSArIDEuMCApICogcG93KCBkb3ROSCwgc2hpbmluZXNzICk7XG59XG52ZWMzIEJSREZfU3BlY3Vs
YXJfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBpbmNpZGVudExpZ2h0LCBjb25z
dCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29s
b3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFs
aXplKCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiArIGdlb21ldHJ5LnZpZXdEaXIgKTtcblx0Zmxv
YXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGhhbGZEaXIgKSApO1xu
XHRmbG9hdCBkb3RMSCA9IHNhdHVyYXRlKCBkb3QoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uLCBo
YWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCBkb3RMSCAp
O1xuXHRmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApO1xuXHRmbG9hdCBEID0gRF9C
bGlublBob25nKCBzaGluaW5lc3MsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBHICogRCApO1xu
fVxuZmxvYXQgR0dYUm91Z2huZXNzVG9CbGlubkV4cG9uZW50KCBjb25zdCBpbiBmbG9hdCBnZ3hS
b3VnaG5lc3MgKSB7XG5cdHJldHVybiAoIDIuMCAvIHBvdzIoIGdneFJvdWdobmVzcyArIDAuMDAw
MSApIC0gMi4wICk7XG59XG5mbG9hdCBCbGlubkV4cG9uZW50VG9HR1hSb3VnaG5lc3MoIGNvbnN0
IGluIGZsb2F0IGJsaW5uRXhwb25lbnQgKSB7XG5cdHJldHVybiBzcXJ0KCAyLjAgLyAoIGJsaW5u
RXhwb25lbnQgKyAyLjAgKSApO1xufVxuIjsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRy
aXhXb3JsZC5jb3B5KCB0aGlzLm1hdHJpeCApOwogCi0gICAgdmFyIGJ1bXBtYXBfcGFyc19mcmFn
bWVudCA9ICIjaWZkZWYgVVNFX0JVTVBNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtc
blx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XG5cdHZlYzIgZEhkeHlfZndkKCkge1xuXHRcdHZl
YzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcblx0XHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XG5c
dFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xu
XHRcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNU
ZHggKS54IC0gSGxsO1xuXHRcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVt
cE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xuXHRcdHJldHVybiB2ZWMyKCBkQngsIGRCeSAp
O1xuXHR9XG5cdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJm
X25vcm0sIHZlYzIgZEhkeHkgKSB7XG5cdFx0dmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3Vy
Zl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApO1xuXHRc
dHZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3Mu
eSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZOID0gc3VyZl9ub3JtO1xuXHRc
dHZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTtcblx0XHR2ZWMzIFIyID0gY3Jvc3MoIHZO
LCB2U2lnbWFYICk7XG5cdFx0ZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKTtcblx0XHRm
RGV0ICo9ICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHR2ZWMz
IHZHcmFkID0gc2lnbiggZkRldCApICogKCBkSGR4eS54ICogUjEgKyBkSGR4eS55ICogUjIgKTtc
blx0XHRyZXR1cm4gbm9ybWFsaXplKCBhYnMoIGZEZXQgKSAqIHN1cmZfbm9ybSAtIHZHcmFkICk7
XG5cdH1cbiNlbmRpZlxuIjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgdmFyIGNs
aXBwaW5nX3BsYW5lc19mcmFnbWVudCA9ICIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0
dmVjNCBwbGFuZTtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkg
PCBVTklPTl9DTElQUElOR19QTEFORVM7IGkgKysgKSB7XG5cdFx0cGxhbmUgPSBjbGlwcGluZ1Bs
YW5lc1sgaSBdO1xuXHRcdGlmICggZG90KCB2Vmlld1Bvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBs
YW5lLncgKSBkaXNjYXJkO1xuXHR9XG5cdCNpZiBVTklPTl9DTElQUElOR19QTEFORVMgPCBOVU1f
Q0xJUFBJTkdfUExBTkVTXG5cdFx0Ym9vbCBjbGlwcGVkID0gdHJ1ZTtcblx0XHQjcHJhZ21hIHVu
cm9sbF9sb29wXG5cdFx0Zm9yICggaW50IGkgPSBVTklPTl9DTElQUElOR19QTEFORVM7IGkgPCBO
VU1fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xuXHRcdFx0cGxhbmUgPSBjbGlwcGluZ1BsYW5l
c1sgaSBdO1xuXHRcdFx0Y2xpcHBlZCA9ICggZG90KCB2Vmlld1Bvc2l0aW9uLCBwbGFuZS54eXog
KSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkO1xuXHRcdH1cblx0XHRpZiAoIGNsaXBwZWQgKSBkaXNj
YXJkO1xuXHQjZW5kaWZcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRy
aXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKCB0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCwgdGhpcy5t
YXRyaXggKTsKIAotICAgIHZhciBjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudCA9ICIjaWYg
TlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0I2lmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAh
IGRlZmluZWQoIFBIT05HIClcblx0XHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcblx0I2Vu
ZGlmXG5cdHVuaWZvcm0gdmVjNCBjbGlwcGluZ1BsYW5lc1sgTlVNX0NMSVBQSU5HX1BMQU5FUyBd
O1xuI2VuZGlmXG4iOworICAgICAgICAgICAgICAgIH0KIAotICAgIHZhciBjbGlwcGluZ19wbGFu
ZXNfcGFyc192ZXJ0ZXggPSAiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwICYmICEgZGVmaW5l
ZCggUEhZU0lDQUwgKSAmJiAhIGRlZmluZWQoIFBIT05HIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3
UG9zaXRpb247XG4jZW5kaWZcbiI7CisgICAgICAgICAgICAgICAgdGhpcy5tYXRyaXhXb3JsZE5l
ZWRzVXBkYXRlID0gZmFsc2U7CiAKLSAgICB2YXIgY2xpcHBpbmdfcGxhbmVzX3ZlcnRleCA9ICIj
aWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAgJiYgISBkZWZpbmVkKCBQSFlTSUNBTCApICYmICEg
ZGVmaW5lZCggUEhPTkcgKVxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbiNl
bmRpZlxuIjsKKyAgICAgICAgICAgICAgICBmb3JjZSA9IHRydWU7CiAKLSAgICB2YXIgY29sb3Jf
ZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9DT0xPUlxuXHRkaWZmdXNlQ29sb3IucmdiICo9IHZDb2xv
cjtcbiNlbmRpZiI7CisgICAgICAgICAgICB9CiAKLSAgICB2YXIgY29sb3JfcGFyc19mcmFnbWVu
dCA9ICIjaWZkZWYgVVNFX0NPTE9SXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWZcbiI7
CisgICAgICAgICAgICAvLyB1cGRhdGUgY2hpbGRyZW4KIAotICAgIHZhciBjb2xvcl9wYXJzX3Zl
cnRleCA9ICIjaWZkZWYgVVNFX0NPTE9SXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWYi
OworICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjsKIAotICAgIHZhciBj
b2xvcl92ZXJ0ZXggPSAiI2lmZGVmIFVTRV9DT0xPUlxuXHR2Q29sb3IueHl6ID0gY29sb3IueHl6
O1xuI2VuZGlmIjsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxl
bmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICB2YXIgY29tbW9uID0gIiNkZWZpbmUgUEkgMy4x
NDE1OTI2NTM1OVxuI2RlZmluZSBQSTIgNi4yODMxODUzMDcxOFxuI2RlZmluZSBQSV9IQUxGIDEu
NTcwNzk2MzI2Nzk0OVxuI2RlZmluZSBSRUNJUFJPQ0FMX1BJIDAuMzE4MzA5ODg2MThcbiNkZWZp
bmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NFxuI2RlZmluZSBMT0cyIDEuNDQyNjk1XG4jZGVm
aW5lIEVQU0lMT04gMWUtNlxuI2RlZmluZSBzYXR1cmF0ZShhKSBjbGFtcCggYSwgMC4wLCAxLjAg
KVxuI2RlZmluZSB3aGl0ZUNvbXBsaW1lbnQoYSkgKCAxLjAgLSBzYXR1cmF0ZSggYSApIClcbmZs
b2F0IHBvdzIoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4Kng7IH1cbmZsb2F0IHBvdzMo
IGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4KngqeDsgfVxuZmxvYXQgcG93NCggY29uc3Qg
aW4gZmxvYXQgeCApIHsgZmxvYXQgeDIgPSB4Kng7IHJldHVybiB4Mip4MjsgfVxuZmxvYXQgYXZl
cmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAu
MzMzMyApICk7IH1cbmhpZ2hwIGZsb2F0IHJhbmQoIGNvbnN0IGluIHZlYzIgdXYgKSB7XG5cdGNv
bnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1Mztc
blx0aGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCgg
ZHQsIFBJICk7XG5cdHJldHVybiBmcmFjdChzaW4oc24pICogYyk7XG59XG5zdHJ1Y3QgSW5jaWRl
bnRMaWdodCB7XG5cdHZlYzMgY29sb3I7XG5cdHZlYzMgZGlyZWN0aW9uO1xuXHRib29sIHZpc2li
bGU7XG59O1xuc3RydWN0IFJlZmxlY3RlZExpZ2h0IHtcblx0dmVjMyBkaXJlY3REaWZmdXNlO1xu
XHR2ZWMzIGRpcmVjdFNwZWN1bGFyO1xuXHR2ZWMzIGluZGlyZWN0RGlmZnVzZTtcblx0dmVjMyBp
bmRpcmVjdFNwZWN1bGFyO1xufTtcbnN0cnVjdCBHZW9tZXRyaWNDb250ZXh0IHtcblx0dmVjMyBw
b3NpdGlvbjtcblx0dmVjMyBub3JtYWw7XG5cdHZlYzMgdmlld0Rpcjtcbn07XG52ZWMzIHRyYW5z
Zm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXHRyZXR1cm4g
bm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcbn1cbnZlYzMg
aW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkg
e1xuXHRyZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQoIGRpciwgMC4wICkgKiBtYXRyaXggKS54eXog
KTtcbn1cbnZlYzMgcHJvamVjdE9uUGxhbmUoaW4gdmVjMyBwb2ludCwgaW4gdmVjMyBwb2ludE9u
UGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdGZsb2F0IGRpc3RhbmNlID0gZG90KCBw
bGFuZU5vcm1hbCwgcG9pbnQgLSBwb2ludE9uUGxhbmUgKTtcblx0cmV0dXJuIC0gZGlzdGFuY2Ug
KiBwbGFuZU5vcm1hbCArIHBvaW50O1xufVxuZmxvYXQgc2lkZU9mUGxhbmUoIGluIHZlYzMgcG9p
bnQsIGluIHZlYzMgcG9pbnRPblBsYW5lLCBpbiB2ZWMzIHBsYW5lTm9ybWFsICkge1xuXHRyZXR1
cm4gc2lnbiggZG90KCBwb2ludCAtIHBvaW50T25QbGFuZSwgcGxhbmVOb3JtYWwgKSApO1xufVxu
dmVjMyBsaW5lUGxhbmVJbnRlcnNlY3QoIGluIHZlYzMgcG9pbnRPbkxpbmUsIGluIHZlYzMgbGlu
ZURpcmVjdGlvbiwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7
XG5cdHJldHVybiBsaW5lRGlyZWN0aW9uICogKCBkb3QoIHBsYW5lTm9ybWFsLCBwb2ludE9uUGxh
bmUgLSBwb2ludE9uTGluZSApIC8gZG90KCBwbGFuZU5vcm1hbCwgbGluZURpcmVjdGlvbiApICkg
KyBwb2ludE9uTGluZTtcbn1cbm1hdDMgdHJhbnNwb3NlTWF0MyggY29uc3QgaW4gbWF0MyBtICkg
e1xuXHRtYXQzIHRtcDtcblx0dG1wWyAwIF0gPSB2ZWMzKCBtWyAwIF0ueCwgbVsgMSBdLngsIG1b
IDIgXS54ICk7XG5cdHRtcFsgMSBdID0gdmVjMyggbVsgMCBdLnksIG1bIDEgXS55LCBtWyAyIF0u
eSApO1xuXHR0bXBbIDIgXSA9IHZlYzMoIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBdLnogKTtc
blx0cmV0dXJuIHRtcDtcbn1cbmZsb2F0IGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2UoIGNvbnN0
IGluIHZlYzMgY29sb3IgKSB7XG5cdHZlYzMgd2VpZ2h0cyA9IHZlYzMoIDAuMjEyNiwgMC43MTUy
LCAwLjA3MjIgKTtcblx0cmV0dXJuIGRvdCggd2VpZ2h0cywgY29sb3IucmdiICk7XG59XG4iOwor
ICAgICAgICAgICAgICAgIGNoaWxkcmVuWyBpIF0udXBkYXRlTWF0cml4V29ybGQoIGZvcmNlICk7
CiAKLSAgICB2YXIgY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50ID0gIiNpZmRlZiBFTlZNQVBf
VFlQRV9DVUJFX1VWXG4jZGVmaW5lIGN1YmVVVl90ZXh0dXJlU2l6ZSAoMTAyNC4wKVxuaW50IGdl
dEZhY2VGcm9tRGlyZWN0aW9uKHZlYzMgZGlyZWN0aW9uKSB7XG5cdHZlYzMgYWJzRGlyZWN0aW9u
ID0gYWJzKGRpcmVjdGlvbik7XG5cdGludCBmYWNlID0gLTE7XG5cdGlmKCBhYnNEaXJlY3Rpb24u
eCA+IGFic0RpcmVjdGlvbi56ICkge1xuXHRcdGlmKGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0
aW9uLnkgKVxuXHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMCA6IDM7XG5cdFx0ZWxz
ZVxuXHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMSA6IDQ7XG5cdH1cblx0ZWxzZSB7
XG5cdFx0aWYoYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApXG5cdFx0XHRmYWNlID0g
ZGlyZWN0aW9uLnogPiAwLjAgPyAyIDogNTtcblx0XHRlbHNlXG5cdFx0XHRmYWNlID0gZGlyZWN0
aW9uLnkgPiAwLjAgPyAxIDogNDtcblx0fVxuXHRyZXR1cm4gZmFjZTtcbn1cbiNkZWZpbmUgY3Vi
ZVVWX21heExvZHMxICAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAxLjApXG4jZGVm
aW5lIGN1YmVVVl9yYW5nZUNsYW1wIChleHAyKCg2LjAgLSAxLjApICogMi4wKSlcbnZlYzIgTWlw
TGV2ZWxJbmZvKCB2ZWMzIHZlYywgZmxvYXQgcm91Z2huZXNzTGV2ZWwsIGZsb2F0IHJvdWdobmVz
cyApIHtcblx0ZmxvYXQgc2NhbGUgPSBleHAyKGN1YmVVVl9tYXhMb2RzMSAtIHJvdWdobmVzc0xl
dmVsKTtcblx0ZmxvYXQgZHhSb3VnaG5lc3MgPSBkRmR4KHJvdWdobmVzcyk7XG5cdGZsb2F0IGR5
Um91Z2huZXNzID0gZEZkeShyb3VnaG5lc3MpO1xuXHR2ZWMzIGR4ID0gZEZkeCggdmVjICogc2Nh
bGUgKiBkeFJvdWdobmVzcyApO1xuXHR2ZWMzIGR5ID0gZEZkeSggdmVjICogc2NhbGUgKiBkeVJv
dWdobmVzcyApO1xuXHRmbG9hdCBkID0gbWF4KCBkb3QoIGR4LCBkeCApLCBkb3QoIGR5LCBkeSAp
ICk7XG5cdGQgPSBjbGFtcChkLCAxLjAsIGN1YmVVVl9yYW5nZUNsYW1wKTtcblx0ZmxvYXQgbWlw
TGV2ZWwgPSAwLjUgKiBsb2cyKGQpO1xuXHRyZXR1cm4gdmVjMihmbG9vcihtaXBMZXZlbCksIGZy
YWN0KG1pcExldmVsKSk7XG59XG4jZGVmaW5lIGN1YmVVVl9tYXhMb2RzMiAobG9nMihjdWJlVVZf
dGV4dHVyZVNpemUqMC4yNSkgLSAyLjApXG4jZGVmaW5lIGN1YmVVVl9yY3BUZXh0dXJlU2l6ZSAo
MS4wIC8gY3ViZVVWX3RleHR1cmVTaXplKVxudmVjMiBnZXRDdWJlVVYodmVjMyBkaXJlY3Rpb24s
IGZsb2F0IHJvdWdobmVzc0xldmVsLCBmbG9hdCBtaXBMZXZlbCkge1xuXHRtaXBMZXZlbCA9IHJv
dWdobmVzc0xldmVsID4gY3ViZVVWX21heExvZHMyIC0gMy4wID8gMC4wIDogbWlwTGV2ZWw7XG5c
dGZsb2F0IGEgPSAxNi4wICogY3ViZVVWX3JjcFRleHR1cmVTaXplO1xuXHR2ZWMyIGV4cDJfcGFj
a2VkID0gZXhwMiggdmVjMiggcm91Z2huZXNzTGV2ZWwsIG1pcExldmVsICkgKTtcblx0dmVjMiBy
Y3BfZXhwMl9wYWNrZWQgPSB2ZWMyKCAxLjAgKSAvIGV4cDJfcGFja2VkO1xuXHRmbG9hdCBwb3dT
Y2FsZSA9IGV4cDJfcGFja2VkLnggKiBleHAyX3BhY2tlZC55O1xuXHRmbG9hdCBzY2FsZSA9IHJj
cF9leHAyX3BhY2tlZC54ICogcmNwX2V4cDJfcGFja2VkLnkgKiAwLjI1O1xuXHRmbG9hdCBtaXBP
ZmZzZXQgPSAwLjc1KigxLjAgLSByY3BfZXhwMl9wYWNrZWQueSkgKiByY3BfZXhwMl9wYWNrZWQu
eDtcblx0Ym9vbCBiUmVzID0gbWlwTGV2ZWwgPT0gMC4wO1xuXHRzY2FsZSA9ICBiUmVzICYmIChz
Y2FsZSA8IGEpID8gYSA6IHNjYWxlO1xuXHR2ZWMzIHI7XG5cdHZlYzIgb2Zmc2V0O1xuXHRpbnQg
ZmFjZSA9IGdldEZhY2VGcm9tRGlyZWN0aW9uKGRpcmVjdGlvbik7XG5cdGZsb2F0IHJjcFBvd1Nj
YWxlID0gMS4wIC8gcG93U2NhbGU7XG5cdGlmKCBmYWNlID09IDApIHtcblx0XHRyID0gdmVjMyhk
aXJlY3Rpb24ueCwgLWRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSk7XG5cdFx0b2Zmc2V0ID0gdmVj
MigwLjArbWlwT2Zmc2V0LDAuNzUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVz
ICYmIChvZmZzZXQueSA8IDIuMCphKSA/IGEgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIGlmKCBm
YWNlID09IDEpIHtcblx0XHRyID0gdmVjMyhkaXJlY3Rpb24ueSwgZGlyZWN0aW9uLngsIGRpcmVj
dGlvbi56KTtcblx0XHRvZmZzZXQgPSB2ZWMyKHNjYWxlK21pcE9mZnNldCwgMC43NSAqIHJjcFBv
d1NjYWxlKTtcblx0XHRvZmZzZXQueSA9IGJSZXMgJiYgKG9mZnNldC55IDwgMi4wKmEpID8gYSA6
IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgPT0gMikge1xuXHRcdHIgPSB2ZWMzKGRp
cmVjdGlvbi56LCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCA9IHZlYzIo
Mi4wKnNjYWxlK21pcE9mZnNldCwgMC43NSAqIHJjcFBvd1NjYWxlKTtcblx0XHRvZmZzZXQueSA9
IGJSZXMgJiYgKG9mZnNldC55IDwgMi4wKmEpID8gYSA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2Ug
aWYoIGZhY2UgPT0gMykge1xuXHRcdHIgPSB2ZWMzKGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiwg
ZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCA9IHZlYzIoMC4wK21pcE9mZnNldCwwLjUgKiByY3BQ
b3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYmIChvZmZzZXQueSA8IDIuMCphKSA/IDAu
MCA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgPT0gNCkge1xuXHRcdHIgPSB2ZWMz
KGRpcmVjdGlvbi55LCBkaXJlY3Rpb24ueCwgLWRpcmVjdGlvbi56KTtcblx0XHRvZmZzZXQgPSB2
ZWMyKHNjYWxlK21pcE9mZnNldCwgMC41ICogcmNwUG93U2NhbGUpO1xuXHRcdG9mZnNldC55ID0g
YlJlcyAmJiAob2Zmc2V0LnkgPCAyLjAqYSkgPyAwLjAgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNl
IHtcblx0XHRyID0gdmVjMyhkaXJlY3Rpb24ueiwgLWRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueSk7
XG5cdFx0b2Zmc2V0ID0gdmVjMigyLjAqc2NhbGUrbWlwT2Zmc2V0LCAwLjUgKiByY3BQb3dTY2Fs
ZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYmIChvZmZzZXQueSA8IDIuMCphKSA/IDAuMCA6IG9m
ZnNldC55O1xuXHR9XG5cdHIgPSBub3JtYWxpemUocik7XG5cdGZsb2F0IHRleGVsT2Zmc2V0ID0g
MC41ICogY3ViZVVWX3JjcFRleHR1cmVTaXplO1xuXHR2ZWMyIHMgPSAoIHIueXogLyBhYnMoIHIu
eCApICsgdmVjMiggMS4wICkgKSAqIDAuNTtcblx0dmVjMiBiYXNlID0gb2Zmc2V0ICsgdmVjMigg
dGV4ZWxPZmZzZXQgKTtcblx0cmV0dXJuIGJhc2UgKyBzICogKCBzY2FsZSAtIDIuMCAqIHRleGVs
T2Zmc2V0ICk7XG59XG4jZGVmaW5lIGN1YmVVVl9tYXhMb2RzMyAobG9nMihjdWJlVVZfdGV4dHVy
ZVNpemUqMC4yNSkgLSAzLjApXG52ZWM0IHRleHR1cmVDdWJlVVYodmVjMyByZWZsZWN0ZWREaXJl
Y3Rpb24sIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgcm91Z2huZXNzVmFsID0gcm91Z2hu
ZXNzKiBjdWJlVVZfbWF4TG9kczM7XG5cdGZsb2F0IHIxID0gZmxvb3Iocm91Z2huZXNzVmFsKTtc
blx0ZmxvYXQgcjIgPSByMSArIDEuMDtcblx0ZmxvYXQgdCA9IGZyYWN0KHJvdWdobmVzc1ZhbCk7
XG5cdHZlYzIgbWlwSW5mbyA9IE1pcExldmVsSW5mbyhyZWZsZWN0ZWREaXJlY3Rpb24sIHIxLCBy
b3VnaG5lc3MpO1xuXHRmbG9hdCBzID0gbWlwSW5mby55O1xuXHRmbG9hdCBsZXZlbDAgPSBtaXBJ
bmZvLng7XG5cdGZsb2F0IGxldmVsMSA9IGxldmVsMCArIDEuMDtcblx0bGV2ZWwxID0gbGV2ZWwx
ID4gNS4wID8gNS4wIDogbGV2ZWwxO1xuXHRsZXZlbDAgKz0gbWluKCBmbG9vciggcyArIDAuNSAp
LCA1LjAgKTtcblx0dmVjMiB1dl8xMCA9IGdldEN1YmVVVihyZWZsZWN0ZWREaXJlY3Rpb24sIHIx
LCBsZXZlbDApO1xuXHR2ZWM0IGNvbG9yMTAgPSBlbnZNYXBUZXhlbFRvTGluZWFyKHRleHR1cmUy
RChlbnZNYXAsIHV2XzEwKSk7XG5cdHZlYzIgdXZfMjAgPSBnZXRDdWJlVVYocmVmbGVjdGVkRGly
ZWN0aW9uLCByMiwgbGV2ZWwwKTtcblx0dmVjNCBjb2xvcjIwID0gZW52TWFwVGV4ZWxUb0xpbmVh
cih0ZXh0dXJlMkQoZW52TWFwLCB1dl8yMCkpO1xuXHR2ZWM0IHJlc3VsdCA9IG1peChjb2xvcjEw
LCBjb2xvcjIwLCB0KTtcblx0cmV0dXJuIHZlYzQocmVzdWx0LnJnYiwgMS4wKTtcbn1cbiNlbmRp
ZlxuIjsKKyAgICAgICAgICAgIH0KIAotICAgIHZhciBkZWZhdWx0bm9ybWFsX3ZlcnRleCA9ICJ2
ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogb2JqZWN0Tm9ybWFsO1xuI2lm
ZGVmIEZMSVBfU0lERURcblx0dHJhbnNmb3JtZWROb3JtYWwgPSAtIHRyYW5zZm9ybWVkTm9ybWFs
O1xuI2VuZGlmXG4iOworICAgICAgICB9LAogCi0gICAgdmFyIGRpc3BsYWNlbWVudG1hcF9wYXJz
X3ZlcnRleCA9ICIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIy
RCBkaXNwbGFjZW1lbnRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50U2NhbGU7XG5c
dHVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50QmlhcztcbiNlbmRpZlxuIjsKKyAgICAgICAgdXBk
YXRlV29ybGRNYXRyaXg6IGZ1bmN0aW9uICggdXBkYXRlUGFyZW50cywgdXBkYXRlQ2hpbGRyZW4g
KSB7CiAKLSAgICB2YXIgZGlzcGxhY2VtZW50bWFwX3ZlcnRleCA9ICIjaWZkZWYgVVNFX0RJU1BM
QUNFTUVOVE1BUFxuXHR0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICog
KCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUg
KyBkaXNwbGFjZW1lbnRCaWFzICk7XG4jZW5kaWZcbiI7CisgICAgICAgICAgICB2YXIgcGFyZW50
ID0gdGhpcy5wYXJlbnQ7CiAKLSAgICB2YXIgZW1pc3NpdmVtYXBfZnJhZ21lbnQgPSAiI2lmZGVm
IFVTRV9FTUlTU0lWRU1BUFxuXHR2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNz
aXZlTWFwLCB2VXYgKTtcblx0ZW1pc3NpdmVDb2xvci5yZ2IgPSBlbWlzc2l2ZU1hcFRleGVsVG9M
aW5lYXIoIGVtaXNzaXZlQ29sb3IgKS5yZ2I7XG5cdHRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBl
bWlzc2l2ZUNvbG9yLnJnYjtcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgIGlmICggdXBkYXRlUGFy
ZW50cyA9PT0gdHJ1ZSAmJiBwYXJlbnQgIT09IG51bGwgKSB7CiAKLSAgICB2YXIgZW1pc3NpdmVt
YXBfcGFyc19mcmFnbWVudCA9ICIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHVuaWZvcm0gc2Ft
cGxlcjJEIGVtaXNzaXZlTWFwO1xuI2VuZGlmXG4iOworICAgICAgICAgICAgICAgIHBhcmVudC51
cGRhdGVXb3JsZE1hdHJpeCggdHJ1ZSwgZmFsc2UgKTsKIAotICAgIHZhciBlbmNvZGluZ3NfZnJh
Z21lbnQgPSAiICBnbF9GcmFnQ29sb3IgPSBsaW5lYXJUb091dHB1dFRleGVsKCBnbF9GcmFnQ29s
b3IgKTtcbiI7CisgICAgICAgICAgICB9CiAKLSAgICB2YXIgZW5jb2RpbmdzX3BhcnNfZnJhZ21l
bnQgPSAiXG52ZWM0IExpbmVhclRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4g
dmFsdWU7XG59XG52ZWM0IEdhbW1hVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IGdh
bW1hRmFjdG9yICkge1xuXHRyZXR1cm4gdmVjNCggcG93KCB2YWx1ZS54eXosIHZlYzMoIGdhbW1h
RmFjdG9yICkgKSwgdmFsdWUudyApO1xufVxudmVjNCBMaW5lYXJUb0dhbW1hKCBpbiB2ZWM0IHZh
bHVlLCBpbiBmbG9hdCBnYW1tYUZhY3RvciApIHtcblx0cmV0dXJuIHZlYzQoIHBvdyggdmFsdWUu
eHl6LCB2ZWMzKCAxLjAgLyBnYW1tYUZhY3RvciApICksIHZhbHVlLncgKTtcbn1cbnZlYzQgc1JH
QlRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZh
bHVlLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQg
KSApLCB2YWx1ZS5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVl
LnJnYiwgdmVjMyggMC4wNDA0NSApICkgKSApLCB2YWx1ZS53ICk7XG59XG52ZWM0IExpbmVhclRv
c1JHQiggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5y
Z2IsIHZlYzMoIDAuNDE2NjYgKSApICogMS4wNTUgLSB2ZWMzKCAwLjA1NSApLCB2YWx1ZS5yZ2Ig
KiAxMi45MiwgdmVjMyggbGVzc1RoYW5FcXVhbCggdmFsdWUucmdiLCB2ZWMzKCAwLjAwMzEzMDgg
KSApICkgKSwgdmFsdWUudyApO1xufVxudmVjNCBSR0JFVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUg
KSB7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgKiBleHAyKCB2YWx1ZS5hICogMjU1LjAgLSAx
MjguMCApLCAxLjAgKTtcbn1cbnZlYzQgTGluZWFyVG9SR0JFKCBpbiB2ZWM0IHZhbHVlICkge1xu
XHRmbG9hdCBtYXhDb21wb25lbnQgPSBtYXgoIG1heCggdmFsdWUuciwgdmFsdWUuZyApLCB2YWx1
ZS5iICk7XG5cdGZsb2F0IGZFeHAgPSBjbGFtcCggY2VpbCggbG9nMiggbWF4Q29tcG9uZW50ICkg
KSwgLTEyOC4wLCAxMjcuMCApO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiIC8gZXhwMiggZkV4
cCApLCAoIGZFeHAgKyAxMjguMCApIC8gMjU1LjAgKTtcbn1cbnZlYzQgUkdCTVRvTGluZWFyKCBp
biB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBtYXhSYW5nZSApIHtcblx0cmV0dXJuIHZlYzQoIHZhbHVl
Lnh5eiAqIHZhbHVlLncgKiBtYXhSYW5nZSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCTSgg
aW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiA9IG1h
eCggdmFsdWUueCwgbWF4KCB2YWx1ZS5nLCB2YWx1ZS5iICkgKTtcblx0ZmxvYXQgTSAgICAgID0g
Y2xhbXAoIG1heFJHQiAvIG1heFJhbmdlLCAwLjAsIDEuMCApO1xuXHRNICAgICAgICAgICAgPSBj
ZWlsKCBNICogMjU1LjAgKSAvIDI1NS4wO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiIC8gKCBN
ICogbWF4UmFuZ2UgKSwgTSApO1xufVxudmVjNCBSR0JEVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUs
IGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogKCAoIG1h
eFJhbmdlIC8gMjU1LjAgKSAvIHZhbHVlLmEgKSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdC
RCggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiA9
IG1heCggdmFsdWUueCwgbWF4KCB2YWx1ZS5nLCB2YWx1ZS5iICkgKTtcblx0ZmxvYXQgRCAgICAg
ID0gbWF4KCBtYXhSYW5nZSAvIG1heFJHQiwgMS4wICk7XG5cdEQgICAgICAgICAgICA9IG1pbigg
Zmxvb3IoIEQgKSAvIDI1NS4wLCAxLjAgKTtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAqICgg
RCAqICggMjU1LjAgLyBtYXhSYW5nZSApICksIEQgKTtcbn1cbmNvbnN0IG1hdDMgY0xvZ0x1dk0g
PSBtYXQzKCAwLjIyMDksIDAuMzM5MCwgMC40MTg0LCAwLjExMzgsIDAuNjc4MCwgMC43MzE5LCAw
LjAxMDIsIDAuMTEzMCwgMC4yOTY5ICk7XG52ZWM0IExpbmVhclRvTG9nTHV2KCBpbiB2ZWM0IHZh
bHVlICkgIHtcblx0dmVjMyBYcF9ZX1hZWnAgPSB2YWx1ZS5yZ2IgKiBjTG9nTHV2TTtcblx0WHBf
WV9YWVpwID0gbWF4KFhwX1lfWFlacCwgdmVjMygxZS02LCAxZS02LCAxZS02KSk7XG5cdHZlYzQg
dlJlc3VsdDtcblx0dlJlc3VsdC54eSA9IFhwX1lfWFlacC54eSAvIFhwX1lfWFlacC56O1xuXHRm
bG9hdCBMZSA9IDIuMCAqIGxvZzIoWHBfWV9YWVpwLnkpICsgMTI3LjA7XG5cdHZSZXN1bHQudyA9
IGZyYWN0KExlKTtcblx0dlJlc3VsdC56ID0gKExlIC0gKGZsb29yKHZSZXN1bHQudyoyNTUuMCkp
LzI1NS4wKS8yNTUuMDtcblx0cmV0dXJuIHZSZXN1bHQ7XG59XG5jb25zdCBtYXQzIGNMb2dMdXZJ
bnZlcnNlTSA9IG1hdDMoIDYuMDAxNCwgLTIuNzAwOCwgLTEuNzk5NiwgLTEuMzMyMCwgMy4xMDI5
LCAtNS43NzIxLCAwLjMwMDgsIC0xLjA4ODIsIDUuNjI2OCApO1xudmVjNCBMb2dMdXZUb0xpbmVh
ciggaW4gdmVjNCB2YWx1ZSApIHtcblx0ZmxvYXQgTGUgPSB2YWx1ZS56ICogMjU1LjAgKyB2YWx1
ZS53O1xuXHR2ZWMzIFhwX1lfWFlacDtcblx0WHBfWV9YWVpwLnkgPSBleHAyKChMZSAtIDEyNy4w
KSAvIDIuMCk7XG5cdFhwX1lfWFlacC56ID0gWHBfWV9YWVpwLnkgLyB2YWx1ZS55O1xuXHRYcF9Z
X1hZWnAueCA9IHZhbHVlLnggKiBYcF9ZX1hZWnAuejtcblx0dmVjMyB2UkdCID0gWHBfWV9YWVpw
LnJnYiAqIGNMb2dMdXZJbnZlcnNlTTtcblx0cmV0dXJuIHZlYzQoIG1heCh2UkdCLCAwLjApLCAx
LjAgKTtcbn1cbiI7CisgICAgICAgICAgICBpZiAoIHRoaXMubWF0cml4QXV0b1VwZGF0ZSApIHRo
aXMudXBkYXRlTWF0cml4KCk7CiAKLSAgICB2YXIgZW52bWFwX2ZyYWdtZW50ID0gIiNpZmRlZiBV
U0VfRU5WTUFQXG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9O
T1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0dmVjMyBjYW1lcmFUb1ZlcnRleCA9
IG5vcm1hbGl6ZSggdldvcmxkUG9zaXRpb24gLSBjYW1lcmFQb3NpdGlvbiApO1xuXHRcdHZlYzMg
d29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRy
aXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dmVjMyByZWZs
ZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vs
c2Vcblx0XHRcdHZlYzMgcmVmbGVjdFZlYyA9IHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3Js
ZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdCNlbHNlXG5cdFx0dmVj
MyByZWZsZWN0VmVjID0gdlJlZmxlY3Q7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX1RZUEVf
Q1VCRVxuXHRcdHZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlw
RW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTtcblx0I2VsaWYgZGVmaW5l
ZCggRU5WTUFQX1RZUEVfRVFVSVJFQyApXG5cdFx0dmVjMiBzYW1wbGVVVjtcblx0XHRyZWZsZWN0
VmVjID0gbm9ybWFsaXplKCByZWZsZWN0VmVjICk7XG5cdFx0c2FtcGxlVVYueSA9IGFzaW4oIGNs
YW1wKCByZWZsZWN0VmVjLnksIC0gMS4wLCAxLjAgKSApICogUkVDSVBST0NBTF9QSSArIDAuNTtc
blx0XHRzYW1wbGVVVi54ID0gYXRhbiggcmVmbGVjdFZlYy56LCByZWZsZWN0VmVjLnggKSAqIFJF
Q0lQUk9DQUxfUEkyICsgMC41O1xuXHRcdHZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlMkQoIGVudk1h
cCwgc2FtcGxlVVYgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfU1BIRVJFIClcblx0
XHRyZWZsZWN0VmVjID0gbm9ybWFsaXplKCByZWZsZWN0VmVjICk7XG5cdFx0dmVjMyByZWZsZWN0
VmlldyA9IG5vcm1hbGl6ZSggKCB2aWV3TWF0cml4ICogdmVjNCggcmVmbGVjdFZlYywgMC4wICkg
KS54eXogKyB2ZWMzKCAwLjAsIDAuMCwgMS4wICkgKTtcblx0XHR2ZWM0IGVudkNvbG9yID0gdGV4
dHVyZTJEKCBlbnZNYXAsIHJlZmxlY3RWaWV3Lnh5ICogMC41ICsgMC41ICk7XG5cdCNlbHNlXG5c
dFx0dmVjNCBlbnZDb2xvciA9IHZlYzQoIDAuMCApO1xuXHQjZW5kaWZcblx0ZW52Q29sb3IgPSBl
bnZNYXBUZXhlbFRvTGluZWFyKCBlbnZDb2xvciApO1xuXHQjaWZkZWYgRU5WTUFQX0JMRU5ESU5H
X01VTFRJUExZXG5cdFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29p
bmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSAp
O1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYIClcblx0XHRvdXRnb2luZ0xp
Z2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGgg
KiByZWZsZWN0aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCAp
XG5cdFx0b3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICog
cmVmbGVjdGl2aXR5O1xuXHQjZW5kaWZcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgIGlmICggdGhp
cy5wYXJlbnQgPT09IG51bGwgKSB7CiAKLSAgICB2YXIgZW52bWFwX3BhcnNfZnJhZ21lbnQgPSAi
I2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkKCBQSFlTSUNBTCApXG5cdHVuaWZv
cm0gZmxvYXQgcmVmbGVjdGl2aXR5O1xuXHR1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTtc
biNlbmRpZlxuI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAm
JiAoIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8
IGRlZmluZWQoIFBIT05HICkgKVxuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0
I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dW5pZm9ybSBzYW1wbGVyQ3Vi
ZSBlbnZNYXA7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHQjZW5k
aWZcblx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXHR1bmlmb3JtIGludCBtYXhNaXBMZXZl
bDtcblx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1B
UCApIHx8IGRlZmluZWQoIFBIT05HICkgfHwgZGVmaW5lZCggUEhZU0lDQUwgKVxuXHRcdHVuaWZv
cm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZWxzZVxuXHRcdHZhcnlpbmcgdmVjMyB2UmVm
bGVjdDtcblx0I2VuZGlmXG4jZW5kaWZcbiI7CisgICAgICAgICAgICAgICAgdGhpcy5tYXRyaXhX
b3JsZC5jb3B5KCB0aGlzLm1hdHJpeCApOwogCi0gICAgdmFyIGVudm1hcF9wYXJzX3ZlcnRleCA9
ICIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZp
bmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKVxuXHRcdHZhcnlpbmcgdmVj
MyB2V29ybGRQb3NpdGlvbjtcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5c
dFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbmRpZlxuI2VuZGlmXG4iOwor
ICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgIHZhciBlbnZtYXBfdmVydGV4ID0gIiNpZmRlZiBV
U0VfRU5WTUFQXG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9O
T1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0dldvcmxkUG9zaXRpb24gPSB3b3Js
ZFBvc2l0aW9uLnh5ejtcblx0I2Vsc2Vcblx0XHR2ZWMzIGNhbWVyYVRvVmVydGV4ID0gbm9ybWFs
aXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0dmVjMyB3b3Js
ZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2
aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZS
ZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vs
c2Vcblx0XHRcdHZSZWZsZWN0ID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFs
LCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWZcbiI7Cisg
ICAgICAgICAgICAgICAgdGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKCB0aGlzLnBh
cmVudC5tYXRyaXhXb3JsZCwgdGhpcy5tYXRyaXggKTsKIAotICAgIHZhciBmb2dfdmVydGV4ID0g
IlxuI2lmZGVmIFVTRV9GT0dcbmZvZ0RlcHRoID0gLW12UG9zaXRpb24uejtcbiNlbmRpZiI7Cisg
ICAgICAgICAgICB9CiAKLSAgICB2YXIgZm9nX3BhcnNfdmVydGV4ID0gIiNpZmRlZiBVU0VfRk9H
XG4gIHZhcnlpbmcgZmxvYXQgZm9nRGVwdGg7XG4jZW5kaWZcbiI7CisgICAgICAgICAgICAvLyB1
cGRhdGUgY2hpbGRyZW4KIAotICAgIHZhciBmb2dfZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9GT0dc
blx0I2lmZGVmIEZPR19FWFAyXG5cdFx0ZmxvYXQgZm9nRmFjdG9yID0gd2hpdGVDb21wbGltZW50
KCBleHAyKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogZm9nRGVwdGggKiBmb2dEZXB0aCAq
IExPRzIgKSApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZv
Z05lYXIsIGZvZ0ZhciwgZm9nRGVwdGggKTtcblx0I2VuZGlmXG5cdGdsX0ZyYWdDb2xvci5yZ2Ig
PSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTtcbiNlbmRpZlxu
IjsKKyAgICAgICAgICAgIGlmICggdXBkYXRlQ2hpbGRyZW4gPT09IHRydWUgKSB7CiAKLSAgICB2
YXIgZm9nX3BhcnNfZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9GT0dcblx0dW5pZm9ybSB2ZWMzIGZv
Z0NvbG9yO1xuXHR2YXJ5aW5nIGZsb2F0IGZvZ0RlcHRoO1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0
XHR1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBm
b2dOZWFyO1xuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRmFyO1xuXHQjZW5kaWZcbiNlbmRpZlxuIjsK
KyAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuOwogCi0gICAgdmFy
IGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQgPSAiI2lmZGVmIFRPT05cblx0dW5pZm9ybSBzYW1w
bGVyMkQgZ3JhZGllbnRNYXA7XG5cdHZlYzMgZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCB2ZWMzIG5v
cm1hbCwgdmVjMyBsaWdodERpcmVjdGlvbiApIHtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdCggbm9y
bWFsLCBsaWdodERpcmVjdGlvbiApO1xuXHRcdHZlYzIgY29vcmQgPSB2ZWMyKCBkb3ROTCAqIDAu
NSArIDAuNSwgMC4wICk7XG5cdFx0I2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHRcdFx0cmV0dXJu
IHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkucmdiO1xuXHRcdCNlbHNlXG5cdFx0XHRy
ZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApO1xuXHRc
dCNlbmRpZlxuXHR9XG4jZW5kaWZcbiI7CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
LCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgIHZhciBsaWdodG1h
cF9mcmFnbWVudCA9ICIjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdHJlZmxlY3RlZExpZ2h0LmluZGly
ZWN0RGlmZnVzZSArPSBQSSAqIHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKS54eXogKiBsaWdo
dE1hcEludGVuc2l0eTtcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5b
IGkgXS51cGRhdGVXb3JsZE1hdHJpeCggZmFsc2UsIHRydWUgKTsKIAotICAgIHZhciBsaWdodG1h
cF9wYXJzX2ZyYWdtZW50ID0gIiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dW5pZm9ybSBzYW1wbGVy
MkQgbGlnaHRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgbGlnaHRNYXBJbnRlbnNpdHk7XG4jZW5kaWYi
OworICAgICAgICAgICAgICAgIH0KIAotICAgIHZhciBsaWdodHNfbGFtYmVydF92ZXJ0ZXggPSAi
dmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7XG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xu
Z2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejtcbmdlb21ldHJ5Lm5vcm1hbCA9IG5v
cm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbmdlb21ldHJ5LnZpZXdEaXIgPSBub3JtYWxp
emUoIC1tdlBvc2l0aW9uLnh5eiApO1xuR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7XG5i
YWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcbmJhY2tHZW9tZXRyeS5u
b3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsO1xuYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRy
eS52aWV3RGlyO1xudkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTtcbiNpZmRlZiBET1VCTEVfU0lE
RURcblx0dkxpZ2h0QmFjayA9IHZlYzMoIDAuMCApO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRp
cmVjdExpZ2h0O1xuZmxvYXQgZG90Tkw7XG52ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtc
biNpZiBOVU1fUE9JTlRfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAo
IGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0UG9pbnRE
aXJlY3RMaWdodElycmFkaWFuY2UoIHBvaW50TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RM
aWdodCApO1xuXHRcdGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRp
cmVjdGlvbiApO1xuXHRcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IFBJICogZGlyZWN0TGln
aHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RM
aWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0
QmFjayArPSBzYXR1cmF0ZSggLWRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5c
dFx0I2VuZGlmXG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0I3ByYWdt
YSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkg
KysgKSB7XG5cdFx0Z2V0U3BvdERpcmVjdExpZ2h0SXJyYWRpYW5jZSggc3BvdExpZ2h0c1sgaSBd
LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9y
bWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1
c2UgPSBQSSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdHZMaWdodEZyb250ICs9IHNhdHVyYXRl
KCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNpZmRlZiBET1VCTEVf
U0lERURcblx0XHRcdHZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC1kb3ROTCApICogZGlyZWN0TGln
aHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWZcbiNpZiBOVU1fRElSX0xJ
R0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBO
VU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SXJy
YWRpYW5jZSggZGlyZWN0aW9uYWxMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7
XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9u
ICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gUEkgKiBkaXJlY3RMaWdodC5jb2xv
cjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29s
b3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9
IHNhdHVyYXRlKCAtZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjZW5k
aWZcblx0fVxuI2VuZGlmXG4jaWYgTlVNX0hFTUlfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9s
bF9sb29wXG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHtc
blx0XHR2TGlnaHRGcm9udCArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3Bo
ZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5ICk7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRc
dFx0dkxpZ2h0QmFjayArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJl
TGlnaHRzWyBpIF0sIGJhY2tHZW9tZXRyeSApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWZcbiI7
CisgICAgICAgICAgICB9CiAKLSAgICB2YXIgbGlnaHRzX3BhcnNfYmVnaW4gPSAidW5pZm9ybSB2
ZWMzIGFtYmllbnRMaWdodENvbG9yO1xudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBj
b25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBh
bWJpZW50TGlnaHRDb2xvcjtcblx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5c
dFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxu
I2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7XG5cdFx0
dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRpbnQgc2hhZG93O1xuXHRcdGZs
b2F0IHNoYWRvd0JpYXM7XG5cdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdHZlYzIgc2hhZG93
TWFwU2l6ZTtcblx0fTtcblx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGln
aHRzWyBOVU1fRElSX0xJR0hUUyBdO1xuXHR2b2lkIGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJ
cnJhZGlhbmNlKCBjb25zdCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNv
bnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVj
dExpZ2h0ICkge1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yID0gZGlyZWN0aW9uYWxMaWdodC5jb2xv
cjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gPSBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlv
bjtcblx0XHRkaXJlY3RMaWdodC52aXNpYmxlID0gdHJ1ZTtcblx0fVxuI2VuZGlmXG4jaWYgTlVN
X1BPSU5UX0xJR0hUUyA+IDBcblx0c3RydWN0IFBvaW50TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRp
b247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNh
eTtcblx0XHRpbnQgc2hhZG93O1xuXHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0ZmxvYXQgc2hh
ZG93UmFkaXVzO1xuXHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHRmbG9hdCBzaGFkb3dDYW1l
cmFOZWFyO1xuXHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0fTtcblx0dW5pZm9ybSBQb2lu
dExpZ2h0IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdHZvaWQgZ2V0UG9pbnRE
aXJlY3RMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29u
c3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgZGlyZWN0
TGlnaHQgKSB7XG5cdFx0dmVjMyBsVmVjdG9yID0gcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21l
dHJ5LnBvc2l0aW9uO1xuXHRcdGRpcmVjdExpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZl
Y3RvciApO1xuXHRcdGZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTtcblx0
XHRkaXJlY3RMaWdodC5jb2xvciA9IHBvaW50TGlnaHQuY29sb3I7XG5cdFx0ZGlyZWN0TGlnaHQu
Y29sb3IgKj0gcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggbGlnaHRE
aXN0YW5jZSwgcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApO1xuXHRcdGRp
cmVjdExpZ2h0LnZpc2libGUgPSAoIGRpcmVjdExpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7
XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0c3RydWN0IFNwb3RMaWdo
dCB7XG5cdFx0dmVjMyBwb3NpdGlvbjtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIGNv
bG9yO1xuXHRcdGZsb2F0IGRpc3RhbmNlO1xuXHRcdGZsb2F0IGRlY2F5O1xuXHRcdGZsb2F0IGNv
bmVDb3M7XG5cdFx0ZmxvYXQgcGVudW1icmFDb3M7XG5cdFx0aW50IHNoYWRvdztcblx0XHRmbG9h
dCBzaGFkb3dCaWFzO1xuXHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHR2ZWMyIHNoYWRvd01h
cFNpemU7XG5cdH07XG5cdHVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJ
R0hUUyBdO1xuXHR2b2lkIGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIFNw
b3RMaWdodCBzcG90TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91
dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBzcG90
TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRkaXJlY3RMaWdodC5kaXJl
Y3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0g
bGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgYW5nbGVDb3MgPSBkb3QoIGRpcmVjdExpZ2h0
LmRpcmVjdGlvbiwgc3BvdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGlmICggYW5nbGVDb3MgPiBz
cG90TGlnaHQuY29uZUNvcyApIHtcblx0XHRcdGZsb2F0IHNwb3RFZmZlY3QgPSBzbW9vdGhzdGVw
KCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xu
XHRcdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3I7XG5cdFx0XHRkaXJlY3RM
aWdodC5jb2xvciAqPSBzcG90RWZmZWN0ICogcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRp
YW5jZUZhY3RvciggbGlnaHREaXN0YW5jZSwgc3BvdExpZ2h0LmRpc3RhbmNlLCBzcG90TGlnaHQu
ZGVjYXkgKTtcblx0XHRcdGRpcmVjdExpZ2h0LnZpc2libGUgPSB0cnVlO1xuXHRcdH0gZWxzZSB7
XG5cdFx0XHRkaXJlY3RMaWdodC5jb2xvciA9IHZlYzMoIDAuMCApO1xuXHRcdFx0ZGlyZWN0TGln
aHQudmlzaWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuI2VuZGlmXG4jaWYgTlVNX1JFQ1RfQVJF
QV9MSUdIVFMgPiAwXG5cdHN0cnVjdCBSZWN0QXJlYUxpZ2h0IHtcblx0XHR2ZWMzIGNvbG9yO1xu
XHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBoYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVp
Z2h0O1xuXHR9O1xuXHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTtcdHVuaWZvcm0gc2FtcGxlcjJE
IGx0Y18yO1xuXHR1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNU
X0FSRUFfTElHSFRTIF07XG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwXG5cdHN0cnVj
dCBIZW1pc3BoZXJlTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgc2t5Q29s
b3I7XG5cdFx0dmVjMyBncm91bmRDb2xvcjtcblx0fTtcblx0dW5pZm9ybSBIZW1pc3BoZXJlTGln
aHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07XG5cdHZlYzMgZ2V0SGVtaXNw
aGVyZUxpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gSGVtaXNwaGVyZUxpZ2h0IGhlbWlMaWdodCwg
Y29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSApIHtcblx0XHRmbG9hdCBkb3ROTCA9
IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQg
aGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTtcblx0XHR2ZWMzIGlycmFkaWFu
Y2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1p
RGlmZnVzZVdlaWdodCApO1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xu
XHRcdFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gaXJyYWRpYW5j
ZTtcblx0fVxuI2VuZGlmXG4iOworICAgICAgICB9LAogCi0gICAgdmFyIGxpZ2h0c19wYXJzX21h
cHMgPSAiI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBQSFlTSUNBTCApXG5c
dHZlYzMgZ2V0TGlnaHRQcm9iZUluZGlyZWN0SXJyYWRpYW5jZSggY29uc3QgaW4gR2VvbWV0cmlj
Q29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gaW50IG1heE1JUExldmVsICkge1xuXHRcdHZlYzMg
d29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBnZW9tZXRyeS5ub3JtYWws
IHZpZXdNYXRyaXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdFx0dmVjMyBx
dWVyeVZlYyA9IHZlYzMoIGZsaXBFbnZNYXAgKiB3b3JsZE5vcm1hbC54LCB3b3JsZE5vcm1hbC55
eiApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENv
bG9yID0gdGV4dHVyZUN1YmVMb2RFWFQoIGVudk1hcCwgcXVlcnlWZWMsIGZsb2F0KCBtYXhNSVBM
ZXZlbCApICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVy
ZUN1YmUoIGVudk1hcCwgcXVlcnlWZWMsIGZsb2F0KCBtYXhNSVBMZXZlbCApICk7XG5cdFx0XHQj
ZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1h
cENvbG9yICkucmdiO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxu
XHRcdFx0dmVjMyBxdWVyeVZlYyA9IHZlYzMoIGZsaXBFbnZNYXAgKiB3b3JsZE5vcm1hbC54LCB3
b3JsZE5vcm1hbC55eiApO1xuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYo
IHF1ZXJ5VmVjLCAxLjAgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHZl
YzQoIDAuMCApO1xuXHRcdCNlbmRpZlxuXHRcdHJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAq
IGVudk1hcEludGVuc2l0eTtcblx0fVxuXHRmbG9hdCBnZXRTcGVjdWxhck1JUExldmVsKCBjb25z
dCBpbiBmbG9hdCBibGlublNoaW5pbmVzc0V4cG9uZW50LCBjb25zdCBpbiBpbnQgbWF4TUlQTGV2
ZWwgKSB7XG5cdFx0ZmxvYXQgbWF4TUlQTGV2ZWxTY2FsYXIgPSBmbG9hdCggbWF4TUlQTGV2ZWwg
KTtcblx0XHRmbG9hdCBkZXNpcmVkTUlQTGV2ZWwgPSBtYXhNSVBMZXZlbFNjYWxhciArIDAuNzky
NDggLSAwLjUgKiBsb2cyKCBwb3cyKCBibGlublNoaW5pbmVzc0V4cG9uZW50ICkgKyAxLjAgKTtc
blx0XHRyZXR1cm4gY2xhbXAoIGRlc2lyZWRNSVBMZXZlbCwgMC4wLCBtYXhNSVBMZXZlbFNjYWxh
ciApO1xuXHR9XG5cdHZlYzMgZ2V0TGlnaHRQcm9iZUluZGlyZWN0UmFkaWFuY2UoIGNvbnN0IGlu
IEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIGZsb2F0IGJsaW5uU2hpbmluZXNz
RXhwb25lbnQsIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtcblx0XHQjaWZkZWYgRU5WTUFQ
X01PREVfUkVGTEVDVElPTlxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggLWdlb21l
dHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWMzIHJl
ZmxlY3RWZWMgPSByZWZyYWN0KCAtZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBy
ZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0XHRyZWZsZWN0VmVjID0gaW52ZXJzZVRy
YW5zZm9ybURpcmVjdGlvbiggcmVmbGVjdFZlYywgdmlld01hdHJpeCApO1xuXHRcdGZsb2F0IHNw
ZWN1bGFyTUlQTGV2ZWwgPSBnZXRTcGVjdWxhck1JUExldmVsKCBibGlublNoaW5pbmVzc0V4cG9u
ZW50LCBtYXhNSVBMZXZlbCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0XHR2
ZWMzIHF1ZXJ5UmVmbGVjdFZlYyA9IHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJl
ZmxlY3RWZWMueXogKTtcblx0XHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdFx0dmVj
NCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlTG9kRVhUKCBlbnZNYXAsIHF1ZXJ5UmVmbGVjdFZl
Yywgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0dmVjNCBlbnZNYXBD
b2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHF1ZXJ5UmVmbGVjdFZlYywgc3BlY3VsYXJNSVBM
ZXZlbCApO1xuXHRcdFx0I2VuZGlmXG5cdFx0XHRlbnZNYXBDb2xvci5yZ2IgPSBlbnZNYXBUZXhl
bFRvTGluZWFyKCBlbnZNYXBDb2xvciApLnJnYjtcblx0XHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBf
VFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzMgcXVlcnlSZWZsZWN0VmVjID0gdmVjMyggZmxpcEVu
dk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApO1xuXHRcdFx0dmVjNCBlbnZNYXBD
b2xvciA9IHRleHR1cmVDdWJlVVYocXVlcnlSZWZsZWN0VmVjLCBCbGlubkV4cG9uZW50VG9HR1hS
b3VnaG5lc3MoYmxpbm5TaGluaW5lc3NFeHBvbmVudCkpO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVO
Vk1BUF9UWVBFX0VRVUlSRUMgKVxuXHRcdFx0dmVjMiBzYW1wbGVVVjtcblx0XHRcdHNhbXBsZVVW
LnkgPSBhc2luKCBjbGFtcCggcmVmbGVjdFZlYy55LCAtIDEuMCwgMS4wICkgKSAqIFJFQ0lQUk9D
QUxfUEkgKyAwLjU7XG5cdFx0XHRzYW1wbGVVVi54ID0gYXRhbiggcmVmbGVjdFZlYy56LCByZWZs
ZWN0VmVjLnggKSAqIFJFQ0lQUk9DQUxfUEkyICsgMC41O1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVf
TE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZTJETG9kRVhUKCBlbnZN
YXAsIHNhbXBsZVVWLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2
ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZTJEKCBlbnZNYXAsIHNhbXBsZVVWLCBzcGVjdWxhck1J
UExldmVsICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiA9IGVudk1hcFRl
eGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVOVk1B
UF9UWVBFX1NQSEVSRSApXG5cdFx0XHR2ZWMzIHJlZmxlY3RWaWV3ID0gbm9ybWFsaXplKCAoIHZp
ZXdNYXRyaXggKiB2ZWM0KCByZWZsZWN0VmVjLCAwLjAgKSApLnh5eiArIHZlYzMoIDAuMCwwLjAs
MS4wICkgKTtcblx0XHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdFx0dmVjNCBlbnZN
YXBDb2xvciA9IHRleHR1cmUyRExvZEVYVCggZW52TWFwLCByZWZsZWN0Vmlldy54eSAqIDAuNSAr
IDAuNSwgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0dmVjNCBlbnZN
YXBDb2xvciA9IHRleHR1cmUyRCggZW52TWFwLCByZWZsZWN0Vmlldy54eSAqIDAuNSArIDAuNSwg
c3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2VuZGlmXG5cdFx0XHRlbnZNYXBDb2xvci5yZ2Ig
PSBlbnZNYXBUZXhlbFRvTGluZWFyKCBlbnZNYXBDb2xvciApLnJnYjtcblx0XHQjZW5kaWZcblx0
XHRyZXR1cm4gZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHR9XG4jZW5kaWZc
biI7CisgICAgICAgIHRvSlNPTjogZnVuY3Rpb24gKCBtZXRhICkgewogCi0gICAgdmFyIGxpZ2h0
c19waG9uZ19mcmFnbWVudCA9ICJCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlh
bC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiO1xubWF0ZXJpYWwuc3BlY3VsYXJDb2xv
ciA9IHNwZWN1bGFyO1xubWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgPSBzaGluaW5lc3M7XG5t
YXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtcbiI7CisgICAgICAg
ICAgICAvLyBtZXRhIGlzIGEgc3RyaW5nIHdoZW4gY2FsbGVkIGZyb20gSlNPTi5zdHJpbmdpZnkK
KyAgICAgICAgICAgIHZhciBpc1Jvb3RPYmplY3QgPSAoIG1ldGEgPT09IHVuZGVmaW5lZCB8fCB0
eXBlb2YgbWV0YSA9PT0gJ3N0cmluZycgKTsKIAotICAgIHZhciBsaWdodHNfcGhvbmdfcGFyc19m
cmFnbWVudCA9ICJ2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFE
RURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbnN0cnVjdCBCbGlublBob25nTWF0
ZXJpYWwge1xuXHR2ZWMzXHRkaWZmdXNlQ29sb3I7XG5cdHZlYzNcdHNwZWN1bGFyQ29sb3I7XG5c
dGZsb2F0XHRzcGVjdWxhclNoaW5pbmVzcztcblx0ZmxvYXRcdHNwZWN1bGFyU3RyZW5ndGg7XG59
O1xudm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJl
Y3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxp
bm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRM
aWdodCApIHtcblx0I2lmZGVmIFRPT05cblx0XHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVu
dElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBk
aXJlY3RMaWdodC5jb2xvcjtcblx0I2Vsc2Vcblx0XHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBk
b3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0XHR2ZWMz
IGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjZW5kaWZcblx0I2lm
bmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0
I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJS
REZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcblx0cmVmbGVjdGVk
TGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfU3BlY3VsYXJfQmxpbm5Q
aG9uZyggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRl
cmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDtcbn1c
bnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRp
YW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5Q
aG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdo
dCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBC
UkRGX0RpZmZ1c2VfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG4jZGVmaW5l
IFJFX0RpcmVjdFx0XHRcdFx0UkVfRGlyZWN0X0JsaW5uUGhvbmdcbiNkZWZpbmUgUkVfSW5kaXJl
Y3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nXG4jZGVmaW5lIE1hdGVy
aWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsIClcdCgwKVxuIjsKKyAgICAgICAgICAgIHZhciBv
dXRwdXQgPSB7fTsKIAotICAgIHZhciBsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQgPSAiUGh5c2lj
YWxNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xv
ci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xubWF0ZXJpYWwuc3BlY3VsYXJSb3Vn
aG5lc3MgPSBjbGFtcCggcm91Z2huZXNzRmFjdG9yLCAwLjA0LCAxLjAgKTtcbiNpZmRlZiBTVEFO
REFSRFxuXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCBERUZBVUxUX1NQRUNV
TEFSX0NPRUZGSUNJRU5UICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xu
I2Vsc2Vcblx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggdmVjMyggTUFYSU1VTV9TUEVD
VUxBUl9DT0VGRklDSUVOVCAqIHBvdzIoIHJlZmxlY3Rpdml0eSApICksIGRpZmZ1c2VDb2xvci5y
Z2IsIG1ldGFsbmVzc0ZhY3RvciApO1xuXHRtYXRlcmlhbC5jbGVhckNvYXQgPSBzYXR1cmF0ZSgg
Y2xlYXJDb2F0ICk7XHRtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MgPSBjbGFtcCggY2xlYXJD
b2F0Um91Z2huZXNzLCAwLjA0LCAxLjAgKTtcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgIC8vIG1l
dGEgaXMgYSBoYXNoIHVzZWQgdG8gY29sbGVjdCBnZW9tZXRyaWVzLCBtYXRlcmlhbHMuCisgICAg
ICAgICAgICAvLyBub3QgcHJvdmlkaW5nIGl0IGltcGxpZXMgdGhhdCB0aGlzIGlzIHRoZSByb290
IG9iamVjdAorICAgICAgICAgICAgLy8gYmVpbmcgc2VyaWFsaXplZC4KKyAgICAgICAgICAgIGlm
ICggaXNSb290T2JqZWN0ICkgewogCi0gICAgdmFyIGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdt
ZW50ID0gInN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHtcblx0dmVjM1x0ZGlmZnVzZUNvbG9yO1xu
XHRmbG9hdFx0c3BlY3VsYXJSb3VnaG5lc3M7XG5cdHZlYzNcdHNwZWN1bGFyQ29sb3I7XG5cdCNp
Zm5kZWYgU1RBTkRBUkRcblx0XHRmbG9hdCBjbGVhckNvYXQ7XG5cdFx0ZmxvYXQgY2xlYXJDb2F0
Um91Z2huZXNzO1xuXHQjZW5kaWZcbn07XG4jZGVmaW5lIE1BWElNVU1fU1BFQ1VMQVJfQ09FRkZJ
Q0lFTlQgMC4xNlxuI2RlZmluZSBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UIDAuMDRcbmZs
b2F0IGNsZWFyQ29hdERIUkFwcHJveCggY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBp
biBmbG9hdCBkb3ROTCApIHtcblx0cmV0dXJuIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQg
KyAoIDEuMCAtIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSAqICggcG93KCAxLjAgLSBk
b3ROTCwgNS4wICkgKiBwb3coIDEuMCAtIHJvdWdobmVzcywgMi4wICkgKTtcbn1cbiNpZiBOVU1f
UkVDVF9BUkVBX0xJR0hUUyA+IDBcblx0dm9pZCBSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwo
IGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmlj
Q29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5v
dXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdFx0dmVjMyBub3JtYWwgPSBn
ZW9tZXRyeS5ub3JtYWw7XG5cdFx0dmVjMyB2aWV3RGlyID0gZ2VvbWV0cnkudmlld0Rpcjtcblx0
XHR2ZWMzIHBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247XG5cdFx0dmVjMyBsaWdodFBvcyA9
IHJlY3RBcmVhTGlnaHQucG9zaXRpb247XG5cdFx0dmVjMyBoYWxmV2lkdGggPSByZWN0QXJlYUxp
Z2h0LmhhbGZXaWR0aDtcblx0XHR2ZWMzIGhhbGZIZWlnaHQgPSByZWN0QXJlYUxpZ2h0LmhhbGZI
ZWlnaHQ7XG5cdFx0dmVjMyBsaWdodENvbG9yID0gcmVjdEFyZWFMaWdodC5jb2xvcjtcblx0XHRm
bG9hdCByb3VnaG5lc3MgPSBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcztcblx0XHR2ZWMzIHJl
Y3RDb29yZHNbIDQgXTtcblx0XHRyZWN0Q29vcmRzWyAwIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0
aCAtIGhhbGZIZWlnaHQ7XHRcdHJlY3RDb29yZHNbIDEgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRo
IC0gaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAyIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0
aCArIGhhbGZIZWlnaHQ7XG5cdFx0cmVjdENvb3Jkc1sgMyBdID0gbGlnaHRQb3MgLSBoYWxmV2lk
dGggKyBoYWxmSGVpZ2h0O1xuXHRcdHZlYzIgdXYgPSBMVENfVXYoIG5vcm1hbCwgdmlld0Rpciwg
cm91Z2huZXNzICk7XG5cdFx0dmVjNCB0MSA9IHRleHR1cmUyRCggbHRjXzEsIHV2ICk7XG5cdFx0
dmVjNCB0MiA9IHRleHR1cmUyRCggbHRjXzIsIHV2ICk7XG5cdFx0bWF0MyBtSW52ID0gbWF0Myhc
blx0XHRcdHZlYzMoIHQxLngsIDAsIHQxLnkgKSxcblx0XHRcdHZlYzMoICAgIDAsIDEsICAgIDAg
KSxcblx0XHRcdHZlYzMoIHQxLnosIDAsIHQxLncgKVxuXHRcdCk7XG5cdFx0dmVjMyBmcmVzbmVs
ID0gKCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICogdDIueCArICggdmVjMyggMS4wICkgLSBtYXRl
cmlhbC5zcGVjdWxhckNvbG9yICkgKiB0Mi55ICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0
U3BlY3VsYXIgKz0gbGlnaHRDb2xvciAqIGZyZXNuZWwgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwg
dmlld0RpciwgcG9zaXRpb24sIG1JbnYsIHJlY3RDb29yZHMgKTtcblx0XHRyZWZsZWN0ZWRMaWdo
dC5kaXJlY3REaWZmdXNlICs9IGxpZ2h0Q29sb3IgKiBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiBM
VENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1hdDMoIDEuMCApLCByZWN0
Q29vcmRzICk7XG5cdH1cbiNlbmRpZlxudm9pZCBSRV9EaXJlY3RfUGh5c2ljYWwoIGNvbnN0IGlu
IEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2Vv
bWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3Rl
ZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3Qo
IGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0dmVjMyBpcnJh
ZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0I2lmbmRlZiBQSFlTSUNBTExZ
X0NPUlJFQ1RfTElHSFRTXG5cdFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdCNpZm5k
ZWYgU1RBTkRBUkRcblx0XHRmbG9hdCBjbGVhckNvYXRESFIgPSBtYXRlcmlhbC5jbGVhckNvYXQg
KiBjbGVhckNvYXRESFJBcHByb3goIG1hdGVyaWFsLmNsZWFyQ29hdFJvdWdobmVzcywgZG90Tkwg
KTtcblx0I2Vsc2Vcblx0XHRmbG9hdCBjbGVhckNvYXRESFIgPSAwLjA7XG5cdCNlbmRpZlxuXHRy
ZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSAoIDEuMCAtIGNsZWFyQ29hdERIUiApICog
aXJyYWRpYW5jZSAqIEJSREZfU3BlY3VsYXJfR0dYKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1h
dGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5cdHJl
ZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gKCAxLjAgLSBjbGVhckNvYXRESFIgKSAqIGly
cmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2VfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7
XG5cdCNpZm5kZWYgU1RBTkRBUkRcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciAr
PSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuY2xlYXJDb2F0ICogQlJERl9TcGVjdWxhcl9HR1goIGRp
cmVjdExpZ2h0LCBnZW9tZXRyeSwgdmVjMyggREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCAp
LCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG59XG52b2lkIFJFX0lu
ZGlyZWN0RGlmZnVzZV9QaHlzaWNhbCggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBp
biBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1h
dGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVj
dGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2VfTGFt
YmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0U3BlY3Vs
YXJfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgcmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJD
b2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGlu
IFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3Rl
ZExpZ2h0ICkge1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0
ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xuXHRcdGZsb2F0
IGRvdE5MID0gZG90TlY7XG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSID0gbWF0ZXJpYWwuY2xlYXJD
b2F0ICogY2xlYXJDb2F0REhSQXBwcm94KCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MsIGRv
dE5MICk7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSID0gMC4wO1xuXHQjZW5kaWZc
blx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSAoIDEuMCAtIGNsZWFyQ29hdERI
UiApICogcmFkaWFuY2UgKiBCUkRGX1NwZWN1bGFyX0dHWF9FbnZpcm9ubWVudCggZ2VvbWV0cnks
IG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5c
dCNpZm5kZWYgU1RBTkRBUkRcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9
IGNsZWFyQ29hdFJhZGlhbmNlICogbWF0ZXJpYWwuY2xlYXJDb2F0ICogQlJERl9TcGVjdWxhcl9H
R1hfRW52aXJvbm1lbnQoIGdlb21ldHJ5LCB2ZWMzKCBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJ
RU5UICksIG1hdGVyaWFsLmNsZWFyQ29hdFJvdWdobmVzcyApO1xuXHQjZW5kaWZcbn1cbiNkZWZp
bmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9EaXJlY3RfUGh5c2ljYWxcbiNkZWZpbmUgUkVfRGlyZWN0
X1JlY3RBcmVhXHRcdFJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbFxuI2RlZmluZSBSRV9JbmRp
cmVjdERpZmZ1c2VcdFx0UkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsXG4jZGVmaW5lIFJFX0lu
ZGlyZWN0U3BlY3VsYXJcdFx0UkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbFxuI2RlZmluZSBN
YXRlcmlhbF9CbGlublNoaW5pbmVzc0V4cG9uZW50KCBtYXRlcmlhbCApICAgR0dYUm91Z2huZXNz
VG9CbGlubkV4cG9uZW50KCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyApXG4jZGVmaW5lIE1h
dGVyaWFsX0NsZWFyQ29hdF9CbGlublNoaW5pbmVzc0V4cG9uZW50KCBtYXRlcmlhbCApICAgR0dY
Um91Z2huZXNzVG9CbGlubkV4cG9uZW50KCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MgKVxu
ZmxvYXQgY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBjb25zdCBpbiBmbG9hdCBkb3ROViwgY29u
c3QgaW4gZmxvYXQgYW1iaWVudE9jY2x1c2lvbiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkg
e1xuXHRyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAy
KCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiAp
O1xufVxuIjsKKyAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIG1ldGEgb2JqCisgICAgICAg
ICAgICAgICAgbWV0YSA9IHsKKyAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cmllczoge30sCisg
ICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsczoge30sCisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmVzOiB7fSwKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VzOiB7fSwKKyAgICAgICAgICAg
ICAgICAgICAgc2hhcGVzOiB7fQorICAgICAgICAgICAgICAgIH07CiAKLSAgICB2YXIgbGlnaHRz
X2ZyYWdtZW50X2JlZ2luID0gIlxuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5
LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uO1xuZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsO1xu
Z2VvbWV0cnkudmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xuSW5jaWRlbnRM
aWdodCBkaXJlY3RMaWdodDtcbiNpZiAoIE5VTV9QT0lOVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5l
ZCggUkVfRGlyZWN0IClcblx0UG9pbnRMaWdodCBwb2ludExpZ2h0O1xuXHQjcHJhZ21hIHVucm9s
bF9sb29wXG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7
XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRzWyBpIF07XG5cdFx0Z2V0UG9pbnREaXJlY3RM
aWdodElycmFkaWFuY2UoIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRc
dCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVj
MiggcG9pbnRMaWdodC5zaGFkb3csIGRpcmVjdExpZ2h0LnZpc2libGUgKSApID8gZ2V0UG9pbnRT
aGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9p
bnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93
Q29vcmRbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0LnNoYWRv
d0NhbWVyYUZhciApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGln
aHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuI2VuZGlmXG4j
aWYgKCBOVU1fU1BPVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0U3Bv
dExpZ2h0IHNwb3RMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSA9
IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0c3BvdExpZ2h0ID0gc3BvdExp
Z2h0c1sgaSBdO1xuXHRcdGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIHNwb3RMaWdodCwg
Z2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmZGVmIFVTRV9TSEFET1dNQVBcblx0XHRk
aXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBzcG90TGlnaHQuc2hhZG93LCBkaXJlY3RM
aWdodC52aXNpYmxlICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGln
aHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dS
YWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJF
X0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQg
KTtcblx0fVxuI2VuZGlmXG4jaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBS
RV9EaXJlY3QgKVxuXHREaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNwcmFn
bWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkg
KysgKSB7XG5cdFx0ZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRzWyBpIF07XG5c
dFx0Z2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodElycmFkaWFuY2UoIGRpcmVjdGlvbmFsTGlnaHQs
IGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdFx0
ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0aW9uYWxMaWdodC5zaGFkb3cs
IGRpcmVjdExpZ2h0LnZpc2libGUgKSApID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01h
cFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQu
c2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNo
YWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVj
dExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cbiNlbmRp
ZlxuI2lmICggTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0
X1JlY3RBcmVhIClcblx0UmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0O1xuXHQjcHJhZ21hIHVu
cm9sbF9sb29wXG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9SRUNUX0FSRUFfTElHSFRTOyBp
ICsrICkge1xuXHRcdHJlY3RBcmVhTGlnaHQgPSByZWN0QXJlYUxpZ2h0c1sgaSBdO1xuXHRcdFJF
X0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZs
ZWN0ZWRMaWdodCApO1xuXHR9XG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1
c2UgKVxuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJp
ZW50TGlnaHRDb2xvciApO1xuXHQjaWYgKCBOVU1fSEVNSV9MSUdIVFMgPiAwIClcblx0XHQjcHJh
Z21hIHVucm9sbF9sb29wXG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRT
OyBpICsrICkge1xuXHRcdFx0aXJyYWRpYW5jZSArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlh
bmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5ICk7XG5cdFx0fVxuXHQjZW5kaWZc
biNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxuXHR2ZWMzIHJhZGlh
bmNlID0gdmVjMyggMC4wICk7XG5cdHZlYzMgY2xlYXJDb2F0UmFkaWFuY2UgPSB2ZWMzKCAwLjAg
KTtcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgICAgICBvdXRwdXQubWV0YWRhdGEgPSB7CisgICAg
ICAgICAgICAgICAgICAgIHZlcnNpb246IDQuNSwKKyAgICAgICAgICAgICAgICAgICAgdHlwZTog
J09iamVjdCcsCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogJ09iamVjdDNELnRvSlNP
TicKKyAgICAgICAgICAgICAgICB9OwogCi0gICAgdmFyIGxpZ2h0c19mcmFnbWVudF9tYXBzID0g
IiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHQjaWZkZWYgVVNFX0xJR0hUTUFQ
XG5cdFx0dmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYy
ICkueHl6ICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJF
Q1RfTElHSFRTXG5cdFx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5c
dFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG5cdCNlbmRpZlxuXHQjaWYgZGVm
aW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFBIWVNJQ0FMICkgJiYgZGVmaW5lZCggRU5W
TUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0aXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSW5kaXJl
Y3RJcnJhZGlhbmNlKCBnZW9tZXRyeSwgbWF4TWlwTGV2ZWwgKTtcblx0I2VuZGlmXG4jZW5kaWZc
biNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxh
ciApXG5cdHJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJbmRpcmVjdFJhZGlhbmNlKCBnZW9tZXRy
eSwgTWF0ZXJpYWxfQmxpbm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSwgbWF4TWlwTGV2
ZWwgKTtcblx0I2lmbmRlZiBTVEFOREFSRFxuXHRcdGNsZWFyQ29hdFJhZGlhbmNlICs9IGdldExp
Z2h0UHJvYmVJbmRpcmVjdFJhZGlhbmNlKCBnZW9tZXRyeSwgTWF0ZXJpYWxfQ2xlYXJDb2F0X0Js
aW5uU2hpbmluZXNzRXhwb25lbnQoIG1hdGVyaWFsICksIG1heE1pcExldmVsICk7XG5cdCNlbmRp
ZlxuI2VuZGlmXG4iOworICAgICAgICAgICAgfQogCi0gICAgdmFyIGxpZ2h0c19mcmFnbWVudF9l
bmQgPSAiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdFJFX0luZGlyZWN0RGlm
ZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xu
I2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdFJFX0luZGlyZWN0
U3BlY3VsYXIoIHJhZGlhbmNlLCBjbGVhckNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFs
LCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmXG4iOworICAgICAgICAgICAgLy8gc3RhbmRhcmQg
T2JqZWN0M0Qgc2VyaWFsaXphdGlvbgogCi0gICAgdmFyIGxvZ2RlcHRoYnVmX2ZyYWdtZW50ID0g
IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhC
VUZfRVhUIClcblx0Z2xfRnJhZ0RlcHRoRVhUID0gbG9nMiggdkZyYWdEZXB0aCApICogbG9nRGVw
dGhCdWZGQyAqIDAuNTtcbiNlbmRpZiI7CisgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307CiAK
LSAgICB2YXIgbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudCA9ICIjaWZkZWYgVVNFX0xPR0RFUFRI
QlVGXG5cdHVuaWZvcm0gZmxvYXQgbG9nRGVwdGhCdWZGQztcblx0I2lmZGVmIFVTRV9MT0dERVBU
SEJVRl9FWFRcblx0XHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdCNlbmRpZlxuI2VuZGlm
XG4iOworICAgICAgICAgICAgb2JqZWN0LnV1aWQgPSB0aGlzLnV1aWQ7CisgICAgICAgICAgICBv
YmplY3QudHlwZSA9IHRoaXMudHlwZTsKIAotICAgIHZhciBsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRl
eCA9ICIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhU
XG5cdFx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xuXHQjZW5kaWZcblx0dW5pZm9ybSBmbG9h
dCBsb2dEZXB0aEJ1ZkZDO1xuI2VuZGlmIjsKKyAgICAgICAgICAgIGlmICggdGhpcy5uYW1lICE9
PSAnJyApIG9iamVjdC5uYW1lID0gdGhpcy5uYW1lOworICAgICAgICAgICAgaWYgKCB0aGlzLmNh
c3RTaGFkb3cgPT09IHRydWUgKSBvYmplY3QuY2FzdFNoYWRvdyA9IHRydWU7CisgICAgICAgICAg
ICBpZiAoIHRoaXMucmVjZWl2ZVNoYWRvdyA9PT0gdHJ1ZSApIG9iamVjdC5yZWNlaXZlU2hhZG93
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICggdGhpcy52aXNpYmxlID09PSBmYWxzZSApIG9iamVj
dC52aXNpYmxlID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoIHRoaXMuZnJ1c3R1bUN1bGxlZCA9
PT0gZmFsc2UgKSBvYmplY3QuZnJ1c3R1bUN1bGxlZCA9IGZhbHNlOworICAgICAgICAgICAgaWYg
KCB0aGlzLnJlbmRlck9yZGVyICE9PSAwICkgb2JqZWN0LnJlbmRlck9yZGVyID0gdGhpcy5yZW5k
ZXJPcmRlcjsKKyAgICAgICAgICAgIGlmICggSlNPTi5zdHJpbmdpZnkoIHRoaXMudXNlckRhdGEg
KSAhPT0gJ3t9JyApIG9iamVjdC51c2VyRGF0YSA9IHRoaXMudXNlckRhdGE7CiAKLSAgICB2YXIg
bG9nZGVwdGhidWZfdmVydGV4ID0gIiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcblx0I2lmZGVmIFVT
RV9MT0dERVBUSEJVRl9FWFRcblx0XHR2RnJhZ0RlcHRoID0gMS4wICsgZ2xfUG9zaXRpb24udztc
blx0I2Vsc2Vcblx0XHRnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3Np
dGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7XG5cdFx0Z2xfUG9zaXRpb24u
eiAqPSBnbF9Qb3NpdGlvbi53O1xuXHQjZW5kaWZcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgIG9i
amVjdC5sYXllcnMgPSB0aGlzLmxheWVycy5tYXNrOworICAgICAgICAgICAgb2JqZWN0Lm1hdHJp
eCA9IHRoaXMubWF0cml4LnRvQXJyYXkoKTsKIAotICAgIHZhciBtYXBfZnJhZ21lbnQgPSAiI2lm
ZGVmIFVTRV9NQVBcblx0dmVjNCB0ZXhlbENvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVdiApO1xu
XHR0ZXhlbENvbG9yID0gbWFwVGV4ZWxUb0xpbmVhciggdGV4ZWxDb2xvciApO1xuXHRkaWZmdXNl
Q29sb3IgKj0gdGV4ZWxDb2xvcjtcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgIGlmICggdGhpcy5t
YXRyaXhBdXRvVXBkYXRlID09PSBmYWxzZSApIG9iamVjdC5tYXRyaXhBdXRvVXBkYXRlID0gZmFs
c2U7CiAKLSAgICB2YXIgbWFwX3BhcnNfZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9NQVBcblx0dW5p
Zm9ybSBzYW1wbGVyMkQgbWFwO1xuI2VuZGlmXG4iOworICAgICAgICAgICAgLy8gb2JqZWN0IHNw
ZWNpZmljIHByb3BlcnRpZXMKIAotICAgIHZhciBtYXBfcGFydGljbGVfZnJhZ21lbnQgPSAiI2lm
ZGVmIFVTRV9NQVBcblx0dmVjMiB1diA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCBnbF9Qb2ludENv
b3JkLngsIDEuMCAtIGdsX1BvaW50Q29vcmQueSwgMSApICkueHk7XG5cdHZlYzQgbWFwVGV4ZWwg
PSB0ZXh0dXJlMkQoIG1hcCwgdXYgKTtcblx0ZGlmZnVzZUNvbG9yICo9IG1hcFRleGVsVG9MaW5l
YXIoIG1hcFRleGVsICk7XG4jZW5kaWZcbiI7CisgICAgICAgICAgICBpZiAoIHRoaXMuaXNNZXNo
ICYmIHRoaXMuZHJhd01vZGUgIT09IFRyaWFuZ2xlc0RyYXdNb2RlICkgb2JqZWN0LmRyYXdNb2Rl
ID0gdGhpcy5kcmF3TW9kZTsKIAotICAgIHZhciBtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudCA9
ICIjaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XG5cdHVuaWZvcm0g
c2FtcGxlcjJEIG1hcDtcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgIC8vCiAKLSAgICB2YXIgbWV0
YWxuZXNzbWFwX2ZyYWdtZW50ID0gImZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzcztc
biNpZmRlZiBVU0VfTUVUQUxORVNTTUFQXG5cdHZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJl
MkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7XG5cdG1ldGFsbmVzc0ZhY3RvciAqPSB0ZXhlbE1ldGFs
bmVzcy5iO1xuI2VuZGlmXG4iOworICAgICAgICAgICAgZnVuY3Rpb24gc2VyaWFsaXplKCBsaWJy
YXJ5LCBlbGVtZW50ICkgewogCi0gICAgdmFyIG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50ID0g
IiNpZmRlZiBVU0VfTUVUQUxORVNTTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01h
cDtcbiNlbmRpZiI7CisgICAgICAgICAgICAgICAgaWYgKCBsaWJyYXJ5WyBlbGVtZW50LnV1aWQg
XSA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgdmFyIG1vcnBobm9ybWFsX3ZlcnRleCA9ICIjaWZk
ZWYgVVNFX01PUlBITk9STUFMU1xuXHRvYmplY3ROb3JtYWwgKz0gKCBtb3JwaE5vcm1hbDAgLSBu
b3JtYWwgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xuXHRvYmplY3ROb3JtYWwgKz0g
KCBtb3JwaE5vcm1hbDEgLSBub3JtYWwgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xu
XHRvYmplY3ROb3JtYWwgKz0gKCBtb3JwaE5vcm1hbDIgLSBub3JtYWwgKSAqIG1vcnBoVGFyZ2V0
SW5mbHVlbmNlc1sgMiBdO1xuXHRvYmplY3ROb3JtYWwgKz0gKCBtb3JwaE5vcm1hbDMgLSBub3Jt
YWwgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xuI2VuZGlmXG4iOworICAgICAgICAg
ICAgICAgICAgICBsaWJyYXJ5WyBlbGVtZW50LnV1aWQgXSA9IGVsZW1lbnQudG9KU09OKCBtZXRh
ICk7CiAKLSAgICB2YXIgbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXggPSAiI2lmZGVmIFVTRV9NT1JQ
SFRBUkdFVFNcblx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdHVuaWZvcm0gZmxvYXQgbW9y
cGhUYXJnZXRJbmZsdWVuY2VzWyA4IF07XG5cdCNlbHNlXG5cdHVuaWZvcm0gZmxvYXQgbW9ycGhU
YXJnZXRJbmZsdWVuY2VzWyA0IF07XG5cdCNlbmRpZlxuI2VuZGlmIjsKKyAgICAgICAgICAgICAg
ICB9CiAKLSAgICB2YXIgbW9ycGh0YXJnZXRfdmVydGV4ID0gIiNpZmRlZiBVU0VfTU9SUEhUQVJH
RVRTXG5cdHRyYW5zZm9ybWVkICs9ICggbW9ycGhUYXJnZXQwIC0gcG9zaXRpb24gKSAqIG1vcnBo
VGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xuXHR0cmFuc2Zvcm1lZCArPSAoIG1vcnBoVGFyZ2V0MSAt
IHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0dHJhbnNmb3JtZWQg
Kz0gKCBtb3JwaFRhcmdldDIgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAy
IF07XG5cdHRyYW5zZm9ybWVkICs9ICggbW9ycGhUYXJnZXQzIC0gcG9zaXRpb24gKSAqIG1vcnBo
VGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xuXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0dHJh
bnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDQgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZs
dWVuY2VzWyA0IF07XG5cdHRyYW5zZm9ybWVkICs9ICggbW9ycGhUYXJnZXQ1IC0gcG9zaXRpb24g
KSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdO1xuXHR0cmFuc2Zvcm1lZCArPSAoIG1vcnBo
VGFyZ2V0NiAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTtcblx0dHJh
bnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDcgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZs
dWVuY2VzWyA3IF07XG5cdCNlbmRpZlxuI2VuZGlmXG4iOworICAgICAgICAgICAgICAgIHJldHVy
biBlbGVtZW50LnV1aWQ7CiAKLSAgICB2YXIgbm9ybWFsX2ZyYWdtZW50X2JlZ2luID0gIiNpZmRl
ZiBGTEFUX1NIQURFRFxuXHR2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCAp
LCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0
dmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3Np
dGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgbm9ybWFsID0gbm9y
bWFsaXplKCBjcm9zcyggZmR4LCBmZHkgKSApO1xuI2Vsc2Vcblx0dmVjMyBub3JtYWwgPSBub3Jt
YWxpemUoIHZOb3JtYWwgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5v
cm1hbCAqICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0I2VuZGlm
XG4jZW5kaWZcbiI7CisgICAgICAgICAgICB9CiAKLSAgICB2YXIgbm9ybWFsX2ZyYWdtZW50X21h
cHMgPSAiI2lmZGVmIFVTRV9OT1JNQUxNQVBcblx0I2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1B
UFxuXHRcdG5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAx
LjA7XG5cdFx0I2lmZGVmIEZMSVBfU0lERURcblx0XHRcdG5vcm1hbCA9IC0gbm9ybWFsO1xuXHRc
dCNlbmRpZlxuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdG5vcm1hbCA9IG5vcm1hbCAq
ICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHQjZW5kaWZcblx0
XHRub3JtYWwgPSBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xuXHQjZWxzZVxu
XHRcdG5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtdlZpZXdQb3NpdGlvbiwgbm9ybWFsICk7
XG5cdCNlbmRpZlxuI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKVxuXHRub3JtYWwgPSBwZXJ0
dXJiTm9ybWFsQXJiKCAtdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBkSGR4eV9md2QoKSApO1xuI2Vu
ZGlmXG4iOworICAgICAgICAgICAgaWYgKCB0aGlzLmlzTWVzaCB8fCB0aGlzLmlzTGluZSB8fCB0
aGlzLmlzUG9pbnRzICkgewogCi0gICAgdmFyIG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50ID0gIiNp
ZmRlZiBVU0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcblx0dW5p
Zm9ybSB2ZWMyIG5vcm1hbFNjYWxlO1xuXHQjaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXG5c
dFx0dW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDtcblx0I2Vsc2Vcblx0XHR2ZWMzIHBlcnR1cmJO
b3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtICkge1xuXHRcdFx0dmVjMyBx
MCA9IHZlYzMoIGRGZHgoIGV5ZV9wb3MueCApLCBkRmR4KCBleWVfcG9zLnkgKSwgZEZkeCggZXll
X3Bvcy56ICkgKTtcblx0XHRcdHZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZk
eSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7XG5cdFx0XHR2ZWMyIHN0MCA9IGRG
ZHgoIHZVdi5zdCApO1xuXHRcdFx0dmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTtcblx0XHRcdGZs
b2F0IHNjYWxlID0gc2lnbiggc3QxLnQgKiBzdDAucyAtIHN0MC50ICogc3QxLnMgKTtcblx0XHRc
dHZlYzMgUyA9IG5vcm1hbGl6ZSggKCBxMCAqIHN0MS50IC0gcTEgKiBzdDAudCApICogc2NhbGUg
KTtcblx0XHRcdHZlYzMgVCA9IG5vcm1hbGl6ZSggKCAtIHEwICogc3QxLnMgKyBxMSAqIHN0MC5z
ICkgKiBzY2FsZSApO1xuXHRcdFx0dmVjMyBOID0gbm9ybWFsaXplKCBzdXJmX25vcm0gKTtcblx0
XHRcdG1hdDMgdHNuID0gbWF0MyggUywgVCwgTiApO1xuXHRcdFx0dmVjMyBtYXBOID0gdGV4dHVy
ZTJEKCBub3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0XHRcdG1hcE4ueHkgKj0g
bm9ybWFsU2NhbGU7XG5cdFx0XHRtYXBOLnh5ICo9ICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkg
KiAyLjAgLSAxLjAgKTtcblx0XHRcdHJldHVybiBub3JtYWxpemUoIHRzbiAqIG1hcE4gKTtcblx0
XHR9XG5cdCNlbmRpZlxuI2VuZGlmXG4iOworICAgICAgICAgICAgICAgIG9iamVjdC5nZW9tZXRy
eSA9IHNlcmlhbGl6ZSggbWV0YS5nZW9tZXRyaWVzLCB0aGlzLmdlb21ldHJ5ICk7CiAKLSAgICB2
YXIgcGFja2luZyA9ICJ2ZWMzIHBhY2tOb3JtYWxUb1JHQiggY29uc3QgaW4gdmVjMyBub3JtYWwg
KSB7XG5cdHJldHVybiBub3JtYWxpemUoIG5vcm1hbCApICogMC41ICsgMC41O1xufVxudmVjMyB1
bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7XG5cdHJldHVybiAyLjAgKiBy
Z2IueHl6IC0gMS4wO1xufVxuY29uc3QgZmxvYXQgUGFja1Vwc2NhbGUgPSAyNTYuIC8gMjU1Ljtj
b25zdCBmbG9hdCBVbnBhY2tEb3duc2NhbGUgPSAyNTUuIC8gMjU2LjtcbmNvbnN0IHZlYzMgUGFj
a0ZhY3RvcnMgPSB2ZWMzKCAyNTYuICogMjU2LiAqIDI1Ni4sIDI1Ni4gKiAyNTYuLCAgMjU2LiAp
O1xuY29uc3QgdmVjNCBVbnBhY2tGYWN0b3JzID0gVW5wYWNrRG93bnNjYWxlIC8gdmVjNCggUGFj
a0ZhY3RvcnMsIDEuICk7XG5jb25zdCBmbG9hdCBTaGlmdFJpZ2h0OCA9IDEuIC8gMjU2LjtcbnZl
YzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkge1xuXHR2ZWM0IHIgPSB2ZWM0
KCBmcmFjdCggdiAqIFBhY2tGYWN0b3JzICksIHYgKTtcblx0ci55encgLT0gci54eXogKiBTaGlm
dFJpZ2h0ODtcdHJldHVybiByICogUGFja1Vwc2NhbGU7XG59XG5mbG9hdCB1bnBhY2tSR0JBVG9E
ZXB0aCggY29uc3QgaW4gdmVjNCB2ICkge1xuXHRyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3Jz
ICk7XG59XG5mbG9hdCB2aWV3WlRvT3J0aG9ncmFwaGljRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZp
ZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVy
biAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7XG59XG5mbG9hdCBvcnRob2dyYXBo
aWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9h
dCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiBsaW5lYXJDbGlwWiAqICgg
bmVhciAtIGZhciApIC0gbmVhcjtcbn1cbmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBj
b25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQg
ZmFyICkge1xuXHRyZXR1cm4gKCggbmVhciArIHZpZXdaICkgKiBmYXIgKSAvICgoIGZhciAtIG5l
YXIgKSAqIHZpZXdaICk7XG59XG5mbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3Qg
aW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZh
ciApIHtcblx0cmV0dXJuICggbmVhciAqIGZhciApIC8gKCAoIGZhciAtIG5lYXIgKSAqIGludkNs
aXBaIC0gZmFyICk7XG59XG4iOworICAgICAgICAgICAgICAgIHZhciBwYXJhbWV0ZXJzID0gdGhp
cy5nZW9tZXRyeS5wYXJhbWV0ZXJzOwogCi0gICAgdmFyIHByZW11bHRpcGxpZWRfYWxwaGFfZnJh
Z21lbnQgPSAiI2lmZGVmIFBSRU1VTFRJUExJRURfQUxQSEFcblx0Z2xfRnJhZ0NvbG9yLnJnYiAq
PSBnbF9GcmFnQ29sb3IuYTtcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgICAgICBpZiAoIHBhcmFt
ZXRlcnMgIT09IHVuZGVmaW5lZCAmJiBwYXJhbWV0ZXJzLnNoYXBlcyAhPT0gdW5kZWZpbmVkICkg
ewogCi0gICAgdmFyIHByb2plY3RfdmVydGV4ID0gInZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmll
d01hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcbmdsX1Bvc2l0aW9uID0gcHJvamVj
dGlvbk1hdHJpeCAqIG12UG9zaXRpb247XG4iOworICAgICAgICAgICAgICAgICAgICB2YXIgc2hh
cGVzID0gcGFyYW1ldGVycy5zaGFwZXM7CiAKLSAgICB2YXIgZGl0aGVyaW5nX2ZyYWdtZW50ID0g
IiNpZiBkZWZpbmVkKCBESVRIRVJJTkcgKVxuICBnbF9GcmFnQ29sb3IucmdiID0gZGl0aGVyaW5n
KCBnbF9GcmFnQ29sb3IucmdiICk7XG4jZW5kaWZcbiI7CisgICAgICAgICAgICAgICAgICAgIGlm
ICggQXJyYXkuaXNBcnJheSggc2hhcGVzICkgKSB7CiAKLSAgICB2YXIgZGl0aGVyaW5nX3BhcnNf
ZnJhZ21lbnQgPSAiI2lmIGRlZmluZWQoIERJVEhFUklORyApXG5cdHZlYzMgZGl0aGVyaW5nKCB2
ZWMzIGNvbG9yICkge1xuXHRcdGZsb2F0IGdyaWRfcG9zaXRpb24gPSByYW5kKCBnbF9GcmFnQ29v
cmQueHkgKTtcblx0XHR2ZWMzIGRpdGhlcl9zaGlmdF9SR0IgPSB2ZWMzKCAwLjI1IC8gMjU1LjAs
IC0wLjI1IC8gMjU1LjAsIDAuMjUgLyAyNTUuMCApO1xuXHRcdGRpdGhlcl9zaGlmdF9SR0IgPSBt
aXgoIDIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIC0yLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCBncmlk
X3Bvc2l0aW9uICk7XG5cdFx0cmV0dXJuIGNvbG9yICsgZGl0aGVyX3NoaWZ0X1JHQjtcblx0fVxu
I2VuZGlmXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0g
c2hhcGVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICB2YXIgcm91Z2huZXNzbWFwX2Zy
YWdtZW50ID0gImZsb2F0IHJvdWdobmVzc0ZhY3RvciA9IHJvdWdobmVzcztcbiNpZmRlZiBVU0Vf
Uk9VR0hORVNTTUFQXG5cdHZlYzQgdGV4ZWxSb3VnaG5lc3MgPSB0ZXh0dXJlMkQoIHJvdWdobmVz
c01hcCwgdlV2ICk7XG5cdHJvdWdobmVzc0ZhY3RvciAqPSB0ZXhlbFJvdWdobmVzcy5nO1xuI2Vu
ZGlmXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaGFwZSA9IHNoYXBlc1sg
aSBdOwogCi0gICAgdmFyIHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50ID0gIiNpZmRlZiBVU0Vf
Uk9VR0hORVNTTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDtcbiNlbmRpZiI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplKCBtZXRhLnNoYXBlcywgc2hh
cGUgKTsKIAotICAgIHZhciBzaGFkb3dtYXBfcGFyc19mcmFnbWVudCA9ICIjaWZkZWYgVVNFX1NI
QURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVFMgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQg
ZGlyZWN0aW9uYWxTaGFkb3dNYXBbIE5VTV9ESVJfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0
IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0
I2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcG90U2hhZG93
TWFwWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29y
ZFsgTlVNX1NQT1RfTElHSFRTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUUyA+
IDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBwb2ludFNoYWRvd01hcFsgTlVNX1BPSU5UX0xJR0hU
UyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hU
UyBdO1xuXHQjZW5kaWZcblx0ZmxvYXQgdGV4dHVyZTJEQ29tcGFyZSggc2FtcGxlcjJEIGRlcHRo
cywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApIHtcblx0XHRyZXR1cm4gc3RlcCggY29tcGFyZSwg
dW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggZGVwdGhzLCB1diApICkgKTtcblx0fVxuXHRm
bG9hdCB0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHNpemUsIHZl
YzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XG5cdFx0Y29uc3QgdmVjMiBvZmZzZXQgPSB2ZWMyKCAw
LjAsIDEuMCApO1xuXHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaXplO1xuXHRc
dHZlYzIgY2VudHJvaWRVViA9IGZsb29yKCB1diAqIHNpemUgKyAwLjUgKSAvIHNpemU7XG5cdFx0
ZmxvYXQgbGIgPSB0ZXh0dXJlMkRDb21wYXJlKCBkZXB0aHMsIGNlbnRyb2lkVVYgKyB0ZXhlbFNp
emUgKiBvZmZzZXQueHgsIGNvbXBhcmUgKTtcblx0XHRmbG9hdCBsdCA9IHRleHR1cmUyRENvbXBh
cmUoIGRlcHRocywgY2VudHJvaWRVViArIHRleGVsU2l6ZSAqIG9mZnNldC54eSwgY29tcGFyZSAp
O1xuXHRcdGZsb2F0IHJiID0gdGV4dHVyZTJEQ29tcGFyZSggZGVwdGhzLCBjZW50cm9pZFVWICsg
dGV4ZWxTaXplICogb2Zmc2V0Lnl4LCBjb21wYXJlICk7XG5cdFx0ZmxvYXQgcnQgPSB0ZXh0dXJl
MkRDb21wYXJlKCBkZXB0aHMsIGNlbnRyb2lkVVYgKyB0ZXhlbFNpemUgKiBvZmZzZXQueXksIGNv
bXBhcmUgKTtcblx0XHR2ZWMyIGYgPSBmcmFjdCggdXYgKiBzaXplICsgMC41ICk7XG5cdFx0Zmxv
YXQgYSA9IG1peCggbGIsIGx0LCBmLnkgKTtcblx0XHRmbG9hdCBiID0gbWl4KCByYiwgcnQsIGYu
eSApO1xuXHRcdGZsb2F0IGMgPSBtaXgoIGEsIGIsIGYueCApO1xuXHRcdHJldHVybiBjO1xuXHR9
XG5cdGZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBT
aXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29v
cmQgKSB7XG5cdFx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHRcdHNoYWRvd0Nvb3JkLnh5eiAvPSBz
aGFkb3dDb29yZC53O1xuXHRcdHNoYWRvd0Nvb3JkLnogKz0gc2hhZG93Qmlhcztcblx0XHRidmVj
NCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29y
ZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7
XG5cdFx0Ym9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApO1xuXHRcdGJ2ZWMyIGZy
dXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTtc
blx0XHRib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApO1xuXHRcdGlmICgg
ZnJ1c3R1bVRlc3QgKSB7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApXG5c
dFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRc
dGZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBk
eTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxID0gKyB0
ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSA9ICsgdGV4ZWxTaXpl
LnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRzaGFkb3cgPSAoXG5cdFx0XHRcdHRleHR1cmUyRENv
bXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFk
b3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRv
d0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0
dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwg
ZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRv
d01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkg
K1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBz
aGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNo
YWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRc
dFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4
MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNo
YWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56
ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5
ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApXG5cdFx0XHQpICogKCAxLjAgLyA5
LjAgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApXG5cdFx0
XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZs
b2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAg
PSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxID0gKyB0ZXhl
bFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkg
KiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRzaGFkb3cgPSAoXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRv
d0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBk
eDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJw
KCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBk
eTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hh
ZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICks
IHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01h
cCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFk
b3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNo
YWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0
ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3Jk
Lnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVy
ZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSAr
IHZlYzIoIGR4MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNo
YWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMy
KCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dM
ZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgx
LCBkeTEgKSwgc2hhZG93Q29vcmQueiApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQj
ZWxzZVxuXHRcdFx0c2hhZG93ID0gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dD
b29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbmRpZlxuXHRcdH1cblx0XHRyZXR1cm4g
c2hhZG93O1xuXHR9XG5cdHZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSAp
IHtcblx0XHR2ZWMzIGFic1YgPSBhYnMoIHYgKTtcblx0XHRmbG9hdCBzY2FsZVRvQ3ViZSA9IDEu
MCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTtcblx0XHRhYnNWICo9IHNj
YWxlVG9DdWJlO1xuXHRcdHYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6
ZVkgKTtcblx0XHR2ZWMyIHBsYW5hciA9IHYueHk7XG5cdFx0ZmxvYXQgYWxtb3N0QVRleGVsID0g
MS41ICogdGV4ZWxTaXplWTtcblx0XHRmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4
ZWw7XG5cdFx0aWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkge1xuXHRcdFx0aWYgKCB2LnogPiAw
LjAgKVxuXHRcdFx0XHRwbGFuYXIueCA9IDQuMCAtIHYueDtcblx0XHR9IGVsc2UgaWYgKCBhYnNW
LnggPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTtcblx0
XHRcdHBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcblx0XHR9IGVsc2UgaWYg
KCBhYnNWLnkgPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblkgPSBzaWduKCB2Lnkg
KTtcblx0XHRcdHBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7XG5cdFx0XHRwbGFu
YXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wO1xuXHRcdH1cblx0XHRyZXR1cm4gdmVjMiggMC4xMjUs
IDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XG5cdH1cblx0ZmxvYXQgZ2V0
UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxv
YXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9h
dCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7XG5cdFx0dmVjMiB0
ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4w
ICkgKTtcblx0XHR2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNoYWRvd0Nvb3JkLnh5ejtcblx0XHRm
bG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIg
KSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApO1x0XHRkcCArPSBzaGFk
b3dCaWFzO1xuXHRcdHZlYzMgYmQzRCA9IG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7XG5c
dFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01B
UF9UWVBFX1BDRl9TT0ZUIClcblx0XHRcdHZlYzIgb2Zmc2V0ID0gdmVjMiggLSAxLCAxICkgKiBz
aGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHRleHR1
cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhl
bFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBj
dWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0
XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5
eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRv
d01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICtc
blx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4
ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwg
Y3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRc
dFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55
eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFk
b3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSAr
XG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBv
ZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtc
blx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3Vi
ZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRp
ZlxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgIHZhciBzaGFkb3dtYXBfcGFy
c192ZXJ0ZXggPSAiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRTID4g
MFxuXHRcdHVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdI
VFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJf
TElHSFRTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHRcdHVuaWZv
cm0gbWF0NCBzcG90U2hhZG93TWF0cml4WyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0XHR2YXJ5aW5n
IHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRTIF07XG5cdCNlbmRpZlxuXHQj
aWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgcG9pbnRTaGFkb3dNYXRy
aXhbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29v
cmRbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0I2VuZGlmXG4jZW5kaWZcbiI7CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICB2YXIgc2hhZG93bWFwX3ZlcnRleCA9ICIjaWZkZWYg
VVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xs
X2xvb3Bcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7XG5c
dFx0dkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSA9IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4
WyBpIF0gKiB3b3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElH
SFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5V
TV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHR2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90
U2hhZG93TWF0cml4WyBpIF0gKiB3b3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNlbmRpZlxuXHQjaWYg
TlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQg
aSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdHZQb2ludFNoYWRvd0Nv
b3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogd29ybGRQb3NpdGlvbjtcblx0fVxu
XHQjZW5kaWZcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZSgg
bWV0YS5zaGFwZXMsIHNoYXBlcyApOwogCi0gICAgdmFyIHNoYWRvd21hc2tfcGFyc19mcmFnbWVu
dCA9ICJmbG9hdCBnZXRTaGFkb3dNYXNrKCkge1xuXHRmbG9hdCBzaGFkb3cgPSAxLjA7XG5cdCNp
ZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0RGlyZWN0aW9u
YWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAo
IGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFs
TGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSBib29sKCBkaXJl
Y3Rpb25hbExpZ2h0LnNoYWRvdyApID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsg
aSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hh
ZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRv
d0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hU
UyA+IDBcblx0U3BvdExpZ2h0IHNwb3RMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRm
b3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0c3BvdExp
Z2h0ID0gc3BvdExpZ2h0c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSBib29sKCBzcG90TGlnaHQuc2hh
ZG93ICkgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01h
cFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3Bv
dFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lO
VF9MSUdIVFMgPiAwXG5cdFBvaW50TGlnaHQgcG9pbnRMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxf
bG9vcFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xu
XHRcdHBvaW50TGlnaHQgPSBwb2ludExpZ2h0c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSBib29sKCBw
b2ludExpZ2h0LnNoYWRvdyApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0s
IHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExp
Z2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodC5zaGFk
b3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYUZhciApIDogMS4wO1xuXHR9XG5c
dCNlbmRpZlxuXHQjZW5kaWZcblx0cmV0dXJuIHNoYWRvdztcbn1cbiI7CisgICAgICAgICAgICAg
ICAgICAgIH0KIAotICAgIHZhciBza2luYmFzZV92ZXJ0ZXggPSAiI2lmZGVmIFVTRV9TS0lOTklO
R1xuXHRtYXQ0IGJvbmVNYXRYID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnggKTtcblx0bWF0
NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7XG5cdG1hdDQgYm9uZU1h
dFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApO1xuXHRtYXQ0IGJvbmVNYXRXID0gZ2V0
Qm9uZU1hdHJpeCggc2tpbkluZGV4LncgKTtcbiNlbmRpZiI7CisgICAgICAgICAgICAgICAgfQog
Ci0gICAgdmFyIHNraW5uaW5nX3BhcnNfdmVydGV4ID0gIiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0
dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXg7XG5cdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJz
ZTtcblx0I2lmZGVmIEJPTkVfVEVYVFVSRVxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGJvbmVUZXh0
dXJlO1xuXHRcdHVuaWZvcm0gaW50IGJvbmVUZXh0dXJlU2l6ZTtcblx0XHRtYXQ0IGdldEJvbmVN
YXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7XG5cdFx0XHRmbG9hdCBqID0gaSAqIDQuMDtcblx0
XHRcdGZsb2F0IHggPSBtb2QoIGosIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApO1xuXHRcdFx0
ZmxvYXQgeSA9IGZsb29yKCBqIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRm
bG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcblx0XHRcdGZsb2F0IGR5
ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0eSA9IGR5ICogKCB5ICsg
MC41ICk7XG5cdFx0XHR2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHgg
KiAoIHggKyAwLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYyID0gdGV4dHVyZTJEKCBib25lVGV4
dHVyZSwgdmVjMiggZHggKiAoIHggKyAxLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYzID0gdGV4
dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAyLjUgKSwgeSApICk7XG5cdFx0
XHR2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUg
KSwgeSApICk7XG5cdFx0XHRtYXQ0IGJvbmUgPSBtYXQ0KCB2MSwgdjIsIHYzLCB2NCApO1xuXHRc
dFx0cmV0dXJuIGJvbmU7XG5cdFx0fVxuXHQjZWxzZVxuXHRcdHVuaWZvcm0gbWF0NCBib25lTWF0
cmljZXNbIE1BWF9CT05FUyBdO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxv
YXQgaSApIHtcblx0XHRcdG1hdDQgYm9uZSA9IGJvbmVNYXRyaWNlc1sgaW50KGkpIF07XG5cdFx0
XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbmRpZlxuI2VuZGlmXG4iOworICAgICAgICAgICAg
fQogCi0gICAgdmFyIHNraW5uaW5nX3ZlcnRleCA9ICIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdHZl
YzQgc2tpblZlcnRleCA9IGJpbmRNYXRyaXggKiB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XG5c
dHZlYzQgc2tpbm5lZCA9IHZlYzQoIDAuMCApO1xuXHRza2lubmVkICs9IGJvbmVNYXRYICogc2tp
blZlcnRleCAqIHNraW5XZWlnaHQueDtcblx0c2tpbm5lZCArPSBib25lTWF0WSAqIHNraW5WZXJ0
ZXggKiBza2luV2VpZ2h0Lnk7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFogKiBza2luVmVydGV4ICog
c2tpbldlaWdodC56O1xuXHRza2lubmVkICs9IGJvbmVNYXRXICogc2tpblZlcnRleCAqIHNraW5X
ZWlnaHQudztcblx0dHJhbnNmb3JtZWQgPSAoIGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbm5lZCAp
Lnh5ejtcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgIGlmICggdGhpcy5tYXRlcmlhbCAhPT0gdW5k
ZWZpbmVkICkgewogCi0gICAgdmFyIHNraW5ub3JtYWxfdmVydGV4ID0gIiNpZmRlZiBVU0VfU0tJ
Tk5JTkdcblx0bWF0NCBza2luTWF0cml4ID0gbWF0NCggMC4wICk7XG5cdHNraW5NYXRyaXggKz0g
c2tpbldlaWdodC54ICogYm9uZU1hdFg7XG5cdHNraW5NYXRyaXggKz0gc2tpbldlaWdodC55ICog
Ym9uZU1hdFk7XG5cdHNraW5NYXRyaXggKz0gc2tpbldlaWdodC56ICogYm9uZU1hdFo7XG5cdHNr
aW5NYXRyaXggKz0gc2tpbldlaWdodC53ICogYm9uZU1hdFc7XG5cdHNraW5NYXRyaXggID0gYmlu
ZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDtcblx0b2JqZWN0Tm9ybWFs
ID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7XG4j
ZW5kaWZcbiI7CisgICAgICAgICAgICAgICAgaWYgKCBBcnJheS5pc0FycmF5KCB0aGlzLm1hdGVy
aWFsICkgKSB7CiAKLSAgICB2YXIgc3BlY3VsYXJtYXBfZnJhZ21lbnQgPSAiZmxvYXQgc3BlY3Vs
YXJTdHJlbmd0aDtcbiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcblx0dmVjNCB0ZXhlbFNwZWN1bGFy
ID0gdGV4dHVyZTJEKCBzcGVjdWxhck1hcCwgdlV2ICk7XG5cdHNwZWN1bGFyU3RyZW5ndGggPSB0
ZXhlbFNwZWN1bGFyLnI7XG4jZWxzZVxuXHRzcGVjdWxhclN0cmVuZ3RoID0gMS4wO1xuI2VuZGlm
IjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHV1aWRzID0gW107CiAKLSAgICB2YXIgc3BlY3Vs
YXJtYXBfcGFyc19mcmFnbWVudCA9ICIjaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHVuaWZvcm0g
c2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xuI2VuZGlmIjsKKyAgICAgICAgICAgICAgICAgICAgZm9y
ICggdmFyIGkgPSAwLCBsID0gdGhpcy5tYXRlcmlhbC5sZW5ndGg7IGkgPCBsOyBpICsrICkgewog
Ci0gICAgdmFyIHRvbmVtYXBwaW5nX2ZyYWdtZW50ID0gIiNpZiBkZWZpbmVkKCBUT05FX01BUFBJ
TkcgKVxuICBnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2Ig
KTtcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHV1aWRzLnB1c2goIHNlcmlh
bGl6ZSggbWV0YS5tYXRlcmlhbHMsIHRoaXMubWF0ZXJpYWxbIGkgXSApICk7CiAKLSAgICB2YXIg
dG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudCA9ICIjaWZuZGVmIHNhdHVyYXRlXG5cdCNkZWZpbmUg
c2F0dXJhdGUoYSkgY2xhbXAoIGEsIDAuMCwgMS4wIClcbiNlbmRpZlxudW5pZm9ybSBmbG9hdCB0
b25lTWFwcGluZ0V4cG9zdXJlO1xudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ1doaXRlUG9pbnQ7
XG52ZWMzIExpbmVhclRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRyZXR1cm4gdG9uZU1h
cHBpbmdFeHBvc3VyZSAqIGNvbG9yO1xufVxudmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMz
IGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRyZXR1cm4gc2F0
dXJhdGUoIGNvbG9yIC8gKCB2ZWMzKCAxLjAgKSArIGNvbG9yICkgKTtcbn1cbiNkZWZpbmUgVW5j
aGFydGVkMkhlbHBlciggeCApIG1heCggKCAoIHggKiAoIDAuMTUgKiB4ICsgMC4xMCAqIDAuNTAg
KSArIDAuMjAgKiAwLjAyICkgLyAoIHggKiAoIDAuMTUgKiB4ICsgMC41MCApICsgMC4yMCAqIDAu
MzAgKSApIC0gMC4wMiAvIDAuMzAsIHZlYzMoIDAuMCApIClcbnZlYzMgVW5jaGFydGVkMlRvbmVN
YXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xu
XHRyZXR1cm4gc2F0dXJhdGUoIFVuY2hhcnRlZDJIZWxwZXIoIGNvbG9yICkgLyBVbmNoYXJ0ZWQy
SGVscGVyKCB2ZWMzKCB0b25lTWFwcGluZ1doaXRlUG9pbnQgKSApICk7XG59XG52ZWMzIE9wdGlt
aXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFw
cGluZ0V4cG9zdXJlO1xuXHRjb2xvciA9IG1heCggdmVjMyggMC4wICksIGNvbG9yIC0gMC4wMDQg
KTtcblx0cmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBj
b2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTtcbn1c
biI7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgIHZhciB1dl9wYXJzX2ZyYWdtZW50ID0g
IiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZp
bmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX1NQRUNVTEFSTUFQICkgfHwgZGVm
aW5lZCggVVNFX0FMUEhBTUFQICkgfHwgZGVmaW5lZCggVVNFX0VNSVNTSVZFTUFQICkgfHwgZGVm
aW5lZCggVVNFX1JPVUdITkVTU01BUCApIHx8IGRlZmluZWQoIFVTRV9NRVRBTE5FU1NNQVAgKVxu
XHR2YXJ5aW5nIHZlYzIgdlV2O1xuI2VuZGlmIjsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0
Lm1hdGVyaWFsID0gdXVpZHM7CiAKLSAgICB2YXIgdXZfcGFyc192ZXJ0ZXggPSAiI2lmIGRlZmlu
ZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9O
T1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfU1BFQ1VMQVJNQVAgKSB8fCBkZWZpbmVkKCBVU0Vf
QUxQSEFNQVAgKSB8fCBkZWZpbmVkKCBVU0VfRU1JU1NJVkVNQVAgKSB8fCBkZWZpbmVkKCBVU0Vf
Uk9VR0hORVNTTUFQICkgfHwgZGVmaW5lZCggVVNFX01FVEFMTkVTU01BUCApXG5cdHZhcnlpbmcg
dmVjMiB2VXY7XG5cdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbiNlbmRpZlxuIjsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgewogCi0gICAgdmFyIHV2X3ZlcnRleCA9ICIjaWYgZGVmaW5lZCgg
VVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1B
TE1BUCApIHx8IGRlZmluZWQoIFVTRV9TUEVDVUxBUk1BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBI
QU1BUCApIHx8IGRlZmluZWQoIFVTRV9FTUlTU0lWRU1BUCApIHx8IGRlZmluZWQoIFVTRV9ST1VH
SE5FU1NNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTUVUQUxORVNTTUFQIClcblx0dlV2ID0gKCB1dlRy
YW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTtcbiNlbmRpZiI7CisgICAgICAgICAgICAgICAg
ICAgIG9iamVjdC5tYXRlcmlhbCA9IHNlcmlhbGl6ZSggbWV0YS5tYXRlcmlhbHMsIHRoaXMubWF0
ZXJpYWwgKTsKIAotICAgIHZhciB1djJfcGFyc19mcmFnbWVudCA9ICIjaWYgZGVmaW5lZCggVVNF
X0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjI7
XG4jZW5kaWYiOworICAgICAgICAgICAgICAgIH0KIAotICAgIHZhciB1djJfcGFyc192ZXJ0ZXgg
PSAiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5c
dGF0dHJpYnV0ZSB2ZWMyIHV2Mjtcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiOworICAg
ICAgICAgICAgfQogCi0gICAgdmFyIHV2Ml92ZXJ0ZXggPSAiI2lmIGRlZmluZWQoIFVTRV9MSUdI
VE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdHZVdjIgPSB1djI7XG4jZW5kaWYiOwor
ICAgICAgICAgICAgLy8KIAotICAgIHZhciB3b3JsZHBvc192ZXJ0ZXggPSAiI2lmIGRlZmluZWQo
IFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkKCBESVNUQU5DRSApIHx8IGRlZmluZWQgKCBVU0VfU0hB
RE9XTUFQIClcblx0dmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiB2ZWM0KCB0cmFu
c2Zvcm1lZCwgMS4wICk7XG4jZW5kaWZcbiI7CisgICAgICAgICAgICBpZiAoIHRoaXMuY2hpbGRy
ZW4ubGVuZ3RoID4gMCApIHsKIAotICAgIHZhciBjdWJlX2ZyYWcgPSAidW5pZm9ybSBzYW1wbGVy
Q3ViZSB0Q3ViZTtcbnVuaWZvcm0gZmxvYXQgdEZsaXA7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7
XG52YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdD
b2xvciA9IHRleHR1cmVDdWJlKCB0Q3ViZSwgdmVjMyggdEZsaXAgKiB2V29ybGRQb3NpdGlvbi54
LCB2V29ybGRQb3NpdGlvbi55eiApICk7XG5cdGdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7XG59
XG4iOworICAgICAgICAgICAgICAgIG9iamVjdC5jaGlsZHJlbiA9IFtdOwogCi0gICAgdmFyIGN1
YmVfdmVydCA9ICJ2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9u
Plxudm9pZCBtYWluKCkge1xuXHR2V29ybGRQb3NpdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbigg
cG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNp
bmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9zaXRpb24ueiA9IGdsX1Bvc2l0aW9uLnc7
XG59XG4iOworICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRy
ZW4ubGVuZ3RoOyBpICsrICkgewogCi0gICAgdmFyIGRlcHRoX2ZyYWcgPSAiI2lmIERFUFRIX1BB
Q0tJTkcgPT0gMzIwMFxuXHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jZW5kaWZcbiNpbmNsdWRl
IDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50
PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNf
ZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRl
IDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1
ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0
KCAxLjAgKTtcblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGRpZmZ1c2VDb2xvci5h
ID0gb3BhY2l0eTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNs
dWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5c
blx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaWYgREVQVEhfUEFDS0lORyA9
PSAzMjAwXG5cdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZ2xfRnJhZ0Nvb3Jk
LnogKSwgb3BhY2l0eSApO1xuXHQjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDFcblx0XHRnbF9G
cmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGdsX0ZyYWdDb29yZC56ICk7XG5cdCNlbmRpZlxu
fVxuIjsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmNoaWxkcmVuLnB1c2goIHRoaXMuY2hp
bGRyZW5bIGkgXS50b0pTT04oIG1ldGEgKS5vYmplY3QgKTsKIAotICAgIHZhciBkZXB0aF92ZXJ0
ID0gIiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVk
ZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3Bh
cnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxv
Z2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3Zl
cnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUg
PHNraW5iYXNlX3ZlcnRleD5cblx0I2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0XHQjaW5j
bHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0
ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1
ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2lu
Y2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0
ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVm
X3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG59XG4iOworICAg
ICAgICAgICAgICAgIH0KIAotICAgIHZhciBkaXN0YW5jZVJHQkFfZnJhZyA9ICIjZGVmaW5lIERJ
U1RBTkNFXG51bmlmb3JtIHZlYzMgcmVmZXJlbmNlUG9zaXRpb247XG51bmlmb3JtIGZsb2F0IG5l
YXJEaXN0YW5jZTtcbnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7XG52YXJ5aW5nIHZlYzMgdldv
cmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5j
bHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNp
bmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5l
c19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluICgpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3Bs
YW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2lu
Y2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQj
aW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29y
bGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7XG5cdGRpc3QgPSAoIGRpc3QgLSBuZWFy
RGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTtcblx0ZGlzdCA9IHNh
dHVyYXRlKCBkaXN0ICk7XG5cdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCAp
O1xufVxuIjsKKyAgICAgICAgICAgIH0KIAotICAgIHZhciBkaXN0YW5jZVJHQkFfdmVydCA9ICIj
ZGVmaW5lIERJU1RBTkNFXG52YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8
Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVu
dG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNp
bmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNf
cGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNp
bmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5c
dFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8bW9ycGhub3Jt
YWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2VuZGlmXG5c
dCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+
XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFjZW1lbnRt
YXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3Js
ZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHR2V29y
bGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xufVxuIjsKKyAgICAgICAgICAgIGlmICgg
aXNSb290T2JqZWN0ICkgewogCi0gICAgdmFyIGVxdWlyZWN0X2ZyYWcgPSAidW5pZm9ybSBzYW1w
bGVyMkQgdEVxdWlyZWN0O1xudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUg
PGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZX
b3JsZFBvc2l0aW9uICk7XG5cdHZlYzIgc2FtcGxlVVY7XG5cdHNhbXBsZVVWLnkgPSBhc2luKCBj
bGFtcCggZGlyZWN0aW9uLnksIC0gMS4wLCAxLjAgKSApICogUkVDSVBST0NBTF9QSSArIDAuNTtc
blx0c2FtcGxlVVYueCA9IGF0YW4oIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueCApICogUkVDSVBS
T0NBTF9QSTIgKyAwLjU7XG5cdGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBz
YW1wbGVVViApO1xufVxuIjsKKyAgICAgICAgICAgICAgICB2YXIgZ2VvbWV0cmllcyA9IGV4dHJh
Y3RGcm9tQ2FjaGUoIG1ldGEuZ2VvbWV0cmllcyApOworICAgICAgICAgICAgICAgIHZhciBtYXRl
cmlhbHMgPSBleHRyYWN0RnJvbUNhY2hlKCBtZXRhLm1hdGVyaWFscyApOworICAgICAgICAgICAg
ICAgIHZhciB0ZXh0dXJlcyA9IGV4dHJhY3RGcm9tQ2FjaGUoIG1ldGEudGV4dHVyZXMgKTsKKyAg
ICAgICAgICAgICAgICB2YXIgaW1hZ2VzID0gZXh0cmFjdEZyb21DYWNoZSggbWV0YS5pbWFnZXMg
KTsKKyAgICAgICAgICAgICAgICB2YXIgc2hhcGVzID0gZXh0cmFjdEZyb21DYWNoZSggbWV0YS5z
aGFwZXMgKTsKIAotICAgIHZhciBlcXVpcmVjdF92ZXJ0ID0gInZhcnlpbmcgdmVjMyB2V29ybGRQ
b3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZFBvc2l0
aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblx0I2lu
Y2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxufVxuIjsK
KyAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJpZXMubGVuZ3RoID4gMCApIG91dHB1dC5nZW9t
ZXRyaWVzID0gZ2VvbWV0cmllczsKKyAgICAgICAgICAgICAgICBpZiAoIG1hdGVyaWFscy5sZW5n
dGggPiAwICkgb3V0cHV0Lm1hdGVyaWFscyA9IG1hdGVyaWFsczsKKyAgICAgICAgICAgICAgICBp
ZiAoIHRleHR1cmVzLmxlbmd0aCA+IDAgKSBvdXRwdXQudGV4dHVyZXMgPSB0ZXh0dXJlczsKKyAg
ICAgICAgICAgICAgICBpZiAoIGltYWdlcy5sZW5ndGggPiAwICkgb3V0cHV0LmltYWdlcyA9IGlt
YWdlczsKKyAgICAgICAgICAgICAgICBpZiAoIHNoYXBlcy5sZW5ndGggPiAwICkgb3V0cHV0LnNo
YXBlcyA9IHNoYXBlczsKIAotICAgIHZhciBsaW5lZGFzaGVkX2ZyYWcgPSAidW5pZm9ybSB2ZWMz
IGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG51bmlmb3JtIGZsb2F0IGRhc2hTaXpl
O1xudW5pZm9ybSBmbG9hdCB0b3RhbFNpemU7XG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7
XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5j
bHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFn
bWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFp
bigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0aWYgKCBtb2Qo
IHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApID4gZGFzaFNpemUgKSB7XG5cdFx0ZGlzY2FyZDtc
blx0fVxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNl
Q29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1
Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0
ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdo
dCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJh
Z21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVu
Y29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cbn1cbiI7CisgICAg
ICAgICAgICB9CiAKLSAgICB2YXIgbGluZWRhc2hlZF92ZXJ0ID0gInVuaWZvcm0gZmxvYXQgc2Nh
bGU7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZURpc3RhbmNlO1xudmFyeWluZyBmbG9hdCB2TGluZURp
c3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5c
biNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192
ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWlu
KCkge1xuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHR2TGluZURpc3RhbmNlID0gc2NhbGUg
KiBsaW5lRGlzdGFuY2U7XG5cdHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZl
YzQoIHBvc2l0aW9uLCAxLjAgKTtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICog
bXZQb3NpdGlvbjtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUg
PGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufVxuIjsK
KyAgICAgICAgICAgIG91dHB1dC5vYmplY3QgPSBvYmplY3Q7CiAKLSAgICB2YXIgbWVzaGJhc2lj
X2ZyYWcgPSAidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4j
aWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5j
bHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8
dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRl
IDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50Plxu
I2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19m
cmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2df
cGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2lu
Y2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxh
bmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19w
bGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3Bh
Y2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxt
YXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFs
cGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5j
bHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExp
Z2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4w
ICksIHZlYzMoIDAuMCApICk7XG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcblx0XHRyZWZsZWN0ZWRM
aWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApLnh5eiAq
IGxpZ2h0TWFwSW50ZW5zaXR5O1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0
RGlmZnVzZSArPSB2ZWMzKCAxLjAgKTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxhb21hcF9mcmFn
bWVudD5cblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGRpZmZ1c2VDb2xvci5y
Z2I7XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVz
ZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCgg
b3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHByZW11bHRpcGxp
ZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0
I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5c
bn1cbiI7CisgICAgICAgICAgICByZXR1cm4gb3V0cHV0OwogCi0gICAgdmFyIG1lc2hiYXNpY192
ZXJ0ID0gIiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5j
bHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD5cbiNp
bmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4j
aW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFy
c192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8
Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8
dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3Zl
cnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2lmZGVmIFVTRV9FTlZNQVBc
blx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFs
X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVm
YXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4Plxu
XHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVy
dGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1
Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlw
cGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1
ZGUgPGZvZ192ZXJ0ZXg+XG59XG4iOworICAgICAgICAgICAgLy8gZXh0cmFjdCBkYXRhIGZyb20g
dGhlIGNhY2hlIGhhc2gKKyAgICAgICAgICAgIC8vIHJlbW92ZSBtZXRhZGF0YSBvbiBlYWNoIGl0
ZW0KKyAgICAgICAgICAgIC8vIGFuZCByZXR1cm4gYXMgYXJyYXkKKyAgICAgICAgICAgIGZ1bmN0
aW9uIGV4dHJhY3RGcm9tQ2FjaGUoIGNhY2hlICkgewogCi0gICAgdmFyIG1lc2hsYW1iZXJ0X2Zy
YWcgPSAidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlm
b3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG4jaWZkZWYgRE9V
QkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8
Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJh
Z21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJz
X2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9w
YXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVk
ZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50
PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFw
X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNf
YmVnaW4+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFw
X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50PlxuI2lu
Y2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZf
cGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5c
bnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0
dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3Rl
ZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMz
KCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2
ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5c
blx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50Plxu
XHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJh
Z21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVt
aXNzaXZlbWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgPSBn
ZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHQjaW5jbHVk
ZSA8bGlnaHRtYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAq
PSBCUkRGX0RpZmZ1c2VfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApO1xuXHQjaWZkZWYgRE9V
QkxFX1NJREVEXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRG
YWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjaztcblx0I2Vsc2Vcblx0XHRyZWZsZWN0
ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7XG5cdCNlbmRpZlxuXHRyZWZsZWN0
ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBkaWZmdXNlQ29s
b3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5c
blx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJl
ZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0
I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29p
bmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdt
ZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2Zy
YWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2lu
Y2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn1cbiI7CisgICAgICAgICAgICAgICAgdmFyIHZh
bHVlcyA9IFtdOworICAgICAgICAgICAgICAgIGZvciAoIHZhciBrZXkgaW4gY2FjaGUgKSB7CiAK
LSAgICB2YXIgbWVzaGxhbWJlcnRfdmVydCA9ICIjZGVmaW5lIExBTUJFUlRcbnZhcnlpbmcgdmVj
MyB2TGlnaHRGcm9udDtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdo
dEJhY2s7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0
ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX3Zl
cnRleD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNp
bmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4j
aW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFy
c192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxv
Z2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3Zl
cnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUg
PHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdp
bm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNs
dWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0
I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4
PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdf
dmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0
aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5j
bHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2lu
Y2x1ZGUgPGxpZ2h0c19sYW1iZXJ0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0
ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufVxuIjsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIGRhdGEgPSBjYWNoZVsga2V5IF07CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRh
Lm1ldGFkYXRhOworICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCggZGF0YSApOwogCi0g
ICAgdmFyIG1lc2hwaG9uZ19mcmFnID0gIiNkZWZpbmUgUEhPTkdcbnVuaWZvcm0gdmVjMyBkaWZm
dXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSB2ZWMzIHNwZWN1bGFyO1xudW5p
Zm9ybSBmbG9hdCBzaGluaW5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8
Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJh
Z21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJz
X2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9w
YXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVk
ZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50
PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFw
X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Z3JhZGllbnRtYXBfcGFyc19mcmFnbWVudD5cbiNp
bmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxs
aWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD5c
biNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3Bh
cnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVk
ZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJz
X2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9p
ZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0
IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGln
aHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAu
MCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFk
aWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQj
aW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNp
bmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVu
dD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFs
X2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNp
bmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19waG9uZ19m
cmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUg
PGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5c
blx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZs
ZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNl
ICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVj
dFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8ZW52bWFwX2Zy
YWdtZW50PlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29s
b3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxl
bmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRl
IDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2Zy
YWdtZW50PlxufVxuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlczsKIAotICAgIHZhciBtZXNocGhvbmdfdmVydCA9ICIjZGVmaW5lIFBIT05HXG52YXJ5
aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2
ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFy
c192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNl
bWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5j
bHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2lu
Y2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNf
dmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dk
ZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0
ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1
djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5u
b3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVk
ZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNp
bmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5v
cm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbiNlbmRpZlxuXHQjaW5jbHVk
ZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5j
bHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRl
eD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZf
dmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3Np
dGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5c
dCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5c
blx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59XG4iOworICAgICAgICAgICAgfQogCi0gICAgdmFy
IG1lc2hwaHlzaWNhbF9mcmFnID0gIiNkZWZpbmUgUEhZU0lDQUxcbnVuaWZvcm0gdmVjMyBkaWZm
dXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3M7XG51
bmlmb3JtIGZsb2F0IG1ldGFsbmVzcztcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZm5kZWYg
U1RBTkRBUkRcblx0dW5pZm9ybSBmbG9hdCBjbGVhckNvYXQ7XG5cdHVuaWZvcm0gZmxvYXQgY2xl
YXJDb2F0Um91Z2huZXNzO1xuI2VuZGlmXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNp
Zm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNs
dWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFy
c19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2
X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8
bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNp
bmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJh
Z21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxl
bnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNs
dWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5j
bHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfbWFwcz5cbiNp
bmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dt
YXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5j
bHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8cm91Z2huZXNzbWFwX3Bh
cnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5j
bHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFu
ZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3Bs
YW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFj
aXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQo
IHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5c
dHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dk
ZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUg
PGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNs
dWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfZnJhZ21l
bnQ+XG5cdCNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3Jt
YWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0
I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3BoeXNp
Y2FsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5j
bHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRf
ZW5kPlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9
IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERp
ZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0Lmlu
ZGlyZWN0U3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdGdsX0ZyYWdDb2xvciA9
IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25l
bWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2lu
Y2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJh
Z21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59XG4iOworICAgICAgICB9
LAogCi0gICAgdmFyIG1lc2hwaHlzaWNhbF92ZXJ0ID0gIiNkZWZpbmUgUEhZU0lDQUxcbnZhcnlp
bmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZl
YzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJz
X3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2Vt
ZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1
ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5c
biNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFy
c192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8
Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8
dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3Zl
cnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBo
bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUg
PHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4j
aWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9y
bWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1v
cnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1
ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5c
blx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3Bs
YW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5j
bHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0
I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59XG4iOworICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCBy
ZWN1cnNpdmUgKSB7CiAKLSAgICB2YXIgbm9ybWFsX2ZyYWcgPSAiI2RlZmluZSBOT1JNQUxcbnVu
aWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmlu
ZWQoIFVTRV9CVU1QTUFQICkgfHwgKCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgJiYgISBkZWZp
bmVkKCBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAgKSApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0
aW9uO1xuI2VuZGlmXG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFs
O1xuI2VuZGlmXG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50
PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBf
cGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50Plxudm9p
ZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRl
IDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFw
cz5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggcGFja05vcm1hbFRvUkdCKCBub3JtYWwgKSwgb3Bh
Y2l0eSApO1xufVxuIjsKKyAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcigp
LmNvcHkoIHRoaXMsIHJlY3Vyc2l2ZSApOwogCi0gICAgdmFyIG5vcm1hbF92ZXJ0ID0gIiNkZWZp
bmUgTk9STUFMXG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVN
UE1BUCApIHx8ICggZGVmaW5lZCggVVNFX05PUk1BTE1BUCApICYmICEgZGVmaW5lZCggT0JKRUNU
U1BBQ0VfTk9STUFMTUFQICkgKVxuXHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNlbmRp
ZlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxu
I2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJz
X3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxz
a2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5c
bnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lu
bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1
ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQj
aW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZO
b3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1
ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2lu
Y2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0
ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVm
X3ZlcnRleD5cbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1Q
TUFQICkgfHwgKCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgJiYgISBkZWZpbmVkKCBPQkpFQ1RT
UEFDRV9OT1JNQUxNQVAgKSApXG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xu
I2VuZGlmXG59XG4iOworICAgICAgICB9LAogCi0gICAgdmFyIHBvaW50c19mcmFnID0gInVuaWZv
cm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1v
bj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4j
aW5jbHVkZSA8bWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNf
ZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRl
IDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1
ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVj
MyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSAp
O1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfcGFy
dGljbGVfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUg
PGFscGhhdGVzdF9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7
XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7
XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8
dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5c
dCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59XG4iOworICAgICAgICBjb3B5OiBmdW5jdGlvbiAo
IHNvdXJjZSwgcmVjdXJzaXZlICkgewogCi0gICAgdmFyIHBvaW50c192ZXJ0ID0gInVuaWZvcm0g
ZmxvYXQgc2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2lu
Y2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNp
bmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9w
YXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lk
IG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92
ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9q
ZWN0X3ZlcnRleD5cblx0I2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRnbF9Qb2ludFNp
emUgPSBzaXplICogKCBzY2FsZSAvIC0gbXZQb3NpdGlvbi56ICk7XG5cdCNlbHNlXG5cdFx0Z2xf
UG9pbnRTaXplID0gc2l6ZTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0
ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29y
bGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn1cbiI7CisgICAgICAgICAg
ICBpZiAoIHJlY3Vyc2l2ZSA9PT0gdW5kZWZpbmVkICkgcmVjdXJzaXZlID0gdHJ1ZTsKIAotICAg
IHZhciBzaGFkb3dfZnJhZyA9ICJ1bmlmb3JtIHZlYzMgY29sb3I7XG51bmlmb3JtIGZsb2F0IG9w
YWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8
Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3Bh
cnNfYmVnaW4+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8
c2hhZG93bWFza19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3Ig
PSB2ZWM0KCBjb2xvciwgb3BhY2l0eSAqICggMS4wIC0gZ2V0U2hhZG93TWFzaygpICkgKTtcblx0
I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cbn1cbiI7CisgICAgICAgICAgICB0aGlzLm5hbWUgPSBz
b3VyY2UubmFtZTsKIAotICAgIHZhciBzaGFkb3dfdmVydCA9ICIjaW5jbHVkZSA8Zm9nX3BhcnNf
dmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtc
blx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4Plxu
XHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRl
eD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59XG4iOworICAgICAgICAgICAgdGhpcy51cC5j
b3B5KCBzb3VyY2UudXAgKTsKIAotICAgIHZhciBTaGFkZXJDaHVuayA9IHsKLSAgICAgICAgYWxw
aGFtYXBfZnJhZ21lbnQ6IGFscGhhbWFwX2ZyYWdtZW50LAotICAgICAgICBhbHBoYW1hcF9wYXJz
X2ZyYWdtZW50OiBhbHBoYW1hcF9wYXJzX2ZyYWdtZW50LAotICAgICAgICBhbHBoYXRlc3RfZnJh
Z21lbnQ6IGFscGhhdGVzdF9mcmFnbWVudCwKLSAgICAgICAgYW9tYXBfZnJhZ21lbnQ6IGFvbWFw
X2ZyYWdtZW50LAotICAgICAgICBhb21hcF9wYXJzX2ZyYWdtZW50OiBhb21hcF9wYXJzX2ZyYWdt
ZW50LAotICAgICAgICBiZWdpbl92ZXJ0ZXg6IGJlZ2luX3ZlcnRleCwKLSAgICAgICAgYmVnaW5u
b3JtYWxfdmVydGV4OiBiZWdpbm5vcm1hbF92ZXJ0ZXgsCi0gICAgICAgIGJzZGZzOiBic2RmcywK
LSAgICAgICAgYnVtcG1hcF9wYXJzX2ZyYWdtZW50OiBidW1wbWFwX3BhcnNfZnJhZ21lbnQsCi0g
ICAgICAgIGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDogY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50
LAotICAgICAgICBjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudDogY2xpcHBpbmdfcGxhbmVz
X3BhcnNfZnJhZ21lbnQsCi0gICAgICAgIGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDogY2xp
cHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4LAotICAgICAgICBjbGlwcGluZ19wbGFuZXNfdmVydGV4
OiBjbGlwcGluZ19wbGFuZXNfdmVydGV4LAotICAgICAgICBjb2xvcl9mcmFnbWVudDogY29sb3Jf
ZnJhZ21lbnQsCi0gICAgICAgIGNvbG9yX3BhcnNfZnJhZ21lbnQ6IGNvbG9yX3BhcnNfZnJhZ21l
bnQsCi0gICAgICAgIGNvbG9yX3BhcnNfdmVydGV4OiBjb2xvcl9wYXJzX3ZlcnRleCwKLSAgICAg
ICAgY29sb3JfdmVydGV4OiBjb2xvcl92ZXJ0ZXgsCi0gICAgICAgIGNvbW1vbjogY29tbW9uLAot
ICAgICAgICBjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6IGN1YmVfdXZfcmVmbGVjdGlvbl9m
cmFnbWVudCwKLSAgICAgICAgZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6IGRlZmF1bHRub3JtYWxfdmVy
dGV4LAotICAgICAgICBkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6IGRpc3BsYWNlbWVudG1h
cF9wYXJzX3ZlcnRleCwKLSAgICAgICAgZGlzcGxhY2VtZW50bWFwX3ZlcnRleDogZGlzcGxhY2Vt
ZW50bWFwX3ZlcnRleCwKLSAgICAgICAgZW1pc3NpdmVtYXBfZnJhZ21lbnQ6IGVtaXNzaXZlbWFw
X2ZyYWdtZW50LAotICAgICAgICBlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OiBlbWlzc2l2ZW1h
cF9wYXJzX2ZyYWdtZW50LAotICAgICAgICBlbmNvZGluZ3NfZnJhZ21lbnQ6IGVuY29kaW5nc19m
cmFnbWVudCwKLSAgICAgICAgZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6IGVuY29kaW5nc19wYXJz
X2ZyYWdtZW50LAotICAgICAgICBlbnZtYXBfZnJhZ21lbnQ6IGVudm1hcF9mcmFnbWVudCwKLSAg
ICAgICAgZW52bWFwX3BhcnNfZnJhZ21lbnQ6IGVudm1hcF9wYXJzX2ZyYWdtZW50LAotICAgICAg
ICBlbnZtYXBfcGFyc192ZXJ0ZXg6IGVudm1hcF9wYXJzX3ZlcnRleCwKLSAgICAgICAgZW52bWFw
X3ZlcnRleDogZW52bWFwX3ZlcnRleCwKLSAgICAgICAgZm9nX3ZlcnRleDogZm9nX3ZlcnRleCwK
LSAgICAgICAgZm9nX3BhcnNfdmVydGV4OiBmb2dfcGFyc192ZXJ0ZXgsCi0gICAgICAgIGZvZ19m
cmFnbWVudDogZm9nX2ZyYWdtZW50LAotICAgICAgICBmb2dfcGFyc19mcmFnbWVudDogZm9nX3Bh
cnNfZnJhZ21lbnQsCi0gICAgICAgIGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ6IGdyYWRpZW50
bWFwX3BhcnNfZnJhZ21lbnQsCi0gICAgICAgIGxpZ2h0bWFwX2ZyYWdtZW50OiBsaWdodG1hcF9m
cmFnbWVudCwKLSAgICAgICAgbGlnaHRtYXBfcGFyc19mcmFnbWVudDogbGlnaHRtYXBfcGFyc19m
cmFnbWVudCwKLSAgICAgICAgbGlnaHRzX2xhbWJlcnRfdmVydGV4OiBsaWdodHNfbGFtYmVydF92
ZXJ0ZXgsCi0gICAgICAgIGxpZ2h0c19wYXJzX2JlZ2luOiBsaWdodHNfcGFyc19iZWdpbiwKLSAg
ICAgICAgbGlnaHRzX3BhcnNfbWFwczogbGlnaHRzX3BhcnNfbWFwcywKLSAgICAgICAgbGlnaHRz
X3Bob25nX2ZyYWdtZW50OiBsaWdodHNfcGhvbmdfZnJhZ21lbnQsCi0gICAgICAgIGxpZ2h0c19w
aG9uZ19wYXJzX2ZyYWdtZW50OiBsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudCwKLSAgICAgICAg
bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50OiBsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQsCi0gICAg
ICAgIGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiBsaWdodHNfcGh5c2ljYWxfcGFyc19m
cmFnbWVudCwKLSAgICAgICAgbGlnaHRzX2ZyYWdtZW50X2JlZ2luOiBsaWdodHNfZnJhZ21lbnRf
YmVnaW4sCi0gICAgICAgIGxpZ2h0c19mcmFnbWVudF9tYXBzOiBsaWdodHNfZnJhZ21lbnRfbWFw
cywKLSAgICAgICAgbGlnaHRzX2ZyYWdtZW50X2VuZDogbGlnaHRzX2ZyYWdtZW50X2VuZCwKLSAg
ICAgICAgbG9nZGVwdGhidWZfZnJhZ21lbnQ6IGxvZ2RlcHRoYnVmX2ZyYWdtZW50LAotICAgICAg
ICBsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50OiBsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50LAot
ICAgICAgICBsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleDogbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXgs
Ci0gICAgICAgIGxvZ2RlcHRoYnVmX3ZlcnRleDogbG9nZGVwdGhidWZfdmVydGV4LAotICAgICAg
ICBtYXBfZnJhZ21lbnQ6IG1hcF9mcmFnbWVudCwKLSAgICAgICAgbWFwX3BhcnNfZnJhZ21lbnQ6
IG1hcF9wYXJzX2ZyYWdtZW50LAotICAgICAgICBtYXBfcGFydGljbGVfZnJhZ21lbnQ6IG1hcF9w
YXJ0aWNsZV9mcmFnbWVudCwKLSAgICAgICAgbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IG1h
cF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50LAotICAgICAgICBtZXRhbG5lc3NtYXBfZnJhZ21lbnQ6
IG1ldGFsbmVzc21hcF9mcmFnbWVudCwKLSAgICAgICAgbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21l
bnQ6IG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50LAotICAgICAgICBtb3JwaG5vcm1hbF92ZXJ0
ZXg6IG1vcnBobm9ybWFsX3ZlcnRleCwKLSAgICAgICAgbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6
IG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4LAotICAgICAgICBtb3JwaHRhcmdldF92ZXJ0ZXg6IG1v
cnBodGFyZ2V0X3ZlcnRleCwKLSAgICAgICAgbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiBub3JtYWxf
ZnJhZ21lbnRfYmVnaW4sCi0gICAgICAgIG5vcm1hbF9mcmFnbWVudF9tYXBzOiBub3JtYWxfZnJh
Z21lbnRfbWFwcywKLSAgICAgICAgbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IG5vcm1hbG1hcF9w
YXJzX2ZyYWdtZW50LAotICAgICAgICBwYWNraW5nOiBwYWNraW5nLAotICAgICAgICBwcmVtdWx0
aXBsaWVkX2FscGhhX2ZyYWdtZW50OiBwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50LAotICAg
ICAgICBwcm9qZWN0X3ZlcnRleDogcHJvamVjdF92ZXJ0ZXgsCi0gICAgICAgIGRpdGhlcmluZ19m
cmFnbWVudDogZGl0aGVyaW5nX2ZyYWdtZW50LAotICAgICAgICBkaXRoZXJpbmdfcGFyc19mcmFn
bWVudDogZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQsCi0gICAgICAgIHJvdWdobmVzc21hcF9mcmFn
bWVudDogcm91Z2huZXNzbWFwX2ZyYWdtZW50LAotICAgICAgICByb3VnaG5lc3NtYXBfcGFyc19m
cmFnbWVudDogcm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQsCi0gICAgICAgIHNoYWRvd21hcF9w
YXJzX2ZyYWdtZW50OiBzaGFkb3dtYXBfcGFyc19mcmFnbWVudCwKLSAgICAgICAgc2hhZG93bWFw
X3BhcnNfdmVydGV4OiBzaGFkb3dtYXBfcGFyc192ZXJ0ZXgsCi0gICAgICAgIHNoYWRvd21hcF92
ZXJ0ZXg6IHNoYWRvd21hcF92ZXJ0ZXgsCi0gICAgICAgIHNoYWRvd21hc2tfcGFyc19mcmFnbWVu
dDogc2hhZG93bWFza19wYXJzX2ZyYWdtZW50LAotICAgICAgICBza2luYmFzZV92ZXJ0ZXg6IHNr
aW5iYXNlX3ZlcnRleCwKLSAgICAgICAgc2tpbm5pbmdfcGFyc192ZXJ0ZXg6IHNraW5uaW5nX3Bh
cnNfdmVydGV4LAotICAgICAgICBza2lubmluZ192ZXJ0ZXg6IHNraW5uaW5nX3ZlcnRleCwKLSAg
ICAgICAgc2tpbm5vcm1hbF92ZXJ0ZXg6IHNraW5ub3JtYWxfdmVydGV4LAotICAgICAgICBzcGVj
dWxhcm1hcF9mcmFnbWVudDogc3BlY3VsYXJtYXBfZnJhZ21lbnQsCi0gICAgICAgIHNwZWN1bGFy
bWFwX3BhcnNfZnJhZ21lbnQ6IHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQsCi0gICAgICAgIHRv
bmVtYXBwaW5nX2ZyYWdtZW50OiB0b25lbWFwcGluZ19mcmFnbWVudCwKLSAgICAgICAgdG9uZW1h
cHBpbmdfcGFyc19mcmFnbWVudDogdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudCwKLSAgICAgICAg
dXZfcGFyc19mcmFnbWVudDogdXZfcGFyc19mcmFnbWVudCwKLSAgICAgICAgdXZfcGFyc192ZXJ0
ZXg6IHV2X3BhcnNfdmVydGV4LAotICAgICAgICB1dl92ZXJ0ZXg6IHV2X3ZlcnRleCwKLSAgICAg
ICAgdXYyX3BhcnNfZnJhZ21lbnQ6IHV2Ml9wYXJzX2ZyYWdtZW50LAotICAgICAgICB1djJfcGFy
c192ZXJ0ZXg6IHV2Ml9wYXJzX3ZlcnRleCwKLSAgICAgICAgdXYyX3ZlcnRleDogdXYyX3ZlcnRl
eCwKLSAgICAgICAgd29ybGRwb3NfdmVydGV4OiB3b3JsZHBvc192ZXJ0ZXgsCisgICAgICAgICAg
ICB0aGlzLnBvc2l0aW9uLmNvcHkoIHNvdXJjZS5wb3NpdGlvbiApOworICAgICAgICAgICAgdGhp
cy5xdWF0ZXJuaW9uLmNvcHkoIHNvdXJjZS5xdWF0ZXJuaW9uICk7CisgICAgICAgICAgICB0aGlz
LnNjYWxlLmNvcHkoIHNvdXJjZS5zY2FsZSApOwogCi0gICAgICAgIGN1YmVfZnJhZzogY3ViZV9m
cmFnLAotICAgICAgICBjdWJlX3ZlcnQ6IGN1YmVfdmVydCwKLSAgICAgICAgZGVwdGhfZnJhZzog
ZGVwdGhfZnJhZywKLSAgICAgICAgZGVwdGhfdmVydDogZGVwdGhfdmVydCwKLSAgICAgICAgZGlz
dGFuY2VSR0JBX2ZyYWc6IGRpc3RhbmNlUkdCQV9mcmFnLAotICAgICAgICBkaXN0YW5jZVJHQkFf
dmVydDogZGlzdGFuY2VSR0JBX3ZlcnQsCi0gICAgICAgIGVxdWlyZWN0X2ZyYWc6IGVxdWlyZWN0
X2ZyYWcsCi0gICAgICAgIGVxdWlyZWN0X3ZlcnQ6IGVxdWlyZWN0X3ZlcnQsCi0gICAgICAgIGxp
bmVkYXNoZWRfZnJhZzogbGluZWRhc2hlZF9mcmFnLAotICAgICAgICBsaW5lZGFzaGVkX3ZlcnQ6
IGxpbmVkYXNoZWRfdmVydCwKLSAgICAgICAgbWVzaGJhc2ljX2ZyYWc6IG1lc2hiYXNpY19mcmFn
LAotICAgICAgICBtZXNoYmFzaWNfdmVydDogbWVzaGJhc2ljX3ZlcnQsCi0gICAgICAgIG1lc2hs
YW1iZXJ0X2ZyYWc6IG1lc2hsYW1iZXJ0X2ZyYWcsCi0gICAgICAgIG1lc2hsYW1iZXJ0X3ZlcnQ6
IG1lc2hsYW1iZXJ0X3ZlcnQsCi0gICAgICAgIG1lc2hwaG9uZ19mcmFnOiBtZXNocGhvbmdfZnJh
ZywKLSAgICAgICAgbWVzaHBob25nX3ZlcnQ6IG1lc2hwaG9uZ192ZXJ0LAotICAgICAgICBtZXNo
cGh5c2ljYWxfZnJhZzogbWVzaHBoeXNpY2FsX2ZyYWcsCi0gICAgICAgIG1lc2hwaHlzaWNhbF92
ZXJ0OiBtZXNocGh5c2ljYWxfdmVydCwKLSAgICAgICAgbm9ybWFsX2ZyYWc6IG5vcm1hbF9mcmFn
LAotICAgICAgICBub3JtYWxfdmVydDogbm9ybWFsX3ZlcnQsCi0gICAgICAgIHBvaW50c19mcmFn
OiBwb2ludHNfZnJhZywKLSAgICAgICAgcG9pbnRzX3ZlcnQ6IHBvaW50c192ZXJ0LAotICAgICAg
ICBzaGFkb3dfZnJhZzogc2hhZG93X2ZyYWcsCi0gICAgICAgIHNoYWRvd192ZXJ0OiBzaGFkb3df
dmVydAotICAgIH07CisgICAgICAgICAgICB0aGlzLm1hdHJpeC5jb3B5KCBzb3VyY2UubWF0cml4
ICk7CisgICAgICAgICAgICB0aGlzLm1hdHJpeFdvcmxkLmNvcHkoIHNvdXJjZS5tYXRyaXhXb3Js
ZCApOwogCi0gICAgLyoqCi0gICAgICogVW5pZm9ybSBVdGlsaXRpZXMKLSAgICAgKi8KKyAgICAg
ICAgICAgIHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IHNvdXJjZS5tYXRyaXhBdXRvVXBkYXRlOwor
ICAgICAgICAgICAgdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gc291cmNlLm1hdHJpeFdv
cmxkTmVlZHNVcGRhdGU7CiAKLSAgICB2YXIgVW5pZm9ybXNVdGlscyA9IHsKKyAgICAgICAgICAg
IHRoaXMubGF5ZXJzLm1hc2sgPSBzb3VyY2UubGF5ZXJzLm1hc2s7CisgICAgICAgICAgICB0aGlz
LnZpc2libGUgPSBzb3VyY2UudmlzaWJsZTsKIAotICAgICAgICBtZXJnZTogZnVuY3Rpb24gKCB1
bmlmb3JtcyApIHsKKyAgICAgICAgICAgIHRoaXMuY2FzdFNoYWRvdyA9IHNvdXJjZS5jYXN0U2hh
ZG93OworICAgICAgICAgICAgdGhpcy5yZWNlaXZlU2hhZG93ID0gc291cmNlLnJlY2VpdmVTaGFk
b3c7CiAKLSAgICAgICAgICAgIHZhciBtZXJnZWQgPSB7fTsKKyAgICAgICAgICAgIHRoaXMuZnJ1
c3R1bUN1bGxlZCA9IHNvdXJjZS5mcnVzdHVtQ3VsbGVkOworICAgICAgICAgICAgdGhpcy5yZW5k
ZXJPcmRlciA9IHNvdXJjZS5yZW5kZXJPcmRlcjsKIAotICAgICAgICAgICAgZm9yICggdmFyIHUg
PSAwOyB1IDwgdW5pZm9ybXMubGVuZ3RoOyB1ICsrICkgeworICAgICAgICAgICAgdGhpcy51c2Vy
RGF0YSA9IEpTT04ucGFyc2UoIEpTT04uc3RyaW5naWZ5KCBzb3VyY2UudXNlckRhdGEgKSApOwog
Ci0gICAgICAgICAgICAgICAgdmFyIHRtcCA9IHRoaXMuY2xvbmUoIHVuaWZvcm1zWyB1IF0gKTsK
KyAgICAgICAgICAgIGlmICggcmVjdXJzaXZlID09PSB0cnVlICkgewogCi0gICAgICAgICAgICAg
ICAgZm9yICggdmFyIHAgaW4gdG1wICkgeworICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0g
MDsgaSA8IHNvdXJjZS5jaGlsZHJlbi5sZW5ndGg7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgbWVyZ2VkWyBwIF0gPSB0bXBbIHAgXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNo
aWxkID0gc291cmNlLmNoaWxkcmVuWyBpIF07CisgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRk
KCBjaGlsZC5jbG9uZSgpICk7CiAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgcmV0dXJuIG1lcmdlZDsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwog
Ci0gICAgICAgIH0sCisgICAgICAgIH0KIAotICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCB1bmlm
b3Jtc19zcmMgKSB7CisgICAgfSApOwogCi0gICAgICAgICAgICB2YXIgdW5pZm9ybXNfZHN0ID0g
e307CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8K
KyAgICAgKi8KIAotICAgICAgICAgICAgZm9yICggdmFyIHUgaW4gdW5pZm9ybXNfc3JjICkgewor
ICAgIGZ1bmN0aW9uIFNjZW5lKCkgewogCi0gICAgICAgICAgICAgICAgdW5pZm9ybXNfZHN0WyB1
IF0gPSB7fTsKKyAgICAgICAgT2JqZWN0M0QuY2FsbCggdGhpcyApOwogCi0gICAgICAgICAgICAg
ICAgZm9yICggdmFyIHAgaW4gdW5pZm9ybXNfc3JjWyB1IF0gKSB7CisgICAgICAgIHRoaXMudHlw
ZSA9ICdTY2VuZSc7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtZXRlcl9zcmMgPSB1
bmlmb3Jtc19zcmNbIHUgXVsgcCBdOworICAgICAgICB0aGlzLmJhY2tncm91bmQgPSBudWxsOwor
ICAgICAgICB0aGlzLmZvZyA9IG51bGw7CisgICAgICAgIHRoaXMub3ZlcnJpZGVNYXRlcmlhbCA9
IG51bGw7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJhbWV0ZXJfc3JjICYmICggcGFy
YW1ldGVyX3NyYy5pc0NvbG9yIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJf
c3JjLmlzTWF0cml4MyB8fCBwYXJhbWV0ZXJfc3JjLmlzTWF0cml4NCB8fAotICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1ldGVyX3NyYy5pc1ZlY3RvcjIgfHwgcGFyYW1ldGVyX3NyYy5pc1Zl
Y3RvcjMgfHwgcGFyYW1ldGVyX3NyYy5pc1ZlY3RvcjQgfHwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtZXRlcl9zcmMuaXNUZXh0dXJlICkgKSB7CisgICAgICAgIHRoaXMuYXV0b1VwZGF0
ZSA9IHRydWU7IC8vIGNoZWNrZWQgYnkgdGhlIHJlbmRlcmVyCiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHVuaWZvcm1zX2RzdFsgdSBdWyBwIF0gPSBwYXJhbWV0ZXJfc3JjLmNsb25lKCk7Cisg
ICAgICAgIGlmICggdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyAhPT0gJ3VuZGVmaW5lZCcgKSB7
CiAKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggcGFyYW1l
dGVyX3NyYyApICkgeworICAgICAgICAgICAgX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZl
bnQoIG5ldyBDdXN0b21FdmVudCggJ29ic2VydmUnLCB7IGRldGFpbDogdGhpcyB9ICkgKTsgLy8g
ZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZgogCi0gICAgICAgICAgICAgICAgICAgICAgICB1
bmlmb3Jtc19kc3RbIHUgXVsgcCBdID0gcGFyYW1ldGVyX3NyYy5zbGljZSgpOworICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICB9CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHVuaWZvcm1zX2RzdFsgdSBdWyBwIF0gPSBwYXJhbWV0ZXJfc3JjOworICAgIFNj
ZW5lLnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIE9iamVjdDNELnBy
b3RvdHlwZSApLCB7CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICBjb25zdHJ1Y3Rv
cjogU2NlbmUsCiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIGlzU2NlbmU6IHRydWUsCiAK
LSAgICAgICAgICAgIH0KKyAgICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UsIHJlY3Vyc2l2
ZSApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHVuaWZvcm1zX2RzdDsKKyAgICAgICAgICAgIE9i
amVjdDNELnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSwgcmVjdXJzaXZlICk7CiAK
LSAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBzb3VyY2UuYmFja2dyb3VuZCAhPT0gbnVsbCAp
IHRoaXMuYmFja2dyb3VuZCA9IHNvdXJjZS5iYWNrZ3JvdW5kLmNsb25lKCk7CisgICAgICAgICAg
ICBpZiAoIHNvdXJjZS5mb2cgIT09IG51bGwgKSB0aGlzLmZvZyA9IHNvdXJjZS5mb2cuY2xvbmUo
KTsKKyAgICAgICAgICAgIGlmICggc291cmNlLm92ZXJyaWRlTWF0ZXJpYWwgIT09IG51bGwgKSB0
aGlzLm92ZXJyaWRlTWF0ZXJpYWwgPSBzb3VyY2Uub3ZlcnJpZGVNYXRlcmlhbC5jbG9uZSgpOwog
Ci0gICAgfTsKKyAgICAgICAgICAgIHRoaXMuYXV0b1VwZGF0ZSA9IHNvdXJjZS5hdXRvVXBkYXRl
OworICAgICAgICAgICAgdGhpcy5tYXRyaXhBdXRvVXBkYXRlID0gc291cmNlLm1hdHJpeEF1dG9V
cGRhdGU7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2Iu
Y29tLwotICAgICAqLworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICB2YXIgQ29sb3JL
ZXl3b3JkcyA9IHsgJ2FsaWNlYmx1ZSc6IDB4RjBGOEZGLCAnYW50aXF1ZXdoaXRlJzogMHhGQUVC
RDcsICdhcXVhJzogMHgwMEZGRkYsICdhcXVhbWFyaW5lJzogMHg3RkZGRDQsICdhenVyZSc6IDB4
RjBGRkZGLAotICAgICAgICAnYmVpZ2UnOiAweEY1RjVEQywgJ2Jpc3F1ZSc6IDB4RkZFNEM0LCAn
YmxhY2snOiAweDAwMDAwMCwgJ2JsYW5jaGVkYWxtb25kJzogMHhGRkVCQ0QsICdibHVlJzogMHgw
MDAwRkYsICdibHVldmlvbGV0JzogMHg4QTJCRTIsCi0gICAgICAgICdicm93bic6IDB4QTUyQTJB
LCAnYnVybHl3b29kJzogMHhERUI4ODcsICdjYWRldGJsdWUnOiAweDVGOUVBMCwgJ2NoYXJ0cmV1
c2UnOiAweDdGRkYwMCwgJ2Nob2NvbGF0ZSc6IDB4RDI2OTFFLCAnY29yYWwnOiAweEZGN0Y1MCwK
LSAgICAgICAgJ2Nvcm5mbG93ZXJibHVlJzogMHg2NDk1RUQsICdjb3Juc2lsayc6IDB4RkZGOERD
LCAnY3JpbXNvbic6IDB4REMxNDNDLCAnY3lhbic6IDB4MDBGRkZGLCAnZGFya2JsdWUnOiAweDAw
MDA4QiwgJ2RhcmtjeWFuJzogMHgwMDhCOEIsCi0gICAgICAgICdkYXJrZ29sZGVucm9kJzogMHhC
ODg2MEIsICdkYXJrZ3JheSc6IDB4QTlBOUE5LCAnZGFya2dyZWVuJzogMHgwMDY0MDAsICdkYXJr
Z3JleSc6IDB4QTlBOUE5LCAnZGFya2toYWtpJzogMHhCREI3NkIsICdkYXJrbWFnZW50YSc6IDB4
OEIwMDhCLAotICAgICAgICAnZGFya29saXZlZ3JlZW4nOiAweDU1NkIyRiwgJ2RhcmtvcmFuZ2Un
OiAweEZGOEMwMCwgJ2RhcmtvcmNoaWQnOiAweDk5MzJDQywgJ2RhcmtyZWQnOiAweDhCMDAwMCwg
J2RhcmtzYWxtb24nOiAweEU5OTY3QSwgJ2RhcmtzZWFncmVlbic6IDB4OEZCQzhGLAotICAgICAg
ICAnZGFya3NsYXRlYmx1ZSc6IDB4NDgzRDhCLCAnZGFya3NsYXRlZ3JheSc6IDB4MkY0RjRGLCAn
ZGFya3NsYXRlZ3JleSc6IDB4MkY0RjRGLCAnZGFya3R1cnF1b2lzZSc6IDB4MDBDRUQxLCAnZGFy
a3Zpb2xldCc6IDB4OTQwMEQzLAotICAgICAgICAnZGVlcHBpbmsnOiAweEZGMTQ5MywgJ2RlZXBz
a3libHVlJzogMHgwMEJGRkYsICdkaW1ncmF5JzogMHg2OTY5NjksICdkaW1ncmV5JzogMHg2OTY5
NjksICdkb2RnZXJibHVlJzogMHgxRTkwRkYsICdmaXJlYnJpY2snOiAweEIyMjIyMiwKLSAgICAg
ICAgJ2Zsb3JhbHdoaXRlJzogMHhGRkZBRjAsICdmb3Jlc3RncmVlbic6IDB4MjI4QjIyLCAnZnVj
aHNpYSc6IDB4RkYwMEZGLCAnZ2FpbnNib3JvJzogMHhEQ0RDREMsICdnaG9zdHdoaXRlJzogMHhG
OEY4RkYsICdnb2xkJzogMHhGRkQ3MDAsCi0gICAgICAgICdnb2xkZW5yb2QnOiAweERBQTUyMCwg
J2dyYXknOiAweDgwODA4MCwgJ2dyZWVuJzogMHgwMDgwMDAsICdncmVlbnllbGxvdyc6IDB4QURG
RjJGLCAnZ3JleSc6IDB4ODA4MDgwLCAnaG9uZXlkZXcnOiAweEYwRkZGMCwgJ2hvdHBpbmsnOiAw
eEZGNjlCNCwKLSAgICAgICAgJ2luZGlhbnJlZCc6IDB4Q0Q1QzVDLCAnaW5kaWdvJzogMHg0QjAw
ODIsICdpdm9yeSc6IDB4RkZGRkYwLCAna2hha2knOiAweEYwRTY4QywgJ2xhdmVuZGVyJzogMHhF
NkU2RkEsICdsYXZlbmRlcmJsdXNoJzogMHhGRkYwRjUsICdsYXduZ3JlZW4nOiAweDdDRkMwMCwK
LSAgICAgICAgJ2xlbW9uY2hpZmZvbic6IDB4RkZGQUNELCAnbGlnaHRibHVlJzogMHhBREQ4RTYs
ICdsaWdodGNvcmFsJzogMHhGMDgwODAsICdsaWdodGN5YW4nOiAweEUwRkZGRiwgJ2xpZ2h0Z29s
ZGVucm9keWVsbG93JzogMHhGQUZBRDIsICdsaWdodGdyYXknOiAweEQzRDNEMywKLSAgICAgICAg
J2xpZ2h0Z3JlZW4nOiAweDkwRUU5MCwgJ2xpZ2h0Z3JleSc6IDB4RDNEM0QzLCAnbGlnaHRwaW5r
JzogMHhGRkI2QzEsICdsaWdodHNhbG1vbic6IDB4RkZBMDdBLCAnbGlnaHRzZWFncmVlbic6IDB4
MjBCMkFBLCAnbGlnaHRza3libHVlJzogMHg4N0NFRkEsCi0gICAgICAgICdsaWdodHNsYXRlZ3Jh
eSc6IDB4Nzc4ODk5LCAnbGlnaHRzbGF0ZWdyZXknOiAweDc3ODg5OSwgJ2xpZ2h0c3RlZWxibHVl
JzogMHhCMEM0REUsICdsaWdodHllbGxvdyc6IDB4RkZGRkUwLCAnbGltZSc6IDB4MDBGRjAwLCAn
bGltZWdyZWVuJzogMHgzMkNEMzIsCi0gICAgICAgICdsaW5lbic6IDB4RkFGMEU2LCAnbWFnZW50
YSc6IDB4RkYwMEZGLCAnbWFyb29uJzogMHg4MDAwMDAsICdtZWRpdW1hcXVhbWFyaW5lJzogMHg2
NkNEQUEsICdtZWRpdW1ibHVlJzogMHgwMDAwQ0QsICdtZWRpdW1vcmNoaWQnOiAweEJBNTVEMywK
LSAgICAgICAgJ21lZGl1bXB1cnBsZSc6IDB4OTM3MERCLCAnbWVkaXVtc2VhZ3JlZW4nOiAweDND
QjM3MSwgJ21lZGl1bXNsYXRlYmx1ZSc6IDB4N0I2OEVFLCAnbWVkaXVtc3ByaW5nZ3JlZW4nOiAw
eDAwRkE5QSwgJ21lZGl1bXR1cnF1b2lzZSc6IDB4NDhEMUNDLAotICAgICAgICAnbWVkaXVtdmlv
bGV0cmVkJzogMHhDNzE1ODUsICdtaWRuaWdodGJsdWUnOiAweDE5MTk3MCwgJ21pbnRjcmVhbSc6
IDB4RjVGRkZBLCAnbWlzdHlyb3NlJzogMHhGRkU0RTEsICdtb2NjYXNpbic6IDB4RkZFNEI1LCAn
bmF2YWpvd2hpdGUnOiAweEZGREVBRCwKLSAgICAgICAgJ25hdnknOiAweDAwMDA4MCwgJ29sZGxh
Y2UnOiAweEZERjVFNiwgJ29saXZlJzogMHg4MDgwMDAsICdvbGl2ZWRyYWInOiAweDZCOEUyMywg
J29yYW5nZSc6IDB4RkZBNTAwLCAnb3JhbmdlcmVkJzogMHhGRjQ1MDAsICdvcmNoaWQnOiAweERB
NzBENiwKLSAgICAgICAgJ3BhbGVnb2xkZW5yb2QnOiAweEVFRThBQSwgJ3BhbGVncmVlbic6IDB4
OThGQjk4LCAncGFsZXR1cnF1b2lzZSc6IDB4QUZFRUVFLCAncGFsZXZpb2xldHJlZCc6IDB4REI3
MDkzLCAncGFwYXlhd2hpcCc6IDB4RkZFRkQ1LCAncGVhY2hwdWZmJzogMHhGRkRBQjksCi0gICAg
ICAgICdwZXJ1JzogMHhDRDg1M0YsICdwaW5rJzogMHhGRkMwQ0IsICdwbHVtJzogMHhEREEwREQs
ICdwb3dkZXJibHVlJzogMHhCMEUwRTYsICdwdXJwbGUnOiAweDgwMDA4MCwgJ3JlYmVjY2FwdXJw
bGUnOiAweDY2MzM5OSwgJ3JlZCc6IDB4RkYwMDAwLCAncm9zeWJyb3duJzogMHhCQzhGOEYsCi0g
ICAgICAgICdyb3lhbGJsdWUnOiAweDQxNjlFMSwgJ3NhZGRsZWJyb3duJzogMHg4QjQ1MTMsICdz
YWxtb24nOiAweEZBODA3MiwgJ3NhbmR5YnJvd24nOiAweEY0QTQ2MCwgJ3NlYWdyZWVuJzogMHgy
RThCNTcsICdzZWFzaGVsbCc6IDB4RkZGNUVFLAotICAgICAgICAnc2llbm5hJzogMHhBMDUyMkQs
ICdzaWx2ZXInOiAweEMwQzBDMCwgJ3NreWJsdWUnOiAweDg3Q0VFQiwgJ3NsYXRlYmx1ZSc6IDB4
NkE1QUNELCAnc2xhdGVncmF5JzogMHg3MDgwOTAsICdzbGF0ZWdyZXknOiAweDcwODA5MCwgJ3Nu
b3cnOiAweEZGRkFGQSwKLSAgICAgICAgJ3NwcmluZ2dyZWVuJzogMHgwMEZGN0YsICdzdGVlbGJs
dWUnOiAweDQ2ODJCNCwgJ3Rhbic6IDB4RDJCNDhDLCAndGVhbCc6IDB4MDA4MDgwLCAndGhpc3Rs
ZSc6IDB4RDhCRkQ4LCAndG9tYXRvJzogMHhGRjYzNDcsICd0dXJxdW9pc2UnOiAweDQwRTBEMCwK
LSAgICAgICAgJ3Zpb2xldCc6IDB4RUU4MkVFLCAnd2hlYXQnOiAweEY1REVCMywgJ3doaXRlJzog
MHhGRkZGRkYsICd3aGl0ZXNtb2tlJzogMHhGNUY1RjUsICd5ZWxsb3cnOiAweEZGRkYwMCwgJ3ll
bGxvd2dyZWVuJzogMHg5QUNEMzIgfTsKKyAgICAgICAgfSwKIAotICAgIGZ1bmN0aW9uIENvbG9y
KCByLCBnLCBiICkgeworICAgICAgICB0b0pTT046IGZ1bmN0aW9uICggbWV0YSApIHsKIAotICAg
ICAgICBpZiAoIGcgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQgKSB7CisgICAgICAg
ICAgICB2YXIgZGF0YSA9IE9iamVjdDNELnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcywgbWV0
YSApOwogCi0gICAgICAgICAgICAvLyByIGlzIFRIUkVFLkNvbG9yLCBoZXggb3Igc3RyaW5nCi0g
ICAgICAgICAgICByZXR1cm4gdGhpcy5zZXQoIHIgKTsKKyAgICAgICAgICAgIGlmICggdGhpcy5i
YWNrZ3JvdW5kICE9PSBudWxsICkgZGF0YS5vYmplY3QuYmFja2dyb3VuZCA9IHRoaXMuYmFja2dy
b3VuZC50b0pTT04oIG1ldGEgKTsKKyAgICAgICAgICAgIGlmICggdGhpcy5mb2cgIT09IG51bGwg
KSBkYXRhLm9iamVjdC5mb2cgPSB0aGlzLmZvZy50b0pTT04oKTsKIAotICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gZGF0YTsKIAotICAgICAgICByZXR1cm4gdGhpcy5zZXRSR0IoIHIsIGcs
IGIgKTsKKyAgICAgICAgfSwKIAotICAgIH0KKyAgICAgICAgZGlzcG9zZTogZnVuY3Rpb24gKCkg
ewogCi0gICAgT2JqZWN0LmFzc2lnbiggQ29sb3IucHJvdG90eXBlLCB7CisgICAgICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnQoIHsgdHlwZTogJ2Rpc3Bvc2UnIH0gKTsKIAotICAgICAgICBpc0Nv
bG9yOiB0cnVlLAorICAgICAgICB9CiAKLSAgICAgICAgcjogMSwgZzogMSwgYjogMSwKKyAgICB9
ICk7CiAKLSAgICAgICAgc2V0OiBmdW5jdGlvbiAoIHZhbHVlICkgeworICAgIC8qKgorICAgICAq
IEBhdXRob3IgYmhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW8KKyAgICAgKiBAYXV0aG9yIFdlc3RM
YW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExhbmdsZXkKKyAgICAgKi8KIAotICAgICAg
ICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZS5pc0NvbG9yICkgeworICAgIGZ1bmN0aW9uIEJveDMo
IG1pbiwgbWF4ICkgewogCi0gICAgICAgICAgICAgICAgdGhpcy5jb3B5KCB2YWx1ZSApOworICAg
ICAgICB0aGlzLm1pbiA9ICggbWluICE9PSB1bmRlZmluZWQgKSA/IG1pbiA6IG5ldyBWZWN0b3Iz
KCArIEluZmluaXR5LCArIEluZmluaXR5LCArIEluZmluaXR5ICk7CisgICAgICAgIHRoaXMubWF4
ID0gKCBtYXggIT09IHVuZGVmaW5lZCApID8gbWF4IDogbmV3IFZlY3RvcjMoIC0gSW5maW5pdHks
IC0gSW5maW5pdHksIC0gSW5maW5pdHkgKTsKIAotICAgICAgICAgICAgfSBlbHNlIGlmICggdHlw
ZW9mIHZhbHVlID09PSAnbnVtYmVyJyApIHsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICB0aGlz
LnNldEhleCggdmFsdWUgKTsKKyAgICBPYmplY3QuYXNzaWduKCBCb3gzLnByb3RvdHlwZSwgewog
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICkgewor
ICAgICAgICBpc0JveDM6IHRydWUsCiAKLSAgICAgICAgICAgICAgICB0aGlzLnNldFN0eWxlKCB2
YWx1ZSApOworICAgICAgICBzZXQ6IGZ1bmN0aW9uICggbWluLCBtYXggKSB7CiAKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXMubWluLmNvcHkoIG1pbiApOworICAgICAgICAgICAgdGhp
cy5tYXguY29weSggbWF4ICk7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAg
IH0sCiAKLSAgICAgICAgc2V0U2NhbGFyOiBmdW5jdGlvbiAoIHNjYWxhciApIHsKLQotICAgICAg
ICAgICAgdGhpcy5yID0gc2NhbGFyOwotICAgICAgICAgICAgdGhpcy5nID0gc2NhbGFyOwotICAg
ICAgICAgICAgdGhpcy5iID0gc2NhbGFyOwotCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgc2V0RnJvbUFycmF5OiBmdW5jdGlvbiAoIGFycmF5ICkgewogCi0gICAgICAgIH0sCisg
ICAgICAgICAgICB2YXIgbWluWCA9ICsgSW5maW5pdHk7CisgICAgICAgICAgICB2YXIgbWluWSA9
ICsgSW5maW5pdHk7CisgICAgICAgICAgICB2YXIgbWluWiA9ICsgSW5maW5pdHk7CiAKLSAgICAg
ICAgc2V0SGV4OiBmdW5jdGlvbiAoIGhleCApIHsKKyAgICAgICAgICAgIHZhciBtYXhYID0gLSBJ
bmZpbml0eTsKKyAgICAgICAgICAgIHZhciBtYXhZID0gLSBJbmZpbml0eTsKKyAgICAgICAgICAg
IHZhciBtYXhaID0gLSBJbmZpbml0eTsKIAotICAgICAgICAgICAgaGV4ID0gTWF0aC5mbG9vcigg
aGV4ICk7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkg
PCBsOyBpICs9IDMgKSB7CiAKLSAgICAgICAgICAgIHRoaXMuciA9ICggaGV4ID4+IDE2ICYgMjU1
ICkgLyAyNTU7Ci0gICAgICAgICAgICB0aGlzLmcgPSAoIGhleCA+PiA4ICYgMjU1ICkgLyAyNTU7
Ci0gICAgICAgICAgICB0aGlzLmIgPSAoIGhleCAmIDI1NSApIC8gMjU1OworICAgICAgICAgICAg
ICAgIHZhciB4ID0gYXJyYXlbIGkgXTsKKyAgICAgICAgICAgICAgICB2YXIgeSA9IGFycmF5WyBp
ICsgMSBdOworICAgICAgICAgICAgICAgIHZhciB6ID0gYXJyYXlbIGkgKyAyIF07CiAKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIGlmICggeCA8IG1pblggKSBtaW5Y
ID0geDsKKyAgICAgICAgICAgICAgICBpZiAoIHkgPCBtaW5ZICkgbWluWSA9IHk7CisgICAgICAg
ICAgICAgICAgaWYgKCB6IDwgbWluWiApIG1pblogPSB6OwogCi0gICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgaWYgKCB4ID4gbWF4WCApIG1heFggPSB4OworICAgICAgICAgICAgICAgIGlmICgg
eSA+IG1heFkgKSBtYXhZID0geTsKKyAgICAgICAgICAgICAgICBpZiAoIHogPiBtYXhaICkgbWF4
WiA9IHo7CiAKLSAgICAgICAgc2V0UkdCOiBmdW5jdGlvbiAoIHIsIGcsIGIgKSB7CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIHRoaXMuciA9IHI7Ci0gICAgICAgICAgICB0aGlzLmcgPSBn
OwotICAgICAgICAgICAgdGhpcy5iID0gYjsKKyAgICAgICAgICAgIHRoaXMubWluLnNldCggbWlu
WCwgbWluWSwgbWluWiApOworICAgICAgICAgICAgdGhpcy5tYXguc2V0KCBtYXhYLCBtYXhZLCBt
YXhaICk7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAg
ICAgc2V0SFNMOiBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIGh1ZTJyZ2Io
IHAsIHEsIHQgKSB7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHQgPCAwICkgdCArPSAxOwotICAg
ICAgICAgICAgICAgIGlmICggdCA+IDEgKSB0IC09IDE7Ci0gICAgICAgICAgICAgICAgaWYgKCB0
IDwgMSAvIDYgKSByZXR1cm4gcCArICggcSAtIHAgKSAqIDYgKiB0OwotICAgICAgICAgICAgICAg
IGlmICggdCA8IDEgLyAyICkgcmV0dXJuIHE7Ci0gICAgICAgICAgICAgICAgaWYgKCB0IDwgMiAv
IDMgKSByZXR1cm4gcCArICggcSAtIHAgKSAqIDYgKiAoIDIgLyAzIC0gdCApOwotICAgICAgICAg
ICAgICAgIHJldHVybiBwOwotCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBm
dW5jdGlvbiBzZXRIU0woIGgsIHMsIGwgKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBoLHMsbCBy
YW5nZXMgYXJlIGluIDAuMCAtIDEuMAotICAgICAgICAgICAgICAgIGggPSBfTWF0aC5ldWNsaWRl
YW5Nb2R1bG8oIGgsIDEgKTsKLSAgICAgICAgICAgICAgICBzID0gX01hdGguY2xhbXAoIHMsIDAs
IDEgKTsKLSAgICAgICAgICAgICAgICBsID0gX01hdGguY2xhbXAoIGwsIDAsIDEgKTsKLQotICAg
ICAgICAgICAgICAgIGlmICggcyA9PT0gMCApIHsKKyAgICAgICAgc2V0RnJvbUJ1ZmZlckF0dHJp
YnV0ZTogZnVuY3Rpb24gKCBhdHRyaWJ1dGUgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5yID0gdGhpcy5nID0gdGhpcy5iID0gbDsKKyAgICAgICAgICAgIHZhciBtaW5YID0gKyBJbmZp
bml0eTsKKyAgICAgICAgICAgIHZhciBtaW5ZID0gKyBJbmZpbml0eTsKKyAgICAgICAgICAgIHZh
ciBtaW5aID0gKyBJbmZpbml0eTsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB2YXIgbWF4WCA9IC0gSW5maW5pdHk7CisgICAgICAgICAgICB2YXIgbWF4WSA9IC0gSW5m
aW5pdHk7CisgICAgICAgICAgICB2YXIgbWF4WiA9IC0gSW5maW5pdHk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIHAgPSBsIDw9IDAuNSA/IGwgKiAoIDEgKyBzICkgOiBsICsgcyAtICggbCAq
IHMgKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSAoIDIgKiBsICkgLSBwOworICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gYXR0cmlidXRlLmNvdW50OyBpIDwgbDsgaSArKyAp
IHsKIAotICAgICAgICAgICAgICAgICAgICB0aGlzLnIgPSBodWUycmdiKCBxLCBwLCBoICsgMSAv
IDMgKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5nID0gaHVlMnJnYiggcSwgcCwgaCApOwot
ICAgICAgICAgICAgICAgICAgICB0aGlzLmIgPSBodWUycmdiKCBxLCBwLCBoIC0gMSAvIDMgKTsK
KyAgICAgICAgICAgICAgICB2YXIgeCA9IGF0dHJpYnV0ZS5nZXRYKCBpICk7CisgICAgICAgICAg
ICAgICAgdmFyIHkgPSBhdHRyaWJ1dGUuZ2V0WSggaSApOworICAgICAgICAgICAgICAgIHZhciB6
ID0gYXR0cmlidXRlLmdldFooIGkgKTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoIHggPCBtaW5YICkgbWluWCA9IHg7CisgICAgICAgICAgICAgICAgaWYgKCB5IDwg
bWluWSApIG1pblkgPSB5OworICAgICAgICAgICAgICAgIGlmICggeiA8IG1pblogKSBtaW5aID0g
ejsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIGlmICgg
eCA+IG1heFggKSBtYXhYID0geDsKKyAgICAgICAgICAgICAgICBpZiAoIHkgPiBtYXhZICkgbWF4
WSA9IHk7CisgICAgICAgICAgICAgICAgaWYgKCB6ID4gbWF4WiApIG1heFogPSB6OwogCi0gICAg
ICAgICAgICB9OworICAgICAgICAgICAgfQogCi0gICAgICAgIH0oKSwKKyAgICAgICAgICAgIHRo
aXMubWluLnNldCggbWluWCwgbWluWSwgbWluWiApOworICAgICAgICAgICAgdGhpcy5tYXguc2V0
KCBtYXhYLCBtYXhZLCBtYXhaICk7CiAKLSAgICAgICAgc2V0U3R5bGU6IGZ1bmN0aW9uICggc3R5
bGUgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgZnVuY3Rpb24g
aGFuZGxlQWxwaGEoIHN0cmluZyApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIGlm
ICggc3RyaW5nID09PSB1bmRlZmluZWQgKSByZXR1cm47CisgICAgICAgIHNldEZyb21Qb2ludHM6
IGZ1bmN0aW9uICggcG9pbnRzICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCBwYXJzZUZsb2F0
KCBzdHJpbmcgKSA8IDEgKSB7CisgICAgICAgICAgICB0aGlzLm1ha2VFbXB0eSgpOwogCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25l
bnQgb2YgJyArIHN0eWxlICsgJyB3aWxsIGJlIGlnbm9yZWQuJyApOworICAgICAgICAgICAgZm9y
ICggdmFyIGkgPSAwLCBpbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKIAotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEJ5UG9pbnQoIHBvaW50
c1sgaSBdICk7CiAKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
LSAgICAgICAgICAgIHZhciBtOwotCi0gICAgICAgICAgICBpZiAoIG0gPSAvXigoPzpyZ2J8aHNs
KWE/KVwoXHMqKFteXCldKilcKS8uZXhlYyggc3R5bGUgKSApIHsKLQotICAgICAgICAgICAgICAg
IC8vIHJnYiAvIGhzbAotCi0gICAgICAgICAgICAgICAgdmFyIGNvbG9yOwotICAgICAgICAgICAg
ICAgIHZhciBuYW1lID0gbVsgMSBdOwotICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzID0g
bVsgMiBdOwotCi0gICAgICAgICAgICAgICAgc3dpdGNoICggbmFtZSApIHsKKyAgICAgICAgfSwK
IAotICAgICAgICAgICAgICAgICAgICBjYXNlICdyZ2InOgotICAgICAgICAgICAgICAgICAgICBj
YXNlICdyZ2JhJzoKKyAgICAgICAgc2V0RnJvbUNlbnRlckFuZFNpemU6IGZ1bmN0aW9uICgpIHsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb2xvciA9IC9eKFxkKylccyosXHMqKFxk
KylccyosXHMqKFxkKylccyooLFxzKihbMC05XSpcLj9bMC05XSspXHMqKT8kLy5leGVjKCBjb21w
b25lbnRzICkgKSB7CisgICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMygpOwogCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmdiKDI1NSwwLDApIHJnYmEoMjU1LDAsMCwwLjUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yID0gTWF0aC5taW4oIDI1NSwgcGFy
c2VJbnQoIGNvbG9yWyAxIF0sIDEwICkgKSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLmcgPSBNYXRoLm1pbiggMjU1LCBwYXJzZUludCggY29sb3JbIDIgXSwgMTAgKSAp
IC8gMjU1OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYiA9IE1hdGgubWluKCAy
NTUsIHBhcnNlSW50KCBjb2xvclsgMyBdLCAxMCApICkgLyAyNTU7CisgICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb24gc2V0RnJvbUNlbnRlckFuZFNpemUoIGNlbnRlciwgc2l6ZSApIHsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUFscGhhKCBjb2xvclsgNSBdICk7CisgICAg
ICAgICAgICAgICAgdmFyIGhhbGZTaXplID0gdjEuY29weSggc2l6ZSApLm11bHRpcGx5U2NhbGFy
KCAwLjUgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICAgICAgICAgIHRoaXMubWluLmNvcHkoIGNlbnRlciApLnN1YiggaGFsZlNpemUgKTsKKyAg
ICAgICAgICAgICAgICB0aGlzLm1heC5jb3B5KCBjZW50ZXIgKS5hZGQoIGhhbGZTaXplICk7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb2xvciA9IC9eKFxkKylcJVxzKixccyoo
XGQrKVwlXHMqLFxzKihcZCspXCVccyooLFxzKihbMC05XSpcLj9bMC05XSspXHMqKT8kLy5leGVj
KCBjb21wb25lbnRzICkgKSB7CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gcmdiKDEwMCUsMCUsMCUpIHJnYmEoMTAwJSwwJSwwJSwwLjUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5yID0gTWF0aC5taW4oIDEwMCwgcGFyc2VJbnQoIGNv
bG9yWyAxIF0sIDEwICkgKSAvIDEwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmcgPSBNYXRoLm1pbiggMTAwLCBwYXJzZUludCggY29sb3JbIDIgXSwgMTAgKSApIC8gMTAwOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYiA9IE1hdGgubWluKCAxMDAsIHBhcnNl
SW50KCBjb2xvclsgMyBdLCAxMCApICkgLyAxMDA7CisgICAgICAgIH0oKSwKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZUFscGhhKCBjb2xvclsgNSBdICk7CisgICAgICAgIHNl
dEZyb21PYmplY3Q6IGZ1bmN0aW9uICggb2JqZWN0ICkgewogCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB0aGlzLm1ha2VFbXB0eSgpOwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5leHBhbmRC
eU9iamVjdCggb2JqZWN0ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2hzbCc6Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ2hzbGEnOgorICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkgewogCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbG9yID0gL14oWzAtOV0qXC4/WzAtOV0rKVxzKixc
cyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooLFxzKihbMC05XSpcLj9bMC05XSspXHMqKT8kLy5l
eGVjKCBjb21wb25lbnRzICkgKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3Ry
dWN0b3IoKS5jb3B5KCB0aGlzICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBo
c2woMTIwLDUwJSw1MCUpIGhzbGEoMTIwLDUwJSw1MCUsMC41KQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBoID0gcGFyc2VGbG9hdCggY29sb3JbIDEgXSApIC8gMzYwOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBzID0gcGFyc2VJbnQoIGNvbG9yWyAyIF0sIDEwICkg
LyAxMDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGwgPSBwYXJzZUludCggY29s
b3JbIDMgXSwgMTAgKSAvIDEwMDsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZUFscGhhKCBjb2xvclsgNSBdICk7CisgICAgICAgIGNvcHk6IGZ1bmN0aW9u
ICggYm94ICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0
SFNMKCBoLCBzLCBsICk7CisgICAgICAgICAgICB0aGlzLm1pbi5jb3B5KCBib3gubWluICk7Cisg
ICAgICAgICAgICB0aGlzLm1heC5jb3B5KCBib3gubWF4ICk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgbWFr
ZUVtcHR5OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIG0gPSAvXlwj
KFtBLUZhLWYwLTldKykkLy5leGVjKCBzdHlsZSApICkgeworICAgICAgICAgICAgdGhpcy5taW4u
eCA9IHRoaXMubWluLnkgPSB0aGlzLm1pbi56ID0gKyBJbmZpbml0eTsKKyAgICAgICAgICAgIHRo
aXMubWF4LnggPSB0aGlzLm1heC55ID0gdGhpcy5tYXgueiA9IC0gSW5maW5pdHk7CiAKLSAgICAg
ICAgICAgICAgICAvLyBoZXggY29sb3IKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAg
ICAgICAgICAgICAgdmFyIGhleCA9IG1bIDEgXTsKLSAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9
IGhleC5sZW5ndGg7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICBpZiAoIHNpemUgPT09
IDMgKSB7CisgICAgICAgIGlzRW1wdHk6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAg
ICAgICAvLyAjZmYwCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuciA9IHBhcnNlSW50KCBoZXgu
Y2hhckF0KCAwICkgKyBoZXguY2hhckF0KCAwICksIDE2ICkgLyAyNTU7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuZyA9IHBhcnNlSW50KCBoZXguY2hhckF0KCAxICkgKyBoZXguY2hhckF0KCAx
ICksIDE2ICkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuYiA9IHBhcnNlSW50KCBo
ZXguY2hhckF0KCAyICkgKyBoZXguY2hhckF0KCAyICksIDE2ICkgLyAyNTU7CisgICAgICAgICAg
ICAvLyB0aGlzIGlzIGEgbW9yZSByb2J1c3QgY2hlY2sgZm9yIGVtcHR5IHRoYW4gKCB2b2x1bWUg
PD0gMCApIGJlY2F1c2Ugdm9sdW1lIGNhbiBnZXQgcG9zaXRpdmUgd2l0aCB0d28gbmVnYXRpdmUg
YXhlcwogCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgcmV0
dXJuICggdGhpcy5tYXgueCA8IHRoaXMubWluLnggKSB8fCAoIHRoaXMubWF4LnkgPCB0aGlzLm1p
bi55ICkgfHwgKCB0aGlzLm1heC56IDwgdGhpcy5taW4ueiApOwogCi0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmICggc2l6ZSA9PT0gNiApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAg
ICAgICAvLyAjZmYwMDAwCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuciA9IHBhcnNlSW50KCBo
ZXguY2hhckF0KCAwICkgKyBoZXguY2hhckF0KCAxICksIDE2ICkgLyAyNTU7Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXMuZyA9IHBhcnNlSW50KCBoZXguY2hhckF0KCAyICkgKyBoZXguY2hhckF0
KCAzICksIDE2ICkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuYiA9IHBhcnNlSW50
KCBoZXguY2hhckF0KCA0ICkgKyBoZXguY2hhckF0KCA1ICksIDE2ICkgLyAyNTU7CisgICAgICAg
IGdldENlbnRlcjogZnVuY3Rpb24gKCB0YXJnZXQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVkICkgewog
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVF
LkJveDM6IC5nZXRDZW50ZXIoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOworICAgICAgICAg
ICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKCk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgaWYgKCBzdHlsZSAmJiBzdHlsZS5sZW5ndGggPiAwICkgewotCi0gICAgICAgICAgICAg
ICAgLy8gY29sb3Iga2V5d29yZHMKLSAgICAgICAgICAgICAgICB2YXIgaGV4ID0gQ29sb3JLZXl3
b3Jkc1sgc3R5bGUgXTsKLQotICAgICAgICAgICAgICAgIGlmICggaGV4ICE9PSB1bmRlZmluZWQg
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5pc0VtcHR5KCkgPyB0YXJnZXQuc2V0KCAwLCAw
LCAwICkgOiB0YXJnZXQuYWRkVmVjdG9ycyggdGhpcy5taW4sIHRoaXMubWF4ICkubXVsdGlwbHlT
Y2FsYXIoIDAuNSApOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlZAotICAgICAgICAgICAg
ICAgICAgICB0aGlzLnNldEhleCggaGV4ICk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICBnZXRTaXplOiBmdW5jdGlvbiAoIHRhcmdldCApIHsKIAotICAg
ICAgICAgICAgICAgICAgICAvLyB1bmtub3duIGNvbG9yCi0gICAgICAgICAgICAgICAgICAgIGNv
bnNvbGUud2FybiggJ1RIUkVFLkNvbG9yOiBVbmtub3duIGNvbG9yICcgKyBzdHlsZSApOworICAg
ICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5Cb3gzOiAuZ2V0U2l6ZSgp
IHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3
IFZlY3RvcjMoKTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLmlzRW1wdHkoKSA/IHRhcmdldC5zZXQoIDAsIDAsIDAg
KSA6IHRhcmdldC5zdWJWZWN0b3JzKCB0aGlzLm1heCwgdGhpcy5taW4gKTsKIAogICAgICAgICB9
LAogCi0gICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGV4cGFuZEJ5UG9pbnQ6
IGZ1bmN0aW9uICggcG9pbnQgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25z
dHJ1Y3RvciggdGhpcy5yLCB0aGlzLmcsIHRoaXMuYiApOworICAgICAgICAgICAgdGhpcy5taW4u
bWluKCBwb2ludCApOworICAgICAgICAgICAgdGhpcy5tYXgubWF4KCBwb2ludCApOworCisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIGNvcHk6IGZ1bmN0
aW9uICggY29sb3IgKSB7CisgICAgICAgIGV4cGFuZEJ5VmVjdG9yOiBmdW5jdGlvbiAoIHZlY3Rv
ciApIHsKIAotICAgICAgICAgICAgdGhpcy5yID0gY29sb3IucjsKLSAgICAgICAgICAgIHRoaXMu
ZyA9IGNvbG9yLmc7Ci0gICAgICAgICAgICB0aGlzLmIgPSBjb2xvci5iOworICAgICAgICAgICAg
dGhpcy5taW4uc3ViKCB2ZWN0b3IgKTsKKyAgICAgICAgICAgIHRoaXMubWF4LmFkZCggdmVjdG9y
ICk7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAg
Y29weUdhbW1hVG9MaW5lYXI6IGZ1bmN0aW9uICggY29sb3IsIGdhbW1hRmFjdG9yICkgewotCi0g
ICAgICAgICAgICBpZiAoIGdhbW1hRmFjdG9yID09PSB1bmRlZmluZWQgKSBnYW1tYUZhY3RvciA9
IDIuMDsKKyAgICAgICAgZXhwYW5kQnlTY2FsYXI6IGZ1bmN0aW9uICggc2NhbGFyICkgewogCi0g
ICAgICAgICAgICB0aGlzLnIgPSBNYXRoLnBvdyggY29sb3IuciwgZ2FtbWFGYWN0b3IgKTsKLSAg
ICAgICAgICAgIHRoaXMuZyA9IE1hdGgucG93KCBjb2xvci5nLCBnYW1tYUZhY3RvciApOwotICAg
ICAgICAgICAgdGhpcy5iID0gTWF0aC5wb3coIGNvbG9yLmIsIGdhbW1hRmFjdG9yICk7CisgICAg
ICAgICAgICB0aGlzLm1pbi5hZGRTY2FsYXIoIC0gc2NhbGFyICk7CisgICAgICAgICAgICB0aGlz
Lm1heC5hZGRTY2FsYXIoIHNjYWxhciApOwogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAog
ICAgICAgICB9LAogCi0gICAgICAgIGNvcHlMaW5lYXJUb0dhbW1hOiBmdW5jdGlvbiAoIGNvbG9y
LCBnYW1tYUZhY3RvciApIHsKLQotICAgICAgICAgICAgaWYgKCBnYW1tYUZhY3RvciA9PT0gdW5k
ZWZpbmVkICkgZ2FtbWFGYWN0b3IgPSAyLjA7CisgICAgICAgIGV4cGFuZEJ5T2JqZWN0OiBmdW5j
dGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHZhciBzYWZlSW52ZXJzZSA9ICggZ2FtbWFGYWN0b3Ig
PiAwICkgPyAoIDEuMCAvIGdhbW1hRmFjdG9yICkgOiAxLjA7CisgICAgICAgICAgICAvLyBDb21w
dXRlcyB0aGUgd29ybGQtYXhpcy1hbGlnbmVkIGJvdW5kaW5nIGJveCBvZiBhbiBvYmplY3QgKGlu
Y2x1ZGluZyBpdHMgY2hpbGRyZW4pLAorICAgICAgICAgICAgLy8gYWNjb3VudGluZyBmb3IgYm90
aCB0aGUgb2JqZWN0J3MsIGFuZCBjaGlsZHJlbidzLCB3b3JsZCB0cmFuc2Zvcm1zCiAKLSAgICAg
ICAgICAgIHRoaXMuciA9IE1hdGgucG93KCBjb2xvci5yLCBzYWZlSW52ZXJzZSApOwotICAgICAg
ICAgICAgdGhpcy5nID0gTWF0aC5wb3coIGNvbG9yLmcsIHNhZmVJbnZlcnNlICk7Ci0gICAgICAg
ICAgICB0aGlzLmIgPSBNYXRoLnBvdyggY29sb3IuYiwgc2FmZUludmVyc2UgKTsKKyAgICAgICAg
ICAgIHZhciBzY29wZSwgaSwgbDsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
ICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICBm
dW5jdGlvbiB0cmF2ZXJzZSggbm9kZSApIHsKIAotICAgICAgICBjb252ZXJ0R2FtbWFUb0xpbmVh
cjogZnVuY3Rpb24gKCBnYW1tYUZhY3RvciApIHsKKyAgICAgICAgICAgICAgICB2YXIgZ2VvbWV0
cnkgPSBub2RlLmdlb21ldHJ5OwogCi0gICAgICAgICAgICB0aGlzLmNvcHlHYW1tYVRvTGluZWFy
KCB0aGlzLCBnYW1tYUZhY3RvciApOworICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkgIT09
IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAg
ICAgICAgIGlmICggZ2VvbWV0cnkuaXNHZW9tZXRyeSApIHsKIAotICAgICAgICB9LAorICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2VzID0gZ2VvbWV0cnkudmVydGljZXM7CiAKLSAg
ICAgICAgY29udmVydExpbmVhclRvR2FtbWE6IGZ1bmN0aW9uICggZ2FtbWFGYWN0b3IgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHZlcnRpY2VzLmxlbmd0aDsg
aSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgIHRoaXMuY29weUxpbmVhclRvR2FtbWEoIHRo
aXMsIGdhbW1hRmFjdG9yICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjEuY29weSgg
dmVydGljZXNbIGkgXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYxLmFwcGx5TWF0
cml4NCggbm9kZS5tYXRyaXhXb3JsZCApOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5leHBhbmRCeVBvaW50KCB2MSApOwogCi0g
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgY29weVNSR0JU
b0xpbmVhcjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBn
ZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5ICkgewogCi0gICAgICAgICAgICBmdW5jdGlvbiBTUkdC
VG9MaW5lYXIoIGMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlID0g
Z2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjsKIAotICAgICAgICAgICAgICAgIHJldHVybiAo
IGMgPCAwLjA0MDQ1ICkgPyBjICogMC4wNzczOTkzODA4IDogTWF0aC5wb3coIGMgKiAwLjk0Nzg2
NzI5ODYgKyAwLjA1MjEzMjcwMTQsIDIuNCApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBhdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gYXR0cmlidXRlLmNvdW50OyBpIDwg
bDsgaSArKyApIHsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvcHlTUkdCVG9MaW5l
YXIoIGNvbG9yICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MS5mcm9tQnVm
ZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUsIGkgKS5hcHBseU1hdHJpeDQoIG5vZGUubWF0cml4V29y
bGQgKTsKIAotICAgICAgICAgICAgICAgIHRoaXMuciA9IFNSR0JUb0xpbmVhciggY29sb3IuciAp
OwotICAgICAgICAgICAgICAgIHRoaXMuZyA9IFNSR0JUb0xpbmVhciggY29sb3IuZyApOwotICAg
ICAgICAgICAgICAgIHRoaXMuYiA9IFNSR0JUb0xpbmVhciggY29sb3IuYiApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5leHBhbmRCeVBvaW50KCB2MSApOwogCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIH0o
KSwKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIGNvcHlMaW5lYXJUb1NSR0I6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZ1bmN0aW9uIExp
bmVhclRvU1JHQiggYyApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHJldHVy
biAoIGMgPCAwLjAwMzEzMDggKSA/IGMgKiAxMi45MiA6IDEuMDU1ICogKCBNYXRoLnBvdyggYywg
MC40MTY2NiApICkgLSAwLjA1NTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBleHBhbmRC
eU9iamVjdCggb2JqZWN0ICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2Nv
cGUgPSB0aGlzOwogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29weUxpbmVhclRvU1JH
QiggY29sb3IgKSB7CisgICAgICAgICAgICAgICAgb2JqZWN0LnVwZGF0ZU1hdHJpeFdvcmxkKCB0
cnVlICk7CiAKLSAgICAgICAgICAgICAgICB0aGlzLnIgPSBMaW5lYXJUb1NSR0IoIGNvbG9yLnIg
KTsKLSAgICAgICAgICAgICAgICB0aGlzLmcgPSBMaW5lYXJUb1NSR0IoIGNvbG9yLmcgKTsKLSAg
ICAgICAgICAgICAgICB0aGlzLmIgPSBMaW5lYXJUb1NSR0IoIGNvbG9yLmIgKTsKKyAgICAgICAg
ICAgICAgICBvYmplY3QudHJhdmVyc2UoIHRyYXZlcnNlICk7CiAKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKIApAQCAtNjcxMCwyMjk1ICs2NDU4LDIzNjkgQEAKIAogICAgICAgICB9KCks
CiAKLSAgICAgICAgY29udmVydFNSR0JUb0xpbmVhcjogZnVuY3Rpb24gKCkgeworICAgICAgICBj
b250YWluc1BvaW50OiBmdW5jdGlvbiAoIHBvaW50ICkgewogCi0gICAgICAgICAgICB0aGlzLmNv
cHlTUkdCVG9MaW5lYXIoIHRoaXMgKTsKKyAgICAgICAgICAgIHJldHVybiBwb2ludC54IDwgdGhp
cy5taW4ueCB8fCBwb2ludC54ID4gdGhpcy5tYXgueCB8fAorICAgICAgICAgICAgICAgIHBvaW50
LnkgPCB0aGlzLm1pbi55IHx8IHBvaW50LnkgPiB0aGlzLm1heC55IHx8CisgICAgICAgICAgICAg
ICAgcG9pbnQueiA8IHRoaXMubWluLnogfHwgcG9pbnQueiA+IHRoaXMubWF4LnogPyBmYWxzZSA6
IHRydWU7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAorCisgICAgICAg
IGNvbnRhaW5zQm94OiBmdW5jdGlvbiAoIGJveCApIHsKKworICAgICAgICAgICAgcmV0dXJuIHRo
aXMubWluLnggPD0gYm94Lm1pbi54ICYmIGJveC5tYXgueCA8PSB0aGlzLm1heC54ICYmCisgICAg
ICAgICAgICAgICAgdGhpcy5taW4ueSA8PSBib3gubWluLnkgJiYgYm94Lm1heC55IDw9IHRoaXMu
bWF4LnkgJiYKKyAgICAgICAgICAgICAgICB0aGlzLm1pbi56IDw9IGJveC5taW4ueiAmJiBib3gu
bWF4LnogPD0gdGhpcy5tYXguejsKIAogICAgICAgICB9LAogCi0gICAgICAgIGNvbnZlcnRMaW5l
YXJUb1NSR0I6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZ2V0UGFyYW1ldGVyOiBmdW5jdGlvbiAo
IHBvaW50LCB0YXJnZXQgKSB7CiAKLSAgICAgICAgICAgIHRoaXMuY29weUxpbmVhclRvU1JHQigg
dGhpcyApOworICAgICAgICAgICAgLy8gVGhpcyBjYW4gcG90ZW50aWFsbHkgaGF2ZSBhIGRpdmlk
ZSBieSB6ZXJvIGlmIHRoZSBib3gKKyAgICAgICAgICAgIC8vIGhhcyBhIHNpemUgZGltZW5zaW9u
IG9mIDAuCiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgaWYgKCB0YXJn
ZXQgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIGNvbnNv
bGUud2FybiggJ1RIUkVFLkJveDM6IC5nZXRQYXJhbWV0ZXIoKSB0YXJnZXQgaXMgbm93IHJlcXVp
cmVkJyApOworICAgICAgICAgICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAg
ICAgZ2V0SGV4OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJl
dHVybiAoIHRoaXMuciAqIDI1NSApIDw8IDE2IF4gKCB0aGlzLmcgKiAyNTUgKSA8PCA4IF4gKCB0
aGlzLmIgKiAyNTUgKSA8PCAwOworICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5zZXQoCisgICAg
ICAgICAgICAgICAgKCBwb2ludC54IC0gdGhpcy5taW4ueCApIC8gKCB0aGlzLm1heC54IC0gdGhp
cy5taW4ueCApLAorICAgICAgICAgICAgICAgICggcG9pbnQueSAtIHRoaXMubWluLnkgKSAvICgg
dGhpcy5tYXgueSAtIHRoaXMubWluLnkgKSwKKyAgICAgICAgICAgICAgICAoIHBvaW50LnogLSB0
aGlzLm1pbi56ICkgLyAoIHRoaXMubWF4LnogLSB0aGlzLm1pbi56ICkKKyAgICAgICAgICAgICk7
CiAKICAgICAgICAgfSwKIAotICAgICAgICBnZXRIZXhTdHJpbmc6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgaW50ZXJzZWN0c0JveDogZnVuY3Rpb24gKCBib3ggKSB7CiAKLSAgICAgICAgICAgIHJl
dHVybiAoICcwMDAwMDAnICsgdGhpcy5nZXRIZXgoKS50b1N0cmluZyggMTYgKSApLnNsaWNlKCAt
IDYgKTsKKyAgICAgICAgICAgIC8vIHVzaW5nIDYgc3BsaXR0aW5nIHBsYW5lcyB0byBydWxlIG91
dCBpbnRlcnNlY3Rpb25zLgorICAgICAgICAgICAgcmV0dXJuIGJveC5tYXgueCA8IHRoaXMubWlu
LnggfHwgYm94Lm1pbi54ID4gdGhpcy5tYXgueCB8fAorICAgICAgICAgICAgICAgIGJveC5tYXgu
eSA8IHRoaXMubWluLnkgfHwgYm94Lm1pbi55ID4gdGhpcy5tYXgueSB8fAorICAgICAgICAgICAg
ICAgIGJveC5tYXgueiA8IHRoaXMubWluLnogfHwgYm94Lm1pbi56ID4gdGhpcy5tYXgueiA/IGZh
bHNlIDogdHJ1ZTsKIAogICAgICAgICB9LAogCi0gICAgICAgIGdldEhTTDogZnVuY3Rpb24gKCB0
YXJnZXQgKSB7CisgICAgICAgIGludGVyc2VjdHNTcGhlcmU6ICggZnVuY3Rpb24gKCkgewogCi0g
ICAgICAgICAgICAvLyBoLHMsbCByYW5nZXMgYXJlIGluIDAuMCAtIDEuMAorICAgICAgICAgICAg
dmFyIGNsb3Nlc3RQb2ludCA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAgICAgIGlmICggdGFy
Z2V0ID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gaW50ZXJz
ZWN0c1NwaGVyZSggc3BoZXJlICkgewogCi0gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAn
VEhSRUUuQ29sb3I6IC5nZXRIU0woKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOwotICAgICAg
ICAgICAgICAgIHRhcmdldCA9IHsgaDogMCwgczogMCwgbDogMCB9OworICAgICAgICAgICAgICAg
IC8vIEZpbmQgdGhlIHBvaW50IG9uIHRoZSBBQUJCIGNsb3Nlc3QgdG8gdGhlIHNwaGVyZSBjZW50
ZXIuCisgICAgICAgICAgICAgICAgdGhpcy5jbGFtcFBvaW50KCBzcGhlcmUuY2VudGVyLCBjbG9z
ZXN0UG9pbnQgKTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIElmIHRoYXQg
cG9pbnQgaXMgaW5zaWRlIHRoZSBzcGhlcmUsIHRoZSBBQUJCIGFuZCBzcGhlcmUgaW50ZXJzZWN0
LgorICAgICAgICAgICAgICAgIHJldHVybiBjbG9zZXN0UG9pbnQuZGlzdGFuY2VUb1NxdWFyZWQo
IHNwaGVyZS5jZW50ZXIgKSA8PSAoIHNwaGVyZS5yYWRpdXMgKiBzcGhlcmUucmFkaXVzICk7CiAK
LSAgICAgICAgICAgIHZhciByID0gdGhpcy5yLCBnID0gdGhpcy5nLCBiID0gdGhpcy5iOworICAg
ICAgICAgICAgfTsKIAotICAgICAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4KCByLCBnLCBiICk7
Ci0gICAgICAgICAgICB2YXIgbWluID0gTWF0aC5taW4oIHIsIGcsIGIgKTsKKyAgICAgICAgfSAp
KCksCiAKLSAgICAgICAgICAgIHZhciBodWUsIHNhdHVyYXRpb247Ci0gICAgICAgICAgICB2YXIg
bGlnaHRuZXNzID0gKCBtaW4gKyBtYXggKSAvIDIuMDsKKyAgICAgICAgaW50ZXJzZWN0c1BsYW5l
OiBmdW5jdGlvbiAoIHBsYW5lICkgewogCi0gICAgICAgICAgICBpZiAoIG1pbiA9PT0gbWF4ICkg
eworICAgICAgICAgICAgLy8gV2UgY29tcHV0ZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBkb3Qg
cHJvZHVjdCB2YWx1ZXMuIElmIHRob3NlIHZhbHVlcworICAgICAgICAgICAgLy8gYXJlIG9uIHRo
ZSBzYW1lIHNpZGUgKGJhY2sgb3IgZnJvbnQpIG9mIHRoZSBwbGFuZSwgdGhlbiB0aGVyZSBpcyBu
byBpbnRlcnNlY3Rpb24uCiAKLSAgICAgICAgICAgICAgICBodWUgPSAwOwotICAgICAgICAgICAg
ICAgIHNhdHVyYXRpb24gPSAwOworICAgICAgICAgICAgdmFyIG1pbiwgbWF4OworCisgICAgICAg
ICAgICBpZiAoIHBsYW5lLm5vcm1hbC54ID4gMCApIHsKKworICAgICAgICAgICAgICAgIG1pbiA9
IHBsYW5lLm5vcm1hbC54ICogdGhpcy5taW4ueDsKKyAgICAgICAgICAgICAgICBtYXggPSBwbGFu
ZS5ub3JtYWwueCAqIHRoaXMubWF4Lng7CiAKICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAg
ICAgICAgICAgICB2YXIgZGVsdGEgPSBtYXggLSBtaW47CisgICAgICAgICAgICAgICAgbWluID0g
cGxhbmUubm9ybWFsLnggKiB0aGlzLm1heC54OworICAgICAgICAgICAgICAgIG1heCA9IHBsYW5l
Lm5vcm1hbC54ICogdGhpcy5taW4ueDsKIAotICAgICAgICAgICAgICAgIHNhdHVyYXRpb24gPSBs
aWdodG5lc3MgPD0gMC41ID8gZGVsdGEgLyAoIG1heCArIG1pbiApIDogZGVsdGEgLyAoIDIgLSBt
YXggLSBtaW4gKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHN3aXRjaCAoIG1h
eCApIHsKKyAgICAgICAgICAgIGlmICggcGxhbmUubm9ybWFsLnkgPiAwICkgewogCi0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgcjogaHVlID0gKCBnIC0gYiApIC8gZGVsdGEgKyAoIGcgPCBiID8g
NiA6IDAgKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgZzogaHVlID0gKCBiIC0g
ciApIC8gZGVsdGEgKyAyOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBiOiBodWUg
PSAoIHIgLSBnICkgLyBkZWx0YSArIDQ7IGJyZWFrOworICAgICAgICAgICAgICAgIG1pbiArPSBw
bGFuZS5ub3JtYWwueSAqIHRoaXMubWluLnk7CisgICAgICAgICAgICAgICAgbWF4ICs9IHBsYW5l
Lm5vcm1hbC55ICogdGhpcy5tYXgueTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICBodWUgLz0gNjsKKyAgICAgICAgICAgICAgICBt
aW4gKz0gcGxhbmUubm9ybWFsLnkgKiB0aGlzLm1heC55OworICAgICAgICAgICAgICAgIG1heCAr
PSBwbGFuZS5ub3JtYWwueSAqIHRoaXMubWluLnk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgdGFyZ2V0LmggPSBodWU7Ci0gICAgICAgICAgICB0YXJnZXQucyA9IHNhdHVyYXRpb247
Ci0gICAgICAgICAgICB0YXJnZXQubCA9IGxpZ2h0bmVzczsKKyAgICAgICAgICAgIGlmICggcGxh
bmUubm9ybWFsLnogPiAwICkgewogCi0gICAgICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgICAg
ICAgICAgICAgIG1pbiArPSBwbGFuZS5ub3JtYWwueiAqIHRoaXMubWluLno7CisgICAgICAgICAg
ICAgICAgbWF4ICs9IHBsYW5lLm5vcm1hbC56ICogdGhpcy5tYXguejsKIAotICAgICAgICB9LAor
ICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICBnZXRTdHlsZTogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgICAgIG1pbiArPSBwbGFuZS5ub3JtYWwueiAqIHRoaXMubWF4Lno7CisgICAg
ICAgICAgICAgICAgbWF4ICs9IHBsYW5lLm5vcm1hbC56ICogdGhpcy5taW4uejsKIAotICAgICAg
ICAgICAgcmV0dXJuICdyZ2IoJyArICggKCB0aGlzLnIgKiAyNTUgKSB8IDAgKSArICcsJyArICgg
KCB0aGlzLmcgKiAyNTUgKSB8IDAgKSArICcsJyArICggKCB0aGlzLmIgKiAyNTUgKSB8IDAgKSAr
ICcpJzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICggbWluIDw9IC0gcGxh
bmUuY29uc3RhbnQgJiYgbWF4ID49IC0gcGxhbmUuY29uc3RhbnQgKTsKIAogICAgICAgICB9LAog
Ci0gICAgICAgIG9mZnNldEhTTDogZnVuY3Rpb24gKCkgeworICAgICAgICBpbnRlcnNlY3RzVHJp
YW5nbGU6ICggZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICB2YXIgaHNsID0ge307CisgICAg
ICAgICAgICAvLyB0cmlhbmdsZSBjZW50ZXJlZCB2ZXJ0aWNlcworICAgICAgICAgICAgdmFyIHYw
ID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7Cisg
ICAgICAgICAgICB2YXIgdjIgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICByZXR1cm4g
ZnVuY3Rpb24gKCBoLCBzLCBsICkgeworICAgICAgICAgICAgLy8gdHJpYW5nbGUgZWRnZSB2ZWN0
b3JzCisgICAgICAgICAgICB2YXIgZjAgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdmFy
IGYxID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciBmMiA9IG5ldyBWZWN0b3IzKCk7
CiAKLSAgICAgICAgICAgICAgICB0aGlzLmdldEhTTCggaHNsICk7CisgICAgICAgICAgICB2YXIg
dGVzdEF4aXMgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICAgICAgaHNsLmggKz0gaDsg
aHNsLnMgKz0gczsgaHNsLmwgKz0gbDsKKyAgICAgICAgICAgIHZhciBjZW50ZXIgPSBuZXcgVmVj
dG9yMygpOworICAgICAgICAgICAgdmFyIGV4dGVudHMgPSBuZXcgVmVjdG9yMygpOwogCi0gICAg
ICAgICAgICAgICAgdGhpcy5zZXRIU0woIGhzbC5oLCBoc2wucywgaHNsLmwgKTsKKyAgICAgICAg
ICAgIHZhciB0cmlhbmdsZU5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIGZ1bmN0aW9uIHNhdEZvckF4ZXMoIGF4ZXMgKSB7
CiAKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgdmFyIGksIGo7CiAKLSAgICAgICAg
fSgpLAorICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBqID0gYXhlcy5sZW5ndGggLSAzOyBp
IDw9IGo7IGkgKz0gMyApIHsKIAotICAgICAgICBhZGQ6IGZ1bmN0aW9uICggY29sb3IgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRlc3RBeGlzLmZyb21BcnJheSggYXhlcywgaSApOworICAgICAg
ICAgICAgICAgICAgICAvLyBwcm9qZWN0IHRoZSBhYWJiIG9udG8gdGhlIHNlcGVyYXRpbmcgYXhp
cworICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGV4dGVudHMueCAqIE1hdGguYWJzKCB0ZXN0
QXhpcy54ICkgKyBleHRlbnRzLnkgKiBNYXRoLmFicyggdGVzdEF4aXMueSApICsgZXh0ZW50cy56
ICogTWF0aC5hYnMoIHRlc3RBeGlzLnogKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gcHJvamVj
dCBhbGwgMyB2ZXJ0aWNlcyBvZiB0aGUgdHJpYW5nbGUgb250byB0aGUgc2VwZXJhdGluZyBheGlz
CisgICAgICAgICAgICAgICAgICAgIHZhciBwMCA9IHYwLmRvdCggdGVzdEF4aXMgKTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHAxID0gdjEuZG90KCB0ZXN0QXhpcyApOworICAgICAgICAgICAg
ICAgICAgICB2YXIgcDIgPSB2Mi5kb3QoIHRlc3RBeGlzICk7CisgICAgICAgICAgICAgICAgICAg
IC8vIGFjdHVhbCB0ZXN0LCBiYXNpY2FsbHkgc2VlIGlmIGVpdGhlciBvZiB0aGUgbW9zdCBleHRy
ZW1lIG9mIHRoZSB0cmlhbmdsZSBwb2ludHMgaW50ZXJzZWN0cyByCisgICAgICAgICAgICAgICAg
ICAgIGlmICggTWF0aC5tYXgoIC0gTWF0aC5tYXgoIHAwLCBwMSwgcDIgKSwgTWF0aC5taW4oIHAw
LCBwMSwgcDIgKSApID4gciApIHsKIAotICAgICAgICAgICAgdGhpcy5yICs9IGNvbG9yLnI7Ci0g
ICAgICAgICAgICB0aGlzLmcgKz0gY29sb3IuZzsKLSAgICAgICAgICAgIHRoaXMuYiArPSBjb2xv
ci5iOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9pbnRzIG9mIHRoZSBwcm9qZWN0ZWQg
dHJpYW5nbGUgYXJlIG91dHNpZGUgdGhlIHByb2plY3RlZCBoYWxmLWxlbmd0aCBvZiB0aGUgYWFi
YgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGF4aXMgaXMgc2VwZXJhdGluZyBhbmQg
d2UgY2FuIGV4aXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB9
LAorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBhZGRDb2xvcnM6IGZ1bmN0aW9uICggY29s
b3IxLCBjb2xvcjIgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAg
ICAgIHRoaXMuciA9IGNvbG9yMS5yICsgY29sb3IyLnI7Ci0gICAgICAgICAgICB0aGlzLmcgPSBj
b2xvcjEuZyArIGNvbG9yMi5nOwotICAgICAgICAgICAgdGhpcy5iID0gY29sb3IxLmIgKyBjb2xv
cjIuYjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gaW50ZXJzZWN0c1RyaWFuZ2xlKCB0cmlhbmdsZSApIHsKIAot
ICAgICAgICB9LAorICAgICAgICAgICAgICAgIGlmICggdGhpcy5pc0VtcHR5KCkgKSB7CiAKLSAg
ICAgICAgYWRkU2NhbGFyOiBmdW5jdGlvbiAoIHMgKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICAgICAgdGhpcy5yICs9IHM7Ci0gICAgICAgICAgICB0aGlz
LmcgKz0gczsKLSAgICAgICAgICAgIHRoaXMuYiArPSBzOworICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBib3gg
Y2VudGVyIGFuZCBleHRlbnRzCisgICAgICAgICAgICAgICAgdGhpcy5nZXRDZW50ZXIoIGNlbnRl
ciApOworICAgICAgICAgICAgICAgIGV4dGVudHMuc3ViVmVjdG9ycyggdGhpcy5tYXgsIGNlbnRl
ciApOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgLy8gdHJhbnNsYXRlIHRyaWFuZ2xl
IHRvIGFhYmIgb3JpZ2luCisgICAgICAgICAgICAgICAgdjAuc3ViVmVjdG9ycyggdHJpYW5nbGUu
YSwgY2VudGVyICk7CisgICAgICAgICAgICAgICAgdjEuc3ViVmVjdG9ycyggdHJpYW5nbGUuYiwg
Y2VudGVyICk7CisgICAgICAgICAgICAgICAgdjIuc3ViVmVjdG9ycyggdHJpYW5nbGUuYywgY2Vu
dGVyICk7CiAKLSAgICAgICAgc3ViOiBmdW5jdGlvbiAoIGNvbG9yICkgeworICAgICAgICAgICAg
ICAgIC8vIGNvbXB1dGUgZWRnZSB2ZWN0b3JzIGZvciB0cmlhbmdsZQorICAgICAgICAgICAgICAg
IGYwLnN1YlZlY3RvcnMoIHYxLCB2MCApOworICAgICAgICAgICAgICAgIGYxLnN1YlZlY3RvcnMo
IHYyLCB2MSApOworICAgICAgICAgICAgICAgIGYyLnN1YlZlY3RvcnMoIHYwLCB2MiApOwogCi0g
ICAgICAgICAgICB0aGlzLnIgPSBNYXRoLm1heCggMCwgdGhpcy5yIC0gY29sb3IuciApOwotICAg
ICAgICAgICAgdGhpcy5nID0gTWF0aC5tYXgoIDAsIHRoaXMuZyAtIGNvbG9yLmcgKTsKLSAgICAg
ICAgICAgIHRoaXMuYiA9IE1hdGgubWF4KCAwLCB0aGlzLmIgLSBjb2xvci5iICk7CisgICAgICAg
ICAgICAgICAgLy8gdGVzdCBhZ2FpbnN0IGF4ZXMgdGhhdCBhcmUgZ2l2ZW4gYnkgY3Jvc3MgcHJv
ZHVjdCBjb21iaW5hdGlvbnMgb2YgdGhlIGVkZ2VzIG9mIHRoZSB0cmlhbmdsZSBhbmQgdGhlIGVk
Z2VzIG9mIHRoZSBhYWJiCisgICAgICAgICAgICAgICAgLy8gbWFrZSBhbiBheGlzIHRlc3Rpbmcg
b2YgZWFjaCBvZiB0aGUgMyBzaWRlcyBvZiB0aGUgYWFiYiBhZ2FpbnN0IGVhY2ggb2YgdGhlIDMg
c2lkZXMgb2YgdGhlIHRyaWFuZ2xlID0gOSBheGlzIG9mIHNlcGFyYXRpb24KKyAgICAgICAgICAg
ICAgICAvLyBheGlzX2lqID0gdV9pIHggZl9qICh1MCwgdTEsIHUyID0gZmFjZSBub3JtYWxzIG9m
IGFhYmIgPSB4LHkseiBheGVzIHZlY3RvcnMgc2luY2UgYWFiYiBpcyBheGlzIGFsaWduZWQpCisg
ICAgICAgICAgICAgICAgdmFyIGF4ZXMgPSBbCisgICAgICAgICAgICAgICAgICAgIDAsIC0gZjAu
eiwgZjAueSwgMCwgLSBmMS56LCBmMS55LCAwLCAtIGYyLnosIGYyLnksCisgICAgICAgICAgICAg
ICAgICAgIGYwLnosIDAsIC0gZjAueCwgZjEueiwgMCwgLSBmMS54LCBmMi56LCAwLCAtIGYyLngs
CisgICAgICAgICAgICAgICAgICAgIC0gZjAueSwgZjAueCwgMCwgLSBmMS55LCBmMS54LCAwLCAt
IGYyLnksIGYyLngsIDAKKyAgICAgICAgICAgICAgICBdOworICAgICAgICAgICAgICAgIGlmICgg
ISBzYXRGb3JBeGVzKCBheGVzICkgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgbXVsdGlwbHk6IGZ1bmN0aW9uICggY29sb3IgKSB7CisgICAgICAg
ICAgICAgICAgLy8gdGVzdCAzIGZhY2Ugbm9ybWFscyBmcm9tIHRoZSBhYWJiCisgICAgICAgICAg
ICAgICAgYXhlcyA9IFsgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSBdOworICAgICAgICAgICAg
ICAgIGlmICggISBzYXRGb3JBeGVzKCBheGVzICkgKSB7CiAKLSAgICAgICAgICAgIHRoaXMuciAq
PSBjb2xvci5yOwotICAgICAgICAgICAgdGhpcy5nICo9IGNvbG9yLmc7Ci0gICAgICAgICAgICB0
aGlzLmIgKj0gY29sb3IuYjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLyBmaW5hbGx5IHRlc3RpbmcgdGhlIGZhY2Ugbm9ybWFsIG9mIHRoZSB0cmlhbmdsZQor
ICAgICAgICAgICAgICAgIC8vIHVzZSBhbHJlYWR5IGV4aXN0aW5nIHRyaWFuZ2xlIGVkZ2UgdmVj
dG9ycyBoZXJlCisgICAgICAgICAgICAgICAgdHJpYW5nbGVOb3JtYWwuY3Jvc3NWZWN0b3JzKCBm
MCwgZjEgKTsKKyAgICAgICAgICAgICAgICBheGVzID0gWyB0cmlhbmdsZU5vcm1hbC54LCB0cmlh
bmdsZU5vcm1hbC55LCB0cmlhbmdsZU5vcm1hbC56IF07CisgICAgICAgICAgICAgICAgcmV0dXJu
IHNhdEZvckF4ZXMoIGF4ZXMgKTsKKworICAgICAgICAgICAgfTsKKworICAgICAgICB9ICkoKSwK
KworICAgICAgICBjbGFtcFBvaW50OiBmdW5jdGlvbiAoIHBvaW50LCB0YXJnZXQgKSB7CisKKyAg
ICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRlZmluZWQgKSB7CisKKyAgICAgICAgICAgICAg
ICBjb25zb2xlLndhcm4oICdUSFJFRS5Cb3gzOiAuY2xhbXBQb2ludCgpIHRhcmdldCBpcyBub3cg
cmVxdWlyZWQnICk7CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsKKwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmNvcHkoIHBvaW50ICku
Y2xhbXAoIHRoaXMubWluLCB0aGlzLm1heCApOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgbXVs
dGlwbHlTY2FsYXI6IGZ1bmN0aW9uICggcyApIHsKKyAgICAgICAgZGlzdGFuY2VUb1BvaW50OiBm
dW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHRoaXMuciAqPSBzOwotICAgICAgICAgICAgdGhp
cy5nICo9IHM7Ci0gICAgICAgICAgICB0aGlzLmIgKj0gczsKKyAgICAgICAgICAgIHZhciB2MSA9
IG5ldyBWZWN0b3IzKCk7CisKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBkaXN0YW5jZVRv
UG9pbnQoIHBvaW50ICkgeworCisgICAgICAgICAgICAgICAgdmFyIGNsYW1wZWRQb2ludCA9IHYx
LmNvcHkoIHBvaW50ICkuY2xhbXAoIHRoaXMubWluLCB0aGlzLm1heCApOworICAgICAgICAgICAg
ICAgIHJldHVybiBjbGFtcGVkUG9pbnQuc3ViKCBwb2ludCApLmxlbmd0aCgpOworCisgICAgICAg
ICAgICB9OworCisgICAgICAgIH0oKSwKKworICAgICAgICBnZXRCb3VuZGluZ1NwaGVyZTogZnVu
Y3Rpb24gKCkgeworCisgICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMygpOworCisgICAg
ICAgICAgICByZXR1cm4gZnVuY3Rpb24gZ2V0Qm91bmRpbmdTcGhlcmUoIHRhcmdldCApIHsKKwor
ICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRlZmluZWQgKSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLkJveDM6IC5nZXRCb3VuZGluZ1NwaGVy
ZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7CisgICAgICAgICAgICAgICAgICAgIC8vdGFy
Z2V0ID0gbmV3IFNwaGVyZSgpOyAvLyByZW1vdmVkIHRvIGF2b2lkIGN5Y2xpYyBkZXBlbmRlbmN5
CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0aGlzLmdldENlbnRlcigg
dGFyZ2V0LmNlbnRlciApOworCisgICAgICAgICAgICAgICAgdGFyZ2V0LnJhZGl1cyA9IHRoaXMu
Z2V0U2l6ZSggdjEgKS5sZW5ndGgoKSAqIDAuNTsKKworICAgICAgICAgICAgICAgIHJldHVybiB0
YXJnZXQ7CisKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgfSgpLAorCisgICAgICAgIGludGVy
c2VjdDogZnVuY3Rpb24gKCBib3ggKSB7CisKKyAgICAgICAgICAgIHRoaXMubWluLm1heCggYm94
Lm1pbiApOworICAgICAgICAgICAgdGhpcy5tYXgubWluKCBib3gubWF4ICk7CisKKyAgICAgICAg
ICAgIC8vIGVuc3VyZSB0aGF0IGlmIHRoZXJlIGlzIG5vIG92ZXJsYXAsIHRoZSByZXN1bHQgaXMg
ZnVsbHkgZW1wdHksIG5vdCBzbGlnaHRseSBlbXB0eSB3aXRoIG5vbi1pbmYvK2luZiB2YWx1ZXMg
dGhhdCB3aWxsIGNhdXNlIHN1YnNlcXVlbmNlIGludGVyc2VjdHMgdG8gZXJyb25lb3VzbHkgcmV0
dXJuIHZhbGlkIHZhbHVlcy4KKyAgICAgICAgICAgIGlmICggdGhpcy5pc0VtcHR5KCkgKSB0aGlz
Lm1ha2VFbXB0eSgpOwogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAog
Ci0gICAgICAgIGxlcnA6IGZ1bmN0aW9uICggY29sb3IsIGFscGhhICkgeworICAgICAgICB1bmlv
bjogZnVuY3Rpb24gKCBib3ggKSB7CiAKLSAgICAgICAgICAgIHRoaXMuciArPSAoIGNvbG9yLnIg
LSB0aGlzLnIgKSAqIGFscGhhOwotICAgICAgICAgICAgdGhpcy5nICs9ICggY29sb3IuZyAtIHRo
aXMuZyApICogYWxwaGE7Ci0gICAgICAgICAgICB0aGlzLmIgKz0gKCBjb2xvci5iIC0gdGhpcy5i
ICkgKiBhbHBoYTsKKyAgICAgICAgICAgIHRoaXMubWluLm1pbiggYm94Lm1pbiApOworICAgICAg
ICAgICAgdGhpcy5tYXgubWF4KCBib3gubWF4ICk7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlz
OwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgZXF1YWxzOiBmdW5jdGlvbiAoIGMgKSB7CisgICAg
ICAgIGFwcGx5TWF0cml4NDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICByZXR1cm4gKCBj
LnIgPT09IHRoaXMuciApICYmICggYy5nID09PSB0aGlzLmcgKSAmJiAoIGMuYiA9PT0gdGhpcy5i
ICk7CisgICAgICAgICAgICB2YXIgcG9pbnRzID0gWworICAgICAgICAgICAgICAgIG5ldyBWZWN0
b3IzKCksCisgICAgICAgICAgICAgICAgbmV3IFZlY3RvcjMoKSwKKyAgICAgICAgICAgICAgICBu
ZXcgVmVjdG9yMygpLAorICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IzKCksCisgICAgICAgICAg
ICAgICAgbmV3IFZlY3RvcjMoKSwKKyAgICAgICAgICAgICAgICBuZXcgVmVjdG9yMygpLAorICAg
ICAgICAgICAgICAgIG5ldyBWZWN0b3IzKCksCisgICAgICAgICAgICAgICAgbmV3IFZlY3RvcjMo
KQorICAgICAgICAgICAgXTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uIGFwcGx5TWF0cml4NCggbWF0cml4ICkgewogCi0gICAgICAgIGZyb21BcnJheTogZnVuY3Rp
b24gKCBhcnJheSwgb2Zmc2V0ICkgeworICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybSBvZiBl
bXB0eSBib3ggaXMgYW4gZW1wdHkgYm94LgorICAgICAgICAgICAgICAgIGlmICggdGhpcy5pc0Vt
cHR5KCkgKSByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgaWYgKCBvZmZzZXQgPT09IHVuZGVm
aW5lZCApIG9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgLy8gTk9URTogSSBhbSB1c2luZyBh
IGJpbmFyeSBwYXR0ZXJuIHRvIHNwZWNpZnkgYWxsIDJeMyBjb21iaW5hdGlvbnMgYmVsb3cKKyAg
ICAgICAgICAgICAgICBwb2ludHNbIDAgXS5zZXQoIHRoaXMubWluLngsIHRoaXMubWluLnksIHRo
aXMubWluLnogKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAvLyAwMDAKKyAgICAgICAgICAgICAg
ICBwb2ludHNbIDEgXS5zZXQoIHRoaXMubWluLngsIHRoaXMubWluLnksIHRoaXMubWF4LnogKS5h
cHBseU1hdHJpeDQoIG1hdHJpeCApOyAvLyAwMDEKKyAgICAgICAgICAgICAgICBwb2ludHNbIDIg
XS5zZXQoIHRoaXMubWluLngsIHRoaXMubWF4LnksIHRoaXMubWluLnogKS5hcHBseU1hdHJpeDQo
IG1hdHJpeCApOyAvLyAwMTAKKyAgICAgICAgICAgICAgICBwb2ludHNbIDMgXS5zZXQoIHRoaXMu
bWluLngsIHRoaXMubWF4LnksIHRoaXMubWF4LnogKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAv
LyAwMTEKKyAgICAgICAgICAgICAgICBwb2ludHNbIDQgXS5zZXQoIHRoaXMubWF4LngsIHRoaXMu
bWluLnksIHRoaXMubWluLnogKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAvLyAxMDAKKyAgICAg
ICAgICAgICAgICBwb2ludHNbIDUgXS5zZXQoIHRoaXMubWF4LngsIHRoaXMubWluLnksIHRoaXMu
bWF4LnogKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAvLyAxMDEKKyAgICAgICAgICAgICAgICBw
b2ludHNbIDYgXS5zZXQoIHRoaXMubWF4LngsIHRoaXMubWF4LnksIHRoaXMubWluLnogKS5hcHBs
eU1hdHJpeDQoIG1hdHJpeCApOyAvLyAxMTAKKyAgICAgICAgICAgICAgICBwb2ludHNbIDcgXS5z
ZXQoIHRoaXMubWF4LngsIHRoaXMubWF4LnksIHRoaXMubWF4LnogKS5hcHBseU1hdHJpeDQoIG1h
dHJpeCApOyAvLyAxMTEKIAotICAgICAgICAgICAgdGhpcy5yID0gYXJyYXlbIG9mZnNldCBdOwot
ICAgICAgICAgICAgdGhpcy5nID0gYXJyYXlbIG9mZnNldCArIDEgXTsKLSAgICAgICAgICAgIHRo
aXMuYiA9IGFycmF5WyBvZmZzZXQgKyAyIF07CisgICAgICAgICAgICAgICAgdGhpcy5zZXRGcm9t
UG9pbnRzKCBwb2ludHMgKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIH07CiAKLSAgICAg
ICAgdG9BcnJheTogZnVuY3Rpb24gKCBhcnJheSwgb2Zmc2V0ICkgeworICAgICAgICB9KCksCiAK
LSAgICAgICAgICAgIGlmICggYXJyYXkgPT09IHVuZGVmaW5lZCApIGFycmF5ID0gW107Ci0gICAg
ICAgICAgICBpZiAoIG9mZnNldCA9PT0gdW5kZWZpbmVkICkgb2Zmc2V0ID0gMDsKKyAgICAgICAg
dHJhbnNsYXRlOiBmdW5jdGlvbiAoIG9mZnNldCApIHsKIAotICAgICAgICAgICAgYXJyYXlbIG9m
ZnNldCBdID0gdGhpcy5yOwotICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDEgXSA9IHRoaXMu
ZzsKLSAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyAyIF0gPSB0aGlzLmI7CisgICAgICAgICAg
ICB0aGlzLm1pbi5hZGQoIG9mZnNldCApOworICAgICAgICAgICAgdGhpcy5tYXguYWRkKCBvZmZz
ZXQgKTsKIAotICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICB0b0pTT046IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgZXF1YWxzOiBmdW5jdGlvbiAoIGJveCApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
Z2V0SGV4KCk7CisgICAgICAgICAgICByZXR1cm4gYm94Lm1pbi5lcXVhbHMoIHRoaXMubWluICkg
JiYgYm94Lm1heC5lcXVhbHMoIHRoaXMubWF4ICk7CiAKICAgICAgICAgfQogCiAgICAgfSApOwog
CiAgICAgLyoqCi0gICAgICogVW5pZm9ybXMgbGlicmFyeSBmb3Igc2hhcmVkIHdlYmdsIHNoYWRl
cnMKKyAgICAgKiBAYXV0aG9yIGJob3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvCisgICAgICogQGF1
dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KICAgICAgKi8KIAotICAgIHZhciBVbmlm
b3Jtc0xpYiA9IHsKKyAgICBmdW5jdGlvbiBTcGhlcmUoIGNlbnRlciwgcmFkaXVzICkgewogCi0g
ICAgICAgIGNvbW1vbjogeworICAgICAgICB0aGlzLmNlbnRlciA9ICggY2VudGVyICE9PSB1bmRl
ZmluZWQgKSA/IGNlbnRlciA6IG5ldyBWZWN0b3IzKCk7CisgICAgICAgIHRoaXMucmFkaXVzID0g
KCByYWRpdXMgIT09IHVuZGVmaW5lZCApID8gcmFkaXVzIDogMDsKIAotICAgICAgICAgICAgZGlm
ZnVzZTogeyB2YWx1ZTogbmV3IENvbG9yKCAweGVlZWVlZSApIH0sCi0gICAgICAgICAgICBvcGFj
aXR5OiB7IHZhbHVlOiAxLjAgfSwKKyAgICB9CiAKLSAgICAgICAgICAgIG1hcDogeyB2YWx1ZTog
bnVsbCB9LAotICAgICAgICAgICAgdXZUcmFuc2Zvcm06IHsgdmFsdWU6IG5ldyBNYXRyaXgzKCkg
fSwKKyAgICBPYmplY3QuYXNzaWduKCBTcGhlcmUucHJvdG90eXBlLCB7CiAKLSAgICAgICAgICAg
IGFscGhhTWFwOiB7IHZhbHVlOiBudWxsIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24gKCBjZW50
ZXIsIHJhZGl1cyApIHsKKworICAgICAgICAgICAgdGhpcy5jZW50ZXIuY29weSggY2VudGVyICk7
CisgICAgICAgICAgICB0aGlzLnJhZGl1cyA9IHJhZGl1czsKKworICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBzcGVjdWxhcm1hcDogeworICAgICAgICBz
ZXRGcm9tUG9pbnRzOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHNwZWN1bGFyTWFwOiB7
IHZhbHVlOiBudWxsIH0sCisgICAgICAgICAgICB2YXIgYm94ID0gbmV3IEJveDMoKTsKIAotICAg
ICAgICB9LAorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldEZyb21Qb2ludHMoIHBvaW50
cywgb3B0aW9uYWxDZW50ZXIgKSB7CiAKLSAgICAgICAgZW52bWFwOiB7CisgICAgICAgICAgICAg
ICAgdmFyIGNlbnRlciA9IHRoaXMuY2VudGVyOwogCi0gICAgICAgICAgICBlbnZNYXA6IHsgdmFs
dWU6IG51bGwgfSwKLSAgICAgICAgICAgIGZsaXBFbnZNYXA6IHsgdmFsdWU6IC0gMSB9LAotICAg
ICAgICAgICAgcmVmbGVjdGl2aXR5OiB7IHZhbHVlOiAxLjAgfSwKLSAgICAgICAgICAgIHJlZnJh
Y3Rpb25SYXRpbzogeyB2YWx1ZTogMC45OCB9LAotICAgICAgICAgICAgbWF4TWlwTGV2ZWw6IHsg
dmFsdWU6IDAgfQorICAgICAgICAgICAgICAgIGlmICggb3B0aW9uYWxDZW50ZXIgIT09IHVuZGVm
aW5lZCApIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBjZW50ZXIuY29weSgg
b3B0aW9uYWxDZW50ZXIgKTsKIAotICAgICAgICBhb21hcDogeworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAKLSAgICAgICAgICAgIGFvTWFwOiB7IHZhbHVlOiBudWxsIH0sCi0gICAgICAgICAg
ICBhb01hcEludGVuc2l0eTogeyB2YWx1ZTogMSB9CisgICAgICAgICAgICAgICAgICAgIGJveC5z
ZXRGcm9tUG9pbnRzKCBwb2ludHMgKS5nZXRDZW50ZXIoIGNlbnRlciApOwogCi0gICAgICAgIH0s
CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIGxpZ2h0bWFwOiB7CisgICAgICAgICAgICAg
ICAgdmFyIG1heFJhZGl1c1NxID0gMDsKIAotICAgICAgICAgICAgbGlnaHRNYXA6IHsgdmFsdWU6
IG51bGwgfSwKLSAgICAgICAgICAgIGxpZ2h0TWFwSW50ZW5zaXR5OiB7IHZhbHVlOiAxIH0KKyAg
ICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGls
OyBpICsrICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIG1heFJhZGl1c1Nx
ID0gTWF0aC5tYXgoIG1heFJhZGl1c1NxLCBjZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQoIHBvaW50
c1sgaSBdICkgKTsKIAotICAgICAgICBlbWlzc2l2ZW1hcDogeworICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgZW1pc3NpdmVNYXA6IHsgdmFsdWU6IG51bGwgfQorICAgICAgICAgICAg
ICAgIHRoaXMucmFkaXVzID0gTWF0aC5zcXJ0KCBtYXhSYWRpdXNTcSApOwogCi0gICAgICAgIH0s
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgYnVtcG1hcDogeworICAg
ICAgICAgICAgfTsKIAotICAgICAgICAgICAgYnVtcE1hcDogeyB2YWx1ZTogbnVsbCB9LAotICAg
ICAgICAgICAgYnVtcFNjYWxlOiB7IHZhbHVlOiAxIH0KKyAgICAgICAgfSgpLAorCisgICAgICAg
IGNsb25lOiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25z
dHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKIAogICAgICAgICB9LAogCi0gICAgICAgIG5vcm1hbG1h
cDogeworICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHNwaGVyZSApIHsKIAotICAgICAgICAgICAg
bm9ybWFsTWFwOiB7IHZhbHVlOiBudWxsIH0sCi0gICAgICAgICAgICBub3JtYWxTY2FsZTogeyB2
YWx1ZTogbmV3IFZlY3RvcjIoIDEsIDEgKSB9CisgICAgICAgICAgICB0aGlzLmNlbnRlci5jb3B5
KCBzcGhlcmUuY2VudGVyICk7CisgICAgICAgICAgICB0aGlzLnJhZGl1cyA9IHNwaGVyZS5yYWRp
dXM7CisKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAg
ZGlzcGxhY2VtZW50bWFwOiB7CisgICAgICAgIGVtcHR5OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAg
ICAgICAgIGRpc3BsYWNlbWVudE1hcDogeyB2YWx1ZTogbnVsbCB9LAotICAgICAgICAgICAgZGlz
cGxhY2VtZW50U2NhbGU6IHsgdmFsdWU6IDEgfSwKLSAgICAgICAgICAgIGRpc3BsYWNlbWVudEJp
YXM6IHsgdmFsdWU6IDAgfQorICAgICAgICAgICAgcmV0dXJuICggdGhpcy5yYWRpdXMgPD0gMCAp
OwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgcm91Z2huZXNzbWFwOiB7CisgICAgICAgIGNvbnRh
aW5zUG9pbnQ6IGZ1bmN0aW9uICggcG9pbnQgKSB7CiAKLSAgICAgICAgICAgIHJvdWdobmVzc01h
cDogeyB2YWx1ZTogbnVsbCB9CisgICAgICAgICAgICByZXR1cm4gKCBwb2ludC5kaXN0YW5jZVRv
U3F1YXJlZCggdGhpcy5jZW50ZXIgKSA8PSAoIHRoaXMucmFkaXVzICogdGhpcy5yYWRpdXMgKSAp
OwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgbWV0YWxuZXNzbWFwOiB7CisgICAgICAgIGRpc3Rh
bmNlVG9Qb2ludDogZnVuY3Rpb24gKCBwb2ludCApIHsKIAotICAgICAgICAgICAgbWV0YWxuZXNz
TWFwOiB7IHZhbHVlOiBudWxsIH0KKyAgICAgICAgICAgIHJldHVybiAoIHBvaW50LmRpc3RhbmNl
VG8oIHRoaXMuY2VudGVyICkgLSB0aGlzLnJhZGl1cyApOwogCiAgICAgICAgIH0sCiAKLSAgICAg
ICAgZ3JhZGllbnRtYXA6IHsKKyAgICAgICAgaW50ZXJzZWN0c1NwaGVyZTogZnVuY3Rpb24gKCBz
cGhlcmUgKSB7CiAKLSAgICAgICAgICAgIGdyYWRpZW50TWFwOiB7IHZhbHVlOiBudWxsIH0KKyAg
ICAgICAgICAgIHZhciByYWRpdXNTdW0gPSB0aGlzLnJhZGl1cyArIHNwaGVyZS5yYWRpdXM7CisK
KyAgICAgICAgICAgIHJldHVybiBzcGhlcmUuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKCB0aGlz
LmNlbnRlciApIDw9ICggcmFkaXVzU3VtICogcmFkaXVzU3VtICk7CiAKICAgICAgICAgfSwKIAot
ICAgICAgICBmb2c6IHsKKyAgICAgICAgaW50ZXJzZWN0c0JveDogZnVuY3Rpb24gKCBib3ggKSB7
CiAKLSAgICAgICAgICAgIGZvZ0RlbnNpdHk6IHsgdmFsdWU6IDAuMDAwMjUgfSwKLSAgICAgICAg
ICAgIGZvZ05lYXI6IHsgdmFsdWU6IDEgfSwKLSAgICAgICAgICAgIGZvZ0ZhcjogeyB2YWx1ZTog
MjAwMCB9LAotICAgICAgICAgICAgZm9nQ29sb3I6IHsgdmFsdWU6IG5ldyBDb2xvciggMHhmZmZm
ZmYgKSB9CisgICAgICAgICAgICByZXR1cm4gYm94LmludGVyc2VjdHNTcGhlcmUoIHRoaXMgKTsK
IAogICAgICAgICB9LAogCi0gICAgICAgIGxpZ2h0czogeworICAgICAgICBpbnRlcnNlY3RzUGxh
bmU6IGZ1bmN0aW9uICggcGxhbmUgKSB7CiAKLSAgICAgICAgICAgIGFtYmllbnRMaWdodENvbG9y
OiB7IHZhbHVlOiBbXSB9LAorICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKCBwbGFuZS5kaXN0
YW5jZVRvUG9pbnQoIHRoaXMuY2VudGVyICkgKSA8PSB0aGlzLnJhZGl1czsKIAotICAgICAgICAg
ICAgZGlyZWN0aW9uYWxMaWdodHM6IHsgdmFsdWU6IFtdLCBwcm9wZXJ0aWVzOiB7Ci0gICAgICAg
ICAgICAgICAgZGlyZWN0aW9uOiB7fSwKLSAgICAgICAgICAgICAgICBjb2xvcjoge30sCisgICAg
ICAgIH0sCiAKLSAgICAgICAgICAgICAgICBzaGFkb3c6IHt9LAotICAgICAgICAgICAgICAgIHNo
YWRvd0JpYXM6IHt9LAotICAgICAgICAgICAgICAgIHNoYWRvd1JhZGl1czoge30sCi0gICAgICAg
ICAgICAgICAgc2hhZG93TWFwU2l6ZToge30KLSAgICAgICAgICAgIH0gfSwKKyAgICAgICAgY2xh
bXBQb2ludDogZnVuY3Rpb24gKCBwb2ludCwgdGFyZ2V0ICkgewogCi0gICAgICAgICAgICBkaXJl
Y3Rpb25hbFNoYWRvd01hcDogeyB2YWx1ZTogW10gfSwKLSAgICAgICAgICAgIGRpcmVjdGlvbmFs
U2hhZG93TWF0cml4OiB7IHZhbHVlOiBbXSB9LAorICAgICAgICAgICAgdmFyIGRlbHRhTGVuZ3Ro
U3EgPSB0aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCggcG9pbnQgKTsKIAotICAgICAgICAg
ICAgc3BvdExpZ2h0czogeyB2YWx1ZTogW10sIHByb3BlcnRpZXM6IHsKLSAgICAgICAgICAgICAg
ICBjb2xvcjoge30sCi0gICAgICAgICAgICAgICAgcG9zaXRpb246IHt9LAotICAgICAgICAgICAg
ICAgIGRpcmVjdGlvbjoge30sCi0gICAgICAgICAgICAgICAgZGlzdGFuY2U6IHt9LAotICAgICAg
ICAgICAgICAgIGNvbmVDb3M6IHt9LAotICAgICAgICAgICAgICAgIHBlbnVtYnJhQ29zOiB7fSwK
LSAgICAgICAgICAgICAgICBkZWNheToge30sCisgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0g
dW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgc2hhZG93OiB7fSwKLSAgICAgICAgICAg
ICAgICBzaGFkb3dCaWFzOiB7fSwKLSAgICAgICAgICAgICAgICBzaGFkb3dSYWRpdXM6IHt9LAot
ICAgICAgICAgICAgICAgIHNoYWRvd01hcFNpemU6IHt9Ci0gICAgICAgICAgICB9IH0sCisgICAg
ICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuU3BoZXJlOiAuY2xhbXBQb2ludCgpIHRh
cmdldCBpcyBub3cgcmVxdWlyZWQnICk7CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IFZl
Y3RvcjMoKTsKIAotICAgICAgICAgICAgc3BvdFNoYWRvd01hcDogeyB2YWx1ZTogW10gfSwKLSAg
ICAgICAgICAgIHNwb3RTaGFkb3dNYXRyaXg6IHsgdmFsdWU6IFtdIH0sCisgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIHBvaW50TGlnaHRzOiB7IHZhbHVlOiBbXSwgcHJvcGVydGllczogewot
ICAgICAgICAgICAgICAgIGNvbG9yOiB7fSwKLSAgICAgICAgICAgICAgICBwb3NpdGlvbjoge30s
Ci0gICAgICAgICAgICAgICAgZGVjYXk6IHt9LAotICAgICAgICAgICAgICAgIGRpc3RhbmNlOiB7
fSwKKyAgICAgICAgICAgIHRhcmdldC5jb3B5KCBwb2ludCApOwogCi0gICAgICAgICAgICAgICAg
c2hhZG93OiB7fSwKLSAgICAgICAgICAgICAgICBzaGFkb3dCaWFzOiB7fSwKLSAgICAgICAgICAg
ICAgICBzaGFkb3dSYWRpdXM6IHt9LAotICAgICAgICAgICAgICAgIHNoYWRvd01hcFNpemU6IHt9
LAotICAgICAgICAgICAgICAgIHNoYWRvd0NhbWVyYU5lYXI6IHt9LAotICAgICAgICAgICAgICAg
IHNoYWRvd0NhbWVyYUZhcjoge30KLSAgICAgICAgICAgIH0gfSwKKyAgICAgICAgICAgIGlmICgg
ZGVsdGFMZW5ndGhTcSA+ICggdGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cyApICkgewogCi0gICAg
ICAgICAgICBwb2ludFNoYWRvd01hcDogeyB2YWx1ZTogW10gfSwKLSAgICAgICAgICAgIHBvaW50
U2hhZG93TWF0cml4OiB7IHZhbHVlOiBbXSB9LAorICAgICAgICAgICAgICAgIHRhcmdldC5zdWIo
IHRoaXMuY2VudGVyICkubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAgdGFyZ2V0Lm11bHRp
cGx5U2NhbGFyKCB0aGlzLnJhZGl1cyApLmFkZCggdGhpcy5jZW50ZXIgKTsKIAotICAgICAgICAg
ICAgaGVtaXNwaGVyZUxpZ2h0czogeyB2YWx1ZTogW10sIHByb3BlcnRpZXM6IHsKLSAgICAgICAg
ICAgICAgICBkaXJlY3Rpb246IHt9LAotICAgICAgICAgICAgICAgIHNreUNvbG9yOiB7fSwKLSAg
ICAgICAgICAgICAgICBncm91bmRDb2xvcjoge30KLSAgICAgICAgICAgIH0gfSwKKyAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgLy8gVE9ETyAoYWJlbG5hdGlvbik6IFJlY3RBcmVhTGlnaHQg
QlJERiBkYXRhIG5lZWRzIHRvIGJlIG1vdmVkIGZyb20gZXhhbXBsZSB0byBtYWluIHNyYwotICAg
ICAgICAgICAgcmVjdEFyZWFMaWdodHM6IHsgdmFsdWU6IFtdLCBwcm9wZXJ0aWVzOiB7Ci0gICAg
ICAgICAgICAgICAgY29sb3I6IHt9LAotICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7fSwKLSAg
ICAgICAgICAgICAgICB3aWR0aDoge30sCi0gICAgICAgICAgICAgICAgaGVpZ2h0OiB7fQotICAg
ICAgICAgICAgfSB9CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0OwogCiAgICAgICAgIH0sCiAK
LSAgICAgICAgcG9pbnRzOiB7CisgICAgICAgIGdldEJvdW5kaW5nQm94OiBmdW5jdGlvbiAoIHRh
cmdldCApIHsKIAotICAgICAgICAgICAgZGlmZnVzZTogeyB2YWx1ZTogbmV3IENvbG9yKCAweGVl
ZWVlZSApIH0sCi0gICAgICAgICAgICBvcGFjaXR5OiB7IHZhbHVlOiAxLjAgfSwKLSAgICAgICAg
ICAgIHNpemU6IHsgdmFsdWU6IDEuMCB9LAotICAgICAgICAgICAgc2NhbGU6IHsgdmFsdWU6IDEu
MCB9LAotICAgICAgICAgICAgbWFwOiB7IHZhbHVlOiBudWxsIH0sCi0gICAgICAgICAgICB1dlRy
YW5zZm9ybTogeyB2YWx1ZTogbmV3IE1hdHJpeDMoKSB9CisgICAgICAgICAgICBpZiAoIHRhcmdl
dCA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb25zb2xl
Lndhcm4oICdUSFJFRS5TcGhlcmU6IC5nZXRCb3VuZGluZ0JveCgpIHRhcmdldCBpcyBub3cgcmVx
dWlyZWQnICk7CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IEJveDMoKTsKIAotICAgIH07
CisgICAgICAgICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0
cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21y
ZG9vYi5jb20vCi0gICAgICogQGF1dGhvciBtaWthZWwgZW10aW5nZXIgLyBodHRwOi8vZ29tby5z
ZS8KLSAgICAgKi8KKyAgICAgICAgICAgIHRhcmdldC5zZXQoIHRoaXMuY2VudGVyLCB0aGlzLmNl
bnRlciApOworICAgICAgICAgICAgdGFyZ2V0LmV4cGFuZEJ5U2NhbGFyKCB0aGlzLnJhZGl1cyAp
OwogCi0gICAgdmFyIFNoYWRlckxpYiA9IHsKKyAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7CiAK
LSAgICAgICAgYmFzaWM6IHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgdW5pZm9ybXM6IFVu
aWZvcm1zVXRpbHMubWVyZ2UoIFsKLSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5jb21tb24s
Ci0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuc3BlY3VsYXJtYXAsCi0gICAgICAgICAgICAg
ICAgVW5pZm9ybXNMaWIuZW52bWFwLAotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmFvbWFw
LAotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmxpZ2h0bWFwLAotICAgICAgICAgICAgICAg
IFVuaWZvcm1zTGliLmZvZwotICAgICAgICAgICAgXSApLAorICAgICAgICBhcHBseU1hdHJpeDQ6
IGZ1bmN0aW9uICggbWF0cml4ICkgewogCi0gICAgICAgICAgICB2ZXJ0ZXhTaGFkZXI6IFNoYWRl
ckNodW5rLm1lc2hiYXNpY192ZXJ0LAotICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXI6IFNoYWRl
ckNodW5rLm1lc2hiYXNpY19mcmFnCisgICAgICAgICAgICB0aGlzLmNlbnRlci5hcHBseU1hdHJp
eDQoIG1hdHJpeCApOworICAgICAgICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLnJhZGl1cyAqIG1h
dHJpeC5nZXRNYXhTY2FsZU9uQXhpcygpOworCisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAog
ICAgICAgICB9LAogCi0gICAgICAgIGxhbWJlcnQ6IHsKKyAgICAgICAgdHJhbnNsYXRlOiBmdW5j
dGlvbiAoIG9mZnNldCApIHsKIAotICAgICAgICAgICAgdW5pZm9ybXM6IFVuaWZvcm1zVXRpbHMu
bWVyZ2UoIFsKLSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5jb21tb24sCi0gICAgICAgICAg
ICAgICAgVW5pZm9ybXNMaWIuc3BlY3VsYXJtYXAsCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNM
aWIuZW52bWFwLAotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmFvbWFwLAotICAgICAgICAg
ICAgICAgIFVuaWZvcm1zTGliLmxpZ2h0bWFwLAotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGli
LmVtaXNzaXZlbWFwLAotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmZvZywKLSAgICAgICAg
ICAgICAgICBVbmlmb3Jtc0xpYi5saWdodHMsCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBlbWlzc2l2ZTogeyB2YWx1ZTogbmV3IENvbG9yKCAweDAwMDAwMCApIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBdICksCisgICAgICAgICAgICB0aGlzLmNlbnRl
ci5hZGQoIG9mZnNldCApOwogCi0gICAgICAgICAgICB2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5r
Lm1lc2hsYW1iZXJ0X3ZlcnQsCi0gICAgICAgICAgICBmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1
bmsubWVzaGxhbWJlcnRfZnJhZworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAg
fSwKIAotICAgICAgICBwaG9uZzogeworICAgICAgICBlcXVhbHM6IGZ1bmN0aW9uICggc3BoZXJl
ICkgewogCi0gICAgICAgICAgICB1bmlmb3JtczogVW5pZm9ybXNVdGlscy5tZXJnZSggWwotICAg
ICAgICAgICAgICAgIFVuaWZvcm1zTGliLmNvbW1vbiwKLSAgICAgICAgICAgICAgICBVbmlmb3Jt
c0xpYi5zcGVjdWxhcm1hcCwKLSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5lbnZtYXAsCi0g
ICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuYW9tYXAsCi0gICAgICAgICAgICAgICAgVW5pZm9y
bXNMaWIubGlnaHRtYXAsCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuZW1pc3NpdmVtYXAs
Ci0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuYnVtcG1hcCwKLSAgICAgICAgICAgICAgICBV
bmlmb3Jtc0xpYi5ub3JtYWxtYXAsCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuZGlzcGxh
Y2VtZW50bWFwLAotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmdyYWRpZW50bWFwLAotICAg
ICAgICAgICAgICAgIFVuaWZvcm1zTGliLmZvZywKLSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xp
Yi5saWdodHMsCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBlbWlzc2l2
ZTogeyB2YWx1ZTogbmV3IENvbG9yKCAweDAwMDAwMCApIH0sCi0gICAgICAgICAgICAgICAgICAg
IHNwZWN1bGFyOiB7IHZhbHVlOiBuZXcgQ29sb3IoIDB4MTExMTExICkgfSwKLSAgICAgICAgICAg
ICAgICAgICAgc2hpbmluZXNzOiB7IHZhbHVlOiAzMCB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgXSApLAorICAgICAgICAgICAgcmV0dXJuIHNwaGVyZS5jZW50ZXIuZXF1YWxzKCB0
aGlzLmNlbnRlciApICYmICggc3BoZXJlLnJhZGl1cyA9PT0gdGhpcy5yYWRpdXMgKTsKIAotICAg
ICAgICAgICAgdmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNocGhvbmdfdmVydCwKLSAgICAg
ICAgICAgIGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNocGhvbmdfZnJhZworICAgICAg
ICB9CiAKLSAgICAgICAgfSwKKyAgICB9ICk7CiAKLSAgICAgICAgc3RhbmRhcmQ6IHsKKyAgICAv
KioKKyAgICAgKiBAYXV0aG9yIGJob3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvCisgICAgICovCiAK
LSAgICAgICAgICAgIHVuaWZvcm1zOiBVbmlmb3Jtc1V0aWxzLm1lcmdlKCBbCi0gICAgICAgICAg
ICAgICAgVW5pZm9ybXNMaWIuY29tbW9uLAotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmVu
dm1hcCwKLSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5hb21hcCwKLSAgICAgICAgICAgICAg
ICBVbmlmb3Jtc0xpYi5saWdodG1hcCwKLSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5lbWlz
c2l2ZW1hcCwKLSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5idW1wbWFwLAotICAgICAgICAg
ICAgICAgIFVuaWZvcm1zTGliLm5vcm1hbG1hcCwKLSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xp
Yi5kaXNwbGFjZW1lbnRtYXAsCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIucm91Z2huZXNz
bWFwLAotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLm1ldGFsbmVzc21hcCwKLSAgICAgICAg
ICAgICAgICBVbmlmb3Jtc0xpYi5mb2csCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIubGln
aHRzLAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pc3NpdmU6IHsg
dmFsdWU6IG5ldyBDb2xvciggMHgwMDAwMDAgKSB9LAotICAgICAgICAgICAgICAgICAgICByb3Vn
aG5lc3M6IHsgdmFsdWU6IDAuNSB9LAotICAgICAgICAgICAgICAgICAgICBtZXRhbG5lc3M6IHsg
dmFsdWU6IDAuNSB9LAotICAgICAgICAgICAgICAgICAgICBlbnZNYXBJbnRlbnNpdHk6IHsgdmFs
dWU6IDEgfSAvLyB0ZW1wb3JhcnkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBdICks
CisgICAgZnVuY3Rpb24gUmF5KCBvcmlnaW4sIGRpcmVjdGlvbiApIHsKIAotICAgICAgICAgICAg
dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNocGh5c2ljYWxfdmVydCwKLSAgICAgICAgICAg
IGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNocGh5c2ljYWxfZnJhZworICAgICAgICB0
aGlzLm9yaWdpbiA9ICggb3JpZ2luICE9PSB1bmRlZmluZWQgKSA/IG9yaWdpbiA6IG5ldyBWZWN0
b3IzKCk7CisgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gKCBkaXJlY3Rpb24gIT09IHVuZGVmaW5l
ZCApID8gZGlyZWN0aW9uIDogbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICB9LAorICAgIH0KIAot
ICAgICAgICBwb2ludHM6IHsKKyAgICBPYmplY3QuYXNzaWduKCBSYXkucHJvdG90eXBlLCB7CiAK
LSAgICAgICAgICAgIHVuaWZvcm1zOiBVbmlmb3Jtc1V0aWxzLm1lcmdlKCBbCi0gICAgICAgICAg
ICAgICAgVW5pZm9ybXNMaWIucG9pbnRzLAotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmZv
ZwotICAgICAgICAgICAgXSApLAorICAgICAgICBzZXQ6IGZ1bmN0aW9uICggb3JpZ2luLCBkaXJl
Y3Rpb24gKSB7CiAKLSAgICAgICAgICAgIHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsucG9pbnRz
X3ZlcnQsCi0gICAgICAgICAgICBmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsucG9pbnRzX2Zy
YWcKKyAgICAgICAgICAgIHRoaXMub3JpZ2luLmNvcHkoIG9yaWdpbiApOworICAgICAgICAgICAg
dGhpcy5kaXJlY3Rpb24uY29weSggZGlyZWN0aW9uICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIGRhc2hlZDogeworICAgICAgICB9LAogCi0gICAg
ICAgICAgICB1bmlmb3JtczogVW5pZm9ybXNVdGlscy5tZXJnZSggWwotICAgICAgICAgICAgICAg
IFVuaWZvcm1zTGliLmNvbW1vbiwKLSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5mb2csCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzY2FsZTogeyB2YWx1ZTogMSB9
LAotICAgICAgICAgICAgICAgICAgICBkYXNoU2l6ZTogeyB2YWx1ZTogMSB9LAotICAgICAgICAg
ICAgICAgICAgICB0b3RhbFNpemU6IHsgdmFsdWU6IDIgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIF0gKSwKKyAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAg
ICAgdmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5saW5lZGFzaGVkX3ZlcnQsCi0gICAgICAgICAg
ICBmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsubGluZWRhc2hlZF9mcmFnCisgICAgICAgICAg
ICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7CiAKICAgICAgICAg
fSwKIAotICAgICAgICBkZXB0aDogeworICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHJheSApIHsK
IAotICAgICAgICAgICAgdW5pZm9ybXM6IFVuaWZvcm1zVXRpbHMubWVyZ2UoIFsKLSAgICAgICAg
ICAgICAgICBVbmlmb3Jtc0xpYi5jb21tb24sCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIu
ZGlzcGxhY2VtZW50bWFwCi0gICAgICAgICAgICBdICksCisgICAgICAgICAgICB0aGlzLm9yaWdp
bi5jb3B5KCByYXkub3JpZ2luICk7CisgICAgICAgICAgICB0aGlzLmRpcmVjdGlvbi5jb3B5KCBy
YXkuZGlyZWN0aW9uICk7CiAKLSAgICAgICAgICAgIHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsu
ZGVwdGhfdmVydCwKLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5kZXB0
aF9mcmFnCisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAg
IG5vcm1hbDogeworICAgICAgICBhdDogZnVuY3Rpb24gKCB0LCB0YXJnZXQgKSB7CiAKLSAgICAg
ICAgICAgIHVuaWZvcm1zOiBVbmlmb3Jtc1V0aWxzLm1lcmdlKCBbCi0gICAgICAgICAgICAgICAg
VW5pZm9ybXNMaWIuY29tbW9uLAotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmJ1bXBtYXAs
Ci0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIubm9ybWFsbWFwLAotICAgICAgICAgICAgICAg
IFVuaWZvcm1zTGliLmRpc3BsYWNlbWVudG1hcCwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIG9wYWNpdHk6IHsgdmFsdWU6IDEuMCB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgXSApLAorICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVmaW5lZCAp
IHsKIAotICAgICAgICAgICAgdmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5ub3JtYWxfdmVydCwK
LSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5ub3JtYWxfZnJhZworICAg
ICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlJheTogLmF0KCkgdGFyZ2V0IGlzIG5v
dyByZXF1aXJlZCcgKTsKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMygpOwog
Ci0gICAgICAgIH0sCisgICAgICAgICAgICB9CiAKLSAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotICAgICAgICAvLyAgQ3ViZSBtYXAgc2hhZGVyCi0gICAgICAgICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
ICovCisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmNvcHkoIHRoaXMuZGlyZWN0aW9uICkubXVs
dGlwbHlTY2FsYXIoIHQgKS5hZGQoIHRoaXMub3JpZ2luICk7CiAKLSAgICAgICAgY3ViZTogewor
ICAgICAgICB9LAogCi0gICAgICAgICAgICB1bmlmb3JtczogewotICAgICAgICAgICAgICAgIHRD
dWJlOiB7IHZhbHVlOiBudWxsIH0sCi0gICAgICAgICAgICAgICAgdEZsaXA6IHsgdmFsdWU6IC0g
MSB9LAotICAgICAgICAgICAgICAgIG9wYWNpdHk6IHsgdmFsdWU6IDEuMCB9Ci0gICAgICAgICAg
ICB9LAorICAgICAgICBsb29rQXQ6IGZ1bmN0aW9uICggdiApIHsKIAotICAgICAgICAgICAgdmVy
dGV4U2hhZGVyOiBTaGFkZXJDaHVuay5jdWJlX3ZlcnQsCi0gICAgICAgICAgICBmcmFnbWVudFNo
YWRlcjogU2hhZGVyQ2h1bmsuY3ViZV9mcmFnCisgICAgICAgICAgICB0aGlzLmRpcmVjdGlvbi5j
b3B5KCB2ICkuc3ViKCB0aGlzLm9yaWdpbiApLm5vcm1hbGl6ZSgpOworCisgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIGVxdWlyZWN0OiB7CisgICAgICAg
IHJlY2FzdDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICB1bmlmb3JtczogewotICAgICAg
ICAgICAgICAgIHRFcXVpcmVjdDogeyB2YWx1ZTogbnVsbCB9LAotICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAgICAgIHZlcnRleFNo
YWRlcjogU2hhZGVyQ2h1bmsuZXF1aXJlY3RfdmVydCwKLSAgICAgICAgICAgIGZyYWdtZW50U2hh
ZGVyOiBTaGFkZXJDaHVuay5lcXVpcmVjdF9mcmFnCisgICAgICAgICAgICByZXR1cm4gZnVuY3Rp
b24gcmVjYXN0KCB0ICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgdGhpcy5vcmln
aW4uY29weSggdGhpcy5hdCggdCwgdjEgKSApOwogCi0gICAgICAgIGRpc3RhbmNlUkdCQTogewor
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICB1bmlmb3JtczogVW5p
Zm9ybXNVdGlscy5tZXJnZSggWwotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmNvbW1vbiwK
LSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXAsCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VQb3NpdGlvbjogeyB2YWx1ZTog
bmV3IFZlY3RvcjMoKSB9LAotICAgICAgICAgICAgICAgICAgICBuZWFyRGlzdGFuY2U6IHsgdmFs
dWU6IDEgfSwKLSAgICAgICAgICAgICAgICAgICAgZmFyRGlzdGFuY2U6IHsgdmFsdWU6IDEwMDAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF0gKSwKKyAgICAgICAgICAgIH07CiAK
LSAgICAgICAgICAgIHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsuZGlzdGFuY2VSR0JBX3ZlcnQs
Ci0gICAgICAgICAgICBmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsuZGlzdGFuY2VSR0JBX2Zy
YWcKKyAgICAgICAgfSgpLAogCi0gICAgICAgIH0sCisgICAgICAgIGNsb3Nlc3RQb2ludFRvUG9p
bnQ6IGZ1bmN0aW9uICggcG9pbnQsIHRhcmdldCApIHsKIAotICAgICAgICBzaGFkb3c6IHsKKyAg
ICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgIHVu
aWZvcm1zOiBVbmlmb3Jtc1V0aWxzLm1lcmdlKCBbCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNM
aWIubGlnaHRzLAotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmZvZywKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB7IHZhbHVlOiBuZXcgQ29sb3IoIDB4
MDAwMDAgKSB9LAotICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiB7IHZhbHVlOiAxLjAgfQot
ICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdICksCisgICAgICAgICAgICAgICAgY29u
c29sZS53YXJuKCAnVEhSRUUuUmF5OiAuY2xvc2VzdFBvaW50VG9Qb2ludCgpIHRhcmdldCBpcyBu
b3cgcmVxdWlyZWQnICk7CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsK
IAotICAgICAgICAgICAgdmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5zaGFkb3dfdmVydCwKLSAg
ICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5zaGFkb3dfZnJhZworICAgICAg
ICAgICAgfQogCi0gICAgICAgIH0KKyAgICAgICAgICAgIHRhcmdldC5zdWJWZWN0b3JzKCBwb2lu
dCwgdGhpcy5vcmlnaW4gKTsKIAotICAgIH07CisgICAgICAgICAgICB2YXIgZGlyZWN0aW9uRGlz
dGFuY2UgPSB0YXJnZXQuZG90KCB0aGlzLmRpcmVjdGlvbiApOwogCi0gICAgU2hhZGVyTGliLnBo
eXNpY2FsID0geworICAgICAgICAgICAgaWYgKCBkaXJlY3Rpb25EaXN0YW5jZSA8IDAgKSB7CiAK
LSAgICAgICAgdW5pZm9ybXM6IFVuaWZvcm1zVXRpbHMubWVyZ2UoIFsKLSAgICAgICAgICAgIFNo
YWRlckxpYi5zdGFuZGFyZC51bmlmb3JtcywKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBjbGVhckNvYXQ6IHsgdmFsdWU6IDAgfSwKLSAgICAgICAgICAgICAgICBjbGVhckNvYXRSb3Vn
aG5lc3M6IHsgdmFsdWU6IDAgfQotICAgICAgICAgICAgfQotICAgICAgICBdICksCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRhcmdldC5jb3B5KCB0aGlzLm9yaWdpbiApOwogCi0gICAgICAgIHZl
cnRleFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaHBoeXNpY2FsX3ZlcnQsCi0gICAgICAgIGZyYWdt
ZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNocGh5c2ljYWxfZnJhZworICAgICAgICAgICAgfQog
Ci0gICAgfTsKKyAgICAgICAgICAgIHJldHVybiB0YXJnZXQuY29weSggdGhpcy5kaXJlY3Rpb24g
KS5tdWx0aXBseVNjYWxhciggZGlyZWN0aW9uRGlzdGFuY2UgKS5hZGQoIHRoaXMub3JpZ2luICk7
CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwot
ICAgICAqLworICAgICAgICB9LAogCi0gICAgZnVuY3Rpb24gV2ViR0xBbmltYXRpb24oKSB7Cisg
ICAgICAgIGRpc3RhbmNlVG9Qb2ludDogZnVuY3Rpb24gKCBwb2ludCApIHsKIAotICAgICAgICB2
YXIgY29udGV4dCA9IG51bGw7Ci0gICAgICAgIHZhciBpc0FuaW1hdGluZyA9IGZhbHNlOwotICAg
ICAgICB2YXIgYW5pbWF0aW9uTG9vcCA9IG51bGw7CisgICAgICAgICAgICByZXR1cm4gTWF0aC5z
cXJ0KCB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KCBwb2ludCApICk7CiAKLSAgICAgICAgZnVuY3Rp
b24gb25BbmltYXRpb25GcmFtZSggdGltZSwgZnJhbWUgKSB7CisgICAgICAgIH0sCiAKLSAgICAg
ICAgICAgIGlmICggaXNBbmltYXRpbmcgPT09IGZhbHNlICkgcmV0dXJuOworICAgICAgICBkaXN0
YW5jZVNxVG9Qb2ludDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICBhbmltYXRpb25Mb29w
KCB0aW1lLCBmcmFtZSApOworICAgICAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTsKIAot
ICAgICAgICAgICAgY29udGV4dC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIG9uQW5pbWF0aW9uRnJh
bWUgKTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBkaXN0YW5jZVNxVG9Qb2ludCggcG9p
bnQgKSB7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBkaXJlY3Rpb25EaXN0YW5j
ZSA9IHYxLnN1YlZlY3RvcnMoIHBvaW50LCB0aGlzLm9yaWdpbiApLmRvdCggdGhpcy5kaXJlY3Rp
b24gKTsKIAotICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIC8vIHBvaW50IGJlaGlu
ZCB0aGUgcmF5CiAKLSAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCBkaXJlY3Rpb25EaXN0YW5jZSA8IDAgKSB7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoIGlzQW5pbWF0aW5nID09PSB0cnVlICkgcmV0dXJuOwotICAgICAgICAgICAgICAgIGlmICgg
YW5pbWF0aW9uTG9vcCA9PT0gbnVsbCApIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMub3JpZ2luLmRpc3RhbmNlVG9TcXVhcmVkKCBwb2ludCApOwogCi0gICAgICAgICAg
ICAgICAgY29udGV4dC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIG9uQW5pbWF0aW9uRnJhbWUgKTsK
KyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpc0FuaW1hdGluZyA9IHRydWU7
CisgICAgICAgICAgICAgICAgdjEuY29weSggdGhpcy5kaXJlY3Rpb24gKS5tdWx0aXBseVNjYWxh
ciggZGlyZWN0aW9uRGlzdGFuY2UgKS5hZGQoIHRoaXMub3JpZ2luICk7CiAKLSAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAgICAgcmV0dXJuIHYxLmRpc3RhbmNlVG9TcXVhcmVkKCBwb2ludCAp
OwogCi0gICAgICAgICAgICBzdG9wOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB9OwogCi0g
ICAgICAgICAgICAgICAgaXNBbmltYXRpbmcgPSBmYWxzZTsKKyAgICAgICAgfSgpLAogCi0gICAg
ICAgICAgICB9LAorICAgICAgICBkaXN0YW5jZVNxVG9TZWdtZW50OiBmdW5jdGlvbiAoKSB7CiAK
LSAgICAgICAgICAgIHNldEFuaW1hdGlvbkxvb3A6IGZ1bmN0aW9uICggY2FsbGJhY2sgKSB7Cisg
ICAgICAgICAgICB2YXIgc2VnQ2VudGVyID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZh
ciBzZWdEaXIgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdmFyIGRpZmYgPSBuZXcgVmVj
dG9yMygpOwogCi0gICAgICAgICAgICAgICAgYW5pbWF0aW9uTG9vcCA9IGNhbGxiYWNrOworICAg
ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGRpc3RhbmNlU3FUb1NlZ21lbnQoIHYwLCB2MSwgb3B0
aW9uYWxQb2ludE9uUmF5LCBvcHRpb25hbFBvaW50T25TZWdtZW50ICkgewogCi0gICAgICAgICAg
ICB9LAorICAgICAgICAgICAgICAgIC8vIGZyb20gaHR0cDovL3d3dy5nZW9tZXRyaWN0b29scy5j
b20vR1RFbmdpbmUvSW5jbHVkZS9NYXRoZW1hdGljcy9HdGVEaXN0UmF5U2VnbWVudC5oCisgICAg
ICAgICAgICAgICAgLy8gSXQgcmV0dXJucyB0aGUgbWluIGRpc3RhbmNlIGJldHdlZW4gdGhlIHJh
eSBhbmQgdGhlIHNlZ21lbnQKKyAgICAgICAgICAgICAgICAvLyBkZWZpbmVkIGJ5IHYwIGFuZCB2
MQorICAgICAgICAgICAgICAgIC8vIEl0IGNhbiBhbHNvIHNldCB0d28gb3B0aW9uYWwgdGFyZ2V0
cyA6CisgICAgICAgICAgICAgICAgLy8gLSBUaGUgY2xvc2VzdCBwb2ludCBvbiB0aGUgcmF5Cisg
ICAgICAgICAgICAgICAgLy8gLSBUaGUgY2xvc2VzdCBwb2ludCBvbiB0aGUgc2VnbWVudAogCi0g
ICAgICAgICAgICBzZXRDb250ZXh0OiBmdW5jdGlvbiAoIHZhbHVlICkgeworICAgICAgICAgICAg
ICAgIHNlZ0NlbnRlci5jb3B5KCB2MCApLmFkZCggdjEgKS5tdWx0aXBseVNjYWxhciggMC41ICk7
CisgICAgICAgICAgICAgICAgc2VnRGlyLmNvcHkoIHYxICkuc3ViKCB2MCApLm5vcm1hbGl6ZSgp
OworICAgICAgICAgICAgICAgIGRpZmYuY29weSggdGhpcy5vcmlnaW4gKS5zdWIoIHNlZ0NlbnRl
ciApOwogCi0gICAgICAgICAgICAgICAgY29udGV4dCA9IHZhbHVlOworICAgICAgICAgICAgICAg
IHZhciBzZWdFeHRlbnQgPSB2MC5kaXN0YW5jZVRvKCB2MSApICogMC41OworICAgICAgICAgICAg
ICAgIHZhciBhMDEgPSAtIHRoaXMuZGlyZWN0aW9uLmRvdCggc2VnRGlyICk7CisgICAgICAgICAg
ICAgICAgdmFyIGIwID0gZGlmZi5kb3QoIHRoaXMuZGlyZWN0aW9uICk7CisgICAgICAgICAgICAg
ICAgdmFyIGIxID0gLSBkaWZmLmRvdCggc2VnRGlyICk7CisgICAgICAgICAgICAgICAgdmFyIGMg
PSBkaWZmLmxlbmd0aFNxKCk7CisgICAgICAgICAgICAgICAgdmFyIGRldCA9IE1hdGguYWJzKCAx
IC0gYTAxICogYTAxICk7CisgICAgICAgICAgICAgICAgdmFyIHMwLCBzMSwgc3FyRGlzdCwgZXh0
RGV0OwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCBkZXQgPiAwICkgewog
Ci0gICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSByYXkgYW5kIHNlZ21lbnQg
YXJlIG5vdCBwYXJhbGxlbC4KIAotICAgIH0KKyAgICAgICAgICAgICAgICAgICAgczAgPSBhMDEg
KiBiMSAtIGIwOworICAgICAgICAgICAgICAgICAgICBzMSA9IGEwMSAqIGIwIC0gYjE7CisgICAg
ICAgICAgICAgICAgICAgIGV4dERldCA9IHNlZ0V4dGVudCAqIGRldDsKIAotICAgIC8qKgotICAg
ICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAgICovCisgICAgICAg
ICAgICAgICAgICAgIGlmICggczAgPj0gMCApIHsKIAotICAgIGZ1bmN0aW9uIFdlYkdMQXR0cmli
dXRlcyggZ2wgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMxID49IC0gZXh0RGV0
ICkgewogCi0gICAgICAgIHZhciBidWZmZXJzID0gbmV3IFdlYWtNYXAoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHMxIDw9IGV4dERldCApIHsKIAotICAgICAgICBmdW5jdGlv
biBjcmVhdGVCdWZmZXIoIGF0dHJpYnV0ZSwgYnVmZmVyVHlwZSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gcmVnaW9uIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gTWluaW11bSBhdCBpbnRlcmlvciBwb2ludHMgb2YgcmF5IGFuZCBzZWdtZW50Lgog
Ci0gICAgICAgICAgICB2YXIgYXJyYXkgPSBhdHRyaWJ1dGUuYXJyYXk7Ci0gICAgICAgICAgICB2
YXIgdXNhZ2UgPSBhdHRyaWJ1dGUuZHluYW1pYyA/IGdsLkRZTkFNSUNfRFJBVyA6IGdsLlNUQVRJ
Q19EUkFXOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW52RGV0ID0gMSAv
IGRldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgKj0gaW52RGV0OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSAqPSBpbnZEZXQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNxckRpc3QgPSBzMCAqICggczAgKyBhMDEgKiBzMSArIDIgKiBi
MCApICsgczEgKiAoIGEwMSAqIHMwICsgczEgKyAyICogYjEgKSArIGM7CiAKLSAgICAgICAgICAg
IHZhciBidWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKCBidWZmZXJUeXBlLCBi
dWZmZXIgKTsKLSAgICAgICAgICAgIGdsLmJ1ZmZlckRhdGEoIGJ1ZmZlclR5cGUsIGFycmF5LCB1
c2FnZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpb24gMQogCi0g
ICAgICAgICAgICBhdHRyaWJ1dGUub25VcGxvYWRDYWxsYmFjaygpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzMSA9IHNlZ0V4dGVudDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgczAgPSBNYXRoLm1heCggMCwgLSAoIGEwMSAqIHMxICsgYjAgKSApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzcXJEaXN0ID0gLSBzMCAqIHMwICsgczEgKiAoIHMx
ICsgMiAqIGIxICkgKyBjOwogCi0gICAgICAgICAgICB2YXIgdHlwZSA9IGdsLkZMT0FUOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCBhcnJheSBpbnN0
YW5jZW9mIEZsb2F0MzJBcnJheSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAKLSAgICAgICAgICAgICAgICB0eXBlID0gZ2wuRkxPQVQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gcmVnaW9uIDUKIAotICAgICAgICAgICAgfSBlbHNlIGlmICggYXJyYXkgaW5z
dGFuY2VvZiBGbG9hdDY0QXJyYXkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEg
PSAtIHNlZ0V4dGVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IE1hdGgubWF4
KCAwLCAtICggYTAxICogczEgKyBiMCApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3FyRGlzdCA9IC0gczAgKiBzMCArIHMxICogKCBzMSArIDIgKiBiMSApICsgYzsKIAotICAgICAg
ICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMQXR0cmlidXRlczogVW5zdXBwb3J0
ZWQgZGF0YSBidWZmZXIgZm9ybWF0OiBGbG9hdDY0QXJyYXkuJyApOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCBhcnJheSBpbnN0YW5jZW9mIFVp
bnQxNkFycmF5ICkgeworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAg
ICAgICAgdHlwZSA9IGdsLlVOU0lHTkVEX1NIT1JUOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBzMSA8PSAtIGV4dERldCApIHsKIAotICAgICAgICAgICAgfSBlbHNlIGlmICggYXJyYXkg
aW5zdGFuY2VvZiBJbnQxNkFycmF5ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHJlZ2lvbiA0CiAKLSAgICAgICAgICAgICAgICB0eXBlID0gZ2wuU0hPUlQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgczAgPSBNYXRoLm1heCggMCwgLSAoIC0gYTAxICogc2VnRXh0ZW50
ICsgYjAgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gKCBzMCA+IDAgKSA/
IC0gc2VnRXh0ZW50IDogTWF0aC5taW4oIE1hdGgubWF4KCAtIHNlZ0V4dGVudCwgLSBiMSApLCBz
ZWdFeHRlbnQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcXJEaXN0ID0gLSBzMCAq
IHMwICsgczEgKiAoIHMxICsgMiAqIGIxICkgKyBjOwogCi0gICAgICAgICAgICB9IGVsc2UgaWYg
KCBhcnJheSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5ICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggczEgPD0gZXh0RGV0ICkgewogCi0gICAgICAgICAgICAgICAgdHlwZSA9
IGdsLlVOU0lHTkVEX0lOVDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpb24g
MwogCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCBhcnJheSBpbnN0YW5jZW9mIEludDMyQXJyYXkg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSAwOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHMxID0gTWF0aC5taW4oIE1hdGgubWF4KCAtIHNlZ0V4dGVudCwgLSBiMSAp
LCBzZWdFeHRlbnQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcXJEaXN0ID0gczEg
KiAoIHMxICsgMiAqIGIxICkgKyBjOwogCi0gICAgICAgICAgICAgICAgdHlwZSA9IGdsLklOVDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIGFycmF5IGluc3RhbmNlb2YgSW50OEFycmF5ICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHJlZ2lvbiAyCiAKLSAgICAgICAgICAgICAgICB0eXBlID0gZ2wuQllURTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IE1hdGgubWF4KCAwLCAtICggYTAxICogc2Vn
RXh0ZW50ICsgYjAgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gKCBzMCA+
IDAgKSA/IHNlZ0V4dGVudCA6IE1hdGgubWluKCBNYXRoLm1heCggLSBzZWdFeHRlbnQsIC0gYjEg
KSwgc2VnRXh0ZW50ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FyRGlzdCA9IC0g
czAgKiBzMCArIHMxICogKCBzMSArIDIgKiBiMSApICsgYzsKIAotICAgICAgICAgICAgfSBlbHNl
IGlmICggYXJyYXkgaW5zdGFuY2VvZiBVaW50OEFycmF5ICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgdHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7CisgICAg
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyOiBidWZm
ZXIsCi0gICAgICAgICAgICAgICAgdHlwZTogdHlwZSwKLSAgICAgICAgICAgICAgICBieXRlc1Bl
ckVsZW1lbnQ6IGFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULAotICAgICAgICAgICAgICAgIHZlcnNp
b246IGF0dHJpYnV0ZS52ZXJzaW9uCi0gICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAg
ICAvLyBSYXkgYW5kIHNlZ21lbnQgYXJlIHBhcmFsbGVsLgogCi0gICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgczEgPSAoIGEwMSA+IDAgKSA/IC0gc2VnRXh0ZW50IDogc2VnRXh0ZW50Owor
ICAgICAgICAgICAgICAgICAgICBzMCA9IE1hdGgubWF4KCAwLCAtICggYTAxICogczEgKyBiMCAp
ICk7CisgICAgICAgICAgICAgICAgICAgIHNxckRpc3QgPSAtIHMwICogczAgKyBzMSAqICggczEg
KyAyICogYjEgKSArIGM7CiAKLSAgICAgICAgZnVuY3Rpb24gdXBkYXRlQnVmZmVyKCBidWZmZXIs
IGF0dHJpYnV0ZSwgYnVmZmVyVHlwZSApIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIHZhciBhcnJheSA9IGF0dHJpYnV0ZS5hcnJheTsKLSAgICAgICAgICAgIHZhciB1cGRhdGVS
YW5nZSA9IGF0dHJpYnV0ZS51cGRhdGVSYW5nZTsKKyAgICAgICAgICAgICAgICBpZiAoIG9wdGlv
bmFsUG9pbnRPblJheSApIHsKIAotICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlciggYnVmZmVyVHlw
ZSwgYnVmZmVyICk7CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsUG9pbnRPblJheS5jb3B5
KCB0aGlzLmRpcmVjdGlvbiApLm11bHRpcGx5U2NhbGFyKCBzMCApLmFkZCggdGhpcy5vcmlnaW4g
KTsKIAotICAgICAgICAgICAgaWYgKCBhdHRyaWJ1dGUuZHluYW1pYyA9PT0gZmFsc2UgKSB7Cisg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgZ2wuYnVmZmVyRGF0YSggYnVmZmVy
VHlwZSwgYXJyYXksIGdsLlNUQVRJQ19EUkFXICk7CisgICAgICAgICAgICAgICAgaWYgKCBvcHRp
b25hbFBvaW50T25TZWdtZW50ICkgewogCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCB1cGRhdGVS
YW5nZS5jb3VudCA9PT0gLSAxICkgeworICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFBvaW50
T25TZWdtZW50LmNvcHkoIHNlZ0RpciApLm11bHRpcGx5U2NhbGFyKCBzMSApLmFkZCggc2VnQ2Vu
dGVyICk7CiAKLSAgICAgICAgICAgICAgICAvLyBOb3QgdXNpbmcgdXBkYXRlIHJhbmdlcworICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoIGJ1ZmZl
clR5cGUsIDAsIGFycmF5ICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNxckRpc3Q7CiAKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIHVwZGF0ZVJhbmdlLmNvdW50ID09PSAwICkgeworICAgICAg
ICAgICAgfTsKIAotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTE9i
amVjdHMudXBkYXRlQnVmZmVyOiBkeW5hbWljIFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSBtYXJrZWQg
YXMgbmVlZHNVcGRhdGUgYnV0IHVwZGF0ZVJhbmdlLmNvdW50IGlzIDAsIGVuc3VyZSB5b3UgYXJl
IHVzaW5nIHNldCBtZXRob2RzIG9yIHVwZGF0aW5nIG1hbnVhbGx5LicgKTsKKyAgICAgICAgfSgp
LAogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICBpbnRlcnNlY3RTcGhlcmU6IGZ1bmN0
aW9uICgpIHsKIAotICAgICAgICAgICAgICAgIGdsLmJ1ZmZlclN1YkRhdGEoIGJ1ZmZlclR5cGUs
IHVwZGF0ZVJhbmdlLm9mZnNldCAqIGFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULAotICAgICAgICAg
ICAgICAgICAgICBhcnJheS5zdWJhcnJheSggdXBkYXRlUmFuZ2Uub2Zmc2V0LCB1cGRhdGVSYW5n
ZS5vZmZzZXQgKyB1cGRhdGVSYW5nZS5jb3VudCApICk7CisgICAgICAgICAgICB2YXIgdjEgPSBu
ZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICAgICAgdXBkYXRlUmFuZ2UuY291bnQgPSAtIDE7
IC8vIHJlc2V0IHJhbmdlCisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gaW50ZXJzZWN0U3Bo
ZXJlKCBzcGhlcmUsIHRhcmdldCApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHYxLnN1YlZlY3RvcnMoIHNwaGVyZS5jZW50ZXIsIHRoaXMub3JpZ2luICk7CisgICAgICAgICAg
ICAgICAgdmFyIHRjYSA9IHYxLmRvdCggdGhpcy5kaXJlY3Rpb24gKTsKKyAgICAgICAgICAgICAg
ICB2YXIgZDIgPSB2MS5kb3QoIHYxICkgLSB0Y2EgKiB0Y2E7CisgICAgICAgICAgICAgICAgdmFy
IHJhZGl1czIgPSBzcGhlcmUucmFkaXVzICogc3BoZXJlLnJhZGl1czsKIAotICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKCBkMiA+IHJhZGl1czIgKSByZXR1cm4gbnVsbDsKIAotICAgICAg
ICAvLworICAgICAgICAgICAgICAgIHZhciB0aGMgPSBNYXRoLnNxcnQoIHJhZGl1czIgLSBkMiAp
OwogCi0gICAgICAgIGZ1bmN0aW9uIGdldCggYXR0cmlidXRlICkgeworICAgICAgICAgICAgICAg
IC8vIHQwID0gZmlyc3QgaW50ZXJzZWN0IHBvaW50IC0gZW50cmFuY2Ugb24gZnJvbnQgb2Ygc3Bo
ZXJlCisgICAgICAgICAgICAgICAgdmFyIHQwID0gdGNhIC0gdGhjOwogCi0gICAgICAgICAgICBp
ZiAoIGF0dHJpYnV0ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlICkgYXR0cmlidXRlID0g
YXR0cmlidXRlLmRhdGE7CisgICAgICAgICAgICAgICAgLy8gdDEgPSBzZWNvbmQgaW50ZXJzZWN0
IHBvaW50IC0gZXhpdCBwb2ludCBvbiBiYWNrIG9mIHNwaGVyZQorICAgICAgICAgICAgICAgIHZh
ciB0MSA9IHRjYSArIHRoYzsKIAotICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcnMuZ2V0KCBhdHRy
aWJ1dGUgKTsKKyAgICAgICAgICAgICAgICAvLyB0ZXN0IHRvIHNlZSBpZiBib3RoIHQwIGFuZCB0
MSBhcmUgYmVoaW5kIHRoZSByYXkgLSBpZiBzbywgcmV0dXJuIG51bGwKKyAgICAgICAgICAgICAg
ICBpZiAoIHQwIDwgMCAmJiB0MSA8IDAgKSByZXR1cm4gbnVsbDsKIAotICAgICAgICB9CisgICAg
ICAgICAgICAgICAgLy8gdGVzdCB0byBzZWUgaWYgdDAgaXMgYmVoaW5kIHRoZSByYXk6CisgICAg
ICAgICAgICAgICAgLy8gaWYgaXQgaXMsIHRoZSByYXkgaXMgaW5zaWRlIHRoZSBzcGhlcmUsIHNv
IHJldHVybiB0aGUgc2Vjb25kIGV4aXQgcG9pbnQgc2NhbGVkIGJ5IHQxLAorICAgICAgICAgICAg
ICAgIC8vIGluIG9yZGVyIHRvIGFsd2F5cyByZXR1cm4gYW4gaW50ZXJzZWN0IHBvaW50IHRoYXQg
aXMgaW4gZnJvbnQgb2YgdGhlIHJheS4KKyAgICAgICAgICAgICAgICBpZiAoIHQwIDwgMCApIHJl
dHVybiB0aGlzLmF0KCB0MSwgdGFyZ2V0ICk7CiAKLSAgICAgICAgZnVuY3Rpb24gcmVtb3ZlKCBh
dHRyaWJ1dGUgKSB7CisgICAgICAgICAgICAgICAgLy8gZWxzZSB0MCBpcyBpbiBmcm9udCBvZiB0
aGUgcmF5LCBzbyByZXR1cm4gdGhlIGZpcnN0IGNvbGxpc2lvbiBwb2ludCBzY2FsZWQgYnkgdDAK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hdCggdDAsIHRhcmdldCApOwogCi0gICAgICAg
ICAgICBpZiAoIGF0dHJpYnV0ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlICkgYXR0cmli
dXRlID0gYXR0cmlidXRlLmRhdGE7CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICB2YXIg
ZGF0YSA9IGJ1ZmZlcnMuZ2V0KCBhdHRyaWJ1dGUgKTsKKyAgICAgICAgfSgpLAogCi0gICAgICAg
ICAgICBpZiAoIGRhdGEgKSB7CisgICAgICAgIGludGVyc2VjdHNTcGhlcmU6IGZ1bmN0aW9uICgg
c3BoZXJlICkgewogCi0gICAgICAgICAgICAgICAgZ2wuZGVsZXRlQnVmZmVyKCBkYXRhLmJ1ZmZl
ciApOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQoIHNwaGVyZS5j
ZW50ZXIgKSA8PSAoIHNwaGVyZS5yYWRpdXMgKiBzcGhlcmUucmFkaXVzICk7CiAKLSAgICAgICAg
ICAgICAgICBidWZmZXJzLmRlbGV0ZSggYXR0cmlidXRlICk7CisgICAgICAgIH0sCiAKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgZGlzdGFuY2VUb1BsYW5lOiBmdW5jdGlvbiAoIHBsYW5lICkgewog
Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHZhciBkZW5vbWluYXRvciA9IHBsYW5lLm5vcm1hbC5k
b3QoIHRoaXMuZGlyZWN0aW9uICk7CiAKLSAgICAgICAgZnVuY3Rpb24gdXBkYXRlKCBhdHRyaWJ1
dGUsIGJ1ZmZlclR5cGUgKSB7CisgICAgICAgICAgICBpZiAoIGRlbm9taW5hdG9yID09PSAwICkg
ewogCi0gICAgICAgICAgICBpZiAoIGF0dHJpYnV0ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmli
dXRlICkgYXR0cmlidXRlID0gYXR0cmlidXRlLmRhdGE7CisgICAgICAgICAgICAgICAgLy8gbGlu
ZSBpcyBjb3BsYW5hciwgcmV0dXJuIG9yaWdpbgorICAgICAgICAgICAgICAgIGlmICggcGxhbmUu
ZGlzdGFuY2VUb1BvaW50KCB0aGlzLm9yaWdpbiApID09PSAwICkgewogCi0gICAgICAgICAgICB2
YXIgZGF0YSA9IGJ1ZmZlcnMuZ2V0KCBhdHRyaWJ1dGUgKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICAgICAgICAgIGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICkgeworICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGJ1ZmZlcnMuc2V0KCBhdHRyaWJ1dGUs
IGNyZWF0ZUJ1ZmZlciggYXR0cmlidXRlLCBidWZmZXJUeXBlICkgKTsKKyAgICAgICAgICAgICAg
ICAvLyBOdWxsIGlzIHByZWZlcmFibGUgdG8gdW5kZWZpbmVkIHNpbmNlIHVuZGVmaW5lZCBtZWFu
cy4uLi4gaXQgaXMgdW5kZWZpbmVkCiAKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIGRhdGEudmVy
c2lvbiA8IGF0dHJpYnV0ZS52ZXJzaW9uICkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxs
OwogCi0gICAgICAgICAgICAgICAgdXBkYXRlQnVmZmVyKCBkYXRhLmJ1ZmZlciwgYXR0cmlidXRl
LCBidWZmZXJUeXBlICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBkYXRhLnZl
cnNpb24gPSBhdHRyaWJ1dGUudmVyc2lvbjsKKyAgICAgICAgICAgIHZhciB0ID0gLSAoIHRoaXMu
b3JpZ2luLmRvdCggcGxhbmUubm9ybWFsICkgKyBwbGFuZS5jb25zdGFudCApIC8gZGVub21pbmF0
b3I7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFJldHVybiBpZiB0aGUgcmF5IG5l
dmVyIGludGVyc2VjdHMgdGhlIHBsYW5lCiAKLSAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHQgPj0gMCA/IHQgOiBudWxsOwogCi0gICAgICAgIHJldHVybiB7CisgICAgICAgIH0sCiAKLSAg
ICAgICAgICAgIGdldDogZ2V0LAotICAgICAgICAgICAgcmVtb3ZlOiByZW1vdmUsCi0gICAgICAg
ICAgICB1cGRhdGU6IHVwZGF0ZQorICAgICAgICBpbnRlcnNlY3RQbGFuZTogZnVuY3Rpb24gKCBw
bGFuZSwgdGFyZ2V0ICkgewogCi0gICAgICAgIH07CisgICAgICAgICAgICB2YXIgdCA9IHRoaXMu
ZGlzdGFuY2VUb1BsYW5lKCBwbGFuZSApOwogCi0gICAgfQorICAgICAgICAgICAgaWYgKCB0ID09
PSBudWxsICkgewogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJk
b29iLmNvbS8KLSAgICAgKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20v
V2VzdExhbmdsZXkKLSAgICAgKiBAYXV0aG9yIGJob3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvCi0g
ICAgICovCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAKLSAgICBmdW5jdGlvbiBFdWxl
ciggeCwgeSwgeiwgb3JkZXIgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5feCA9
IHggfHwgMDsKLSAgICAgICAgdGhpcy5feSA9IHkgfHwgMDsKLSAgICAgICAgdGhpcy5feiA9IHog
fHwgMDsKLSAgICAgICAgdGhpcy5fb3JkZXIgPSBvcmRlciB8fCBFdWxlci5EZWZhdWx0T3JkZXI7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5hdCggdCwgdGFyZ2V0ICk7CiAKLSAgICB9CisgICAg
ICAgIH0sCiAKLSAgICBFdWxlci5Sb3RhdGlvbk9yZGVycyA9IFsgJ1hZWicsICdZWlgnLCAnWlhZ
JywgJ1haWScsICdZWFonLCAnWllYJyBdOworICAgICAgICBpbnRlcnNlY3RzUGxhbmU6IGZ1bmN0
aW9uICggcGxhbmUgKSB7CiAKLSAgICBFdWxlci5EZWZhdWx0T3JkZXIgPSAnWFlaJzsKKyAgICAg
ICAgICAgIC8vIGNoZWNrIGlmIHRoZSByYXkgbGllcyBvbiB0aGUgcGxhbmUgZmlyc3QKIAotICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBFdWxlci5wcm90b3R5cGUsIHsKKyAgICAgICAgICAg
IHZhciBkaXN0VG9Qb2ludCA9IHBsYW5lLmRpc3RhbmNlVG9Qb2ludCggdGhpcy5vcmlnaW4gKTsK
IAotICAgICAgICB4OiB7CisgICAgICAgICAgICBpZiAoIGRpc3RUb1BvaW50ID09PSAwICkgewog
Ci0gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl94OworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICB9LAorICAgICAgICAgICAgdmFyIGRlbm9taW5hdG9yID0gcGxhbmUubm9y
bWFsLmRvdCggdGhpcy5kaXJlY3Rpb24gKTsKIAotICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAo
IHZhbHVlICkgeworICAgICAgICAgICAgaWYgKCBkZW5vbWluYXRvciAqIGRpc3RUb1BvaW50IDwg
MCApIHsKIAotICAgICAgICAgICAgICAgIHRoaXMuX3ggPSB2YWx1ZTsKLSAgICAgICAgICAgICAg
ICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgICAgICAgICAgfQogCi0gICAgICAgIH0sCisgICAgICAgICAgICAvLyByYXkgb3JpZ2lu
IGlzIGJlaGluZCB0aGUgcGxhbmUgKGFuZCBpcyBwb2ludGluZyBiZWhpbmQgaXQpCiAKLSAgICAg
ICAgeTogeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl95
OworICAgICAgICBpbnRlcnNlY3RCb3g6IGZ1bmN0aW9uICggYm94LCB0YXJnZXQgKSB7CiAKLSAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICB2YXIgdG1pbiwgdG1heCwgdHltaW4sIHR5bWF4LCB0
em1pbiwgdHptYXg7CiAKLSAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKyAg
ICAgICAgICAgIHZhciBpbnZkaXJ4ID0gMSAvIHRoaXMuZGlyZWN0aW9uLngsCisgICAgICAgICAg
ICAgICAgaW52ZGlyeSA9IDEgLyB0aGlzLmRpcmVjdGlvbi55LAorICAgICAgICAgICAgICAgIGlu
dmRpcnogPSAxIC8gdGhpcy5kaXJlY3Rpb24uejsKIAotICAgICAgICAgICAgICAgIHRoaXMuX3kg
PSB2YWx1ZTsKLSAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTsKKyAgICAg
ICAgICAgIHZhciBvcmlnaW4gPSB0aGlzLm9yaWdpbjsKIAotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKCBpbnZkaXJ4ID49IDAgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAg
ICB0bWluID0gKCBib3gubWluLnggLSBvcmlnaW4ueCApICogaW52ZGlyeDsKKyAgICAgICAgICAg
ICAgICB0bWF4ID0gKCBib3gubWF4LnggLSBvcmlnaW4ueCApICogaW52ZGlyeDsKIAotICAgICAg
ICB6OiB7CisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgICAgICB0bWluID0gKCBib3gubWF4LnggLSBvcmlnaW4ueCApICog
aW52ZGlyeDsKKyAgICAgICAgICAgICAgICB0bWF4ID0gKCBib3gubWluLnggLSBvcmlnaW4ueCAp
ICogaW52ZGlyeDsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl96OworICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICB9LAorICAgICAgICAgICAgaWYgKCBpbnZkaXJ5ID49IDAgKSB7
CiAKLSAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAg
ICB0eW1pbiA9ICggYm94Lm1pbi55IC0gb3JpZ2luLnkgKSAqIGludmRpcnk7CisgICAgICAgICAg
ICAgICAgdHltYXggPSAoIGJveC5tYXgueSAtIG9yaWdpbi55ICkgKiBpbnZkaXJ5OwogCi0gICAg
ICAgICAgICAgICAgdGhpcy5feiA9IHZhbHVlOwotICAgICAgICAgICAgICAgIHRoaXMub25DaGFu
Z2VDYWxsYmFjaygpOworICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHR5bWluID0gKCBib3gubWF4LnkgLSBvcmlnaW4ueSApICogaW52ZGlyeTsK
KyAgICAgICAgICAgICAgICB0eW1heCA9ICggYm94Lm1pbi55IC0gb3JpZ2luLnkgKSAqIGludmRp
cnk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIH0KIAotICAgICAgICBvcmRlcjogeworICAg
ICAgICAgICAgaWYgKCAoIHRtaW4gPiB0eW1heCApIHx8ICggdHltaW4gPiB0bWF4ICkgKSByZXR1
cm4gbnVsbDsKIAotICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAv
LyBUaGVzZSBsaW5lcyBhbHNvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0bWluIG9yIHRtYXggaXMg
TmFOCisgICAgICAgICAgICAvLyAocmVzdWx0IG9mIDAgKiBJbmZpbml0eSkuIHggIT09IHggcmV0
dXJucyB0cnVlIGlmIHggaXMgTmFOCiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3Jk
ZXI7CisgICAgICAgICAgICBpZiAoIHR5bWluID4gdG1pbiB8fCB0bWluICE9PSB0bWluICkgdG1p
biA9IHR5bWluOwogCi0gICAgICAgICAgICB9LAorICAgICAgICAgICAgaWYgKCB0eW1heCA8IHRt
YXggfHwgdG1heCAhPT0gdG1heCApIHRtYXggPSB0eW1heDsKIAotICAgICAgICAgICAgc2V0OiBm
dW5jdGlvbiAoIHZhbHVlICkgeworICAgICAgICAgICAgaWYgKCBpbnZkaXJ6ID49IDAgKSB7CiAK
LSAgICAgICAgICAgICAgICB0aGlzLl9vcmRlciA9IHZhbHVlOwotICAgICAgICAgICAgICAgIHRo
aXMub25DaGFuZ2VDYWxsYmFjaygpOworICAgICAgICAgICAgICAgIHR6bWluID0gKCBib3gubWlu
LnogLSBvcmlnaW4ueiApICogaW52ZGlyejsKKyAgICAgICAgICAgICAgICB0em1heCA9ICggYm94
Lm1heC56IC0gb3JpZ2luLnogKSAqIGludmRpcno7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSB7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIHR6bWluID0gKCBib3gu
bWF4LnogLSBvcmlnaW4ueiApICogaW52ZGlyejsKKyAgICAgICAgICAgICAgICB0em1heCA9ICgg
Ym94Lm1pbi56IC0gb3JpZ2luLnogKSAqIGludmRpcno7CiAKLSAgICB9ICk7CisgICAgICAgICAg
ICB9CiAKLSAgICBPYmplY3QuYXNzaWduKCBFdWxlci5wcm90b3R5cGUsIHsKKyAgICAgICAgICAg
IGlmICggKCB0bWluID4gdHptYXggKSB8fCAoIHR6bWluID4gdG1heCApICkgcmV0dXJuIG51bGw7
CiAKLSAgICAgICAgaXNFdWxlcjogdHJ1ZSwKKyAgICAgICAgICAgIGlmICggdHptaW4gPiB0bWlu
IHx8IHRtaW4gIT09IHRtaW4gKSB0bWluID0gdHptaW47CiAKLSAgICAgICAgc2V0OiBmdW5jdGlv
biAoIHgsIHksIHosIG9yZGVyICkgeworICAgICAgICAgICAgaWYgKCB0em1heCA8IHRtYXggfHwg
dG1heCAhPT0gdG1heCApIHRtYXggPSB0em1heDsKIAotICAgICAgICAgICAgdGhpcy5feCA9IHg7
Ci0gICAgICAgICAgICB0aGlzLl95ID0geTsKLSAgICAgICAgICAgIHRoaXMuX3ogPSB6OwotICAg
ICAgICAgICAgdGhpcy5fb3JkZXIgPSBvcmRlciB8fCB0aGlzLl9vcmRlcjsKKyAgICAgICAgICAg
IC8vcmV0dXJuIHBvaW50IGNsb3Nlc3QgdG8gdGhlIHJheSAocG9zaXRpdmUgc2lkZSkKIAotICAg
ICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7CisgICAgICAgICAgICBpZiAoIHRtYXgg
PCAwICkgcmV0dXJuIG51bGw7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuYXQoIHRtaW4gPj0gMCA/IHRtaW4gOiB0bWF4LCB0YXJnZXQgKTsKIAog
ICAgICAgICB9LAogCi0gICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAg
IHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvciggdGhpcy5feCwgdGhpcy5feSwgdGhpcy5feiwg
dGhpcy5fb3JkZXIgKTsKKyAgICAgICAgaW50ZXJzZWN0c0JveDogKCBmdW5jdGlvbiAoKSB7CiAK
LSAgICAgICAgfSwKKyAgICAgICAgICAgIHZhciB2ID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAg
ICBjb3B5OiBmdW5jdGlvbiAoIGV1bGVyICkgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
IGludGVyc2VjdHNCb3goIGJveCApIHsKIAotICAgICAgICAgICAgdGhpcy5feCA9IGV1bGVyLl94
OwotICAgICAgICAgICAgdGhpcy5feSA9IGV1bGVyLl95OwotICAgICAgICAgICAgdGhpcy5feiA9
IGV1bGVyLl96OwotICAgICAgICAgICAgdGhpcy5fb3JkZXIgPSBldWxlci5fb3JkZXI7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJzZWN0Qm94KCBib3gsIHYgKSAhPT0gbnVsbDsK
IAotICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7CisgICAgICAgICAgICB9Owog
Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSApKCksCiAKLSAgICAgICAgfSwK
KyAgICAgICAgaW50ZXJzZWN0VHJpYW5nbGU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICBzZXRG
cm9tUm90YXRpb25NYXRyaXg6IGZ1bmN0aW9uICggbSwgb3JkZXIsIHVwZGF0ZSApIHsKKyAgICAg
ICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldCBvcmlnaW4sIGVkZ2VzLCBhbmQgbm9ybWFsLgor
ICAgICAgICAgICAgdmFyIGRpZmYgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdmFyIGVk
Z2UxID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciBlZGdlMiA9IG5ldyBWZWN0b3Iz
KCk7CisgICAgICAgICAgICB2YXIgbm9ybWFsID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAg
ICAgdmFyIGNsYW1wID0gX01hdGguY2xhbXA7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24g
aW50ZXJzZWN0VHJpYW5nbGUoIGEsIGIsIGMsIGJhY2tmYWNlQ3VsbGluZywgdGFyZ2V0ICkgewog
Ci0gICAgICAgICAgICAvLyBhc3N1bWVzIHRoZSB1cHBlciAzeDMgb2YgbSBpcyBhIHB1cmUgcm90
YXRpb24gbWF0cml4IChpLmUsIHVuc2NhbGVkKQorICAgICAgICAgICAgICAgIC8vIGZyb20gaHR0
cDovL3d3dy5nZW9tZXRyaWN0b29scy5jb20vR1RFbmdpbmUvSW5jbHVkZS9NYXRoZW1hdGljcy9H
dGVJbnRyUmF5M1RyaWFuZ2xlMy5oCiAKLSAgICAgICAgICAgIHZhciB0ZSA9IG0uZWxlbWVudHM7
Ci0gICAgICAgICAgICB2YXIgbTExID0gdGVbIDAgXSwgbTEyID0gdGVbIDQgXSwgbTEzID0gdGVb
IDggXTsKLSAgICAgICAgICAgIHZhciBtMjEgPSB0ZVsgMSBdLCBtMjIgPSB0ZVsgNSBdLCBtMjMg
PSB0ZVsgOSBdOwotICAgICAgICAgICAgdmFyIG0zMSA9IHRlWyAyIF0sIG0zMiA9IHRlWyA2IF0s
IG0zMyA9IHRlWyAxMCBdOworICAgICAgICAgICAgICAgIGVkZ2UxLnN1YlZlY3RvcnMoIGIsIGEg
KTsKKyAgICAgICAgICAgICAgICBlZGdlMi5zdWJWZWN0b3JzKCBjLCBhICk7CisgICAgICAgICAg
ICAgICAgbm9ybWFsLmNyb3NzVmVjdG9ycyggZWRnZTEsIGVkZ2UyICk7CiAKLSAgICAgICAgICAg
IG9yZGVyID0gb3JkZXIgfHwgdGhpcy5fb3JkZXI7CisgICAgICAgICAgICAgICAgLy8gU29sdmUg
USArIHQqRCA9IGIxKkUxICsgYjIqRTIgKFEgPSBrRGlmZiwgRCA9IHJheSBkaXJlY3Rpb24sCisg
ICAgICAgICAgICAgICAgLy8gRTEgPSBrRWRnZTEsIEUyID0ga0VkZ2UyLCBOID0gQ3Jvc3MoRTEs
RTIpKSBieQorICAgICAgICAgICAgICAgIC8vICAgfERvdChELE4pfCpiMSA9IHNpZ24oRG90KEQs
TikpKkRvdChELENyb3NzKFEsRTIpKQorICAgICAgICAgICAgICAgIC8vICAgfERvdChELE4pfCpi
MiA9IHNpZ24oRG90KEQsTikpKkRvdChELENyb3NzKEUxLFEpKQorICAgICAgICAgICAgICAgIC8v
ICAgfERvdChELE4pfCp0ID0gLXNpZ24oRG90KEQsTikpKkRvdChRLE4pCisgICAgICAgICAgICAg
ICAgdmFyIERkTiA9IHRoaXMuZGlyZWN0aW9uLmRvdCggbm9ybWFsICk7CisgICAgICAgICAgICAg
ICAgdmFyIHNpZ247CiAKLSAgICAgICAgICAgIGlmICggb3JkZXIgPT09ICdYWVonICkgeworICAg
ICAgICAgICAgICAgIGlmICggRGROID4gMCApIHsKIAotICAgICAgICAgICAgICAgIHRoaXMuX3kg
PSBNYXRoLmFzaW4oIGNsYW1wKCBtMTMsIC0gMSwgMSApICk7CisgICAgICAgICAgICAgICAgICAg
IGlmICggYmFja2ZhY2VDdWxsaW5nICkgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgICAg
IHNpZ24gPSAxOwogCi0gICAgICAgICAgICAgICAgaWYgKCBNYXRoLmFicyggbTEzICkgPCAwLjk5
OTk5ICkgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIERkTiA8IDAgKSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5feCA9IE1hdGguYXRhbjIoIC0gbTIzLCBtMzMgKTsKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5feiA9IE1hdGguYXRhbjIoIC0gbTEyLCBtMTEgKTsKKyAgICAg
ICAgICAgICAgICAgICAgc2lnbiA9IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgRGROID0gLSBE
ZE47CiAKICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgICAgIHRo
aXMuX3ggPSBNYXRoLmF0YW4yKCBtMzIsIG0yMiApOwotICAgICAgICAgICAgICAgICAgICB0aGlz
Ll96ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAKICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIG9yZGVyID09PSAnWVhaJyApIHsKKyAg
ICAgICAgICAgICAgICBkaWZmLnN1YlZlY3RvcnMoIHRoaXMub3JpZ2luLCBhICk7CisgICAgICAg
ICAgICAgICAgdmFyIERkUXhFMiA9IHNpZ24gKiB0aGlzLmRpcmVjdGlvbi5kb3QoIGVkZ2UyLmNy
b3NzVmVjdG9ycyggZGlmZiwgZWRnZTIgKSApOwogCi0gICAgICAgICAgICAgICAgdGhpcy5feCA9
IE1hdGguYXNpbiggLSBjbGFtcCggbTIzLCAtIDEsIDEgKSApOworICAgICAgICAgICAgICAgIC8v
IGIxIDwgMCwgbm8gaW50ZXJzZWN0aW9uCisgICAgICAgICAgICAgICAgaWYgKCBEZFF4RTIgPCAw
ICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCBNYXRoLmFicyggbTIzICkgPCAwLjk5OTk5ICkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKIAotICAgICAgICAgICAgICAgICAg
ICB0aGlzLl95ID0gTWF0aC5hdGFuMiggbTEzLCBtMzMgKTsKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy5feiA9IE1hdGguYXRhbjIoIG0yMSwgbTIyICk7CisgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgRGRFMXhRID0gc2ln
biAqIHRoaXMuZGlyZWN0aW9uLmRvdCggZWRnZTEuY3Jvc3MoIGRpZmYgKSApOwogCi0gICAgICAg
ICAgICAgICAgICAgIHRoaXMuX3kgPSBNYXRoLmF0YW4yKCAtIG0zMSwgbTExICk7Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMuX3ogPSAwOworICAgICAgICAgICAgICAgIC8vIGIyIDwgMCwgbm8g
aW50ZXJzZWN0aW9uCisgICAgICAgICAgICAgICAgaWYgKCBEZEUxeFEgPCAwICkgeworCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogCiAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICB9IGVsc2UgaWYgKCBvcmRlciA9PT0gJ1pYWScgKSB7CisgICAgICAgICAgICAgICAg
Ly8gYjErYjIgPiAxLCBubyBpbnRlcnNlY3Rpb24KKyAgICAgICAgICAgICAgICBpZiAoIERkUXhF
MiArIERkRTF4USA+IERkTiApIHsKIAotICAgICAgICAgICAgICAgIHRoaXMuX3ggPSBNYXRoLmFz
aW4oIGNsYW1wKCBtMzIsIC0gMSwgMSApICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBu
dWxsOwogCi0gICAgICAgICAgICAgICAgaWYgKCBNYXRoLmFicyggbTMyICkgPCAwLjk5OTk5ICkg
eworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB0aGlzLl95ID0gTWF0
aC5hdGFuMiggLSBtMzEsIG0zMyApOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl96ID0gTWF0
aC5hdGFuMiggLSBtMTIsIG0yMiApOworICAgICAgICAgICAgICAgIC8vIExpbmUgaW50ZXJzZWN0
cyB0cmlhbmdsZSwgY2hlY2sgaWYgcmF5IGRvZXMuCisgICAgICAgICAgICAgICAgdmFyIFFkTiA9
IC0gc2lnbiAqIGRpZmYuZG90KCBub3JtYWwgKTsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgLy8gdCA8IDAsIG5vIGludGVyc2VjdGlvbgorICAgICAgICAgICAg
ICAgIGlmICggUWROIDwgMCApIHsKIAotICAgICAgICAgICAgICAgICAgICB0aGlzLl95ID0gMDsK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy5feiA9IE1hdGguYXRhbjIoIG0yMSwgbTExICk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogCiAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICB9IGVsc2UgaWYgKCBvcmRlciA9PT0gJ1pZWCcgKSB7CisgICAgICAgICAgICAg
ICAgLy8gUmF5IGludGVyc2VjdHMgdHJpYW5nbGUuCisgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuYXQoIFFkTiAvIERkTiwgdGFyZ2V0ICk7CiAKLSAgICAgICAgICAgICAgICB0aGlzLl95ID0g
TWF0aC5hc2luKCAtIGNsYW1wKCBtMzEsIC0gMSwgMSApICk7CisgICAgICAgICAgICB9OwogCi0g
ICAgICAgICAgICAgICAgaWYgKCBNYXRoLmFicyggbTMxICkgPCAwLjk5OTk5ICkgeworICAgICAg
ICB9KCksCiAKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IE1hdGguYXRhbjIoIG0zMiwg
bTMzICk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ogPSBNYXRoLmF0YW4yKCBtMjEsIG0x
MSApOworICAgICAgICBhcHBseU1hdHJpeDQ6IGZ1bmN0aW9uICggbWF0cml4NCApIHsKIAotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ogPSBNYXRoLmF0YW4yKCAtIG0xMiwgbTIyICk7
CisgICAgICAgICAgICB0aGlzLm9yaWdpbi5hcHBseU1hdHJpeDQoIG1hdHJpeDQgKTsKKyAgICAg
ICAgICAgIHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbiggbWF0cml4NCApOwogCi0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoIG9yZGVyID09PSAnWVpYJyApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAg
ICAgICAgIHRoaXMuX3ogPSBNYXRoLmFzaW4oIGNsYW1wKCBtMjEsIC0gMSwgMSApICk7CisgICAg
ICAgIGVxdWFsczogZnVuY3Rpb24gKCByYXkgKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIE1h
dGguYWJzKCBtMjEgKSA8IDAuOTk5OTkgKSB7CisgICAgICAgICAgICByZXR1cm4gcmF5Lm9yaWdp
bi5lcXVhbHMoIHRoaXMub3JpZ2luICkgJiYgcmF5LmRpcmVjdGlvbi5lcXVhbHMoIHRoaXMuZGly
ZWN0aW9uICk7CiAKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IE1hdGguYXRhbjIoIC0g
bTIzLCBtMjIgKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5feSA9IE1hdGguYXRhbjIoIC0g
bTMxLCBtMTEgKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICB9
ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IDA7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3kgPSBNYXRoLmF0YW4yKCBtMTMsIG0zMyApOworICAgIC8qKgorICAgICAqIEBh
dXRob3IgYmhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW8KKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAv
IGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqLwogCi0gICAgICAgICAgICAgICAgfQorICAgIGZ1
bmN0aW9uIFRyaWFuZ2xlKCBhLCBiLCBjICkgewogCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCBv
cmRlciA9PT0gJ1haWScgKSB7CisgICAgICAgIHRoaXMuYSA9ICggYSAhPT0gdW5kZWZpbmVkICkg
PyBhIDogbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgdGhpcy5iID0gKCBiICE9PSB1bmRlZmluZWQg
KSA/IGIgOiBuZXcgVmVjdG9yMygpOworICAgICAgICB0aGlzLmMgPSAoIGMgIT09IHVuZGVmaW5l
ZCApID8gYyA6IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAgICAgICAgICB0aGlzLl96ID0gTWF0
aC5hc2luKCAtIGNsYW1wKCBtMTIsIC0gMSwgMSApICk7CisgICAgfQogCi0gICAgICAgICAgICAg
ICAgaWYgKCBNYXRoLmFicyggbTEyICkgPCAwLjk5OTk5ICkgeworICAgIE9iamVjdC5hc3NpZ24o
IFRyaWFuZ2xlLCB7CiAKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IE1hdGguYXRhbjIo
IG0zMiwgbTIyICk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3kgPSBNYXRoLmF0YW4yKCBt
MTMsIG0xMSApOworICAgICAgICBnZXROb3JtYWw6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgdjAgPSBuZXcgVmVjdG9yMygpOwogCi0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3ggPSBNYXRoLmF0YW4yKCAtIG0yMywgbTMzICk7Ci0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3kgPSAwOworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uIGdldE5vcm1hbCggYSwgYiwgYywgdGFyZ2V0ICkgewogCi0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlRy
aWFuZ2xlOiAuZ2V0Tm9ybWFsKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCcgKTsKKyAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAgICAgICAgIGNv
bnNvbGUud2FybiggJ1RIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZ2l2ZW4g
dW5zdXBwb3J0ZWQgb3JkZXI6ICcgKyBvcmRlciApOworICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRhcmdldC5zdWJWZWN0b3JzKCBjLCBiICk7Cisg
ICAgICAgICAgICAgICAgdjAuc3ViVmVjdG9ycyggYSwgYiApOworICAgICAgICAgICAgICAgIHRh
cmdldC5jcm9zcyggdjAgKTsKIAotICAgICAgICAgICAgdGhpcy5fb3JkZXIgPSBvcmRlcjsKKyAg
ICAgICAgICAgICAgICB2YXIgdGFyZ2V0TGVuZ3RoU3EgPSB0YXJnZXQubGVuZ3RoU3EoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIHRhcmdldExlbmd0aFNxID4gMCApIHsKIAotICAgICAgICAgICAg
aWYgKCB1cGRhdGUgIT09IGZhbHNlICkgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0YXJnZXQubXVsdGlwbHlTY2FsYXIoIDEgLyBNYXRoLnNxcnQo
IHRhcmdldExlbmd0aFNxICkgKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5z
ZXQoIDAsIDAsIDAgKTsKIAotICAgICAgICBzZXRGcm9tUXVhdGVybmlvbjogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXg0
KCk7CisgICAgICAgIH0oKSwKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldEZyb21R
dWF0ZXJuaW9uKCBxLCBvcmRlciwgdXBkYXRlICkgeworICAgICAgICAvLyBzdGF0aWMvaW5zdGFu
Y2UgbWV0aG9kIHRvIGNhbGN1bGF0ZSBiYXJ5Y2VudHJpYyBjb29yZGluYXRlcworICAgICAgICAv
LyBiYXNlZCBvbjogaHR0cDovL3d3dy5ibGFja3Bhd24uY29tL3RleHRzL3BvaW50aW5wb2x5L2Rl
ZmF1bHQuaHRtbAorICAgICAgICBnZXRCYXJ5Y29vcmQ6IGZ1bmN0aW9uICgpIHsKIAotICAgICAg
ICAgICAgICAgIG1hdHJpeC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbiggcSApOworICAgICAg
ICAgICAgdmFyIHYwID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciB2MSA9IG5ldyBW
ZWN0b3IzKCk7CisgICAgICAgICAgICB2YXIgdjIgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCBtYXRyaXgsIG9yZGVy
LCB1cGRhdGUgKTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBnZXRCYXJ5Y29vcmQoIHBv
aW50LCBhLCBiLCBjLCB0YXJnZXQgKSB7CiAKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICAg
ICAgdjAuc3ViVmVjdG9ycyggYywgYSApOworICAgICAgICAgICAgICAgIHYxLnN1YlZlY3RvcnMo
IGIsIGEgKTsKKyAgICAgICAgICAgICAgICB2Mi5zdWJWZWN0b3JzKCBwb2ludCwgYSApOwogCi0g
ICAgICAgIH0oKSwKKyAgICAgICAgICAgICAgICB2YXIgZG90MDAgPSB2MC5kb3QoIHYwICk7Cisg
ICAgICAgICAgICAgICAgdmFyIGRvdDAxID0gdjAuZG90KCB2MSApOworICAgICAgICAgICAgICAg
IHZhciBkb3QwMiA9IHYwLmRvdCggdjIgKTsKKyAgICAgICAgICAgICAgICB2YXIgZG90MTEgPSB2
MS5kb3QoIHYxICk7CisgICAgICAgICAgICAgICAgdmFyIGRvdDEyID0gdjEuZG90KCB2MiApOwog
Ci0gICAgICAgIHNldEZyb21WZWN0b3IzOiBmdW5jdGlvbiAoIHYsIG9yZGVyICkgeworICAgICAg
ICAgICAgICAgIHZhciBkZW5vbSA9ICggZG90MDAgKiBkb3QxMSAtIGRvdDAxICogZG90MDEgKTsK
IAotICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0KCB2LngsIHYueSwgdi56LCBvcmRlciB8fCB0
aGlzLl9vcmRlciApOworICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRlZmluZWQg
KSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhS
RUUuVHJpYW5nbGU6IC5nZXRCYXJ5Y29vcmQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOwor
ICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgIHJl
b3JkZXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8v
IFdBUk5JTkc6IHRoaXMgZGlzY2FyZHMgcmV2b2x1dGlvbiBpbmZvcm1hdGlvbiAtYmhvdXN0b24K
KyAgICAgICAgICAgICAgICAvLyBjb2xsaW5lYXIgb3Igc2luZ3VsYXIgdHJpYW5nbGUKKyAgICAg
ICAgICAgICAgICBpZiAoIGRlbm9tID09PSAwICkgewogCi0gICAgICAgICAgICB2YXIgcSA9IG5l
dyBRdWF0ZXJuaW9uKCk7CisgICAgICAgICAgICAgICAgICAgIC8vIGFyYml0cmFyeSBsb2NhdGlv
biBvdXRzaWRlIG9mIHRyaWFuZ2xlPworICAgICAgICAgICAgICAgICAgICAvLyBub3Qgc3VyZSBp
ZiB0aGlzIGlzIHRoZSBiZXN0IGlkZWEsIG1heWJlIHNob3VsZCBiZSByZXR1cm5pbmcgdW5kZWZp
bmVkCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuc2V0KCAtIDIsIC0gMSwgLSAx
ICk7CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiByZW9yZGVyKCBuZXdPcmRlciApIHsK
KyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBxLnNldEZyb21FdWxlciggdGhp
cyApOworICAgICAgICAgICAgICAgIHZhciBpbnZEZW5vbSA9IDEgLyBkZW5vbTsKKyAgICAgICAg
ICAgICAgICB2YXIgdSA9ICggZG90MTEgKiBkb3QwMiAtIGRvdDAxICogZG90MTIgKSAqIGludkRl
bm9tOworICAgICAgICAgICAgICAgIHZhciB2ID0gKCBkb3QwMCAqIGRvdDEyIC0gZG90MDEgKiBk
b3QwMiApICogaW52RGVub207CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRGcm9t
UXVhdGVybmlvbiggcSwgbmV3T3JkZXIgKTsKKyAgICAgICAgICAgICAgICAvLyBiYXJ5Y2VudHJp
YyBjb29yZGluYXRlcyBtdXN0IGFsd2F5cyBzdW0gdG8gMQorICAgICAgICAgICAgICAgIHJldHVy
biB0YXJnZXQuc2V0KCAxIC0gdSAtIHYsIHYsIHUgKTsKIAogICAgICAgICAgICAgfTsKIAogICAg
ICAgICB9KCksCiAKLSAgICAgICAgZXF1YWxzOiBmdW5jdGlvbiAoIGV1bGVyICkgewotCi0gICAg
ICAgICAgICByZXR1cm4gKCBldWxlci5feCA9PT0gdGhpcy5feCApICYmICggZXVsZXIuX3kgPT09
IHRoaXMuX3kgKSAmJiAoIGV1bGVyLl96ID09PSB0aGlzLl96ICkgJiYgKCBldWxlci5fb3JkZXIg
PT09IHRoaXMuX29yZGVyICk7Ci0KLSAgICAgICAgfSwKLQotICAgICAgICBmcm9tQXJyYXk6IGZ1
bmN0aW9uICggYXJyYXkgKSB7CisgICAgICAgIGNvbnRhaW5zUG9pbnQ6IGZ1bmN0aW9uICgpIHsK
IAotICAgICAgICAgICAgdGhpcy5feCA9IGFycmF5WyAwIF07Ci0gICAgICAgICAgICB0aGlzLl95
ID0gYXJyYXlbIDEgXTsKLSAgICAgICAgICAgIHRoaXMuX3ogPSBhcnJheVsgMiBdOwotICAgICAg
ICAgICAgaWYgKCBhcnJheVsgMyBdICE9PSB1bmRlZmluZWQgKSB0aGlzLl9vcmRlciA9IGFycmF5
WyAzIF07CisgICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAg
ICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBj
b250YWluc1BvaW50KCBwb2ludCwgYSwgYiwgYyApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgICAgICAgICAgVHJpYW5nbGUuZ2V0QmFyeWNvb3JkKCBwb2ludCwgYSwgYiwg
YywgdjEgKTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIHJldHVybiAoIHYxLnggPj0g
MCApICYmICggdjEueSA+PSAwICkgJiYgKCAoIHYxLnggKyB2MS55ICkgPD0gMSApOwogCi0gICAg
ICAgIHRvQXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9mZnNldCApIHsKKyAgICAgICAgICAgIH07
CiAKLSAgICAgICAgICAgIGlmICggYXJyYXkgPT09IHVuZGVmaW5lZCApIGFycmF5ID0gW107Ci0g
ICAgICAgICAgICBpZiAoIG9mZnNldCA9PT0gdW5kZWZpbmVkICkgb2Zmc2V0ID0gMDsKKyAgICAg
ICAgfSgpLAogCi0gICAgICAgICAgICBhcnJheVsgb2Zmc2V0IF0gPSB0aGlzLl94OwotICAgICAg
ICAgICAgYXJyYXlbIG9mZnNldCArIDEgXSA9IHRoaXMuX3k7Ci0gICAgICAgICAgICBhcnJheVsg
b2Zmc2V0ICsgMiBdID0gdGhpcy5fejsKLSAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyAzIF0g
PSB0aGlzLl9vcmRlcjsKKyAgICAgICAgZ2V0VVY6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAg
ICAgcmV0dXJuIGFycmF5OworICAgICAgICAgICAgdmFyIGJhcnljb29yZCA9IG5ldyBWZWN0b3Iz
KCk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBnZXRVViggcG9p
bnQsIHAxLCBwMiwgcDMsIHV2MSwgdXYyLCB1djMsIHRhcmdldCApIHsKIAotICAgICAgICB0b1Zl
Y3RvcjM6IGZ1bmN0aW9uICggb3B0aW9uYWxSZXN1bHQgKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5nZXRCYXJ5Y29vcmQoIHBvaW50LCBwMSwgcDIsIHAzLCBiYXJ5Y29vcmQgKTsKIAotICAgICAg
ICAgICAgaWYgKCBvcHRpb25hbFJlc3VsdCApIHsKKyAgICAgICAgICAgICAgICB0YXJnZXQuc2V0
KCAwLCAwICk7CisgICAgICAgICAgICAgICAgdGFyZ2V0LmFkZFNjYWxlZFZlY3RvciggdXYxLCBi
YXJ5Y29vcmQueCApOworICAgICAgICAgICAgICAgIHRhcmdldC5hZGRTY2FsZWRWZWN0b3IoIHV2
MiwgYmFyeWNvb3JkLnkgKTsKKyAgICAgICAgICAgICAgICB0YXJnZXQuYWRkU2NhbGVkVmVjdG9y
KCB1djMsIGJhcnljb29yZC56ICk7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uYWxS
ZXN1bHQuc2V0KCB0aGlzLl94LCB0aGlzLl95LCB0aGlzLl96ICk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRhcmdldDsKIAotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH07CiAK
LSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoIHRoaXMuX3gsIHRoaXMuX3ksIHRo
aXMuX3ogKTsKKyAgICAgICAgfSgpLAogCi0gICAgICAgICAgICB9CisgICAgICAgIGlzRnJvbnRG
YWNpbmc6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgdmFyIHYwID0g
bmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7CiAKLSAg
ICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uICggY2FsbGJhY2sgKSB7CisgICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb24gaXNGcm9udEZhY2luZyggYSwgYiwgYywgZGlyZWN0aW9uICkgewogCi0gICAg
ICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICAgICAgICAgICAg
ICB2MC5zdWJWZWN0b3JzKCBjLCBiICk7CisgICAgICAgICAgICAgICAgdjEuc3ViVmVjdG9ycygg
YSwgYiApOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAvLyBz
dHJpY3RseSBmcm9udCBmYWNpbmcKKyAgICAgICAgICAgICAgICByZXR1cm4gKCB2MC5jcm9zcygg
djEgKS5kb3QoIGRpcmVjdGlvbiApIDwgMCApID8gdHJ1ZSA6IGZhbHNlOwogCi0gICAgICAgIH0s
CisgICAgICAgICAgICB9OwogCi0gICAgICAgIG9uQ2hhbmdlQ2FsbGJhY2s6IGZ1bmN0aW9uICgp
IHt9CisgICAgICAgIH0oKQogCiAgICAgfSApOwogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBt
cmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKi8KLQotICAgIGZ1bmN0aW9uIExheWVy
cygpIHsKLQotICAgICAgICB0aGlzLm1hc2sgPSAxIHwgMDsKLQotICAgIH0KKyAgICBPYmplY3Qu
YXNzaWduKCBUcmlhbmdsZS5wcm90b3R5cGUsIHsKIAotICAgIE9iamVjdC5hc3NpZ24oIExheWVy
cy5wcm90b3R5cGUsIHsKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoIGEsIGIsIGMgKSB7CiAKLSAg
ICAgICAgc2V0OiBmdW5jdGlvbiAoIGNoYW5uZWwgKSB7CisgICAgICAgICAgICB0aGlzLmEuY29w
eSggYSApOworICAgICAgICAgICAgdGhpcy5iLmNvcHkoIGIgKTsKKyAgICAgICAgICAgIHRoaXMu
Yy5jb3B5KCBjICk7CiAKLSAgICAgICAgICAgIHRoaXMubWFzayA9IDEgPDwgY2hhbm5lbCB8IDA7
CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIGVuYWJs
ZTogZnVuY3Rpb24gKCBjaGFubmVsICkgewotCi0gICAgICAgICAgICB0aGlzLm1hc2sgfD0gMSA8
PCBjaGFubmVsIHwgMDsKLQotICAgICAgICB9LAorICAgICAgICBzZXRGcm9tUG9pbnRzQW5kSW5k
aWNlczogZnVuY3Rpb24gKCBwb2ludHMsIGkwLCBpMSwgaTIgKSB7CiAKLSAgICAgICAgdG9nZ2xl
OiBmdW5jdGlvbiAoIGNoYW5uZWwgKSB7CisgICAgICAgICAgICB0aGlzLmEuY29weSggcG9pbnRz
WyBpMCBdICk7CisgICAgICAgICAgICB0aGlzLmIuY29weSggcG9pbnRzWyBpMSBdICk7CisgICAg
ICAgICAgICB0aGlzLmMuY29weSggcG9pbnRzWyBpMiBdICk7CiAKLSAgICAgICAgICAgIHRoaXMu
bWFzayBePSAxIDw8IGNoYW5uZWwgfCAwOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAg
ICAgICAgfSwKIAotICAgICAgICBkaXNhYmxlOiBmdW5jdGlvbiAoIGNoYW5uZWwgKSB7CisgICAg
ICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHRoaXMubWFzayAmPSB+ICgg
MSA8PCBjaGFubmVsIHwgMCApOworICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVj
dG9yKCkuY29weSggdGhpcyApOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgdGVzdDogZnVuY3Rp
b24gKCBsYXllcnMgKSB7Ci0KLSAgICAgICAgICAgIHJldHVybiAoIHRoaXMubWFzayAmIGxheWVy
cy5tYXNrICkgIT09IDA7Ci0KLSAgICAgICAgfQotCi0gICAgfSApOwotCi0gICAgLyoqCi0gICAg
ICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKiBAYXV0aG9yIG1p
a2FlbCBlbXRpbmdlciAvIGh0dHA6Ly9nb21vLnNlLwotICAgICAqIEBhdXRob3IgYWx0ZXJlZHEg
LyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICogQGF1dGhvciBXZXN0TGFuZ2xleSAv
IGh0dHA6Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5Ci0gICAgICogQGF1dGhvciBlbGVwaGFudGF0
d29yayAvIHd3dy5lbGVwaGFudGF0d29yay5jaAotICAgICAqLwotCi0gICAgdmFyIG9iamVjdDNE
SWQgPSAwOwotCi0gICAgZnVuY3Rpb24gT2JqZWN0M0QoKSB7CisgICAgICAgIGNvcHk6IGZ1bmN0
aW9uICggdHJpYW5nbGUgKSB7CiAKLSAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlz
LCAnaWQnLCB7IHZhbHVlOiBvYmplY3QzRElkICsrIH0gKTsKKyAgICAgICAgICAgIHRoaXMuYS5j
b3B5KCB0cmlhbmdsZS5hICk7CisgICAgICAgICAgICB0aGlzLmIuY29weSggdHJpYW5nbGUuYiAp
OworICAgICAgICAgICAgdGhpcy5jLmNvcHkoIHRyaWFuZ2xlLmMgKTsKIAotICAgICAgICB0aGlz
LnV1aWQgPSBfTWF0aC5nZW5lcmF0ZVVVSUQoKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwog
Ci0gICAgICAgIHRoaXMubmFtZSA9ICcnOwotICAgICAgICB0aGlzLnR5cGUgPSAnT2JqZWN0M0Qn
OworICAgICAgICB9LAogCi0gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDsKLSAgICAgICAgdGhp
cy5jaGlsZHJlbiA9IFtdOworICAgICAgICBnZXRBcmVhOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAg
ICAgdGhpcy51cCA9IE9iamVjdDNELkRlZmF1bHRVcC5jbG9uZSgpOworICAgICAgICAgICAgdmFy
IHYwID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7
CiAKLSAgICAgICAgdmFyIHBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgdmFyIHJv
dGF0aW9uID0gbmV3IEV1bGVyKCk7Ci0gICAgICAgIHZhciBxdWF0ZXJuaW9uID0gbmV3IFF1YXRl
cm5pb24oKTsKLSAgICAgICAgdmFyIHNjYWxlID0gbmV3IFZlY3RvcjMoIDEsIDEsIDEgKTsKKyAg
ICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBnZXRBcmVhKCkgewogCi0gICAgICAgIGZ1bmN0aW9u
IG9uUm90YXRpb25DaGFuZ2UoKSB7CisgICAgICAgICAgICAgICAgdjAuc3ViVmVjdG9ycyggdGhp
cy5jLCB0aGlzLmIgKTsKKyAgICAgICAgICAgICAgICB2MS5zdWJWZWN0b3JzKCB0aGlzLmEsIHRo
aXMuYiApOwogCi0gICAgICAgICAgICBxdWF0ZXJuaW9uLnNldEZyb21FdWxlciggcm90YXRpb24s
IGZhbHNlICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHYwLmNyb3NzKCB2MSApLmxlbmd0aCgp
ICogMC41OwogCi0gICAgICAgIH0KKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgZnVuY3Rpb24g
b25RdWF0ZXJuaW9uQ2hhbmdlKCkgeworICAgICAgICB9KCksCiAKLSAgICAgICAgICAgIHJvdGF0
aW9uLnNldEZyb21RdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uLCB1bmRlZmluZWQsIGZhbHNlICk7Cisg
ICAgICAgIGdldE1pZHBvaW50OiBmdW5jdGlvbiAoIHRhcmdldCApIHsKIAotICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgIHJvdGF0
aW9uLm9uQ2hhbmdlKCBvblJvdGF0aW9uQ2hhbmdlICk7Ci0gICAgICAgIHF1YXRlcm5pb24ub25D
aGFuZ2UoIG9uUXVhdGVybmlvbkNoYW5nZSApOworICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fy
biggJ1RIUkVFLlRyaWFuZ2xlOiAuZ2V0TWlkcG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVk
JyApOworICAgICAgICAgICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAg
T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIHRoaXMsIHsKLSAgICAgICAgICAgIHBvc2l0aW9uOiB7
Ci0gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKLSAgICAgICAgICAgICAgICB2YWx1
ZTogcG9zaXRpb24KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICByb3RhdGlvbjogewotICAg
ICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgdmFsdWU6IHJv
dGF0aW9uCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgcXVhdGVybmlvbjogewotICAgICAg
ICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgdmFsdWU6IHF1YXRl
cm5pb24KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBzY2FsZTogewotICAgICAgICAgICAg
ICAgIGVudW1lcmFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgdmFsdWU6IHNjYWxlCi0gICAg
ICAgICAgICB9LAotICAgICAgICAgICAgbW9kZWxWaWV3TWF0cml4OiB7Ci0gICAgICAgICAgICAg
ICAgdmFsdWU6IG5ldyBNYXRyaXg0KCkKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBub3Jt
YWxNYXRyaXg6IHsKLSAgICAgICAgICAgICAgICB2YWx1ZTogbmV3IE1hdHJpeDMoKQogICAgICAg
ICAgICAgfQotICAgICAgICB9ICk7Ci0KLSAgICAgICAgdGhpcy5tYXRyaXggPSBuZXcgTWF0cml4
NCgpOwotICAgICAgICB0aGlzLm1hdHJpeFdvcmxkID0gbmV3IE1hdHJpeDQoKTsKLQotICAgICAg
ICB0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBPYmplY3QzRC5EZWZhdWx0TWF0cml4QXV0b1VwZGF0
ZTsKLSAgICAgICAgdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gZmFsc2U7CiAKLSAgICAg
ICAgdGhpcy5sYXllcnMgPSBuZXcgTGF5ZXJzKCk7Ci0gICAgICAgIHRoaXMudmlzaWJsZSA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFkZFZlY3RvcnMoIHRoaXMuYSwgdGhpcy5i
ICkuYWRkKCB0aGlzLmMgKS5tdWx0aXBseVNjYWxhciggMSAvIDMgKTsKIAotICAgICAgICB0aGlz
LmNhc3RTaGFkb3cgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5yZWNlaXZlU2hhZG93ID0gZmFsc2U7
CisgICAgICAgIH0sCiAKLSAgICAgICAgdGhpcy5mcnVzdHVtQ3VsbGVkID0gdHJ1ZTsKLSAgICAg
ICAgdGhpcy5yZW5kZXJPcmRlciA9IDA7CisgICAgICAgIGdldE5vcm1hbDogZnVuY3Rpb24gKCB0
YXJnZXQgKSB7CiAKLSAgICAgICAgdGhpcy51c2VyRGF0YSA9IHt9OworICAgICAgICAgICAgcmV0
dXJuIFRyaWFuZ2xlLmdldE5vcm1hbCggdGhpcy5hLCB0aGlzLmIsIHRoaXMuYywgdGFyZ2V0ICk7
CiAKLSAgICB9CisgICAgICAgIH0sCiAKLSAgICBPYmplY3QzRC5EZWZhdWx0VXAgPSBuZXcgVmVj
dG9yMyggMCwgMSwgMCApOwotICAgIE9iamVjdDNELkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlID0g
dHJ1ZTsKKyAgICAgICAgZ2V0UGxhbmU6IGZ1bmN0aW9uICggdGFyZ2V0ICkgewogCi0gICAgT2Jq
ZWN0M0QucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggRXZlbnREaXNw
YXRjaGVyLnByb3RvdHlwZSApLCB7CisgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZp
bmVkICkgewogCi0gICAgICAgIGNvbnN0cnVjdG9yOiBPYmplY3QzRCwKKyAgICAgICAgICAgICAg
ICBjb25zb2xlLndhcm4oICdUSFJFRS5UcmlhbmdsZTogLmdldFBsYW5lKCkgdGFyZ2V0IGlzIG5v
dyByZXF1aXJlZCcgKTsKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMygpOwog
Ci0gICAgICAgIGlzT2JqZWN0M0Q6IHRydWUsCisgICAgICAgICAgICB9CiAKLSAgICAgICAgb25C
ZWZvcmVSZW5kZXI6IGZ1bmN0aW9uICgpIHt9LAotICAgICAgICBvbkFmdGVyUmVuZGVyOiBmdW5j
dGlvbiAoKSB7fSwKKyAgICAgICAgICAgIHJldHVybiB0YXJnZXQuc2V0RnJvbUNvcGxhbmFyUG9p
bnRzKCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5jICk7CiAKLSAgICAgICAgYXBwbHlNYXRyaXg6IGZ1
bmN0aW9uICggbWF0cml4ICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICB0aGlzLm1hdHJp
eC5tdWx0aXBseU1hdHJpY2VzKCBtYXRyaXgsIHRoaXMubWF0cml4ICk7CisgICAgICAgIGdldEJh
cnljb29yZDogZnVuY3Rpb24gKCBwb2ludCwgdGFyZ2V0ICkgewogCi0gICAgICAgICAgICB0aGlz
Lm1hdHJpeC5kZWNvbXBvc2UoIHRoaXMucG9zaXRpb24sIHRoaXMucXVhdGVybmlvbiwgdGhpcy5z
Y2FsZSApOworICAgICAgICAgICAgcmV0dXJuIFRyaWFuZ2xlLmdldEJhcnljb29yZCggcG9pbnQs
IHRoaXMuYSwgdGhpcy5iLCB0aGlzLmMsIHRhcmdldCApOwogCiAgICAgICAgIH0sCiAKLSAgICAg
ICAgYXBwbHlRdWF0ZXJuaW9uOiBmdW5jdGlvbiAoIHEgKSB7Ci0KLSAgICAgICAgICAgIHRoaXMu
cXVhdGVybmlvbi5wcmVtdWx0aXBseSggcSApOworICAgICAgICBnZXRVVjogZnVuY3Rpb24gKCBw
b2ludCwgdXYxLCB1djIsIHV2MywgdGFyZ2V0ICkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgICAgIHJldHVybiBUcmlhbmdsZS5nZXRVViggcG9pbnQsIHRoaXMuYSwgdGhp
cy5iLCB0aGlzLmMsIHV2MSwgdXYyLCB1djMsIHRhcmdldCApOwogCiAgICAgICAgIH0sCiAKLSAg
ICAgICAgc2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlOiBmdW5jdGlvbiAoIGF4aXMsIGFuZ2xlICkg
ewotCi0gICAgICAgICAgICAvLyBhc3N1bWVzIGF4aXMgaXMgbm9ybWFsaXplZAorICAgICAgICBj
b250YWluc1BvaW50OiBmdW5jdGlvbiAoIHBvaW50ICkgewogCi0gICAgICAgICAgICB0aGlzLnF1
YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSggYXhpcywgYW5nbGUgKTsKKyAgICAgICAgICAgIHJl
dHVybiBUcmlhbmdsZS5jb250YWluc1BvaW50KCBwb2ludCwgdGhpcy5hLCB0aGlzLmIsIHRoaXMu
YyApOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgc2V0Um90YXRpb25Gcm9tRXVsZXI6IGZ1bmN0
aW9uICggZXVsZXIgKSB7CisgICAgICAgIGlzRnJvbnRGYWNpbmc6IGZ1bmN0aW9uICggZGlyZWN0
aW9uICkgewogCi0gICAgICAgICAgICB0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKCBldWxl
ciwgdHJ1ZSApOworICAgICAgICAgICAgcmV0dXJuIFRyaWFuZ2xlLmlzRnJvbnRGYWNpbmcoIHRo
aXMuYSwgdGhpcy5iLCB0aGlzLmMsIGRpcmVjdGlvbiApOwogCiAgICAgICAgIH0sCiAKLSAgICAg
ICAgc2V0Um90YXRpb25Gcm9tTWF0cml4OiBmdW5jdGlvbiAoIG0gKSB7Ci0KLSAgICAgICAgICAg
IC8vIGFzc3VtZXMgdGhlIHVwcGVyIDN4MyBvZiBtIGlzIGEgcHVyZSByb3RhdGlvbiBtYXRyaXgg
KGkuZSwgdW5zY2FsZWQpCisgICAgICAgIGludGVyc2VjdHNCb3g6IGZ1bmN0aW9uICggYm94ICkg
ewogCi0gICAgICAgICAgICB0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KCBt
ICk7CisgICAgICAgICAgICByZXR1cm4gYm94LmludGVyc2VjdHNUcmlhbmdsZSggdGhpcyApOwog
CiAgICAgICAgIH0sCiAKLSAgICAgICAgc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbjogZnVuY3Rp
b24gKCBxICkgeworICAgICAgICBjbG9zZXN0UG9pbnRUb1BvaW50OiBmdW5jdGlvbiAoKSB7CiAK
LSAgICAgICAgICAgIC8vIGFzc3VtZXMgcSBpcyBub3JtYWxpemVkCisgICAgICAgICAgICB2YXIg
dmFiID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciB2YWMgPSBuZXcgVmVjdG9yMygp
OworICAgICAgICAgICAgdmFyIHZiYyA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICB2YXIg
dmFwID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciB2YnAgPSBuZXcgVmVjdG9yMygp
OworICAgICAgICAgICAgdmFyIHZjcCA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAgICAgIHRo
aXMucXVhdGVybmlvbi5jb3B5KCBxICk7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY2xv
c2VzdFBvaW50VG9Qb2ludCggcCwgdGFyZ2V0ICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICByb3RhdGVPbkF4
aXM6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhS
RUUuVHJpYW5nbGU6IC5jbG9zZXN0UG9pbnRUb1BvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJl
ZCcgKTsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsKIAotICAg
ICAgICAgICAgLy8gcm90YXRlIG9iamVjdCBvbiBheGlzIGluIG9iamVjdCBzcGFjZQotICAgICAg
ICAgICAgLy8gYXhpcyBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWQKKyAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHZhciBxMSA9IG5ldyBRdWF0ZXJuaW9uKCk7CisgICAgICAgICAg
ICAgICAgdmFyIGEgPSB0aGlzLmEsIGIgPSB0aGlzLmIsIGMgPSB0aGlzLmM7CisgICAgICAgICAg
ICAgICAgdmFyIHYsIHc7CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiByb3RhdGVPbkF4
aXMoIGF4aXMsIGFuZ2xlICkgeworICAgICAgICAgICAgICAgIC8vIGFsZ29yaXRobSB0aGFua3Mg
dG8gUmVhbC1UaW1lIENvbGxpc2lvbiBEZXRlY3Rpb24gYnkgQ2hyaXN0ZXIgRXJpY3NvbiwKKyAg
ICAgICAgICAgICAgICAvLyBwdWJsaXNoZWQgYnkgTW9yZ2FuIEthdWZtYW5uIFB1Ymxpc2hlcnMs
IChjKSAyMDA1IEVsc2V2aWVyIEluYy4sCisgICAgICAgICAgICAgICAgLy8gdW5kZXIgdGhlIGFj
Y29tcGFueWluZyBsaWNlbnNlOyBzZWUgY2hhcHRlciA1LjEuNSBmb3IgZGV0YWlsZWQgZXhwbGFu
YXRpb24uCisgICAgICAgICAgICAgICAgLy8gYmFzaWNhbGx5LCB3ZSdyZSBkaXN0aW5ndWlzaGlu
ZyB3aGljaCBvZiB0aGUgdm9yb25vaSByZWdpb25zIG9mIHRoZSB0cmlhbmdsZQorICAgICAgICAg
ICAgICAgIC8vIHRoZSBwb2ludCBsaWVzIGluIHdpdGggdGhlIG1pbmltdW0gYW1vdW50IG9mIHJl
ZHVuZGFudCBjb21wdXRhdGlvbi4KIAotICAgICAgICAgICAgICAgIHExLnNldEZyb21BeGlzQW5n
bGUoIGF4aXMsIGFuZ2xlICk7CisgICAgICAgICAgICAgICAgdmFiLnN1YlZlY3RvcnMoIGIsIGEg
KTsKKyAgICAgICAgICAgICAgICB2YWMuc3ViVmVjdG9ycyggYywgYSApOworICAgICAgICAgICAg
ICAgIHZhcC5zdWJWZWN0b3JzKCBwLCBhICk7CisgICAgICAgICAgICAgICAgdmFyIGQxID0gdmFi
LmRvdCggdmFwICk7CisgICAgICAgICAgICAgICAgdmFyIGQyID0gdmFjLmRvdCggdmFwICk7Cisg
ICAgICAgICAgICAgICAgaWYgKCBkMSA8PSAwICYmIGQyIDw9IDAgKSB7CiAKLSAgICAgICAgICAg
ICAgICB0aGlzLnF1YXRlcm5pb24ubXVsdGlwbHkoIHExICk7CisgICAgICAgICAgICAgICAgICAg
IC8vIHZlcnRleCByZWdpb24gb2YgQTsgYmFyeWNlbnRyaWMgY29vcmRzICgxLCAwLCAwKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmNvcHkoIGEgKTsKIAotICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICB2YnAuc3ViVmVjdG9ycyggcCwgYiApOworICAgICAgICAgICAgICAgIHZh
ciBkMyA9IHZhYi5kb3QoIHZicCApOworICAgICAgICAgICAgICAgIHZhciBkNCA9IHZhYy5kb3Qo
IHZicCApOworICAgICAgICAgICAgICAgIGlmICggZDMgPj0gMCAmJiBkNCA8PSBkMyApIHsKIAot
ICAgICAgICB9KCksCisgICAgICAgICAgICAgICAgICAgIC8vIHZlcnRleCByZWdpb24gb2YgQjsg
YmFyeWNlbnRyaWMgY29vcmRzICgwLCAxLCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGFyZ2V0LmNvcHkoIGIgKTsKIAotICAgICAgICByb3RhdGVPbldvcmxkQXhpczogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gcm90YXRlIG9iamVjdCBv
biBheGlzIGluIHdvcmxkIHNwYWNlCi0gICAgICAgICAgICAvLyBheGlzIGlzIGFzc3VtZWQgdG8g
YmUgbm9ybWFsaXplZAotICAgICAgICAgICAgLy8gbWV0aG9kIGFzc3VtZXMgbm8gcm90YXRlZCBw
YXJlbnQKKyAgICAgICAgICAgICAgICB2YXIgdmMgPSBkMSAqIGQ0IC0gZDMgKiBkMjsKKyAgICAg
ICAgICAgICAgICBpZiAoIHZjIDw9IDAgJiYgZDEgPj0gMCAmJiBkMyA8PSAwICkgewogCi0gICAg
ICAgICAgICB2YXIgcTEgPSBuZXcgUXVhdGVybmlvbigpOworICAgICAgICAgICAgICAgICAgICB2
ID0gZDEgLyAoIGQxIC0gZDMgKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gZWRnZSByZWdpb24g
b2YgQUI7IGJhcnljZW50cmljIGNvb3JkcyAoMS12LCB2LCAwKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGFyZ2V0LmNvcHkoIGEgKS5hZGRTY2FsZWRWZWN0b3IoIHZhYiwgdiApOwogCi0g
ICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcm90YXRlT25Xb3JsZEF4aXMoIGF4aXMsIGFuZ2xl
ICkgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHExLnNldEZyb21BeGlz
QW5nbGUoIGF4aXMsIGFuZ2xlICk7CisgICAgICAgICAgICAgICAgdmNwLnN1YlZlY3RvcnMoIHAs
IGMgKTsKKyAgICAgICAgICAgICAgICB2YXIgZDUgPSB2YWIuZG90KCB2Y3AgKTsKKyAgICAgICAg
ICAgICAgICB2YXIgZDYgPSB2YWMuZG90KCB2Y3AgKTsKKyAgICAgICAgICAgICAgICBpZiAoIGQ2
ID49IDAgJiYgZDUgPD0gZDYgKSB7CiAKLSAgICAgICAgICAgICAgICB0aGlzLnF1YXRlcm5pb24u
cHJlbXVsdGlwbHkoIHExICk7CisgICAgICAgICAgICAgICAgICAgIC8vIHZlcnRleCByZWdpb24g
b2YgQzsgYmFyeWNlbnRyaWMgY29vcmRzICgwLCAwLCAxKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGFyZ2V0LmNvcHkoIGMgKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwor
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB2YXIg
dmIgPSBkNSAqIGQyIC0gZDEgKiBkNjsKKyAgICAgICAgICAgICAgICBpZiAoIHZiIDw9IDAgJiYg
ZDIgPj0gMCAmJiBkNiA8PSAwICkgewogCi0gICAgICAgIH0oKSwKKyAgICAgICAgICAgICAgICAg
ICAgdyA9IGQyIC8gKCBkMiAtIGQ2ICk7CisgICAgICAgICAgICAgICAgICAgIC8vIGVkZ2UgcmVn
aW9uIG9mIEFDOyBiYXJ5Y2VudHJpYyBjb29yZHMgKDEtdywgMCwgdykKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRhcmdldC5jb3B5KCBhICkuYWRkU2NhbGVkVmVjdG9yKCB2YWMsIHcgKTsK
IAotICAgICAgICByb3RhdGVYOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMyggMSwgMCwgMCApOworICAgICAgICAgICAg
ICAgIHZhciB2YSA9IGQzICogZDYgLSBkNSAqIGQ0OworICAgICAgICAgICAgICAgIGlmICggdmEg
PD0gMCAmJiAoIGQ0IC0gZDMgKSA+PSAwICYmICggZDUgLSBkNiApID49IDAgKSB7CiAKLSAgICAg
ICAgICAgIHJldHVybiBmdW5jdGlvbiByb3RhdGVYKCBhbmdsZSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmJjLnN1YlZlY3RvcnMoIGMsIGIgKTsKKyAgICAgICAgICAgICAgICAgICAgdyA9ICgg
ZDQgLSBkMyApIC8gKCAoIGQ0IC0gZDMgKSArICggZDUgLSBkNiApICk7CisgICAgICAgICAgICAg
ICAgICAgIC8vIGVkZ2UgcmVnaW9uIG9mIEJDOyBiYXJ5Y2VudHJpYyBjb29yZHMgKDAsIDEtdywg
dykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5jb3B5KCBiICkuYWRkU2NhbGVk
VmVjdG9yKCB2YmMsIHcgKTsgLy8gZWRnZSByZWdpb24gb2YgQkMKIAotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyggdjEsIGFuZ2xlICk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgLy8gZmFjZSByZWdpb24KKyAgICAgICAgICAgICAgICB2YXIg
ZGVub20gPSAxIC8gKCB2YSArIHZiICsgdmMgKTsKKyAgICAgICAgICAgICAgICAvLyB1ID0gdmEg
KiBkZW5vbQorICAgICAgICAgICAgICAgIHYgPSB2YiAqIGRlbm9tOworICAgICAgICAgICAgICAg
IHcgPSB2YyAqIGRlbm9tOworICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuY29weSggYSAp
LmFkZFNjYWxlZFZlY3RvciggdmFiLCB2ICkuYWRkU2NhbGVkVmVjdG9yKCB2YWMsIHcgKTsKIAog
ICAgICAgICAgICAgfTsKIAogICAgICAgICB9KCksCiAKLSAgICAgICAgcm90YXRlWTogZnVuY3Rp
b24gKCkgeworICAgICAgICBlcXVhbHM6IGZ1bmN0aW9uICggdHJpYW5nbGUgKSB7CiAKLSAgICAg
ICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCAwLCAxLCAwICk7CisgICAgICAgICAgICByZXR1
cm4gdHJpYW5nbGUuYS5lcXVhbHMoIHRoaXMuYSApICYmIHRyaWFuZ2xlLmIuZXF1YWxzKCB0aGlz
LmIgKSAmJiB0cmlhbmdsZS5jLmVxdWFscyggdGhpcy5jICk7CiAKLSAgICAgICAgICAgIHJldHVy
biBmdW5jdGlvbiByb3RhdGVZKCBhbmdsZSApIHsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMucm90YXRlT25BeGlzKCB2MSwgYW5nbGUgKTsKKyAgICB9ICk7CiAKLSAg
ICAgICAgICAgIH07CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJk
b29iLmNvbS8KKyAgICAgKi8KIAotICAgICAgICB9KCksCisgICAgdmFyIENvbG9yS2V5d29yZHMg
PSB7ICdhbGljZWJsdWUnOiAweEYwRjhGRiwgJ2FudGlxdWV3aGl0ZSc6IDB4RkFFQkQ3LCAnYXF1
YSc6IDB4MDBGRkZGLCAnYXF1YW1hcmluZSc6IDB4N0ZGRkQ0LCAnYXp1cmUnOiAweEYwRkZGRiwK
KyAgICAgICAgJ2JlaWdlJzogMHhGNUY1REMsICdiaXNxdWUnOiAweEZGRTRDNCwgJ2JsYWNrJzog
MHgwMDAwMDAsICdibGFuY2hlZGFsbW9uZCc6IDB4RkZFQkNELCAnYmx1ZSc6IDB4MDAwMEZGLCAn
Ymx1ZXZpb2xldCc6IDB4OEEyQkUyLAorICAgICAgICAnYnJvd24nOiAweEE1MkEyQSwgJ2J1cmx5
d29vZCc6IDB4REVCODg3LCAnY2FkZXRibHVlJzogMHg1RjlFQTAsICdjaGFydHJldXNlJzogMHg3
RkZGMDAsICdjaG9jb2xhdGUnOiAweEQyNjkxRSwgJ2NvcmFsJzogMHhGRjdGNTAsCisgICAgICAg
ICdjb3JuZmxvd2VyYmx1ZSc6IDB4NjQ5NUVELCAnY29ybnNpbGsnOiAweEZGRjhEQywgJ2NyaW1z
b24nOiAweERDMTQzQywgJ2N5YW4nOiAweDAwRkZGRiwgJ2RhcmtibHVlJzogMHgwMDAwOEIsICdk
YXJrY3lhbic6IDB4MDA4QjhCLAorICAgICAgICAnZGFya2dvbGRlbnJvZCc6IDB4Qjg4NjBCLCAn
ZGFya2dyYXknOiAweEE5QTlBOSwgJ2RhcmtncmVlbic6IDB4MDA2NDAwLCAnZGFya2dyZXknOiAw
eEE5QTlBOSwgJ2RhcmtraGFraSc6IDB4QkRCNzZCLCAnZGFya21hZ2VudGEnOiAweDhCMDA4QiwK
KyAgICAgICAgJ2RhcmtvbGl2ZWdyZWVuJzogMHg1NTZCMkYsICdkYXJrb3JhbmdlJzogMHhGRjhD
MDAsICdkYXJrb3JjaGlkJzogMHg5OTMyQ0MsICdkYXJrcmVkJzogMHg4QjAwMDAsICdkYXJrc2Fs
bW9uJzogMHhFOTk2N0EsICdkYXJrc2VhZ3JlZW4nOiAweDhGQkM4RiwKKyAgICAgICAgJ2Rhcmtz
bGF0ZWJsdWUnOiAweDQ4M0Q4QiwgJ2RhcmtzbGF0ZWdyYXknOiAweDJGNEY0RiwgJ2RhcmtzbGF0
ZWdyZXknOiAweDJGNEY0RiwgJ2Rhcmt0dXJxdW9pc2UnOiAweDAwQ0VEMSwgJ2Rhcmt2aW9sZXQn
OiAweDk0MDBEMywKKyAgICAgICAgJ2RlZXBwaW5rJzogMHhGRjE0OTMsICdkZWVwc2t5Ymx1ZSc6
IDB4MDBCRkZGLCAnZGltZ3JheSc6IDB4Njk2OTY5LCAnZGltZ3JleSc6IDB4Njk2OTY5LCAnZG9k
Z2VyYmx1ZSc6IDB4MUU5MEZGLCAnZmlyZWJyaWNrJzogMHhCMjIyMjIsCisgICAgICAgICdmbG9y
YWx3aGl0ZSc6IDB4RkZGQUYwLCAnZm9yZXN0Z3JlZW4nOiAweDIyOEIyMiwgJ2Z1Y2hzaWEnOiAw
eEZGMDBGRiwgJ2dhaW5zYm9ybyc6IDB4RENEQ0RDLCAnZ2hvc3R3aGl0ZSc6IDB4RjhGOEZGLCAn
Z29sZCc6IDB4RkZENzAwLAorICAgICAgICAnZ29sZGVucm9kJzogMHhEQUE1MjAsICdncmF5Jzog
MHg4MDgwODAsICdncmVlbic6IDB4MDA4MDAwLCAnZ3JlZW55ZWxsb3cnOiAweEFERkYyRiwgJ2dy
ZXknOiAweDgwODA4MCwgJ2hvbmV5ZGV3JzogMHhGMEZGRjAsICdob3RwaW5rJzogMHhGRjY5QjQs
CisgICAgICAgICdpbmRpYW5yZWQnOiAweENENUM1QywgJ2luZGlnbyc6IDB4NEIwMDgyLCAnaXZv
cnknOiAweEZGRkZGMCwgJ2toYWtpJzogMHhGMEU2OEMsICdsYXZlbmRlcic6IDB4RTZFNkZBLCAn
bGF2ZW5kZXJibHVzaCc6IDB4RkZGMEY1LCAnbGF3bmdyZWVuJzogMHg3Q0ZDMDAsCisgICAgICAg
ICdsZW1vbmNoaWZmb24nOiAweEZGRkFDRCwgJ2xpZ2h0Ymx1ZSc6IDB4QUREOEU2LCAnbGlnaHRj
b3JhbCc6IDB4RjA4MDgwLCAnbGlnaHRjeWFuJzogMHhFMEZGRkYsICdsaWdodGdvbGRlbnJvZHll
bGxvdyc6IDB4RkFGQUQyLCAnbGlnaHRncmF5JzogMHhEM0QzRDMsCisgICAgICAgICdsaWdodGdy
ZWVuJzogMHg5MEVFOTAsICdsaWdodGdyZXknOiAweEQzRDNEMywgJ2xpZ2h0cGluayc6IDB4RkZC
NkMxLCAnbGlnaHRzYWxtb24nOiAweEZGQTA3QSwgJ2xpZ2h0c2VhZ3JlZW4nOiAweDIwQjJBQSwg
J2xpZ2h0c2t5Ymx1ZSc6IDB4ODdDRUZBLAorICAgICAgICAnbGlnaHRzbGF0ZWdyYXknOiAweDc3
ODg5OSwgJ2xpZ2h0c2xhdGVncmV5JzogMHg3Nzg4OTksICdsaWdodHN0ZWVsYmx1ZSc6IDB4QjBD
NERFLCAnbGlnaHR5ZWxsb3cnOiAweEZGRkZFMCwgJ2xpbWUnOiAweDAwRkYwMCwgJ2xpbWVncmVl
bic6IDB4MzJDRDMyLAorICAgICAgICAnbGluZW4nOiAweEZBRjBFNiwgJ21hZ2VudGEnOiAweEZG
MDBGRiwgJ21hcm9vbic6IDB4ODAwMDAwLCAnbWVkaXVtYXF1YW1hcmluZSc6IDB4NjZDREFBLCAn
bWVkaXVtYmx1ZSc6IDB4MDAwMENELCAnbWVkaXVtb3JjaGlkJzogMHhCQTU1RDMsCisgICAgICAg
ICdtZWRpdW1wdXJwbGUnOiAweDkzNzBEQiwgJ21lZGl1bXNlYWdyZWVuJzogMHgzQ0IzNzEsICdt
ZWRpdW1zbGF0ZWJsdWUnOiAweDdCNjhFRSwgJ21lZGl1bXNwcmluZ2dyZWVuJzogMHgwMEZBOUEs
ICdtZWRpdW10dXJxdW9pc2UnOiAweDQ4RDFDQywKKyAgICAgICAgJ21lZGl1bXZpb2xldHJlZCc6
IDB4QzcxNTg1LCAnbWlkbmlnaHRibHVlJzogMHgxOTE5NzAsICdtaW50Y3JlYW0nOiAweEY1RkZG
QSwgJ21pc3R5cm9zZSc6IDB4RkZFNEUxLCAnbW9jY2FzaW4nOiAweEZGRTRCNSwgJ25hdmFqb3do
aXRlJzogMHhGRkRFQUQsCisgICAgICAgICduYXZ5JzogMHgwMDAwODAsICdvbGRsYWNlJzogMHhG
REY1RTYsICdvbGl2ZSc6IDB4ODA4MDAwLCAnb2xpdmVkcmFiJzogMHg2QjhFMjMsICdvcmFuZ2Un
OiAweEZGQTUwMCwgJ29yYW5nZXJlZCc6IDB4RkY0NTAwLCAnb3JjaGlkJzogMHhEQTcwRDYsCisg
ICAgICAgICdwYWxlZ29sZGVucm9kJzogMHhFRUU4QUEsICdwYWxlZ3JlZW4nOiAweDk4RkI5OCwg
J3BhbGV0dXJxdW9pc2UnOiAweEFGRUVFRSwgJ3BhbGV2aW9sZXRyZWQnOiAweERCNzA5MywgJ3Bh
cGF5YXdoaXAnOiAweEZGRUZENSwgJ3BlYWNocHVmZic6IDB4RkZEQUI5LAorICAgICAgICAncGVy
dSc6IDB4Q0Q4NTNGLCAncGluayc6IDB4RkZDMENCLCAncGx1bSc6IDB4RERBMERELCAncG93ZGVy
Ymx1ZSc6IDB4QjBFMEU2LCAncHVycGxlJzogMHg4MDAwODAsICdyZWJlY2NhcHVycGxlJzogMHg2
NjMzOTksICdyZWQnOiAweEZGMDAwMCwgJ3Jvc3licm93bic6IDB4QkM4RjhGLAorICAgICAgICAn
cm95YWxibHVlJzogMHg0MTY5RTEsICdzYWRkbGVicm93bic6IDB4OEI0NTEzLCAnc2FsbW9uJzog
MHhGQTgwNzIsICdzYW5keWJyb3duJzogMHhGNEE0NjAsICdzZWFncmVlbic6IDB4MkU4QjU3LCAn
c2Vhc2hlbGwnOiAweEZGRjVFRSwKKyAgICAgICAgJ3NpZW5uYSc6IDB4QTA1MjJELCAnc2lsdmVy
JzogMHhDMEMwQzAsICdza3libHVlJzogMHg4N0NFRUIsICdzbGF0ZWJsdWUnOiAweDZBNUFDRCwg
J3NsYXRlZ3JheSc6IDB4NzA4MDkwLCAnc2xhdGVncmV5JzogMHg3MDgwOTAsICdzbm93JzogMHhG
RkZBRkEsCisgICAgICAgICdzcHJpbmdncmVlbic6IDB4MDBGRjdGLCAnc3RlZWxibHVlJzogMHg0
NjgyQjQsICd0YW4nOiAweEQyQjQ4QywgJ3RlYWwnOiAweDAwODA4MCwgJ3RoaXN0bGUnOiAweEQ4
QkZEOCwgJ3RvbWF0byc6IDB4RkY2MzQ3LCAndHVycXVvaXNlJzogMHg0MEUwRDAsCisgICAgICAg
ICd2aW9sZXQnOiAweEVFODJFRSwgJ3doZWF0JzogMHhGNURFQjMsICd3aGl0ZSc6IDB4RkZGRkZG
LCAnd2hpdGVzbW9rZSc6IDB4RjVGNUY1LCAneWVsbG93JzogMHhGRkZGMDAsICd5ZWxsb3dncmVl
bic6IDB4OUFDRDMyIH07CiAKLSAgICAgICAgcm90YXRlWjogZnVuY3Rpb24gKCkgeworICAgIGZ1
bmN0aW9uIENvbG9yKCByLCBnLCBiICkgewogCi0gICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVj
dG9yMyggMCwgMCwgMSApOworICAgICAgICBpZiAoIGcgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1
bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiByb3RhdGVaKCBhbmds
ZSApIHsKKyAgICAgICAgICAgIC8vIHIgaXMgVEhSRUUuQ29sb3IsIGhleCBvciBzdHJpbmcKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLnNldCggciApOwogCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMucm90YXRlT25BeGlzKCB2MSwgYW5nbGUgKTsKKyAgICAgICAgfQogCi0gICAgICAgICAg
ICB9OworICAgICAgICByZXR1cm4gdGhpcy5zZXRSR0IoIHIsIGcsIGIgKTsKIAotICAgICAgICB9
KCksCisgICAgfQogCi0gICAgICAgIHRyYW5zbGF0ZU9uQXhpczogZnVuY3Rpb24gKCkgeworICAg
IGZ1bmN0aW9uIGh1ZTJyZ2IoIHAsIHEsIHQgKSB7CiAKLSAgICAgICAgICAgIC8vIHRyYW5zbGF0
ZSBvYmplY3QgYnkgZGlzdGFuY2UgYWxvbmcgYXhpcyBpbiBvYmplY3Qgc3BhY2UKLSAgICAgICAg
ICAgIC8vIGF4aXMgaXMgYXNzdW1lZCB0byBiZSBub3JtYWxpemVkCisgICAgICAgIGlmICggdCA8
IDAgKSB0ICs9IDE7CisgICAgICAgIGlmICggdCA+IDEgKSB0IC09IDE7CisgICAgICAgIGlmICgg
dCA8IDEgLyA2ICkgcmV0dXJuIHAgKyAoIHEgLSBwICkgKiA2ICogdDsKKyAgICAgICAgaWYgKCB0
IDwgMSAvIDIgKSByZXR1cm4gcTsKKyAgICAgICAgaWYgKCB0IDwgMiAvIDMgKSByZXR1cm4gcCAr
ICggcSAtIHAgKSAqIDYgKiAoIDIgLyAzIC0gdCApOworICAgICAgICByZXR1cm4gcDsKIAotICAg
ICAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTsKKyAgICB9CiAKLSAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbiB0cmFuc2xhdGVPbkF4aXMoIGF4aXMsIGRpc3RhbmNlICkgeworICAgIGZ1
bmN0aW9uIFNSR0JUb0xpbmVhciggYyApIHsKIAotICAgICAgICAgICAgICAgIHYxLmNvcHkoIGF4
aXMgKS5hcHBseVF1YXRlcm5pb24oIHRoaXMucXVhdGVybmlvbiApOworICAgICAgICByZXR1cm4g
KCBjIDwgMC4wNDA0NSApID8gYyAqIDAuMDc3Mzk5MzgwOCA6IE1hdGgucG93KCBjICogMC45NDc4
NjcyOTg2ICsgMC4wNTIxMzI3MDE0LCAyLjQgKTsKIAotICAgICAgICAgICAgICAgIHRoaXMucG9z
aXRpb24uYWRkKCB2MS5tdWx0aXBseVNjYWxhciggZGlzdGFuY2UgKSApOworICAgIH0KIAotICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgIGZ1bmN0aW9uIExpbmVhclRvU1JHQiggYyAp
IHsKIAotICAgICAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuICggYyA8IDAuMDAzMTMwOCApID8g
YyAqIDEyLjkyIDogMS4wNTUgKiAoIE1hdGgucG93KCBjLCAwLjQxNjY2ICkgKSAtIDAuMDU1Owog
Ci0gICAgICAgIH0oKSwKKyAgICB9CiAKLSAgICAgICAgdHJhbnNsYXRlWDogZnVuY3Rpb24gKCkg
eworICAgIE9iamVjdC5hc3NpZ24oIENvbG9yLnByb3RvdHlwZSwgewogCi0gICAgICAgICAgICB2
YXIgdjEgPSBuZXcgVmVjdG9yMyggMSwgMCwgMCApOworICAgICAgICBpc0NvbG9yOiB0cnVlLAog
Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdHJhbnNsYXRlWCggZGlzdGFuY2UgKSB7Cisg
ICAgICAgIHI6IDEsIGc6IDEsIGI6IDEsCiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50
cmFuc2xhdGVPbkF4aXMoIHYxLCBkaXN0YW5jZSApOworICAgICAgICBzZXQ6IGZ1bmN0aW9uICgg
dmFsdWUgKSB7CiAKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoIHZhbHVlICYmIHZh
bHVlLmlzQ29sb3IgKSB7CiAKLSAgICAgICAgfSgpLAorICAgICAgICAgICAgICAgIHRoaXMuY29w
eSggdmFsdWUgKTsKIAotICAgICAgICB0cmFuc2xhdGVZOiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICkgewogCi0gICAgICAg
ICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMyggMCwgMSwgMCApOworICAgICAgICAgICAgICAgIHRo
aXMuc2V0SGV4KCB2YWx1ZSApOwogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdHJhbnNs
YXRlWSggZGlzdGFuY2UgKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgdmFsdWUg
PT09ICdzdHJpbmcnICkgewogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRl
T25BeGlzKCB2MSwgZGlzdGFuY2UgKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNldFN0eWxlKCB2
YWx1ZSApOwogCi0gICAgICAgICAgICB9OworICAgICAgICAgICAgfQogCi0gICAgICAgIH0oKSwK
KyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIHRyYW5zbGF0ZVo6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoIDAs
IDAsIDEgKTsKKyAgICAgICAgc2V0U2NhbGFyOiBmdW5jdGlvbiAoIHNjYWxhciApIHsKIAotICAg
ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRyYW5zbGF0ZVooIGRpc3RhbmNlICkgeworICAgICAg
ICAgICAgdGhpcy5yID0gc2NhbGFyOworICAgICAgICAgICAgdGhpcy5nID0gc2NhbGFyOworICAg
ICAgICAgICAgdGhpcy5iID0gc2NhbGFyOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
dHJhbnNsYXRlT25BeGlzKCB2MSwgZGlzdGFuY2UgKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OwogCi0gICAgICAgICAgICB9OworICAgICAgICB9LAogCi0gICAgICAgIH0oKSwKKyAgICAgICAg
c2V0SGV4OiBmdW5jdGlvbiAoIGhleCApIHsKIAotICAgICAgICBsb2NhbFRvV29ybGQ6IGZ1bmN0
aW9uICggdmVjdG9yICkgeworICAgICAgICAgICAgaGV4ID0gTWF0aC5mbG9vciggaGV4ICk7CiAK
LSAgICAgICAgICAgIHJldHVybiB2ZWN0b3IuYXBwbHlNYXRyaXg0KCB0aGlzLm1hdHJpeFdvcmxk
ICk7CisgICAgICAgICAgICB0aGlzLnIgPSAoIGhleCA+PiAxNiAmIDI1NSApIC8gMjU1OworICAg
ICAgICAgICAgdGhpcy5nID0gKCBoZXggPj4gOCAmIDI1NSApIC8gMjU1OworICAgICAgICAgICAg
dGhpcy5iID0gKCBoZXggJiAyNTUgKSAvIDI1NTsKKworICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAKICAgICAgICAgfSwKIAotICAgICAgICB3b3JsZFRvTG9jYWw6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgc2V0UkdCOiBmdW5jdGlvbiAoIHIsIGcsIGIgKSB7CiAKLSAgICAgICAgICAgIHZhciBt
MSA9IG5ldyBNYXRyaXg0KCk7CisgICAgICAgICAgICB0aGlzLnIgPSByOworICAgICAgICAgICAg
dGhpcy5nID0gZzsKKyAgICAgICAgICAgIHRoaXMuYiA9IGI7CiAKLSAgICAgICAgICAgIHJldHVy
biBmdW5jdGlvbiB3b3JsZFRvTG9jYWwoIHZlY3RvciApIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZlY3Rvci5hcHBseU1hdHJpeDQoIG0xLmdl
dEludmVyc2UoIHRoaXMubWF0cml4V29ybGQgKSApOworICAgICAgICB9LAogCi0gICAgICAgICAg
ICB9OworICAgICAgICBzZXRIU0w6IGZ1bmN0aW9uICggaCwgcywgbCApIHsKIAotICAgICAgICB9
KCksCisgICAgICAgICAgICAvLyBoLHMsbCByYW5nZXMgYXJlIGluIDAuMCAtIDEuMAorICAgICAg
ICAgICAgaCA9IF9NYXRoLmV1Y2xpZGVhbk1vZHVsbyggaCwgMSApOworICAgICAgICAgICAgcyA9
IF9NYXRoLmNsYW1wKCBzLCAwLCAxICk7CisgICAgICAgICAgICBsID0gX01hdGguY2xhbXAoIGws
IDAsIDEgKTsKIAotICAgICAgICBsb29rQXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlm
ICggcyA9PT0gMCApIHsKIAotICAgICAgICAgICAgLy8gVGhpcyBtZXRob2QgZG9lcyBub3Qgc3Vw
cG9ydCBvYmplY3RzIHdpdGggcm90YXRlZCBhbmQvb3IgdHJhbnNsYXRlZCBwYXJlbnQocykKKyAg
ICAgICAgICAgICAgICB0aGlzLnIgPSB0aGlzLmcgPSB0aGlzLmIgPSBsOwogCi0gICAgICAgICAg
ICB2YXIgbTEgPSBuZXcgTWF0cml4NCgpOwotICAgICAgICAgICAgdmFyIHZlY3RvciA9IG5ldyBW
ZWN0b3IzKCk7CisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb24gbG9va0F0KCB4LCB5LCB6ICkgeworICAgICAgICAgICAgICAgIHZhciBwID0gbCA8PSAw
LjUgPyBsICogKCAxICsgcyApIDogbCArIHMgLSAoIGwgKiBzICk7CisgICAgICAgICAgICAgICAg
dmFyIHEgPSAoIDIgKiBsICkgLSBwOwogCi0gICAgICAgICAgICAgICAgaWYgKCB4LmlzVmVjdG9y
MyApIHsKKyAgICAgICAgICAgICAgICB0aGlzLnIgPSBodWUycmdiKCBxLCBwLCBoICsgMSAvIDMg
KTsKKyAgICAgICAgICAgICAgICB0aGlzLmcgPSBodWUycmdiKCBxLCBwLCBoICk7CisgICAgICAg
ICAgICAgICAgdGhpcy5iID0gaHVlMnJnYiggcSwgcCwgaCAtIDEgLyAzICk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgdmVjdG9yLmNvcHkoIHggKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAg
ICAgICAgICB2ZWN0b3Iuc2V0KCB4LCB5LCB6ICk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgIHNldFN0eWxlOiBmdW5jdGlvbiAoIHN0eWxlICkgewogCi0gICAgICAg
ICAgICAgICAgaWYgKCB0aGlzLmlzQ2FtZXJhICkgeworICAgICAgICAgICAgZnVuY3Rpb24gaGFu
ZGxlQWxwaGEoIHN0cmluZyApIHsKIAotICAgICAgICAgICAgICAgICAgICBtMS5sb29rQXQoIHRo
aXMucG9zaXRpb24sIHZlY3RvciwgdGhpcy51cCApOworICAgICAgICAgICAgICAgIGlmICggc3Ry
aW5nID09PSB1bmRlZmluZWQgKSByZXR1cm47CiAKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGlmICggcGFyc2VGbG9hdCggc3RyaW5nICkgPCAxICkgewogCi0gICAg
ICAgICAgICAgICAgICAgIG0xLmxvb2tBdCggdmVjdG9yLCB0aGlzLnBvc2l0aW9uLCB0aGlzLnVw
ICk7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkNvbG9yOiBBbHBo
YSBjb21wb25lbnQgb2YgJyArIHN0eWxlICsgJyB3aWxsIGJlIGlnbm9yZWQuJyApOwogCiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdGhpcy5xdWF0ZXJuaW9uLnNldEZyb21S
b3RhdGlvbk1hdHJpeCggbTEgKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfTsKIAot
ICAgICAgICB9KCksCisgICAgICAgICAgICB2YXIgbTsKIAotICAgICAgICBhZGQ6IGZ1bmN0aW9u
ICggb2JqZWN0ICkgeworICAgICAgICAgICAgaWYgKCBtID0gL14oKD86cmdifGhzbClhPylcKFxz
KihbXlwpXSopXCkvLmV4ZWMoIHN0eWxlICkgKSB7CiAKLSAgICAgICAgICAgIGlmICggYXJndW1l
bnRzLmxlbmd0aCA+IDEgKSB7CisgICAgICAgICAgICAgICAgLy8gcmdiIC8gaHNsCiAKLSAgICAg
ICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpICsrICkg
eworICAgICAgICAgICAgICAgIHZhciBjb2xvcjsKKyAgICAgICAgICAgICAgICB2YXIgbmFtZSA9
IG1bIDEgXTsKKyAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50cyA9IG1bIDIgXTsKIAotICAg
ICAgICAgICAgICAgICAgICB0aGlzLmFkZCggYXJndW1lbnRzWyBpIF0gKTsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKCBuYW1lICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBjYXNlICdyZ2InOgorICAgICAgICAgICAgICAgICAgICBjYXNlICdyZ2JhJzoKIAot
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBjb2xvciA9IC9eKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyooLFxzKihbMC05XSpc
Lj9bMC05XSspXHMqKT8kLy5leGVjKCBjb21wb25lbnRzICkgKSB7CiAKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZ2IoMjU1LDAsMCkgcmdiYSgyNTUsMCww
LDAuNSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnIgPSBNYXRoLm1pbiggMjU1
LCBwYXJzZUludCggY29sb3JbIDEgXSwgMTAgKSApIC8gMjU1OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuZyA9IE1hdGgubWluKCAyNTUsIHBhcnNlSW50KCBjb2xvclsgMiBdLCAx
MCApICkgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iID0gTWF0aC5t
aW4oIDI1NSwgcGFyc2VJbnQoIGNvbG9yWyAzIF0sIDEwICkgKSAvIDI1NTsKIAotICAgICAgICAg
ICAgaWYgKCBvYmplY3QgPT09IHRoaXMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGFuZGxlQWxwaGEoIGNvbG9yWyA1IF0gKTsKIAotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJy
b3IoICJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxk
IG9mIGl0c2VsZi4iLCBvYmplY3QgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoICggb2JqZWN0ICYm
IG9iamVjdC5pc09iamVjdDNEICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNv
bG9yID0gL14oXGQrKVwlXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKigsXHMqKFswLTld
KlwuP1swLTldKylccyopPyQvLmV4ZWMoIGNvbXBvbmVudHMgKSApIHsKIAotICAgICAgICAgICAg
ICAgIGlmICggb2JqZWN0LnBhcmVudCAhPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyByZ2IoMTAwJSwwJSwwJSkgcmdiYSgxMDAlLDAlLDAlLDAuNSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnIgPSBNYXRoLm1pbiggMTAwLCBwYXJzZUludCggY29s
b3JbIDEgXSwgMTAgKSApIC8gMTAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
ZyA9IE1hdGgubWluKCAxMDAsIHBhcnNlSW50KCBjb2xvclsgMiBdLCAxMCApICkgLyAxMDA7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iID0gTWF0aC5taW4oIDEwMCwgcGFyc2VJ
bnQoIGNvbG9yWyAzIF0sIDEwICkgKSAvIDEwMDsKIAotICAgICAgICAgICAgICAgICAgICBvYmpl
Y3QucGFyZW50LnJlbW92ZSggb2JqZWN0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGFuZGxlQWxwaGEoIGNvbG9yWyA1IF0gKTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIG9iamVj
dC5wYXJlbnQgPSB0aGlzOwotICAgICAgICAgICAgICAgIG9iamVjdC5kaXNwYXRjaEV2ZW50KCB7
IHR5cGU6ICdhZGRlZCcgfSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKCBvYmplY3QgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBjYXNlICdoc2wnOgorICAgICAgICAgICAgICAgICAgICBjYXNlICdoc2xhJzoKIAotICAgICAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3Qg
YW4gaW5zdGFuY2Ugb2YgVEhSRUUuT2JqZWN0M0QuIiwgb2JqZWN0ICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGNvbG9yID0gL14oWzAtOV0qXC4/WzAtOV0rKVxzKixccyooXGQrKVwl
XHMqLFxzKihcZCspXCVccyooLFxzKihbMC05XSpcLj9bMC05XSspXHMqKT8kLy5leGVjKCBjb21w
b25lbnRzICkgKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBoc2woMTIwLDUwJSw1MCUpIGhzbGEoMTIwLDUwJSw1MCUsMC41KQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBoID0gcGFyc2VGbG9hdCggY29sb3JbIDEgXSApIC8gMzYwOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzID0gcGFyc2VJbnQoIGNvbG9yWyAyIF0s
IDEwICkgLyAxMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGwgPSBwYXJzZUlu
dCggY29sb3JbIDMgXSwgMTAgKSAvIDEwMDsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQWxwaGEoIGNvbG9yWyA1IF0gKTsKIAot
ICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldEhT
TCggaCwgcywgbCApOwogCi0gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gKCBvYmplY3QgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggYXJndW1lbnRzLmxl
bmd0aCA+IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkgKysgKSB7Cisg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKCBhcmd1
bWVudHNbIGkgXSApOworICAgICAgICAgICAgfSBlbHNlIGlmICggbSA9IC9eXCMoW0EtRmEtZjAt
OV0rKSQvLmV4ZWMoIHN0eWxlICkgKSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgLy8gaGV4IGNvbG9yCiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgICAgICAgICB2YXIgaGV4ID0gbVsgMSBdOworICAgICAgICAgICAgICAgIHZhciBzaXplID0g
aGV4Lmxlbmd0aDsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICggc2l6ZSA9
PT0gMyApIHsKIAotICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9m
KCBvYmplY3QgKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gI2ZmMAorICAgICAgICAgICAgICAg
ICAgICB0aGlzLnIgPSBwYXJzZUludCggaGV4LmNoYXJBdCggMCApICsgaGV4LmNoYXJBdCggMCAp
LCAxNiApIC8gMjU1OworICAgICAgICAgICAgICAgICAgICB0aGlzLmcgPSBwYXJzZUludCggaGV4
LmNoYXJBdCggMSApICsgaGV4LmNoYXJBdCggMSApLCAxNiApIC8gMjU1OworICAgICAgICAgICAg
ICAgICAgICB0aGlzLmIgPSBwYXJzZUludCggaGV4LmNoYXJBdCggMiApICsgaGV4LmNoYXJBdCgg
MiApLCAxNiApIC8gMjU1OwogCi0gICAgICAgICAgICBpZiAoIGluZGV4ICE9PSAtIDEgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgb2JqZWN0
LnBhcmVudCA9IG51bGw7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggc2l6ZSA9PT0gNiAp
IHsKIAotICAgICAgICAgICAgICAgIG9iamVjdC5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdyZW1v
dmVkJyB9ICk7CisgICAgICAgICAgICAgICAgICAgIC8vICNmZjAwMDAKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5yID0gcGFyc2VJbnQoIGhleC5jaGFyQXQoIDAgKSArIGhleC5jaGFyQXQoIDEg
KSwgMTYgKSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5nID0gcGFyc2VJbnQoIGhl
eC5jaGFyQXQoIDIgKSArIGhleC5jaGFyQXQoIDMgKSwgMTYgKSAvIDI1NTsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5iID0gcGFyc2VJbnQoIGhleC5jaGFyQXQoIDQgKSArIGhleC5jaGFyQXQo
IDUgKSwgMTYgKSAvIDI1NTsKIAotICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNl
KCBpbmRleCwgMSApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICB9CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIGlmICggc3R5bGUgJiYgc3R5
bGUubGVuZ3RoID4gMCApIHsKIAotICAgICAgICBnZXRPYmplY3RCeUlkOiBmdW5jdGlvbiAoIGlk
ICkgeworICAgICAgICAgICAgICAgIC8vIGNvbG9yIGtleXdvcmRzCisgICAgICAgICAgICAgICAg
dmFyIGhleCA9IENvbG9yS2V5d29yZHNbIHN0eWxlIF07CiAKLSAgICAgICAgICAgIHJldHVybiB0
aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoICdpZCcsIGlkICk7CisgICAgICAgICAgICAgICAgaWYg
KCBoZXggIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgICAg
ICAvLyByZWQKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRIZXgoIGhleCApOwogCi0gICAg
ICAgIGdldE9iamVjdEJ5TmFtZTogZnVuY3Rpb24gKCBuYW1lICkgeworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHko
ICduYW1lJywgbmFtZSApOworICAgICAgICAgICAgICAgICAgICAvLyB1bmtub3duIGNvbG9yCisg
ICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkNvbG9yOiBVbmtub3duIGNv
bG9yICcgKyBzdHlsZSApOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgIGdldE9iamVjdEJ5UHJvcGVydHk6IGZ1bmN0aW9uICggbmFtZSwgdmFsdWUgKSB7CisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggdGhpc1sgbmFtZSBdID09PSB2YWx1ZSApIHJl
dHVybiB0aGlzOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIGZvciAo
IHZhciBpID0gMCwgbCA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAg
ICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5bIGkg
XTsKLSAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0gY2hpbGQuZ2V0T2JqZWN0QnlQcm9wZXJ0
eSggbmFtZSwgdmFsdWUgKTsKKyAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAg
ICAgICAgICAgIGlmICggb2JqZWN0ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICByZXR1
cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRoaXMuciwgdGhpcy5nLCB0aGlzLmIgKTsKIAotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICB9LAogCi0gICAgICAgICAg
ICAgICAgfQorICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIGNvbG9yICkgewogCi0gICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLnIgPSBjb2xvci5yOworICAgICAgICAgICAgdGhpcy5nID0g
Y29sb3IuZzsKKyAgICAgICAgICAgIHRoaXMuYiA9IGNvbG9yLmI7CiAKLSAgICAgICAgICAgIHJl
dHVybiB1bmRlZmluZWQ7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAog
Ci0gICAgICAgIGdldFdvcmxkUG9zaXRpb246IGZ1bmN0aW9uICggdGFyZ2V0ICkgeworICAgICAg
ICBjb3B5R2FtbWFUb0xpbmVhcjogZnVuY3Rpb24gKCBjb2xvciwgZ2FtbWFGYWN0b3IgKSB7CiAK
LSAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICBp
ZiAoIGdhbW1hRmFjdG9yID09PSB1bmRlZmluZWQgKSBnYW1tYUZhY3RvciA9IDIuMDsKIAotICAg
ICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRQb3Np
dGlvbigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7Ci0gICAgICAgICAgICAgICAgdGFyZ2V0
ID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHRoaXMuciA9IE1hdGgucG93KCBjb2xvci5y
LCBnYW1tYUZhY3RvciApOworICAgICAgICAgICAgdGhpcy5nID0gTWF0aC5wb3coIGNvbG9yLmcs
IGdhbW1hRmFjdG9yICk7CisgICAgICAgICAgICB0aGlzLmIgPSBNYXRoLnBvdyggY29sb3IuYiwg
Z2FtbWFGYWN0b3IgKTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAKLSAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0cml4V29ybGQoIHRydWUgKTsKKyAgICAgICAg
fSwKIAotICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5zZXRGcm9tTWF0cml4UG9zaXRpb24oIHRo
aXMubWF0cml4V29ybGQgKTsKKyAgICAgICAgY29weUxpbmVhclRvR2FtbWE6IGZ1bmN0aW9uICgg
Y29sb3IsIGdhbW1hRmFjdG9yICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICBpZiAoIGdh
bW1hRmFjdG9yID09PSB1bmRlZmluZWQgKSBnYW1tYUZhY3RvciA9IDIuMDsKIAotICAgICAgICBn
ZXRXb3JsZFF1YXRlcm5pb246IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBzYWZlSW52
ZXJzZSA9ICggZ2FtbWFGYWN0b3IgPiAwICkgPyAoIDEuMCAvIGdhbW1hRmFjdG9yICkgOiAxLjA7
CiAKLSAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAg
ICB2YXIgc2NhbGUgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdGhpcy5yID0gTWF0aC5w
b3coIGNvbG9yLnIsIHNhZmVJbnZlcnNlICk7CisgICAgICAgICAgICB0aGlzLmcgPSBNYXRoLnBv
dyggY29sb3IuZywgc2FmZUludmVyc2UgKTsKKyAgICAgICAgICAgIHRoaXMuYiA9IE1hdGgucG93
KCBjb2xvci5iLCBzYWZlSW52ZXJzZSApOwogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24g
Z2V0V29ybGRRdWF0ZXJuaW9uKCB0YXJnZXQgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsK
IAotICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRlZmluZWQgKSB7CisgICAgICAg
IH0sCiAKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0M0Q6
IC5nZXRXb3JsZFF1YXRlcm5pb24oKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOwotICAgICAg
ICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgUXVhdGVybmlvbigpOworICAgICAgICBjb252ZXJ0
R2FtbWFUb0xpbmVhcjogZnVuY3Rpb24gKCBnYW1tYUZhY3RvciApIHsKIAotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXMuY29weUdhbW1hVG9MaW5lYXIoIHRoaXMsIGdhbW1hRmFj
dG9yICk7CiAKLSAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCB0cnVlICk7
CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIHRoaXMubWF0cml4
V29ybGQuZGVjb21wb3NlKCBwb3NpdGlvbiwgdGFyZ2V0LCBzY2FsZSApOworICAgICAgICB9LAog
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICAgICAgY29udmVydExpbmVhclRv
R2FtbWE6IGZ1bmN0aW9uICggZ2FtbWFGYWN0b3IgKSB7CiAKLSAgICAgICAgICAgIH07CisgICAg
ICAgICAgICB0aGlzLmNvcHlMaW5lYXJUb0dhbW1hKCB0aGlzLCBnYW1tYUZhY3RvciApOwogCi0g
ICAgICAgIH0oKSwKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIGdldFdvcmxk
U2NhbGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgdmFyIHBvc2l0
aW9uID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgICAgIHZhciBxdWF0ZXJuaW9uID0gbmV3IFF1
YXRlcm5pb24oKTsKKyAgICAgICAgY29weVNSR0JUb0xpbmVhcjogZnVuY3Rpb24gKCBjb2xvciAp
IHsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGdldFdvcmxkU2NhbGUoIHRhcmdldCAp
IHsKKyAgICAgICAgICAgIHRoaXMuciA9IFNSR0JUb0xpbmVhciggY29sb3IuciApOworICAgICAg
ICAgICAgdGhpcy5nID0gU1JHQlRvTGluZWFyKCBjb2xvci5nICk7CisgICAgICAgICAgICB0aGlz
LmIgPSBTUkdCVG9MaW5lYXIoIGNvbG9yLmIgKTsKIAotICAgICAgICAgICAgICAgIGlmICggdGFy
Z2V0ID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAg
ICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkU2Nh
bGUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOwotICAgICAgICAgICAgICAgICAgICB0YXJn
ZXQgPSBuZXcgVmVjdG9yMygpOworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgfQorICAg
ICAgICBjb3B5TGluZWFyVG9TUkdCOiBmdW5jdGlvbiAoIGNvbG9yICkgewogCi0gICAgICAgICAg
ICAgICAgdGhpcy51cGRhdGVNYXRyaXhXb3JsZCggdHJ1ZSApOworICAgICAgICAgICAgdGhpcy5y
ID0gTGluZWFyVG9TUkdCKCBjb2xvci5yICk7CisgICAgICAgICAgICB0aGlzLmcgPSBMaW5lYXJU
b1NSR0IoIGNvbG9yLmcgKTsKKyAgICAgICAgICAgIHRoaXMuYiA9IExpbmVhclRvU1JHQiggY29s
b3IuYiApOwogCi0gICAgICAgICAgICAgICAgdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoIHBv
c2l0aW9uLCBxdWF0ZXJuaW9uLCB0YXJnZXQgKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwog
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICAgICAgfSwKIAotICAgICAgICAg
ICAgfTsKKyAgICAgICAgY29udmVydFNSR0JUb0xpbmVhcjogZnVuY3Rpb24gKCkgewogCi0gICAg
ICAgIH0oKSwKKyAgICAgICAgICAgIHRoaXMuY29weVNSR0JUb0xpbmVhciggdGhpcyApOwogCi0g
ICAgICAgIGdldFdvcmxkRGlyZWN0aW9uOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpczsKIAotICAgICAgICAgICAgdmFyIHF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigp
OworICAgICAgICB9LAogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZ2V0V29ybGREaXJl
Y3Rpb24oIHRhcmdldCApIHsKKyAgICAgICAgY29udmVydExpbmVhclRvU1JHQjogZnVuY3Rpb24g
KCkgewogCi0gICAgICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVmaW5lZCApIHsKKyAg
ICAgICAgICAgIHRoaXMuY29weUxpbmVhclRvU1JHQiggdGhpcyApOwogCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGREaXJlY3Rpb24o
KSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOwotICAgICAgICAgICAgICAgICAgICB0YXJnZXQg
PSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB0aGlzLmdldFdvcmxkUXVhdGVy
bmlvbiggcXVhdGVybmlvbiApOworICAgICAgICBnZXRIZXg6IGZ1bmN0aW9uICgpIHsKIAotICAg
ICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuc2V0KCAwLCAwLCAxICkuYXBwbHlRdWF0ZXJuaW9u
KCBxdWF0ZXJuaW9uICk7CisgICAgICAgICAgICByZXR1cm4gKCB0aGlzLnIgKiAyNTUgKSA8PCAx
NiBeICggdGhpcy5nICogMjU1ICkgPDwgOCBeICggdGhpcy5iICogMjU1ICkgPDwgMDsKIAotICAg
ICAgICAgICAgfTsKKyAgICAgICAgfSwKIAotICAgICAgICB9KCksCisgICAgICAgIGdldEhleFN0
cmluZzogZnVuY3Rpb24gKCkgewogCi0gICAgICAgIHJheWNhc3Q6IGZ1bmN0aW9uICgpIHt9LAor
ICAgICAgICAgICAgcmV0dXJuICggJzAwMDAwMCcgKyB0aGlzLmdldEhleCgpLnRvU3RyaW5nKCAx
NiApICkuc2xpY2UoIC0gNiApOwogCi0gICAgICAgIHRyYXZlcnNlOiBmdW5jdGlvbiAoIGNhbGxi
YWNrICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICBjYWxsYmFjayggdGhpcyApOworICAg
ICAgICBnZXRIU0w6IGZ1bmN0aW9uICggdGFyZ2V0ICkgewogCi0gICAgICAgICAgICB2YXIgY2hp
bGRyZW4gPSB0aGlzLmNoaWxkcmVuOworICAgICAgICAgICAgLy8gaCxzLGwgcmFuZ2VzIGFyZSBp
biAwLjAgLSAxLjAKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gY2hpbGRyZW4u
bGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRl
ZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICBjaGlsZHJlblsgaSBdLnRyYXZlcnNlKCBjYWxs
YmFjayApOworICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkNvbG9yOiAuZ2V0
SFNMKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCcgKTsKKyAgICAgICAgICAgICAgICB0YXJnZXQg
PSB7IGg6IDAsIHM6IDAsIGw6IDAgfTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgIH0sCisg
ICAgICAgICAgICB2YXIgciA9IHRoaXMuciwgZyA9IHRoaXMuZywgYiA9IHRoaXMuYjsKIAotICAg
ICAgICB0cmF2ZXJzZVZpc2libGU6IGZ1bmN0aW9uICggY2FsbGJhY2sgKSB7CisgICAgICAgICAg
ICB2YXIgbWF4ID0gTWF0aC5tYXgoIHIsIGcsIGIgKTsKKyAgICAgICAgICAgIHZhciBtaW4gPSBN
YXRoLm1pbiggciwgZywgYiApOwogCi0gICAgICAgICAgICBpZiAoIHRoaXMudmlzaWJsZSA9PT0g
ZmFsc2UgKSByZXR1cm47CisgICAgICAgICAgICB2YXIgaHVlLCBzYXR1cmF0aW9uOworICAgICAg
ICAgICAgdmFyIGxpZ2h0bmVzcyA9ICggbWluICsgbWF4ICkgLyAyLjA7CiAKLSAgICAgICAgICAg
IGNhbGxiYWNrKCB0aGlzICk7CisgICAgICAgICAgICBpZiAoIG1pbiA9PT0gbWF4ICkgewogCi0g
ICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuOworICAgICAgICAgICAgICAg
IGh1ZSA9IDA7CisgICAgICAgICAgICAgICAgc2F0dXJhdGlvbiA9IDA7CiAKLSAgICAgICAgICAg
IGZvciAoIHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7Cisg
ICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgY2hpbGRyZW5bIGkgXS50cmF2
ZXJzZVZpc2libGUoIGNhbGxiYWNrICk7CisgICAgICAgICAgICAgICAgdmFyIGRlbHRhID0gbWF4
IC0gbWluOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2F0dXJhdGlvbiA9IGxp
Z2h0bmVzcyA8PSAwLjUgPyBkZWx0YSAvICggbWF4ICsgbWluICkgOiBkZWx0YSAvICggMiAtIG1h
eCAtIG1pbiApOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgc3dpdGNoICggbWF4ICkg
ewogCi0gICAgICAgIHRyYXZlcnNlQW5jZXN0b3JzOiBmdW5jdGlvbiAoIGNhbGxiYWNrICkgewor
ICAgICAgICAgICAgICAgICAgICBjYXNlIHI6IGh1ZSA9ICggZyAtIGIgKSAvIGRlbHRhICsgKCBn
IDwgYiA/IDYgOiAwICk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIGc6IGh1ZSA9
ICggYiAtIHIgKSAvIGRlbHRhICsgMjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
YjogaHVlID0gKCByIC0gZyApIC8gZGVsdGEgKyA0OyBicmVhazsKIAotICAgICAgICAgICAgdmFy
IHBhcmVudCA9IHRoaXMucGFyZW50OworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
aWYgKCBwYXJlbnQgIT09IG51bGwgKSB7CisgICAgICAgICAgICAgICAgaHVlIC89IDY7CiAKLSAg
ICAgICAgICAgICAgICBjYWxsYmFjayggcGFyZW50ICk7CisgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICBwYXJlbnQudHJhdmVyc2VBbmNlc3RvcnMoIGNhbGxiYWNrICk7CisgICAgICAg
ICAgICB0YXJnZXQuaCA9IGh1ZTsKKyAgICAgICAgICAgIHRhcmdldC5zID0gc2F0dXJhdGlvbjsK
KyAgICAgICAgICAgIHRhcmdldC5sID0gbGlnaHRuZXNzOwogCi0gICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gdGFyZ2V0OwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgdXBkYXRlTWF0
cml4OiBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAgIHRoaXMubWF0cml4LmNvbXBvc2UoIHRo
aXMucG9zaXRpb24sIHRoaXMucXVhdGVybmlvbiwgdGhpcy5zY2FsZSApOworICAgICAgICBnZXRT
dHlsZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICB0aGlzLm1hdHJpeFdvcmxkTmVlZHNV
cGRhdGUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuICdyZ2IoJyArICggKCB0aGlzLnIgKiAy
NTUgKSB8IDAgKSArICcsJyArICggKCB0aGlzLmcgKiAyNTUgKSB8IDAgKSArICcsJyArICggKCB0
aGlzLmIgKiAyNTUgKSB8IDAgKSArICcpJzsKIAogICAgICAgICB9LAogCi0gICAgICAgIHVwZGF0
ZU1hdHJpeFdvcmxkOiBmdW5jdGlvbiAoIGZvcmNlICkgeworICAgICAgICBvZmZzZXRIU0w6IGZ1
bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLm1hdHJpeEF1dG9VcGRhdGUgKSB0
aGlzLnVwZGF0ZU1hdHJpeCgpOworICAgICAgICAgICAgdmFyIGhzbCA9IHt9OwogCi0gICAgICAg
ICAgICBpZiAoIHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZSB8fCBmb3JjZSApIHsKKyAgICAg
ICAgICAgIHJldHVybiBmdW5jdGlvbiAoIGgsIHMsIGwgKSB7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoIHRoaXMucGFyZW50ID09PSBudWxsICkgeworICAgICAgICAgICAgICAgIHRoaXMuZ2V0SFNM
KCBoc2wgKTsKIAotICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdHJpeFdvcmxkLmNvcHkoIHRo
aXMubWF0cml4ICk7CisgICAgICAgICAgICAgICAgaHNsLmggKz0gaDsgaHNsLnMgKz0gczsgaHNs
LmwgKz0gbDsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhp
cy5zZXRIU0woIGhzbC5oLCBoc2wucywgaHNsLmwgKTsKIAotICAgICAgICAgICAgICAgICAgICB0
aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXMoIHRoaXMucGFyZW50Lm1hdHJpeFdvcmxk
LCB0aGlzLm1hdHJpeCApOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgIHRoaXMubWF0cml4
V29ybGROZWVkc1VwZGF0ZSA9IGZhbHNlOworICAgICAgICB9KCksCiAKLSAgICAgICAgICAgICAg
ICBmb3JjZSA9IHRydWU7CisgICAgICAgIGFkZDogZnVuY3Rpb24gKCBjb2xvciApIHsKIAotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5yICs9IGNvbG9yLnI7CisgICAgICAgICAgICB0
aGlzLmcgKz0gY29sb3IuZzsKKyAgICAgICAgICAgIHRoaXMuYiArPSBjb2xvci5iOwogCi0gICAg
ICAgICAgICAvLyB1cGRhdGUgY2hpbGRyZW4KKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0g
ICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuOworICAgICAgICB9LAogCi0g
ICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBp
ICsrICkgeworICAgICAgICBhZGRDb2xvcnM6IGZ1bmN0aW9uICggY29sb3IxLCBjb2xvcjIgKSB7
CiAKLSAgICAgICAgICAgICAgICBjaGlsZHJlblsgaSBdLnVwZGF0ZU1hdHJpeFdvcmxkKCBmb3Jj
ZSApOworICAgICAgICAgICAgdGhpcy5yID0gY29sb3IxLnIgKyBjb2xvcjIucjsKKyAgICAgICAg
ICAgIHRoaXMuZyA9IGNvbG9yMS5nICsgY29sb3IyLmc7CisgICAgICAgICAgICB0aGlzLmIgPSBj
b2xvcjEuYiArIGNvbG9yMi5iOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
dGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIHRvSlNPTjogZnVuY3Rpb24gKCBtZXRhICkg
eworICAgICAgICBhZGRTY2FsYXI6IGZ1bmN0aW9uICggcyApIHsKIAotICAgICAgICAgICAgLy8g
bWV0YSBpcyBhIHN0cmluZyB3aGVuIGNhbGxlZCBmcm9tIEpTT04uc3RyaW5naWZ5Ci0gICAgICAg
ICAgICB2YXIgaXNSb290T2JqZWN0ID0gKCBtZXRhID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG1l
dGEgPT09ICdzdHJpbmcnICk7CisgICAgICAgICAgICB0aGlzLnIgKz0gczsKKyAgICAgICAgICAg
IHRoaXMuZyArPSBzOworICAgICAgICAgICAgdGhpcy5iICs9IHM7CiAKLSAgICAgICAgICAgIHZh
ciBvdXRwdXQgPSB7fTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAv
LyBtZXRhIGlzIGEgaGFzaCB1c2VkIHRvIGNvbGxlY3QgZ2VvbWV0cmllcywgbWF0ZXJpYWxzLgot
ICAgICAgICAgICAgLy8gbm90IHByb3ZpZGluZyBpdCBpbXBsaWVzIHRoYXQgdGhpcyBpcyB0aGUg
cm9vdCBvYmplY3QKLSAgICAgICAgICAgIC8vIGJlaW5nIHNlcmlhbGl6ZWQuCi0gICAgICAgICAg
ICBpZiAoIGlzUm9vdE9iamVjdCApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIC8v
IGluaXRpYWxpemUgbWV0YSBvYmoKLSAgICAgICAgICAgICAgICBtZXRhID0gewotICAgICAgICAg
ICAgICAgICAgICBnZW9tZXRyaWVzOiB7fSwKLSAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxz
OiB7fSwKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZXM6IHt9LAotICAgICAgICAgICAgICAg
ICAgICBpbWFnZXM6IHt9LAotICAgICAgICAgICAgICAgICAgICBzaGFwZXM6IHt9Ci0gICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgc3ViOiBmdW5jdGlvbiAoIGNvbG9yICkgewogCi0gICAgICAg
ICAgICAgICAgb3V0cHV0Lm1ldGFkYXRhID0gewotICAgICAgICAgICAgICAgICAgICB2ZXJzaW9u
OiA0LjUsCi0gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPYmplY3QnLAotICAgICAgICAgICAg
ICAgICAgICBnZW5lcmF0b3I6ICdPYmplY3QzRC50b0pTT04nCi0gICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIHRoaXMuciA9IE1hdGgubWF4KCAwLCB0aGlzLnIgLSBjb2xvci5yICk7Cisg
ICAgICAgICAgICB0aGlzLmcgPSBNYXRoLm1heCggMCwgdGhpcy5nIC0gY29sb3IuZyApOworICAg
ICAgICAgICAgdGhpcy5iID0gTWF0aC5tYXgoIDAsIHRoaXMuYiAtIGNvbG9yLmIgKTsKIAotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIC8vIHN0
YW5kYXJkIE9iamVjdDNEIHNlcmlhbGl6YXRpb24KKyAgICAgICAgfSwKIAotICAgICAgICAgICAg
dmFyIG9iamVjdCA9IHt9OworICAgICAgICBtdWx0aXBseTogZnVuY3Rpb24gKCBjb2xvciApIHsK
IAotICAgICAgICAgICAgb2JqZWN0LnV1aWQgPSB0aGlzLnV1aWQ7Ci0gICAgICAgICAgICBvYmpl
Y3QudHlwZSA9IHRoaXMudHlwZTsKKyAgICAgICAgICAgIHRoaXMuciAqPSBjb2xvci5yOworICAg
ICAgICAgICAgdGhpcy5nICo9IGNvbG9yLmc7CisgICAgICAgICAgICB0aGlzLmIgKj0gY29sb3Iu
YjsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLm5hbWUgIT09ICcnICkgb2JqZWN0Lm5hbWUgPSB0
aGlzLm5hbWU7Ci0gICAgICAgICAgICBpZiAoIHRoaXMuY2FzdFNoYWRvdyA9PT0gdHJ1ZSApIG9i
amVjdC5jYXN0U2hhZG93ID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmICggdGhpcy5yZWNlaXZlU2hh
ZG93ID09PSB0cnVlICkgb2JqZWN0LnJlY2VpdmVTaGFkb3cgPSB0cnVlOwotICAgICAgICAgICAg
aWYgKCB0aGlzLnZpc2libGUgPT09IGZhbHNlICkgb2JqZWN0LnZpc2libGUgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGlmICggdGhpcy5mcnVzdHVtQ3VsbGVkID09PSBmYWxzZSApIG9iamVjdC5mcnVz
dHVtQ3VsbGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIHRoaXMucmVuZGVyT3JkZXIgIT09
IDAgKSBvYmplY3QucmVuZGVyT3JkZXIgPSB0aGlzLnJlbmRlck9yZGVyOwotICAgICAgICAgICAg
aWYgKCBKU09OLnN0cmluZ2lmeSggdGhpcy51c2VyRGF0YSApICE9PSAne30nICkgb2JqZWN0LnVz
ZXJEYXRhID0gdGhpcy51c2VyRGF0YTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAg
ICAgICAgICBvYmplY3QubGF5ZXJzID0gdGhpcy5sYXllcnMubWFzazsKLSAgICAgICAgICAgIG9i
amVjdC5tYXRyaXggPSB0aGlzLm1hdHJpeC50b0FycmF5KCk7CisgICAgICAgIH0sCiAKLSAgICAg
ICAgICAgIGlmICggdGhpcy5tYXRyaXhBdXRvVXBkYXRlID09PSBmYWxzZSApIG9iamVjdC5tYXRy
aXhBdXRvVXBkYXRlID0gZmFsc2U7CisgICAgICAgIG11bHRpcGx5U2NhbGFyOiBmdW5jdGlvbiAo
IHMgKSB7CiAKLSAgICAgICAgICAgIC8vCisgICAgICAgICAgICB0aGlzLnIgKj0gczsKKyAgICAg
ICAgICAgIHRoaXMuZyAqPSBzOworICAgICAgICAgICAgdGhpcy5iICo9IHM7CiAKLSAgICAgICAg
ICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZSggbGlicmFyeSwgZWxlbWVudCApIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgaWYgKCBsaWJyYXJ5WyBlbGVtZW50LnV1
aWQgXSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAg
IGxpYnJhcnlbIGVsZW1lbnQudXVpZCBdID0gZWxlbWVudC50b0pTT04oIG1ldGEgKTsKKyAgICAg
ICAgbGVycDogZnVuY3Rpb24gKCBjb2xvciwgYWxwaGEgKSB7CiAKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB0aGlzLnIgKz0gKCBjb2xvci5yIC0gdGhpcy5yICkgKiBhbHBoYTsKKyAg
ICAgICAgICAgIHRoaXMuZyArPSAoIGNvbG9yLmcgLSB0aGlzLmcgKSAqIGFscGhhOworICAgICAg
ICAgICAgdGhpcy5iICs9ICggY29sb3IuYiAtIHRoaXMuYiApICogYWxwaGE7CiAKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZWxlbWVudC51dWlkOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
LSAgICAgICAgICAgIH0KKyAgICAgICAgfSwKIAotICAgICAgICAgICAgaWYgKCB0aGlzLmdlb21l
dHJ5ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgIGxlcnBIU0w6IGZ1bmN0aW9uICgpIHsKIAot
ICAgICAgICAgICAgICAgIG9iamVjdC5nZW9tZXRyeSA9IHNlcmlhbGl6ZSggbWV0YS5nZW9tZXRy
aWVzLCB0aGlzLmdlb21ldHJ5ICk7CisgICAgICAgICAgICB2YXIgaHNsQSA9IHsgaDogMCwgczog
MCwgbDogMCB9OworICAgICAgICAgICAgdmFyIGhzbEIgPSB7IGg6IDAsIHM6IDAsIGw6IDAgfTsK
IAotICAgICAgICAgICAgICAgIHZhciBwYXJhbWV0ZXJzID0gdGhpcy5nZW9tZXRyeS5wYXJhbWV0
ZXJzOworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGxlcnBIU0woIGNvbG9yLCBhbHBoYSAp
IHsKIAotICAgICAgICAgICAgICAgIGlmICggcGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkICYmIHBh
cmFtZXRlcnMuc2hhcGVzICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgdGhpcy5n
ZXRIU0woIGhzbEEgKTsKKyAgICAgICAgICAgICAgICBjb2xvci5nZXRIU0woIGhzbEIgKTsKIAot
ICAgICAgICAgICAgICAgICAgICB2YXIgc2hhcGVzID0gcGFyYW1ldGVycy5zaGFwZXM7CisgICAg
ICAgICAgICAgICAgdmFyIGggPSBfTWF0aC5sZXJwKCBoc2xBLmgsIGhzbEIuaCwgYWxwaGEgKTsK
KyAgICAgICAgICAgICAgICB2YXIgcyA9IF9NYXRoLmxlcnAoIGhzbEEucywgaHNsQi5zLCBhbHBo
YSApOworICAgICAgICAgICAgICAgIHZhciBsID0gX01hdGgubGVycCggaHNsQS5sLCBoc2xCLmws
IGFscGhhICk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBBcnJheS5pc0FycmF5KCBzaGFw
ZXMgKSApIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNldEhTTCggaCwgcywgbCApOwogCi0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBzaGFwZXMubGVuZ3RoOyBp
IDwgbDsgaSArKyApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBzaGFwZSA9IHNoYXBlc1sgaSBdOworICAgICAgICAgICAg
fTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZSggbWV0YS5zaGFwZXMs
IHNoYXBlICk7CisgICAgICAgIH0oKSwKIAotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICBlcXVhbHM6IGZ1bmN0aW9uICggYyApIHsKIAotICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgcmV0dXJuICggYy5yID09PSB0aGlzLnIgKSAmJiAoIGMuZyA9PT0g
dGhpcy5nICkgJiYgKCBjLmIgPT09IHRoaXMuYiApOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzZXJpYWxpemUoIG1ldGEuc2hhcGVzLCBzaGFwZXMgKTsKKyAgICAgICAgfSwKIAotICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgIGZyb21BcnJheTogZnVuY3Rpb24gKCBhcnJheSwgb2Zm
c2V0ICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBvZmZzZXQgPT09
IHVuZGVmaW5lZCApIG9mZnNldCA9IDA7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuciA9IGFycmF5WyBvZmZzZXQgXTsKKyAgICAgICAgICAgIHRoaXMuZyA9IGFycmF5WyBvZmZz
ZXQgKyAxIF07CisgICAgICAgICAgICB0aGlzLmIgPSBhcnJheVsgb2Zmc2V0ICsgMiBdOwogCi0g
ICAgICAgICAgICBpZiAoIHRoaXMubWF0ZXJpYWwgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgaWYgKCBBcnJheS5pc0FycmF5KCB0
aGlzLm1hdGVyaWFsICkgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgdmFy
IHV1aWRzID0gW107CisgICAgICAgIHRvQXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9mZnNldCAp
IHsKIAotICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLm1hdGVy
aWFsLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisgICAgICAgICAgICBpZiAoIGFycmF5ID09PSB1
bmRlZmluZWQgKSBhcnJheSA9IFtdOworICAgICAgICAgICAgaWYgKCBvZmZzZXQgPT09IHVuZGVm
aW5lZCApIG9mZnNldCA9IDA7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHV1aWRzLnB1c2go
IHNlcmlhbGl6ZSggbWV0YS5tYXRlcmlhbHMsIHRoaXMubWF0ZXJpYWxbIGkgXSApICk7CisgICAg
ICAgICAgICBhcnJheVsgb2Zmc2V0IF0gPSB0aGlzLnI7CisgICAgICAgICAgICBhcnJheVsgb2Zm
c2V0ICsgMSBdID0gdGhpcy5nOworICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDIgXSA9IHRo
aXMuYjsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7
CiAKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm1hdGVyaWFsID0gdXVpZHM7CisgICAgICAg
IH0sCiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICB0b0pTT046IGZ1bmN0aW9u
ICgpIHsKIAotICAgICAgICAgICAgICAgICAgICBvYmplY3QubWF0ZXJpYWwgPSBzZXJpYWxpemUo
IG1ldGEubWF0ZXJpYWxzLCB0aGlzLm1hdGVyaWFsICk7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5nZXRIZXgoKTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgICAg
ICB9CisgICAgfSApOwogCi0gICAgICAgICAgICAvLworICAgIC8qKgorICAgICAqIEBhdXRob3Ig
bXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0
dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KKyAgICAgKi8KIAotICAgICAgICAgICAgaWYgKCB0aGlz
LmNoaWxkcmVuLmxlbmd0aCA+IDAgKSB7CisgICAgZnVuY3Rpb24gRmFjZTMoIGEsIGIsIGMsIG5v
cm1hbCwgY29sb3IsIG1hdGVyaWFsSW5kZXggKSB7CiAKLSAgICAgICAgICAgICAgICBvYmplY3Qu
Y2hpbGRyZW4gPSBbXTsKKyAgICAgICAgdGhpcy5hID0gYTsKKyAgICAgICAgdGhpcy5iID0gYjsK
KyAgICAgICAgdGhpcy5jID0gYzsKIAotICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsg
aSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpICsrICkgeworICAgICAgICB0aGlzLm5vcm1hbCA9
ICggbm9ybWFsICYmIG5vcm1hbC5pc1ZlY3RvcjMgKSA/IG5vcm1hbCA6IG5ldyBWZWN0b3IzKCk7
CisgICAgICAgIHRoaXMudmVydGV4Tm9ybWFscyA9IEFycmF5LmlzQXJyYXkoIG5vcm1hbCApID8g
bm9ybWFsIDogW107CiAKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmNoaWxkcmVuLnB1c2go
IHRoaXMuY2hpbGRyZW5bIGkgXS50b0pTT04oIG1ldGEgKS5vYmplY3QgKTsKKyAgICAgICAgdGhp
cy5jb2xvciA9ICggY29sb3IgJiYgY29sb3IuaXNDb2xvciApID8gY29sb3IgOiBuZXcgQ29sb3Io
KTsKKyAgICAgICAgdGhpcy52ZXJ0ZXhDb2xvcnMgPSBBcnJheS5pc0FycmF5KCBjb2xvciApID8g
Y29sb3IgOiBbXTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgdGhpcy5tYXRlcmlhbElu
ZGV4ID0gbWF0ZXJpYWxJbmRleCAhPT0gdW5kZWZpbmVkID8gbWF0ZXJpYWxJbmRleCA6IDA7CiAK
LSAgICAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgICAgIGlmICggaXNSb290T2JqZWN0ICkg
eworICAgIE9iamVjdC5hc3NpZ24oIEZhY2UzLnByb3RvdHlwZSwgewogCi0gICAgICAgICAgICAg
ICAgdmFyIGdlb21ldHJpZXMgPSBleHRyYWN0RnJvbUNhY2hlKCBtZXRhLmdlb21ldHJpZXMgKTsK
LSAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWxzID0gZXh0cmFjdEZyb21DYWNoZSggbWV0YS5t
YXRlcmlhbHMgKTsKLSAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZXMgPSBleHRyYWN0RnJvbUNh
Y2hlKCBtZXRhLnRleHR1cmVzICk7Ci0gICAgICAgICAgICAgICAgdmFyIGltYWdlcyA9IGV4dHJh
Y3RGcm9tQ2FjaGUoIG1ldGEuaW1hZ2VzICk7Ci0gICAgICAgICAgICAgICAgdmFyIHNoYXBlcyA9
IGV4dHJhY3RGcm9tQ2FjaGUoIG1ldGEuc2hhcGVzICk7CisgICAgICAgIGNsb25lOiBmdW5jdGlv
biAoKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJpZXMubGVuZ3RoID4gMCApIG91
dHB1dC5nZW9tZXRyaWVzID0gZ2VvbWV0cmllczsKLSAgICAgICAgICAgICAgICBpZiAoIG1hdGVy
aWFscy5sZW5ndGggPiAwICkgb3V0cHV0Lm1hdGVyaWFscyA9IG1hdGVyaWFsczsKLSAgICAgICAg
ICAgICAgICBpZiAoIHRleHR1cmVzLmxlbmd0aCA+IDAgKSBvdXRwdXQudGV4dHVyZXMgPSB0ZXh0
dXJlczsKLSAgICAgICAgICAgICAgICBpZiAoIGltYWdlcy5sZW5ndGggPiAwICkgb3V0cHV0Lmlt
YWdlcyA9IGltYWdlczsKLSAgICAgICAgICAgICAgICBpZiAoIHNoYXBlcy5sZW5ndGggPiAwICkg
b3V0cHV0LnNoYXBlcyA9IHNoYXBlczsKKyAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25z
dHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKIAotICAgICAgICAgICAgfQorICAgICAgICB9LAogCi0g
ICAgICAgICAgICBvdXRwdXQub2JqZWN0ID0gb2JqZWN0OworICAgICAgICBjb3B5OiBmdW5jdGlv
biAoIHNvdXJjZSApIHsKIAotICAgICAgICAgICAgcmV0dXJuIG91dHB1dDsKKyAgICAgICAgICAg
IHRoaXMuYSA9IHNvdXJjZS5hOworICAgICAgICAgICAgdGhpcy5iID0gc291cmNlLmI7CisgICAg
ICAgICAgICB0aGlzLmMgPSBzb3VyY2UuYzsKIAotICAgICAgICAgICAgLy8gZXh0cmFjdCBkYXRh
IGZyb20gdGhlIGNhY2hlIGhhc2gKLSAgICAgICAgICAgIC8vIHJlbW92ZSBtZXRhZGF0YSBvbiBl
YWNoIGl0ZW0KLSAgICAgICAgICAgIC8vIGFuZCByZXR1cm4gYXMgYXJyYXkKLSAgICAgICAgICAg
IGZ1bmN0aW9uIGV4dHJhY3RGcm9tQ2FjaGUoIGNhY2hlICkgeworICAgICAgICAgICAgdGhpcy5u
b3JtYWwuY29weSggc291cmNlLm5vcm1hbCApOworICAgICAgICAgICAgdGhpcy5jb2xvci5jb3B5
KCBzb3VyY2UuY29sb3IgKTsKIAotICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbXTsKLSAg
ICAgICAgICAgICAgICBmb3IgKCB2YXIga2V5IGluIGNhY2hlICkgeworICAgICAgICAgICAgdGhp
cy5tYXRlcmlhbEluZGV4ID0gc291cmNlLm1hdGVyaWFsSW5kZXg7CiAKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIGRhdGEgPSBjYWNoZVsga2V5IF07Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSBkYXRhLm1ldGFkYXRhOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCggZGF0YSAp
OworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IHNvdXJjZS52ZXJ0ZXhOb3JtYWxz
Lmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewogCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgICAgICAgICAgICAgdGhpcy52ZXJ0ZXhOb3JtYWxz
WyBpIF0gPSBzb3VyY2UudmVydGV4Tm9ybWFsc1sgaSBdLmNsb25lKCk7CiAKICAgICAgICAgICAg
IH0KIAotICAgICAgICB9LAotCi0gICAgICAgIGNsb25lOiBmdW5jdGlvbiAoIHJlY3Vyc2l2ZSAp
IHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBzb3VyY2UudmVydGV4Q29sb3Jz
Lmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewogCi0gICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMu
Y29uc3RydWN0b3IoKS5jb3B5KCB0aGlzLCByZWN1cnNpdmUgKTsKKyAgICAgICAgICAgICAgICB0
aGlzLnZlcnRleENvbG9yc1sgaSBdID0gc291cmNlLnZlcnRleENvbG9yc1sgaSBdLmNsb25lKCk7
CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIH0KIAotICAgICAgICBjb3B5OiBmdW5jdGlvbiAo
IHNvdXJjZSwgcmVjdXJzaXZlICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAg
ICAgICAgIGlmICggcmVjdXJzaXZlID09PSB1bmRlZmluZWQgKSByZWN1cnNpdmUgPSB0cnVlOwor
ICAgICAgICB9CiAKLSAgICAgICAgICAgIHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lOworICAgIH0g
KTsKIAotICAgICAgICAgICAgdGhpcy51cC5jb3B5KCBzb3VyY2UudXAgKTsKKyAgICAvKioKKyAg
ICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqIEBhdXRob3Ig
YWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCisgICAgICovCiAKLSAgICAgICAg
ICAgIHRoaXMucG9zaXRpb24uY29weSggc291cmNlLnBvc2l0aW9uICk7Ci0gICAgICAgICAgICB0
aGlzLnF1YXRlcm5pb24uY29weSggc291cmNlLnF1YXRlcm5pb24gKTsKLSAgICAgICAgICAgIHRo
aXMuc2NhbGUuY29weSggc291cmNlLnNjYWxlICk7CisgICAgdmFyIG1hdGVyaWFsSWQgPSAwOwog
Ci0gICAgICAgICAgICB0aGlzLm1hdHJpeC5jb3B5KCBzb3VyY2UubWF0cml4ICk7Ci0gICAgICAg
ICAgICB0aGlzLm1hdHJpeFdvcmxkLmNvcHkoIHNvdXJjZS5tYXRyaXhXb3JsZCApOworICAgIGZ1
bmN0aW9uIE1hdGVyaWFsKCkgewogCi0gICAgICAgICAgICB0aGlzLm1hdHJpeEF1dG9VcGRhdGUg
PSBzb3VyY2UubWF0cml4QXV0b1VwZGF0ZTsKLSAgICAgICAgICAgIHRoaXMubWF0cml4V29ybGRO
ZWVkc1VwZGF0ZSA9IHNvdXJjZS5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlOworICAgICAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsICdpZCcsIHsgdmFsdWU6IG1hdGVyaWFsSWQgKysgfSAp
OwogCi0gICAgICAgICAgICB0aGlzLmxheWVycy5tYXNrID0gc291cmNlLmxheWVycy5tYXNrOwot
ICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gc291cmNlLnZpc2libGU7CisgICAgICAgIHRoaXMu
dXVpZCA9IF9NYXRoLmdlbmVyYXRlVVVJRCgpOwogCi0gICAgICAgICAgICB0aGlzLmNhc3RTaGFk
b3cgPSBzb3VyY2UuY2FzdFNoYWRvdzsKLSAgICAgICAgICAgIHRoaXMucmVjZWl2ZVNoYWRvdyA9
IHNvdXJjZS5yZWNlaXZlU2hhZG93OworICAgICAgICB0aGlzLm5hbWUgPSAnJzsKKyAgICAgICAg
dGhpcy50eXBlID0gJ01hdGVyaWFsJzsKIAotICAgICAgICAgICAgdGhpcy5mcnVzdHVtQ3VsbGVk
ID0gc291cmNlLmZydXN0dW1DdWxsZWQ7Ci0gICAgICAgICAgICB0aGlzLnJlbmRlck9yZGVyID0g
c291cmNlLnJlbmRlck9yZGVyOworICAgICAgICB0aGlzLmZvZyA9IHRydWU7CisgICAgICAgIHRo
aXMubGlnaHRzID0gdHJ1ZTsKIAotICAgICAgICAgICAgdGhpcy51c2VyRGF0YSA9IEpTT04ucGFy
c2UoIEpTT04uc3RyaW5naWZ5KCBzb3VyY2UudXNlckRhdGEgKSApOworICAgICAgICB0aGlzLmJs
ZW5kaW5nID0gTm9ybWFsQmxlbmRpbmc7CisgICAgICAgIHRoaXMuc2lkZSA9IEZyb250U2lkZTsK
KyAgICAgICAgdGhpcy5mbGF0U2hhZGluZyA9IGZhbHNlOworICAgICAgICB0aGlzLnZlcnRleFRh
bmdlbnRzID0gZmFsc2U7CisgICAgICAgIHRoaXMudmVydGV4Q29sb3JzID0gTm9Db2xvcnM7IC8v
IFRIUkVFLk5vQ29sb3JzLCBUSFJFRS5WZXJ0ZXhDb2xvcnMsIFRIUkVFLkZhY2VDb2xvcnMKIAot
ICAgICAgICAgICAgaWYgKCByZWN1cnNpdmUgPT09IHRydWUgKSB7CisgICAgICAgIHRoaXMub3Bh
Y2l0eSA9IDE7CisgICAgICAgIHRoaXMudHJhbnNwYXJlbnQgPSBmYWxzZTsKIAotICAgICAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IHNvdXJjZS5jaGlsZHJlbi5sZW5ndGg7IGkgKysg
KSB7CisgICAgICAgIHRoaXMuYmxlbmRTcmMgPSBTcmNBbHBoYUZhY3RvcjsKKyAgICAgICAgdGhp
cy5ibGVuZERzdCA9IE9uZU1pbnVzU3JjQWxwaGFGYWN0b3I7CisgICAgICAgIHRoaXMuYmxlbmRF
cXVhdGlvbiA9IEFkZEVxdWF0aW9uOworICAgICAgICB0aGlzLmJsZW5kU3JjQWxwaGEgPSBudWxs
OworICAgICAgICB0aGlzLmJsZW5kRHN0QWxwaGEgPSBudWxsOworICAgICAgICB0aGlzLmJsZW5k
RXF1YXRpb25BbHBoYSA9IG51bGw7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0g
c291cmNlLmNoaWxkcmVuWyBpIF07Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkKCBjaGls
ZC5jbG9uZSgpICk7CisgICAgICAgIHRoaXMuZGVwdGhGdW5jID0gTGVzc0VxdWFsRGVwdGg7Cisg
ICAgICAgIHRoaXMuZGVwdGhUZXN0ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5kZXB0aFdyaXRlID0g
dHJ1ZTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgdGhpcy5jbGlwcGluZ1BsYW5lcyA9
IG51bGw7CisgICAgICAgIHRoaXMuY2xpcEludGVyc2VjdGlvbiA9IGZhbHNlOworICAgICAgICB0
aGlzLmNsaXBTaGFkb3dzID0gZmFsc2U7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgdGhpcy5z
aGFkb3dTaWRlID0gbnVsbDsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIHRo
aXMuY29sb3JXcml0ZSA9IHRydWU7CiAKLSAgICAgICAgfQorICAgICAgICB0aGlzLnByZWNpc2lv
biA9IG51bGw7IC8vIG92ZXJyaWRlIHRoZSByZW5kZXJlcidzIGRlZmF1bHQgcHJlY2lzaW9uIGZv
ciB0aGlzIG1hdGVyaWFsCiAKLSAgICB9ICk7CisgICAgICAgIHRoaXMucG9seWdvbk9mZnNldCA9
IGZhbHNlOworICAgICAgICB0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IgPSAwOworICAgICAgICB0
aGlzLnBvbHlnb25PZmZzZXRVbml0cyA9IDA7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1y
ZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqIEBhdXRob3IgbWlrYWVsIGVtdGluZ2Vy
IC8gaHR0cDovL2dvbW8uc2UvCi0gICAgICogQGF1dGhvciBXZXN0TGFuZ2xleSAvIGh0dHA6Ly9n
aXRodWIuY29tL1dlc3RMYW5nbGV5Ci0gICAgKi8KKyAgICAgICAgdGhpcy5kaXRoZXJpbmcgPSBm
YWxzZTsKIAotICAgIGZ1bmN0aW9uIENhbWVyYSgpIHsKKyAgICAgICAgdGhpcy5hbHBoYVRlc3Qg
PSAwOworICAgICAgICB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IGZhbHNlOwogCi0gICAgICAg
IE9iamVjdDNELmNhbGwoIHRoaXMgKTsKKyAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTsKIAot
ICAgICAgICB0aGlzLnR5cGUgPSAnQ2FtZXJhJzsKKyAgICAgICAgdGhpcy51c2VyRGF0YSA9IHt9
OwogCi0gICAgICAgIHRoaXMubWF0cml4V29ybGRJbnZlcnNlID0gbmV3IE1hdHJpeDQoKTsKLSAg
ICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IE1hdHJpeDQoKTsKKyAgICAgICAgdGhp
cy5uZWVkc1VwZGF0ZSA9IHRydWU7CiAKICAgICB9CiAKLSAgICBDYW1lcmEucHJvdG90eXBlID0g
T2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggT2JqZWN0M0QucHJvdG90eXBlICksIHsKKyAg
ICBNYXRlcmlhbC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBFdmVu
dERpc3BhdGNoZXIucHJvdG90eXBlICksIHsKIAotICAgICAgICBjb25zdHJ1Y3RvcjogQ2FtZXJh
LAorICAgICAgICBjb25zdHJ1Y3RvcjogTWF0ZXJpYWwsCiAKLSAgICAgICAgaXNDYW1lcmE6IHRy
dWUsCisgICAgICAgIGlzTWF0ZXJpYWw6IHRydWUsCiAKLSAgICAgICAgY29weTogZnVuY3Rpb24g
KCBzb3VyY2UsIHJlY3Vyc2l2ZSApIHsKKyAgICAgICAgb25CZWZvcmVDb21waWxlOiBmdW5jdGlv
biAoKSB7fSwKIAotICAgICAgICAgICAgT2JqZWN0M0QucHJvdG90eXBlLmNvcHkuY2FsbCggdGhp
cywgc291cmNlLCByZWN1cnNpdmUgKTsKKyAgICAgICAgc2V0VmFsdWVzOiBmdW5jdGlvbiAoIHZh
bHVlcyApIHsKIAotICAgICAgICAgICAgdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSggc291
cmNlLm1hdHJpeFdvcmxkSW52ZXJzZSApOwotICAgICAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0
cml4LmNvcHkoIHNvdXJjZS5wcm9qZWN0aW9uTWF0cml4ICk7CisgICAgICAgICAgICBpZiAoIHZh
bHVlcyA9PT0gdW5kZWZpbmVkICkgcmV0dXJuOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsK
KyAgICAgICAgICAgIGZvciAoIHZhciBrZXkgaW4gdmFsdWVzICkgewogCi0gICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gdmFsdWVzWyBrZXkgXTsKIAotICAgICAgICBn
ZXRXb3JsZERpcmVjdGlvbjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGlmICggbmV3
VmFsdWUgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgdmFyIHF1YXRlcm5pb24gPSBu
ZXcgUXVhdGVybmlvbigpOworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICJUSFJF
RS5NYXRlcmlhbDogJyIgKyBrZXkgKyAiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIgKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
biBnZXRXb3JsZERpcmVjdGlvbiggdGFyZ2V0ICkgeworICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAg
ICAgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgaWYgc2hhZGluZyBpcyBzZXQgaW4gdGhl
IGNvbnN0cnVjdG9yCisgICAgICAgICAgICAgICAgaWYgKCBrZXkgPT09ICdzaGFkaW5nJyApIHsK
IAotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5DYW1lcmE6IC5nZXRX
b3JsZERpcmVjdGlvbigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7Ci0gICAgICAgICAgICAg
ICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnNv
bGUud2FybiggJ1RIUkVFLicgKyB0aGlzLnR5cGUgKyAnOiAuc2hhZGluZyBoYXMgYmVlbiByZW1v
dmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuJyApOworICAgICAgICAg
ICAgICAgICAgICB0aGlzLmZsYXRTaGFkaW5nID0gKCBuZXdWYWx1ZSA9PT0gRmxhdFNoYWRpbmcg
KSA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0aGlzLmdldFdvcmxkUXVhdGVybmlvbigg
cXVhdGVybmlvbiApOworICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzWyBr
ZXkgXTsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuc2V0KCAwLCAwLCAtIDEgKS5h
cHBseVF1YXRlcm5pb24oIHF1YXRlcm5pb24gKTsKKyAgICAgICAgICAgICAgICBpZiAoIGN1cnJl
bnRWYWx1ZSA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgICAgICBjb25zb2xlLndhcm4oICJUSFJFRS4iICsgdGhpcy50eXBlICsgIjogJyIgKyBrZXkg
KyAiJyBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGlzIG1hdGVyaWFsLiIgKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgfSgpLAorICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICB1cGRhdGVNYXRyaXhXb3JsZDogZnVuY3Rpb24gKCBmb3JjZSApIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIGN1cnJlbnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUuaXNDb2xvciApIHsKIAot
ICAgICAgICAgICAgT2JqZWN0M0QucHJvdG90eXBlLnVwZGF0ZU1hdHJpeFdvcmxkLmNhbGwoIHRo
aXMsIGZvcmNlICk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZS5zZXQoIG5ld1Zh
bHVlICk7CiAKLSAgICAgICAgICAgIHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmdldEludmVyc2Uo
IHRoaXMubWF0cml4V29ybGQgKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAoIGN1cnJl
bnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUuaXNWZWN0b3IzICkgJiYgKCBuZXdWYWx1ZSAmJiBuZXdW
YWx1ZS5pc1ZlY3RvcjMgKSApIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBj
dXJyZW50VmFsdWUuY29weSggbmV3VmFsdWUgKTsKIAotICAgICAgICBjbG9uZTogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcg
dGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICAgICAgdGhp
c1sga2V5IF0gPSBuZXdWYWx1ZTsKIAotICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogCi0g
ICAgfSApOworICAgICAgICAgICAgfQogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBhbHRlcmVk
cSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KLSAgICAgKiBAYXV0aG9yIGFyb3NlIC8gaHR0
cDovL2dpdGh1Yi5jb20vYXJvc2UKLSAgICAgKi8KKyAgICAgICAgfSwKIAotICAgIGZ1bmN0aW9u
IE9ydGhvZ3JhcGhpY0NhbWVyYSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIg
KSB7CisgICAgICAgIHRvSlNPTjogZnVuY3Rpb24gKCBtZXRhICkgewogCi0gICAgICAgIENhbWVy
YS5jYWxsKCB0aGlzICk7CisgICAgICAgICAgICB2YXIgaXNSb290ID0gKCBtZXRhID09PSB1bmRl
ZmluZWQgfHwgdHlwZW9mIG1ldGEgPT09ICdzdHJpbmcnICk7CiAKLSAgICAgICAgdGhpcy50eXBl
ID0gJ09ydGhvZ3JhcGhpY0NhbWVyYSc7CisgICAgICAgICAgICBpZiAoIGlzUm9vdCApIHsKIAot
ICAgICAgICB0aGlzLnpvb20gPSAxOwotICAgICAgICB0aGlzLnZpZXcgPSBudWxsOworICAgICAg
ICAgICAgICAgIG1ldGEgPSB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVzOiB7fSwKKyAg
ICAgICAgICAgICAgICAgICAgaW1hZ2VzOiB7fQorICAgICAgICAgICAgICAgIH07CisKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0OwotICAgICAgICB0aGlzLnJpZ2h0
ID0gcmlnaHQ7Ci0gICAgICAgIHRoaXMudG9wID0gdG9wOwotICAgICAgICB0aGlzLmJvdHRvbSA9
IGJvdHRvbTsKKyAgICAgICAgICAgIHZhciBkYXRhID0geworICAgICAgICAgICAgICAgIG1ldGFk
YXRhOiB7CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb246IDQuNSwKKyAgICAgICAgICAgICAg
ICAgICAgdHlwZTogJ01hdGVyaWFsJywKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiAn
TWF0ZXJpYWwudG9KU09OJworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CiAKLSAg
ICAgICAgdGhpcy5uZWFyID0gKCBuZWFyICE9PSB1bmRlZmluZWQgKSA/IG5lYXIgOiAwLjE7Ci0g
ICAgICAgIHRoaXMuZmFyID0gKCBmYXIgIT09IHVuZGVmaW5lZCApID8gZmFyIDogMjAwMDsKKyAg
ICAgICAgICAgIC8vIHN0YW5kYXJkIE1hdGVyaWFsIHNlcmlhbGl6YXRpb24KKyAgICAgICAgICAg
IGRhdGEudXVpZCA9IHRoaXMudXVpZDsKKyAgICAgICAgICAgIGRhdGEudHlwZSA9IHRoaXMudHlw
ZTsKIAotICAgICAgICB0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTsKKyAgICAgICAgICAg
IGlmICggdGhpcy5uYW1lICE9PSAnJyApIGRhdGEubmFtZSA9IHRoaXMubmFtZTsKIAotICAgIH0K
KyAgICAgICAgICAgIGlmICggdGhpcy5jb2xvciAmJiB0aGlzLmNvbG9yLmlzQ29sb3IgKSBkYXRh
LmNvbG9yID0gdGhpcy5jb2xvci5nZXRIZXgoKTsKIAotICAgIE9ydGhvZ3JhcGhpY0NhbWVyYS5w
cm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBDYW1lcmEucHJvdG90eXBl
ICksIHsKKyAgICAgICAgICAgIGlmICggdGhpcy5yb3VnaG5lc3MgIT09IHVuZGVmaW5lZCApIGRh
dGEucm91Z2huZXNzID0gdGhpcy5yb3VnaG5lc3M7CisgICAgICAgICAgICBpZiAoIHRoaXMubWV0
YWxuZXNzICE9PSB1bmRlZmluZWQgKSBkYXRhLm1ldGFsbmVzcyA9IHRoaXMubWV0YWxuZXNzOwog
Ci0gICAgICAgIGNvbnN0cnVjdG9yOiBPcnRob2dyYXBoaWNDYW1lcmEsCisgICAgICAgICAgICBp
ZiAoIHRoaXMuZW1pc3NpdmUgJiYgdGhpcy5lbWlzc2l2ZS5pc0NvbG9yICkgZGF0YS5lbWlzc2l2
ZSA9IHRoaXMuZW1pc3NpdmUuZ2V0SGV4KCk7CisgICAgICAgICAgICBpZiAoIHRoaXMuZW1pc3Np
dmVJbnRlbnNpdHkgJiYgdGhpcy5lbWlzc2l2ZUludGVuc2l0eSAhPT0gMSApIGRhdGEuZW1pc3Np
dmVJbnRlbnNpdHkgPSB0aGlzLmVtaXNzaXZlSW50ZW5zaXR5OwogCi0gICAgICAgIGlzT3J0aG9n
cmFwaGljQ2FtZXJhOiB0cnVlLAorICAgICAgICAgICAgaWYgKCB0aGlzLnNwZWN1bGFyICYmIHRo
aXMuc3BlY3VsYXIuaXNDb2xvciApIGRhdGEuc3BlY3VsYXIgPSB0aGlzLnNwZWN1bGFyLmdldEhl
eCgpOworICAgICAgICAgICAgaWYgKCB0aGlzLnNoaW5pbmVzcyAhPT0gdW5kZWZpbmVkICkgZGF0
YS5zaGluaW5lc3MgPSB0aGlzLnNoaW5pbmVzczsKKyAgICAgICAgICAgIGlmICggdGhpcy5jbGVh
ckNvYXQgIT09IHVuZGVmaW5lZCApIGRhdGEuY2xlYXJDb2F0ID0gdGhpcy5jbGVhckNvYXQ7Cisg
ICAgICAgICAgICBpZiAoIHRoaXMuY2xlYXJDb2F0Um91Z2huZXNzICE9PSB1bmRlZmluZWQgKSBk
YXRhLmNsZWFyQ29hdFJvdWdobmVzcyA9IHRoaXMuY2xlYXJDb2F0Um91Z2huZXNzOwogCi0gICAg
ICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlLCByZWN1cnNpdmUgKSB7CisgICAgICAgICAgICBp
ZiAoIHRoaXMubWFwICYmIHRoaXMubWFwLmlzVGV4dHVyZSApIGRhdGEubWFwID0gdGhpcy5tYXAu
dG9KU09OKCBtZXRhICkudXVpZDsKKyAgICAgICAgICAgIGlmICggdGhpcy5tYXRjYXAgJiYgdGhp
cy5tYXRjYXAuaXNUZXh0dXJlICkgZGF0YS5tYXRjYXAgPSB0aGlzLm1hdGNhcC50b0pTT04oIG1l
dGEgKS51dWlkOworICAgICAgICAgICAgaWYgKCB0aGlzLmFscGhhTWFwICYmIHRoaXMuYWxwaGFN
YXAuaXNUZXh0dXJlICkgZGF0YS5hbHBoYU1hcCA9IHRoaXMuYWxwaGFNYXAudG9KU09OKCBtZXRh
ICkudXVpZDsKKyAgICAgICAgICAgIGlmICggdGhpcy5saWdodE1hcCAmJiB0aGlzLmxpZ2h0TWFw
LmlzVGV4dHVyZSApIGRhdGEubGlnaHRNYXAgPSB0aGlzLmxpZ2h0TWFwLnRvSlNPTiggbWV0YSAp
LnV1aWQ7CiAKLSAgICAgICAgICAgIENhbWVyYS5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBz
b3VyY2UsIHJlY3Vyc2l2ZSApOworICAgICAgICAgICAgaWYgKCB0aGlzLmFvTWFwICYmIHRoaXMu
YW9NYXAuaXNUZXh0dXJlICkgewogCi0gICAgICAgICAgICB0aGlzLmxlZnQgPSBzb3VyY2UubGVm
dDsKLSAgICAgICAgICAgIHRoaXMucmlnaHQgPSBzb3VyY2UucmlnaHQ7Ci0gICAgICAgICAgICB0
aGlzLnRvcCA9IHNvdXJjZS50b3A7Ci0gICAgICAgICAgICB0aGlzLmJvdHRvbSA9IHNvdXJjZS5i
b3R0b207Ci0gICAgICAgICAgICB0aGlzLm5lYXIgPSBzb3VyY2UubmVhcjsKLSAgICAgICAgICAg
IHRoaXMuZmFyID0gc291cmNlLmZhcjsKKyAgICAgICAgICAgICAgICBkYXRhLmFvTWFwID0gdGhp
cy5hb01hcC50b0pTT04oIG1ldGEgKS51dWlkOworICAgICAgICAgICAgICAgIGRhdGEuYW9NYXBJ
bnRlbnNpdHkgPSB0aGlzLmFvTWFwSW50ZW5zaXR5OwogCi0gICAgICAgICAgICB0aGlzLnpvb20g
PSBzb3VyY2Uuem9vbTsKLSAgICAgICAgICAgIHRoaXMudmlldyA9IHNvdXJjZS52aWV3ID09PSBu
dWxsID8gbnVsbCA6IE9iamVjdC5hc3NpZ24oIHt9LCBzb3VyY2UudmlldyApOworICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIGlmICggdGhpcy5i
dW1wTWFwICYmIHRoaXMuYnVtcE1hcC5pc1RleHR1cmUgKSB7CiAKLSAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICBkYXRhLmJ1bXBNYXAgPSB0aGlzLmJ1bXBNYXAudG9KU09OKCBtZXRhICkudXVp
ZDsKKyAgICAgICAgICAgICAgICBkYXRhLmJ1bXBTY2FsZSA9IHRoaXMuYnVtcFNjYWxlOwogCi0g
ICAgICAgIHNldFZpZXdPZmZzZXQ6IGZ1bmN0aW9uICggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0ICkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
IHRoaXMudmlldyA9PT0gbnVsbCApIHsKKyAgICAgICAgICAgIGlmICggdGhpcy5ub3JtYWxNYXAg
JiYgdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlICkgewogCi0gICAgICAgICAgICAgICAgdGhpcy52
aWV3ID0gewotICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLAotICAgICAgICAgICAg
ICAgICAgICBmdWxsV2lkdGg6IDEsCi0gICAgICAgICAgICAgICAgICAgIGZ1bGxIZWlnaHQ6IDEs
Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldFg6IDAsCi0gICAgICAgICAgICAgICAgICAgIG9m
ZnNldFk6IDAsCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxLAotICAgICAgICAgICAgICAg
ICAgICBoZWlnaHQ6IDEKLSAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGRhdGEu
bm9ybWFsTWFwID0gdGhpcy5ub3JtYWxNYXAudG9KU09OKCBtZXRhICkudXVpZDsKKyAgICAgICAg
ICAgICAgICBkYXRhLm5vcm1hbE1hcFR5cGUgPSB0aGlzLm5vcm1hbE1hcFR5cGU7CisgICAgICAg
ICAgICAgICAgZGF0YS5ub3JtYWxTY2FsZSA9IHRoaXMubm9ybWFsU2NhbGUudG9BcnJheSgpOwog
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHRoaXMudmlldy5lbmFibGVkID0gdHJ1ZTsK
LSAgICAgICAgICAgIHRoaXMudmlldy5mdWxsV2lkdGggPSBmdWxsV2lkdGg7Ci0gICAgICAgICAg
ICB0aGlzLnZpZXcuZnVsbEhlaWdodCA9IGZ1bGxIZWlnaHQ7Ci0gICAgICAgICAgICB0aGlzLnZp
ZXcub2Zmc2V0WCA9IHg7Ci0gICAgICAgICAgICB0aGlzLnZpZXcub2Zmc2V0WSA9IHk7Ci0gICAg
ICAgICAgICB0aGlzLnZpZXcud2lkdGggPSB3aWR0aDsKLSAgICAgICAgICAgIHRoaXMudmlldy5o
ZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAgICBpZiAoIHRoaXMuZGlzcGxhY2VtZW50TWFwICYm
IHRoaXMuZGlzcGxhY2VtZW50TWFwLmlzVGV4dHVyZSApIHsKIAotICAgICAgICAgICAgdGhpcy51
cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7CisgICAgICAgICAgICAgICAgZGF0YS5kaXNwbGFjZW1l
bnRNYXAgPSB0aGlzLmRpc3BsYWNlbWVudE1hcC50b0pTT04oIG1ldGEgKS51dWlkOworICAgICAg
ICAgICAgICAgIGRhdGEuZGlzcGxhY2VtZW50U2NhbGUgPSB0aGlzLmRpc3BsYWNlbWVudFNjYWxl
OworICAgICAgICAgICAgICAgIGRhdGEuZGlzcGxhY2VtZW50QmlhcyA9IHRoaXMuZGlzcGxhY2Vt
ZW50QmlhczsKIAotICAgICAgICB9LAorICAgICAgICAgICAgfQogCi0gICAgICAgIGNsZWFyVmll
d09mZnNldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCB0aGlzLnJvdWdobmVzc01h
cCAmJiB0aGlzLnJvdWdobmVzc01hcC5pc1RleHR1cmUgKSBkYXRhLnJvdWdobmVzc01hcCA9IHRo
aXMucm91Z2huZXNzTWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7CisgICAgICAgICAgICBpZiAoIHRo
aXMubWV0YWxuZXNzTWFwICYmIHRoaXMubWV0YWxuZXNzTWFwLmlzVGV4dHVyZSApIGRhdGEubWV0
YWxuZXNzTWFwID0gdGhpcy5tZXRhbG5lc3NNYXAudG9KU09OKCBtZXRhICkudXVpZDsKIAotICAg
ICAgICAgICAgaWYgKCB0aGlzLnZpZXcgIT09IG51bGwgKSB7CisgICAgICAgICAgICBpZiAoIHRo
aXMuZW1pc3NpdmVNYXAgJiYgdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1cmUgKSBkYXRhLmVtaXNz
aXZlTWFwID0gdGhpcy5lbWlzc2l2ZU1hcC50b0pTT04oIG1ldGEgKS51dWlkOworICAgICAgICAg
ICAgaWYgKCB0aGlzLnNwZWN1bGFyTWFwICYmIHRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlICkg
ZGF0YS5zcGVjdWxhck1hcCA9IHRoaXMuc3BlY3VsYXJNYXAudG9KU09OKCBtZXRhICkudXVpZDsK
IAotICAgICAgICAgICAgICAgIHRoaXMudmlldy5lbmFibGVkID0gZmFsc2U7CisgICAgICAgICAg
ICBpZiAoIHRoaXMuZW52TWFwICYmIHRoaXMuZW52TWFwLmlzVGV4dHVyZSApIHsKKworICAgICAg
ICAgICAgICAgIGRhdGEuZW52TWFwID0gdGhpcy5lbnZNYXAudG9KU09OKCBtZXRhICkudXVpZDsK
KyAgICAgICAgICAgICAgICBkYXRhLnJlZmxlY3Rpdml0eSA9IHRoaXMucmVmbGVjdGl2aXR5OyAv
LyBTY2FsZSBiZWhpbmQgZW52TWFwCisgICAgICAgICAgICAgICAgZGF0YS5yZWZyYWN0aW9uUmF0
aW8gPSB0aGlzLnJlZnJhY3Rpb25SYXRpbzsKKworICAgICAgICAgICAgICAgIGlmICggdGhpcy5j
b21iaW5lICE9PSB1bmRlZmluZWQgKSBkYXRhLmNvbWJpbmUgPSB0aGlzLmNvbWJpbmU7CisgICAg
ICAgICAgICAgICAgaWYgKCB0aGlzLmVudk1hcEludGVuc2l0eSAhPT0gdW5kZWZpbmVkICkgZGF0
YS5lbnZNYXBJbnRlbnNpdHkgPSB0aGlzLmVudk1hcEludGVuc2l0eTsKIAogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICB0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTsKKyAgICAgICAg
ICAgIGlmICggdGhpcy5ncmFkaWVudE1hcCAmJiB0aGlzLmdyYWRpZW50TWFwLmlzVGV4dHVyZSAp
IHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIGRhdGEuZ3JhZGllbnRNYXAgPSB0aGlz
LmdyYWRpZW50TWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7CiAKLSAgICAgICAgdXBkYXRlUHJvamVj
dGlvbk1hdHJpeDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2
YXIgZHggPSAoIHRoaXMucmlnaHQgLSB0aGlzLmxlZnQgKSAvICggMiAqIHRoaXMuem9vbSApOwot
ICAgICAgICAgICAgdmFyIGR5ID0gKCB0aGlzLnRvcCAtIHRoaXMuYm90dG9tICkgLyAoIDIgKiB0
aGlzLnpvb20gKTsKLSAgICAgICAgICAgIHZhciBjeCA9ICggdGhpcy5yaWdodCArIHRoaXMubGVm
dCApIC8gMjsKLSAgICAgICAgICAgIHZhciBjeSA9ICggdGhpcy50b3AgKyB0aGlzLmJvdHRvbSAp
IC8gMjsKKyAgICAgICAgICAgIGlmICggdGhpcy5zaXplICE9PSB1bmRlZmluZWQgKSBkYXRhLnNp
emUgPSB0aGlzLnNpemU7CisgICAgICAgICAgICBpZiAoIHRoaXMuc2l6ZUF0dGVudWF0aW9uICE9
PSB1bmRlZmluZWQgKSBkYXRhLnNpemVBdHRlbnVhdGlvbiA9IHRoaXMuc2l6ZUF0dGVudWF0aW9u
OwogCi0gICAgICAgICAgICB2YXIgbGVmdCA9IGN4IC0gZHg7Ci0gICAgICAgICAgICB2YXIgcmln
aHQgPSBjeCArIGR4OwotICAgICAgICAgICAgdmFyIHRvcCA9IGN5ICsgZHk7Ci0gICAgICAgICAg
ICB2YXIgYm90dG9tID0gY3kgLSBkeTsKKyAgICAgICAgICAgIGlmICggdGhpcy5ibGVuZGluZyAh
PT0gTm9ybWFsQmxlbmRpbmcgKSBkYXRhLmJsZW5kaW5nID0gdGhpcy5ibGVuZGluZzsKKyAgICAg
ICAgICAgIGlmICggdGhpcy5mbGF0U2hhZGluZyA9PT0gdHJ1ZSApIGRhdGEuZmxhdFNoYWRpbmcg
PSB0aGlzLmZsYXRTaGFkaW5nOworICAgICAgICAgICAgaWYgKCB0aGlzLnNpZGUgIT09IEZyb250
U2lkZSApIGRhdGEuc2lkZSA9IHRoaXMuc2lkZTsKKyAgICAgICAgICAgIGlmICggdGhpcy52ZXJ0
ZXhDb2xvcnMgIT09IE5vQ29sb3JzICkgZGF0YS52ZXJ0ZXhDb2xvcnMgPSB0aGlzLnZlcnRleENv
bG9yczsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLnZpZXcgIT09IG51bGwgJiYgdGhpcy52aWV3
LmVuYWJsZWQgKSB7CisgICAgICAgICAgICBpZiAoIHRoaXMub3BhY2l0eSA8IDEgKSBkYXRhLm9w
YWNpdHkgPSB0aGlzLm9wYWNpdHk7CisgICAgICAgICAgICBpZiAoIHRoaXMudHJhbnNwYXJlbnQg
PT09IHRydWUgKSBkYXRhLnRyYW5zcGFyZW50ID0gdGhpcy50cmFuc3BhcmVudDsKIAotICAgICAg
ICAgICAgICAgIHZhciB6b29tVyA9IHRoaXMuem9vbSAvICggdGhpcy52aWV3LndpZHRoIC8gdGhp
cy52aWV3LmZ1bGxXaWR0aCApOwotICAgICAgICAgICAgICAgIHZhciB6b29tSCA9IHRoaXMuem9v
bSAvICggdGhpcy52aWV3LmhlaWdodCAvIHRoaXMudmlldy5mdWxsSGVpZ2h0ICk7Ci0gICAgICAg
ICAgICAgICAgdmFyIHNjYWxlVyA9ICggdGhpcy5yaWdodCAtIHRoaXMubGVmdCApIC8gdGhpcy52
aWV3LndpZHRoOwotICAgICAgICAgICAgICAgIHZhciBzY2FsZUggPSAoIHRoaXMudG9wIC0gdGhp
cy5ib3R0b20gKSAvIHRoaXMudmlldy5oZWlnaHQ7CisgICAgICAgICAgICBkYXRhLmRlcHRoRnVu
YyA9IHRoaXMuZGVwdGhGdW5jOworICAgICAgICAgICAgZGF0YS5kZXB0aFRlc3QgPSB0aGlzLmRl
cHRoVGVzdDsKKyAgICAgICAgICAgIGRhdGEuZGVwdGhXcml0ZSA9IHRoaXMuZGVwdGhXcml0ZTsK
IAotICAgICAgICAgICAgICAgIGxlZnQgKz0gc2NhbGVXICogKCB0aGlzLnZpZXcub2Zmc2V0WCAv
IHpvb21XICk7Ci0gICAgICAgICAgICAgICAgcmlnaHQgPSBsZWZ0ICsgc2NhbGVXICogKCB0aGlz
LnZpZXcud2lkdGggLyB6b29tVyApOwotICAgICAgICAgICAgICAgIHRvcCAtPSBzY2FsZUggKiAo
IHRoaXMudmlldy5vZmZzZXRZIC8gem9vbUggKTsKLSAgICAgICAgICAgICAgICBib3R0b20gPSB0
b3AgLSBzY2FsZUggKiAoIHRoaXMudmlldy5oZWlnaHQgLyB6b29tSCApOworICAgICAgICAgICAg
Ly8gcm90YXRpb24gKFNwcml0ZU1hdGVyaWFsKQorICAgICAgICAgICAgaWYgKCB0aGlzLnJvdGF0
aW9uICYmIHRoaXMucm90YXRpb24gIT09IDAgKSBkYXRhLnJvdGF0aW9uID0gdGhpcy5yb3RhdGlv
bjsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCB0aGlzLnBvbHlnb25PZmZzZXQg
PT09IHRydWUgKSBkYXRhLnBvbHlnb25PZmZzZXQgPSB0cnVlOworICAgICAgICAgICAgaWYgKCB0
aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IgIT09IDAgKSBkYXRhLnBvbHlnb25PZmZzZXRGYWN0b3Ig
PSB0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I7CisgICAgICAgICAgICBpZiAoIHRoaXMucG9seWdv
bk9mZnNldFVuaXRzICE9PSAwICkgZGF0YS5wb2x5Z29uT2Zmc2V0VW5pdHMgPSB0aGlzLnBvbHln
b25PZmZzZXRVbml0czsKIAotICAgICAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VP
cnRob2dyYXBoaWMoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgdGhpcy5uZWFyLCB0aGlzLmZh
ciApOworICAgICAgICAgICAgaWYgKCB0aGlzLmxpbmV3aWR0aCAmJiB0aGlzLmxpbmV3aWR0aCAh
PT0gMSApIGRhdGEubGluZXdpZHRoID0gdGhpcy5saW5ld2lkdGg7CisgICAgICAgICAgICBpZiAo
IHRoaXMuZGFzaFNpemUgIT09IHVuZGVmaW5lZCApIGRhdGEuZGFzaFNpemUgPSB0aGlzLmRhc2hT
aXplOworICAgICAgICAgICAgaWYgKCB0aGlzLmdhcFNpemUgIT09IHVuZGVmaW5lZCApIGRhdGEu
Z2FwU2l6ZSA9IHRoaXMuZ2FwU2l6ZTsKKyAgICAgICAgICAgIGlmICggdGhpcy5zY2FsZSAhPT0g
dW5kZWZpbmVkICkgZGF0YS5zY2FsZSA9IHRoaXMuc2NhbGU7CiAKLSAgICAgICAgfSwKKyAgICAg
ICAgICAgIGlmICggdGhpcy5kaXRoZXJpbmcgPT09IHRydWUgKSBkYXRhLmRpdGhlcmluZyA9IHRy
dWU7CiAKLSAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoIG1ldGEgKSB7CisgICAgICAgICAgICBp
ZiAoIHRoaXMuYWxwaGFUZXN0ID4gMCApIGRhdGEuYWxwaGFUZXN0ID0gdGhpcy5hbHBoYVRlc3Q7
CisgICAgICAgICAgICBpZiAoIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID09PSB0cnVlICkgZGF0
YS5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0aGlzLnByZW11bHRpcGxpZWRBbHBoYTsKIAotICAgICAg
ICAgICAgdmFyIGRhdGEgPSBPYmplY3QzRC5wcm90b3R5cGUudG9KU09OLmNhbGwoIHRoaXMsIG1l
dGEgKTsKKyAgICAgICAgICAgIGlmICggdGhpcy53aXJlZnJhbWUgPT09IHRydWUgKSBkYXRhLndp
cmVmcmFtZSA9IHRoaXMud2lyZWZyYW1lOworICAgICAgICAgICAgaWYgKCB0aGlzLndpcmVmcmFt
ZUxpbmV3aWR0aCA+IDEgKSBkYXRhLndpcmVmcmFtZUxpbmV3aWR0aCA9IHRoaXMud2lyZWZyYW1l
TGluZXdpZHRoOworICAgICAgICAgICAgaWYgKCB0aGlzLndpcmVmcmFtZUxpbmVjYXAgIT09ICdy
b3VuZCcgKSBkYXRhLndpcmVmcmFtZUxpbmVjYXAgPSB0aGlzLndpcmVmcmFtZUxpbmVjYXA7Cisg
ICAgICAgICAgICBpZiAoIHRoaXMud2lyZWZyYW1lTGluZWpvaW4gIT09ICdyb3VuZCcgKSBkYXRh
LndpcmVmcmFtZUxpbmVqb2luID0gdGhpcy53aXJlZnJhbWVMaW5lam9pbjsKIAotICAgICAgICAg
ICAgZGF0YS5vYmplY3Quem9vbSA9IHRoaXMuem9vbTsKLSAgICAgICAgICAgIGRhdGEub2JqZWN0
LmxlZnQgPSB0aGlzLmxlZnQ7Ci0gICAgICAgICAgICBkYXRhLm9iamVjdC5yaWdodCA9IHRoaXMu
cmlnaHQ7Ci0gICAgICAgICAgICBkYXRhLm9iamVjdC50b3AgPSB0aGlzLnRvcDsKLSAgICAgICAg
ICAgIGRhdGEub2JqZWN0LmJvdHRvbSA9IHRoaXMuYm90dG9tOwotICAgICAgICAgICAgZGF0YS5v
YmplY3QubmVhciA9IHRoaXMubmVhcjsKLSAgICAgICAgICAgIGRhdGEub2JqZWN0LmZhciA9IHRo
aXMuZmFyOworICAgICAgICAgICAgaWYgKCB0aGlzLm1vcnBoVGFyZ2V0cyA9PT0gdHJ1ZSApIGRh
dGEubW9ycGhUYXJnZXRzID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICggdGhpcy5tb3JwaE5vcm1h
bHMgPT09IHRydWUgKSBkYXRhLm1vcnBoTm9ybWFscyA9IHRydWU7CisgICAgICAgICAgICBpZiAo
IHRoaXMuc2tpbm5pbmcgPT09IHRydWUgKSBkYXRhLnNraW5uaW5nID0gdHJ1ZTsKIAotICAgICAg
ICAgICAgaWYgKCB0aGlzLnZpZXcgIT09IG51bGwgKSBkYXRhLm9iamVjdC52aWV3ID0gT2JqZWN0
LmFzc2lnbigge30sIHRoaXMudmlldyApOworICAgICAgICAgICAgaWYgKCB0aGlzLnZpc2libGUg
PT09IGZhbHNlICkgZGF0YS52aXNpYmxlID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoIEpTT04u
c3RyaW5naWZ5KCB0aGlzLnVzZXJEYXRhICkgIT09ICd7fScgKSBkYXRhLnVzZXJEYXRhID0gdGhp
cy51c2VyRGF0YTsKIAotICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICAvLyBU
T0RPOiBDb3BpZWQgZnJvbSBPYmplY3QzRC50b0pTT04KIAotICAgICAgICB9CisgICAgICAgICAg
ICBmdW5jdGlvbiBleHRyYWN0RnJvbUNhY2hlKCBjYWNoZSApIHsKIAotICAgIH0gKTsKKyAgICAg
ICAgICAgICAgICB2YXIgdmFsdWVzID0gW107CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1y
ZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRw
Oi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICovCisgICAgICAgICAgICAgICAgZm9yICggdmFy
IGtleSBpbiBjYWNoZSApIHsKIAotICAgIGZ1bmN0aW9uIEZhY2UzKCBhLCBiLCBjLCBub3JtYWws
IGNvbG9yLCBtYXRlcmlhbEluZGV4ICkgeworICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9
IGNhY2hlWyBrZXkgXTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRhdGEubWV0YWRhdGE7
CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKCBkYXRhICk7CiAKLSAgICAgICAgdGhp
cy5hID0gYTsKLSAgICAgICAgdGhpcy5iID0gYjsKLSAgICAgICAgdGhpcy5jID0gYzsKKyAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5ub3JtYWwgPSAoIG5vcm1hbCAmJiBub3JtYWwu
aXNWZWN0b3IzICkgPyBub3JtYWwgOiBuZXcgVmVjdG9yMygpOwotICAgICAgICB0aGlzLnZlcnRl
eE5vcm1hbHMgPSBBcnJheS5pc0FycmF5KCBub3JtYWwgKSA/IG5vcm1hbCA6IFtdOworICAgICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZXM7CiAKLSAgICAgICAgdGhpcy5jb2xvciA9ICggY29sb3Ig
JiYgY29sb3IuaXNDb2xvciApID8gY29sb3IgOiBuZXcgQ29sb3IoKTsKLSAgICAgICAgdGhpcy52
ZXJ0ZXhDb2xvcnMgPSBBcnJheS5pc0FycmF5KCBjb2xvciApID8gY29sb3IgOiBbXTsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICB0aGlzLm1hdGVyaWFsSW5kZXggPSBtYXRlcmlhbEluZGV4ICE9
PSB1bmRlZmluZWQgPyBtYXRlcmlhbEluZGV4IDogMDsKKyAgICAgICAgICAgIGlmICggaXNSb290
ICkgewogCi0gICAgfQorICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlcyA9IGV4dHJhY3RGcm9t
Q2FjaGUoIG1ldGEudGV4dHVyZXMgKTsKKyAgICAgICAgICAgICAgICB2YXIgaW1hZ2VzID0gZXh0
cmFjdEZyb21DYWNoZSggbWV0YS5pbWFnZXMgKTsKIAotICAgIE9iamVjdC5hc3NpZ24oIEZhY2Uz
LnByb3RvdHlwZSwgeworICAgICAgICAgICAgICAgIGlmICggdGV4dHVyZXMubGVuZ3RoID4gMCAp
IGRhdGEudGV4dHVyZXMgPSB0ZXh0dXJlczsKKyAgICAgICAgICAgICAgICBpZiAoIGltYWdlcy5s
ZW5ndGggPiAwICkgZGF0YS5pbWFnZXMgPSBpbWFnZXM7CisKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuIGRhdGE7CisKKyAgICAgICAgfSwKIAogICAgICAgICBjbG9uZTogZnVu
Y3Rpb24gKCkgewogCkBAIC05MDA4LDIyOTYgKzg4MzAsMjY5MCBAQAogCiAgICAgICAgIGNvcHk6
IGZ1bmN0aW9uICggc291cmNlICkgewogCi0gICAgICAgICAgICB0aGlzLmEgPSBzb3VyY2UuYTsK
LSAgICAgICAgICAgIHRoaXMuYiA9IHNvdXJjZS5iOwotICAgICAgICAgICAgdGhpcy5jID0gc291
cmNlLmM7CisgICAgICAgICAgICB0aGlzLm5hbWUgPSBzb3VyY2UubmFtZTsKIAotICAgICAgICAg
ICAgdGhpcy5ub3JtYWwuY29weSggc291cmNlLm5vcm1hbCApOwotICAgICAgICAgICAgdGhpcy5j
b2xvci5jb3B5KCBzb3VyY2UuY29sb3IgKTsKKyAgICAgICAgICAgIHRoaXMuZm9nID0gc291cmNl
LmZvZzsKKyAgICAgICAgICAgIHRoaXMubGlnaHRzID0gc291cmNlLmxpZ2h0czsKIAotICAgICAg
ICAgICAgdGhpcy5tYXRlcmlhbEluZGV4ID0gc291cmNlLm1hdGVyaWFsSW5kZXg7CisgICAgICAg
ICAgICB0aGlzLmJsZW5kaW5nID0gc291cmNlLmJsZW5kaW5nOworICAgICAgICAgICAgdGhpcy5z
aWRlID0gc291cmNlLnNpZGU7CisgICAgICAgICAgICB0aGlzLmZsYXRTaGFkaW5nID0gc291cmNl
LmZsYXRTaGFkaW5nOworICAgICAgICAgICAgdGhpcy52ZXJ0ZXhDb2xvcnMgPSBzb3VyY2UudmVy
dGV4Q29sb3JzOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGlsID0gc291cmNlLnZl
cnRleE5vcm1hbHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CisgICAgICAgICAgICB0aGlzLm9w
YWNpdHkgPSBzb3VyY2Uub3BhY2l0eTsKKyAgICAgICAgICAgIHRoaXMudHJhbnNwYXJlbnQgPSBz
b3VyY2UudHJhbnNwYXJlbnQ7CiAKLSAgICAgICAgICAgICAgICB0aGlzLnZlcnRleE5vcm1hbHNb
IGkgXSA9IHNvdXJjZS52ZXJ0ZXhOb3JtYWxzWyBpIF0uY2xvbmUoKTsKKyAgICAgICAgICAgIHRo
aXMuYmxlbmRTcmMgPSBzb3VyY2UuYmxlbmRTcmM7CisgICAgICAgICAgICB0aGlzLmJsZW5kRHN0
ID0gc291cmNlLmJsZW5kRHN0OworICAgICAgICAgICAgdGhpcy5ibGVuZEVxdWF0aW9uID0gc291
cmNlLmJsZW5kRXF1YXRpb247CisgICAgICAgICAgICB0aGlzLmJsZW5kU3JjQWxwaGEgPSBzb3Vy
Y2UuYmxlbmRTcmNBbHBoYTsKKyAgICAgICAgICAgIHRoaXMuYmxlbmREc3RBbHBoYSA9IHNvdXJj
ZS5ibGVuZERzdEFscGhhOworICAgICAgICAgICAgdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGEgPSBz
b3VyY2UuYmxlbmRFcXVhdGlvbkFscGhhOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICB0
aGlzLmRlcHRoRnVuYyA9IHNvdXJjZS5kZXB0aEZ1bmM7CisgICAgICAgICAgICB0aGlzLmRlcHRo
VGVzdCA9IHNvdXJjZS5kZXB0aFRlc3Q7CisgICAgICAgICAgICB0aGlzLmRlcHRoV3JpdGUgPSBz
b3VyY2UuZGVwdGhXcml0ZTsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IHNv
dXJjZS52ZXJ0ZXhDb2xvcnMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CisgICAgICAgICAgICB0
aGlzLmNvbG9yV3JpdGUgPSBzb3VyY2UuY29sb3JXcml0ZTsKIAotICAgICAgICAgICAgICAgIHRo
aXMudmVydGV4Q29sb3JzWyBpIF0gPSBzb3VyY2UudmVydGV4Q29sb3JzWyBpIF0uY2xvbmUoKTsK
KyAgICAgICAgICAgIHRoaXMucHJlY2lzaW9uID0gc291cmNlLnByZWNpc2lvbjsKIAotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhpcy5wb2x5Z29uT2Zmc2V0ID0gc291cmNlLnBvbHlnb25P
ZmZzZXQ7CisgICAgICAgICAgICB0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IgPSBzb3VyY2UucG9s
eWdvbk9mZnNldEZhY3RvcjsKKyAgICAgICAgICAgIHRoaXMucG9seWdvbk9mZnNldFVuaXRzID0g
c291cmNlLnBvbHlnb25PZmZzZXRVbml0czsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICB0aGlzLmRpdGhlcmluZyA9IHNvdXJjZS5kaXRoZXJpbmc7CiAKLSAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5hbHBoYVRlc3QgPSBzb3VyY2UuYWxwaGFUZXN0OworICAgICAg
ICAgICAgdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSBzb3VyY2UucHJlbXVsdGlwbGllZEFscGhh
OwogCi0gICAgfSApOworICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gc291cmNlLnZpc2libGU7
CisgICAgICAgICAgICB0aGlzLnVzZXJEYXRhID0gSlNPTi5wYXJzZSggSlNPTi5zdHJpbmdpZnko
IHNvdXJjZS51c2VyRGF0YSApICk7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAv
IGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqIEBhdXRob3Iga2lsZSAvIGh0dHA6Ly9raWxlLnN0
cmF2YWdhbnphLm9yZy8KLSAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRx
dWFsaWEuY29tLwotICAgICAqIEBhdXRob3IgbWlrYWVsIGVtdGluZ2VyIC8gaHR0cDovL2dvbW8u
c2UvCi0gICAgICogQGF1dGhvciB6ejg1IC8gaHR0cDovL3d3dy5sYWI0Z2FtZXMubmV0L3p6ODUv
YmxvZwotICAgICAqIEBhdXRob3IgYmhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW8KLSAgICAgKi8K
KyAgICAgICAgICAgIHRoaXMuY2xpcFNoYWRvd3MgPSBzb3VyY2UuY2xpcFNoYWRvd3M7CisgICAg
ICAgICAgICB0aGlzLmNsaXBJbnRlcnNlY3Rpb24gPSBzb3VyY2UuY2xpcEludGVyc2VjdGlvbjsK
IAotICAgIHZhciBnZW9tZXRyeUlkID0gMDsgLy8gR2VvbWV0cnkgdXNlcyBldmVuIG51bWJlcnMg
YXMgSWQKKyAgICAgICAgICAgIHZhciBzcmNQbGFuZXMgPSBzb3VyY2UuY2xpcHBpbmdQbGFuZXMs
CisgICAgICAgICAgICAgICAgZHN0UGxhbmVzID0gbnVsbDsKIAotICAgIGZ1bmN0aW9uIEdlb21l
dHJ5KCkgeworICAgICAgICAgICAgaWYgKCBzcmNQbGFuZXMgIT09IG51bGwgKSB7CiAKLSAgICAg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCAnaWQnLCB7IHZhbHVlOiBnZW9tZXRyeUlk
ICs9IDIgfSApOworICAgICAgICAgICAgICAgIHZhciBuID0gc3JjUGxhbmVzLmxlbmd0aDsKKyAg
ICAgICAgICAgICAgICBkc3RQbGFuZXMgPSBuZXcgQXJyYXkoIG4gKTsKIAotICAgICAgICB0aGlz
LnV1aWQgPSBfTWF0aC5nZW5lcmF0ZVVVSUQoKTsKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDA7IGkgIT09IG47ICsrIGkgKQorICAgICAgICAgICAgICAgICAgICBkc3RQbGFuZXNbIGkg
XSA9IHNyY1BsYW5lc1sgaSBdLmNsb25lKCk7CiAKLSAgICAgICAgdGhpcy5uYW1lID0gJyc7Ci0g
ICAgICAgIHRoaXMudHlwZSA9ICdHZW9tZXRyeSc7CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
dGhpcy52ZXJ0aWNlcyA9IFtdOwotICAgICAgICB0aGlzLmNvbG9ycyA9IFtdOwotICAgICAgICB0
aGlzLmZhY2VzID0gW107Ci0gICAgICAgIHRoaXMuZmFjZVZlcnRleFV2cyA9IFtbXV07CisgICAg
ICAgICAgICB0aGlzLmNsaXBwaW5nUGxhbmVzID0gZHN0UGxhbmVzOwogCi0gICAgICAgIHRoaXMu
bW9ycGhUYXJnZXRzID0gW107Ci0gICAgICAgIHRoaXMubW9ycGhOb3JtYWxzID0gW107CisgICAg
ICAgICAgICB0aGlzLnNoYWRvd1NpZGUgPSBzb3VyY2Uuc2hhZG93U2lkZTsKIAotICAgICAgICB0
aGlzLnNraW5XZWlnaHRzID0gW107Ci0gICAgICAgIHRoaXMuc2tpbkluZGljZXMgPSBbXTsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIHRoaXMubGluZURpc3RhbmNlcyA9IFtd
OworICAgICAgICB9LAogCi0gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBudWxsOwotICAgICAg
ICB0aGlzLmJvdW5kaW5nU3BoZXJlID0gbnVsbDsKKyAgICAgICAgZGlzcG9zZTogZnVuY3Rpb24g
KCkgewogCi0gICAgICAgIC8vIHVwZGF0ZSBmbGFncworICAgICAgICAgICAgdGhpcy5kaXNwYXRj
aEV2ZW50KCB7IHR5cGU6ICdkaXNwb3NlJyB9ICk7CiAKLSAgICAgICAgdGhpcy5lbGVtZW50c05l
ZWRVcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgdGhpcy52ZXJ0aWNlc05lZWRVcGRhdGUgPSBmYWxz
ZTsKLSAgICAgICAgdGhpcy51dnNOZWVkVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIHRoaXMubm9y
bWFsc05lZWRVcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5jb2xvcnNOZWVkVXBkYXRlID0g
ZmFsc2U7Ci0gICAgICAgIHRoaXMubGluZURpc3RhbmNlc05lZWRVcGRhdGUgPSBmYWxzZTsKLSAg
ICAgICAgdGhpcy5ncm91cHNOZWVkVXBkYXRlID0gZmFsc2U7CisgICAgICAgIH0KIAotICAgIH0K
KyAgICB9ICk7CiAKLSAgICBHZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmpl
Y3QuY3JlYXRlKCBFdmVudERpc3BhdGNoZXIucHJvdG90eXBlICksIHsKKyAgICAvKioKKyAgICAg
KiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqIEBhdXRob3IgYWx0
ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCisgICAgICoKKyAgICAgKiBwYXJhbWV0
ZXJzID0geworICAgICAqICBjb2xvcjogPGhleD4sCisgICAgICogIG9wYWNpdHk6IDxmbG9hdD4s
CisgICAgICogIG1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSwKKyAgICAgKgorICAg
ICAqICBsaWdodE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSwKKyAgICAgKiAgbGln
aHRNYXBJbnRlbnNpdHk6IDxmbG9hdD4KKyAgICAgKgorICAgICAqICBhb01hcDogbmV3IFRIUkVF
LlRleHR1cmUoIDxJbWFnZT4gKSwKKyAgICAgKiAgYW9NYXBJbnRlbnNpdHk6IDxmbG9hdD4KKyAg
ICAgKgorICAgICAqICBzcGVjdWxhck1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSwK
KyAgICAgKgorICAgICAqICBhbHBoYU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSwK
KyAgICAgKgorICAgICAqICBlbnZNYXA6IG5ldyBUSFJFRS5DdWJlVGV4dHVyZSggW3Bvc3gsIG5l
Z3gsIHBvc3ksIG5lZ3ksIHBvc3osIG5lZ3pdICksCisgICAgICogIGNvbWJpbmU6IFRIUkVFLk11
bHRpcGx5LAorICAgICAqICByZWZsZWN0aXZpdHk6IDxmbG9hdD4sCisgICAgICogIHJlZnJhY3Rp
b25SYXRpbzogPGZsb2F0PiwKKyAgICAgKgorICAgICAqICBkZXB0aFRlc3Q6IDxib29sPiwKKyAg
ICAgKiAgZGVwdGhXcml0ZTogPGJvb2w+LAorICAgICAqCisgICAgICogIHdpcmVmcmFtZTogPGJv
b2xlYW4+LAorICAgICAqICB3aXJlZnJhbWVMaW5ld2lkdGg6IDxmbG9hdD4sCisgICAgICoKKyAg
ICAgKiAgc2tpbm5pbmc6IDxib29sPiwKKyAgICAgKiAgbW9ycGhUYXJnZXRzOiA8Ym9vbD4KKyAg
ICAgKiB9CisgICAgICovCiAKLSAgICAgICAgY29uc3RydWN0b3I6IEdlb21ldHJ5LAorICAgIGZ1
bmN0aW9uIE1lc2hCYXNpY01hdGVyaWFsKCBwYXJhbWV0ZXJzICkgewogCi0gICAgICAgIGlzR2Vv
bWV0cnk6IHRydWUsCisgICAgICAgIE1hdGVyaWFsLmNhbGwoIHRoaXMgKTsKIAotICAgICAgICBh
cHBseU1hdHJpeDogZnVuY3Rpb24gKCBtYXRyaXggKSB7CisgICAgICAgIHRoaXMudHlwZSA9ICdN
ZXNoQmFzaWNNYXRlcmlhbCc7CiAKLSAgICAgICAgICAgIHZhciBub3JtYWxNYXRyaXggPSBuZXcg
TWF0cml4MygpLmdldE5vcm1hbE1hdHJpeCggbWF0cml4ICk7CisgICAgICAgIHRoaXMuY29sb3Ig
PSBuZXcgQ29sb3IoIDB4ZmZmZmZmICk7IC8vIGVtaXNzaXZlCiAKLSAgICAgICAgICAgIGZvciAo
IHZhciBpID0gMCwgaWwgPSB0aGlzLnZlcnRpY2VzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewor
ICAgICAgICB0aGlzLm1hcCA9IG51bGw7CiAKLSAgICAgICAgICAgICAgICB2YXIgdmVydGV4ID0g
dGhpcy52ZXJ0aWNlc1sgaSBdOwotICAgICAgICAgICAgICAgIHZlcnRleC5hcHBseU1hdHJpeDQo
IG1hdHJpeCApOworICAgICAgICB0aGlzLmxpZ2h0TWFwID0gbnVsbDsKKyAgICAgICAgdGhpcy5s
aWdodE1hcEludGVuc2l0eSA9IDEuMDsKIAotICAgICAgICAgICAgfQorICAgICAgICB0aGlzLmFv
TWFwID0gbnVsbDsKKyAgICAgICAgdGhpcy5hb01hcEludGVuc2l0eSA9IDEuMDsKIAotICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IHRoaXMuZmFjZXMubGVuZ3RoOyBpIDwgaWw7IGkg
KysgKSB7CisgICAgICAgIHRoaXMuc3BlY3VsYXJNYXAgPSBudWxsOwogCi0gICAgICAgICAgICAg
ICAgdmFyIGZhY2UgPSB0aGlzLmZhY2VzWyBpIF07Ci0gICAgICAgICAgICAgICAgZmFjZS5ub3Jt
YWwuYXBwbHlNYXRyaXgzKCBub3JtYWxNYXRyaXggKS5ub3JtYWxpemUoKTsKKyAgICAgICAgdGhp
cy5hbHBoYU1hcCA9IG51bGw7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDAsIGps
ID0gZmFjZS52ZXJ0ZXhOb3JtYWxzLmxlbmd0aDsgaiA8IGpsOyBqICsrICkgeworICAgICAgICB0
aGlzLmVudk1hcCA9IG51bGw7CisgICAgICAgIHRoaXMuY29tYmluZSA9IE11bHRpcGx5T3BlcmF0
aW9uOworICAgICAgICB0aGlzLnJlZmxlY3Rpdml0eSA9IDE7CisgICAgICAgIHRoaXMucmVmcmFj
dGlvblJhdGlvID0gMC45ODsKIAotICAgICAgICAgICAgICAgICAgICBmYWNlLnZlcnRleE5vcm1h
bHNbIGogXS5hcHBseU1hdHJpeDMoIG5vcm1hbE1hdHJpeCApLm5vcm1hbGl6ZSgpOworICAgICAg
ICB0aGlzLndpcmVmcmFtZSA9IGZhbHNlOworICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmV3aWR0
aCA9IDE7CisgICAgICAgIHRoaXMud2lyZWZyYW1lTGluZWNhcCA9ICdyb3VuZCc7CisgICAgICAg
IHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSAncm91bmQnOwogCi0gICAgICAgICAgICAgICAgfQor
ICAgICAgICB0aGlzLnNraW5uaW5nID0gZmFsc2U7CisgICAgICAgIHRoaXMubW9ycGhUYXJnZXRz
ID0gZmFsc2U7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgdGhpcy5saWdodHMgPSBmYWxzZTsK
IAotICAgICAgICAgICAgaWYgKCB0aGlzLmJvdW5kaW5nQm94ICE9PSBudWxsICkgeworICAgICAg
ICB0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApOwogCi0gICAgICAgICAgICAgICAgdGhpcy5j
b21wdXRlQm91bmRpbmdCb3goKTsKKyAgICB9CiAKLSAgICAgICAgICAgIH0KKyAgICBNZXNoQmFz
aWNNYXRlcmlhbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNYXRlcmlhbC5wcm90b3R5cGUg
KTsKKyAgICBNZXNoQmFzaWNNYXRlcmlhbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoQmFz
aWNNYXRlcmlhbDsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLmJvdW5kaW5nU3BoZXJlICE9PSBu
dWxsICkgeworICAgIE1lc2hCYXNpY01hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hCYXNpY01hdGVy
aWFsID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJl
KCk7CisgICAgTWVzaEJhc2ljTWF0ZXJpYWwucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoIHNv
dXJjZSApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICBNYXRlcmlhbC5wcm90b3R5cGUuY29w
eS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKIAotICAgICAgICAgICAgdGhpcy52ZXJ0aWNlc05lZWRV
cGRhdGUgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5ub3JtYWxzTmVlZFVwZGF0ZSA9IHRydWU7
CisgICAgICAgIHRoaXMuY29sb3IuY29weSggc291cmNlLmNvbG9yICk7CiAKLSAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICB0aGlzLm1hcCA9IHNvdXJjZS5tYXA7CiAKLSAgICAgICAg
fSwKKyAgICAgICAgdGhpcy5saWdodE1hcCA9IHNvdXJjZS5saWdodE1hcDsKKyAgICAgICAgdGhp
cy5saWdodE1hcEludGVuc2l0eSA9IHNvdXJjZS5saWdodE1hcEludGVuc2l0eTsKIAotICAgICAg
ICByb3RhdGVYOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuYW9NYXAgPSBzb3VyY2UuYW9N
YXA7CisgICAgICAgIHRoaXMuYW9NYXBJbnRlbnNpdHkgPSBzb3VyY2UuYW9NYXBJbnRlbnNpdHk7
CiAKLSAgICAgICAgICAgIC8vIHJvdGF0ZSBnZW9tZXRyeSBhcm91bmQgd29ybGQgeC1heGlzCi0K
LSAgICAgICAgICAgIHZhciBtMSA9IG5ldyBNYXRyaXg0KCk7Ci0KLSAgICAgICAgICAgIHJldHVy
biBmdW5jdGlvbiByb3RhdGVYKCBhbmdsZSApIHsKKyAgICAgICAgdGhpcy5zcGVjdWxhck1hcCA9
IHNvdXJjZS5zcGVjdWxhck1hcDsKIAotICAgICAgICAgICAgICAgIG0xLm1ha2VSb3RhdGlvblgo
IGFuZ2xlICk7CisgICAgICAgIHRoaXMuYWxwaGFNYXAgPSBzb3VyY2UuYWxwaGFNYXA7CiAKLSAg
ICAgICAgICAgICAgICB0aGlzLmFwcGx5TWF0cml4KCBtMSApOworICAgICAgICB0aGlzLmVudk1h
cCA9IHNvdXJjZS5lbnZNYXA7CisgICAgICAgIHRoaXMuY29tYmluZSA9IHNvdXJjZS5jb21iaW5l
OworICAgICAgICB0aGlzLnJlZmxlY3Rpdml0eSA9IHNvdXJjZS5yZWZsZWN0aXZpdHk7CisgICAg
ICAgIHRoaXMucmVmcmFjdGlvblJhdGlvID0gc291cmNlLnJlZnJhY3Rpb25SYXRpbzsKIAotICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB0aGlzLndpcmVmcmFtZSA9IHNvdXJj
ZS53aXJlZnJhbWU7CisgICAgICAgIHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gc291cmNlLndp
cmVmcmFtZUxpbmV3aWR0aDsKKyAgICAgICAgdGhpcy53aXJlZnJhbWVMaW5lY2FwID0gc291cmNl
LndpcmVmcmFtZUxpbmVjYXA7CisgICAgICAgIHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSBzb3Vy
Y2Uud2lyZWZyYW1lTGluZWpvaW47CiAKLSAgICAgICAgICAgIH07CisgICAgICAgIHRoaXMuc2tp
bm5pbmcgPSBzb3VyY2Uuc2tpbm5pbmc7CisgICAgICAgIHRoaXMubW9ycGhUYXJnZXRzID0gc291
cmNlLm1vcnBoVGFyZ2V0czsKIAotICAgICAgICB9KCksCisgICAgICAgIHJldHVybiB0aGlzOwog
Ci0gICAgICAgIHJvdGF0ZVk6IGZ1bmN0aW9uICgpIHsKKyAgICB9OwogCi0gICAgICAgICAgICAv
LyByb3RhdGUgZ2VvbWV0cnkgYXJvdW5kIHdvcmxkIHktYXhpcworICAgIC8qKgorICAgICAqIEBh
dXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICovCiAKLSAgICAgICAgICAg
IHZhciBtMSA9IG5ldyBNYXRyaXg0KCk7CisgICAgZnVuY3Rpb24gQnVmZmVyQXR0cmlidXRlKCBh
cnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5j
dGlvbiByb3RhdGVZKCBhbmdsZSApIHsKKyAgICAgICAgaWYgKCBBcnJheS5pc0FycmF5KCBhcnJh
eSApICkgewogCi0gICAgICAgICAgICAgICAgbTEubWFrZVJvdGF0aW9uWSggYW5nbGUgKTsKKyAg
ICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoICdUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFy
cmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LicgKTsKIAotICAgICAgICAgICAgICAgIHRoaXMu
YXBwbHlNYXRyaXgoIG0xICk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICB0aGlzLm5hbWUgPSAnJzsKIAotICAgICAgICAgICAgfTsKKyAgICAgICAg
dGhpcy5hcnJheSA9IGFycmF5OworICAgICAgICB0aGlzLml0ZW1TaXplID0gaXRlbVNpemU7Cisg
ICAgICAgIHRoaXMuY291bnQgPSBhcnJheSAhPT0gdW5kZWZpbmVkID8gYXJyYXkubGVuZ3RoIC8g
aXRlbVNpemUgOiAwOworICAgICAgICB0aGlzLm5vcm1hbGl6ZWQgPSBub3JtYWxpemVkID09PSB0
cnVlOwogCi0gICAgICAgIH0oKSwKKyAgICAgICAgdGhpcy5keW5hbWljID0gZmFsc2U7CisgICAg
ICAgIHRoaXMudXBkYXRlUmFuZ2UgPSB7IG9mZnNldDogMCwgY291bnQ6IC0gMSB9OwogCi0gICAg
ICAgIHJvdGF0ZVo6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy52ZXJzaW9uID0gMDsKIAot
ICAgICAgICAgICAgLy8gcm90YXRlIGdlb21ldHJ5IGFyb3VuZCB3b3JsZCB6LWF4aXMKKyAgICB9
CiAKLSAgICAgICAgICAgIHZhciBtMSA9IG5ldyBNYXRyaXg0KCk7CisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KCBCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLCAnbmVlZHNVcGRhdGUnLCB7CiAK
LSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiByb3RhdGVaKCBhbmdsZSApIHsKKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAoIHZhbHVlICkgewogCi0gICAgICAgICAgICAgICAgbTEubWFrZVJvdGF0
aW9uWiggYW5nbGUgKTsKKyAgICAgICAgICAgIGlmICggdmFsdWUgPT09IHRydWUgKSB0aGlzLnZl
cnNpb24gKys7CiAKLSAgICAgICAgICAgICAgICB0aGlzLmFwcGx5TWF0cml4KCBtMSApOworICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9ICk7CiAKLSAgICAg
ICAgICAgIH07CisgICAgT2JqZWN0LmFzc2lnbiggQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZSwg
ewogCi0gICAgICAgIH0oKSwKKyAgICAgICAgaXNCdWZmZXJBdHRyaWJ1dGU6IHRydWUsCiAKLSAg
ICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIG9uVXBsb2FkQ2FsbGJhY2s6
IGZ1bmN0aW9uICgpIHt9LAogCi0gICAgICAgICAgICAvLyB0cmFuc2xhdGUgZ2VvbWV0cnkKKyAg
ICAgICAgc2V0QXJyYXk6IGZ1bmN0aW9uICggYXJyYXkgKSB7CiAKLSAgICAgICAgICAgIHZhciBt
MSA9IG5ldyBNYXRyaXg0KCk7CisgICAgICAgICAgICBpZiAoIEFycmF5LmlzQXJyYXkoIGFycmF5
ICkgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB0cmFuc2xhdGUoIHgsIHksIHog
KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvciggJ1RIUkVFLkJ1ZmZlckF0
dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuJyApOwogCi0gICAgICAgICAg
ICAgICAgbTEubWFrZVRyYW5zbGF0aW9uKCB4LCB5LCB6ICk7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICB0aGlzLmFwcGx5TWF0cml4KCBtMSApOworICAgICAgICAgICAgdGhpcy5j
b3VudCA9IGFycmF5ICE9PSB1bmRlZmluZWQgPyBhcnJheS5sZW5ndGggLyB0aGlzLml0ZW1TaXpl
IDogMDsKKyAgICAgICAgICAgIHRoaXMuYXJyYXkgPSBhcnJheTsKIAotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIH07
CisgICAgICAgIH0sCiAKLSAgICAgICAgfSgpLAorICAgICAgICBzZXREeW5hbWljOiBmdW5jdGlv
biAoIHZhbHVlICkgewogCi0gICAgICAgIHNjYWxlOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICB0aGlzLmR5bmFtaWMgPSB2YWx1ZTsKIAotICAgICAgICAgICAgLy8gc2NhbGUgZ2VvbWV0cnkK
KyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICB2YXIgbTEgPSBuZXcgTWF0
cml4NCgpOworICAgICAgICB9LAogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gc2NhbGUo
IHgsIHksIHogKSB7CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkgewogCi0gICAg
ICAgICAgICAgICAgbTEubWFrZVNjYWxlKCB4LCB5LCB6ICk7CisgICAgICAgICAgICB0aGlzLm5h
bWUgPSBzb3VyY2UubmFtZTsKKyAgICAgICAgICAgIHRoaXMuYXJyYXkgPSBuZXcgc291cmNlLmFy
cmF5LmNvbnN0cnVjdG9yKCBzb3VyY2UuYXJyYXkgKTsKKyAgICAgICAgICAgIHRoaXMuaXRlbVNp
emUgPSBzb3VyY2UuaXRlbVNpemU7CisgICAgICAgICAgICB0aGlzLmNvdW50ID0gc291cmNlLmNv
dW50OworICAgICAgICAgICAgdGhpcy5ub3JtYWxpemVkID0gc291cmNlLm5vcm1hbGl6ZWQ7CiAK
LSAgICAgICAgICAgICAgICB0aGlzLmFwcGx5TWF0cml4KCBtMSApOworICAgICAgICAgICAgdGhp
cy5keW5hbWljID0gc291cmNlLmR5bmFtaWM7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICB9OworICAgICAgICB9
LAogCi0gICAgICAgIH0oKSwKKyAgICAgICAgY29weUF0OiBmdW5jdGlvbiAoIGluZGV4MSwgYXR0
cmlidXRlLCBpbmRleDIgKSB7CiAKLSAgICAgICAgbG9va0F0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICBpbmRleDEgKj0gdGhpcy5pdGVtU2l6ZTsKKyAgICAgICAgICAgIGluZGV4MiAqPSBh
dHRyaWJ1dGUuaXRlbVNpemU7CiAKLSAgICAgICAgICAgIHZhciBvYmogPSBuZXcgT2JqZWN0M0Qo
KTsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHRoaXMuaXRlbVNpemU7IGkgPCBs
OyBpICsrICkgewogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbG9va0F0KCB2ZWN0b3Ig
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5hcnJheVsgaW5kZXgxICsgaSBdID0gYXR0cmlidXRl
LmFycmF5WyBpbmRleDIgKyBpIF07CiAKLSAgICAgICAgICAgICAgICBvYmoubG9va0F0KCB2ZWN0
b3IgKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG9iai51cGRhdGVNYXRyaXgo
KTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgdGhpcy5hcHBs
eU1hdHJpeCggb2JqLm1hdHJpeCApOworICAgICAgICB9LAogCi0gICAgICAgICAgICB9OworICAg
ICAgICBjb3B5QXJyYXk6IGZ1bmN0aW9uICggYXJyYXkgKSB7CiAKLSAgICAgICAgfSgpLAorICAg
ICAgICAgICAgdGhpcy5hcnJheS5zZXQoIGFycmF5ICk7CiAKLSAgICAgICAgZnJvbUJ1ZmZlckdl
b21ldHJ5OiBmdW5jdGlvbiAoIGdlb21ldHJ5ICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAKLSAgICAgICAgICAgIHZhciBzY29wZSA9IHRoaXM7CisgICAgICAgIH0sCiAKLSAgICAgICAg
ICAgIHZhciBpbmRpY2VzID0gZ2VvbWV0cnkuaW5kZXggIT09IG51bGwgPyBnZW9tZXRyeS5pbmRl
eC5hcnJheSA6IHVuZGVmaW5lZDsKLSAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gZ2VvbWV0
cnkuYXR0cmlidXRlczsKKyAgICAgICAgY29weUNvbG9yc0FycmF5OiBmdW5jdGlvbiAoIGNvbG9y
cyApIHsKIAotICAgICAgICAgICAgdmFyIHBvc2l0aW9ucyA9IGF0dHJpYnV0ZXMucG9zaXRpb24u
YXJyYXk7Ci0gICAgICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsICE9PSB1
bmRlZmluZWQgPyBhdHRyaWJ1dGVzLm5vcm1hbC5hcnJheSA6IHVuZGVmaW5lZDsKLSAgICAgICAg
ICAgIHZhciBjb2xvcnMgPSBhdHRyaWJ1dGVzLmNvbG9yICE9PSB1bmRlZmluZWQgPyBhdHRyaWJ1
dGVzLmNvbG9yLmFycmF5IDogdW5kZWZpbmVkOwotICAgICAgICAgICAgdmFyIHV2cyA9IGF0dHJp
YnV0ZXMudXYgIT09IHVuZGVmaW5lZCA/IGF0dHJpYnV0ZXMudXYuYXJyYXkgOiB1bmRlZmluZWQ7
Ci0gICAgICAgICAgICB2YXIgdXZzMiA9IGF0dHJpYnV0ZXMudXYyICE9PSB1bmRlZmluZWQgPyBh
dHRyaWJ1dGVzLnV2Mi5hcnJheSA6IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIHZhciBhcnJheSA9
IHRoaXMuYXJyYXksIG9mZnNldCA9IDA7CiAKLSAgICAgICAgICAgIGlmICggdXZzMiAhPT0gdW5k
ZWZpbmVkICkgdGhpcy5mYWNlVmVydGV4VXZzWyAxIF0gPSBbXTsKKyAgICAgICAgICAgIGZvciAo
IHZhciBpID0gMCwgbCA9IGNvbG9ycy5sZW5ndGg7IGkgPCBsOyBpICsrICkgewogCi0gICAgICAg
ICAgICB2YXIgdGVtcE5vcm1hbHMgPSBbXTsKLSAgICAgICAgICAgIHZhciB0ZW1wVVZzID0gW107
Ci0gICAgICAgICAgICB2YXIgdGVtcFVWczIgPSBbXTsKKyAgICAgICAgICAgICAgICB2YXIgY29s
b3IgPSBjb2xvcnNbIGkgXTsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBqID0gMDsg
aSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkgKz0gMywgaiArPSAyICkgeworICAgICAgICAgICAgICAg
IGlmICggY29sb3IgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgIHNjb3BlLnZl
cnRpY2VzLnB1c2goIG5ldyBWZWN0b3IzKCBwb3NpdGlvbnNbIGkgXSwgcG9zaXRpb25zWyBpICsg
MSBdLCBwb3NpdGlvbnNbIGkgKyAyIF0gKSApOworICAgICAgICAgICAgICAgICAgICBjb25zb2xl
Lndhcm4oICdUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlz
IHVuZGVmaW5lZCcsIGkgKTsKKyAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBuZXcgQ29sb3Io
KTsKIAotICAgICAgICAgICAgICAgIGlmICggbm9ybWFscyAhPT0gdW5kZWZpbmVkICkgeworICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB0ZW1wTm9ybWFscy5wdXNoKCBu
ZXcgVmVjdG9yMyggbm9ybWFsc1sgaSBdLCBub3JtYWxzWyBpICsgMSBdLCBub3JtYWxzWyBpICsg
MiBdICkgKTsKKyAgICAgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsrIF0gPSBjb2xvci5yOwor
ICAgICAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKysgXSA9IGNvbG9yLmc7CisgICAgICAgICAg
ICAgICAgYXJyYXlbIG9mZnNldCArKyBdID0gY29sb3IuYjsKIAotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICggY29sb3JzICE9PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgICAgICBz
Y29wZS5jb2xvcnMucHVzaCggbmV3IENvbG9yKCBjb2xvcnNbIGkgXSwgY29sb3JzWyBpICsgMSBd
LCBjb2xvcnNbIGkgKyAyIF0gKSApOworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgfQor
ICAgICAgICBjb3B5VmVjdG9yMnNBcnJheTogZnVuY3Rpb24gKCB2ZWN0b3JzICkgewogCi0gICAg
ICAgICAgICAgICAgaWYgKCB1dnMgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHZhciBh
cnJheSA9IHRoaXMuYXJyYXksIG9mZnNldCA9IDA7CiAKLSAgICAgICAgICAgICAgICAgICAgdGVt
cFVWcy5wdXNoKCBuZXcgVmVjdG9yMiggdXZzWyBqIF0sIHV2c1sgaiArIDEgXSApICk7CisgICAg
ICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB2ZWN0b3JzLmxlbmd0aDsgaSA8IGw7IGkgKysg
KSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHZlY3RvciA9IHZl
Y3RvcnNbIGkgXTsKIAotICAgICAgICAgICAgICAgIGlmICggdXZzMiAhPT0gdW5kZWZpbmVkICkg
eworICAgICAgICAgICAgICAgIGlmICggdmVjdG9yID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgdGVtcFVWczIucHVzaCggbmV3IFZlY3RvcjIoIHV2czJbIGogXSwgdXZz
MlsgaiArIDEgXSApICk7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVF
LkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yMnNBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVk
JywgaSApOworICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgPSBuZXcgVmVjdG9yMigpOwogCiAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXJyYXlb
IG9mZnNldCArKyBdID0gdmVjdG9yLng7CisgICAgICAgICAgICAgICAgYXJyYXlbIG9mZnNldCAr
KyBdID0gdmVjdG9yLnk7CiAKLSAgICAgICAgICAgIGZ1bmN0aW9uIGFkZEZhY2UoIGEsIGIsIGMs
IG1hdGVyaWFsSW5kZXggKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB2YXIg
dmVydGV4Tm9ybWFscyA9IG5vcm1hbHMgIT09IHVuZGVmaW5lZCA/IFsgdGVtcE5vcm1hbHNbIGEg
XS5jbG9uZSgpLCB0ZW1wTm9ybWFsc1sgYiBdLmNsb25lKCksIHRlbXBOb3JtYWxzWyBjIF0uY2xv
bmUoKSBdIDogW107Ci0gICAgICAgICAgICAgICAgdmFyIHZlcnRleENvbG9ycyA9IGNvbG9ycyAh
PT0gdW5kZWZpbmVkID8gWyBzY29wZS5jb2xvcnNbIGEgXS5jbG9uZSgpLCBzY29wZS5jb2xvcnNb
IGIgXS5jbG9uZSgpLCBzY29wZS5jb2xvcnNbIGMgXS5jbG9uZSgpIF0gOiBbXTsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgdmFyIGZhY2UgPSBuZXcgRmFjZTMo
IGEsIGIsIGMsIHZlcnRleE5vcm1hbHMsIHZlcnRleENvbG9ycywgbWF0ZXJpYWxJbmRleCApOwor
ICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgc2NvcGUuZmFjZXMucHVzaCggZmFjZSApOwor
ICAgICAgICBjb3B5VmVjdG9yM3NBcnJheTogZnVuY3Rpb24gKCB2ZWN0b3JzICkgewogCi0gICAg
ICAgICAgICAgICAgaWYgKCB1dnMgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHZhciBh
cnJheSA9IHRoaXMuYXJyYXksIG9mZnNldCA9IDA7CiAKLSAgICAgICAgICAgICAgICAgICAgc2Nv
cGUuZmFjZVZlcnRleFV2c1sgMCBdLnB1c2goIFsgdGVtcFVWc1sgYSBdLmNsb25lKCksIHRlbXBV
VnNbIGIgXS5jbG9uZSgpLCB0ZW1wVVZzWyBjIF0uY2xvbmUoKSBdICk7CisgICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IDAsIGwgPSB2ZWN0b3JzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHZlY3RvciA9IHZlY3RvcnNbIGkg
XTsKIAotICAgICAgICAgICAgICAgIGlmICggdXZzMiAhPT0gdW5kZWZpbmVkICkgeworICAgICAg
ICAgICAgICAgIGlmICggdmVjdG9yID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgc2NvcGUuZmFjZVZlcnRleFV2c1sgMSBdLnB1c2goIFsgdGVtcFVWczJbIGEgXS5jbG9u
ZSgpLCB0ZW1wVVZzMlsgYiBdLmNsb25lKCksIHRlbXBVVnMyWyBjIF0uY2xvbmUoKSBdICk7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5j
b3B5VmVjdG9yM3NBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkJywgaSApOworICAgICAgICAg
ICAgICAgICAgICB2ZWN0b3IgPSBuZXcgVmVjdG9yMygpOwogCiAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArKyBdID0gdmVj
dG9yLng7CisgICAgICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArKyBdID0gdmVjdG9yLnk7Cisg
ICAgICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArKyBdID0gdmVjdG9yLno7CiAKLSAgICAgICAg
ICAgIHZhciBncm91cHMgPSBnZW9tZXRyeS5ncm91cHM7CisgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGlmICggZ3JvdXBzLmxlbmd0aCA+IDAgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
czsKIAotICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7
IGkgKysgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIGdyb3VwID0g
Z3JvdXBzWyBpIF07CisgICAgICAgIGNvcHlWZWN0b3I0c0FycmF5OiBmdW5jdGlvbiAoIHZlY3Rv
cnMgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gZ3JvdXAuc3RhcnQ7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGdyb3VwLmNvdW50OworICAgICAgICAgICAg
dmFyIGFycmF5ID0gdGhpcy5hcnJheSwgb2Zmc2V0ID0gMDsKIAotICAgICAgICAgICAgICAgICAg
ICBmb3IgKCB2YXIgaiA9IHN0YXJ0LCBqbCA9IHN0YXJ0ICsgY291bnQ7IGogPCBqbDsgaiArPSAz
ICkgeworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gdmVjdG9ycy5sZW5ndGg7IGkg
PCBsOyBpICsrICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGluZGljZXMgIT09
IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICB2YXIgdmVjdG9yID0gdmVjdG9yc1sgaSBd
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmFjZSggaW5kaWNlc1sgaiBdLCBp
bmRpY2VzWyBqICsgMSBdLCBpbmRpY2VzWyBqICsgMiBdLCBncm91cC5tYXRlcmlhbEluZGV4ICk7
CisgICAgICAgICAgICAgICAgaWYgKCB2ZWN0b3IgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS53
YXJuKCAnVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3I0c0FycmF5KCk6IHZlY3RvciBp
cyB1bmRlZmluZWQnLCBpICk7CisgICAgICAgICAgICAgICAgICAgIHZlY3RvciA9IG5ldyBWZWN0
b3I0KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRGYWNlKCBqLCBqICsgMSwg
aiArIDIsIGdyb3VwLm1hdGVyaWFsSW5kZXggKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsrIF0g
PSB2ZWN0b3IueDsKKyAgICAgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3Iu
eTsKKyAgICAgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IuejsKKyAgICAg
ICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IudzsKIAotICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfSwKIAotICAg
ICAgICAgICAgICAgIGlmICggaW5kaWNlcyAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICBzZXQ6
IGZ1bmN0aW9uICggdmFsdWUsIG9mZnNldCApIHsKIAotICAgICAgICAgICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSArPSAzICkgeworICAgICAgICAgICAg
aWYgKCBvZmZzZXQgPT09IHVuZGVmaW5lZCApIG9mZnNldCA9IDA7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZEZhY2UoIGluZGljZXNbIGkgXSwgaW5kaWNlc1sgaSArIDEgXSwgaW5kaWNl
c1sgaSArIDIgXSApOworICAgICAgICAgICAgdGhpcy5hcnJheS5zZXQoIHZhbHVlLCBvZmZzZXQg
KTsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aCAvIDM7IGkgKz0gMyApIHsK
KyAgICAgICAgZ2V0WDogZnVuY3Rpb24gKCBpbmRleCApIHsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkRmFjZSggaSwgaSArIDEsIGkgKyAyICk7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5hcnJheVsgaW5kZXggKiB0aGlzLml0ZW1TaXplIF07CiAKLSAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICBzZXRYOiBmdW5jdGlv
biAoIGluZGV4LCB4ICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmFycmF5
WyBpbmRleCAqIHRoaXMuaXRlbVNpemUgXSA9IHg7CiAKLSAgICAgICAgICAgIHRoaXMuY29tcHV0
ZUZhY2VOb3JtYWxzKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAg
aWYgKCBnZW9tZXRyeS5ib3VuZGluZ0JveCAhPT0gbnVsbCApIHsKKyAgICAgICAgfSwKIAotICAg
ICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBnZW9tZXRyeS5ib3VuZGluZ0JveC5jbG9u
ZSgpOworICAgICAgICBnZXRZOiBmdW5jdGlvbiAoIGluZGV4ICkgewogCi0gICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsgaW5kZXggKiB0aGlzLml0ZW1TaXplICsg
MSBdOwogCi0gICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlICE9PSBudWxs
ICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgdGhpcy5ib3VuZGluZ1NwaGVyZSA9
IGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlLmNsb25lKCk7CisgICAgICAgIHNldFk6IGZ1bmN0aW9u
ICggaW5kZXgsIHkgKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuYXJyYXlb
IGluZGV4ICogdGhpcy5pdGVtU2l6ZSArIDEgXSA9IHk7CiAKICAgICAgICAgICAgIHJldHVybiB0
aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgY2VudGVyOiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGdldFo6IGZ1bmN0aW9uICggaW5kZXggKSB7CiAKLSAgICAgICAgICAgIHZhciBvZmZzZXQg
PSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbIGluZGV4ICog
dGhpcy5pdGVtU2l6ZSArIDIgXTsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNlbnRl
cigpIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZUJvdW5kaW5n
Qm94KCk7CisgICAgICAgIHNldFo6IGZ1bmN0aW9uICggaW5kZXgsIHogKSB7CiAKLSAgICAgICAg
ICAgICAgICB0aGlzLmJvdW5kaW5nQm94LmdldENlbnRlciggb2Zmc2V0ICkubmVnYXRlKCk7Cisg
ICAgICAgICAgICB0aGlzLmFycmF5WyBpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAyIF0gPSB6Owog
Ci0gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUoIG9mZnNldC54LCBvZmZzZXQueSwgb2Zm
c2V0LnogKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIH07CisgICAgICAgIGdldFc6IGZ1
bmN0aW9uICggaW5kZXggKSB7CiAKLSAgICAgICAgfSgpLAorICAgICAgICAgICAgcmV0dXJuIHRo
aXMuYXJyYXlbIGluZGV4ICogdGhpcy5pdGVtU2l6ZSArIDMgXTsKIAotICAgICAgICBub3JtYWxp
emU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgdGhpcy5jb21wdXRl
Qm91bmRpbmdTcGhlcmUoKTsKKyAgICAgICAgc2V0VzogZnVuY3Rpb24gKCBpbmRleCwgdyApIHsK
IAotICAgICAgICAgICAgdmFyIGNlbnRlciA9IHRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyOwot
ICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzOworICAg
ICAgICAgICAgdGhpcy5hcnJheVsgaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMyBdID0gdzsKIAot
ICAgICAgICAgICAgdmFyIHMgPSByYWRpdXMgPT09IDAgPyAxIDogMS4wIC8gcmFkaXVzOworICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIHZhciBtYXRyaXggPSBuZXcgTWF0
cml4NCgpOwotICAgICAgICAgICAgbWF0cml4LnNldCgKLSAgICAgICAgICAgICAgICBzLCAwLCAw
LCAtIHMgKiBjZW50ZXIueCwKLSAgICAgICAgICAgICAgICAwLCBzLCAwLCAtIHMgKiBjZW50ZXIu
eSwKLSAgICAgICAgICAgICAgICAwLCAwLCBzLCAtIHMgKiBjZW50ZXIueiwKLSAgICAgICAgICAg
ICAgICAwLCAwLCAwLCAxCi0gICAgICAgICAgICApOworICAgICAgICB9LAogCi0gICAgICAgICAg
ICB0aGlzLmFwcGx5TWF0cml4KCBtYXRyaXggKTsKKyAgICAgICAgc2V0WFk6IGZ1bmN0aW9uICgg
aW5kZXgsIHgsIHkgKSB7CisKKyAgICAgICAgICAgIGluZGV4ICo9IHRoaXMuaXRlbVNpemU7CisK
KyAgICAgICAgICAgIHRoaXMuYXJyYXlbIGluZGV4ICsgMCBdID0geDsKKyAgICAgICAgICAgIHRo
aXMuYXJyYXlbIGluZGV4ICsgMSBdID0geTsKIAogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
ICAgICAgICAgfSwKIAotICAgICAgICBjb21wdXRlRmFjZU5vcm1hbHM6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgc2V0WFlaOiBmdW5jdGlvbiAoIGluZGV4LCB4LCB5LCB6ICkgewogCi0gICAgICAg
ICAgICB2YXIgY2IgPSBuZXcgVmVjdG9yMygpLCBhYiA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAg
ICAgICBpbmRleCAqPSB0aGlzLml0ZW1TaXplOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgZiA9
IDAsIGZsID0gdGhpcy5mYWNlcy5sZW5ndGg7IGYgPCBmbDsgZiArKyApIHsKKyAgICAgICAgICAg
IHRoaXMuYXJyYXlbIGluZGV4ICsgMCBdID0geDsKKyAgICAgICAgICAgIHRoaXMuYXJyYXlbIGlu
ZGV4ICsgMSBdID0geTsKKyAgICAgICAgICAgIHRoaXMuYXJyYXlbIGluZGV4ICsgMiBdID0gejsK
IAotICAgICAgICAgICAgICAgIHZhciBmYWNlID0gdGhpcy5mYWNlc1sgZiBdOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICB2YXIgdkEgPSB0aGlzLnZlcnRpY2Vz
WyBmYWNlLmEgXTsKLSAgICAgICAgICAgICAgICB2YXIgdkIgPSB0aGlzLnZlcnRpY2VzWyBmYWNl
LmIgXTsKLSAgICAgICAgICAgICAgICB2YXIgdkMgPSB0aGlzLnZlcnRpY2VzWyBmYWNlLmMgXTsK
KyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIGNiLnN1YlZlY3RvcnMoIHZDLCB2QiApOwot
ICAgICAgICAgICAgICAgIGFiLnN1YlZlY3RvcnMoIHZBLCB2QiApOwotICAgICAgICAgICAgICAg
IGNiLmNyb3NzKCBhYiApOworICAgICAgICBzZXRYWVpXOiBmdW5jdGlvbiAoIGluZGV4LCB4LCB5
LCB6LCB3ICkgewogCi0gICAgICAgICAgICAgICAgY2Iubm9ybWFsaXplKCk7CisgICAgICAgICAg
ICBpbmRleCAqPSB0aGlzLml0ZW1TaXplOwogCi0gICAgICAgICAgICAgICAgZmFjZS5ub3JtYWwu
Y29weSggY2IgKTsKKyAgICAgICAgICAgIHRoaXMuYXJyYXlbIGluZGV4ICsgMCBdID0geDsKKyAg
ICAgICAgICAgIHRoaXMuYXJyYXlbIGluZGV4ICsgMSBdID0geTsKKyAgICAgICAgICAgIHRoaXMu
YXJyYXlbIGluZGV4ICsgMiBdID0gejsKKyAgICAgICAgICAgIHRoaXMuYXJyYXlbIGluZGV4ICsg
MyBdID0gdzsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAg
ICAgICAgfSwKIAotICAgICAgICBjb21wdXRlVmVydGV4Tm9ybWFsczogZnVuY3Rpb24gKCBhcmVh
V2VpZ2h0ZWQgKSB7CisgICAgICAgIG9uVXBsb2FkOiBmdW5jdGlvbiAoIGNhbGxiYWNrICkgewog
Ci0gICAgICAgICAgICBpZiAoIGFyZWFXZWlnaHRlZCA9PT0gdW5kZWZpbmVkICkgYXJlYVdlaWdo
dGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMub25VcGxvYWRDYWxsYmFjayA9IGNhbGxiYWNr
OwogCi0gICAgICAgICAgICB2YXIgdiwgdmwsIGYsIGZsLCBmYWNlLCB2ZXJ0aWNlczsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICB2ZXJ0aWNlcyA9IG5ldyBBcnJheSgg
dGhpcy52ZXJ0aWNlcy5sZW5ndGggKTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgZm9yICgg
diA9IDAsIHZsID0gdGhpcy52ZXJ0aWNlcy5sZW5ndGg7IHYgPCB2bDsgdiArKyApIHsKKyAgICAg
ICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgIHZlcnRpY2VzWyB2IF0g
PSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9y
KCB0aGlzLmFycmF5LCB0aGlzLml0ZW1TaXplICkuY29weSggdGhpcyApOwogCi0gICAgICAgICAg
ICB9CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIGlmICggYXJlYVdlaWdodGVkICkgeworICAg
ICAgICB0b0pTT046IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgIC8vIHZlcnRleCBu
b3JtYWxzIHdlaWdodGVkIGJ5IHRyaWFuZ2xlIGFyZWFzCi0gICAgICAgICAgICAgICAgLy8gaHR0
cDovL3d3dy5pcXVpbGV6bGVzLm9yZy93d3cvYXJ0aWNsZXMvbm9ybWFscy9ub3JtYWxzLmh0bQor
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBpdGVtU2l6ZTogdGhpcy5pdGVt
U2l6ZSwKKyAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUs
CisgICAgICAgICAgICAgICAgYXJyYXk6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCB0aGlz
LmFycmF5ICksCisgICAgICAgICAgICAgICAgbm9ybWFsaXplZDogdGhpcy5ub3JtYWxpemVkCisg
ICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgdmFyIHZBLCB2QiwgdkM7Ci0gICAgICAg
ICAgICAgICAgdmFyIGNiID0gbmV3IFZlY3RvcjMoKSwgYWIgPSBuZXcgVmVjdG9yMygpOworICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICBmb3IgKCBmID0gMCwgZmwgPSB0aGlzLmZhY2VzLmxl
bmd0aDsgZiA8IGZsOyBmICsrICkgeworICAgIH0gKTsKIAotICAgICAgICAgICAgICAgICAgICBm
YWNlID0gdGhpcy5mYWNlc1sgZiBdOworICAgIC8vCiAKLSAgICAgICAgICAgICAgICAgICAgdkEg
PSB0aGlzLnZlcnRpY2VzWyBmYWNlLmEgXTsKLSAgICAgICAgICAgICAgICAgICAgdkIgPSB0aGlz
LnZlcnRpY2VzWyBmYWNlLmIgXTsKLSAgICAgICAgICAgICAgICAgICAgdkMgPSB0aGlzLnZlcnRp
Y2VzWyBmYWNlLmMgXTsKKyAgICBmdW5jdGlvbiBJbnQ4QnVmZmVyQXR0cmlidXRlKCBhcnJheSwg
aXRlbVNpemUsIG5vcm1hbGl6ZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgY2Iuc3ViVmVj
dG9ycyggdkMsIHZCICk7Ci0gICAgICAgICAgICAgICAgICAgIGFiLnN1YlZlY3RvcnMoIHZBLCB2
QiApOwotICAgICAgICAgICAgICAgICAgICBjYi5jcm9zcyggYWIgKTsKKyAgICAgICAgQnVmZmVy
QXR0cmlidXRlLmNhbGwoIHRoaXMsIG5ldyBJbnQ4QXJyYXkoIGFycmF5ICksIGl0ZW1TaXplLCBu
b3JtYWxpemVkICk7CiAKLSAgICAgICAgICAgICAgICAgICAgdmVydGljZXNbIGZhY2UuYSBdLmFk
ZCggY2IgKTsKLSAgICAgICAgICAgICAgICAgICAgdmVydGljZXNbIGZhY2UuYiBdLmFkZCggY2Ig
KTsKLSAgICAgICAgICAgICAgICAgICAgdmVydGljZXNbIGZhY2UuYyBdLmFkZCggY2IgKTsKKyAg
ICB9CiAKLSAgICAgICAgICAgICAgICB9CisgICAgSW50OEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5
cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlICk7CisgICAgSW50
OEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnQ4QnVmZmVyQXR0cmli
dXRlOwogCi0gICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgdGhpcy5jb21w
dXRlRmFjZU5vcm1hbHMoKTsKKyAgICBmdW5jdGlvbiBVaW50OEJ1ZmZlckF0dHJpYnV0ZSggYXJy
YXksIGl0ZW1TaXplLCBub3JtYWxpemVkICkgewogCi0gICAgICAgICAgICAgICAgZm9yICggZiA9
IDAsIGZsID0gdGhpcy5mYWNlcy5sZW5ndGg7IGYgPCBmbDsgZiArKyApIHsKKyAgICAgICAgQnVm
ZmVyQXR0cmlidXRlLmNhbGwoIHRoaXMsIG5ldyBVaW50OEFycmF5KCBhcnJheSApLCBpdGVtU2l6
ZSwgbm9ybWFsaXplZCApOwogCi0gICAgICAgICAgICAgICAgICAgIGZhY2UgPSB0aGlzLmZhY2Vz
WyBmIF07CisgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzWyBmYWNlLmEgXS5h
ZGQoIGZhY2Uubm9ybWFsICk7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzWyBmYWNlLmIg
XS5hZGQoIGZhY2Uubm9ybWFsICk7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzWyBmYWNl
LmMgXS5hZGQoIGZhY2Uubm9ybWFsICk7CisgICAgVWludDhCdWZmZXJBdHRyaWJ1dGUucHJvdG90
eXBlID0gT2JqZWN0LmNyZWF0ZSggQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZSApOworICAgIFVp
bnQ4QnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFVpbnQ4QnVmZmVyQXR0
cmlidXRlOwogCi0gICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB9CisgICAgZnVuY3Rp
b24gVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6
ZWQgKSB7CiAKLSAgICAgICAgICAgIGZvciAoIHYgPSAwLCB2bCA9IHRoaXMudmVydGljZXMubGVu
Z3RoOyB2IDwgdmw7IHYgKysgKSB7CisgICAgICAgIEJ1ZmZlckF0dHJpYnV0ZS5jYWxsKCB0aGlz
LCBuZXcgVWludDhDbGFtcGVkQXJyYXkoIGFycmF5ICksIGl0ZW1TaXplLCBub3JtYWxpemVkICk7
CiAKLSAgICAgICAgICAgICAgICB2ZXJ0aWNlc1sgdiBdLm5vcm1hbGl6ZSgpOworICAgIH0KIAot
ICAgICAgICAgICAgfQorICAgIFVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUg
PSBPYmplY3QuY3JlYXRlKCBCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlICk7CisgICAgVWludDhD
bGFtcGVkQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFVpbnQ4Q2xhbXBl
ZEJ1ZmZlckF0dHJpYnV0ZTsKIAotICAgICAgICAgICAgZm9yICggZiA9IDAsIGZsID0gdGhpcy5m
YWNlcy5sZW5ndGg7IGYgPCBmbDsgZiArKyApIHsKIAotICAgICAgICAgICAgICAgIGZhY2UgPSB0
aGlzLmZhY2VzWyBmIF07CisgICAgZnVuY3Rpb24gSW50MTZCdWZmZXJBdHRyaWJ1dGUoIGFycmF5
LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApIHsKIAotICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXhO
b3JtYWxzID0gZmFjZS52ZXJ0ZXhOb3JtYWxzOworICAgICAgICBCdWZmZXJBdHRyaWJ1dGUuY2Fs
bCggdGhpcywgbmV3IEludDE2QXJyYXkoIGFycmF5ICksIGl0ZW1TaXplLCBub3JtYWxpemVkICk7
CiAKLSAgICAgICAgICAgICAgICBpZiAoIHZlcnRleE5vcm1hbHMubGVuZ3RoID09PSAzICkgewor
ICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhOb3JtYWxzWyAwIF0uY29weSggdmVy
dGljZXNbIGZhY2UuYSBdICk7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRleE5vcm1hbHNbIDEg
XS5jb3B5KCB2ZXJ0aWNlc1sgZmFjZS5iIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4
Tm9ybWFsc1sgMiBdLmNvcHkoIHZlcnRpY2VzWyBmYWNlLmMgXSApOworICAgIEludDE2QnVmZmVy
QXR0cmlidXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEJ1ZmZlckF0dHJpYnV0ZS5wcm90
b3R5cGUgKTsKKyAgICBJbnQxNkJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuY29uc3RydWN0b3Ig
PSBJbnQxNkJ1ZmZlckF0dHJpYnV0ZTsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgdmVydGV4Tm9ybWFsc1sgMCBdID0gdmVydGljZXNbIGZhY2UuYSBd
LmNsb25lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRleE5vcm1hbHNbIDEgXSA9IHZlcnRp
Y2VzWyBmYWNlLmIgXS5jbG9uZSgpOwotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhOb3JtYWxz
WyAyIF0gPSB2ZXJ0aWNlc1sgZmFjZS5jIF0uY2xvbmUoKTsKKyAgICBmdW5jdGlvbiBVaW50MTZC
dWZmZXJBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApIHsKIAotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgQnVmZmVyQXR0cmlidXRlLmNhbGwoIHRoaXMsIG5ldyBVaW50
MTZBcnJheSggYXJyYXkgKSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKTsKIAotICAgICAgICAgICAg
fQorICAgIH0KIAotICAgICAgICAgICAgaWYgKCB0aGlzLmZhY2VzLmxlbmd0aCA+IDAgKSB7Cisg
ICAgVWludDE2QnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEJ1ZmZl
ckF0dHJpYnV0ZS5wcm90b3R5cGUgKTsKKyAgICBVaW50MTZCdWZmZXJBdHRyaWJ1dGUucHJvdG90
eXBlLmNvbnN0cnVjdG9yID0gVWludDE2QnVmZmVyQXR0cmlidXRlOwogCi0gICAgICAgICAgICAg
ICAgdGhpcy5ub3JtYWxzTmVlZFVwZGF0ZSA9IHRydWU7CiAKLSAgICAgICAgICAgIH0KKyAgICBm
dW5jdGlvbiBJbnQzMkJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVk
ICkgewogCi0gICAgICAgIH0sCisgICAgICAgIEJ1ZmZlckF0dHJpYnV0ZS5jYWxsKCB0aGlzLCBu
ZXcgSW50MzJBcnJheSggYXJyYXkgKSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKTsKIAotICAgICAg
ICBjb21wdXRlRmxhdFZlcnRleE5vcm1hbHM6IGZ1bmN0aW9uICgpIHsKKyAgICB9CiAKLSAgICAg
ICAgICAgIHZhciBmLCBmbCwgZmFjZTsKKyAgICBJbnQzMkJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5
cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlICk7CisgICAgSW50
MzJCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50MzJCdWZmZXJBdHRy
aWJ1dGU7CiAKLSAgICAgICAgICAgIHRoaXMuY29tcHV0ZUZhY2VOb3JtYWxzKCk7CiAKLSAgICAg
ICAgICAgIGZvciAoIGYgPSAwLCBmbCA9IHRoaXMuZmFjZXMubGVuZ3RoOyBmIDwgZmw7IGYgKysg
KSB7CisgICAgZnVuY3Rpb24gVWludDMyQnVmZmVyQXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUs
IG5vcm1hbGl6ZWQgKSB7CiAKLSAgICAgICAgICAgICAgICBmYWNlID0gdGhpcy5mYWNlc1sgZiBd
OworICAgICAgICBCdWZmZXJBdHRyaWJ1dGUuY2FsbCggdGhpcywgbmV3IFVpbnQzMkFycmF5KCBh
cnJheSApLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApOwogCi0gICAgICAgICAgICAgICAgdmFyIHZl
cnRleE5vcm1hbHMgPSBmYWNlLnZlcnRleE5vcm1hbHM7CisgICAgfQogCi0gICAgICAgICAgICAg
ICAgaWYgKCB2ZXJ0ZXhOb3JtYWxzLmxlbmd0aCA9PT0gMyApIHsKKyAgICBVaW50MzJCdWZmZXJB
dHRyaWJ1dGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQnVmZmVyQXR0cmlidXRlLnByb3Rv
dHlwZSApOworICAgIFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuY29uc3RydWN0b3Ig
PSBVaW50MzJCdWZmZXJBdHRyaWJ1dGU7CiAKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4Tm9y
bWFsc1sgMCBdLmNvcHkoIGZhY2Uubm9ybWFsICk7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRl
eE5vcm1hbHNbIDEgXS5jb3B5KCBmYWNlLm5vcm1hbCApOwotICAgICAgICAgICAgICAgICAgICB2
ZXJ0ZXhOb3JtYWxzWyAyIF0uY29weSggZmFjZS5ub3JtYWwgKTsKIAotICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgZnVuY3Rpb24gRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0
ZW1TaXplLCBub3JtYWxpemVkICkgewogCi0gICAgICAgICAgICAgICAgICAgIHZlcnRleE5vcm1h
bHNbIDAgXSA9IGZhY2Uubm9ybWFsLmNsb25lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRl
eE5vcm1hbHNbIDEgXSA9IGZhY2Uubm9ybWFsLmNsb25lKCk7Ci0gICAgICAgICAgICAgICAgICAg
IHZlcnRleE5vcm1hbHNbIDIgXSA9IGZhY2Uubm9ybWFsLmNsb25lKCk7CisgICAgICAgIEJ1ZmZl
ckF0dHJpYnV0ZS5jYWxsKCB0aGlzLCBuZXcgRmxvYXQzMkFycmF5KCBhcnJheSApLCBpdGVtU2l6
ZSwgbm9ybWFsaXplZCApOwogCi0gICAgICAgICAgICAgICAgfQorICAgIH0KIAotICAgICAgICAg
ICAgfQorICAgIEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0
ZSggQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZSApOworICAgIEZsb2F0MzJCdWZmZXJBdHRyaWJ1
dGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZTsKIAotICAg
ICAgICAgICAgaWYgKCB0aGlzLmZhY2VzLmxlbmd0aCA+IDAgKSB7CiAKLSAgICAgICAgICAgICAg
ICB0aGlzLm5vcm1hbHNOZWVkVXBkYXRlID0gdHJ1ZTsKKyAgICBmdW5jdGlvbiBGbG9hdDY0QnVm
ZmVyQXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKSB7CiAKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgQnVmZmVyQXR0cmlidXRlLmNhbGwoIHRoaXMsIG5ldyBGbG9hdDY0QXJy
YXkoIGFycmF5ICksIGl0ZW1TaXplLCBub3JtYWxpemVkICk7CiAKLSAgICAgICAgfSwKKyAgICB9
CiAKLSAgICAgICAgY29tcHV0ZU1vcnBoTm9ybWFsczogZnVuY3Rpb24gKCkgeworICAgIEZsb2F0
NjRCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQnVmZmVyQXR0cmli
dXRlLnByb3RvdHlwZSApOworICAgIEZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLmNv
bnN0cnVjdG9yID0gRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZTsKIAotICAgICAgICAgICAgdmFyIGks
IGlsLCBmLCBmbCwgZmFjZTsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6
Ly9tcmRvb2IuY29tLworICAgICAqLwogCi0gICAgICAgICAgICAvLyBzYXZlIG9yaWdpbmFsIG5v
cm1hbHMKLSAgICAgICAgICAgIC8vIC0gY3JlYXRlIHRlbXAgdmFyaWFibGVzIG9uIGZpcnN0IGFj
Y2VzcwotICAgICAgICAgICAgLy8gICBvdGhlcndpc2UganVzdCBjb3B5IChmb3IgZmFzdGVyIHJl
cGVhdGVkIGNhbGxzKQorICAgIGZ1bmN0aW9uIERpcmVjdEdlb21ldHJ5KCkgewogCi0gICAgICAg
ICAgICBmb3IgKCBmID0gMCwgZmwgPSB0aGlzLmZhY2VzLmxlbmd0aDsgZiA8IGZsOyBmICsrICkg
eworICAgICAgICB0aGlzLnZlcnRpY2VzID0gW107CisgICAgICAgIHRoaXMubm9ybWFscyA9IFtd
OworICAgICAgICB0aGlzLmNvbG9ycyA9IFtdOworICAgICAgICB0aGlzLnV2cyA9IFtdOworICAg
ICAgICB0aGlzLnV2czIgPSBbXTsKIAotICAgICAgICAgICAgICAgIGZhY2UgPSB0aGlzLmZhY2Vz
WyBmIF07CisgICAgICAgIHRoaXMuZ3JvdXBzID0gW107CiAKLSAgICAgICAgICAgICAgICBpZiAo
ICEgZmFjZS5fX29yaWdpbmFsRmFjZU5vcm1hbCApIHsKKyAgICAgICAgdGhpcy5tb3JwaFRhcmdl
dHMgPSB7fTsKIAotICAgICAgICAgICAgICAgICAgICBmYWNlLl9fb3JpZ2luYWxGYWNlTm9ybWFs
ID0gZmFjZS5ub3JtYWwuY2xvbmUoKTsKKyAgICAgICAgdGhpcy5za2luV2VpZ2h0cyA9IFtdOwor
ICAgICAgICB0aGlzLnNraW5JbmRpY2VzID0gW107CiAKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAvLyB0aGlzLmxpbmVEaXN0YW5jZXMgPSBbXTsKIAotICAgICAgICAgICAgICAg
ICAgICBmYWNlLl9fb3JpZ2luYWxGYWNlTm9ybWFsLmNvcHkoIGZhY2Uubm9ybWFsICk7CisgICAg
ICAgIHRoaXMuYm91bmRpbmdCb3ggPSBudWxsOworICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJl
ID0gbnVsbDsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgLy8gdXBkYXRlIGZsYWdzCiAK
LSAgICAgICAgICAgICAgICBpZiAoICEgZmFjZS5fX29yaWdpbmFsVmVydGV4Tm9ybWFscyApIGZh
Y2UuX19vcmlnaW5hbFZlcnRleE5vcm1hbHMgPSBbXTsKKyAgICAgICAgdGhpcy52ZXJ0aWNlc05l
ZWRVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5ub3JtYWxzTmVlZFVwZGF0ZSA9IGZhbHNl
OworICAgICAgICB0aGlzLmNvbG9yc05lZWRVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy51
dnNOZWVkVXBkYXRlID0gZmFsc2U7CisgICAgICAgIHRoaXMuZ3JvdXBzTmVlZFVwZGF0ZSA9IGZh
bHNlOwogCi0gICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0gZmFjZS52ZXJ0ZXhOb3Jt
YWxzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworICAgIH0KIAotICAgICAgICAgICAgICAgICAg
ICBpZiAoICEgZmFjZS5fX29yaWdpbmFsVmVydGV4Tm9ybWFsc1sgaSBdICkgeworICAgIE9iamVj
dC5hc3NpZ24oIERpcmVjdEdlb21ldHJ5LnByb3RvdHlwZSwgewogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBmYWNlLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzWyBpIF0gPSBmYWNlLnZlcnRleE5v
cm1hbHNbIGkgXS5jbG9uZSgpOworICAgICAgICBjb21wdXRlR3JvdXBzOiBmdW5jdGlvbiAoIGdl
b21ldHJ5ICkgewogCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2
YXIgZ3JvdXA7CisgICAgICAgICAgICB2YXIgZ3JvdXBzID0gW107CisgICAgICAgICAgICB2YXIg
bWF0ZXJpYWxJbmRleCA9IHVuZGVmaW5lZDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgZmFj
ZS5fX29yaWdpbmFsVmVydGV4Tm9ybWFsc1sgaSBdLmNvcHkoIGZhY2UudmVydGV4Tm9ybWFsc1sg
aSBdICk7CisgICAgICAgICAgICB2YXIgZmFjZXMgPSBnZW9tZXRyeS5mYWNlczsKIAotICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBmYWNlcy5s
ZW5ndGg7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFy
IGZhY2UgPSBmYWNlc1sgaSBdOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8g
bWF0ZXJpYWxzCiAKLSAgICAgICAgICAgIC8vIHVzZSB0ZW1wIGdlb21ldHJ5IHRvIGNvbXB1dGUg
ZmFjZSBhbmQgdmVydGV4IG5vcm1hbHMgZm9yIGVhY2ggbW9ycGgKKyAgICAgICAgICAgICAgICBp
ZiAoIGZhY2UubWF0ZXJpYWxJbmRleCAhPT0gbWF0ZXJpYWxJbmRleCApIHsKIAotICAgICAgICAg
ICAgdmFyIHRtcEdlbyA9IG5ldyBHZW9tZXRyeSgpOwotICAgICAgICAgICAgdG1wR2VvLmZhY2Vz
ID0gdGhpcy5mYWNlczsKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxJbmRleCA9IGZhY2Uu
bWF0ZXJpYWxJbmRleDsKIAotICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0gdGhpcy5tb3Jw
aFRhcmdldHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICggZ3JvdXAgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBv
biBmaXJzdCBhY2Nlc3MKLQotICAgICAgICAgICAgICAgIGlmICggISB0aGlzLm1vcnBoTm9ybWFs
c1sgaSBdICkgewotCi0gICAgICAgICAgICAgICAgICAgIHRoaXMubW9ycGhOb3JtYWxzWyBpIF0g
PSB7fTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3JwaE5vcm1hbHNbIGkgXS5mYWNlTm9y
bWFscyA9IFtdOwotICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcnBoTm9ybWFsc1sgaSBdLnZl
cnRleE5vcm1hbHMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmNvdW50ID0g
KCBpICogMyApIC0gZ3JvdXAuc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHMu
cHVzaCggZ3JvdXAgKTsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgZHN0Tm9ybWFsc0ZhY2Ug
PSB0aGlzLm1vcnBoTm9ybWFsc1sgaSBdLmZhY2VOb3JtYWxzOwotICAgICAgICAgICAgICAgICAg
ICB2YXIgZHN0Tm9ybWFsc1ZlcnRleCA9IHRoaXMubW9ycGhOb3JtYWxzWyBpIF0udmVydGV4Tm9y
bWFsczsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHZhciBm
YWNlTm9ybWFsLCB2ZXJ0ZXhOb3JtYWxzOworICAgICAgICAgICAgICAgICAgICBncm91cCA9IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBpICogMywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGVyaWFsSW5kZXg6IG1hdGVyaWFsSW5kZXgKKyAgICAgICAgICAgICAgICAgICAg
fTsKIAotICAgICAgICAgICAgICAgICAgICBmb3IgKCBmID0gMCwgZmwgPSB0aGlzLmZhY2VzLmxl
bmd0aDsgZiA8IGZsOyBmICsrICkgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICAgICAgZmFjZU5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhOb3JtYWxzID0geyBhOiBuZXcgVmVjdG9yMygpLCBiOiBuZXcgVmVjdG9y
MygpLCBjOiBuZXcgVmVjdG9yMygpIH07CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRzdE5vcm1hbHNGYWNlLnB1c2goIGZhY2VOb3JtYWwgKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRzdE5vcm1hbHNWZXJ0ZXgucHVzaCggdmVydGV4Tm9ybWFscyApOworICAg
ICAgICAgICAgaWYgKCBncm91cCAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBncm91cC5jb3VudCA9ICggaSAqIDMgKSAtIGdyb3VwLnN0
YXJ0OworICAgICAgICAgICAgICAgIGdyb3Vwcy5wdXNoKCBncm91cCApOwogCi0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdmFyIG1vcnBoTm9ybWFs
cyA9IHRoaXMubW9ycGhOb3JtYWxzWyBpIF07CisgICAgICAgICAgICB0aGlzLmdyb3VwcyA9IGdy
b3VwczsKIAotICAgICAgICAgICAgICAgIC8vIHNldCB2ZXJ0aWNlcyB0byBtb3JwaCB0YXJnZXQK
KyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHRtcEdlby52ZXJ0aWNlcyA9IHRoaXMubW9y
cGhUYXJnZXRzWyBpIF0udmVydGljZXM7CisgICAgICAgIGZyb21HZW9tZXRyeTogZnVuY3Rpb24g
KCBnZW9tZXRyeSApIHsKIAotICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgbW9ycGggbm9ybWFs
cworICAgICAgICAgICAgdmFyIGZhY2VzID0gZ2VvbWV0cnkuZmFjZXM7CisgICAgICAgICAgICB2
YXIgdmVydGljZXMgPSBnZW9tZXRyeS52ZXJ0aWNlczsKKyAgICAgICAgICAgIHZhciBmYWNlVmVy
dGV4VXZzID0gZ2VvbWV0cnkuZmFjZVZlcnRleFV2czsKIAotICAgICAgICAgICAgICAgIHRtcEdl
by5jb21wdXRlRmFjZU5vcm1hbHMoKTsKLSAgICAgICAgICAgICAgICB0bXBHZW8uY29tcHV0ZVZl
cnRleE5vcm1hbHMoKTsKKyAgICAgICAgICAgIHZhciBoYXNGYWNlVmVydGV4VXYgPSBmYWNlVmVy
dGV4VXZzWyAwIF0gJiYgZmFjZVZlcnRleFV2c1sgMCBdLmxlbmd0aCA+IDA7CisgICAgICAgICAg
ICB2YXIgaGFzRmFjZVZlcnRleFV2MiA9IGZhY2VWZXJ0ZXhVdnNbIDEgXSAmJiBmYWNlVmVydGV4
VXZzWyAxIF0ubGVuZ3RoID4gMDsKIAotICAgICAgICAgICAgICAgIC8vIHN0b3JlIG1vcnBoIG5v
cm1hbHMKKyAgICAgICAgICAgIC8vIG1vcnBocwogCi0gICAgICAgICAgICAgICAgdmFyIGZhY2VO
b3JtYWwsIHZlcnRleE5vcm1hbHM7CisgICAgICAgICAgICB2YXIgbW9ycGhUYXJnZXRzID0gZ2Vv
bWV0cnkubW9ycGhUYXJnZXRzOworICAgICAgICAgICAgdmFyIG1vcnBoVGFyZ2V0c0xlbmd0aCA9
IG1vcnBoVGFyZ2V0cy5sZW5ndGg7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCBmID0gMCwgZmwg
PSB0aGlzLmZhY2VzLmxlbmd0aDsgZiA8IGZsOyBmICsrICkgeworICAgICAgICAgICAgdmFyIG1v
cnBoVGFyZ2V0c1Bvc2l0aW9uOwogCi0gICAgICAgICAgICAgICAgICAgIGZhY2UgPSB0aGlzLmZh
Y2VzWyBmIF07CisgICAgICAgICAgICBpZiAoIG1vcnBoVGFyZ2V0c0xlbmd0aCA+IDAgKSB7CiAK
LSAgICAgICAgICAgICAgICAgICAgZmFjZU5vcm1hbCA9IG1vcnBoTm9ybWFscy5mYWNlTm9ybWFs
c1sgZiBdOwotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhOb3JtYWxzID0gbW9ycGhOb3JtYWxz
LnZlcnRleE5vcm1hbHNbIGYgXTsKKyAgICAgICAgICAgICAgICBtb3JwaFRhcmdldHNQb3NpdGlv
biA9IFtdOwogCi0gICAgICAgICAgICAgICAgICAgIGZhY2VOb3JtYWwuY29weSggZmFjZS5ub3Jt
YWwgKTsKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBtb3JwaFRhcmdldHNM
ZW5ndGg7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4Tm9ybWFscy5hLmNv
cHkoIGZhY2UudmVydGV4Tm9ybWFsc1sgMCBdICk7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRl
eE5vcm1hbHMuYi5jb3B5KCBmYWNlLnZlcnRleE5vcm1hbHNbIDEgXSApOwotICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhOb3JtYWxzLmMuY29weSggZmFjZS52ZXJ0ZXhOb3JtYWxzWyAyIF0gKTsK
KyAgICAgICAgICAgICAgICAgICAgbW9ycGhUYXJnZXRzUG9zaXRpb25bIGkgXSA9IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWU6IG1vcnBoVGFyZ2V0c1sgaSBdLm5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhOiBbXQorICAgICAgICAgICAgICAgICAgICB9OwogCiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5tb3Jw
aFRhcmdldHMucG9zaXRpb24gPSBtb3JwaFRhcmdldHNQb3NpdGlvbjsKIAotICAgICAgICAgICAg
Ly8gcmVzdG9yZSBvcmlnaW5hbCBub3JtYWxzCisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGZvciAoIGYgPSAwLCBmbCA9IHRoaXMuZmFjZXMubGVuZ3RoOyBmIDwgZmw7IGYgKysgKSB7Cisg
ICAgICAgICAgICB2YXIgbW9ycGhOb3JtYWxzID0gZ2VvbWV0cnkubW9ycGhOb3JtYWxzOworICAg
ICAgICAgICAgdmFyIG1vcnBoTm9ybWFsc0xlbmd0aCA9IG1vcnBoTm9ybWFscy5sZW5ndGg7CiAK
LSAgICAgICAgICAgICAgICBmYWNlID0gdGhpcy5mYWNlc1sgZiBdOworICAgICAgICAgICAgdmFy
IG1vcnBoVGFyZ2V0c05vcm1hbDsKIAotICAgICAgICAgICAgICAgIGZhY2Uubm9ybWFsID0gZmFj
ZS5fX29yaWdpbmFsRmFjZU5vcm1hbDsKLSAgICAgICAgICAgICAgICBmYWNlLnZlcnRleE5vcm1h
bHMgPSBmYWNlLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzOworICAgICAgICAgICAgaWYgKCBtb3Jw
aE5vcm1hbHNMZW5ndGggPiAwICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bW9ycGhUYXJnZXRzTm9ybWFsID0gW107CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IDA7IGkgPCBtb3JwaE5vcm1hbHNMZW5ndGg7IGkgKysgKSB7CiAKLSAgICAg
ICAgY29tcHV0ZUJvdW5kaW5nQm94OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAg
IG1vcnBoVGFyZ2V0c05vcm1hbFsgaSBdID0geworICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZTogbW9ycGhOb3JtYWxzWyBpIF0ubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6
IFtdCisgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIGlmICggdGhpcy5ib3Vu
ZGluZ0JveCA9PT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJveDMoKTsKKyAgICAgICAgICAgICAgICB0aGlzLm1v
cnBoVGFyZ2V0cy5ub3JtYWwgPSBtb3JwaFRhcmdldHNOb3JtYWw7CiAKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tUG9pbnRzKCB0aGlzLnZlcnRp
Y2VzICk7CisgICAgICAgICAgICAvLyBza2lucwogCi0gICAgICAgIH0sCisgICAgICAgICAgICB2
YXIgc2tpbkluZGljZXMgPSBnZW9tZXRyeS5za2luSW5kaWNlczsKKyAgICAgICAgICAgIHZhciBz
a2luV2VpZ2h0cyA9IGdlb21ldHJ5LnNraW5XZWlnaHRzOwogCi0gICAgICAgIGNvbXB1dGVCb3Vu
ZGluZ1NwaGVyZTogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGhhc1NraW5JbmRpY2Vz
ID0gc2tpbkluZGljZXMubGVuZ3RoID09PSB2ZXJ0aWNlcy5sZW5ndGg7CisgICAgICAgICAgICB2
YXIgaGFzU2tpbldlaWdodHMgPSBza2luV2VpZ2h0cy5sZW5ndGggPT09IHZlcnRpY2VzLmxlbmd0
aDsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLmJvdW5kaW5nU3BoZXJlID09PSBudWxsICkgewor
ICAgICAgICAgICAgLy8KIAotICAgICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdTcGhlcmUgPSBu
ZXcgU3BoZXJlKCk7CisgICAgICAgICAgICBpZiAoIHZlcnRpY2VzLmxlbmd0aCA+IDAgJiYgZmFj
ZXMubGVuZ3RoID09PSAwICkgeworCisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RI
UkVFLkRpcmVjdEdlb21ldHJ5OiBGYWNlbGVzcyBnZW9tZXRyaWVzIGFyZSBub3Qgc3VwcG9ydGVk
LicgKTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJl
LnNldEZyb21Qb2ludHMoIHRoaXMudmVydGljZXMgKTsKKyAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gMDsgaSA8IGZhY2VzLmxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICB9LAorICAgICAgICAg
ICAgICAgIHZhciBmYWNlID0gZmFjZXNbIGkgXTsKIAotICAgICAgICBtZXJnZTogZnVuY3Rpb24g
KCBnZW9tZXRyeSwgbWF0cml4LCBtYXRlcmlhbEluZGV4T2Zmc2V0ICkgeworICAgICAgICAgICAg
ICAgIHRoaXMudmVydGljZXMucHVzaCggdmVydGljZXNbIGZhY2UuYSBdLCB2ZXJ0aWNlc1sgZmFj
ZS5iIF0sIHZlcnRpY2VzWyBmYWNlLmMgXSApOwogCi0gICAgICAgICAgICBpZiAoICEgKCBnZW9t
ZXRyeSAmJiBnZW9tZXRyeS5pc0dlb21ldHJ5ICkgKSB7CisgICAgICAgICAgICAgICAgdmFyIHZl
cnRleE5vcm1hbHMgPSBmYWNlLnZlcnRleE5vcm1hbHM7CiAKLSAgICAgICAgICAgICAgICBjb25z
b2xlLmVycm9yKCAnVEhSRUUuR2VvbWV0cnkubWVyZ2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3Rh
bmNlIG9mIFRIUkVFLkdlb21ldHJ5LicsIGdlb21ldHJ5ICk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIGlmICggdmVydGV4Tm9ybWFscy5sZW5ndGggPT09IDMgKSB7
CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3JtYWxzLnB1c2go
IHZlcnRleE5vcm1hbHNbIDAgXSwgdmVydGV4Tm9ybWFsc1sgMSBdLCB2ZXJ0ZXhOb3JtYWxzWyAy
IF0gKTsKIAotICAgICAgICAgICAgdmFyIG5vcm1hbE1hdHJpeCwKLSAgICAgICAgICAgICAgICB2
ZXJ0ZXhPZmZzZXQgPSB0aGlzLnZlcnRpY2VzLmxlbmd0aCwKLSAgICAgICAgICAgICAgICB2ZXJ0
aWNlczEgPSB0aGlzLnZlcnRpY2VzLAotICAgICAgICAgICAgICAgIHZlcnRpY2VzMiA9IGdlb21l
dHJ5LnZlcnRpY2VzLAotICAgICAgICAgICAgICAgIGZhY2VzMSA9IHRoaXMuZmFjZXMsCi0gICAg
ICAgICAgICAgICAgZmFjZXMyID0gZ2VvbWV0cnkuZmFjZXMsCi0gICAgICAgICAgICAgICAgdXZz
MSA9IHRoaXMuZmFjZVZlcnRleFV2c1sgMCBdLAotICAgICAgICAgICAgICAgIHV2czIgPSBnZW9t
ZXRyeS5mYWNlVmVydGV4VXZzWyAwIF0sCi0gICAgICAgICAgICAgICAgY29sb3JzMSA9IHRoaXMu
Y29sb3JzLAotICAgICAgICAgICAgICAgIGNvbG9yczIgPSBnZW9tZXRyeS5jb2xvcnM7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgaWYgKCBtYXRlcmlhbEluZGV4T2Zm
c2V0ID09PSB1bmRlZmluZWQgKSBtYXRlcmlhbEluZGV4T2Zmc2V0ID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIG5vcm1hbCA9IGZhY2Uubm9ybWFsOwogCi0gICAgICAgICAgICBpZiAoIG1h
dHJpeCAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm5vcm1hbHMu
cHVzaCggbm9ybWFsLCBub3JtYWwsIG5vcm1hbCApOwogCi0gICAgICAgICAgICAgICAgbm9ybWFs
TWF0cml4ID0gbmV3IE1hdHJpeDMoKS5nZXROb3JtYWxNYXRyaXgoIG1hdHJpeCApOworICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXhD
b2xvcnMgPSBmYWNlLnZlcnRleENvbG9yczsKIAotICAgICAgICAgICAgLy8gdmVydGljZXMKKyAg
ICAgICAgICAgICAgICBpZiAoIHZlcnRleENvbG9ycy5sZW5ndGggPT09IDMgKSB7CiAKLSAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSB2ZXJ0aWNlczIubGVuZ3RoOyBpIDwgaWw7IGkg
KysgKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sb3JzLnB1c2goIHZlcnRleENvbG9y
c1sgMCBdLCB2ZXJ0ZXhDb2xvcnNbIDEgXSwgdmVydGV4Q29sb3JzWyAyIF0gKTsKIAotICAgICAg
ICAgICAgICAgIHZhciB2ZXJ0ZXggPSB2ZXJ0aWNlczJbIGkgXTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgewogCi0gICAgICAgICAgICAgICAgdmFyIHZlcnRleENvcHkgPSB2ZXJ0ZXguY2xvbmUo
KTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gZmFjZS5jb2xvcjsKIAotICAgICAg
ICAgICAgICAgIGlmICggbWF0cml4ICE9PSB1bmRlZmluZWQgKSB2ZXJ0ZXhDb3B5LmFwcGx5TWF0
cml4NCggbWF0cml4ICk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sb3JzLnB1c2goIGNv
bG9yLCBjb2xvciwgY29sb3IgKTsKIAotICAgICAgICAgICAgICAgIHZlcnRpY2VzMS5wdXNoKCB2
ZXJ0ZXhDb3B5ICk7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKCBoYXNGYWNlVmVydGV4VXYgPT09IHRydWUgKSB7CiAKLSAgICAgICAgICAg
IC8vIGNvbG9ycworICAgICAgICAgICAgICAgICAgICB2YXIgdmVydGV4VXZzID0gZmFjZVZlcnRl
eFV2c1sgMCBdWyBpIF07CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBjb2xv
cnMyLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIHZl
cnRleFV2cyAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgY29sb3JzMS5wdXNo
KCBjb2xvcnMyWyBpIF0uY2xvbmUoKSApOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51
dnMucHVzaCggdmVydGV4VXZzWyAwIF0sIHZlcnRleFV2c1sgMSBdLCB2ZXJ0ZXhVdnNbIDIgXSAp
OwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAg
ICAgICAgIC8vIGZhY2VzCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdU
SFJFRS5EaXJlY3RHZW9tZXRyeS5mcm9tR2VvbWV0cnkoKTogVW5kZWZpbmVkIHZlcnRleFV2ICcs
IGkgKTsKIAotICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0gZmFjZXMyLmxlbmd0aDsgaSA8
IGlsOyBpICsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51dnMucHVzaCggbmV3
IFZlY3RvcjIoKSwgbmV3IFZlY3RvcjIoKSwgbmV3IFZlY3RvcjIoKSApOwogCi0gICAgICAgICAg
ICAgICAgdmFyIGZhY2UgPSBmYWNlczJbIGkgXSwgZmFjZUNvcHksIG5vcm1hbCwgY29sb3IsCi0g
ICAgICAgICAgICAgICAgICAgIGZhY2VWZXJ0ZXhOb3JtYWxzID0gZmFjZS52ZXJ0ZXhOb3JtYWxz
LAotICAgICAgICAgICAgICAgICAgICBmYWNlVmVydGV4Q29sb3JzID0gZmFjZS52ZXJ0ZXhDb2xv
cnM7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGZhY2VDb3B5ID0g
bmV3IEZhY2UzKCBmYWNlLmEgKyB2ZXJ0ZXhPZmZzZXQsIGZhY2UuYiArIHZlcnRleE9mZnNldCwg
ZmFjZS5jICsgdmVydGV4T2Zmc2V0ICk7Ci0gICAgICAgICAgICAgICAgZmFjZUNvcHkubm9ybWFs
LmNvcHkoIGZhY2Uubm9ybWFsICk7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgaWYgKCBub3JtYWxNYXRyaXggIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIGhhc0ZhY2VWZXJ0ZXhVdjIgPT09IHRydWUgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
ZmFjZUNvcHkubm9ybWFsLmFwcGx5TWF0cml4Myggbm9ybWFsTWF0cml4ICkubm9ybWFsaXplKCk7
CisgICAgICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXhVdnMgPSBmYWNlVmVydGV4VXZzWyAxIF1b
IGkgXTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCB2ZXJ0
ZXhVdnMgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0g
MCwgamwgPSBmYWNlVmVydGV4Tm9ybWFscy5sZW5ndGg7IGogPCBqbDsgaiArKyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMudXZzMi5wdXNoKCB2ZXJ0ZXhVdnNbIDAgXSwgdmVydGV4
VXZzWyAxIF0sIHZlcnRleFV2c1sgMiBdICk7CiAKLSAgICAgICAgICAgICAgICAgICAgbm9ybWFs
ID0gZmFjZVZlcnRleE5vcm1hbHNbIGogXS5jbG9uZSgpOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewogCi0gICAgICAgICAgICAgICAgICAgIGlmICggbm9ybWFsTWF0cml4ICE9PSB1bmRl
ZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5E
aXJlY3RHZW9tZXRyeS5mcm9tR2VvbWV0cnkoKTogVW5kZWZpbmVkIHZlcnRleFV2MiAnLCBpICk7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbC5hcHBseU1hdHJpeDMoIG5vcm1hbE1h
dHJpeCApLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51dnMyLnB1
c2goIG5ldyBWZWN0b3IyKCksIG5ldyBWZWN0b3IyKCksIG5ldyBWZWN0b3IyKCkgKTsKIAogICAg
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgZmFjZUNvcHkudmVydGV4
Tm9ybWFscy5wdXNoKCBub3JtYWwgKTsKLQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIGZhY2VDb3B5LmNvbG9yLmNvcHkoIGZhY2UuY29sb3IgKTsKKyAgICAgICAgICAgICAg
ICAvLyBtb3JwaHMKIAotICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0gMCwgamwgPSBmYWNl
VmVydGV4Q29sb3JzLmxlbmd0aDsgaiA8IGpsOyBqICsrICkgeworICAgICAgICAgICAgICAgIGZv
ciAoIHZhciBqID0gMDsgaiA8IG1vcnBoVGFyZ2V0c0xlbmd0aDsgaiArKyApIHsKIAotICAgICAg
ICAgICAgICAgICAgICBjb2xvciA9IGZhY2VWZXJ0ZXhDb2xvcnNbIGogXTsKLSAgICAgICAgICAg
ICAgICAgICAgZmFjZUNvcHkudmVydGV4Q29sb3JzLnB1c2goIGNvbG9yLmNsb25lKCkgKTsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIG1vcnBoVGFyZ2V0ID0gbW9ycGhUYXJnZXRzWyBqIF0udmVy
dGljZXM7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1vcnBoVGFy
Z2V0c1Bvc2l0aW9uWyBqIF0uZGF0YS5wdXNoKCBtb3JwaFRhcmdldFsgZmFjZS5hIF0sIG1vcnBo
VGFyZ2V0WyBmYWNlLmIgXSwgbW9ycGhUYXJnZXRbIGZhY2UuYyBdICk7CiAKLSAgICAgICAgICAg
ICAgICBmYWNlQ29weS5tYXRlcmlhbEluZGV4ID0gZmFjZS5tYXRlcmlhbEluZGV4ICsgbWF0ZXJp
YWxJbmRleE9mZnNldDsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBmYWNl
czEucHVzaCggZmFjZUNvcHkgKTsKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDA7IGog
PCBtb3JwaE5vcm1hbHNMZW5ndGg7IGogKysgKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgdmFyIG1vcnBoTm9ybWFsID0gbW9ycGhOb3JtYWxzWyBqIF0udmVydGV4Tm9y
bWFsc1sgaSBdOwogCi0gICAgICAgICAgICAvLyB1dnMKKyAgICAgICAgICAgICAgICAgICAgbW9y
cGhUYXJnZXRzTm9ybWFsWyBqIF0uZGF0YS5wdXNoKCBtb3JwaE5vcm1hbC5hLCBtb3JwaE5vcm1h
bC5iLCBtb3JwaE5vcm1hbC5jICk7CiAKLSAgICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IHV2
czIubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgdmFyIHV2ID0gdXZzMlsgaSBdLCB1dkNvcHkgPSBbXTsKKyAgICAgICAgICAgICAg
ICAvLyBza2lucwogCi0gICAgICAgICAgICAgICAgaWYgKCB1diA9PT0gdW5kZWZpbmVkICkgewor
ICAgICAgICAgICAgICAgIGlmICggaGFzU2tpbkluZGljZXMgKSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2tpbkluZGljZXMucHVz
aCggc2tpbkluZGljZXNbIGZhY2UuYSBdLCBza2luSW5kaWNlc1sgZmFjZS5iIF0sIHNraW5JbmRp
Y2VzWyBmYWNlLmMgXSApOwogCiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
Zm9yICggdmFyIGogPSAwLCBqbCA9IHV2Lmxlbmd0aDsgaiA8IGpsOyBqICsrICkgeworICAgICAg
ICAgICAgICAgIGlmICggaGFzU2tpbldlaWdodHMgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
dXZDb3B5LnB1c2goIHV2WyBqIF0uY2xvbmUoKSApOworICAgICAgICAgICAgICAgICAgICB0aGlz
LnNraW5XZWlnaHRzLnB1c2goIHNraW5XZWlnaHRzWyBmYWNlLmEgXSwgc2tpbldlaWdodHNbIGZh
Y2UuYiBdLCBza2luV2VpZ2h0c1sgZmFjZS5jIF0gKTsKIAogICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIHV2czEucHVzaCggdXZDb3B5ICk7Ci0KICAgICAgICAgICAgIH0KIAot
ICAgICAgICB9LAorICAgICAgICAgICAgdGhpcy5jb21wdXRlR3JvdXBzKCBnZW9tZXRyeSApOwog
Ci0gICAgICAgIG1lcmdlTWVzaDogZnVuY3Rpb24gKCBtZXNoICkgeworICAgICAgICAgICAgdGhp
cy52ZXJ0aWNlc05lZWRVcGRhdGUgPSBnZW9tZXRyeS52ZXJ0aWNlc05lZWRVcGRhdGU7CisgICAg
ICAgICAgICB0aGlzLm5vcm1hbHNOZWVkVXBkYXRlID0gZ2VvbWV0cnkubm9ybWFsc05lZWRVcGRh
dGU7CisgICAgICAgICAgICB0aGlzLmNvbG9yc05lZWRVcGRhdGUgPSBnZW9tZXRyeS5jb2xvcnNO
ZWVkVXBkYXRlOworICAgICAgICAgICAgdGhpcy51dnNOZWVkVXBkYXRlID0gZ2VvbWV0cnkudXZz
TmVlZFVwZGF0ZTsKKyAgICAgICAgICAgIHRoaXMuZ3JvdXBzTmVlZFVwZGF0ZSA9IGdlb21ldHJ5
Lmdyb3Vwc05lZWRVcGRhdGU7CiAKLSAgICAgICAgICAgIGlmICggISAoIG1lc2ggJiYgbWVzaC5p
c01lc2ggKSApIHsKKyAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUgIT09
IG51bGwgKSB7CiAKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuR2VvbWV0
cnkubWVyZ2VNZXNoKCk6IG1lc2ggbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLk1lc2guJywgbWVz
aCApOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB0aGlzLmJvdW5k
aW5nU3BoZXJlID0gZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUuY2xvbmUoKTsKIAogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAoIG1lc2gubWF0cml4QXV0b1VwZGF0ZSApIG1lc2gudXBk
YXRlTWF0cml4KCk7CisgICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmJvdW5kaW5nQm94ICE9PSBu
dWxsICkgewogCi0gICAgICAgICAgICB0aGlzLm1lcmdlKCBtZXNoLmdlb21ldHJ5LCBtZXNoLm1h
dHJpeCApOworICAgICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBnZW9tZXRyeS5ib3Vu
ZGluZ0JveC5jbG9uZSgpOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICB9CiAKLSAgICAgICAg
LyoKLSAgICAgICAgICogQ2hlY2tzIGZvciBkdXBsaWNhdGUgdmVydGljZXMgd2l0aCBoYXNobWFw
LgotICAgICAgICAgKiBEdXBsaWNhdGVkIHZlcnRpY2VzIGFyZSByZW1vdmVkCi0gICAgICAgICAq
IGFuZCBmYWNlcycgdmVydGljZXMgYXJlIHVwZGF0ZWQuCi0gICAgICAgICAqLworICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgbWVyZ2VWZXJ0aWNlczogZnVuY3Rpb24gKCkgewor
ICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciB2ZXJ0aWNlc01hcCA9IHt9OyAvLyBIYXNobWFw
IGZvciBsb29raW5nIHVwIHZlcnRpY2VzIGJ5IHBvc2l0aW9uIGNvb3JkaW5hdGVzIChhbmQgbWFr
aW5nIHN1cmUgdGhleSBhcmUgdW5pcXVlKQotICAgICAgICAgICAgdmFyIHVuaXF1ZSA9IFtdLCBj
aGFuZ2VzID0gW107CisgICAgfSApOwogCi0gICAgICAgICAgICB2YXIgdiwga2V5OwotICAgICAg
ICAgICAgdmFyIHByZWNpc2lvblBvaW50cyA9IDQ7IC8vIG51bWJlciBvZiBkZWNpbWFsIHBvaW50
cywgZS5nLiA0IGZvciBlcHNpbG9uIG9mIDAuMDAwMQotICAgICAgICAgICAgdmFyIHByZWNpc2lv
biA9IE1hdGgucG93KCAxMCwgcHJlY2lzaW9uUG9pbnRzICk7Ci0gICAgICAgICAgICB2YXIgaSwg
aWwsIGZhY2U7Ci0gICAgICAgICAgICB2YXIgaW5kaWNlcywgaiwgamw7CisgICAgLyoqCisgICAg
ICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKi8KIAotICAgICAg
ICAgICAgZm9yICggaSA9IDAsIGlsID0gdGhpcy52ZXJ0aWNlcy5sZW5ndGg7IGkgPCBpbDsgaSAr
KyApIHsKKyAgICBmdW5jdGlvbiBhcnJheU1heCggYXJyYXkgKSB7CiAKLSAgICAgICAgICAgICAg
ICB2ID0gdGhpcy52ZXJ0aWNlc1sgaSBdOwotICAgICAgICAgICAgICAgIGtleSA9IE1hdGgucm91
bmQoIHYueCAqIHByZWNpc2lvbiApICsgJ18nICsgTWF0aC5yb3VuZCggdi55ICogcHJlY2lzaW9u
ICkgKyAnXycgKyBNYXRoLnJvdW5kKCB2LnogKiBwcmVjaXNpb24gKTsKKyAgICAgICAgaWYgKCBh
cnJheS5sZW5ndGggPT09IDAgKSByZXR1cm4gLSBJbmZpbml0eTsKIAotICAgICAgICAgICAgICAg
IGlmICggdmVydGljZXNNYXBbIGtleSBdID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgIHZhciBt
YXggPSBhcnJheVsgMCBdOwogCi0gICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzTWFwWyBrZXkg
XSA9IGk7Ci0gICAgICAgICAgICAgICAgICAgIHVuaXF1ZS5wdXNoKCB0aGlzLnZlcnRpY2VzWyBp
IF0gKTsKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlc1sgaSBdID0gdW5pcXVlLmxlbmd0aCAt
IDE7CisgICAgICAgIGZvciAoIHZhciBpID0gMSwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7ICsr
IGkgKSB7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCBhcnJh
eVsgaSBdID4gbWF4ICkgbWF4ID0gYXJyYXlbIGkgXTsKIAotICAgICAgICAgICAgICAgICAgICAv
L2NvbnNvbGUubG9nKCdEdXBsaWNhdGUgdmVydGV4IGZvdW5kLiAnLCBpLCAnIGNvdWxkIGJlIHVz
aW5nICcsIHZlcnRpY2VzTWFwW2tleV0pOwotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzWyBp
IF0gPSBjaGFuZ2VzWyB2ZXJ0aWNlc01hcFsga2V5IF0gXTsKKyAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgfQorICAgICAgICByZXR1cm4gbWF4OwogCi0gICAgICAgICAgICB9CisgICAgfQog
CisgICAgLyoqCisgICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlh
LmNvbS8KKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAq
LwogCi0gICAgICAgICAgICAvLyBpZiBmYWNlcyBhcmUgY29tcGxldGVseSBkZWdlbmVyYXRlIGFm
dGVyIG1lcmdpbmcgdmVydGljZXMsIHdlCi0gICAgICAgICAgICAvLyBoYXZlIHRvIHJlbW92ZSB0
aGVtIGZyb20gdGhlIGdlb21ldHJ5LgotICAgICAgICAgICAgdmFyIGZhY2VJbmRpY2VzVG9SZW1v
dmUgPSBbXTsKKyAgICB2YXIgYnVmZmVyR2VvbWV0cnlJZCA9IDE7IC8vIEJ1ZmZlckdlb21ldHJ5
IHVzZXMgb2RkIG51bWJlcnMgYXMgSWQKIAotICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0g
dGhpcy5mYWNlcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAgICBmdW5jdGlvbiBCdWZmZXJH
ZW9tZXRyeSgpIHsKIAotICAgICAgICAgICAgICAgIGZhY2UgPSB0aGlzLmZhY2VzWyBpIF07Cisg
ICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgJ2lkJywgeyB2YWx1ZTogYnVmZmVy
R2VvbWV0cnlJZCArPSAyIH0gKTsKIAotICAgICAgICAgICAgICAgIGZhY2UuYSA9IGNoYW5nZXNb
IGZhY2UuYSBdOwotICAgICAgICAgICAgICAgIGZhY2UuYiA9IGNoYW5nZXNbIGZhY2UuYiBdOwot
ICAgICAgICAgICAgICAgIGZhY2UuYyA9IGNoYW5nZXNbIGZhY2UuYyBdOworICAgICAgICB0aGlz
LnV1aWQgPSBfTWF0aC5nZW5lcmF0ZVVVSUQoKTsKIAotICAgICAgICAgICAgICAgIGluZGljZXMg
PSBbIGZhY2UuYSwgZmFjZS5iLCBmYWNlLmMgXTsKKyAgICAgICAgdGhpcy5uYW1lID0gJyc7Cisg
ICAgICAgIHRoaXMudHlwZSA9ICdCdWZmZXJHZW9tZXRyeSc7CiAKLSAgICAgICAgICAgICAgICAv
LyBpZiBhbnkgZHVwbGljYXRlIHZlcnRpY2VzIGFyZSBmb3VuZCBpbiBhIEZhY2UzCi0gICAgICAg
ICAgICAgICAgLy8gd2UgaGF2ZSB0byByZW1vdmUgdGhlIGZhY2UgYXMgbm90aGluZyBjYW4gYmUg
c2F2ZWQKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgbiA9IDA7IG4gPCAzOyBuICsrICkgewor
ICAgICAgICB0aGlzLmluZGV4ID0gbnVsbDsKKyAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0ge307
CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBpbmRpY2VzWyBuIF0gPT09IGluZGljZXNbICgg
biArIDEgKSAlIDMgXSApIHsKKyAgICAgICAgdGhpcy5tb3JwaEF0dHJpYnV0ZXMgPSB7fTsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgZmFjZUluZGljZXNUb1JlbW92ZS5wdXNoKCBpICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdGhpcy5ncm91cHMgPSBbXTsK
IAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBudWxs
OworICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJlID0gbnVsbDsKIAotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgdGhpcy5kcmF3UmFuZ2UgPSB7IHN0YXJ0OiAwLCBjb3VudDogSW5maW5pdHkg
fTsKIAotICAgICAgICAgICAgfQorICAgICAgICB0aGlzLnVzZXJEYXRhID0ge307CiAKLSAgICAg
ICAgICAgIGZvciAoIGkgPSBmYWNlSW5kaWNlc1RvUmVtb3ZlLmxlbmd0aCAtIDE7IGkgPj0gMDsg
aSAtLSApIHsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICB2YXIgaWR4ID0gZmFjZUluZGljZXNU
b1JlbW92ZVsgaSBdOworICAgIEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSA9IE9iamVjdC5hc3Np
Z24oIE9iamVjdC5jcmVhdGUoIEV2ZW50RGlzcGF0Y2hlci5wcm90b3R5cGUgKSwgewogCi0gICAg
ICAgICAgICAgICAgdGhpcy5mYWNlcy5zcGxpY2UoIGlkeCwgMSApOworICAgICAgICBjb25zdHJ1
Y3RvcjogQnVmZmVyR2VvbWV0cnksCiAKLSAgICAgICAgICAgICAgICBmb3IgKCBqID0gMCwgamwg
PSB0aGlzLmZhY2VWZXJ0ZXhVdnMubGVuZ3RoOyBqIDwgamw7IGogKysgKSB7CisgICAgICAgIGlz
QnVmZmVyR2VvbWV0cnk6IHRydWUsCiAKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWNlVmVy
dGV4VXZzWyBqIF0uc3BsaWNlKCBpZHgsIDEgKTsKKyAgICAgICAgZ2V0SW5kZXg6IGZ1bmN0aW9u
ICgpIHsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGV4
OwogCi0gICAgICAgICAgICB9CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIC8vIFVzZSB1bmlx
dWUgc2V0IG9mIHZlcnRpY2VzCisgICAgICAgIHNldEluZGV4OiBmdW5jdGlvbiAoIGluZGV4ICkg
ewogCi0gICAgICAgICAgICB2YXIgZGlmZiA9IHRoaXMudmVydGljZXMubGVuZ3RoIC0gdW5pcXVl
Lmxlbmd0aDsKLSAgICAgICAgICAgIHRoaXMudmVydGljZXMgPSB1bmlxdWU7Ci0gICAgICAgICAg
ICByZXR1cm4gZGlmZjsKKyAgICAgICAgICAgIGlmICggQXJyYXkuaXNBcnJheSggaW5kZXggKSAp
IHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBuZXcgKCBhcnJh
eU1heCggaW5kZXggKSA+IDY1NTM1ID8gVWludDMyQnVmZmVyQXR0cmlidXRlIDogVWludDE2QnVm
ZmVyQXR0cmlidXRlICkoIGluZGV4LCAxICk7CiAKLSAgICAgICAgc2V0RnJvbVBvaW50czogZnVu
Y3Rpb24gKCBwb2ludHMgKSB7CisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICB0
aGlzLnZlcnRpY2VzID0gW107CisgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4Owog
Ci0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBwb2ludHMubGVuZ3RoOyBpIDwgbDsg
aSArKyApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHZhciBwb2ludCA9IHBv
aW50c1sgaSBdOwotICAgICAgICAgICAgICAgIHRoaXMudmVydGljZXMucHVzaCggbmV3IFZlY3Rv
cjMoIHBvaW50LngsIHBvaW50LnksIHBvaW50LnogfHwgMCApICk7CisgICAgICAgIH0sCiAKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgYWRkQXR0cmlidXRlOiBmdW5jdGlvbiAoIG5hbWUsIGF0dHJp
YnV0ZSApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICBpZiAoICEg
KCBhdHRyaWJ1dGUgJiYgYXR0cmlidXRlLmlzQnVmZmVyQXR0cmlidXRlICkgJiYgISAoIGF0dHJp
YnV0ZSAmJiBhdHRyaWJ1dGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSApICkgewogCi0g
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyR2Vv
bWV0cnk6IC5hZGRBdHRyaWJ1dGUoKSBub3cgZXhwZWN0cyAoIG5hbWUsIGF0dHJpYnV0ZSApLicg
KTsKIAotICAgICAgICBzb3J0RmFjZXNCeU1hdGVyaWFsSW5kZXg6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hZGRBdHRyaWJ1dGUoIG5hbWUsIG5ldyBCdWZmZXJB
dHRyaWJ1dGUoIGFyZ3VtZW50c1sgMSBdLCBhcmd1bWVudHNbIDIgXSApICk7CiAKLSAgICAgICAg
ICAgIHZhciBmYWNlcyA9IHRoaXMuZmFjZXM7Ci0gICAgICAgICAgICB2YXIgbGVuZ3RoID0gZmFj
ZXMubGVuZ3RoOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyB0YWcgZmFjZXMKKyAg
ICAgICAgICAgIGlmICggbmFtZSA9PT0gJ2luZGV4JyApIHsKIAotICAgICAgICAgICAgZm9yICgg
dmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICsrICkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUu
d2FybiggJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgp
IGZvciBpbmRleCBhdHRyaWJ1dGUuJyApOworICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5kZXgo
IGF0dHJpYnV0ZSApOwogCi0gICAgICAgICAgICAgICAgZmFjZXNbIGkgXS5faWQgPSBpOworICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IC8vIHNvcnQgZmFjZXMKKyAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1sgbmFtZSBdID0gYXR0
cmlidXRlOwogCi0gICAgICAgICAgICBmdW5jdGlvbiBtYXRlcmlhbEluZGV4U29ydCggYSwgYiAp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIGEu
bWF0ZXJpYWxJbmRleCAtIGIubWF0ZXJpYWxJbmRleDsKKyAgICAgICAgfSwKIAotICAgICAgICAg
ICAgfQorICAgICAgICBnZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uICggbmFtZSApIHsKIAotICAgICAg
ICAgICAgZmFjZXMuc29ydCggbWF0ZXJpYWxJbmRleFNvcnQgKTsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLmF0dHJpYnV0ZXNbIG5hbWUgXTsKIAotICAgICAgICAgICAgLy8gc29ydCB1dnMKKyAg
ICAgICAgfSwKIAotICAgICAgICAgICAgdmFyIHV2czEgPSB0aGlzLmZhY2VWZXJ0ZXhVdnNbIDAg
XTsKLSAgICAgICAgICAgIHZhciB1dnMyID0gdGhpcy5mYWNlVmVydGV4VXZzWyAxIF07CisgICAg
ICAgIHJlbW92ZUF0dHJpYnV0ZTogZnVuY3Rpb24gKCBuYW1lICkgewogCi0gICAgICAgICAgICB2
YXIgbmV3VXZzMSwgbmV3VXZzMjsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNb
IG5hbWUgXTsKIAotICAgICAgICAgICAgaWYgKCB1dnMxICYmIHV2czEubGVuZ3RoID09PSBsZW5n
dGggKSBuZXdVdnMxID0gW107Ci0gICAgICAgICAgICBpZiAoIHV2czIgJiYgdXZzMi5sZW5ndGgg
PT09IGxlbmd0aCApIG5ld1V2czIgPSBbXTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0g
ICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKysgKSB7CisgICAgICAg
IH0sCiAKLSAgICAgICAgICAgICAgICB2YXIgaWQgPSBmYWNlc1sgaSBdLl9pZDsKKyAgICAgICAg
YWRkR3JvdXA6IGZ1bmN0aW9uICggc3RhcnQsIGNvdW50LCBtYXRlcmlhbEluZGV4ICkgewogCi0g
ICAgICAgICAgICAgICAgaWYgKCBuZXdVdnMxICkgbmV3VXZzMS5wdXNoKCB1dnMxWyBpZCBdICk7
Ci0gICAgICAgICAgICAgICAgaWYgKCBuZXdVdnMyICkgbmV3VXZzMi5wdXNoKCB1dnMyWyBpZCBd
ICk7CisgICAgICAgICAgICB0aGlzLmdyb3Vwcy5wdXNoKCB7CiAKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAgY291bnQ6IGNvdW50
LAorICAgICAgICAgICAgICAgIG1hdGVyaWFsSW5kZXg6IG1hdGVyaWFsSW5kZXggIT09IHVuZGVm
aW5lZCA/IG1hdGVyaWFsSW5kZXggOiAwCiAKLSAgICAgICAgICAgIGlmICggbmV3VXZzMSApIHRo
aXMuZmFjZVZlcnRleFV2c1sgMCBdID0gbmV3VXZzMTsKLSAgICAgICAgICAgIGlmICggbmV3VXZz
MiApIHRoaXMuZmFjZVZlcnRleFV2c1sgMSBdID0gbmV3VXZzMjsKKyAgICAgICAgICAgIH0gKTsK
IAogICAgICAgICB9LAogCi0gICAgICAgIHRvSlNPTjogZnVuY3Rpb24gKCkgeworICAgICAgICBj
bGVhckdyb3VwczogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICB2YXIgZGF0YSA9IHsKLSAg
ICAgICAgICAgICAgICBtZXRhZGF0YTogewotICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiA0
LjUsCi0gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdHZW9tZXRyeScsCi0gICAgICAgICAgICAg
ICAgICAgIGdlbmVyYXRvcjogJ0dlb21ldHJ5LnRvSlNPTicKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9OworICAgICAgICAgICAgdGhpcy5ncm91cHMgPSBbXTsKIAotICAgICAgICAg
ICAgLy8gc3RhbmRhcmQgR2VvbWV0cnkgc2VyaWFsaXphdGlvbgorICAgICAgICB9LAogCi0gICAg
ICAgICAgICBkYXRhLnV1aWQgPSB0aGlzLnV1aWQ7Ci0gICAgICAgICAgICBkYXRhLnR5cGUgPSB0
aGlzLnR5cGU7Ci0gICAgICAgICAgICBpZiAoIHRoaXMubmFtZSAhPT0gJycgKSBkYXRhLm5hbWUg
PSB0aGlzLm5hbWU7CisgICAgICAgIHNldERyYXdSYW5nZTogZnVuY3Rpb24gKCBzdGFydCwgY291
bnQgKSB7CiAKLSAgICAgICAgICAgIGlmICggdGhpcy5wYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQg
KSB7CisgICAgICAgICAgICB0aGlzLmRyYXdSYW5nZS5zdGFydCA9IHN0YXJ0OworICAgICAgICAg
ICAgdGhpcy5kcmF3UmFuZ2UuY291bnQgPSBjb3VudDsKIAotICAgICAgICAgICAgICAgIHZhciBw
YXJhbWV0ZXJzID0gdGhpcy5wYXJhbWV0ZXJzOworICAgICAgICB9LAogCi0gICAgICAgICAgICAg
ICAgZm9yICggdmFyIGtleSBpbiBwYXJhbWV0ZXJzICkgeworICAgICAgICBhcHBseU1hdHJpeDog
ZnVuY3Rpb24gKCBtYXRyaXggKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJhbWV0
ZXJzWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkgZGF0YVsga2V5IF0gPSBwYXJhbWV0ZXJzWyBrZXkg
XTsKKyAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjsK
IAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggcG9zaXRpb24gIT09IHVuZGVm
aW5lZCApIHsKIAotICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAgICAg
IG1hdHJpeC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbiApOworICAgICAgICAgICAg
ICAgIHBvc2l0aW9uLm5lZWRzVXBkYXRlID0gdHJ1ZTsKIAogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICB2YXIgdmVydGljZXMgPSBbXTsKKyAgICAgICAgICAgIHZhciBub3JtYWwgPSB0aGlz
LmF0dHJpYnV0ZXMubm9ybWFsOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCB0
aGlzLnZlcnRpY2VzLmxlbmd0aDsgaSArKyApIHsKKyAgICAgICAgICAgIGlmICggbm9ybWFsICE9
PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgdmVydGV4ID0gdGhpcy52ZXJ0
aWNlc1sgaSBdOwotICAgICAgICAgICAgICAgIHZlcnRpY2VzLnB1c2goIHZlcnRleC54LCB2ZXJ0
ZXgueSwgdmVydGV4LnogKTsKKyAgICAgICAgICAgICAgICB2YXIgbm9ybWFsTWF0cml4ID0gbmV3
IE1hdHJpeDMoKS5nZXROb3JtYWxNYXRyaXgoIG1hdHJpeCApOworCisgICAgICAgICAgICAgICAg
bm9ybWFsTWF0cml4LmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoIG5vcm1hbCApOworICAgICAgICAg
ICAgICAgIG5vcm1hbC5uZWVkc1VwZGF0ZSA9IHRydWU7CiAKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgdmFyIGZhY2VzID0gW107Ci0gICAgICAgICAgICB2YXIgbm9ybWFscyA9IFtdOwot
ICAgICAgICAgICAgdmFyIG5vcm1hbHNIYXNoID0ge307Ci0gICAgICAgICAgICB2YXIgY29sb3Jz
ID0gW107Ci0gICAgICAgICAgICB2YXIgY29sb3JzSGFzaCA9IHt9OwotICAgICAgICAgICAgdmFy
IHV2cyA9IFtdOwotICAgICAgICAgICAgdmFyIHV2c0hhc2ggPSB7fTsKKyAgICAgICAgICAgIHZh
ciB0YW5nZW50ID0gdGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7CiAKLSAgICAgICAgICAgIGZvciAo
IHZhciBpID0gMDsgaSA8IHRoaXMuZmFjZXMubGVuZ3RoOyBpICsrICkgeworICAgICAgICAgICAg
aWYgKCB0YW5nZW50ICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgZmFj
ZSA9IHRoaXMuZmFjZXNbIGkgXTsKKyAgICAgICAgICAgICAgICB2YXIgbm9ybWFsTWF0cml4ID0g
bmV3IE1hdHJpeDMoKS5nZXROb3JtYWxNYXRyaXgoIG1hdHJpeCApOwogCi0gICAgICAgICAgICAg
ICAgdmFyIGhhc01hdGVyaWFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB2YXIgaGFzRmFjZVV2
ID0gZmFsc2U7IC8vIGRlcHJlY2F0ZWQKLSAgICAgICAgICAgICAgICB2YXIgaGFzRmFjZVZlcnRl
eFV2ID0gdGhpcy5mYWNlVmVydGV4VXZzWyAwIF1bIGkgXSAhPT0gdW5kZWZpbmVkOwotICAgICAg
ICAgICAgICAgIHZhciBoYXNGYWNlTm9ybWFsID0gZmFjZS5ub3JtYWwubGVuZ3RoKCkgPiAwOwot
ICAgICAgICAgICAgICAgIHZhciBoYXNGYWNlVmVydGV4Tm9ybWFsID0gZmFjZS52ZXJ0ZXhOb3Jt
YWxzLmxlbmd0aCA+IDA7Ci0gICAgICAgICAgICAgICAgdmFyIGhhc0ZhY2VDb2xvciA9IGZhY2Uu
Y29sb3IuciAhPT0gMSB8fCBmYWNlLmNvbG9yLmcgIT09IDEgfHwgZmFjZS5jb2xvci5iICE9PSAx
OwotICAgICAgICAgICAgICAgIHZhciBoYXNGYWNlVmVydGV4Q29sb3IgPSBmYWNlLnZlcnRleENv
bG9ycy5sZW5ndGggPiAwOworICAgICAgICAgICAgICAgIC8vIFRhbmdlbnQgaXMgdmVjNCwgYnV0
IHRoZSAnLncnIGNvbXBvbmVudCBpcyBhIHNpZ24gdmFsdWUgKCsxLy0xKS4KKyAgICAgICAgICAg
ICAgICBub3JtYWxNYXRyaXguYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSggdGFuZ2VudCApOworICAg
ICAgICAgICAgICAgIHRhbmdlbnQubmVlZHNVcGRhdGUgPSB0cnVlOwogCi0gICAgICAgICAgICAg
ICAgdmFyIGZhY2VUeXBlID0gMDsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGZh
Y2VUeXBlID0gc2V0Qml0KCBmYWNlVHlwZSwgMCwgMCApOyAvLyBpc1F1YWQKLSAgICAgICAgICAg
ICAgICBmYWNlVHlwZSA9IHNldEJpdCggZmFjZVR5cGUsIDEsIGhhc01hdGVyaWFsICk7Ci0gICAg
ICAgICAgICAgICAgZmFjZVR5cGUgPSBzZXRCaXQoIGZhY2VUeXBlLCAyLCBoYXNGYWNlVXYgKTsK
LSAgICAgICAgICAgICAgICBmYWNlVHlwZSA9IHNldEJpdCggZmFjZVR5cGUsIDMsIGhhc0ZhY2VW
ZXJ0ZXhVdiApOwotICAgICAgICAgICAgICAgIGZhY2VUeXBlID0gc2V0Qml0KCBmYWNlVHlwZSwg
NCwgaGFzRmFjZU5vcm1hbCApOwotICAgICAgICAgICAgICAgIGZhY2VUeXBlID0gc2V0Qml0KCBm
YWNlVHlwZSwgNSwgaGFzRmFjZVZlcnRleE5vcm1hbCApOwotICAgICAgICAgICAgICAgIGZhY2VU
eXBlID0gc2V0Qml0KCBmYWNlVHlwZSwgNiwgaGFzRmFjZUNvbG9yICk7Ci0gICAgICAgICAgICAg
ICAgZmFjZVR5cGUgPSBzZXRCaXQoIGZhY2VUeXBlLCA3LCBoYXNGYWNlVmVydGV4Q29sb3IgKTsK
KyAgICAgICAgICAgIGlmICggdGhpcy5ib3VuZGluZ0JveCAhPT0gbnVsbCApIHsKIAotICAgICAg
ICAgICAgICAgIGZhY2VzLnB1c2goIGZhY2VUeXBlICk7Ci0gICAgICAgICAgICAgICAgZmFjZXMu
cHVzaCggZmFjZS5hLCBmYWNlLmIsIGZhY2UuYyApOwotICAgICAgICAgICAgICAgIGZhY2VzLnB1
c2goIGZhY2UubWF0ZXJpYWxJbmRleCApOworICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZUJv
dW5kaW5nQm94KCk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGhhc0ZhY2VWZXJ0ZXhVdiApIHsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB2YXIgZmFjZVZlcnRleFV2cyA9
IHRoaXMuZmFjZVZlcnRleFV2c1sgMCBdWyBpIF07CisgICAgICAgICAgICBpZiAoIHRoaXMuYm91
bmRpbmdTcGhlcmUgIT09IG51bGwgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgZmFjZXMucHVz
aCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldFV2SW5kZXgoIGZhY2VWZXJ0ZXhVdnNbIDAg
XSApLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VXZJbmRleCggZmFjZVZlcnRleFV2c1sg
MSBdICksCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRVdkluZGV4KCBmYWNlVmVydGV4VXZz
WyAyIF0gKQotICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIHRoaXMuY29t
cHV0ZUJvdW5kaW5nU3BoZXJlKCk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBpZiAoIGhhc0ZhY2VOb3JtYWwgKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKCBnZXROb3JtYWxJ
bmRleCggZmFjZS5ub3JtYWwgKSApOworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgfQor
ICAgICAgICByb3RhdGVYOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGhh
c0ZhY2VWZXJ0ZXhOb3JtYWwgKSB7CisgICAgICAgICAgICAvLyByb3RhdGUgZ2VvbWV0cnkgYXJv
dW5kIHdvcmxkIHgtYXhpcwogCi0gICAgICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXhOb3JtYWxz
ID0gZmFjZS52ZXJ0ZXhOb3JtYWxzOworICAgICAgICAgICAgdmFyIG0xID0gbmV3IE1hdHJpeDQo
KTsKIAotICAgICAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKAotICAgICAgICAgICAgICAgICAg
ICAgICAgZ2V0Tm9ybWFsSW5kZXgoIHZlcnRleE5vcm1hbHNbIDAgXSApLAotICAgICAgICAgICAg
ICAgICAgICAgICAgZ2V0Tm9ybWFsSW5kZXgoIHZlcnRleE5vcm1hbHNbIDEgXSApLAotICAgICAg
ICAgICAgICAgICAgICAgICAgZ2V0Tm9ybWFsSW5kZXgoIHZlcnRleE5vcm1hbHNbIDIgXSApCi0g
ICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcm90YXRl
WCggYW5nbGUgKSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbTEubWFr
ZVJvdGF0aW9uWCggYW5nbGUgKTsKIAotICAgICAgICAgICAgICAgIGlmICggaGFzRmFjZUNvbG9y
ICkgeworICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlNYXRyaXgoIG0xICk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgZmFjZXMucHVzaCggZ2V0Q29sb3JJbmRleCggZmFjZS5jb2xvciApICk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9OwogCi0gICAgICAgICAgICAgICAgaWYgKCBoYXNGYWNlVmVydGV4Q29sb3IgKSB7Cisg
ICAgICAgIH0oKSwKIAotICAgICAgICAgICAgICAgICAgICB2YXIgdmVydGV4Q29sb3JzID0gZmFj
ZS52ZXJ0ZXhDb2xvcnM7CisgICAgICAgIHJvdGF0ZVk6IGZ1bmN0aW9uICgpIHsKIAotICAgICAg
ICAgICAgICAgICAgICBmYWNlcy5wdXNoKAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29s
b3JJbmRleCggdmVydGV4Q29sb3JzWyAwIF0gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdl
dENvbG9ySW5kZXgoIHZlcnRleENvbG9yc1sgMSBdICksCi0gICAgICAgICAgICAgICAgICAgICAg
ICBnZXRDb2xvckluZGV4KCB2ZXJ0ZXhDb2xvcnNbIDIgXSApCi0gICAgICAgICAgICAgICAgICAg
ICk7CisgICAgICAgICAgICAvLyByb3RhdGUgZ2VvbWV0cnkgYXJvdW5kIHdvcmxkIHktYXhpcwog
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG0xID0gbmV3IE1hdHJpeDQoKTsK
IAotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJvdGF0ZVkoIGFu
Z2xlICkgewogCi0gICAgICAgICAgICBmdW5jdGlvbiBzZXRCaXQoIHZhbHVlLCBwb3NpdGlvbiwg
ZW5hYmxlZCApIHsKKyAgICAgICAgICAgICAgICBtMS5tYWtlUm90YXRpb25ZKCBhbmdsZSApOwog
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVuYWJsZWQgPyB2YWx1ZSB8ICggMSA8PCBwb3NpdGlv
biApIDogdmFsdWUgJiAoIH4gKCAxIDw8IHBvc2l0aW9uICkgKTsKKyAgICAgICAgICAgICAgICB0
aGlzLmFwcGx5TWF0cml4KCBtMSApOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIGZ1bmN0aW9uIGdldE5vcm1hbEluZGV4KCBub3Jt
YWwgKSB7Ci0KLSAgICAgICAgICAgICAgICB2YXIgaGFzaCA9IG5vcm1hbC54LnRvU3RyaW5nKCkg
KyBub3JtYWwueS50b1N0cmluZygpICsgbm9ybWFsLnoudG9TdHJpbmcoKTsKLQotICAgICAgICAg
ICAgICAgIGlmICggbm9ybWFsc0hhc2hbIGhhc2ggXSAhPT0gdW5kZWZpbmVkICkgeworICAgICAg
ICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsc0hhc2hbIGhhc2gg
XTsKKyAgICAgICAgfSgpLAogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICByb3RhdGVaOiBm
dW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICBub3JtYWxzSGFzaFsgaGFzaCBdID0gbm9y
bWFscy5sZW5ndGggLyAzOwotICAgICAgICAgICAgICAgIG5vcm1hbHMucHVzaCggbm9ybWFsLngs
IG5vcm1hbC55LCBub3JtYWwueiApOworICAgICAgICAgICAgLy8gcm90YXRlIGdlb21ldHJ5IGFy
b3VuZCB3b3JsZCB6LWF4aXMKIAotICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxzSGFzaFsg
aGFzaCBdOworICAgICAgICAgICAgdmFyIG0xID0gbmV3IE1hdHJpeDQoKTsKIAotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJvdGF0ZVooIGFuZ2xlICkgewogCi0g
ICAgICAgICAgICBmdW5jdGlvbiBnZXRDb2xvckluZGV4KCBjb2xvciApIHsKKyAgICAgICAgICAg
ICAgICBtMS5tYWtlUm90YXRpb25aKCBhbmdsZSApOwogCi0gICAgICAgICAgICAgICAgdmFyIGhh
c2ggPSBjb2xvci5yLnRvU3RyaW5nKCkgKyBjb2xvci5nLnRvU3RyaW5nKCkgKyBjb2xvci5iLnRv
U3RyaW5nKCk7CisgICAgICAgICAgICAgICAgdGhpcy5hcHBseU1hdHJpeCggbTEgKTsKIAotICAg
ICAgICAgICAgICAgIGlmICggY29sb3JzSGFzaFsgaGFzaCBdICE9PSB1bmRlZmluZWQgKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbG9yc0hhc2hbIGhhc2ggXTsKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgIH0oKSwKIAotICAgICAgICAgICAgICAgIGNvbG9yc0hhc2hbIGhhc2ggXSA9IGNv
bG9ycy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgY29sb3JzLnB1c2goIGNvbG9yLmdldEhleCgp
ICk7CisgICAgICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGNvbG9yc0hhc2hbIGhhc2ggXTsKKyAgICAgICAgICAgIC8vIHRyYW5zbGF0ZSBnZW9t
ZXRyeQogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbTEgPSBuZXcgTWF0cml4NCgp
OwogCi0gICAgICAgICAgICBmdW5jdGlvbiBnZXRVdkluZGV4KCB1diApIHsKKyAgICAgICAgICAg
IHJldHVybiBmdW5jdGlvbiB0cmFuc2xhdGUoIHgsIHksIHogKSB7CiAKLSAgICAgICAgICAgICAg
ICB2YXIgaGFzaCA9IHV2LngudG9TdHJpbmcoKSArIHV2LnkudG9TdHJpbmcoKTsKKyAgICAgICAg
ICAgICAgICBtMS5tYWtlVHJhbnNsYXRpb24oIHgsIHksIHogKTsKIAotICAgICAgICAgICAgICAg
IGlmICggdXZzSGFzaFsgaGFzaCBdICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5hcHBseU1hdHJpeCggbTEgKTsKIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXZz
SGFzaFsgaGFzaCBdOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgIHV2c0hhc2hbIGhhc2gg
XSA9IHV2cy5sZW5ndGggLyAyOwotICAgICAgICAgICAgICAgIHV2cy5wdXNoKCB1di54LCB1di55
ICk7CisgICAgICAgIH0oKSwKIAotICAgICAgICAgICAgICAgIHJldHVybiB1dnNIYXNoWyBoYXNo
IF07CisgICAgICAgIHNjYWxlOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIHNjYWxlIGdlb21ldHJ5CiAKLSAgICAgICAgICAgIGRhdGEuZGF0YSA9IHt9Owor
ICAgICAgICAgICAgdmFyIG0xID0gbmV3IE1hdHJpeDQoKTsKIAotICAgICAgICAgICAgZGF0YS5k
YXRhLnZlcnRpY2VzID0gdmVydGljZXM7Ci0gICAgICAgICAgICBkYXRhLmRhdGEubm9ybWFscyA9
IG5vcm1hbHM7Ci0gICAgICAgICAgICBpZiAoIGNvbG9ycy5sZW5ndGggPiAwICkgZGF0YS5kYXRh
LmNvbG9ycyA9IGNvbG9yczsKLSAgICAgICAgICAgIGlmICggdXZzLmxlbmd0aCA+IDAgKSBkYXRh
LmRhdGEudXZzID0gWyB1dnMgXTsgLy8gdGVtcG9yYWwgYmFja3dhcmQgY29tcGF0aWJpbGl0eQot
ICAgICAgICAgICAgZGF0YS5kYXRhLmZhY2VzID0gZmFjZXM7CisgICAgICAgICAgICByZXR1cm4g
ZnVuY3Rpb24gc2NhbGUoIHgsIHksIHogKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBkYXRhOwor
ICAgICAgICAgICAgICAgIG0xLm1ha2VTY2FsZSggeCwgeSwgeiApOwogCi0gICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgdGhpcy5hcHBseU1hdHJpeCggbTEgKTsKIAotICAgICAgICBjbG9uZTog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAg
ICAvKgotICAgICAgICAgICAgIC8vIEhhbmRsZSBwcmltaXRpdmVzCisgICAgICAgICAgICB9Owog
Ci0gICAgICAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSB0aGlzLnBhcmFtZXRlcnM7CisgICAgICAg
IH0oKSwKIAotICAgICAgICAgICAgIGlmICggcGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkICkgewor
ICAgICAgICBsb29rQXQ6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgIHZhciB2YWx1ZXMg
PSBbXTsKKyAgICAgICAgICAgIHZhciBvYmogPSBuZXcgT2JqZWN0M0QoKTsKIAotICAgICAgICAg
ICAgIGZvciAoIHZhciBrZXkgaW4gcGFyYW1ldGVycyApIHsKKyAgICAgICAgICAgIHJldHVybiBm
dW5jdGlvbiBsb29rQXQoIHZlY3RvciApIHsKIAotICAgICAgICAgICAgIHZhbHVlcy5wdXNoKCBw
YXJhbWV0ZXJzWyBrZXkgXSApOworICAgICAgICAgICAgICAgIG9iai5sb29rQXQoIHZlY3RvciAp
OwogCi0gICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9iai51cGRhdGVNYXRyaXgoKTsK
IAotICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IE9iamVjdC5jcmVhdGUoIHRoaXMuY29uc3Ry
dWN0b3IucHJvdG90eXBlICk7Ci0gICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5hcHBseSgg
Z2VvbWV0cnksIHZhbHVlcyApOwotICAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeTsKKyAgICAg
ICAgICAgICAgICB0aGlzLmFwcGx5TWF0cml4KCBvYmoubWF0cml4ICk7CiAKLSAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0
cnVjdG9yKCkuY29weSggdGhpcyApOwotICAgICAgICAgICAgICovCisgICAgICAgIH0oKSwKIAot
ICAgICAgICAgICAgcmV0dXJuIG5ldyBHZW9tZXRyeSgpLmNvcHkoIHRoaXMgKTsKKyAgICAgICAg
Y2VudGVyOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIHZhciBvZmZz
ZXQgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkg
eworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNlbnRlcigpIHsKIAotICAgICAgICAgICAg
dmFyIGksIGlsLCBqLCBqbCwgaywga2w7CisgICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlQm91
bmRpbmdCb3goKTsKIAotICAgICAgICAgICAgLy8gcmVzZXQKKyAgICAgICAgICAgICAgICB0aGlz
LmJvdW5kaW5nQm94LmdldENlbnRlciggb2Zmc2V0ICkubmVnYXRlKCk7CiAKLSAgICAgICAgICAg
IHRoaXMudmVydGljZXMgPSBbXTsKLSAgICAgICAgICAgIHRoaXMuY29sb3JzID0gW107Ci0gICAg
ICAgICAgICB0aGlzLmZhY2VzID0gW107Ci0gICAgICAgICAgICB0aGlzLmZhY2VWZXJ0ZXhVdnMg
PSBbW11dOwotICAgICAgICAgICAgdGhpcy5tb3JwaFRhcmdldHMgPSBbXTsKLSAgICAgICAgICAg
IHRoaXMubW9ycGhOb3JtYWxzID0gW107Ci0gICAgICAgICAgICB0aGlzLnNraW5XZWlnaHRzID0g
W107Ci0gICAgICAgICAgICB0aGlzLnNraW5JbmRpY2VzID0gW107Ci0gICAgICAgICAgICB0aGlz
LmxpbmVEaXN0YW5jZXMgPSBbXTsKLSAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBudWxs
OwotICAgICAgICAgICAgdGhpcy5ib3VuZGluZ1NwaGVyZSA9IG51bGw7CisgICAgICAgICAgICAg
ICAgdGhpcy50cmFuc2xhdGUoIG9mZnNldC54LCBvZmZzZXQueSwgb2Zmc2V0LnogKTsKIAotICAg
ICAgICAgICAgLy8gbmFtZQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAg
ICAgICB0aGlzLm5hbWUgPSBzb3VyY2UubmFtZTsKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAg
ICAgIC8vIHZlcnRpY2VzCisgICAgICAgIH0oKSwKIAotICAgICAgICAgICAgdmFyIHZlcnRpY2Vz
ID0gc291cmNlLnZlcnRpY2VzOworICAgICAgICBzZXRGcm9tT2JqZWN0OiBmdW5jdGlvbiAoIG9i
amVjdCApIHsKIAotICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0gdmVydGljZXMubGVuZ3Ro
OyBpIDwgaWw7IGkgKysgKSB7CisgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyggJ1RIUkVFLkJ1
ZmZlckdlb21ldHJ5LnNldEZyb21PYmplY3QoKS4gQ29udmVydGluZycsIG9iamVjdCwgdGhpcyAp
OwogCi0gICAgICAgICAgICAgICAgdGhpcy52ZXJ0aWNlcy5wdXNoKCB2ZXJ0aWNlc1sgaSBdLmNs
b25lKCkgKTsKKyAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IG9iamVjdC5nZW9tZXRyeTsKIAot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBvYmplY3QuaXNQb2ludHMgfHwgb2JqZWN0
LmlzTGluZSApIHsKIAotICAgICAgICAgICAgLy8gY29sb3JzCisgICAgICAgICAgICAgICAgdmFy
IHBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBnZW9tZXRyeS52ZXJ0aWNl
cy5sZW5ndGggKiAzLCAzICk7CisgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IG5ldyBGbG9h
dDMyQnVmZmVyQXR0cmlidXRlKCBnZW9tZXRyeS5jb2xvcnMubGVuZ3RoICogMywgMyApOwogCi0g
ICAgICAgICAgICB2YXIgY29sb3JzID0gc291cmNlLmNvbG9yczsKKyAgICAgICAgICAgICAgICB0
aGlzLmFkZEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgcG9zaXRpb25zLmNvcHlWZWN0b3Izc0FycmF5
KCBnZW9tZXRyeS52ZXJ0aWNlcyApICk7CisgICAgICAgICAgICAgICAgdGhpcy5hZGRBdHRyaWJ1
dGUoICdjb2xvcicsIGNvbG9ycy5jb3B5Q29sb3JzQXJyYXkoIGdlb21ldHJ5LmNvbG9ycyApICk7
CiAKLSAgICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IGNvbG9ycy5sZW5ndGg7IGkgPCBpbDsg
aSArKyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmxpbmVEaXN0YW5jZXMgJiYg
Z2VvbWV0cnkubGluZURpc3RhbmNlcy5sZW5ndGggPT09IGdlb21ldHJ5LnZlcnRpY2VzLmxlbmd0
aCApIHsKIAotICAgICAgICAgICAgICAgIHRoaXMuY29sb3JzLnB1c2goIGNvbG9yc1sgaSBdLmNs
b25lKCkgKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVEaXN0YW5jZXMgPSBuZXcgRmxv
YXQzMkJ1ZmZlckF0dHJpYnV0ZSggZ2VvbWV0cnkubGluZURpc3RhbmNlcy5sZW5ndGgsIDEgKTsK
IAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSgg
J2xpbmVEaXN0YW5jZScsIGxpbmVEaXN0YW5jZXMuY29weUFycmF5KCBnZW9tZXRyeS5saW5lRGlz
dGFuY2VzICkgKTsKIAotICAgICAgICAgICAgLy8gZmFjZXMKKyAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHZhciBmYWNlcyA9IHNvdXJjZS5mYWNlczsKKyAgICAgICAgICAgICAgICBp
ZiAoIGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlICE9PSBudWxsICkgewogCi0gICAgICAgICAgICBm
b3IgKCBpID0gMCwgaWwgPSBmYWNlcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5ib3VuZGluZ1NwaGVyZSA9IGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJl
LmNsb25lKCk7CiAKLSAgICAgICAgICAgICAgICB0aGlzLmZhY2VzLnB1c2goIGZhY2VzWyBpIF0u
Y2xvbmUoKSApOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICggZ2VvbWV0cnkuYm91bmRpbmdCb3ggIT09IG51bGwgKSB7CiAKLSAgICAgICAg
ICAgIC8vIGZhY2UgdmVydGV4IHV2cworICAgICAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5n
Qm94ID0gZ2VvbWV0cnkuYm91bmRpbmdCb3guY2xvbmUoKTsKIAotICAgICAgICAgICAgZm9yICgg
aSA9IDAsIGlsID0gc291cmNlLmZhY2VWZXJ0ZXhVdnMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7
CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdmFyIGZhY2VWZXJ0ZXhVdnMg
PSBzb3VyY2UuZmFjZVZlcnRleFV2c1sgaSBdOworICAgICAgICAgICAgfSBlbHNlIGlmICggb2Jq
ZWN0LmlzTWVzaCApIHsKIAotICAgICAgICAgICAgICAgIGlmICggdGhpcy5mYWNlVmVydGV4VXZz
WyBpIF0gPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5ICYm
IGdlb21ldHJ5LmlzR2VvbWV0cnkgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWNl
VmVydGV4VXZzWyBpIF0gPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5mcm9tR2VvbWV0
cnkoIGdlb21ldHJ5ICk7CiAKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBm
b3IgKCBqID0gMCwgamwgPSBmYWNlVmVydGV4VXZzLmxlbmd0aDsgaiA8IGpsOyBqICsrICkgewot
Ci0gICAgICAgICAgICAgICAgICAgIHZhciB1dnMgPSBmYWNlVmVydGV4VXZzWyBqIF0sIHV2c0Nv
cHkgPSBbXTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBmb3IgKCBrID0g
MCwga2wgPSB1dnMubGVuZ3RoOyBrIDwga2w7IGsgKysgKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpczsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHV2ID0gdXZzWyBrIF07CisgICAg
ICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHV2c0NvcHkucHVzaCggdXYuY2xvbmUo
KSApOworICAgICAgICBzZXRGcm9tUG9pbnRzOiBmdW5jdGlvbiAoIHBvaW50cyApIHsKIAotICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBbXTsKIAotICAg
ICAgICAgICAgICAgICAgICB0aGlzLmZhY2VWZXJ0ZXhVdnNbIGkgXS5wdXNoKCB1dnNDb3B5ICk7
CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBwb2ludHMubGVuZ3RoOyBpIDwgbDsg
aSArKyApIHsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgcG9pbnQg
PSBwb2ludHNbIGkgXTsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbi5wdXNoKCBwb2ludC54LCBw
b2ludC55LCBwb2ludC56IHx8IDAgKTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAv
LyBtb3JwaCB0YXJnZXRzCi0KLSAgICAgICAgICAgIHZhciBtb3JwaFRhcmdldHMgPSBzb3VyY2Uu
bW9ycGhUYXJnZXRzOworICAgICAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdwb3NpdGlvbics
IG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbiwgMyApICk7CiAKLSAgICAgICAg
ICAgIGZvciAoIGkgPSAwLCBpbCA9IG1vcnBoVGFyZ2V0cy5sZW5ndGg7IGkgPCBpbDsgaSArKyAp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgdmFyIG1vcnBo
VGFyZ2V0ID0ge307Ci0gICAgICAgICAgICAgICAgbW9ycGhUYXJnZXQubmFtZSA9IG1vcnBoVGFy
Z2V0c1sgaSBdLm5hbWU7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAvLyB2ZXJ0aWNl
cworICAgICAgICB1cGRhdGVGcm9tT2JqZWN0OiBmdW5jdGlvbiAoIG9iamVjdCApIHsKIAotICAg
ICAgICAgICAgICAgIGlmICggbW9ycGhUYXJnZXRzWyBpIF0udmVydGljZXMgIT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IG9iamVjdC5nZW9tZXRyeTsKIAotICAg
ICAgICAgICAgICAgICAgICBtb3JwaFRhcmdldC52ZXJ0aWNlcyA9IFtdOworICAgICAgICAgICAg
aWYgKCBvYmplY3QuaXNNZXNoICkgewogCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIGogPSAw
LCBqbCA9IG1vcnBoVGFyZ2V0c1sgaSBdLnZlcnRpY2VzLmxlbmd0aDsgaiA8IGpsOyBqICsrICkg
eworICAgICAgICAgICAgICAgIHZhciBkaXJlY3QgPSBnZW9tZXRyeS5fX2RpcmVjdEdlb21ldHJ5
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICBtb3JwaFRhcmdldC52ZXJ0aWNlcy5wdXNoKCBt
b3JwaFRhcmdldHNbIGkgXS52ZXJ0aWNlc1sgaiBdLmNsb25lKCkgKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIGdlb21ldHJ5LmVsZW1lbnRzTmVlZFVwZGF0ZSA9PT0gdHJ1ZSApIHsKIAotICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdCA9IHVuZGVmaW5lZDsK
KyAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuZWxlbWVudHNOZWVkVXBkYXRlID0gZmFsc2U7
CiAKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBub3JtYWxzCi0KLSAg
ICAgICAgICAgICAgICBpZiAoIG1vcnBoVGFyZ2V0c1sgaSBdLm5vcm1hbHMgIT09IHVuZGVmaW5l
ZCApIHsKLQotICAgICAgICAgICAgICAgICAgICBtb3JwaFRhcmdldC5ub3JtYWxzID0gW107Cisg
ICAgICAgICAgICAgICAgaWYgKCBkaXJlY3QgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAg
ICAgICAgICAgICBmb3IgKCBqID0gMCwgamwgPSBtb3JwaFRhcmdldHNbIGkgXS5ub3JtYWxzLmxl
bmd0aDsgaiA8IGpsOyBqICsrICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5m
cm9tR2VvbWV0cnkoIGdlb21ldHJ5ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBo
VGFyZ2V0Lm5vcm1hbHMucHVzaCggbW9ycGhUYXJnZXRzWyBpIF0ubm9ybWFsc1sgaiBdLmNsb25l
KCkgKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGRpcmVjdC52ZXJ0aWNlc05lZWRVcGRhdGUgPSBnZW9tZXRyeS52ZXJ0aWNlc05l
ZWRVcGRhdGU7CisgICAgICAgICAgICAgICAgZGlyZWN0Lm5vcm1hbHNOZWVkVXBkYXRlID0gZ2Vv
bWV0cnkubm9ybWFsc05lZWRVcGRhdGU7CisgICAgICAgICAgICAgICAgZGlyZWN0LmNvbG9yc05l
ZWRVcGRhdGUgPSBnZW9tZXRyeS5jb2xvcnNOZWVkVXBkYXRlOworICAgICAgICAgICAgICAgIGRp
cmVjdC51dnNOZWVkVXBkYXRlID0gZ2VvbWV0cnkudXZzTmVlZFVwZGF0ZTsKKyAgICAgICAgICAg
ICAgICBkaXJlY3QuZ3JvdXBzTmVlZFVwZGF0ZSA9IGdlb21ldHJ5Lmdyb3Vwc05lZWRVcGRhdGU7
CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ2VvbWV0cnkudmVydGljZXNO
ZWVkVXBkYXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZ2VvbWV0cnkubm9ybWFsc05lZWRV
cGRhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBnZW9tZXRyeS5jb2xvcnNOZWVkVXBkYXRl
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZ2VvbWV0cnkudXZzTmVlZFVwZGF0ZSA9IGZhbHNl
OworICAgICAgICAgICAgICAgIGdlb21ldHJ5Lmdyb3Vwc05lZWRVcGRhdGUgPSBmYWxzZTsKIAot
ICAgICAgICAgICAgICAgIHRoaXMubW9ycGhUYXJnZXRzLnB1c2goIG1vcnBoVGFyZ2V0ICk7Cisg
ICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBkaXJlY3Q7CiAKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgLy8gbW9ycGggbm9ybWFscworICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZTsKIAot
ICAgICAgICAgICAgdmFyIG1vcnBoTm9ybWFscyA9IHNvdXJjZS5tb3JwaE5vcm1hbHM7CisgICAg
ICAgICAgICBpZiAoIGdlb21ldHJ5LnZlcnRpY2VzTmVlZFVwZGF0ZSA9PT0gdHJ1ZSApIHsKIAot
ICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0gbW9ycGhOb3JtYWxzLmxlbmd0aDsgaSA8IGls
OyBpICsrICkgeworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlcy5w
b3NpdGlvbjsKIAotICAgICAgICAgICAgICAgIHZhciBtb3JwaE5vcm1hbCA9IHt9OworICAgICAg
ICAgICAgICAgIGlmICggYXR0cmlidXRlICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAg
ICAgICAvLyB2ZXJ0ZXggbm9ybWFscworICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUuY29w
eVZlY3RvcjNzQXJyYXkoIGdlb21ldHJ5LnZlcnRpY2VzICk7CisgICAgICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZS5uZWVkc1VwZGF0ZSA9IHRydWU7CiAKLSAgICAgICAgICAgICAgICBpZiAoIG1v
cnBoTm9ybWFsc1sgaSBdLnZlcnRleE5vcm1hbHMgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgbW9ycGhOb3JtYWwudmVydGV4Tm9ybWFs
cyA9IFtdOworICAgICAgICAgICAgICAgIGdlb21ldHJ5LnZlcnRpY2VzTmVlZFVwZGF0ZSA9IGZh
bHNlOwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIGogPSAwLCBqbCA9IG1vcnBoTm9ybWFs
c1sgaSBdLnZlcnRleE5vcm1hbHMubGVuZ3RoOyBqIDwgamw7IGogKysgKSB7CisgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcmNWZXJ0ZXhOb3JtYWwgPSBtb3Jw
aE5vcm1hbHNbIGkgXS52ZXJ0ZXhOb3JtYWxzWyBqIF07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgZGVzdFZlcnRleE5vcm1hbCA9IHt9OworICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5u
b3JtYWxzTmVlZFVwZGF0ZSA9PT0gdHJ1ZSApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFZlcnRleE5vcm1hbC5hID0gc3JjVmVydGV4Tm9ybWFsLmEuY2xvbmUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RWZXJ0ZXhOb3JtYWwuYiA9IHNyY1ZlcnRleE5vcm1hbC5iLmNs
b25lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0VmVydGV4Tm9ybWFsLmMgPSBzcmNW
ZXJ0ZXhOb3JtYWwuYy5jbG9uZSgpOworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSA9IHRoaXMu
YXR0cmlidXRlcy5ub3JtYWw7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBoTm9ybWFs
LnZlcnRleE5vcm1hbHMucHVzaCggZGVzdFZlcnRleE5vcm1hbCApOworICAgICAgICAgICAgICAg
IGlmICggYXR0cmlidXRlICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUuY29weVZlY3RvcjNzQXJyYXkoIGdlb21l
dHJ5Lm5vcm1hbHMgKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlLm5lZWRzVXBkYXRl
ID0gdHJ1ZTsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIC8vIGZhY2Ug
bm9ybWFscworICAgICAgICAgICAgICAgIGdlb21ldHJ5Lm5vcm1hbHNOZWVkVXBkYXRlID0gZmFs
c2U7CiAKLSAgICAgICAgICAgICAgICBpZiAoIG1vcnBoTm9ybWFsc1sgaSBdLmZhY2VOb3JtYWxz
ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAg
bW9ycGhOb3JtYWwuZmFjZU5vcm1hbHMgPSBbXTsKKyAgICAgICAgICAgIGlmICggZ2VvbWV0cnku
Y29sb3JzTmVlZFVwZGF0ZSA9PT0gdHJ1ZSApIHsKIAotICAgICAgICAgICAgICAgICAgICBmb3Ig
KCBqID0gMCwgamwgPSBtb3JwaE5vcm1hbHNbIGkgXS5mYWNlTm9ybWFscy5sZW5ndGg7IGogPCBq
bDsgaiArKyApIHsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgPSB0aGlzLmF0dHJpYnV0ZXMu
Y29sb3I7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBoTm9ybWFsLmZhY2VOb3JtYWxz
LnB1c2goIG1vcnBoTm9ybWFsc1sgaSBdLmZhY2VOb3JtYWxzWyBqIF0uY2xvbmUoKSApOworICAg
ICAgICAgICAgICAgIGlmICggYXR0cmlidXRlICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUuY29weUNvbG9yc0Fy
cmF5KCBnZW9tZXRyeS5jb2xvcnMgKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlLm5l
ZWRzVXBkYXRlID0gdHJ1ZTsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
IHRoaXMubW9ycGhOb3JtYWxzLnB1c2goIG1vcnBoTm9ybWFsICk7CisgICAgICAgICAgICAgICAg
Z2VvbWV0cnkuY29sb3JzTmVlZFVwZGF0ZSA9IGZhbHNlOwogCiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIC8vIHNraW4gd2VpZ2h0cwotCi0gICAgICAgICAgICB2YXIgc2tpbldlaWdodHMg
PSBzb3VyY2Uuc2tpbldlaWdodHM7CisgICAgICAgICAgICBpZiAoIGdlb21ldHJ5LnV2c05lZWRV
cGRhdGUgKSB7CiAKLSAgICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IHNraW5XZWlnaHRzLmxl
bmd0aDsgaSA8IGlsOyBpICsrICkgeworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSA9IHRoaXMu
YXR0cmlidXRlcy51djsKIAotICAgICAgICAgICAgICAgIHRoaXMuc2tpbldlaWdodHMucHVzaCgg
c2tpbldlaWdodHNbIGkgXS5jbG9uZSgpICk7CisgICAgICAgICAgICAgICAgaWYgKCBhdHRyaWJ1
dGUgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoIGdlb21ldHJ5LnV2cyApOworICAgICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGUubmVlZHNVcGRhdGUgPSB0cnVlOwogCi0gICAgICAgICAgICAv
LyBza2luIGluZGljZXMKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBza2lu
SW5kaWNlcyA9IHNvdXJjZS5za2luSW5kaWNlczsKKyAgICAgICAgICAgICAgICBnZW9tZXRyeS51
dnNOZWVkVXBkYXRlID0gZmFsc2U7CiAKLSAgICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IHNr
aW5JbmRpY2VzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgdGhpcy5za2luSW5kaWNlcy5wdXNoKCBza2luSW5kaWNlc1sgaSBdLmNsb25l
KCkgKTsKKyAgICAgICAgICAgIGlmICggZ2VvbWV0cnkubGluZURpc3RhbmNlc05lZWRVcGRhdGUg
KSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgPSB0aGlzLmF0
dHJpYnV0ZXMubGluZURpc3RhbmNlOwogCi0gICAgICAgICAgICAvLyBsaW5lIGRpc3RhbmNlcwor
ICAgICAgICAgICAgICAgIGlmICggYXR0cmlidXRlICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAg
ICAgICAgIHZhciBsaW5lRGlzdGFuY2VzID0gc291cmNlLmxpbmVEaXN0YW5jZXM7CisgICAgICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZS5jb3B5QXJyYXkoIGdlb21ldHJ5LmxpbmVEaXN0YW5jZXMg
KTsKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlLm5lZWRzVXBkYXRlID0gdHJ1ZTsKIAot
ICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0gbGluZURpc3RhbmNlcy5sZW5ndGg7IGkgPCBp
bDsgaSArKyApIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0aGlzLmxp
bmVEaXN0YW5jZXMucHVzaCggbGluZURpc3RhbmNlc1sgaSBdICk7CisgICAgICAgICAgICAgICAg
Z2VvbWV0cnkubGluZURpc3RhbmNlc05lZWRVcGRhdGUgPSBmYWxzZTsKIAogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAvLyBib3VuZGluZyBib3gKLQotICAgICAgICAgICAgdmFyIGJvdW5k
aW5nQm94ID0gc291cmNlLmJvdW5kaW5nQm94OworICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5n
cm91cHNOZWVkVXBkYXRlICkgewogCi0gICAgICAgICAgICBpZiAoIGJvdW5kaW5nQm94ICE9PSBu
dWxsICkgeworICAgICAgICAgICAgICAgIGdlb21ldHJ5LmNvbXB1dGVHcm91cHMoIG9iamVjdC5n
ZW9tZXRyeSApOworICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzID0gZ2VvbWV0cnkuZ3JvdXBz
OwogCi0gICAgICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IGJvdW5kaW5nQm94LmNsb25l
KCk7CisgICAgICAgICAgICAgICAgZ2VvbWV0cnkuZ3JvdXBzTmVlZFVwZGF0ZSA9IGZhbHNlOwog
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIGJvdW5kaW5nIHNwaGVyZQorICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIHZhciBib3VuZGluZ1NwaGVyZSA9IHNv
dXJjZS5ib3VuZGluZ1NwaGVyZTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgaWYgKCBib3Vu
ZGluZ1NwaGVyZSAhPT0gbnVsbCApIHsKKyAgICAgICAgZnJvbUdlb21ldHJ5OiBmdW5jdGlvbiAo
IGdlb21ldHJ5ICkgewogCi0gICAgICAgICAgICAgICAgdGhpcy5ib3VuZGluZ1NwaGVyZSA9IGJv
dW5kaW5nU3BoZXJlLmNsb25lKCk7CisgICAgICAgICAgICBnZW9tZXRyeS5fX2RpcmVjdEdlb21l
dHJ5ID0gbmV3IERpcmVjdEdlb21ldHJ5KCkuZnJvbUdlb21ldHJ5KCBnZW9tZXRyeSApOwogCi0g
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5mcm9tRGlyZWN0R2VvbWV0cnko
IGdlb21ldHJ5Ll9fZGlyZWN0R2VvbWV0cnkgKTsKIAotICAgICAgICAgICAgLy8gdXBkYXRlIGZs
YWdzCisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudHNOZWVkVXBkYXRlID0g
c291cmNlLmVsZW1lbnRzTmVlZFVwZGF0ZTsKLSAgICAgICAgICAgIHRoaXMudmVydGljZXNOZWVk
VXBkYXRlID0gc291cmNlLnZlcnRpY2VzTmVlZFVwZGF0ZTsKLSAgICAgICAgICAgIHRoaXMudXZz
TmVlZFVwZGF0ZSA9IHNvdXJjZS51dnNOZWVkVXBkYXRlOwotICAgICAgICAgICAgdGhpcy5ub3Jt
YWxzTmVlZFVwZGF0ZSA9IHNvdXJjZS5ub3JtYWxzTmVlZFVwZGF0ZTsKLSAgICAgICAgICAgIHRo
aXMuY29sb3JzTmVlZFVwZGF0ZSA9IHNvdXJjZS5jb2xvcnNOZWVkVXBkYXRlOwotICAgICAgICAg
ICAgdGhpcy5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZSA9IHNvdXJjZS5saW5lRGlzdGFuY2VzTmVl
ZFVwZGF0ZTsKLSAgICAgICAgICAgIHRoaXMuZ3JvdXBzTmVlZFVwZGF0ZSA9IHNvdXJjZS5ncm91
cHNOZWVkVXBkYXRlOworICAgICAgICBmcm9tRGlyZWN0R2VvbWV0cnk6IGZ1bmN0aW9uICggZ2Vv
bWV0cnkgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgdmFyIHBv
c2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkoIGdlb21ldHJ5LnZlcnRpY2VzLmxlbmd0aCAqIDMg
KTsKKyAgICAgICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgQnVmZmVy
QXR0cmlidXRlKCBwb3NpdGlvbnMsIDMgKS5jb3B5VmVjdG9yM3NBcnJheSggZ2VvbWV0cnkudmVy
dGljZXMgKSApOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICBpZiAoIGdlb21ldHJ5Lm5vcm1h
bHMubGVuZ3RoID4gMCApIHsKIAotICAgICAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICAgICAgdmFyIG5vcm1hbHMgPSBuZXcgRmxvYXQzMkFycmF5KCBnZW9tZXRyeS5ub3Jt
YWxzLmxlbmd0aCAqIDMgKTsKKyAgICAgICAgICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ25v
cm1hbCcsIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIG5vcm1hbHMsIDMgKS5jb3B5VmVjdG9yM3NBcnJh
eSggZ2VvbWV0cnkubm9ybWFscyApICk7CiAKLSAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVu
dCggeyB0eXBlOiAnZGlzcG9zZScgfSApOworICAgICAgICAgICAgfQogCi0gICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICggZ2VvbWV0cnkuY29sb3JzLmxlbmd0aCA+IDAgKSB7CiAKLSAgICB9ICk7
CisgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoIGdlb21ldHJ5
LmNvbG9ycy5sZW5ndGggKiAzICk7CisgICAgICAgICAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUo
ICdjb2xvcicsIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIGNvbG9ycywgMyApLmNvcHlDb2xvcnNBcnJh
eSggZ2VvbWV0cnkuY29sb3JzICkgKTsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29i
IC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAgICovCisgICAgICAgICAgICB9CiAKLSAgICBmdW5j
dGlvbiBCdWZmZXJBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApIHsKKyAg
ICAgICAgICAgIGlmICggZ2VvbWV0cnkudXZzLmxlbmd0aCA+IDAgKSB7CiAKLSAgICAgICAgaWYg
KCBBcnJheS5pc0FycmF5KCBhcnJheSApICkgeworICAgICAgICAgICAgICAgIHZhciB1dnMgPSBu
ZXcgRmxvYXQzMkFycmF5KCBnZW9tZXRyeS51dnMubGVuZ3RoICogMiApOworICAgICAgICAgICAg
ICAgIHRoaXMuYWRkQXR0cmlidXRlKCAndXYnLCBuZXcgQnVmZmVyQXR0cmlidXRlKCB1dnMsIDIg
KS5jb3B5VmVjdG9yMnNBcnJheSggZ2VvbWV0cnkudXZzICkgKTsKIAotICAgICAgICAgICAgdGhy
b3cgbmV3IFR5cGVFcnJvciggJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJl
IGEgVHlwZWQgQXJyYXkuJyApOworICAgICAgICAgICAgfQogCi0gICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICggZ2VvbWV0cnkudXZzMi5sZW5ndGggPiAwICkgewogCi0gICAgICAgIHRoaXMubmFt
ZSA9ICcnOworICAgICAgICAgICAgICAgIHZhciB1dnMyID0gbmV3IEZsb2F0MzJBcnJheSggZ2Vv
bWV0cnkudXZzMi5sZW5ndGggKiAyICk7CisgICAgICAgICAgICAgICAgdGhpcy5hZGRBdHRyaWJ1
dGUoICd1djInLCBuZXcgQnVmZmVyQXR0cmlidXRlKCB1dnMyLCAyICkuY29weVZlY3RvcjJzQXJy
YXkoIGdlb21ldHJ5LnV2czIgKSApOwogCi0gICAgICAgIHRoaXMuYXJyYXkgPSBhcnJheTsKLSAg
ICAgICAgdGhpcy5pdGVtU2l6ZSA9IGl0ZW1TaXplOwotICAgICAgICB0aGlzLmNvdW50ID0gYXJy
YXkgIT09IHVuZGVmaW5lZCA/IGFycmF5Lmxlbmd0aCAvIGl0ZW1TaXplIDogMDsKLSAgICAgICAg
dGhpcy5ub3JtYWxpemVkID0gbm9ybWFsaXplZCA9PT0gdHJ1ZTsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICB0aGlzLmR5bmFtaWMgPSBmYWxzZTsKLSAgICAgICAgdGhpcy51cGRhdGVSYW5nZSA9
IHsgb2Zmc2V0OiAwLCBjb3VudDogLSAxIH07CisgICAgICAgICAgICAvLyBncm91cHMKIAotICAg
ICAgICB0aGlzLnZlcnNpb24gPSAwOworICAgICAgICAgICAgdGhpcy5ncm91cHMgPSBnZW9tZXRy
eS5ncm91cHM7CiAKLSAgICB9CisgICAgICAgICAgICAvLyBtb3JwaHMKIAotICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eSggQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZSwgJ25lZWRzVXBkYXRlJywg
eworICAgICAgICAgICAgZm9yICggdmFyIG5hbWUgaW4gZ2VvbWV0cnkubW9ycGhUYXJnZXRzICkg
ewogCi0gICAgICAgIHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICB2
YXIgYXJyYXkgPSBbXTsKKyAgICAgICAgICAgICAgICB2YXIgbW9ycGhUYXJnZXRzID0gZ2VvbWV0
cnkubW9ycGhUYXJnZXRzWyBuYW1lIF07CiAKLSAgICAgICAgICAgIGlmICggdmFsdWUgPT09IHRy
dWUgKSB0aGlzLnZlcnNpb24gKys7CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBs
ID0gbW9ycGhUYXJnZXRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB2YXIgbW9ycGhUYXJnZXQgPSBtb3JwaFRhcmdldHNbIGkgXTsKIAot
ICAgIH0gKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IG5ldyBGbG9hdDMy
QnVmZmVyQXR0cmlidXRlKCBtb3JwaFRhcmdldC5kYXRhLmxlbmd0aCAqIDMsIDMgKTsKKyAgICAg
ICAgICAgICAgICAgICAgYXR0cmlidXRlLm5hbWUgPSBtb3JwaFRhcmdldC5uYW1lOwogCi0gICAg
T2JqZWN0LmFzc2lnbiggQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZSwgeworICAgICAgICAgICAg
ICAgICAgICBhcnJheS5wdXNoKCBhdHRyaWJ1dGUuY29weVZlY3RvcjNzQXJyYXkoIG1vcnBoVGFy
Z2V0LmRhdGEgKSApOwogCi0gICAgICAgIGlzQnVmZmVyQXR0cmlidXRlOiB0cnVlLAorICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICBvblVwbG9hZENhbGxiYWNrOiBmdW5jdGlvbiAoKSB7fSwK
KyAgICAgICAgICAgICAgICB0aGlzLm1vcnBoQXR0cmlidXRlc1sgbmFtZSBdID0gYXJyYXk7CiAK
LSAgICAgICAgc2V0QXJyYXk6IGZ1bmN0aW9uICggYXJyYXkgKSB7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmICggQXJyYXkuaXNBcnJheSggYXJyYXkgKSApIHsKKyAgICAgICAgICAg
IC8vIHNraW5uaW5nCiAKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCAnVEhS
RUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4nICk7Cisg
ICAgICAgICAgICBpZiAoIGdlb21ldHJ5LnNraW5JbmRpY2VzLmxlbmd0aCA+IDAgKSB7CisKKyAg
ICAgICAgICAgICAgICB2YXIgc2tpbkluZGljZXMgPSBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0
ZSggZ2VvbWV0cnkuc2tpbkluZGljZXMubGVuZ3RoICogNCwgNCApOworICAgICAgICAgICAgICAg
IHRoaXMuYWRkQXR0cmlidXRlKCAnc2tpbkluZGV4Jywgc2tpbkluZGljZXMuY29weVZlY3RvcjRz
QXJyYXkoIGdlb21ldHJ5LnNraW5JbmRpY2VzICkgKTsKIAogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICB0aGlzLmNvdW50ID0gYXJyYXkgIT09IHVuZGVmaW5lZCA/IGFycmF5Lmxlbmd0aCAv
IHRoaXMuaXRlbVNpemUgOiAwOwotICAgICAgICAgICAgdGhpcy5hcnJheSA9IGFycmF5OworICAg
ICAgICAgICAgaWYgKCBnZW9tZXRyeS5za2luV2VpZ2h0cy5sZW5ndGggPiAwICkgewogCi0gICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB2YXIgc2tpbldlaWdodHMgPSBu
ZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggZ2VvbWV0cnkuc2tpbldlaWdodHMubGVuZ3RoICog
NCwgNCApOworICAgICAgICAgICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAnc2tpbldlaWdodCcs
IHNraW5XZWlnaHRzLmNvcHlWZWN0b3I0c0FycmF5KCBnZW9tZXRyeS5za2luV2VpZ2h0cyApICk7
CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIH0KIAotICAgICAgICBzZXREeW5hbWljOiBmdW5j
dGlvbiAoIHZhbHVlICkgeworICAgICAgICAgICAgLy8KIAotICAgICAgICAgICAgdGhpcy5keW5h
bWljID0gdmFsdWU7CisgICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlICE9
PSBudWxsICkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB0
aGlzLmJvdW5kaW5nU3BoZXJlID0gZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUuY2xvbmUoKTsKIAot
ICAgICAgICB9LAorICAgICAgICAgICAgfQogCi0gICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291
cmNlICkgeworICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5ib3VuZGluZ0JveCAhPT0gbnVsbCAp
IHsKIAotICAgICAgICAgICAgdGhpcy5uYW1lID0gc291cmNlLm5hbWU7Ci0gICAgICAgICAgICB0
aGlzLmFycmF5ID0gbmV3IHNvdXJjZS5hcnJheS5jb25zdHJ1Y3Rvciggc291cmNlLmFycmF5ICk7
Ci0gICAgICAgICAgICB0aGlzLml0ZW1TaXplID0gc291cmNlLml0ZW1TaXplOwotICAgICAgICAg
ICAgdGhpcy5jb3VudCA9IHNvdXJjZS5jb3VudDsKLSAgICAgICAgICAgIHRoaXMubm9ybWFsaXpl
ZCA9IHNvdXJjZS5ub3JtYWxpemVkOworICAgICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3gg
PSBnZW9tZXRyeS5ib3VuZGluZ0JveC5jbG9uZSgpOwogCi0gICAgICAgICAgICB0aGlzLmR5bmFt
aWMgPSBzb3VyY2UuZHluYW1pYzsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBjb3B5QXQ6IGZ1bmN0aW9uICggaW5kZXgx
LCBhdHRyaWJ1dGUsIGluZGV4MiApIHsKKyAgICAgICAgY29tcHV0ZUJvdW5kaW5nQm94OiBmdW5j
dGlvbiAoKSB7CiAKLSAgICAgICAgICAgIGluZGV4MSAqPSB0aGlzLml0ZW1TaXplOwotICAgICAg
ICAgICAgaW5kZXgyICo9IGF0dHJpYnV0ZS5pdGVtU2l6ZTsKKyAgICAgICAgICAgIHZhciBib3gg
PSBuZXcgQm94MygpOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLml0
ZW1TaXplOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjb21w
dXRlQm91bmRpbmdCb3goKSB7CiAKLSAgICAgICAgICAgICAgICB0aGlzLmFycmF5WyBpbmRleDEg
KyBpIF0gPSBhdHRyaWJ1dGUuYXJyYXlbIGluZGV4MiArIGkgXTsKKyAgICAgICAgICAgICAgICBp
ZiAoIHRoaXMuYm91bmRpbmdCb3ggPT09IG51bGwgKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3gzKCk7CiAKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB9LAorICAgICAg
ICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjsKKyAgICAg
ICAgICAgICAgICB2YXIgbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb24gPSB0aGlzLm1vcnBoQXR0cmli
dXRlcy5wb3NpdGlvbjsKIAotICAgICAgICBjb3B5QXJyYXk6IGZ1bmN0aW9uICggYXJyYXkgKSB7
CisgICAgICAgICAgICAgICAgaWYgKCBwb3NpdGlvbiAhPT0gdW5kZWZpbmVkICkgewogCi0gICAg
ICAgICAgICB0aGlzLmFycmF5LnNldCggYXJyYXkgKTsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbiApOwogCi0gICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgLy8gcHJvY2VzcyBtb3Jw
aCBhdHRyaWJ1dGVzIGlmIHByZXNlbnQKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgICAg
ICBpZiAoIG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uICkgewogCi0gICAgICAgIGNvcHlDb2xvcnNB
cnJheTogZnVuY3Rpb24gKCBjb2xvcnMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IDAsIGlsID0gbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb24ubGVuZ3RoOyBpIDwgaWw7
IGkgKysgKSB7CiAKLSAgICAgICAgICAgIHZhciBhcnJheSA9IHRoaXMuYXJyYXksIG9mZnNldCA9
IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vcnBoQXR0cmlidXRlID0gbW9y
cGhBdHRyaWJ1dGVzUG9zaXRpb25bIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b3guc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSggbW9ycGhBdHRyaWJ1dGUgKTsKIAotICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwLCBsID0gY29sb3JzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50
KCBib3gubWluICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0Jv
eC5leHBhbmRCeVBvaW50KCBib3gubWF4ICk7CiAKLSAgICAgICAgICAgICAgICB2YXIgY29sb3Ig
PSBjb2xvcnNbIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIGlmICggY29sb3IgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0
ZS5jb3B5Q29sb3JzQXJyYXkoKTogY29sb3IgaXMgdW5kZWZpbmVkJywgaSApOwotICAgICAgICAg
ICAgICAgICAgICBjb2xvciA9IG5ldyBDb2xvcigpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYWtlRW1wdHkoKTsKIAog
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKysgXSA9
IGNvbG9yLnI7Ci0gICAgICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArKyBdID0gY29sb3IuZzsK
LSAgICAgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsrIF0gPSBjb2xvci5iOworICAgICAgICAg
ICAgICAgIGlmICggaXNOYU4oIHRoaXMuYm91bmRpbmdCb3gubWluLnggKSB8fCBpc05hTiggdGhp
cy5ib3VuZGluZ0JveC5taW4ueSApIHx8IGlzTmFOKCB0aGlzLmJvdW5kaW5nQm94Lm1pbi56ICkg
KSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigg
J1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveDogQ29tcHV0ZWQgbWluL21h
eCBoYXZlIE5hTiB2YWx1ZXMuIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8g
aGF2ZSBOYU4gdmFsdWVzLicsIHRoaXMgKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgIH0sCisgICAgICAgICAgICB9OwogCi0gICAgICAg
IGNvcHlWZWN0b3Iyc0FycmF5OiBmdW5jdGlvbiAoIHZlY3RvcnMgKSB7CisgICAgICAgIH0oKSwK
IAotICAgICAgICAgICAgdmFyIGFycmF5ID0gdGhpcy5hcnJheSwgb2Zmc2V0ID0gMDsKKyAgICAg
ICAgY29tcHV0ZUJvdW5kaW5nU3BoZXJlOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMCwgbCA9IHZlY3RvcnMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAg
ICAgICAgIHZhciBib3ggPSBuZXcgQm94MygpOworICAgICAgICAgICAgdmFyIGJveE1vcnBoVGFy
Z2V0cyA9IG5ldyBCb3gzKCk7CisgICAgICAgICAgICB2YXIgdmVjdG9yID0gbmV3IFZlY3RvcjMo
KTsKIAotICAgICAgICAgICAgICAgIHZhciB2ZWN0b3IgPSB2ZWN0b3JzWyBpIF07CisgICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCkgewogCi0gICAgICAg
ICAgICAgICAgaWYgKCB2ZWN0b3IgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIHRoaXMuYm91bmRpbmdTcGhlcmUgPT09IG51bGwgKSB7CiAKLSAgICAgICAgICAgICAgICAg
ICAgY29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5
KCk6IHZlY3RvciBpcyB1bmRlZmluZWQnLCBpICk7Ci0gICAgICAgICAgICAgICAgICAgIHZlY3Rv
ciA9IG5ldyBWZWN0b3IyKCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdTcGhl
cmUgPSBuZXcgU3BoZXJlKCk7CiAKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IueDsKLSAgICAgICAgICAgICAgICBhcnJheVsg
b2Zmc2V0ICsrIF0gPSB2ZWN0b3IueTsKKyAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB0
aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247CisgICAgICAgICAgICAgICAgdmFyIG1vcnBoQXR0cmli
dXRlc1Bvc2l0aW9uID0gdGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247CiAKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIHBvc2l0aW9uICkgewogCi0gICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QsIGZpbmQgdGhlIGNlbnRl
ciBvZiB0aGUgYm91bmRpbmcgc3BoZXJlCiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGNlbnRlciA9IHRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyOwogCi0gICAgICAgIGNv
cHlWZWN0b3Izc0FycmF5OiBmdW5jdGlvbiAoIHZlY3RvcnMgKSB7CisgICAgICAgICAgICAgICAg
ICAgIGJveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbiApOwogCi0gICAgICAgICAg
ICB2YXIgYXJyYXkgPSB0aGlzLmFycmF5LCBvZmZzZXQgPSAwOworICAgICAgICAgICAgICAgICAg
ICAvLyBwcm9jZXNzIG1vcnBoIGF0dHJpYnV0ZXMgaWYgcHJlc2VudAogCi0gICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IDAsIGwgPSB2ZWN0b3JzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICggbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb24gKSB7CiAKLSAgICAg
ICAgICAgICAgICB2YXIgdmVjdG9yID0gdmVjdG9yc1sgaSBdOworICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uLmxlbmd0
aDsgaSA8IGlsOyBpICsrICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCB2ZWN0b3IgPT09IHVu
ZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9ycGhBdHRyaWJ1
dGUgPSBtb3JwaEF0dHJpYnV0ZXNQb3NpdGlvblsgaSBdOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJveE1vcnBoVGFyZ2V0cy5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKCBtb3JwaEF0dHJp
YnV0ZSApOwogCi0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZl
ckF0dHJpYnV0ZS5jb3B5VmVjdG9yM3NBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkJywgaSAp
OwotICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJveC5leHBhbmRCeVBvaW50KCBib3hNb3JwaFRhcmdldHMubWlu
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94LmV4cGFuZEJ5UG9pbnQoIGJveE1v
cnBoVGFyZ2V0cy5tYXggKTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKysgXSA9IHZlY3Rvci54
OwotICAgICAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKysgXSA9IHZlY3Rvci55OwotICAgICAg
ICAgICAgICAgIGFycmF5WyBvZmZzZXQgKysgXSA9IHZlY3Rvci56OworICAgICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYm94LmdldENlbnRl
ciggY2VudGVyICk7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAg
ICAgICAvLyBzZWNvbmQsIHRyeSB0byBmaW5kIGEgYm91bmRpbmdTcGhlcmUgd2l0aCBhIHJhZGl1
cyBzbWFsbGVyIHRoYW4gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGJvdW5kaW5nU3BoZXJl
IG9mIHRoZSBib3VuZGluZ0JveDogc3FydCgzKSBzbWFsbGVyIGluIHRoZSBiZXN0IGNhc2UKIAot
ICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB2YXIgbWF4UmFkaXVzU3EgPSAwOwogCi0g
ICAgICAgIGNvcHlWZWN0b3I0c0FycmF5OiBmdW5jdGlvbiAoIHZlY3RvcnMgKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBwb3NpdGlvbi5jb3VudDsgaSA8IGls
OyBpICsrICkgewogCi0gICAgICAgICAgICB2YXIgYXJyYXkgPSB0aGlzLmFycmF5LCBvZmZzZXQg
PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yLmZyb21CdWZmZXJBdHRyaWJ1dGUo
IHBvc2l0aW9uLCBpICk7CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHZlY3Rv
cnMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heFJh
ZGl1c1NxID0gTWF0aC5tYXgoIG1heFJhZGl1c1NxLCBjZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQo
IHZlY3RvciApICk7CiAKLSAgICAgICAgICAgICAgICB2YXIgdmVjdG9yID0gdmVjdG9yc1sgaSBd
OworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIHZlY3RvciA9
PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIG1vcnBoIGF0
dHJpYnV0ZXMgaWYgcHJlc2VudAogCi0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybigg
J1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yNHNBcnJheSgpOiB2ZWN0b3IgaXMgdW5k
ZWZpbmVkJywgaSApOwotICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgPSBuZXcgVmVjdG9yNCgp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uICkgewog
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkg
PSAwLCBpbCA9IG1vcnBoQXR0cmlidXRlc1Bvc2l0aW9uLmxlbmd0aDsgaSA8IGlsOyBpICsrICkg
ewogCi0gICAgICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArKyBdID0gdmVjdG9yLng7Ci0gICAg
ICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArKyBdID0gdmVjdG9yLnk7Ci0gICAgICAgICAgICAg
ICAgYXJyYXlbIG9mZnNldCArKyBdID0gdmVjdG9yLno7Ci0gICAgICAgICAgICAgICAgYXJyYXlb
IG9mZnNldCArKyBdID0gdmVjdG9yLnc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IG1vcnBoQXR0cmlidXRlID0gbW9ycGhBdHRyaWJ1dGVzUG9zaXRpb25bIGkgXTsKIAotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0gMCwgamwg
PSBtb3JwaEF0dHJpYnV0ZS5jb3VudDsgaiA8IGpsOyBqICsrICkgewogCi0gICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yLmZyb21C
dWZmZXJBdHRyaWJ1dGUoIG1vcnBoQXR0cmlidXRlLCBqICk7CiAKLSAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4UmFkaXVzU3EgPSBNYXRoLm1heCggbWF4UmFk
aXVzU3EsIGNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCggdmVjdG9yICkgKTsKIAotICAgICAgICBz
ZXQ6IGZ1bmN0aW9uICggdmFsdWUsIG9mZnNldCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQg
PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLmFycmF5
LnNldCggdmFsdWUsIG9mZnNldCApOworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJl
LnJhZGl1cyA9IE1hdGguc3FydCggbWF4UmFkaXVzU3EgKTsKIAotICAgICAgICB9LAorICAgICAg
ICAgICAgICAgICAgICBpZiAoIGlzTmFOKCB0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cyApICkg
ewogCi0gICAgICAgIGdldFg6IGZ1bmN0aW9uICggaW5kZXggKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5k
aW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJp
YnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsIHRoaXMgKTsKIAotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuYXJyYXlbIGluZGV4ICogdGhpcy5pdGVtU2l6ZSBdOworICAgICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
c2V0WDogZnVuY3Rpb24gKCBpbmRleCwgeCApIHsKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAg
ICAgIHRoaXMuYXJyYXlbIGluZGV4ICogdGhpcy5pdGVtU2l6ZSBdID0geDsKKyAgICAgICAgfSgp
LAogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgY29tcHV0ZUZhY2VOb3JtYWxz
OiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5
CiAKICAgICAgICAgfSwKIAotICAgICAgICBnZXRZOiBmdW5jdGlvbiAoIGluZGV4ICkgeworICAg
ICAgICBjb21wdXRlVmVydGV4Tm9ybWFsczogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICBy
ZXR1cm4gdGhpcy5hcnJheVsgaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMSBdOworICAgICAgICAg
ICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleDsKKyAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0g
dGhpcy5hdHRyaWJ1dGVzOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICBpZiAoIGF0dHJpYnV0
ZXMucG9zaXRpb24gKSB7CiAKLSAgICAgICAgc2V0WTogZnVuY3Rpb24gKCBpbmRleCwgeSApIHsK
KyAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJh
eTsKIAotICAgICAgICAgICAgdGhpcy5hcnJheVsgaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMSBd
ID0geTsKKyAgICAgICAgICAgICAgICBpZiAoIGF0dHJpYnV0ZXMubm9ybWFsID09PSB1bmRlZmlu
ZWQgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgICAgICB0
aGlzLmFkZEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIG5ldyBGbG9h
dDMyQXJyYXkoIHBvc2l0aW9ucy5sZW5ndGggKSwgMyApICk7CiAKLSAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgIGdldFo6IGZ1bmN0aW9uICggaW5kZXggKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIHJlc2V0IGV4aXN0aW5nIG5vcm1hbHMgdG8gemVybwog
Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsgaW5kZXggKiB0aGlzLml0ZW1TaXplICsg
MiBdOworICAgICAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBhdHRyaWJ1dGVzLm5vcm1hbC5h
cnJheTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAs
IGlsID0gYXJyYXkubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAgICAgc2V0WjogZnVu
Y3Rpb24gKCBpbmRleCwgeiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5WyBpIF0g
PSAwOwogCi0gICAgICAgICAgICB0aGlzLmFycmF5WyBpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAy
IF0gPSB6OworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIHZhciBu
b3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwuYXJyYXk7CiAKLSAgICAgICAgZ2V0VzogZnVuY3Rp
b24gKCBpbmRleCApIHsKKyAgICAgICAgICAgICAgICB2YXIgdkEsIHZCLCB2QzsKKyAgICAgICAg
ICAgICAgICB2YXIgcEEgPSBuZXcgVmVjdG9yMygpLCBwQiA9IG5ldyBWZWN0b3IzKCksIHBDID0g
bmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgICAgICB2YXIgY2IgPSBuZXcgVmVjdG9yMygpLCBh
YiA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WyBpbmRl
eCAqIHRoaXMuaXRlbVNpemUgKyAzIF07CisgICAgICAgICAgICAgICAgLy8gaW5kZXhlZCBlbGVt
ZW50cwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgaWYgKCBpbmRleCApIHsKIAotICAg
ICAgICBzZXRXOiBmdW5jdGlvbiAoIGluZGV4LCB3ICkgeworICAgICAgICAgICAgICAgICAgICB2
YXIgaW5kaWNlcyA9IGluZGV4LmFycmF5OwogCi0gICAgICAgICAgICB0aGlzLmFycmF5WyBpbmRl
eCAqIHRoaXMuaXRlbVNpemUgKyAzIF0gPSB3OworICAgICAgICAgICAgICAgICAgICBmb3IgKCB2
YXIgaSA9IDAsIGlsID0gaW5kZXguY291bnQ7IGkgPCBpbDsgaSArPSAzICkgewogCi0gICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZBID0gaW5kaWNlc1sg
aSArIDAgXSAqIDM7CisgICAgICAgICAgICAgICAgICAgICAgICB2QiA9IGluZGljZXNbIGkgKyAx
IF0gKiAzOworICAgICAgICAgICAgICAgICAgICAgICAgdkMgPSBpbmRpY2VzWyBpICsgMiBdICog
MzsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgcEEuZnJvbUFycmF5KCBw
b3NpdGlvbnMsIHZBICk7CisgICAgICAgICAgICAgICAgICAgICAgICBwQi5mcm9tQXJyYXkoIHBv
c2l0aW9ucywgdkIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBDLmZyb21BcnJheSggcG9z
aXRpb25zLCB2QyApOwogCi0gICAgICAgIHNldFhZOiBmdW5jdGlvbiAoIGluZGV4LCB4LCB5ICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgY2Iuc3ViVmVjdG9ycyggcEMsIHBCICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhYi5zdWJWZWN0b3JzKCBwQSwgcEIgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNiLmNyb3NzKCBhYiApOwogCi0gICAgICAgICAgICBpbmRleCAqPSB0aGlz
Lml0ZW1TaXplOworICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgdkEgXSArPSBjYi54
OworICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgdkEgKyAxIF0gKz0gY2IueTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIHZBICsgMiBdICs9IGNiLno7CiAKLSAgICAg
ICAgICAgIHRoaXMuYXJyYXlbIGluZGV4ICsgMCBdID0geDsKLSAgICAgICAgICAgIHRoaXMuYXJy
YXlbIGluZGV4ICsgMSBdID0geTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIHZC
IF0gKz0gY2IueDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIHZCICsgMSBdICs9
IGNiLnk7CisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyB2QiArIDIgXSArPSBjYi56
OwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
cm1hbHNbIHZDIF0gKz0gY2IueDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIHZD
ICsgMSBdICs9IGNiLnk7CisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyB2QyArIDIg
XSArPSBjYi56OwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICBzZXRYWVo6IGZ1bmN0aW9uICggaW5kZXgsIHgsIHksIHogKSB7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKIAotICAgICAgICAgICAgaW5kZXggKj0gdGhpcy5pdGVtU2l6ZTsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gbm9uLWluZGV4ZWQgZWxlbWVudHMgKHVuY29ubmVjdGVkIHRyaWFuZ2xl
IHNvdXApCiAKLSAgICAgICAgICAgIHRoaXMuYXJyYXlbIGluZGV4ICsgMCBdID0geDsKLSAgICAg
ICAgICAgIHRoaXMuYXJyYXlbIGluZGV4ICsgMSBdID0geTsKLSAgICAgICAgICAgIHRoaXMuYXJy
YXlbIGluZGV4ICsgMiBdID0gejsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
LCBpbCA9IHBvc2l0aW9ucy5sZW5ndGg7IGkgPCBpbDsgaSArPSA5ICkgewogCi0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBBLmZyb21BcnJheSggcG9z
aXRpb25zLCBpICk7CisgICAgICAgICAgICAgICAgICAgICAgICBwQi5mcm9tQXJyYXkoIHBvc2l0
aW9ucywgaSArIDMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBDLmZyb21BcnJheSggcG9z
aXRpb25zLCBpICsgNiApOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBj
Yi5zdWJWZWN0b3JzKCBwQywgcEIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFiLnN1YlZl
Y3RvcnMoIHBBLCBwQiApOworICAgICAgICAgICAgICAgICAgICAgICAgY2IuY3Jvc3MoIGFiICk7
CiAKLSAgICAgICAgc2V0WFlaVzogZnVuY3Rpb24gKCBpbmRleCwgeCwgeSwgeiwgdyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIGkgXSA9IGNiLng7CisgICAgICAgICAgICAg
ICAgICAgICAgICBub3JtYWxzWyBpICsgMSBdID0gY2IueTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5vcm1hbHNbIGkgKyAyIF0gPSBjYi56OwogCi0gICAgICAgICAgICBpbmRleCAqPSB0aGlz
Lml0ZW1TaXplOworICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgaSArIDMgXSA9IGNi
Lng7CisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyBpICsgNCBdID0gY2IueTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIGkgKyA1IF0gPSBjYi56OwogCi0gICAgICAg
ICAgICB0aGlzLmFycmF5WyBpbmRleCArIDAgXSA9IHg7Ci0gICAgICAgICAgICB0aGlzLmFycmF5
WyBpbmRleCArIDEgXSA9IHk7Ci0gICAgICAgICAgICB0aGlzLmFycmF5WyBpbmRleCArIDIgXSA9
IHo7Ci0gICAgICAgICAgICB0aGlzLmFycmF5WyBpbmRleCArIDMgXSA9IHc7CisgICAgICAgICAg
ICAgICAgICAgICAgICBub3JtYWxzWyBpICsgNiBdID0gY2IueDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5vcm1hbHNbIGkgKyA3IF0gPSBjYi55OworICAgICAgICAgICAgICAgICAgICAgICAg
bm9ybWFsc1sgaSArIDggXSA9IGNiLno7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgb25VcGxvYWQ6IGZ1bmN0aW9uICggY2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5ub3JtYWxpemVOb3JtYWxzKCk7CiAKLSAgICAgICAgICAgIHRoaXMub25VcGxvYWRDYWxs
YmFjayA9IGNhbGxiYWNrOworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMubm9ybWFsLm5lZWRz
VXBkYXRlID0gdHJ1ZTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9
CiAKICAgICAgICAgfSwKIAotICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICBt
ZXJnZTogZnVuY3Rpb24gKCBnZW9tZXRyeSwgb2Zmc2V0ICkgewogCi0gICAgICAgICAgICByZXR1
cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRoaXMuYXJyYXksIHRoaXMuaXRlbVNpemUgKS5jb3B5
KCB0aGlzICk7CisgICAgICAgICAgICBpZiAoICEgKCBnZW9tZXRyeSAmJiBnZW9tZXRyeS5pc0J1
ZmZlckdlb21ldHJ5ICkgKSB7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnNvbGUu
ZXJyb3IoICdUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5z
dGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuJywgZ2VvbWV0cnkgKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICB9ICk7CisgICAgICAgICAgICB9CiAKLSAgICAvLworICAgICAg
ICAgICAgaWYgKCBvZmZzZXQgPT09IHVuZGVmaW5lZCApIHsKIAotICAgIGZ1bmN0aW9uIEludDhC
dWZmZXJBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApIHsKKyAgICAgICAg
ICAgICAgICBvZmZzZXQgPSAwOwogCi0gICAgICAgIEJ1ZmZlckF0dHJpYnV0ZS5jYWxsKCB0aGlz
LCBuZXcgSW50OEFycmF5KCBhcnJheSApLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApOworICAgICAg
ICAgICAgICAgIGNvbnNvbGUud2FybigKKyAgICAgICAgICAgICAgICAgICAgJ1RIUkVFLkJ1ZmZl
ckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGlu
ZyBhdCBvZmZzZXQ9MC4gJworICAgICAgICAgICAgICAgICAgICArICdVc2UgQnVmZmVyR2VvbWV0
cnlVdGlscy5tZXJnZUJ1ZmZlckdlb21ldHJpZXMoKSBmb3IgbG9zc2xlc3MgbWVyZ2UuJworICAg
ICAgICAgICAgICAgICk7CiAKLSAgICB9CisgICAgICAgICAgICB9CiAKLSAgICBJbnQ4QnVmZmVy
QXR0cmlidXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEJ1ZmZlckF0dHJpYnV0ZS5wcm90
b3R5cGUgKTsKLSAgICBJbnQ4QnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9
IEludDhCdWZmZXJBdHRyaWJ1dGU7CisgICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMu
YXR0cmlidXRlczsKIAorICAgICAgICAgICAgZm9yICggdmFyIGtleSBpbiBhdHRyaWJ1dGVzICkg
ewogCi0gICAgZnVuY3Rpb24gVWludDhCdWZmZXJBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSwg
bm9ybWFsaXplZCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmF0dHJpYnV0ZXNb
IGtleSBdID09PSB1bmRlZmluZWQgKSBjb250aW51ZTsKIAotICAgICAgICBCdWZmZXJBdHRyaWJ1
dGUuY2FsbCggdGhpcywgbmV3IFVpbnQ4QXJyYXkoIGFycmF5ICksIGl0ZW1TaXplLCBub3JtYWxp
emVkICk7CisgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZTEgPSBhdHRyaWJ1dGVzWyBrZXkg
XTsKKyAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlQXJyYXkxID0gYXR0cmlidXRlMS5hcnJh
eTsKIAotICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlMiA9IGdlb21ldHJ5LmF0
dHJpYnV0ZXNbIGtleSBdOworICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVBcnJheTIgPSBh
dHRyaWJ1dGUyLmFycmF5OwogCi0gICAgVWludDhCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlID0g
T2JqZWN0LmNyZWF0ZSggQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZSApOwotICAgIFVpbnQ4QnVm
ZmVyQXR0cmlidXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFVpbnQ4QnVmZmVyQXR0cmlidXRl
OworICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVPZmZzZXQgPSBhdHRyaWJ1dGUyLml0ZW1T
aXplICogb2Zmc2V0OworICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1pbiggYXR0
cmlidXRlQXJyYXkyLmxlbmd0aCwgYXR0cmlidXRlQXJyYXkxLmxlbmd0aCAtIGF0dHJpYnV0ZU9m
ZnNldCApOwogCisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBqID0gYXR0cmlidXRl
T2Zmc2V0OyBpIDwgbGVuZ3RoOyBpICsrLCBqICsrICkgewogCi0gICAgZnVuY3Rpb24gVWludDhD
bGFtcGVkQnVmZmVyQXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUFycmF5MVsgaiBdID0gYXR0cmlidXRlQXJyYXky
WyBpIF07CiAKLSAgICAgICAgQnVmZmVyQXR0cmlidXRlLmNhbGwoIHRoaXMsIG5ldyBVaW50OENs
YW1wZWRBcnJheSggYXJyYXkgKSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKTsKKyAgICAgICAgICAg
ICAgICB9CiAKLSAgICB9CisgICAgICAgICAgICB9CiAKLSAgICBVaW50OENsYW1wZWRCdWZmZXJB
dHRyaWJ1dGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQnVmZmVyQXR0cmlidXRlLnByb3Rv
dHlwZSApOwotICAgIFVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuY29uc3Ry
dWN0b3IgPSBVaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1dGU7CisgICAgICAgICAgICByZXR1cm4g
dGhpczsKIAorICAgICAgICB9LAogCi0gICAgZnVuY3Rpb24gSW50MTZCdWZmZXJBdHRyaWJ1dGUo
IGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApIHsKKyAgICAgICAgbm9ybWFsaXplTm9ybWFs
czogZnVuY3Rpb24gKCkgewogCi0gICAgICAgIEJ1ZmZlckF0dHJpYnV0ZS5jYWxsKCB0aGlzLCBu
ZXcgSW50MTZBcnJheSggYXJyYXkgKSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKTsKKyAgICAgICAg
ICAgIHZhciB2ZWN0b3IgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgfQorICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uIG5vcm1hbGl6ZU5vcm1hbHMoKSB7CiAKLSAgICBJbnQxNkJ1ZmZlckF0dHJp
YnV0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBl
ICk7Ci0gICAgSW50MTZCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50
MTZCdWZmZXJBdHRyaWJ1dGU7CisgICAgICAgICAgICAgICAgdmFyIG5vcm1hbHMgPSB0aGlzLmF0
dHJpYnV0ZXMubm9ybWFsOwogCisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9
IG5vcm1hbHMuY291bnQ7IGkgPCBpbDsgaSArKyApIHsKIAotICAgIGZ1bmN0aW9uIFVpbnQxNkJ1
ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkICkgeworICAgICAgICAg
ICAgICAgICAgICB2ZWN0b3IueCA9IG5vcm1hbHMuZ2V0WCggaSApOworICAgICAgICAgICAgICAg
ICAgICB2ZWN0b3IueSA9IG5vcm1hbHMuZ2V0WSggaSApOworICAgICAgICAgICAgICAgICAgICB2
ZWN0b3IueiA9IG5vcm1hbHMuZ2V0WiggaSApOwogCi0gICAgICAgIEJ1ZmZlckF0dHJpYnV0ZS5j
YWxsKCB0aGlzLCBuZXcgVWludDE2QXJyYXkoIGFycmF5ICksIGl0ZW1TaXplLCBub3JtYWxpemVk
ICk7CisgICAgICAgICAgICAgICAgICAgIHZlY3Rvci5ub3JtYWxpemUoKTsKIAotICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgbm9ybWFscy5zZXRYWVooIGksIHZlY3Rvci54LCB2ZWN0b3IueSwg
dmVjdG9yLnogKTsKIAotICAgIFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUgPSBPYmpl
Y3QuY3JlYXRlKCBCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlICk7Ci0gICAgVWludDE2QnVmZmVy
QXR0cmlidXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZTsK
KyAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIH07CiAKLSAgICBmdW5jdGlvbiBJbnQz
MkJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkICkgeworICAgICAg
ICB9KCksCiAKLSAgICAgICAgQnVmZmVyQXR0cmlidXRlLmNhbGwoIHRoaXMsIG5ldyBJbnQzMkFy
cmF5KCBhcnJheSApLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApOworICAgICAgICB0b05vbkluZGV4
ZWQ6IGZ1bmN0aW9uICgpIHsKIAotICAgIH0KKyAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRC
dWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSwgaW5kaWNlcyApIHsKIAotICAgIEludDMyQnVmZmVy
QXR0cmlidXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEJ1ZmZlckF0dHJpYnV0ZS5wcm90
b3R5cGUgKTsKLSAgICBJbnQzMkJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuY29uc3RydWN0b3Ig
PSBJbnQzMkJ1ZmZlckF0dHJpYnV0ZTsKKyAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBhdHRy
aWJ1dGUuYXJyYXk7CisgICAgICAgICAgICAgICAgdmFyIGl0ZW1TaXplID0gYXR0cmlidXRlLml0
ZW1TaXplOwogCisgICAgICAgICAgICAgICAgdmFyIGFycmF5MiA9IG5ldyBhcnJheS5jb25zdHJ1
Y3RvciggaW5kaWNlcy5sZW5ndGggKiBpdGVtU2l6ZSApOwogCi0gICAgZnVuY3Rpb24gVWludDMy
QnVmZmVyQXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGluZGV4ID0gMCwgaW5kZXgyID0gMDsKIAotICAgICAgICBCdWZmZXJBdHRy
aWJ1dGUuY2FsbCggdGhpcywgbmV3IFVpbnQzMkFycmF5KCBhcnJheSApLCBpdGVtU2l6ZSwgbm9y
bWFsaXplZCApOworICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGluZGljZXMu
bGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaW5k
ZXggPSBpbmRpY2VzWyBpIF0gKiBpdGVtU2l6ZTsKIAotICAgIFVpbnQzMkJ1ZmZlckF0dHJpYnV0
ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlICk7
Ci0gICAgVWludDMyQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFVpbnQz
MkJ1ZmZlckF0dHJpYnV0ZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGogPSAwOyBq
IDwgaXRlbVNpemU7IGogKysgKSB7CiAKKyAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5Mlsg
aW5kZXgyICsrIF0gPSBhcnJheVsgaW5kZXggKysgXTsKIAotICAgIGZ1bmN0aW9uIEZsb2F0MzJC
dWZmZXJBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgIEJ1ZmZlckF0dHJpYnV0ZS5jYWxsKCB0aGlzLCBuZXcg
RmxvYXQzMkFycmF5KCBhcnJheSApLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApOworICAgICAgICAg
ICAgICAgIH0KIAotICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlckF0dHJp
YnV0ZSggYXJyYXkyLCBpdGVtU2l6ZSApOwogCi0gICAgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZS5w
cm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlICk7Ci0g
ICAgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGbG9hdDMy
QnVmZmVyQXR0cmlidXRlOworICAgICAgICAgICAgfQogCisgICAgICAgICAgICAvLwogCi0gICAg
ZnVuY3Rpb24gRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplLCBub3JtYWxp
emVkICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLmluZGV4ID09PSBudWxsICkgewogCi0gICAg
ICAgIEJ1ZmZlckF0dHJpYnV0ZS5jYWxsKCB0aGlzLCBuZXcgRmxvYXQ2NEFycmF5KCBhcnJheSAp
LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApOworICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybigg
J1RIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBHZW9tZXRyeSBpcyBhbHJlYWR5
IG5vbi1pbmRleGVkLicgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgIH0K
KyAgICAgICAgICAgIH0KIAotICAgIEZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlID0g
T2JqZWN0LmNyZWF0ZSggQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZSApOwotICAgIEZsb2F0NjRC
dWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRmxvYXQ2NEJ1ZmZlckF0dHJp
YnV0ZTsKKyAgICAgICAgICAgIHZhciBnZW9tZXRyeTIgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTsK
IAotICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0g
ICAgICovCisgICAgICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kZXguYXJyYXk7CisgICAg
ICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlczsKIAotICAgIGZ1bmN0aW9u
IERpcmVjdEdlb21ldHJ5KCkgeworICAgICAgICAgICAgLy8gYXR0cmlidXRlcwogCi0gICAgICAg
IHRoaXMudmVydGljZXMgPSBbXTsKLSAgICAgICAgdGhpcy5ub3JtYWxzID0gW107Ci0gICAgICAg
IHRoaXMuY29sb3JzID0gW107Ci0gICAgICAgIHRoaXMudXZzID0gW107Ci0gICAgICAgIHRoaXMu
dXZzMiA9IFtdOworICAgICAgICAgICAgZm9yICggdmFyIG5hbWUgaW4gYXR0cmlidXRlcyApIHsK
IAotICAgICAgICB0aGlzLmdyb3VwcyA9IFtdOworICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1
dGUgPSBhdHRyaWJ1dGVzWyBuYW1lIF07CiAKLSAgICAgICAgdGhpcy5tb3JwaFRhcmdldHMgPSB7
fTsKKyAgICAgICAgICAgICAgICB2YXIgbmV3QXR0cmlidXRlID0gY29udmVydEJ1ZmZlckF0dHJp
YnV0ZSggYXR0cmlidXRlLCBpbmRpY2VzICk7CiAKLSAgICAgICAgdGhpcy5za2luV2VpZ2h0cyA9
IFtdOwotICAgICAgICB0aGlzLnNraW5JbmRpY2VzID0gW107CisgICAgICAgICAgICAgICAgZ2Vv
bWV0cnkyLmFkZEF0dHJpYnV0ZSggbmFtZSwgbmV3QXR0cmlidXRlICk7CiAKLSAgICAgICAgLy8g
dGhpcy5saW5lRGlzdGFuY2VzID0gW107CisgICAgICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5i
b3VuZGluZ0JveCA9IG51bGw7Ci0gICAgICAgIHRoaXMuYm91bmRpbmdTcGhlcmUgPSBudWxsOwor
ICAgICAgICAgICAgLy8gbW9ycGggYXR0cmlidXRlcwogCi0gICAgICAgIC8vIHVwZGF0ZSBmbGFn
cworICAgICAgICAgICAgdmFyIG1vcnBoQXR0cmlidXRlcyA9IHRoaXMubW9ycGhBdHRyaWJ1dGVz
OwogCi0gICAgICAgIHRoaXMudmVydGljZXNOZWVkVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIHRo
aXMubm9ybWFsc05lZWRVcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5jb2xvcnNOZWVkVXBk
YXRlID0gZmFsc2U7Ci0gICAgICAgIHRoaXMudXZzTmVlZFVwZGF0ZSA9IGZhbHNlOwotICAgICAg
ICB0aGlzLmdyb3Vwc05lZWRVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoIG5hbWUg
aW4gbW9ycGhBdHRyaWJ1dGVzICkgewogCi0gICAgfQorICAgICAgICAgICAgICAgIHZhciBtb3Jw
aEFycmF5ID0gW107CisgICAgICAgICAgICAgICAgdmFyIG1vcnBoQXR0cmlidXRlID0gbW9ycGhB
dHRyaWJ1dGVzWyBuYW1lIF07IC8vIG1vcnBoQXR0cmlidXRlOiBhcnJheSBvZiBGbG9hdDMyQnVm
ZmVyQXR0cmlidXRlcwogCi0gICAgT2JqZWN0LmFzc2lnbiggRGlyZWN0R2VvbWV0cnkucHJvdG90
eXBlLCB7CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IG1vcnBoQXR0cmli
dXRlLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewogCi0gICAgICAgIGNvbXB1dGVHcm91cHM6IGZ1
bmN0aW9uICggZ2VvbWV0cnkgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUg
PSBtb3JwaEF0dHJpYnV0ZVsgaSBdOwogCi0gICAgICAgICAgICB2YXIgZ3JvdXA7Ci0gICAgICAg
ICAgICB2YXIgZ3JvdXBzID0gW107Ci0gICAgICAgICAgICB2YXIgbWF0ZXJpYWxJbmRleCA9IHVu
ZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0F0dHJpYnV0ZSA9IGNvbnZlcnRC
dWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSwgaW5kaWNlcyApOwogCi0gICAgICAgICAgICB2YXIg
ZmFjZXMgPSBnZW9tZXRyeS5mYWNlczsKKyAgICAgICAgICAgICAgICAgICAgbW9ycGhBcnJheS5w
dXNoKCBuZXdBdHRyaWJ1dGUgKTsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwg
ZmFjZXMubGVuZ3RoOyBpICsrICkgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIHZhciBmYWNlID0gZmFjZXNbIGkgXTsKKyAgICAgICAgICAgICAgICBnZW9tZXRyeTIubW9y
cGhBdHRyaWJ1dGVzWyBuYW1lIF0gPSBtb3JwaEFycmF5OwogCi0gICAgICAgICAgICAgICAgLy8g
bWF0ZXJpYWxzCisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIGZhY2UubWF0
ZXJpYWxJbmRleCAhPT0gbWF0ZXJpYWxJbmRleCApIHsKKyAgICAgICAgICAgIC8vIGdyb3Vwcwog
Ci0gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsSW5kZXggPSBmYWNlLm1hdGVyaWFsSW5kZXg7
CisgICAgICAgICAgICB2YXIgZ3JvdXBzID0gdGhpcy5ncm91cHM7CiAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCBncm91cCAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgZm9yICggdmFy
IGkgPSAwLCBsID0gZ3JvdXBzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGdyb3VwLmNvdW50ID0gKCBpICogMyApIC0gZ3JvdXAuc3RhcnQ7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBncm91cHMucHVzaCggZ3JvdXAgKTsKKyAgICAgICAgICAgICAg
ICB2YXIgZ3JvdXAgPSBncm91cHNbIGkgXTsKKyAgICAgICAgICAgICAgICBnZW9tZXRyeTIuYWRk
R3JvdXAoIGdyb3VwLnN0YXJ0LCBncm91cC5jb3VudCwgZ3JvdXAubWF0ZXJpYWxJbmRleCApOwog
Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
ICAgICBncm91cCA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBpICogMywKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsSW5kZXg6IG1hdGVyaWFsSW5kZXgKLSAgICAg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeTI7CisKKyAgICAg
ICAgfSwKKworICAgICAgICB0b0pTT046IGZ1bmN0aW9uICgpIHsKIAorICAgICAgICAgICAgdmFy
IGRhdGEgPSB7CisgICAgICAgICAgICAgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgICAgICAgICAg
ICAgdmVyc2lvbjogNC41LAorICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQnVmZmVyR2VvbWV0
cnknLAorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3I6ICdCdWZmZXJHZW9tZXRyeS50b0pT
T04nCiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gc3RhbmRhcmQgQnVmZmVyR2VvbWV0cnkgc2VyaWFsaXphdGlvbgogCi0g
ICAgICAgICAgICBpZiAoIGdyb3VwICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICBkYXRh
LnV1aWQgPSB0aGlzLnV1aWQ7CisgICAgICAgICAgICBkYXRhLnR5cGUgPSB0aGlzLnR5cGU7Cisg
ICAgICAgICAgICBpZiAoIHRoaXMubmFtZSAhPT0gJycgKSBkYXRhLm5hbWUgPSB0aGlzLm5hbWU7
CisgICAgICAgICAgICBpZiAoIE9iamVjdC5rZXlzKCB0aGlzLnVzZXJEYXRhICkubGVuZ3RoID4g
MCApIGRhdGEudXNlckRhdGEgPSB0aGlzLnVzZXJEYXRhOwogCi0gICAgICAgICAgICAgICAgZ3Jv
dXAuY291bnQgPSAoIGkgKiAzICkgLSBncm91cC5zdGFydDsKLSAgICAgICAgICAgICAgICBncm91
cHMucHVzaCggZ3JvdXAgKTsKKyAgICAgICAgICAgIGlmICggdGhpcy5wYXJhbWV0ZXJzICE9PSB1
bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgcGFyYW1l
dGVycyA9IHRoaXMucGFyYW1ldGVyczsKIAotICAgICAgICAgICAgdGhpcy5ncm91cHMgPSBncm91
cHM7CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGtleSBpbiBwYXJhbWV0ZXJzICkgewogCi0g
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIGlmICggcGFyYW1ldGVyc1sga2V5IF0gIT09
IHVuZGVmaW5lZCApIGRhdGFbIGtleSBdID0gcGFyYW1ldGVyc1sga2V5IF07CiAKLSAgICAgICAg
ZnJvbUdlb21ldHJ5OiBmdW5jdGlvbiAoIGdlb21ldHJ5ICkgeworICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgdmFyIGZhY2VzID0gZ2VvbWV0cnkuZmFjZXM7Ci0gICAgICAgICAgICB2
YXIgdmVydGljZXMgPSBnZW9tZXRyeS52ZXJ0aWNlczsKLSAgICAgICAgICAgIHZhciBmYWNlVmVy
dGV4VXZzID0gZ2VvbWV0cnkuZmFjZVZlcnRleFV2czsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZGF0YTsKIAotICAgICAgICAgICAgdmFyIGhhc0ZhY2VWZXJ0ZXhVdiA9IGZhY2VWZXJ0ZXhVdnNb
IDAgXSAmJiBmYWNlVmVydGV4VXZzWyAwIF0ubGVuZ3RoID4gMDsKLSAgICAgICAgICAgIHZhciBo
YXNGYWNlVmVydGV4VXYyID0gZmFjZVZlcnRleFV2c1sgMSBdICYmIGZhY2VWZXJ0ZXhVdnNbIDEg
XS5sZW5ndGggPiAwOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBtb3JwaHMKKyAg
ICAgICAgICAgIGRhdGEuZGF0YSA9IHsgYXR0cmlidXRlczoge30gfTsKIAotICAgICAgICAgICAg
dmFyIG1vcnBoVGFyZ2V0cyA9IGdlb21ldHJ5Lm1vcnBoVGFyZ2V0czsKLSAgICAgICAgICAgIHZh
ciBtb3JwaFRhcmdldHNMZW5ndGggPSBtb3JwaFRhcmdldHMubGVuZ3RoOworICAgICAgICAgICAg
dmFyIGluZGV4ID0gdGhpcy5pbmRleDsKIAotICAgICAgICAgICAgdmFyIG1vcnBoVGFyZ2V0c1Bv
c2l0aW9uOworICAgICAgICAgICAgaWYgKCBpbmRleCAhPT0gbnVsbCApIHsKIAotICAgICAgICAg
ICAgaWYgKCBtb3JwaFRhcmdldHNMZW5ndGggPiAwICkgeworICAgICAgICAgICAgICAgIGRhdGEu
ZGF0YS5pbmRleCA9IHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogaW5kZXguYXJyYXkuY29u
c3RydWN0b3IubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgYXJyYXk6IEFycmF5LnByb3RvdHlw
ZS5zbGljZS5jYWxsKCBpbmRleC5hcnJheSApCisgICAgICAgICAgICAgICAgfTsKIAotICAgICAg
ICAgICAgICAgIG1vcnBoVGFyZ2V0c1Bvc2l0aW9uID0gW107CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBtb3JwaFRhcmdldHNMZW5ndGg7IGkg
KysgKSB7CisgICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlczsKKwor
ICAgICAgICAgICAgZm9yICggdmFyIGtleSBpbiBhdHRyaWJ1dGVzICkgewogCi0gICAgICAgICAg
ICAgICAgICAgIG1vcnBoVGFyZ2V0c1Bvc2l0aW9uWyBpIF0gPSBbXTsKKyAgICAgICAgICAgICAg
ICB2YXIgYXR0cmlidXRlID0gYXR0cmlidXRlc1sga2V5IF07CiAKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZURhdGEgPSBhdHRyaWJ1dGUudG9KU09OKCk7
CiAKLSAgICAgICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0cy5wb3NpdGlvbiA9IG1vcnBoVGFy
Z2V0c1Bvc2l0aW9uOworICAgICAgICAgICAgICAgIGlmICggYXR0cmlidXRlLm5hbWUgIT09ICcn
ICkgYXR0cmlidXRlRGF0YS5uYW1lID0gYXR0cmlidXRlLm5hbWU7CisKKyAgICAgICAgICAgICAg
ICBkYXRhLmRhdGEuYXR0cmlidXRlc1sga2V5IF0gPSBhdHRyaWJ1dGVEYXRhOwogCiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIHZhciBtb3JwaE5vcm1hbHMgPSBnZW9tZXRyeS5tb3JwaE5v
cm1hbHM7Ci0gICAgICAgICAgICB2YXIgbW9ycGhOb3JtYWxzTGVuZ3RoID0gbW9ycGhOb3JtYWxz
Lmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBtb3JwaEF0dHJpYnV0ZXMgPSB7fTsKKyAgICAgICAg
ICAgIHZhciBoYXNNb3JwaEF0dHJpYnV0ZXMgPSBmYWxzZTsKIAotICAgICAgICAgICAgdmFyIG1v
cnBoVGFyZ2V0c05vcm1hbDsKKyAgICAgICAgICAgIGZvciAoIHZhciBrZXkgaW4gdGhpcy5tb3Jw
aEF0dHJpYnV0ZXMgKSB7CiAKLSAgICAgICAgICAgIGlmICggbW9ycGhOb3JtYWxzTGVuZ3RoID4g
MCApIHsKKyAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlQXJyYXkgPSB0aGlzLm1vcnBoQXR0
cmlidXRlc1sga2V5IF07CiAKLSAgICAgICAgICAgICAgICBtb3JwaFRhcmdldHNOb3JtYWwgPSBb
XTsKKyAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBbXTsKIAotICAgICAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMDsgaSA8IG1vcnBoTm9ybWFsc0xlbmd0aDsgaSArKyApIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGlsID0gYXR0cmlidXRlQXJyYXkubGVuZ3RoOyBpIDwg
aWw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgbW9ycGhUYXJnZXRzTm9ybWFsWyBp
IF0gPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZUFy
cmF5WyBpIF07CisKKyAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZURhdGEgPSBhdHRy
aWJ1dGUudG9KU09OKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBhdHRyaWJ1dGUubmFt
ZSAhPT0gJycgKSBhdHRyaWJ1dGVEYXRhLm5hbWUgPSBhdHRyaWJ1dGUubmFtZTsKKworICAgICAg
ICAgICAgICAgICAgICBhcnJheS5wdXNoKCBhdHRyaWJ1dGVEYXRhICk7CiAKICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0cy5ub3JtYWwgPSBtb3Jw
aFRhcmdldHNOb3JtYWw7CisgICAgICAgICAgICAgICAgaWYgKCBhcnJheS5sZW5ndGggPiAwICkg
eworCisgICAgICAgICAgICAgICAgICAgIG1vcnBoQXR0cmlidXRlc1sga2V5IF0gPSBhcnJheTsK
KworICAgICAgICAgICAgICAgICAgICBoYXNNb3JwaEF0dHJpYnV0ZXMgPSB0cnVlOworCisgICAg
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIHNraW5zCisg
ICAgICAgICAgICBpZiAoIGhhc01vcnBoQXR0cmlidXRlcyApIGRhdGEuZGF0YS5tb3JwaEF0dHJp
YnV0ZXMgPSBtb3JwaEF0dHJpYnV0ZXM7CiAKLSAgICAgICAgICAgIHZhciBza2luSW5kaWNlcyA9
IGdlb21ldHJ5LnNraW5JbmRpY2VzOwotICAgICAgICAgICAgdmFyIHNraW5XZWlnaHRzID0gZ2Vv
bWV0cnkuc2tpbldlaWdodHM7CisgICAgICAgICAgICB2YXIgZ3JvdXBzID0gdGhpcy5ncm91cHM7
CiAKLSAgICAgICAgICAgIHZhciBoYXNTa2luSW5kaWNlcyA9IHNraW5JbmRpY2VzLmxlbmd0aCA9
PT0gdmVydGljZXMubGVuZ3RoOwotICAgICAgICAgICAgdmFyIGhhc1NraW5XZWlnaHRzID0gc2tp
bldlaWdodHMubGVuZ3RoID09PSB2ZXJ0aWNlcy5sZW5ndGg7CisgICAgICAgICAgICBpZiAoIGdy
b3Vwcy5sZW5ndGggPiAwICkgewogCi0gICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIGRh
dGEuZGF0YS5ncm91cHMgPSBKU09OLnBhcnNlKCBKU09OLnN0cmluZ2lmeSggZ3JvdXBzICkgKTsK
IAotICAgICAgICAgICAgaWYgKCB2ZXJ0aWNlcy5sZW5ndGggPiAwICYmIGZhY2VzLmxlbmd0aCA9
PT0gMCApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3Io
ICdUSFJFRS5EaXJlY3RHZW9tZXRyeTogRmFjZWxlc3MgZ2VvbWV0cmllcyBhcmUgbm90IHN1cHBv
cnRlZC4nICk7CisgICAgICAgICAgICB2YXIgYm91bmRpbmdTcGhlcmUgPSB0aGlzLmJvdW5kaW5n
U3BoZXJlOworCisgICAgICAgICAgICBpZiAoIGJvdW5kaW5nU3BoZXJlICE9PSBudWxsICkgewor
CisgICAgICAgICAgICAgICAgZGF0YS5kYXRhLmJvdW5kaW5nU3BoZXJlID0geworICAgICAgICAg
ICAgICAgICAgICBjZW50ZXI6IGJvdW5kaW5nU3BoZXJlLmNlbnRlci50b0FycmF5KCksCisgICAg
ICAgICAgICAgICAgICAgIHJhZGl1czogYm91bmRpbmdTcGhlcmUucmFkaXVzCisgICAgICAgICAg
ICAgICAgfTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7
IGkgPCBmYWNlcy5sZW5ndGg7IGkgKysgKSB7CisgICAgICAgICAgICByZXR1cm4gZGF0YTsKIAot
ICAgICAgICAgICAgICAgIHZhciBmYWNlID0gZmFjZXNbIGkgXTsKKyAgICAgICAgfSwKIAotICAg
ICAgICAgICAgICAgIHRoaXMudmVydGljZXMucHVzaCggdmVydGljZXNbIGZhY2UuYSBdLCB2ZXJ0
aWNlc1sgZmFjZS5iIF0sIHZlcnRpY2VzWyBmYWNlLmMgXSApOworICAgICAgICBjbG9uZTogZnVu
Y3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgdmFyIHZlcnRleE5vcm1hbHMgPSBmYWNlLnZl
cnRleE5vcm1hbHM7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgIC8vIEhhbmRsZSBwcmlt
aXRpdmVzCiAKLSAgICAgICAgICAgICAgICBpZiAoIHZlcnRleE5vcm1hbHMubGVuZ3RoID09PSAz
ICkgeworICAgICAgICAgICAgIHZhciBwYXJhbWV0ZXJzID0gdGhpcy5wYXJhbWV0ZXJzOwogCi0g
ICAgICAgICAgICAgICAgICAgIHRoaXMubm9ybWFscy5wdXNoKCB2ZXJ0ZXhOb3JtYWxzWyAwIF0s
IHZlcnRleE5vcm1hbHNbIDEgXSwgdmVydGV4Tm9ybWFsc1sgMiBdICk7CisgICAgICAgICAgICAg
aWYgKCBwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbXTsKIAotICAgICAgICAgICAgICAgICAg
ICB2YXIgbm9ybWFsID0gZmFjZS5ub3JtYWw7CisgICAgICAgICAgICAgZm9yICggdmFyIGtleSBp
biBwYXJhbWV0ZXJzICkgewogCi0gICAgICAgICAgICAgICAgICAgIHRoaXMubm9ybWFscy5wdXNo
KCBub3JtYWwsIG5vcm1hbCwgbm9ybWFsICk7CisgICAgICAgICAgICAgdmFsdWVzLnB1c2goIHBh
cmFtZXRlcnNbIGtleSBdICk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgdmFyIHZlcnRleENvbG9ycyA9IGZhY2UudmVydGV4Q29sb3JzOwor
ICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IE9iamVjdC5jcmVhdGUoIHRoaXMuY29uc3RydWN0
b3IucHJvdG90eXBlICk7CisgICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5hcHBseSggZ2Vv
bWV0cnksIHZhbHVlcyApOworICAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeTsKIAotICAgICAg
ICAgICAgICAgIGlmICggdmVydGV4Q29sb3JzLmxlbmd0aCA9PT0gMyApIHsKKyAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xvcnMucHVzaCggdmVydGV4Q29sb3Jz
WyAwIF0sIHZlcnRleENvbG9yc1sgMSBdLCB2ZXJ0ZXhDb2xvcnNbIDIgXSApOworICAgICAgICAg
ICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKKyAgICAgICAg
ICAgICAqLwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgQnVmZmVyR2VvbWV0cnkoKS5jb3B5KCB0aGlzICk7CiAKLSAgICAgICAgICAgICAgICAgICAg
dmFyIGNvbG9yID0gZmFjZS5jb2xvcjsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgICAg
ICB0aGlzLmNvbG9ycy5wdXNoKCBjb2xvciwgY29sb3IsIGNvbG9yICk7CisgICAgICAgIGNvcHk6
IGZ1bmN0aW9uICggc291cmNlICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyIG5hbWUsIGksIGw7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGhhc0ZhY2VWZXJ0ZXhVdiA9
PT0gdHJ1ZSApIHsKKyAgICAgICAgICAgIC8vIHJlc2V0CiAKLSAgICAgICAgICAgICAgICAgICAg
dmFyIHZlcnRleFV2cyA9IGZhY2VWZXJ0ZXhVdnNbIDAgXVsgaSBdOworICAgICAgICAgICAgdGhp
cy5pbmRleCA9IG51bGw7CisgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSB7fTsKKyAgICAg
ICAgICAgIHRoaXMubW9ycGhBdHRyaWJ1dGVzID0ge307CisgICAgICAgICAgICB0aGlzLmdyb3Vw
cyA9IFtdOworICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG51bGw7CisgICAgICAgICAg
ICB0aGlzLmJvdW5kaW5nU3BoZXJlID0gbnVsbDsKIAotICAgICAgICAgICAgICAgICAgICBpZiAo
IHZlcnRleFV2cyAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgLy8gbmFtZQogCi0gICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnV2cy5wdXNoKCB2ZXJ0ZXhVdnNbIDAgXSwgdmVydGV4
VXZzWyAxIF0sIHZlcnRleFV2c1sgMiBdICk7CisgICAgICAgICAgICB0aGlzLm5hbWUgPSBzb3Vy
Y2UubmFtZTsKIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
aW5kZXgKIAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuRGly
ZWN0R2VvbWV0cnkuZnJvbUdlb21ldHJ5KCk6IFVuZGVmaW5lZCB2ZXJ0ZXhVdiAnLCBpICk7Cisg
ICAgICAgICAgICB2YXIgaW5kZXggPSBzb3VyY2UuaW5kZXg7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMudXZzLnB1c2goIG5ldyBWZWN0b3IyKCksIG5ldyBWZWN0b3IyKCksIG5ldyBW
ZWN0b3IyKCkgKTsKKyAgICAgICAgICAgIGlmICggaW5kZXggIT09IG51bGwgKSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5kZXgoIGluZGV4LmNs
b25lKCkgKTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIGlmICggaGFzRmFjZVZlcnRleFV2MiA9PT0gdHJ1ZSApIHsKKyAgICAgICAgICAgIC8v
IGF0dHJpYnV0ZXMKIAotICAgICAgICAgICAgICAgICAgICB2YXIgdmVydGV4VXZzID0gZmFjZVZl
cnRleFV2c1sgMSBdWyBpIF07CisgICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHNvdXJjZS5h
dHRyaWJ1dGVzOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICggdmVydGV4VXZzICE9PSB1bmRl
ZmluZWQgKSB7CisgICAgICAgICAgICBmb3IgKCBuYW1lIGluIGF0dHJpYnV0ZXMgKSB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXZzMi5wdXNoKCB2ZXJ0ZXhVdnNbIDAgXSwgdmVy
dGV4VXZzWyAxIF0sIHZlcnRleFV2c1sgMiBdICk7CisgICAgICAgICAgICAgICAgdmFyIGF0dHJp
YnV0ZSA9IGF0dHJpYnV0ZXNbIG5hbWUgXTsKKyAgICAgICAgICAgICAgICB0aGlzLmFkZEF0dHJp
YnV0ZSggbmFtZSwgYXR0cmlidXRlLmNsb25lKCkgKTsKIAotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xl
Lndhcm4oICdUSFJFRS5EaXJlY3RHZW9tZXRyeS5mcm9tR2VvbWV0cnkoKTogVW5kZWZpbmVkIHZl
cnRleFV2MiAnLCBpICk7CisgICAgICAgICAgICAvLyBtb3JwaCBhdHRyaWJ1dGVzCiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMudXZzMi5wdXNoKCBuZXcgVmVjdG9yMigpLCBuZXcgVmVj
dG9yMigpLCBuZXcgVmVjdG9yMigpICk7CisgICAgICAgICAgICB2YXIgbW9ycGhBdHRyaWJ1dGVz
ID0gc291cmNlLm1vcnBoQXR0cmlidXRlczsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBmb3IgKCBuYW1lIGluIG1vcnBoQXR0cmlidXRlcyApIHsKKworICAgICAgICAgICAg
ICAgIHZhciBhcnJheSA9IFtdOworICAgICAgICAgICAgICAgIHZhciBtb3JwaEF0dHJpYnV0ZSA9
IG1vcnBoQXR0cmlidXRlc1sgbmFtZSBdOyAvLyBtb3JwaEF0dHJpYnV0ZTogYXJyYXkgb2YgRmxv
YXQzMkJ1ZmZlckF0dHJpYnV0ZXMKKworICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0g
bW9ycGhBdHRyaWJ1dGUubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKworICAgICAgICAgICAgICAg
ICAgICBhcnJheS5wdXNoKCBtb3JwaEF0dHJpYnV0ZVsgaSBdLmNsb25lKCkgKTsKIAogICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIC8vIG1vcnBocworICAgICAgICAgICAgICAg
IHRoaXMubW9ycGhBdHRyaWJ1dGVzWyBuYW1lIF0gPSBhcnJheTsKIAotICAgICAgICAgICAgICAg
IGZvciAoIHZhciBqID0gMDsgaiA8IG1vcnBoVGFyZ2V0c0xlbmd0aDsgaiArKyApIHsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB2YXIgbW9ycGhUYXJnZXQgPSBtb3JwaFRh
cmdldHNbIGogXS52ZXJ0aWNlczsKKyAgICAgICAgICAgIC8vIGdyb3VwcwogCi0gICAgICAgICAg
ICAgICAgICAgIG1vcnBoVGFyZ2V0c1Bvc2l0aW9uWyBqIF0ucHVzaCggbW9ycGhUYXJnZXRbIGZh
Y2UuYSBdLCBtb3JwaFRhcmdldFsgZmFjZS5iIF0sIG1vcnBoVGFyZ2V0WyBmYWNlLmMgXSApOwor
ICAgICAgICAgICAgdmFyIGdyb3VwcyA9IHNvdXJjZS5ncm91cHM7CiAKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IGdyb3Vwcy5sZW5ndGg7IGkgPCBsOyBp
ICsrICkgewogCi0gICAgICAgICAgICAgICAgZm9yICggdmFyIGogPSAwOyBqIDwgbW9ycGhOb3Jt
YWxzTGVuZ3RoOyBqICsrICkgeworICAgICAgICAgICAgICAgIHZhciBncm91cCA9IGdyb3Vwc1sg
aSBdOworICAgICAgICAgICAgICAgIHRoaXMuYWRkR3JvdXAoIGdyb3VwLnN0YXJ0LCBncm91cC5j
b3VudCwgZ3JvdXAubWF0ZXJpYWxJbmRleCApOwogCi0gICAgICAgICAgICAgICAgICAgIHZhciBt
b3JwaE5vcm1hbCA9IG1vcnBoTm9ybWFsc1sgaiBdLnZlcnRleE5vcm1hbHNbIGkgXTsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBtb3JwaFRhcmdldHNOb3JtYWxbIGogXS5w
dXNoKCBtb3JwaE5vcm1hbC5hLCBtb3JwaE5vcm1hbC5iLCBtb3JwaE5vcm1hbC5jICk7CisgICAg
ICAgICAgICAvLyBib3VuZGluZyBib3gKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZhciBib3VuZGluZ0JveCA9IHNvdXJjZS5ib3VuZGluZ0JveDsKIAotICAgICAgICAgICAgICAg
IC8vIHNraW5zCisgICAgICAgICAgICBpZiAoIGJvdW5kaW5nQm94ICE9PSBudWxsICkgewogCi0g
ICAgICAgICAgICAgICAgaWYgKCBoYXNTa2luSW5kaWNlcyApIHsKKyAgICAgICAgICAgICAgICB0
aGlzLmJvdW5kaW5nQm94ID0gYm91bmRpbmdCb3guY2xvbmUoKTsKIAotICAgICAgICAgICAgICAg
ICAgICB0aGlzLnNraW5JbmRpY2VzLnB1c2goIHNraW5JbmRpY2VzWyBmYWNlLmEgXSwgc2tpbklu
ZGljZXNbIGZhY2UuYiBdLCBza2luSW5kaWNlc1sgZmFjZS5jIF0gKTsKKyAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIGJvdW5kaW5nIHNwaGVyZQogCi0g
ICAgICAgICAgICAgICAgaWYgKCBoYXNTa2luV2VpZ2h0cyApIHsKKyAgICAgICAgICAgIHZhciBi
b3VuZGluZ1NwaGVyZSA9IHNvdXJjZS5ib3VuZGluZ1NwaGVyZTsKIAotICAgICAgICAgICAgICAg
ICAgICB0aGlzLnNraW5XZWlnaHRzLnB1c2goIHNraW5XZWlnaHRzWyBmYWNlLmEgXSwgc2tpbldl
aWdodHNbIGZhY2UuYiBdLCBza2luV2VpZ2h0c1sgZmFjZS5jIF0gKTsKKyAgICAgICAgICAgIGlm
ICggYm91bmRpbmdTcGhlcmUgIT09IG51bGwgKSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgdGhpcy5ib3VuZGluZ1NwaGVyZSA9IGJvdW5kaW5nU3BoZXJlLmNsb25lKCk7
CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdGhpcy5jb21wdXRlR3JvdXBzKCBnZW9t
ZXRyeSApOworICAgICAgICAgICAgLy8gZHJhdyByYW5nZQogCi0gICAgICAgICAgICB0aGlzLnZl
cnRpY2VzTmVlZFVwZGF0ZSA9IGdlb21ldHJ5LnZlcnRpY2VzTmVlZFVwZGF0ZTsKLSAgICAgICAg
ICAgIHRoaXMubm9ybWFsc05lZWRVcGRhdGUgPSBnZW9tZXRyeS5ub3JtYWxzTmVlZFVwZGF0ZTsK
LSAgICAgICAgICAgIHRoaXMuY29sb3JzTmVlZFVwZGF0ZSA9IGdlb21ldHJ5LmNvbG9yc05lZWRV
cGRhdGU7Ci0gICAgICAgICAgICB0aGlzLnV2c05lZWRVcGRhdGUgPSBnZW9tZXRyeS51dnNOZWVk
VXBkYXRlOwotICAgICAgICAgICAgdGhpcy5ncm91cHNOZWVkVXBkYXRlID0gZ2VvbWV0cnkuZ3Jv
dXBzTmVlZFVwZGF0ZTsKKyAgICAgICAgICAgIHRoaXMuZHJhd1JhbmdlLnN0YXJ0ID0gc291cmNl
LmRyYXdSYW5nZS5zdGFydDsKKyAgICAgICAgICAgIHRoaXMuZHJhd1JhbmdlLmNvdW50ID0gc291
cmNlLmRyYXdSYW5nZS5jb3VudDsKKworICAgICAgICAgICAgLy8gdXNlciBkYXRhCisKKyAgICAg
ICAgICAgIHRoaXMudXNlckRhdGEgPSBzb3VyY2UudXNlckRhdGE7CiAKICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwogCisgICAgICAgIH0sCisKKyAgICAgICAgZGlzcG9zZTogZnVuY3Rpb24gKCkg
eworCisgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIHsgdHlwZTogJ2Rpc3Bvc2UnIH0g
KTsKKwogICAgICAgICB9CiAKICAgICB9ICk7CiAKICAgICAvKioKICAgICAgKiBAYXV0aG9yIG1y
ZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRw
Oi8vYWx0ZXJlZHF1YWxpYS5jb20vCisgICAgICogQGF1dGhvciBtaWthZWwgZW10aW5nZXIgLyBo
dHRwOi8vZ29tby5zZS8KKyAgICAgKiBAYXV0aG9yIGpvbm9icjEgLyBodHRwOi8vam9ub2JyMS5j
b20vCiAgICAgICovCiAKLSAgICBmdW5jdGlvbiBhcnJheU1heCggYXJyYXkgKSB7CisgICAgZnVu
Y3Rpb24gTWVzaCggZ2VvbWV0cnksIG1hdGVyaWFsICkgewogCi0gICAgICAgIGlmICggYXJyYXku
bGVuZ3RoID09PSAwICkgcmV0dXJuIC0gSW5maW5pdHk7Ci0KLSAgICAgICAgdmFyIG1heCA9IGFy
cmF5WyAwIF07CisgICAgICAgIE9iamVjdDNELmNhbGwoIHRoaXMgKTsKIAotICAgICAgICBmb3Ig
KCB2YXIgaSA9IDEsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyArKyBpICkgeworICAgICAgICB0
aGlzLnR5cGUgPSAnTWVzaCc7CiAKLSAgICAgICAgICAgIGlmICggYXJyYXlbIGkgXSA+IG1heCAp
IG1heCA9IGFycmF5WyBpIF07CisgICAgICAgIHRoaXMuZ2VvbWV0cnkgPSBnZW9tZXRyeSAhPT0g
dW5kZWZpbmVkID8gZ2VvbWV0cnkgOiBuZXcgQnVmZmVyR2VvbWV0cnkoKTsKKyAgICAgICAgdGhp
cy5tYXRlcmlhbCA9IG1hdGVyaWFsICE9PSB1bmRlZmluZWQgPyBtYXRlcmlhbCA6IG5ldyBNZXNo
QmFzaWNNYXRlcmlhbCggeyBjb2xvcjogTWF0aC5yYW5kb20oKSAqIDB4ZmZmZmZmIH0gKTsKIAot
ICAgICAgICB9CisgICAgICAgIHRoaXMuZHJhd01vZGUgPSBUcmlhbmdsZXNEcmF3TW9kZTsKIAot
ICAgICAgICByZXR1cm4gbWF4OworICAgICAgICB0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpOwog
CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRl
cmVkcXVhbGlhLmNvbS8KLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29t
LwotICAgICAqLworICAgIE1lc2gucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNy
ZWF0ZSggT2JqZWN0M0QucHJvdG90eXBlICksIHsKIAotICAgIHZhciBidWZmZXJHZW9tZXRyeUlk
ID0gMTsgLy8gQnVmZmVyR2VvbWV0cnkgdXNlcyBvZGQgbnVtYmVycyBhcyBJZAorICAgICAgICBj
b25zdHJ1Y3RvcjogTWVzaCwKIAotICAgIGZ1bmN0aW9uIEJ1ZmZlckdlb21ldHJ5KCkgeworICAg
ICAgICBpc01lc2g6IHRydWUsCiAKLSAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlz
LCAnaWQnLCB7IHZhbHVlOiBidWZmZXJHZW9tZXRyeUlkICs9IDIgfSApOworICAgICAgICBzZXRE
cmF3TW9kZTogZnVuY3Rpb24gKCB2YWx1ZSApIHsKIAotICAgICAgICB0aGlzLnV1aWQgPSBfTWF0
aC5nZW5lcmF0ZVVVSUQoKTsKKyAgICAgICAgICAgIHRoaXMuZHJhd01vZGUgPSB2YWx1ZTsKIAot
ICAgICAgICB0aGlzLm5hbWUgPSAnJzsKLSAgICAgICAgdGhpcy50eXBlID0gJ0J1ZmZlckdlb21l
dHJ5JzsKKyAgICAgICAgfSwKIAotICAgICAgICB0aGlzLmluZGV4ID0gbnVsbDsKLSAgICAgICAg
dGhpcy5hdHRyaWJ1dGVzID0ge307CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkg
ewogCi0gICAgICAgIHRoaXMubW9ycGhBdHRyaWJ1dGVzID0ge307CisgICAgICAgICAgICBPYmpl
Y3QzRC5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKIAotICAgICAgICB0aGlz
Lmdyb3VwcyA9IFtdOworICAgICAgICAgICAgdGhpcy5kcmF3TW9kZSA9IHNvdXJjZS5kcmF3TW9k
ZTsKIAotICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbnVsbDsKLSAgICAgICAgdGhpcy5ib3Vu
ZGluZ1NwaGVyZSA9IG51bGw7CisgICAgICAgICAgICBpZiAoIHNvdXJjZS5tb3JwaFRhcmdldElu
Zmx1ZW5jZXMgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICB0aGlzLmRyYXdSYW5nZSA9IHsg
c3RhcnQ6IDAsIGNvdW50OiBJbmZpbml0eSB9OworICAgICAgICAgICAgICAgIHRoaXMubW9ycGhU
YXJnZXRJbmZsdWVuY2VzID0gc291cmNlLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5zbGljZSgpOwog
Ci0gICAgICAgIHRoaXMudXNlckRhdGEgPSB7fTsKKyAgICAgICAgICAgIH0KIAotICAgIH0KKyAg
ICAgICAgICAgIGlmICggc291cmNlLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSAhPT0gdW5kZWZpbmVk
ICkgewogCi0gICAgQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2Jq
ZWN0LmNyZWF0ZSggRXZlbnREaXNwYXRjaGVyLnByb3RvdHlwZSApLCB7CisgICAgICAgICAgICAg
ICAgdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnkgPSBPYmplY3QuYXNzaWduKCB7fSwgc291cmNl
Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeSApOwogCi0gICAgICAgIGNvbnN0cnVjdG9yOiBCdWZmZXJH
ZW9tZXRyeSwKKyAgICAgICAgICAgIH0KIAotICAgICAgICBpc0J1ZmZlckdlb21ldHJ5OiB0cnVl
LAorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgZ2V0SW5kZXg6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7CisgICAg
ICAgIHVwZGF0ZU1vcnBoVGFyZ2V0czogZnVuY3Rpb24gKCkgewogCi0gICAgICAgIH0sCisgICAg
ICAgICAgICB2YXIgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5OworICAgICAgICAgICAgdmFyIG0s
IG1sLCBuYW1lOwogCi0gICAgICAgIHNldEluZGV4OiBmdW5jdGlvbiAoIGluZGV4ICkgeworICAg
ICAgICAgICAgaWYgKCBnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5ICkgewogCi0gICAgICAgICAg
ICBpZiAoIEFycmF5LmlzQXJyYXkoIGluZGV4ICkgKSB7CisgICAgICAgICAgICAgICAgdmFyIG1v
cnBoQXR0cmlidXRlcyA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlczsKKyAgICAgICAgICAgICAg
ICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKCBtb3JwaEF0dHJpYnV0ZXMgKTsKIAotICAgICAgICAg
ICAgICAgIHRoaXMuaW5kZXggPSBuZXcgKCBhcnJheU1heCggaW5kZXggKSA+IDY1NTM1ID8gVWlu
dDMyQnVmZmVyQXR0cmlidXRlIDogVWludDE2QnVmZmVyQXR0cmlidXRlICkoIGluZGV4LCAxICk7
CisgICAgICAgICAgICAgICAgaWYgKCBrZXlzLmxlbmd0aCA+IDAgKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIG1vcnBoQXR0cmlidXRlID0gbW9ycGhBdHRyaWJ1dGVzWyBrZXlzWyAwIF0g
XTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIG1vcnBoQXR0cmlidXRlICE9PSB1bmRlZmlu
ZWQgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9ycGhUYXJnZXRJbmZsdWVu
Y2VzID0gW107CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0RGljdGlv
bmFyeSA9IHt9OworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBtID0gMCwgbWwgPSBt
b3JwaEF0dHJpYnV0ZS5sZW5ndGg7IG0gPCBtbDsgbSArKyApIHsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWUgPSBtb3JwaEF0dHJpYnV0ZVsgbSBdLm5hbWUgfHwgU3RyaW5nKCBt
ICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0SW5mbHVl
bmNlcy5wdXNoKCAwICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3JwaFRh
cmdldERpY3Rpb25hcnlbIG5hbWUgXSA9IG07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7CisgICAg
ICAgICAgICAgICAgdmFyIG1vcnBoVGFyZ2V0cyA9IGdlb21ldHJ5Lm1vcnBoVGFyZ2V0czsKKwor
ICAgICAgICAgICAgICAgIGlmICggbW9ycGhUYXJnZXRzICE9PSB1bmRlZmluZWQgJiYgbW9ycGhU
YXJnZXRzLmxlbmd0aCA+IDAgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJv
ciggJ1RIUkVFLk1lc2gudXBkYXRlTW9ycGhUYXJnZXRzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRI
UkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4nICk7CisKKyAg
ICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIH0KIAogICAgICAgICB9LAogCi0gICAgICAg
IGFkZEF0dHJpYnV0ZTogZnVuY3Rpb24gKCBuYW1lLCBhdHRyaWJ1dGUgKSB7CisgICAgICAgIHJh
eWNhc3Q6ICggZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICBpZiAoICEgKCBhdHRyaWJ1dGUg
JiYgYXR0cmlidXRlLmlzQnVmZmVyQXR0cmlidXRlICkgJiYgISAoIGF0dHJpYnV0ZSAmJiBhdHRy
aWJ1dGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSApICkgeworICAgICAgICAgICAgdmFy
IGludmVyc2VNYXRyaXggPSBuZXcgTWF0cml4NCgpOworICAgICAgICAgICAgdmFyIHJheSA9IG5l
dyBSYXkoKTsKKyAgICAgICAgICAgIHZhciBzcGhlcmUgPSBuZXcgU3BoZXJlKCk7CiAKLSAgICAg
ICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJp
YnV0ZSgpIG5vdyBleHBlY3RzICggbmFtZSwgYXR0cmlidXRlICkuJyApOworICAgICAgICAgICAg
dmFyIHZBID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciB2QiA9IG5ldyBWZWN0b3Iz
KCk7CisgICAgICAgICAgICB2YXIgdkMgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuYWRkQXR0cmlidXRlKCBuYW1lLCBuZXcgQnVmZmVyQXR0cmlidXRlKCBh
cmd1bWVudHNbIDEgXSwgYXJndW1lbnRzWyAyIF0gKSApOworICAgICAgICAgICAgdmFyIHRlbXBB
ID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciB0ZW1wQiA9IG5ldyBWZWN0b3IzKCk7
CisgICAgICAgICAgICB2YXIgdGVtcEMgPSBuZXcgVmVjdG9yMygpOworCisgICAgICAgICAgICB2
YXIgbW9ycGhBID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciBtb3JwaEIgPSBuZXcg
VmVjdG9yMygpOworICAgICAgICAgICAgdmFyIG1vcnBoQyA9IG5ldyBWZWN0b3IzKCk7CisKKyAg
ICAgICAgICAgIHZhciB1dkEgPSBuZXcgVmVjdG9yMigpOworICAgICAgICAgICAgdmFyIHV2QiA9
IG5ldyBWZWN0b3IyKCk7CisgICAgICAgICAgICB2YXIgdXZDID0gbmV3IFZlY3RvcjIoKTsKKwor
ICAgICAgICAgICAgdmFyIGludGVyc2VjdGlvblBvaW50ID0gbmV3IFZlY3RvcjMoKTsKKyAgICAg
ICAgICAgIHZhciBpbnRlcnNlY3Rpb25Qb2ludFdvcmxkID0gbmV3IFZlY3RvcjMoKTsKKworICAg
ICAgICAgICAgZnVuY3Rpb24gY2hlY2tJbnRlcnNlY3Rpb24oIG9iamVjdCwgbWF0ZXJpYWwsIHJh
eWNhc3RlciwgcmF5LCBwQSwgcEIsIHBDLCBwb2ludCApIHsKKworICAgICAgICAgICAgICAgIHZh
ciBpbnRlcnNlY3Q7CisKKyAgICAgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLnNpZGUgPT09IEJh
Y2tTaWRlICkgeworCisgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdCA9IHJheS5pbnRlcnNl
Y3RUcmlhbmdsZSggcEMsIHBCLCBwQSwgdHJ1ZSwgcG9pbnQgKTsKKworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0ID0gcmF5LmludGVyc2Vj
dFRyaWFuZ2xlKCBwQSwgcEIsIHBDLCBtYXRlcmlhbC5zaWRlICE9PSBEb3VibGVTaWRlLCBwb2lu
dCApOworCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCBpbnRlcnNl
Y3QgPT09IG51bGwgKSByZXR1cm4gbnVsbDsKKworICAgICAgICAgICAgICAgIGludGVyc2VjdGlv
blBvaW50V29ybGQuY29weSggcG9pbnQgKTsKKyAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25Q
b2ludFdvcmxkLmFwcGx5TWF0cml4NCggb2JqZWN0Lm1hdHJpeFdvcmxkICk7CisKKyAgICAgICAg
ICAgICAgICB2YXIgZGlzdGFuY2UgPSByYXljYXN0ZXIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKCBp
bnRlcnNlY3Rpb25Qb2ludFdvcmxkICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIGRpc3RhbmNl
IDwgcmF5Y2FzdGVyLm5lYXIgfHwgZGlzdGFuY2UgPiByYXljYXN0ZXIuZmFyICkgcmV0dXJuIG51
bGw7CisKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICBkaXN0
YW5jZTogZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgIHBvaW50OiBpbnRlcnNlY3Rpb25Q
b2ludFdvcmxkLmNsb25lKCksCisgICAgICAgICAgICAgICAgICAgIG9iamVjdDogb2JqZWN0Cisg
ICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIG5h
bWUgPT09ICdpbmRleCcgKSB7CisgICAgICAgICAgICBmdW5jdGlvbiBjaGVja0J1ZmZlckdlb21l
dHJ5SW50ZXJzZWN0aW9uKCBvYmplY3QsIG1hdGVyaWFsLCByYXljYXN0ZXIsIHJheSwgcG9zaXRp
b24sIG1vcnBoUG9zaXRpb24sIHV2LCBhLCBiLCBjICkgewogCi0gICAgICAgICAgICAgICAgY29u
c29sZS53YXJuKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnkuYWRkQXR0cmlidXRlOiBVc2UgLnNldElu
ZGV4KCkgZm9yIGluZGV4IGF0dHJpYnV0ZS4nICk7Ci0gICAgICAgICAgICAgICAgdGhpcy5zZXRJ
bmRleCggYXR0cmlidXRlICk7CisgICAgICAgICAgICAgICAgdkEuZnJvbUJ1ZmZlckF0dHJpYnV0
ZSggcG9zaXRpb24sIGEgKTsKKyAgICAgICAgICAgICAgICB2Qi5mcm9tQnVmZmVyQXR0cmlidXRl
KCBwb3NpdGlvbiwgYiApOworICAgICAgICAgICAgICAgIHZDLmZyb21CdWZmZXJBdHRyaWJ1dGUo
IHBvc2l0aW9uLCBjICk7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAg
ICAgICAgICB2YXIgbW9ycGhJbmZsdWVuY2VzID0gb2JqZWN0Lm1vcnBoVGFyZ2V0SW5mbHVlbmNl
czsKKworICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWwubW9ycGhUYXJnZXRzICYmIG1vcnBo
UG9zaXRpb24gJiYgbW9ycGhJbmZsdWVuY2VzICkgeworCisgICAgICAgICAgICAgICAgICAgIG1v
cnBoQS5zZXQoIDAsIDAsIDAgKTsKKyAgICAgICAgICAgICAgICAgICAgbW9ycGhCLnNldCggMCwg
MCwgMCApOworICAgICAgICAgICAgICAgICAgICBtb3JwaEMuc2V0KCAwLCAwLCAwICk7CisKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IG1vcnBoUG9zaXRpb24ubGVu
Z3RoOyBpIDwgaWw7IGkgKysgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmZs
dWVuY2UgPSBtb3JwaEluZmx1ZW5jZXNbIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBtb3JwaEF0dHJpYnV0ZSA9IG1vcnBoUG9zaXRpb25bIGkgXTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBpbmZsdWVuY2UgPT09IDAgKSBjb250aW51ZTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgdGVtcEEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggbW9ycGhBdHRyaWJ1dGUsIGEg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBCLmZyb21CdWZmZXJBdHRyaWJ1dGUoIG1v
cnBoQXR0cmlidXRlLCBiICk7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQy5mcm9tQnVm
ZmVyQXR0cmlidXRlKCBtb3JwaEF0dHJpYnV0ZSwgYyApOworCisgICAgICAgICAgICAgICAgICAg
ICAgICBtb3JwaEEuYWRkU2NhbGVkVmVjdG9yKCB0ZW1wQS5zdWIoIHZBICksIGluZmx1ZW5jZSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgbW9ycGhCLmFkZFNjYWxlZFZlY3RvciggdGVtcEIu
c3ViKCB2QiApLCBpbmZsdWVuY2UgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBoQy5h
ZGRTY2FsZWRWZWN0b3IoIHRlbXBDLnN1YiggdkMgKSwgaW5mbHVlbmNlICk7CisKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHZBLmFkZCggbW9ycGhBICk7Cisg
ICAgICAgICAgICAgICAgICAgIHZCLmFkZCggbW9ycGhCICk7CisgICAgICAgICAgICAgICAgICAg
IHZDLmFkZCggbW9ycGhDICk7CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICB2YXIgaW50ZXJzZWN0aW9uID0gY2hlY2tJbnRlcnNlY3Rpb24oIG9iamVjdCwgbWF0ZXJpYWws
IHJheWNhc3RlciwgcmF5LCB2QSwgdkIsIHZDLCBpbnRlcnNlY3Rpb25Qb2ludCApOworCisgICAg
ICAgICAgICAgICAgaWYgKCBpbnRlcnNlY3Rpb24gKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCB1diApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgdXZBLmZyb21CdWZmZXJBdHRy
aWJ1dGUoIHV2LCBhICk7CisgICAgICAgICAgICAgICAgICAgICAgICB1dkIuZnJvbUJ1ZmZlckF0
dHJpYnV0ZSggdXYsIGIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHV2Qy5mcm9tQnVmZmVy
QXR0cmlidXRlKCB1diwgYyApOworCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rp
b24udXYgPSBUcmlhbmdsZS5nZXRVViggaW50ZXJzZWN0aW9uUG9pbnQsIHZBLCB2QiwgdkMsIHV2
QSwgdXZCLCB1dkMsIG5ldyBWZWN0b3IyKCkgKTsKKworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGZhY2UgPSBuZXcgRmFjZTMoIGEsIGIsIGMgKTsKKyAg
ICAgICAgICAgICAgICAgICAgVHJpYW5nbGUuZ2V0Tm9ybWFsKCB2QSwgdkIsIHZDLCBmYWNlLm5v
cm1hbCApOworCisgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbi5mYWNlID0gZmFjZTsK
KworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcnNlY3Rp
b247CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzWyBuYW1l
IF0gPSBhdHRyaWJ1dGU7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcmF5Y2FzdCggcmF5
Y2FzdGVyLCBpbnRlcnNlY3RzICkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5OworICAgICAgICAgICAgICAg
IHZhciBtYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7CisgICAgICAgICAgICAgICAgdmFyIG1hdHJp
eFdvcmxkID0gdGhpcy5tYXRyaXhXb3JsZDsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAg
IGlmICggbWF0ZXJpYWwgPT09IHVuZGVmaW5lZCApIHJldHVybjsKIAotICAgICAgICBnZXRBdHRy
aWJ1dGU6IGZ1bmN0aW9uICggbmFtZSApIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVja2luZyBi
b3VuZGluZ1NwaGVyZSBkaXN0YW5jZSB0byByYXkKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
YXR0cmlidXRlc1sgbmFtZSBdOworICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuYm91bmRp
bmdTcGhlcmUgPT09IG51bGwgKSBnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTsKIAot
ICAgICAgICB9LAorICAgICAgICAgICAgICAgIHNwaGVyZS5jb3B5KCBnZW9tZXRyeS5ib3VuZGlu
Z1NwaGVyZSApOworICAgICAgICAgICAgICAgIHNwaGVyZS5hcHBseU1hdHJpeDQoIG1hdHJpeFdv
cmxkICk7CiAKLSAgICAgICAgcmVtb3ZlQXR0cmlidXRlOiBmdW5jdGlvbiAoIG5hbWUgKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCByYXljYXN0ZXIucmF5LmludGVyc2VjdHNTcGhlcmUoIHNwaGVy
ZSApID09PSBmYWxzZSApIHJldHVybjsKIAotICAgICAgICAgICAgZGVsZXRlIHRoaXMuYXR0cmli
dXRlc1sgbmFtZSBdOworICAgICAgICAgICAgICAgIC8vCiAKLSAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICAgICAgICAgIGludmVyc2VNYXRyaXguZ2V0SW52ZXJzZSggbWF0cml4V29y
bGQgKTsKKyAgICAgICAgICAgICAgICByYXkuY29weSggcmF5Y2FzdGVyLnJheSApLmFwcGx5TWF0
cml4NCggaW52ZXJzZU1hdHJpeCApOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgLy8g
Q2hlY2sgYm91bmRpbmdCb3ggYmVmb3JlIGNvbnRpbnVpbmcKIAotICAgICAgICBhZGRHcm91cDog
ZnVuY3Rpb24gKCBzdGFydCwgY291bnQsIG1hdGVyaWFsSW5kZXggKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCBnZW9tZXRyeS5ib3VuZGluZ0JveCAhPT0gbnVsbCApIHsKIAotICAgICAgICAgICAg
dGhpcy5ncm91cHMucHVzaCggeworICAgICAgICAgICAgICAgICAgICBpZiAoIHJheS5pbnRlcnNl
Y3RzQm94KCBnZW9tZXRyeS5ib3VuZGluZ0JveCApID09PSBmYWxzZSApIHJldHVybjsKIAotICAg
ICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAgICAgICAgICBjb3VudDogY291bnQs
Ci0gICAgICAgICAgICAgICAgbWF0ZXJpYWxJbmRleDogbWF0ZXJpYWxJbmRleCAhPT0gdW5kZWZp
bmVkID8gbWF0ZXJpYWxJbmRleCA6IDAKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IH0gKTsKKyAgICAgICAgICAgICAgICB2YXIgaW50ZXJzZWN0aW9uOwogCi0gICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5ICkgewogCi0gICAg
ICAgIGNsZWFyR3JvdXBzOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBh
LCBiLCBjOworICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBnZW9tZXRyeS5pbmRleDsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5w
b3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1vcnBoUG9zaXRpb24gPSBnZW9tZXRy
eS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIHZhciB1diA9
IGdlb21ldHJ5LmF0dHJpYnV0ZXMudXY7CisgICAgICAgICAgICAgICAgICAgIHZhciBncm91cHMg
PSBnZW9tZXRyeS5ncm91cHM7CisgICAgICAgICAgICAgICAgICAgIHZhciBkcmF3UmFuZ2UgPSBn
ZW9tZXRyeS5kcmF3UmFuZ2U7CisgICAgICAgICAgICAgICAgICAgIHZhciBpLCBqLCBpbCwgamw7
CisgICAgICAgICAgICAgICAgICAgIHZhciBncm91cCwgZ3JvdXBNYXRlcmlhbDsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHN0YXJ0LCBlbmQ7CiAKLSAgICAgICAgICAgIHRoaXMuZ3JvdXBzID0g
W107CisgICAgICAgICAgICAgICAgICAgIGlmICggaW5kZXggIT09IG51bGwgKSB7CiAKLSAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZGV4ZWQgYnVmZmVyIGdlb21ldHJ5
CiAKLSAgICAgICAgc2V0RHJhd1JhbmdlOiBmdW5jdGlvbiAoIHN0YXJ0LCBjb3VudCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggQXJyYXkuaXNBcnJheSggbWF0ZXJpYWwgKSApIHsK
IAotICAgICAgICAgICAgdGhpcy5kcmF3UmFuZ2Uuc3RhcnQgPSBzdGFydDsKLSAgICAgICAgICAg
IHRoaXMuZHJhd1JhbmdlLmNvdW50ID0gY291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggaSA9IDAsIGlsID0gZ3JvdXBzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewogCi0g
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gZ3JvdXBz
WyBpIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwTWF0ZXJpYWwgPSBt
YXRlcmlhbFsgZ3JvdXAubWF0ZXJpYWxJbmRleCBdOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0ID0gTWF0aC5tYXgoIGdyb3VwLnN0YXJ0LCBkcmF3UmFuZ2Uuc3RhcnQg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gTWF0aC5taW4oICggZ3Jv
dXAuc3RhcnQgKyBncm91cC5jb3VudCApLCAoIGRyYXdSYW5nZS5zdGFydCArIGRyYXdSYW5nZS5j
b3VudCApICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaiA9IHN0
YXJ0LCBqbCA9IGVuZDsgaiA8IGpsOyBqICs9IDMgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGEgPSBpbmRleC5nZXRYKCBqICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiID0gaW5kZXguZ2V0WCggaiArIDEgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGMgPSBpbmRleC5nZXRYKCBqICsgMiApOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24gPSBjaGVja0J1ZmZlckdl
b21ldHJ5SW50ZXJzZWN0aW9uKCB0aGlzLCBncm91cE1hdGVyaWFsLCByYXljYXN0ZXIsIHJheSwg
cG9zaXRpb24sIG1vcnBoUG9zaXRpb24sIHV2LCBhLCBiLCBjICk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggaW50ZXJzZWN0aW9uICkgeworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uLmZhY2VJbmRleCA9IE1h
dGguZmxvb3IoIGogLyAzICk7IC8vIHRyaWFuZ2xlIG51bWJlciBpbiBpbmRleGVkIGJ1ZmZlciBz
ZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNl
Y3Rpb24uZmFjZS5tYXRlcmlhbEluZGV4ID0gZ3JvdXAubWF0ZXJpYWxJbmRleDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3RzLnB1c2goIGludGVyc2Vj
dGlvbiApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhcnQgPSBNYXRoLm1heCggMCwgZHJhd1JhbmdlLnN0YXJ0ICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gTWF0aC5taW4oIGluZGV4LmNvdW50LCAo
IGRyYXdSYW5nZS5zdGFydCArIGRyYXdSYW5nZS5jb3VudCApICk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKCBpID0gc3RhcnQsIGlsID0gZW5kOyBpIDwgaWw7IGkgKz0gMyAp
IHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gaW5kZXguZ2V0WCggaSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gaW5kZXguZ2V0WCggaSArIDEg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGluZGV4LmdldFgoIGkgKyAy
ICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uID0gY2hl
Y2tCdWZmZXJHZW9tZXRyeUludGVyc2VjdGlvbiggdGhpcywgbWF0ZXJpYWwsIHJheWNhc3Rlciwg
cmF5LCBwb3NpdGlvbiwgbW9ycGhQb3NpdGlvbiwgdXYsIGEsIGIsIGMgKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGludGVyc2VjdGlvbiApIHsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uLmZhY2VJbmRleCA9IE1hdGgu
Zmxvb3IoIGkgLyAzICk7IC8vIHRyaWFuZ2xlIG51bWJlciBpbiBpbmRleGVkIGJ1ZmZlciBzZW1h
bnRpY3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdHMucHVz
aCggaW50ZXJzZWN0aW9uICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggcG9zaXRpb24gIT09IHVuZGVm
aW5lZCApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9uLWluZGV4ZWQgYnVmZmVy
IGdlb21ldHJ5CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggQXJyYXkuaXNBcnJheSgg
bWF0ZXJpYWwgKSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAw
LCBpbCA9IGdyb3Vwcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBncm91cCA9IGdyb3Vwc1sgaSBdOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBncm91cE1hdGVyaWFsID0gbWF0ZXJpYWxbIGdyb3VwLm1hdGVyaWFsSW5k
ZXggXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IE1hdGgubWF4
KCBncm91cC5zdGFydCwgZHJhd1JhbmdlLnN0YXJ0ICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZCA9IE1hdGgubWluKCAoIGdyb3VwLnN0YXJ0ICsgZ3JvdXAuY291bnQgKSwg
KCBkcmF3UmFuZ2Uuc3RhcnQgKyBkcmF3UmFuZ2UuY291bnQgKSApOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIGogPSBzdGFydCwgamwgPSBlbmQ7IGogPCBqbDsgaiAr
PSAzICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gajsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBqICsgMTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBqICsgMjsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uID0gY2hlY2tCdWZmZXJHZW9tZXRyeUludGVy
c2VjdGlvbiggdGhpcywgZ3JvdXBNYXRlcmlhbCwgcmF5Y2FzdGVyLCByYXksIHBvc2l0aW9uLCBt
b3JwaFBvc2l0aW9uLCB1diwgYSwgYiwgYyApOworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGludGVyc2VjdGlvbiApIHsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbi5mYWNlSW5kZXggPSBNYXRoLmZsb29yKCBq
IC8gMyApOyAvLyB0cmlhbmdsZSBudW1iZXIgaW4gbm9uLWluZGV4ZWQgYnVmZmVyIHNlbWFudGlj
cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbi5m
YWNlLm1hdGVyaWFsSW5kZXggPSBncm91cC5tYXRlcmlhbEluZGV4OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdHMucHVzaCggaW50ZXJzZWN0aW9uICk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGFydCA9IE1hdGgubWF4KCAwLCBkcmF3UmFuZ2Uuc3RhcnQgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbmQgPSBNYXRoLm1pbiggcG9zaXRpb24uY291bnQsICggZHJh
d1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50ICkgKTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoIGkgPSBzdGFydCwgaWwgPSBlbmQ7IGkgPCBpbDsgaSArPSAzICkgewor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiID0gaSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGMgPSBpICsgMjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNl
Y3Rpb24gPSBjaGVja0J1ZmZlckdlb21ldHJ5SW50ZXJzZWN0aW9uKCB0aGlzLCBtYXRlcmlhbCwg
cmF5Y2FzdGVyLCByYXksIHBvc2l0aW9uLCBtb3JwaFBvc2l0aW9uLCB1diwgYSwgYiwgYyApOwor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW50ZXJzZWN0aW9uICkgewor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24uZmFjZUlu
ZGV4ID0gTWF0aC5mbG9vciggaSAvIDMgKTsgLy8gdHJpYW5nbGUgbnVtYmVyIGluIG5vbi1pbmRl
eGVkIGJ1ZmZlciBzZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludGVyc2VjdHMucHVzaCggaW50ZXJzZWN0aW9uICk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICggZ2VvbWV0cnkuaXNHZW9tZXRyeSApIHsKKworICAgICAgICAgICAg
ICAgICAgICB2YXIgZnZBLCBmdkIsIGZ2QzsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGlzTXVs
dGlNYXRlcmlhbCA9IEFycmF5LmlzQXJyYXkoIG1hdGVyaWFsICk7CisKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHZlcnRpY2VzID0gZ2VvbWV0cnkudmVydGljZXM7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBmYWNlcyA9IGdlb21ldHJ5LmZhY2VzOworICAgICAgICAgICAgICAgICAgICB2YXIg
dXZzOworCisgICAgICAgICAgICAgICAgICAgIHZhciBmYWNlVmVydGV4VXZzID0gZ2VvbWV0cnku
ZmFjZVZlcnRleFV2c1sgMCBdOworICAgICAgICAgICAgICAgICAgICBpZiAoIGZhY2VWZXJ0ZXhV
dnMubGVuZ3RoID4gMCApIHV2cyA9IGZhY2VWZXJ0ZXhVdnM7CisKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICggdmFyIGYgPSAwLCBmbCA9IGZhY2VzLmxlbmd0aDsgZiA8IGZsOyBmICsrICkgewor
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmFjZSA9IGZhY2VzWyBmIF07CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgZmFjZU1hdGVyaWFsID0gaXNNdWx0aU1hdGVyaWFsID8gbWF0
ZXJpYWxbIGZhY2UubWF0ZXJpYWxJbmRleCBdIDogbWF0ZXJpYWw7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggZmFjZU1hdGVyaWFsID09PSB1bmRlZmluZWQgKSBjb250aW51ZTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgZnZBID0gdmVydGljZXNbIGZhY2UuYSBdOworICAgICAg
ICAgICAgICAgICAgICAgICAgZnZCID0gdmVydGljZXNbIGZhY2UuYiBdOworICAgICAgICAgICAg
ICAgICAgICAgICAgZnZDID0gdmVydGljZXNbIGZhY2UuYyBdOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBpbnRlcnNlY3Rpb24gPSBjaGVja0ludGVyc2VjdGlvbiggdGhpcywgZmFjZU1hdGVy
aWFsLCByYXljYXN0ZXIsIHJheSwgZnZBLCBmdkIsIGZ2QywgaW50ZXJzZWN0aW9uUG9pbnQgKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbnRlcnNlY3Rpb24gKSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHV2cyAmJiB1dnNbIGYgXSApIHsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXZzX2YgPSB1dnNbIGYgXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXZBLmNvcHkoIHV2c19mWyAwIF0gKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXZCLmNvcHkoIHV2c19mWyAxIF0gKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXZDLmNvcHkoIHV2c19mWyAyIF0gKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24udXYgPSBUcmlhbmdsZS5nZXRV
ViggaW50ZXJzZWN0aW9uUG9pbnQsIGZ2QSwgZnZCLCBmdkMsIHV2QSwgdXZCLCB1dkMsIG5ldyBW
ZWN0b3IyKCkgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbi5mYWNlID0gZmFjZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24uZmFjZUluZGV4ID0gZjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnRlcnNlY3RzLnB1c2goIGludGVyc2VjdGlvbiApOworCisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB9OworCisgICAgICAgIH0oKSApLAorCisgICAgICAg
IGNsb25lOiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25z
dHJ1Y3RvciggdGhpcy5nZW9tZXRyeSwgdGhpcy5tYXRlcmlhbCApLmNvcHkoIHRoaXMgKTsKKwor
ICAgICAgICB9CisKKyAgICB9ICk7CisKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAv
IGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqIEBhdXRob3Iga2lsZSAvIGh0dHA6Ly9raWxlLnN0
cmF2YWdhbnphLm9yZy8KKyAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRx
dWFsaWEuY29tLworICAgICAqIEBhdXRob3IgbWlrYWVsIGVtdGluZ2VyIC8gaHR0cDovL2dvbW8u
c2UvCisgICAgICogQGF1dGhvciB6ejg1IC8gaHR0cDovL3d3dy5sYWI0Z2FtZXMubmV0L3p6ODUv
YmxvZworICAgICAqIEBhdXRob3IgYmhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW8KKyAgICAgKi8K
KworICAgIHZhciBnZW9tZXRyeUlkID0gMDsgLy8gR2VvbWV0cnkgdXNlcyBldmVuIG51bWJlcnMg
YXMgSWQKKworICAgIGZ1bmN0aW9uIEdlb21ldHJ5KCkgeworCisgICAgICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eSggdGhpcywgJ2lkJywgeyB2YWx1ZTogZ2VvbWV0cnlJZCArPSAyIH0gKTsKKwor
ICAgICAgICB0aGlzLnV1aWQgPSBfTWF0aC5nZW5lcmF0ZVVVSUQoKTsKKworICAgICAgICB0aGlz
Lm5hbWUgPSAnJzsKKyAgICAgICAgdGhpcy50eXBlID0gJ0dlb21ldHJ5JzsKKworICAgICAgICB0
aGlzLnZlcnRpY2VzID0gW107CisgICAgICAgIHRoaXMuY29sb3JzID0gW107CisgICAgICAgIHRo
aXMuZmFjZXMgPSBbXTsKKyAgICAgICAgdGhpcy5mYWNlVmVydGV4VXZzID0gW1tdXTsKKworICAg
ICAgICB0aGlzLm1vcnBoVGFyZ2V0cyA9IFtdOworICAgICAgICB0aGlzLm1vcnBoTm9ybWFscyA9
IFtdOworCisgICAgICAgIHRoaXMuc2tpbldlaWdodHMgPSBbXTsKKyAgICAgICAgdGhpcy5za2lu
SW5kaWNlcyA9IFtdOworCisgICAgICAgIHRoaXMubGluZURpc3RhbmNlcyA9IFtdOworCisgICAg
ICAgIHRoaXMuYm91bmRpbmdCb3ggPSBudWxsOworICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJl
ID0gbnVsbDsKKworICAgICAgICAvLyB1cGRhdGUgZmxhZ3MKKworICAgICAgICB0aGlzLmVsZW1l
bnRzTmVlZFVwZGF0ZSA9IGZhbHNlOworICAgICAgICB0aGlzLnZlcnRpY2VzTmVlZFVwZGF0ZSA9
IGZhbHNlOworICAgICAgICB0aGlzLnV2c05lZWRVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdGhp
cy5ub3JtYWxzTmVlZFVwZGF0ZSA9IGZhbHNlOworICAgICAgICB0aGlzLmNvbG9yc05lZWRVcGRh
dGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZSA9IGZhbHNl
OworICAgICAgICB0aGlzLmdyb3Vwc05lZWRVcGRhdGUgPSBmYWxzZTsKKworICAgIH0KKworICAg
IEdlb21ldHJ5LnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIEV2ZW50
RGlzcGF0Y2hlci5wcm90b3R5cGUgKSwgeworCisgICAgICAgIGNvbnN0cnVjdG9yOiBHZW9tZXRy
eSwKKworICAgICAgICBpc0dlb21ldHJ5OiB0cnVlLAogCiAgICAgICAgIGFwcGx5TWF0cml4OiBm
dW5jdGlvbiAoIG1hdHJpeCApIHsKIAotICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5h
dHRyaWJ1dGVzLnBvc2l0aW9uOworICAgICAgICAgICAgdmFyIG5vcm1hbE1hdHJpeCA9IG5ldyBN
YXRyaXgzKCkuZ2V0Tm9ybWFsTWF0cml4KCBtYXRyaXggKTsKIAotICAgICAgICAgICAgaWYgKCBw
b3NpdGlvbiAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBp
bCA9IHRoaXMudmVydGljZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAgICAgICAg
ICAgICBtYXRyaXguYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb24gKTsKLSAgICAgICAg
ICAgICAgICBwb3NpdGlvbi5uZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgdmFy
IHZlcnRleCA9IHRoaXMudmVydGljZXNbIGkgXTsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXguYXBw
bHlNYXRyaXg0KCBtYXRyaXggKTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIg
bm9ybWFsID0gdGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDsKKyAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gMCwgaWwgPSB0aGlzLmZhY2VzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewogCi0gICAgICAg
ICAgICBpZiAoIG5vcm1hbCAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIHZhciBm
YWNlID0gdGhpcy5mYWNlc1sgaSBdOworICAgICAgICAgICAgICAgIGZhY2Uubm9ybWFsLmFwcGx5
TWF0cml4Myggbm9ybWFsTWF0cml4ICkubm9ybWFsaXplKCk7CiAKLSAgICAgICAgICAgICAgICB2
YXIgbm9ybWFsTWF0cml4ID0gbmV3IE1hdHJpeDMoKS5nZXROb3JtYWxNYXRyaXgoIG1hdHJpeCAp
OworICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0gMCwgamwgPSBmYWNlLnZlcnRleE5vcm1h
bHMubGVuZ3RoOyBqIDwgamw7IGogKysgKSB7CiAKLSAgICAgICAgICAgICAgICBub3JtYWxNYXRy
aXguYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSggbm9ybWFsICk7Ci0gICAgICAgICAgICAgICAgbm9y
bWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZmFjZS52ZXJ0ZXhO
b3JtYWxzWyBqIF0uYXBwbHlNYXRyaXgzKCBub3JtYWxNYXRyaXggKS5ub3JtYWxpemUoKTsKKwor
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgfQogCkBAIC0xMTMxMyw2ICsxMTUyOSw5
IEBACiAKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgdGhpcy52ZXJ0aWNlc05lZWRVcGRh
dGUgPSB0cnVlOworICAgICAgICAgICAgdGhpcy5ub3JtYWxzTmVlZFVwZGF0ZSA9IHRydWU7CisK
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCkBAIC0xMTQyMyw2NDIgKzEx
NjQyLDc1NiBAQAogCiAgICAgICAgIH0oKSwKIAotICAgICAgICBjZW50ZXI6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgZnJvbUJ1ZmZlckdlb21ldHJ5OiBmdW5jdGlvbiAoIGdlb21ldHJ5ICkgewog
Ci0gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZh
ciBzY29wZSA9IHRoaXM7CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjZW50ZXIoKSB7
CisgICAgICAgICAgICB2YXIgaW5kaWNlcyA9IGdlb21ldHJ5LmluZGV4ICE9PSBudWxsID8gZ2Vv
bWV0cnkuaW5kZXguYXJyYXkgOiB1bmRlZmluZWQ7CisgICAgICAgICAgICB2YXIgYXR0cmlidXRl
cyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXM7CiAKLSAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVC
b3VuZGluZ0JveCgpOworICAgICAgICAgICAgdmFyIHBvc2l0aW9ucyA9IGF0dHJpYnV0ZXMucG9z
aXRpb24uYXJyYXk7CisgICAgICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFs
ICE9PSB1bmRlZmluZWQgPyBhdHRyaWJ1dGVzLm5vcm1hbC5hcnJheSA6IHVuZGVmaW5lZDsKKyAg
ICAgICAgICAgIHZhciBjb2xvcnMgPSBhdHRyaWJ1dGVzLmNvbG9yICE9PSB1bmRlZmluZWQgPyBh
dHRyaWJ1dGVzLmNvbG9yLmFycmF5IDogdW5kZWZpbmVkOworICAgICAgICAgICAgdmFyIHV2cyA9
IGF0dHJpYnV0ZXMudXYgIT09IHVuZGVmaW5lZCA/IGF0dHJpYnV0ZXMudXYuYXJyYXkgOiB1bmRl
ZmluZWQ7CisgICAgICAgICAgICB2YXIgdXZzMiA9IGF0dHJpYnV0ZXMudXYyICE9PSB1bmRlZmlu
ZWQgPyBhdHRyaWJ1dGVzLnV2Mi5hcnJheSA6IHVuZGVmaW5lZDsKIAotICAgICAgICAgICAgICAg
IHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKCBvZmZzZXQgKS5uZWdhdGUoKTsKKyAgICAgICAg
ICAgIGlmICggdXZzMiAhPT0gdW5kZWZpbmVkICkgdGhpcy5mYWNlVmVydGV4VXZzWyAxIF0gPSBb
XTsKIAotICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlKCBvZmZzZXQueCwgb2Zmc2V0Lnks
IG9mZnNldC56ICk7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBwb3NpdGlvbnMu
bGVuZ3RoOyBpICs9IDMgKSB7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgICAgICAgICBzY29wZS52ZXJ0aWNlcy5wdXNoKCBuZXcgVmVjdG9yMygpLmZyb21BcnJheSgg
cG9zaXRpb25zLCBpICkgKTsKIAotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBpZiAo
IGNvbG9ycyAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgIH0oKSwKKyAgICAgICAgICAgICAg
ICAgICAgc2NvcGUuY29sb3JzLnB1c2goIG5ldyBDb2xvcigpLmZyb21BcnJheSggY29sb3JzLCBp
ICkgKTsKIAotICAgICAgICBzZXRGcm9tT2JqZWN0OiBmdW5jdGlvbiAoIG9iamVjdCApIHsKKyAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCAnVEhSRUUuQnVm
ZmVyR2VvbWV0cnkuc2V0RnJvbU9iamVjdCgpLiBDb252ZXJ0aW5nJywgb2JqZWN0LCB0aGlzICk7
CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IG9iamVjdC5nZW9t
ZXRyeTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGFkZEZhY2UoIGEsIGIsIGMsIG1hdGVyaWFsSW5k
ZXggKSB7CiAKLSAgICAgICAgICAgIGlmICggb2JqZWN0LmlzUG9pbnRzIHx8IG9iamVjdC5pc0xp
bmUgKSB7CisgICAgICAgICAgICAgICAgdmFyIHZlcnRleENvbG9ycyA9ICggY29sb3JzID09PSB1
bmRlZmluZWQgKSA/IFtdIDogWworICAgICAgICAgICAgICAgICAgICBzY29wZS5jb2xvcnNbIGEg
XS5jbG9uZSgpLAorICAgICAgICAgICAgICAgICAgICBzY29wZS5jb2xvcnNbIGIgXS5jbG9uZSgp
LAorICAgICAgICAgICAgICAgICAgICBzY29wZS5jb2xvcnNbIGMgXS5jbG9uZSgpIF07CiAKLSAg
ICAgICAgICAgICAgICB2YXIgcG9zaXRpb25zID0gbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUo
IGdlb21ldHJ5LnZlcnRpY2VzLmxlbmd0aCAqIDMsIDMgKTsKLSAgICAgICAgICAgICAgICB2YXIg
Y29sb3JzID0gbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIGdlb21ldHJ5LmNvbG9ycy5sZW5n
dGggKiAzLCAzICk7CisgICAgICAgICAgICAgICAgdmFyIHZlcnRleE5vcm1hbHMgPSAoIG5vcm1h
bHMgPT09IHVuZGVmaW5lZCApID8gW10gOiBbCisgICAgICAgICAgICAgICAgICAgIG5ldyBWZWN0
b3IzKCkuZnJvbUFycmF5KCBub3JtYWxzLCBhICogMyApLAorICAgICAgICAgICAgICAgICAgICBu
ZXcgVmVjdG9yMygpLmZyb21BcnJheSggbm9ybWFscywgYiAqIDMgKSwKKyAgICAgICAgICAgICAg
ICAgICAgbmV3IFZlY3RvcjMoKS5mcm9tQXJyYXkoIG5vcm1hbHMsIGMgKiAzICkKKyAgICAgICAg
ICAgICAgICBdOwogCi0gICAgICAgICAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdwb3NpdGlv
bicsIHBvc2l0aW9ucy5jb3B5VmVjdG9yM3NBcnJheSggZ2VvbWV0cnkudmVydGljZXMgKSApOwot
ICAgICAgICAgICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAnY29sb3InLCBjb2xvcnMuY29weUNv
bG9yc0FycmF5KCBnZW9tZXRyeS5jb2xvcnMgKSApOworICAgICAgICAgICAgICAgIHZhciBmYWNl
ID0gbmV3IEZhY2UzKCBhLCBiLCBjLCB2ZXJ0ZXhOb3JtYWxzLCB2ZXJ0ZXhDb2xvcnMsIG1hdGVy
aWFsSW5kZXggKTsKIAotICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkubGluZURpc3RhbmNl
cyAmJiBnZW9tZXRyeS5saW5lRGlzdGFuY2VzLmxlbmd0aCA9PT0gZ2VvbWV0cnkudmVydGljZXMu
bGVuZ3RoICkgeworICAgICAgICAgICAgICAgIHNjb3BlLmZhY2VzLnB1c2goIGZhY2UgKTsKIAot
ICAgICAgICAgICAgICAgICAgICB2YXIgbGluZURpc3RhbmNlcyA9IG5ldyBGbG9hdDMyQnVmZmVy
QXR0cmlidXRlKCBnZW9tZXRyeS5saW5lRGlzdGFuY2VzLmxlbmd0aCwgMSApOworICAgICAgICAg
ICAgICAgIGlmICggdXZzICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy5hZGRBdHRyaWJ1dGUoICdsaW5lRGlzdGFuY2UnLCBsaW5lRGlzdGFuY2VzLmNvcHlBcnJh
eSggZ2VvbWV0cnkubGluZURpc3RhbmNlcyApICk7CisgICAgICAgICAgICAgICAgICAgIHNjb3Bl
LmZhY2VWZXJ0ZXhVdnNbIDAgXS5wdXNoKCBbCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcg
VmVjdG9yMigpLmZyb21BcnJheSggdXZzLCBhICogMiApLAorICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3IFZlY3RvcjIoKS5mcm9tQXJyYXkoIHV2cywgYiAqIDIgKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5ldyBWZWN0b3IyKCkuZnJvbUFycmF5KCB1dnMsIGMgKiAyICkKKyAgICAgICAg
ICAgICAgICAgICAgXSApOwogCiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
aWYgKCBnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSAhPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIHV2czIgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgICAgICB0aGlz
LmJvdW5kaW5nU3BoZXJlID0gZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUuY2xvbmUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgc2NvcGUuZmFjZVZlcnRleFV2c1sgMSBdLnB1c2goIFsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IyKCkuZnJvbUFycmF5KCB1dnMyLCBhICogMiApLAor
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFZlY3RvcjIoKS5mcm9tQXJyYXkoIHV2czIsIGIg
KiAyICksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVmVjdG9yMigpLmZyb21BcnJheSgg
dXZzMiwgYyAqIDIgKQorICAgICAgICAgICAgICAgICAgICBdICk7CiAKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmJvdW5kaW5nQm94ICE9PSBudWxs
ICkgewotCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBnZW9tZXRyeS5i
b3VuZGluZ0JveC5jbG9uZSgpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdmFyIGdyb3VwcyA9IGdlb21ldHJ5Lmdyb3VwczsKIAotICAgICAgICAgICAg
fSBlbHNlIGlmICggb2JqZWN0LmlzTWVzaCApIHsKKyAgICAgICAgICAgIGlmICggZ3JvdXBzLmxl
bmd0aCA+IDAgKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5ICYmIGdlb21ldHJ5
LmlzR2VvbWV0cnkgKSB7CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgZ3Jv
dXBzLmxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgICAgICB0aGlzLmZyb21HZW9t
ZXRyeSggZ2VvbWV0cnkgKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gZ3JvdXBz
WyBpIF07CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZhciBzdGFy
dCA9IGdyb3VwLnN0YXJ0OworICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBncm91cC5j
b3VudDsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9
IHN0YXJ0LCBqbCA9IHN0YXJ0ICsgY291bnQ7IGogPCBqbDsgaiArPSAzICkgewogCi0gICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5kaWNlcyAh
PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWRkRmFjZSggaW5kaWNlc1sgaiBdLCBpbmRpY2VzWyBqICsgMSBdLCBpbmRpY2VzWyBqICsg
MiBdLCBncm91cC5tYXRlcmlhbEluZGV4ICk7CiAKLSAgICAgICAgc2V0RnJvbVBvaW50czogZnVu
Y3Rpb24gKCBwb2ludHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0g
ICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhZGRGYWNlKCBqLCBqICsgMSwgaiArIDIsIGdyb3VwLm1hdGVyaWFsSW5kZXggKTsKIAotICAg
ICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkgKysg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB2YXIgcG9p
bnQgPSBwb2ludHNbIGkgXTsKLSAgICAgICAgICAgICAgICBwb3NpdGlvbi5wdXNoKCBwb2ludC54
LCBwb2ludC55LCBwb2ludC56IHx8IDAgKTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLmFkZEF0dHJp
YnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uLCAz
ICkgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwor
ICAgICAgICAgICAgICAgIGlmICggaW5kaWNlcyAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAg
IH0sCisgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGluZGljZXMubGVu
Z3RoOyBpICs9IDMgKSB7CiAKLSAgICAgICAgdXBkYXRlRnJvbU9iamVjdDogZnVuY3Rpb24gKCBv
YmplY3QgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRGYWNlKCBpbmRpY2VzWyBpIF0s
IGluZGljZXNbIGkgKyAxIF0sIGluZGljZXNbIGkgKyAyIF0gKTsKIAotICAgICAgICAgICAgdmFy
IGdlb21ldHJ5ID0gb2JqZWN0Lmdlb21ldHJ5OworICAgICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICggb2JqZWN0LmlzTWVzaCApIHsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogCi0gICAgICAgICAgICAgICAgdmFyIGRpcmVjdCA9IGdlb21ldHJ5Ll9fZGlyZWN0R2VvbWV0
cnk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IHBvc2l0aW9ucy5s
ZW5ndGggLyAzOyBpICs9IDMgKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmVs
ZW1lbnRzTmVlZFVwZGF0ZSA9PT0gdHJ1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZEZhY2UoIGksIGkgKyAxLCBpICsgMiApOwogCi0gICAgICAgICAgICAgICAgICAgIGRpcmVjdCA9
IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuZWxlbWVudHNOZWVkVXBk
YXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIGlmICggZGlyZWN0ID09PSB1bmRlZmluZWQgKSB7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbUdlb21ldHJ5KCBnZW9tZXRyeSApOwotCi0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgZGlyZWN0
LnZlcnRpY2VzTmVlZFVwZGF0ZSA9IGdlb21ldHJ5LnZlcnRpY2VzTmVlZFVwZGF0ZTsKLSAgICAg
ICAgICAgICAgICBkaXJlY3Qubm9ybWFsc05lZWRVcGRhdGUgPSBnZW9tZXRyeS5ub3JtYWxzTmVl
ZFVwZGF0ZTsKLSAgICAgICAgICAgICAgICBkaXJlY3QuY29sb3JzTmVlZFVwZGF0ZSA9IGdlb21l
dHJ5LmNvbG9yc05lZWRVcGRhdGU7Ci0gICAgICAgICAgICAgICAgZGlyZWN0LnV2c05lZWRVcGRh
dGUgPSBnZW9tZXRyeS51dnNOZWVkVXBkYXRlOwotICAgICAgICAgICAgICAgIGRpcmVjdC5ncm91
cHNOZWVkVXBkYXRlID0gZ2VvbWV0cnkuZ3JvdXBzTmVlZFVwZGF0ZTsKKyAgICAgICAgICAgIHRo
aXMuY29tcHV0ZUZhY2VOb3JtYWxzKCk7CiAKLSAgICAgICAgICAgICAgICBnZW9tZXRyeS52ZXJ0
aWNlc05lZWRVcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBnZW9tZXRyeS5ub3JtYWxz
TmVlZFVwZGF0ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGdlb21ldHJ5LmNvbG9yc05lZWRV
cGRhdGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBnZW9tZXRyeS51dnNOZWVkVXBkYXRlID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgZ2VvbWV0cnkuZ3JvdXBzTmVlZFVwZGF0ZSA9IGZhbHNl
OworICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5ib3VuZGluZ0JveCAhPT0gbnVsbCApIHsKIAot
ICAgICAgICAgICAgICAgIGdlb21ldHJ5ID0gZGlyZWN0OworICAgICAgICAgICAgICAgIHRoaXMu
Ym91bmRpbmdCb3ggPSBnZW9tZXRyeS5ib3VuZGluZ0JveC5jbG9uZSgpOwogCiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHZhciBhdHRyaWJ1dGU7Ci0KLSAgICAgICAgICAgIGlmICggZ2Vv
bWV0cnkudmVydGljZXNOZWVkVXBkYXRlID09PSB0cnVlICkgeworICAgICAgICAgICAgaWYgKCBn
ZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSAhPT0gbnVsbCApIHsKIAotICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjsKKyAgICAgICAgICAgICAgICB0aGlz
LmJvdW5kaW5nU3BoZXJlID0gZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUuY2xvbmUoKTsKIAotICAg
ICAgICAgICAgICAgIGlmICggYXR0cmlidXRlICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCBn
ZW9tZXRyeS52ZXJ0aWNlcyApOwotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUubmVlZHNV
cGRhdGUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICBnZW9tZXRyeS52ZXJ0aWNlc05lZWRV
cGRhdGUgPSBmYWxzZTsKKyAgICAgICAgY2VudGVyOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHZhciBvZmZzZXQgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAg
ICAgICBpZiAoIGdlb21ldHJ5Lm5vcm1hbHNOZWVkVXBkYXRlID09PSB0cnVlICkgeworICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNlbnRlcigpIHsKIAotICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZSA9IHRoaXMuYXR0cmlidXRlcy5ub3JtYWw7CisgICAgICAgICAgICAgICAgdGhpcy5jb21w
dXRlQm91bmRpbmdCb3goKTsKIAotICAgICAgICAgICAgICAgIGlmICggYXR0cmlidXRlICE9PSB1
bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIo
IG9mZnNldCApLm5lZ2F0ZSgpOwogCi0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZS5jb3B5
VmVjdG9yM3NBcnJheSggZ2VvbWV0cnkubm9ybWFscyApOwotICAgICAgICAgICAgICAgICAgICBh
dHRyaWJ1dGUubmVlZHNVcGRhdGUgPSB0cnVlOworICAgICAgICAgICAgICAgIHRoaXMudHJhbnNs
YXRlKCBvZmZzZXQueCwgb2Zmc2V0LnksIG9mZnNldC56ICk7CiAKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICBnZW9tZXRy
eS5ub3JtYWxzTmVlZFVwZGF0ZSA9IGZhbHNlOworICAgICAgICAgICAgfTsKIAotICAgICAgICAg
ICAgfQorICAgICAgICB9KCksCiAKLSAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuY29sb3JzTmVl
ZFVwZGF0ZSA9PT0gdHJ1ZSApIHsKKyAgICAgICAgbm9ybWFsaXplOiBmdW5jdGlvbiAoKSB7CiAK
LSAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgPSB0aGlzLmF0dHJpYnV0ZXMuY29sb3I7CisgICAg
ICAgICAgICB0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOwogCi0gICAgICAgICAgICAgICAg
aWYgKCBhdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHZhciBjZW50ZXIg
PSB0aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjsKKyAgICAgICAgICAgIHZhciByYWRpdXMgPSB0
aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1czsKIAotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGUuY29weUNvbG9yc0FycmF5KCBnZW9tZXRyeS5jb2xvcnMgKTsKLSAgICAgICAgICAgICAgICAg
ICAgYXR0cmlidXRlLm5lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIHZhciBzID0gcmFk
aXVzID09PSAwID8gMSA6IDEuMCAvIHJhZGl1czsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4NCgpOworICAgICAgICAgICAgbWF0cml4LnNl
dCgKKyAgICAgICAgICAgICAgICBzLCAwLCAwLCAtIHMgKiBjZW50ZXIueCwKKyAgICAgICAgICAg
ICAgICAwLCBzLCAwLCAtIHMgKiBjZW50ZXIueSwKKyAgICAgICAgICAgICAgICAwLCAwLCBzLCAt
IHMgKiBjZW50ZXIueiwKKyAgICAgICAgICAgICAgICAwLCAwLCAwLCAxCisgICAgICAgICAgICAp
OwogCi0gICAgICAgICAgICAgICAgZ2VvbWV0cnkuY29sb3JzTmVlZFVwZGF0ZSA9IGZhbHNlOwor
ICAgICAgICAgICAgdGhpcy5hcHBseU1hdHJpeCggbWF0cml4ICk7CiAKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICBpZiAoIGdlb21ldHJ5LnV2
c05lZWRVcGRhdGUgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGUg
PSB0aGlzLmF0dHJpYnV0ZXMudXY7CisgICAgICAgIGNvbXB1dGVGYWNlTm9ybWFsczogZnVuY3Rp
b24gKCkgewogCi0gICAgICAgICAgICAgICAgaWYgKCBhdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCAp
IHsKKyAgICAgICAgICAgIHZhciBjYiA9IG5ldyBWZWN0b3IzKCksIGFiID0gbmV3IFZlY3RvcjMo
KTsKIAotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoIGdl
b21ldHJ5LnV2cyApOwotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUubmVlZHNVcGRhdGUg
PSB0cnVlOworICAgICAgICAgICAgZm9yICggdmFyIGYgPSAwLCBmbCA9IHRoaXMuZmFjZXMubGVu
Z3RoOyBmIDwgZmw7IGYgKysgKSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgdmFyIGZhY2UgPSB0aGlzLmZhY2VzWyBmIF07CiAKLSAgICAgICAgICAgICAgICBnZW9tZXRy
eS51dnNOZWVkVXBkYXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdmFyIHZBID0gdGhpcy52
ZXJ0aWNlc1sgZmFjZS5hIF07CisgICAgICAgICAgICAgICAgdmFyIHZCID0gdGhpcy52ZXJ0aWNl
c1sgZmFjZS5iIF07CisgICAgICAgICAgICAgICAgdmFyIHZDID0gdGhpcy52ZXJ0aWNlc1sgZmFj
ZS5jIF07CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYi5zdWJWZWN0b3JzKCB2
QywgdkIgKTsKKyAgICAgICAgICAgICAgICBhYi5zdWJWZWN0b3JzKCB2QSwgdkIgKTsKKyAgICAg
ICAgICAgICAgICBjYi5jcm9zcyggYWIgKTsKIAotICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5s
aW5lRGlzdGFuY2VzTmVlZFVwZGF0ZSApIHsKKyAgICAgICAgICAgICAgICBjYi5ub3JtYWxpemUo
KTsKIAotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlcy5saW5lRGlz
dGFuY2U7CisgICAgICAgICAgICAgICAgZmFjZS5ub3JtYWwuY29weSggY2IgKTsKIAotICAgICAg
ICAgICAgICAgIGlmICggYXR0cmlidXRlICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlLmNvcHlBcnJheSggZ2VvbWV0cnkubGlu
ZURpc3RhbmNlcyApOwotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUubmVlZHNVcGRhdGUg
PSB0cnVlOworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICBjb21wdXRl
VmVydGV4Tm9ybWFsczogZnVuY3Rpb24gKCBhcmVhV2VpZ2h0ZWQgKSB7CiAKLSAgICAgICAgICAg
ICAgICBnZW9tZXRyeS5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZSA9IGZhbHNlOworICAgICAgICAg
ICAgaWYgKCBhcmVhV2VpZ2h0ZWQgPT09IHVuZGVmaW5lZCApIGFyZWFXZWlnaHRlZCA9IHRydWU7
CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB2LCB2bCwgZiwgZmwsIGZhY2UsIHZl
cnRpY2VzOwogCi0gICAgICAgICAgICBpZiAoIGdlb21ldHJ5Lmdyb3Vwc05lZWRVcGRhdGUgKSB7
CisgICAgICAgICAgICB2ZXJ0aWNlcyA9IG5ldyBBcnJheSggdGhpcy52ZXJ0aWNlcy5sZW5ndGgg
KTsKIAotICAgICAgICAgICAgICAgIGdlb21ldHJ5LmNvbXB1dGVHcm91cHMoIG9iamVjdC5nZW9t
ZXRyeSApOwotICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzID0gZ2VvbWV0cnkuZ3JvdXBzOwor
ICAgICAgICAgICAgZm9yICggdiA9IDAsIHZsID0gdGhpcy52ZXJ0aWNlcy5sZW5ndGg7IHYgPCB2
bDsgdiArKyApIHsKIAotICAgICAgICAgICAgICAgIGdlb21ldHJ5Lmdyb3Vwc05lZWRVcGRhdGUg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICB2ZXJ0aWNlc1sgdiBdID0gbmV3IFZlY3RvcjMoKTsK
IAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKLQotICAgICAgICB9
LAorICAgICAgICAgICAgaWYgKCBhcmVhV2VpZ2h0ZWQgKSB7CiAKLSAgICAgICAgZnJvbUdlb21l
dHJ5OiBmdW5jdGlvbiAoIGdlb21ldHJ5ICkgeworICAgICAgICAgICAgICAgIC8vIHZlcnRleCBu
b3JtYWxzIHdlaWdodGVkIGJ5IHRyaWFuZ2xlIGFyZWFzCisgICAgICAgICAgICAgICAgLy8gaHR0
cDovL3d3dy5pcXVpbGV6bGVzLm9yZy93d3cvYXJ0aWNsZXMvbm9ybWFscy9ub3JtYWxzLmh0bQog
Ci0gICAgICAgICAgICBnZW9tZXRyeS5fX2RpcmVjdEdlb21ldHJ5ID0gbmV3IERpcmVjdEdlb21l
dHJ5KCkuZnJvbUdlb21ldHJ5KCBnZW9tZXRyeSApOworICAgICAgICAgICAgICAgIHZhciB2QSwg
dkIsIHZDOworICAgICAgICAgICAgICAgIHZhciBjYiA9IG5ldyBWZWN0b3IzKCksIGFiID0gbmV3
IFZlY3RvcjMoKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbURpcmVjdEdlb21ldHJ5
KCBnZW9tZXRyeS5fX2RpcmVjdEdlb21ldHJ5ICk7CisgICAgICAgICAgICAgICAgZm9yICggZiA9
IDAsIGZsID0gdGhpcy5mYWNlcy5sZW5ndGg7IGYgPCBmbDsgZiArKyApIHsKIAotICAgICAgICB9
LAorICAgICAgICAgICAgICAgICAgICBmYWNlID0gdGhpcy5mYWNlc1sgZiBdOwogCi0gICAgICAg
IGZyb21EaXJlY3RHZW9tZXRyeTogZnVuY3Rpb24gKCBnZW9tZXRyeSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgdkEgPSB0aGlzLnZlcnRpY2VzWyBmYWNlLmEgXTsKKyAgICAgICAgICAgICAgICAg
ICAgdkIgPSB0aGlzLnZlcnRpY2VzWyBmYWNlLmIgXTsKKyAgICAgICAgICAgICAgICAgICAgdkMg
PSB0aGlzLnZlcnRpY2VzWyBmYWNlLmMgXTsKIAotICAgICAgICAgICAgdmFyIHBvc2l0aW9ucyA9
IG5ldyBGbG9hdDMyQXJyYXkoIGdlb21ldHJ5LnZlcnRpY2VzLmxlbmd0aCAqIDMgKTsKLSAgICAg
ICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgQnVmZmVyQXR0cmlidXRl
KCBwb3NpdGlvbnMsIDMgKS5jb3B5VmVjdG9yM3NBcnJheSggZ2VvbWV0cnkudmVydGljZXMgKSAp
OworICAgICAgICAgICAgICAgICAgICBjYi5zdWJWZWN0b3JzKCB2QywgdkIgKTsKKyAgICAgICAg
ICAgICAgICAgICAgYWIuc3ViVmVjdG9ycyggdkEsIHZCICk7CisgICAgICAgICAgICAgICAgICAg
IGNiLmNyb3NzKCBhYiApOwogCi0gICAgICAgICAgICBpZiAoIGdlb21ldHJ5Lm5vcm1hbHMubGVu
Z3RoID4gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgdmVydGljZXNbIGZhY2UuYSBdLmFkZCgg
Y2IgKTsKKyAgICAgICAgICAgICAgICAgICAgdmVydGljZXNbIGZhY2UuYiBdLmFkZCggY2IgKTsK
KyAgICAgICAgICAgICAgICAgICAgdmVydGljZXNbIGZhY2UuYyBdLmFkZCggY2IgKTsKIAotICAg
ICAgICAgICAgICAgIHZhciBub3JtYWxzID0gbmV3IEZsb2F0MzJBcnJheSggZ2VvbWV0cnkubm9y
bWFscy5sZW5ndGggKiAzICk7Ci0gICAgICAgICAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdu
b3JtYWwnLCBuZXcgQnVmZmVyQXR0cmlidXRlKCBub3JtYWxzLCAzICkuY29weVZlY3RvcjNzQXJy
YXkoIGdlb21ldHJ5Lm5vcm1hbHMgKSApOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5j
b2xvcnMubGVuZ3RoID4gMCApIHsKKyAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVGYWNlTm9y
bWFscygpOwogCi0gICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXko
IGdlb21ldHJ5LmNvbG9ycy5sZW5ndGggKiAzICk7Ci0gICAgICAgICAgICAgICAgdGhpcy5hZGRB
dHRyaWJ1dGUoICdjb2xvcicsIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIGNvbG9ycywgMyApLmNvcHlD
b2xvcnNBcnJheSggZ2VvbWV0cnkuY29sb3JzICkgKTsKKyAgICAgICAgICAgICAgICBmb3IgKCBm
ID0gMCwgZmwgPSB0aGlzLmZhY2VzLmxlbmd0aDsgZiA8IGZsOyBmICsrICkgewogCi0gICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZhY2UgPSB0aGlzLmZhY2VzWyBmIF07CiAKLSAg
ICAgICAgICAgIGlmICggZ2VvbWV0cnkudXZzLmxlbmd0aCA+IDAgKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZlcnRpY2VzWyBmYWNlLmEgXS5hZGQoIGZhY2Uubm9ybWFsICk7CisgICAgICAgICAg
ICAgICAgICAgIHZlcnRpY2VzWyBmYWNlLmIgXS5hZGQoIGZhY2Uubm9ybWFsICk7CisgICAgICAg
ICAgICAgICAgICAgIHZlcnRpY2VzWyBmYWNlLmMgXS5hZGQoIGZhY2Uubm9ybWFsICk7CiAKLSAg
ICAgICAgICAgICAgICB2YXIgdXZzID0gbmV3IEZsb2F0MzJBcnJheSggZ2VvbWV0cnkudXZzLmxl
bmd0aCAqIDIgKTsKLSAgICAgICAgICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3V2JywgbmV3
IEJ1ZmZlckF0dHJpYnV0ZSggdXZzLCAyICkuY29weVZlY3RvcjJzQXJyYXkoIGdlb21ldHJ5LnV2
cyApICk7CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICggZ2VvbWV0cnkudXZzMi5sZW5ndGggPiAwICkgeworICAgICAgICAgICAgZm9yICggdiA9
IDAsIHZsID0gdGhpcy52ZXJ0aWNlcy5sZW5ndGg7IHYgPCB2bDsgdiArKyApIHsKIAotICAgICAg
ICAgICAgICAgIHZhciB1dnMyID0gbmV3IEZsb2F0MzJBcnJheSggZ2VvbWV0cnkudXZzMi5sZW5n
dGggKiAyICk7Ci0gICAgICAgICAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICd1djInLCBuZXcg
QnVmZmVyQXR0cmlidXRlKCB1dnMyLCAyICkuY29weVZlY3RvcjJzQXJyYXkoIGdlb21ldHJ5LnV2
czIgKSApOworICAgICAgICAgICAgICAgIHZlcnRpY2VzWyB2IF0ubm9ybWFsaXplKCk7CiAKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gZ3JvdXBzCisgICAgICAgICAgICBmb3IgKCBm
ID0gMCwgZmwgPSB0aGlzLmZhY2VzLmxlbmd0aDsgZiA8IGZsOyBmICsrICkgewogCi0gICAgICAg
ICAgICB0aGlzLmdyb3VwcyA9IGdlb21ldHJ5Lmdyb3VwczsKKyAgICAgICAgICAgICAgICBmYWNl
ID0gdGhpcy5mYWNlc1sgZiBdOwogCi0gICAgICAgICAgICAvLyBtb3JwaHMKKyAgICAgICAgICAg
ICAgICB2YXIgdmVydGV4Tm9ybWFscyA9IGZhY2UudmVydGV4Tm9ybWFsczsKIAotICAgICAgICAg
ICAgZm9yICggdmFyIG5hbWUgaW4gZ2VvbWV0cnkubW9ycGhUYXJnZXRzICkgeworICAgICAgICAg
ICAgICAgIGlmICggdmVydGV4Tm9ybWFscy5sZW5ndGggPT09IDMgKSB7CiAKLSAgICAgICAgICAg
ICAgICB2YXIgYXJyYXkgPSBbXTsKLSAgICAgICAgICAgICAgICB2YXIgbW9ycGhUYXJnZXRzID0g
Z2VvbWV0cnkubW9ycGhUYXJnZXRzWyBuYW1lIF07CisgICAgICAgICAgICAgICAgICAgIHZlcnRl
eE5vcm1hbHNbIDAgXS5jb3B5KCB2ZXJ0aWNlc1sgZmFjZS5hIF0gKTsKKyAgICAgICAgICAgICAg
ICAgICAgdmVydGV4Tm9ybWFsc1sgMSBdLmNvcHkoIHZlcnRpY2VzWyBmYWNlLmIgXSApOworICAg
ICAgICAgICAgICAgICAgICB2ZXJ0ZXhOb3JtYWxzWyAyIF0uY29weSggdmVydGljZXNbIGZhY2Uu
YyBdICk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBtb3JwaFRhcmdl
dHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0g
ICAgICAgICAgICAgICAgICAgIHZhciBtb3JwaFRhcmdldCA9IG1vcnBoVGFyZ2V0c1sgaSBdOwor
ICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhOb3JtYWxzWyAwIF0gPSB2ZXJ0aWNlc1sgZmFjZS5h
IF0uY2xvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4Tm9ybWFsc1sgMSBdID0gdmVy
dGljZXNbIGZhY2UuYiBdLmNsb25lKCk7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleE5vcm1h
bHNbIDIgXSA9IHZlcnRpY2VzWyBmYWNlLmMgXS5jbG9uZSgpOwogCi0gICAgICAgICAgICAgICAg
ICAgIHZhciBhdHRyaWJ1dGUgPSBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggbW9ycGhUYXJn
ZXQubGVuZ3RoICogMywgMyApOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
ICAgICBhcnJheS5wdXNoKCBhdHRyaWJ1dGUuY29weVZlY3RvcjNzQXJyYXkoIG1vcnBoVGFyZ2V0
ICkgKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICggdGhpcy5mYWNlcy5sZW5ndGggPiAwICkgewogCi0gICAgICAgICAgICAgICAgdGhpcy5tb3Jw
aEF0dHJpYnV0ZXNbIG5hbWUgXSA9IGFycmF5OworICAgICAgICAgICAgICAgIHRoaXMubm9ybWFs
c05lZWRVcGRhdGUgPSB0cnVlOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIHNr
aW5uaW5nCi0KLSAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuc2tpbkluZGljZXMubGVuZ3RoID4g
MCApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHZhciBza2luSW5kaWNlcyA9IG5l
dyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBnZW9tZXRyeS5za2luSW5kaWNlcy5sZW5ndGggKiA0
LCA0ICk7Ci0gICAgICAgICAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdza2luSW5kZXgnLCBz
a2luSW5kaWNlcy5jb3B5VmVjdG9yNHNBcnJheSggZ2VvbWV0cnkuc2tpbkluZGljZXMgKSApOwor
ICAgICAgICBjb21wdXRlRmxhdFZlcnRleE5vcm1hbHM6IGZ1bmN0aW9uICgpIHsKIAotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdmFyIGYsIGZsLCBmYWNlOwogCi0gICAgICAgICAgICBpZiAo
IGdlb21ldHJ5LnNraW5XZWlnaHRzLmxlbmd0aCA+IDAgKSB7CisgICAgICAgICAgICB0aGlzLmNv
bXB1dGVGYWNlTm9ybWFscygpOwogCi0gICAgICAgICAgICAgICAgdmFyIHNraW5XZWlnaHRzID0g
bmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIGdlb21ldHJ5LnNraW5XZWlnaHRzLmxlbmd0aCAq
IDQsIDQgKTsKLSAgICAgICAgICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3NraW5XZWlnaHQn
LCBza2luV2VpZ2h0cy5jb3B5VmVjdG9yNHNBcnJheSggZ2VvbWV0cnkuc2tpbldlaWdodHMgKSAp
OworICAgICAgICAgICAgZm9yICggZiA9IDAsIGZsID0gdGhpcy5mYWNlcy5sZW5ndGg7IGYgPCBm
bDsgZiArKyApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZhY2UgPSB0aGlz
LmZhY2VzWyBmIF07CiAKLSAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgdmFyIHZlcnRl
eE5vcm1hbHMgPSBmYWNlLnZlcnRleE5vcm1hbHM7CiAKLSAgICAgICAgICAgIGlmICggZ2VvbWV0
cnkuYm91bmRpbmdTcGhlcmUgIT09IG51bGwgKSB7CisgICAgICAgICAgICAgICAgaWYgKCB2ZXJ0
ZXhOb3JtYWxzLmxlbmd0aCA9PT0gMyApIHsKIAotICAgICAgICAgICAgICAgIHRoaXMuYm91bmRp
bmdTcGhlcmUgPSBnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZS5jbG9uZSgpOworICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhOb3JtYWxzWyAwIF0uY29weSggZmFjZS5ub3JtYWwgKTsKKyAgICAgICAg
ICAgICAgICAgICAgdmVydGV4Tm9ybWFsc1sgMSBdLmNvcHkoIGZhY2Uubm9ybWFsICk7CisgICAg
ICAgICAgICAgICAgICAgIHZlcnRleE5vcm1hbHNbIDIgXS5jb3B5KCBmYWNlLm5vcm1hbCApOwog
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAg
aWYgKCBnZW9tZXRyeS5ib3VuZGluZ0JveCAhPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmVydGV4Tm9ybWFsc1sgMCBdID0gZmFjZS5ub3JtYWwuY2xvbmUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgdmVydGV4Tm9ybWFsc1sgMSBdID0gZmFjZS5ub3JtYWwuY2xvbmUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgdmVydGV4Tm9ybWFsc1sgMiBdID0gZmFjZS5ub3JtYWwuY2xvbmUoKTsK
IAotICAgICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBnZW9tZXRyeS5ib3VuZGluZ0Jv
eC5jbG9uZSgpOworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIGlmICggdGhpcy5mYWNlcy5sZW5ndGggPiAw
ICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgdGhpcy5ub3JtYWxzTmVlZFVwZGF0
ZSA9IHRydWU7CiAKLSAgICAgICAgY29tcHV0ZUJvdW5kaW5nQm94OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggdGhpcy5ib3VuZGluZ0JveCA9PT0gbnVs
bCApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBu
ZXcgQm94MygpOworICAgICAgICBjb21wdXRlTW9ycGhOb3JtYWxzOiBmdW5jdGlvbiAoKSB7CiAK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBpLCBpbCwgZiwgZmwsIGZhY2U7CiAKLSAg
ICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjsKKyAgICAg
ICAgICAgIC8vIHNhdmUgb3JpZ2luYWwgbm9ybWFscworICAgICAgICAgICAgLy8gLSBjcmVhdGUg
dGVtcCB2YXJpYWJsZXMgb24gZmlyc3QgYWNjZXNzCisgICAgICAgICAgICAvLyAgIG90aGVyd2lz
ZSBqdXN0IGNvcHkgKGZvciBmYXN0ZXIgcmVwZWF0ZWQgY2FsbHMpCiAKLSAgICAgICAgICAgIGlm
ICggcG9zaXRpb24gIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIGZvciAoIGYgPSAwLCBm
bCA9IHRoaXMuZmFjZXMubGVuZ3RoOyBmIDwgZmw7IGYgKysgKSB7CiAKLSAgICAgICAgICAgICAg
ICB0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uICk7Cisg
ICAgICAgICAgICAgICAgZmFjZSA9IHRoaXMuZmFjZXNbIGYgXTsKIAotICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoICEgZmFjZS5fX29yaWdpbmFsRmFjZU5vcm1hbCAp
IHsKIAotICAgICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7CisgICAg
ICAgICAgICAgICAgICAgIGZhY2UuX19vcmlnaW5hbEZhY2VOb3JtYWwgPSBmYWNlLm5vcm1hbC5j
bG9uZSgpOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAg
ICAgICAgICAgaWYgKCBpc05hTiggdGhpcy5ib3VuZGluZ0JveC5taW4ueCApIHx8IGlzTmFOKCB0
aGlzLmJvdW5kaW5nQm94Lm1pbi55ICkgfHwgaXNOYU4oIHRoaXMuYm91bmRpbmdCb3gubWluLnog
KSApIHsKKyAgICAgICAgICAgICAgICAgICAgZmFjZS5fX29yaWdpbmFsRmFjZU5vcm1hbC5jb3B5
KCBmYWNlLm5vcm1hbCApOwogCi0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVF
LkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveDogQ29tcHV0ZWQgbWluL21heCBoYXZl
IE5hTiB2YWx1ZXMuIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBO
YU4gdmFsdWVzLicsIHRoaXMgKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoICEgZmFjZS5fX29yaWdpbmFsVmVydGV4Tm9ybWFscyApIGZh
Y2UuX19vcmlnaW5hbFZlcnRleE5vcm1hbHMgPSBbXTsKIAotICAgICAgICB9LAorICAgICAgICAg
ICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IGZhY2UudmVydGV4Tm9ybWFscy5sZW5ndGg7IGkgPCBp
bDsgaSArKyApIHsKIAotICAgICAgICBjb21wdXRlQm91bmRpbmdTcGhlcmU6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhIGZhY2UuX19vcmlnaW5hbFZlcnRleE5vcm1h
bHNbIGkgXSApIHsKIAotICAgICAgICAgICAgdmFyIGJveCA9IG5ldyBCb3gzKCk7Ci0gICAgICAg
ICAgICB2YXIgdmVjdG9yID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZhY2UuX19vcmlnaW5hbFZlcnRleE5vcm1hbHNbIGkgXSA9IGZhY2UudmVydGV4Tm9ybWFsc1sg
aSBdLmNsb25lKCk7CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjb21wdXRlQm91bmRp
bmdTcGhlcmUoKSB7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAg
ICAgICBpZiAoIHRoaXMuYm91bmRpbmdTcGhlcmUgPT09IG51bGwgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmYWNlLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzWyBpIF0uY29weSggZmFjZS52
ZXJ0ZXhOb3JtYWxzWyBpIF0gKTsKIAotICAgICAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5n
U3BoZXJlID0gbmV3IFNwaGVyZSgpOworICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLmF0dHJpYnV0
ZXMucG9zaXRpb247CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIHBvc2l0
aW9uICkgeworICAgICAgICAgICAgLy8gdXNlIHRlbXAgZ2VvbWV0cnkgdG8gY29tcHV0ZSBmYWNl
IGFuZCB2ZXJ0ZXggbm9ybWFscyBmb3IgZWFjaCBtb3JwaAogCi0gICAgICAgICAgICAgICAgICAg
IHZhciBjZW50ZXIgPSB0aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjsKKyAgICAgICAgICAgIHZh
ciB0bXBHZW8gPSBuZXcgR2VvbWV0cnkoKTsKKyAgICAgICAgICAgIHRtcEdlby5mYWNlcyA9IHRo
aXMuZmFjZXM7CiAKLSAgICAgICAgICAgICAgICAgICAgYm94LnNldEZyb21CdWZmZXJBdHRyaWJ1
dGUoIHBvc2l0aW9uICk7Ci0gICAgICAgICAgICAgICAgICAgIGJveC5nZXRDZW50ZXIoIGNlbnRl
ciApOworICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0gdGhpcy5tb3JwaFRhcmdldHMubGVu
Z3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gaG9waW5nIHRv
IGZpbmQgYSBib3VuZGluZ1NwaGVyZSB3aXRoIGEgcmFkaXVzIHNtYWxsZXIgdGhhbiB0aGUKLSAg
ICAgICAgICAgICAgICAgICAgLy8gYm91bmRpbmdTcGhlcmUgb2YgdGhlIGJvdW5kaW5nQm94OiBz
cXJ0KDMpIHNtYWxsZXIgaW4gdGhlIGJlc3QgY2FzZQorICAgICAgICAgICAgICAgIC8vIGNyZWF0
ZSBvbiBmaXJzdCBhY2Nlc3MKIAotICAgICAgICAgICAgICAgICAgICB2YXIgbWF4UmFkaXVzU3Eg
PSAwOworICAgICAgICAgICAgICAgIGlmICggISB0aGlzLm1vcnBoTm9ybWFsc1sgaSBdICkgewog
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBwb3NpdGlvbi5jb3Vu
dDsgaSA8IGlsOyBpICsrICkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcnBoTm9ybWFs
c1sgaSBdID0ge307CisgICAgICAgICAgICAgICAgICAgIHRoaXMubW9ycGhOb3JtYWxzWyBpIF0u
ZmFjZU5vcm1hbHMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3JwaE5vcm1hbHNb
IGkgXS52ZXJ0ZXhOb3JtYWxzID0gW107CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHZlY3Rv
ci54ID0gcG9zaXRpb24uZ2V0WCggaSApOwotICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9y
LnkgPSBwb3NpdGlvbi5nZXRZKCBpICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Iu
eiA9IHBvc2l0aW9uLmdldFooIGkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1heFJhZGl1
c1NxID0gTWF0aC5tYXgoIG1heFJhZGl1c1NxLCBjZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQoIHZl
Y3RvciApICk7CisgICAgICAgICAgICAgICAgICAgIHZhciBkc3ROb3JtYWxzRmFjZSA9IHRoaXMu
bW9ycGhOb3JtYWxzWyBpIF0uZmFjZU5vcm1hbHM7CisgICAgICAgICAgICAgICAgICAgIHZhciBk
c3ROb3JtYWxzVmVydGV4ID0gdGhpcy5tb3JwaE5vcm1hbHNbIGkgXS52ZXJ0ZXhOb3JtYWxzOwog
Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGZhY2VOb3Jt
YWwsIHZlcnRleE5vcm1hbHM7CiAKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3VuZGluZ1Nw
aGVyZS5yYWRpdXMgPSBNYXRoLnNxcnQoIG1heFJhZGl1c1NxICk7CisgICAgICAgICAgICAgICAg
ICAgIGZvciAoIGYgPSAwLCBmbCA9IHRoaXMuZmFjZXMubGVuZ3RoOyBmIDwgZmw7IGYgKysgKSB7
CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBpc05hTiggdGhpcy5ib3VuZGluZ1NwaGVyZS5y
YWRpdXMgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VOb3JtYWwgPSBuZXcgVmVj
dG9yMygpOworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4Tm9ybWFscyA9IHsgYTogbmV3
IFZlY3RvcjMoKSwgYjogbmV3IFZlY3RvcjMoKSwgYzogbmV3IFZlY3RvcjMoKSB9OwogCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnku
Y29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9z
aXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsIHRoaXMgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRzdE5vcm1hbHNGYWNlLnB1c2goIGZhY2VOb3JtYWwg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRzdE5vcm1hbHNWZXJ0ZXgucHVzaCggdmVydGV4
Tm9ybWFscyApOwogCiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB2YXIgbW9ycGhOb3JtYWxzID0gdGhp
cy5tb3JwaE5vcm1hbHNbIGkgXTsKIAotICAgICAgICB9KCksCisgICAgICAgICAgICAgICAgLy8g
c2V0IHZlcnRpY2VzIHRvIG1vcnBoIHRhcmdldAogCi0gICAgICAgIGNvbXB1dGVGYWNlTm9ybWFs
czogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHRtcEdlby52ZXJ0aWNlcyA9IHRoaXMu
bW9ycGhUYXJnZXRzWyBpIF0udmVydGljZXM7CiAKLSAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBj
b21wYXRpYmlsaXR5CisgICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBtb3JwaCBub3JtYWxzCiAK
LSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB0bXBHZW8uY29tcHV0ZUZhY2VOb3JtYWxzKCk7
CisgICAgICAgICAgICAgICAgdG1wR2VvLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7CiAKLSAgICAg
ICAgY29tcHV0ZVZlcnRleE5vcm1hbHM6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAv
LyBzdG9yZSBtb3JwaCBub3JtYWxzCiAKLSAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuaW5k
ZXg7Ci0gICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlczsKLSAgICAg
ICAgICAgIHZhciBncm91cHMgPSB0aGlzLmdyb3VwczsKKyAgICAgICAgICAgICAgICB2YXIgZmFj
ZU5vcm1hbCwgdmVydGV4Tm9ybWFsczsKIAotICAgICAgICAgICAgaWYgKCBhdHRyaWJ1dGVzLnBv
c2l0aW9uICkgeworICAgICAgICAgICAgICAgIGZvciAoIGYgPSAwLCBmbCA9IHRoaXMuZmFjZXMu
bGVuZ3RoOyBmIDwgZmw7IGYgKysgKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb25z
ID0gYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgZmFjZSA9
IHRoaXMuZmFjZXNbIGYgXTsKIAotICAgICAgICAgICAgICAgIGlmICggYXR0cmlidXRlcy5ub3Jt
YWwgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgZmFjZU5vcm1hbCA9IG1v
cnBoTm9ybWFscy5mYWNlTm9ybWFsc1sgZiBdOworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhO
b3JtYWxzID0gbW9ycGhOb3JtYWxzLnZlcnRleE5vcm1hbHNbIGYgXTsKIAotICAgICAgICAgICAg
ICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5ldyBCdWZmZXJBdHRyaWJ1dGUo
IG5ldyBGbG9hdDMyQXJyYXkoIHBvc2l0aW9ucy5sZW5ndGggKSwgMyApICk7CisgICAgICAgICAg
ICAgICAgICAgIGZhY2VOb3JtYWwuY29weSggZmFjZS5ub3JtYWwgKTsKIAotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleE5vcm1hbHMuYS5jb3B5KCBm
YWNlLnZlcnRleE5vcm1hbHNbIDAgXSApOworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhOb3Jt
YWxzLmIuY29weSggZmFjZS52ZXJ0ZXhOb3JtYWxzWyAxIF0gKTsKKyAgICAgICAgICAgICAgICAg
ICAgdmVydGV4Tm9ybWFscy5jLmNvcHkoIGZhY2UudmVydGV4Tm9ybWFsc1sgMiBdICk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgZXhpc3Rpbmcgbm9ybWFscyB0byB6ZXJvCisgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IGF0dHJpYnV0
ZXMubm9ybWFsLmFycmF5OworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMCwgaWwgPSBhcnJheS5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAgICAg
ICAgICAgIC8vIHJlc3RvcmUgb3JpZ2luYWwgbm9ybWFscwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICBhcnJheVsgaSBdID0gMDsKKyAgICAgICAgICAgIGZvciAoIGYgPSAwLCBmbCA9IHRoaXMu
ZmFjZXMubGVuZ3RoOyBmIDwgZmw7IGYgKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGZhY2UgPSB0aGlzLmZhY2VzWyBmIF07CiAKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZmFjZS5ub3JtYWwgPSBmYWNlLl9fb3JpZ2luYWxGYWNlTm9y
bWFsOworICAgICAgICAgICAgICAgIGZhY2UudmVydGV4Tm9ybWFscyA9IGZhY2UuX19vcmlnaW5h
bFZlcnRleE5vcm1hbHM7CiAKLSAgICAgICAgICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJpYnV0
ZXMubm9ybWFsLmFycmF5OworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdmFyIHZB
LCB2QiwgdkM7Ci0gICAgICAgICAgICAgICAgdmFyIHBBID0gbmV3IFZlY3RvcjMoKSwgcEIgPSBu
ZXcgVmVjdG9yMygpLCBwQyA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICAgICAgdmFyIGNi
ID0gbmV3IFZlY3RvcjMoKSwgYWIgPSBuZXcgVmVjdG9yMygpOworICAgICAgICB9LAogCi0gICAg
ICAgICAgICAgICAgLy8gaW5kZXhlZCBlbGVtZW50cworICAgICAgICBjb21wdXRlQm91bmRpbmdC
b3g6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgIGlmICggaW5kZXggKSB7CisgICAg
ICAgICAgICBpZiAoIHRoaXMuYm91bmRpbmdCb3ggPT09IG51bGwgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIGluZGljZXMgPSBpbmRleC5hcnJheTsKKyAgICAgICAgICAgICAgICB0aGlz
LmJvdW5kaW5nQm94ID0gbmV3IEJveDMoKTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIGdy
b3Vwcy5sZW5ndGggPT09IDAgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuYWRkR3JvdXAoIDAsIGluZGljZXMubGVuZ3RoICk7CisgICAgICAgICAgICB0
aGlzLmJvdW5kaW5nQm94LnNldEZyb21Qb2ludHMoIHRoaXMudmVydGljZXMgKTsKIAotICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgZm9yICgg
dmFyIGogPSAwLCBqbCA9IGdyb3Vwcy5sZW5ndGg7IGogPCBqbDsgKysgaiApIHsKKyAgICAgICAg
Y29tcHV0ZUJvdW5kaW5nU3BoZXJlOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBncm91cCA9IGdyb3Vwc1sgaiBdOworICAgICAgICAgICAgaWYgKCB0aGlzLmJv
dW5kaW5nU3BoZXJlID09PSBudWxsICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIg
c3RhcnQgPSBncm91cC5zdGFydDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9
IGdyb3VwLmNvdW50OworICAgICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdTcGhlcmUgPSBuZXcg
U3BoZXJlKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gc3RhcnQs
IGlsID0gc3RhcnQgKyBjb3VudDsgaSA8IGlsOyBpICs9IDMgKSB7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2QSA9IGluZGljZXNbIGkgKyAwIF0gKiAzOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZCID0gaW5kaWNlc1sgaSArIDEgXSAqIDM7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdkMgPSBpbmRpY2VzWyBpICsgMiBdICogMzsKKyAg
ICAgICAgICAgIHRoaXMuYm91bmRpbmdTcGhlcmUuc2V0RnJvbVBvaW50cyggdGhpcy52ZXJ0aWNl
cyApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEEuZnJvbUFycmF5KCBwb3NpdGlv
bnMsIHZBICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEIuZnJvbUFycmF5KCBwb3Np
dGlvbnMsIHZCICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEMuZnJvbUFycmF5KCBw
b3NpdGlvbnMsIHZDICk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYi5zdWJWZWN0b3JzKCBwQywgcEIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
Yi5zdWJWZWN0b3JzKCBwQSwgcEIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYi5j
cm9zcyggYWIgKTsKKyAgICAgICAgbWVyZ2U6IGZ1bmN0aW9uICggZ2VvbWV0cnksIG1hdHJpeCwg
bWF0ZXJpYWxJbmRleE9mZnNldCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
cm1hbHNbIHZBIF0gKz0gY2IueDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxz
WyB2QSArIDEgXSArPSBjYi55OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNb
IHZBICsgMiBdICs9IGNiLno7CisgICAgICAgICAgICBpZiAoICEgKCBnZW9tZXRyeSAmJiBnZW9t
ZXRyeS5pc0dlb21ldHJ5ICkgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3Jt
YWxzWyB2QiBdICs9IGNiLng7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sg
dkIgKyAxIF0gKz0gY2IueTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyB2
QiArIDIgXSArPSBjYi56OworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5H
ZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuR2VvbWV0
cnkuJywgZ2VvbWV0cnkgKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub3JtYWxzWyB2QyBdICs9IGNiLng7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9ybWFsc1sgdkMgKyAxIF0gKz0gY2IueTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub3JtYWxzWyB2QyArIDIgXSArPSBjYi56OworICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbm9ybWFsTWF0cml4LAor
ICAgICAgICAgICAgICAgIHZlcnRleE9mZnNldCA9IHRoaXMudmVydGljZXMubGVuZ3RoLAorICAg
ICAgICAgICAgICAgIHZlcnRpY2VzMSA9IHRoaXMudmVydGljZXMsCisgICAgICAgICAgICAgICAg
dmVydGljZXMyID0gZ2VvbWV0cnkudmVydGljZXMsCisgICAgICAgICAgICAgICAgZmFjZXMxID0g
dGhpcy5mYWNlcywKKyAgICAgICAgICAgICAgICBmYWNlczIgPSBnZW9tZXRyeS5mYWNlcywKKyAg
ICAgICAgICAgICAgICB1dnMxID0gdGhpcy5mYWNlVmVydGV4VXZzWyAwIF0sCisgICAgICAgICAg
ICAgICAgdXZzMiA9IGdlb21ldHJ5LmZhY2VWZXJ0ZXhVdnNbIDAgXSwKKyAgICAgICAgICAgICAg
ICBjb2xvcnMxID0gdGhpcy5jb2xvcnMsCisgICAgICAgICAgICAgICAgY29sb3JzMiA9IGdlb21l
dHJ5LmNvbG9yczsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIG1h
dGVyaWFsSW5kZXhPZmZzZXQgPT09IHVuZGVmaW5lZCApIG1hdGVyaWFsSW5kZXhPZmZzZXQgPSAw
OwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICggbWF0cml4ICE9
PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gbm9uLWluZGV4ZWQgZWxl
bWVudHMgKHVuY29ubmVjdGVkIHRyaWFuZ2xlIHNvdXApCisgICAgICAgICAgICAgICAgbm9ybWFs
TWF0cml4ID0gbmV3IE1hdHJpeDMoKS5nZXROb3JtYWxNYXRyaXgoIG1hdHJpeCApOwogCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBwb3NpdGlvbnMubGVuZ3RoOyBp
IDwgaWw7IGkgKz0gOSApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAg
ICAgcEEuZnJvbUFycmF5KCBwb3NpdGlvbnMsIGkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHBCLmZyb21BcnJheSggcG9zaXRpb25zLCBpICsgMyApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgcEMuZnJvbUFycmF5KCBwb3NpdGlvbnMsIGkgKyA2ICk7CisgICAgICAgICAgICAvLyB2ZXJ0
aWNlcwogCi0gICAgICAgICAgICAgICAgICAgICAgICBjYi5zdWJWZWN0b3JzKCBwQywgcEIgKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFiLnN1YlZlY3RvcnMoIHBBLCBwQiApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgY2IuY3Jvc3MoIGFiICk7CisgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDAsIGlsID0gdmVydGljZXMyLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewogCi0gICAgICAg
ICAgICAgICAgICAgICAgICBub3JtYWxzWyBpIF0gPSBjYi54OwotICAgICAgICAgICAgICAgICAg
ICAgICAgbm9ybWFsc1sgaSArIDEgXSA9IGNiLnk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBu
b3JtYWxzWyBpICsgMiBdID0gY2IuejsKKyAgICAgICAgICAgICAgICB2YXIgdmVydGV4ID0gdmVy
dGljZXMyWyBpIF07CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIGkgKyAzIF0g
PSBjYi54OwotICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgaSArIDQgXSA9IGNiLnk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyBpICsgNSBdID0gY2IuejsKKyAgICAg
ICAgICAgICAgICB2YXIgdmVydGV4Q29weSA9IHZlcnRleC5jbG9uZSgpOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICBub3JtYWxzWyBpICsgNiBdID0gY2IueDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5vcm1hbHNbIGkgKyA3IF0gPSBjYi55OwotICAgICAgICAgICAgICAgICAgICAgICAg
bm9ybWFsc1sgaSArIDggXSA9IGNiLno7CisgICAgICAgICAgICAgICAgaWYgKCBtYXRyaXggIT09
IHVuZGVmaW5lZCApIHZlcnRleENvcHkuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTsKIAotICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmVydGljZXMxLnB1c2goIHZlcnRleENv
cHkgKTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIHRoaXMubm9ybWFsaXplTm9ybWFscygpOworICAgICAgICAgICAgLy8gY29sb3JzCiAKLSAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGVzLm5vcm1hbC5uZWVkc1VwZGF0ZSA9IHRydWU7CisgICAg
ICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGlsID0gY29sb3JzMi5sZW5ndGg7IGkgPCBpbDsgaSAr
KyApIHsKKworICAgICAgICAgICAgICAgIGNvbG9yczEucHVzaCggY29sb3JzMlsgaSBdLmNsb25l
KCkgKTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgIH0sCisgICAgICAgICAgICAvLyBmYWNl
cwogCi0gICAgICAgIG1lcmdlOiBmdW5jdGlvbiAoIGdlb21ldHJ5LCBvZmZzZXQgKSB7CisgICAg
ICAgICAgICBmb3IgKCBpID0gMCwgaWwgPSBmYWNlczIubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7
CiAKLSAgICAgICAgICAgIGlmICggISAoIGdlb21ldHJ5ICYmIGdlb21ldHJ5LmlzQnVmZmVyR2Vv
bWV0cnkgKSApIHsKKyAgICAgICAgICAgICAgICB2YXIgZmFjZSA9IGZhY2VzMlsgaSBdLCBmYWNl
Q29weSwgbm9ybWFsLCBjb2xvciwKKyAgICAgICAgICAgICAgICAgICAgZmFjZVZlcnRleE5vcm1h
bHMgPSBmYWNlLnZlcnRleE5vcm1hbHMsCisgICAgICAgICAgICAgICAgICAgIGZhY2VWZXJ0ZXhD
b2xvcnMgPSBmYWNlLnZlcnRleENvbG9yczsKIAotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJy
b3IoICdUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFu
Y2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuJywgZ2VvbWV0cnkgKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgZmFjZUNvcHkgPSBuZXcgRmFjZTMoIGZhY2UuYSAr
IHZlcnRleE9mZnNldCwgZmFjZS5iICsgdmVydGV4T2Zmc2V0LCBmYWNlLmMgKyB2ZXJ0ZXhPZmZz
ZXQgKTsKKyAgICAgICAgICAgICAgICBmYWNlQ29weS5ub3JtYWwuY29weSggZmFjZS5ub3JtYWwg
KTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICggbm9ybWFsTWF0cml4ICE9
PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgIGlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQg
KSB7CisgICAgICAgICAgICAgICAgICAgIGZhY2VDb3B5Lm5vcm1hbC5hcHBseU1hdHJpeDMoIG5v
cm1hbE1hdHJpeCApLm5vcm1hbGl6ZSgpOwogCi0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDsK
KyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oCi0gICAg
ICAgICAgICAgICAgICAgICdUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBPdmVyd3JpdGlu
ZyBvcmlnaW5hbCBnZW9tZXRyeSwgc3RhcnRpbmcgYXQgb2Zmc2V0PTAuICcKLSAgICAgICAgICAg
ICAgICAgICAgKyAnVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVz
KCkgZm9yIGxvc3NsZXNzIG1lcmdlLicKLSAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg
ICAgIGZvciAoIHZhciBqID0gMCwgamwgPSBmYWNlVmVydGV4Tm9ybWFscy5sZW5ndGg7IGogPCBq
bDsgaiArKyApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBub3JtYWwg
PSBmYWNlVmVydGV4Tm9ybWFsc1sgaiBdLmNsb25lKCk7CiAKLSAgICAgICAgICAgIHZhciBhdHRy
aWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzOworICAgICAgICAgICAgICAgICAgICBpZiAoIG5vcm1h
bE1hdHJpeCAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICBmb3IgKCB2YXIga2V5IGlu
IGF0dHJpYnV0ZXMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWwuYXBwbHlNYXRy
aXgzKCBub3JtYWxNYXRyaXggKS5ub3JtYWxpemUoKTsKIAotICAgICAgICAgICAgICAgIGlmICgg
Z2VvbWV0cnkuYXR0cmlidXRlc1sga2V5IF0gPT09IHVuZGVmaW5lZCApIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlMSA9IGF0
dHJpYnV0ZXNbIGtleSBdOwotICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVBcnJheTEgPSBh
dHRyaWJ1dGUxLmFycmF5OworICAgICAgICAgICAgICAgICAgICBmYWNlQ29weS52ZXJ0ZXhOb3Jt
YWxzLnB1c2goIG5vcm1hbCApOwogCi0gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZTIgPSBn
ZW9tZXRyeS5hdHRyaWJ1dGVzWyBrZXkgXTsKLSAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRl
QXJyYXkyID0gYXR0cmlidXRlMi5hcnJheTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICB2YXIgYXR0cmlidXRlU2l6ZSA9IGF0dHJpYnV0ZTIuaXRlbVNpemU7CisgICAgICAg
ICAgICAgICAgZmFjZUNvcHkuY29sb3IuY29weSggZmFjZS5jb2xvciApOwogCi0gICAgICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwLCBqID0gYXR0cmlidXRlU2l6ZSAqIG9mZnNldDsgaSA8IGF0
dHJpYnV0ZUFycmF5Mi5sZW5ndGg7IGkgKyssIGogKysgKSB7CisgICAgICAgICAgICAgICAgZm9y
ICggdmFyIGogPSAwLCBqbCA9IGZhY2VWZXJ0ZXhDb2xvcnMubGVuZ3RoOyBqIDwgamw7IGogKysg
KSB7CiAKLSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlQXJyYXkxWyBqIF0gPSBhdHRyaWJ1
dGVBcnJheTJbIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBmYWNlVmVydGV4Q29s
b3JzWyBqIF07CisgICAgICAgICAgICAgICAgICAgIGZhY2VDb3B5LnZlcnRleENvbG9ycy5wdXNo
KCBjb2xvci5jbG9uZSgpICk7CiAKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBmYWNlQ29weS5tYXRlcmlhbEluZGV4ID0gZmFjZS5tYXRlcmlhbElu
ZGV4ICsgbWF0ZXJpYWxJbmRleE9mZnNldDsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICAgICAgZmFjZXMxLnB1c2goIGZhY2VDb3B5ICk7CiAKLSAgICAgICAgfSwKKyAg
ICAgICAgICAgIH0KIAotICAgICAgICBub3JtYWxpemVOb3JtYWxzOiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICAvLyB1dnMKIAotICAgICAgICAgICAgdmFyIHZlY3RvciA9IG5ldyBWZWN0b3Iz
KCk7CisgICAgICAgICAgICBmb3IgKCBpID0gMCwgaWwgPSB1dnMyLmxlbmd0aDsgaSA8IGlsOyBp
ICsrICkgewogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbm9ybWFsaXplTm9ybWFscygp
IHsKKyAgICAgICAgICAgICAgICB2YXIgdXYgPSB1dnMyWyBpIF0sIHV2Q29weSA9IFtdOwogCi0g
ICAgICAgICAgICAgICAgdmFyIG5vcm1hbHMgPSB0aGlzLmF0dHJpYnV0ZXMubm9ybWFsOworICAg
ICAgICAgICAgICAgIGlmICggdXYgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAg
IGZvciAoIHZhciBpID0gMCwgaWwgPSBub3JtYWxzLmNvdW50OyBpIDwgaWw7IGkgKysgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgICAgIHZlY3Rv
ci54ID0gbm9ybWFscy5nZXRYKCBpICk7Ci0gICAgICAgICAgICAgICAgICAgIHZlY3Rvci55ID0g
bm9ybWFscy5nZXRZKCBpICk7Ci0gICAgICAgICAgICAgICAgICAgIHZlY3Rvci56ID0gbm9ybWFs
cy5nZXRaKCBpICk7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHZl
Y3Rvci5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDAsIGpsID0g
dXYubGVuZ3RoOyBqIDwgamw7IGogKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgbm9ybWFs
cy5zZXRYWVooIGksIHZlY3Rvci54LCB2ZWN0b3IueSwgdmVjdG9yLnogKTsKKyAgICAgICAgICAg
ICAgICAgICAgdXZDb3B5LnB1c2goIHV2WyBqIF0uY2xvbmUoKSApOwogCiAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIHV2czEucHVzaCggdXZDb3B5
ICk7CiAKLSAgICAgICAgfSgpLAorICAgICAgICAgICAgfQogCi0gICAgICAgIHRvTm9uSW5kZXhl
ZDogZnVuY3Rpb24gKCkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICBpZiAoIHRoaXMuaW5k
ZXggPT09IG51bGwgKSB7CisgICAgICAgIG1lcmdlTWVzaDogZnVuY3Rpb24gKCBtZXNoICkgewog
Ci0gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnkudG9O
b25JbmRleGVkKCk6IEdlb21ldHJ5IGlzIGFscmVhZHkgbm9uLWluZGV4ZWQuJyApOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgaWYgKCAhICggbWVzaCAmJiBtZXNo
LmlzTWVzaCApICkgeworCisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLkdl
b21ldHJ5Lm1lcmdlTWVzaCgpOiBtZXNoIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5NZXNoLics
IG1lc2ggKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgdmFyIGdlb21ldHJ5MiA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpOworICAgICAgICAg
ICAgaWYgKCBtZXNoLm1hdHJpeEF1dG9VcGRhdGUgKSBtZXNoLnVwZGF0ZU1hdHJpeCgpOwogCi0g
ICAgICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kZXguYXJyYXk7Ci0gICAgICAgICAgICB2
YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlczsKKyAgICAgICAgICAgIHRoaXMubWVyZ2Uo
IG1lc2guZ2VvbWV0cnksIG1lc2gubWF0cml4ICk7CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBu
YW1lIGluIGF0dHJpYnV0ZXMgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB2YXIg
YXR0cmlidXRlID0gYXR0cmlidXRlc1sgbmFtZSBdOworICAgICAgICAvKgorICAgICAgICAgKiBD
aGVja3MgZm9yIGR1cGxpY2F0ZSB2ZXJ0aWNlcyB3aXRoIGhhc2htYXAuCisgICAgICAgICAqIER1
cGxpY2F0ZWQgdmVydGljZXMgYXJlIHJlbW92ZWQKKyAgICAgICAgICogYW5kIGZhY2VzJyB2ZXJ0
aWNlcyBhcmUgdXBkYXRlZC4KKyAgICAgICAgICovCiAKLSAgICAgICAgICAgICAgICB2YXIgYXJy
YXkgPSBhdHRyaWJ1dGUuYXJyYXk7Ci0gICAgICAgICAgICAgICAgdmFyIGl0ZW1TaXplID0gYXR0
cmlidXRlLml0ZW1TaXplOworICAgICAgICBtZXJnZVZlcnRpY2VzOiBmdW5jdGlvbiAoKSB7CiAK
LSAgICAgICAgICAgICAgICB2YXIgYXJyYXkyID0gbmV3IGFycmF5LmNvbnN0cnVjdG9yKCBpbmRp
Y2VzLmxlbmd0aCAqIGl0ZW1TaXplICk7CisgICAgICAgICAgICB2YXIgdmVydGljZXNNYXAgPSB7
fTsgLy8gSGFzaG1hcCBmb3IgbG9va2luZyB1cCB2ZXJ0aWNlcyBieSBwb3NpdGlvbiBjb29yZGlu
YXRlcyAoYW5kIG1ha2luZyBzdXJlIHRoZXkgYXJlIHVuaXF1ZSkKKyAgICAgICAgICAgIHZhciB1
bmlxdWUgPSBbXSwgY2hhbmdlcyA9IFtdOwogCi0gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0g
MCwgaW5kZXgyID0gMDsKKyAgICAgICAgICAgIHZhciB2LCBrZXk7CisgICAgICAgICAgICB2YXIg
cHJlY2lzaW9uUG9pbnRzID0gNDsgLy8gbnVtYmVyIG9mIGRlY2ltYWwgcG9pbnRzLCBlLmcuIDQg
Zm9yIGVwc2lsb24gb2YgMC4wMDAxCisgICAgICAgICAgICB2YXIgcHJlY2lzaW9uID0gTWF0aC5w
b3coIDEwLCBwcmVjaXNpb25Qb2ludHMgKTsKKyAgICAgICAgICAgIHZhciBpLCBpbCwgZmFjZTsK
KyAgICAgICAgICAgIHZhciBpbmRpY2VzLCBqLCBqbDsKIAotICAgICAgICAgICAgICAgIGZvciAo
IHZhciBpID0gMCwgbCA9IGluZGljZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAg
ICAgIGZvciAoIGkgPSAwLCBpbCA9IHRoaXMudmVydGljZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysg
KSB7CiAKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbmRpY2VzWyBpIF0gKiBpdGVtU2l6
ZTsKKyAgICAgICAgICAgICAgICB2ID0gdGhpcy52ZXJ0aWNlc1sgaSBdOworICAgICAgICAgICAg
ICAgIGtleSA9IE1hdGgucm91bmQoIHYueCAqIHByZWNpc2lvbiApICsgJ18nICsgTWF0aC5yb3Vu
ZCggdi55ICogcHJlY2lzaW9uICkgKyAnXycgKyBNYXRoLnJvdW5kKCB2LnogKiBwcmVjaXNpb24g
KTsKIAotICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDA7IGogPCBpdGVtU2l6ZTsg
aiArKyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHZlcnRpY2VzTWFwWyBrZXkgXSA9PT0gdW5k
ZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBhcnJheTJbIGluZGV4MiArKyBd
ID0gYXJyYXlbIGluZGV4ICsrIF07CisgICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzTWFwWyBr
ZXkgXSA9IGk7CisgICAgICAgICAgICAgICAgICAgIHVuaXF1ZS5wdXNoKCB0aGlzLnZlcnRpY2Vz
WyBpIF0gKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlc1sgaSBdID0gdW5pcXVlLmxlbmd0
aCAtIDE7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgICAg
IC8vY29uc29sZS5sb2coJ0R1cGxpY2F0ZSB2ZXJ0ZXggZm91bmQuICcsIGksICcgY291bGQgYmUg
dXNpbmcgJywgdmVydGljZXNNYXBba2V5XSk7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZXNb
IGkgXSA9IGNoYW5nZXNbIHZlcnRpY2VzTWFwWyBrZXkgXSBdOworCisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB9CisKKworICAgICAgICAgICAgLy8gaWYgZmFjZXMgYXJlIGNvbXBs
ZXRlbHkgZGVnZW5lcmF0ZSBhZnRlciBtZXJnaW5nIHZlcnRpY2VzLCB3ZQorICAgICAgICAgICAg
Ly8gaGF2ZSB0byByZW1vdmUgdGhlbSBmcm9tIHRoZSBnZW9tZXRyeS4KKyAgICAgICAgICAgIHZh
ciBmYWNlSW5kaWNlc1RvUmVtb3ZlID0gW107CisKKyAgICAgICAgICAgIGZvciAoIGkgPSAwLCBp
bCA9IHRoaXMuZmFjZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CisKKyAgICAgICAgICAgICAg
ICBmYWNlID0gdGhpcy5mYWNlc1sgaSBdOworCisgICAgICAgICAgICAgICAgZmFjZS5hID0gY2hh
bmdlc1sgZmFjZS5hIF07CisgICAgICAgICAgICAgICAgZmFjZS5iID0gY2hhbmdlc1sgZmFjZS5i
IF07CisgICAgICAgICAgICAgICAgZmFjZS5jID0gY2hhbmdlc1sgZmFjZS5jIF07CisKKyAgICAg
ICAgICAgICAgICBpbmRpY2VzID0gWyBmYWNlLmEsIGZhY2UuYiwgZmFjZS5jIF07CisKKyAgICAg
ICAgICAgICAgICAvLyBpZiBhbnkgZHVwbGljYXRlIHZlcnRpY2VzIGFyZSBmb3VuZCBpbiBhIEZh
Y2UzCisgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byByZW1vdmUgdGhlIGZhY2UgYXMgbm90
aGluZyBjYW4gYmUgc2F2ZWQKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgbiA9IDA7IG4gPCAz
OyBuICsrICkgeworCisgICAgICAgICAgICAgICAgICAgIGlmICggaW5kaWNlc1sgbiBdID09PSBp
bmRpY2VzWyAoIG4gKyAxICkgJSAzIF0gKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZh
Y2VJbmRpY2VzVG9SZW1vdmUucHVzaCggaSApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgZ2VvbWV0cnkyLmFkZEF0dHJpYnV0ZSggbmFtZSwgbmV3IEJ1ZmZlckF0dHJp
YnV0ZSggYXJyYXkyLCBpdGVtU2l6ZSApICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGZvciAoIGkgPSBmYWNlSW5kaWNlc1RvUmVtb3ZlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtLSAp
IHsKKworICAgICAgICAgICAgICAgIHZhciBpZHggPSBmYWNlSW5kaWNlc1RvUmVtb3ZlWyBpIF07
CisKKyAgICAgICAgICAgICAgICB0aGlzLmZhY2VzLnNwbGljZSggaWR4LCAxICk7CisKKyAgICAg
ICAgICAgICAgICBmb3IgKCBqID0gMCwgamwgPSB0aGlzLmZhY2VWZXJ0ZXhVdnMubGVuZ3RoOyBq
IDwgamw7IGogKysgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWNlVmVydGV4VXZz
WyBqIF0uc3BsaWNlKCBpZHgsIDEgKTsKKworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICB2YXIgZ3JvdXBzID0gdGhpcy5ncm91cHM7CisgICAgICAgICAg
ICAvLyBVc2UgdW5pcXVlIHNldCBvZiB2ZXJ0aWNlcwogCi0gICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDAsIGwgPSBncm91cHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgICAgIHZh
ciBkaWZmID0gdGhpcy52ZXJ0aWNlcy5sZW5ndGggLSB1bmlxdWUubGVuZ3RoOworICAgICAgICAg
ICAgdGhpcy52ZXJ0aWNlcyA9IHVuaXF1ZTsKKyAgICAgICAgICAgIHJldHVybiBkaWZmOwogCi0g
ICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gZ3JvdXBzWyBpIF07Ci0gICAgICAgICAgICAgICAg
Z2VvbWV0cnkyLmFkZEdyb3VwKCBncm91cC5zdGFydCwgZ3JvdXAuY291bnQsIGdyb3VwLm1hdGVy
aWFsSW5kZXggKTsKKyAgICAgICAgfSwKKworICAgICAgICBzZXRGcm9tUG9pbnRzOiBmdW5jdGlv
biAoIHBvaW50cyApIHsKKworICAgICAgICAgICAgdGhpcy52ZXJ0aWNlcyA9IFtdOworCisgICAg
ICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBwb2ludHMubGVuZ3RoOyBpIDwgbDsgaSArKyAp
IHsKKworICAgICAgICAgICAgICAgIHZhciBwb2ludCA9IHBvaW50c1sgaSBdOworICAgICAgICAg
ICAgICAgIHRoaXMudmVydGljZXMucHVzaCggbmV3IFZlY3RvcjMoIHBvaW50LngsIHBvaW50Lnks
IHBvaW50LnogfHwgMCApICk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJu
IGdlb21ldHJ5MjsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworCisgICAgICAgIH0sCisKKyAg
ICAgICAgc29ydEZhY2VzQnlNYXRlcmlhbEluZGV4OiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAg
ICAgIHZhciBmYWNlcyA9IHRoaXMuZmFjZXM7CisgICAgICAgICAgICB2YXIgbGVuZ3RoID0gZmFj
ZXMubGVuZ3RoOworCisgICAgICAgICAgICAvLyB0YWcgZmFjZXMKKworICAgICAgICAgICAgZm9y
ICggdmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICsrICkgeworCisgICAgICAgICAgICAgICAgZmFj
ZXNbIGkgXS5faWQgPSBpOworCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHNvcnQg
ZmFjZXMKKworICAgICAgICAgICAgZnVuY3Rpb24gbWF0ZXJpYWxJbmRleFNvcnQoIGEsIGIgKSB7
CisKKyAgICAgICAgICAgICAgICByZXR1cm4gYS5tYXRlcmlhbEluZGV4IC0gYi5tYXRlcmlhbElu
ZGV4OworCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZhY2VzLnNvcnQoIG1hdGVyaWFs
SW5kZXhTb3J0ICk7CisKKyAgICAgICAgICAgIC8vIHNvcnQgdXZzCisKKyAgICAgICAgICAgIHZh
ciB1dnMxID0gdGhpcy5mYWNlVmVydGV4VXZzWyAwIF07CisgICAgICAgICAgICB2YXIgdXZzMiA9
IHRoaXMuZmFjZVZlcnRleFV2c1sgMSBdOworCisgICAgICAgICAgICB2YXIgbmV3VXZzMSwgbmV3
VXZzMjsKKworICAgICAgICAgICAgaWYgKCB1dnMxICYmIHV2czEubGVuZ3RoID09PSBsZW5ndGgg
KSBuZXdVdnMxID0gW107CisgICAgICAgICAgICBpZiAoIHV2czIgJiYgdXZzMi5sZW5ndGggPT09
IGxlbmd0aCApIG5ld1V2czIgPSBbXTsKKworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpICsrICkgeworCisgICAgICAgICAgICAgICAgdmFyIGlkID0gZmFjZXNbIGkg
XS5faWQ7CisKKyAgICAgICAgICAgICAgICBpZiAoIG5ld1V2czEgKSBuZXdVdnMxLnB1c2goIHV2
czFbIGlkIF0gKTsKKyAgICAgICAgICAgICAgICBpZiAoIG5ld1V2czIgKSBuZXdVdnMyLnB1c2go
IHV2czJbIGlkIF0gKTsKKworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIG5ld1V2
czEgKSB0aGlzLmZhY2VWZXJ0ZXhVdnNbIDAgXSA9IG5ld1V2czE7CisgICAgICAgICAgICBpZiAo
IG5ld1V2czIgKSB0aGlzLmZhY2VWZXJ0ZXhVdnNbIDEgXSA9IG5ld1V2czI7CiAKICAgICAgICAg
fSwKIApAQCAtMTIwNjcsMTcgKzEyNDAwLDE2IEBACiAgICAgICAgICAgICB2YXIgZGF0YSA9IHsK
ICAgICAgICAgICAgICAgICBtZXRhZGF0YTogewogICAgICAgICAgICAgICAgICAgICB2ZXJzaW9u
OiA0LjUsCi0gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCdWZmZXJHZW9tZXRyeScsCi0gICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogJ0J1ZmZlckdlb21ldHJ5LnRvSlNPTicKKyAgICAg
ICAgICAgICAgICAgICAgdHlwZTogJ0dlb21ldHJ5JywKKyAgICAgICAgICAgICAgICAgICAgZ2Vu
ZXJhdG9yOiAnR2VvbWV0cnkudG9KU09OJwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH07CiAKLSAgICAgICAgICAgIC8vIHN0YW5kYXJkIEJ1ZmZlckdlb21ldHJ5IHNlcmlhbGl6YXRp
b24KKyAgICAgICAgICAgIC8vIHN0YW5kYXJkIEdlb21ldHJ5IHNlcmlhbGl6YXRpb24KIAogICAg
ICAgICAgICAgZGF0YS51dWlkID0gdGhpcy51dWlkOwogICAgICAgICAgICAgZGF0YS50eXBlID0g
dGhpcy50eXBlOwogICAgICAgICAgICAgaWYgKCB0aGlzLm5hbWUgIT09ICcnICkgZGF0YS5uYW1l
ID0gdGhpcy5uYW1lOwotICAgICAgICAgICAgaWYgKCBPYmplY3Qua2V5cyggdGhpcy51c2VyRGF0
YSApLmxlbmd0aCA+IDAgKSBkYXRhLnVzZXJEYXRhID0gdGhpcy51c2VyRGF0YTsKIAogICAgICAg
ICAgICAgaWYgKCB0aGlzLnBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCApIHsKIApAQCAtMTIwOTMs
NTcgKzEyNDI1LDE2NSBAQAogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGRhdGEuZGF0
YSA9IHsgYXR0cmlidXRlczoge30gfTsKKyAgICAgICAgICAgIHZhciB2ZXJ0aWNlcyA9IFtdOwog
Ci0gICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4OworICAgICAgICAgICAgZm9yICgg
dmFyIGkgPSAwOyBpIDwgdGhpcy52ZXJ0aWNlcy5sZW5ndGg7IGkgKysgKSB7CiAKLSAgICAgICAg
ICAgIGlmICggaW5kZXggIT09IG51bGwgKSB7CisgICAgICAgICAgICAgICAgdmFyIHZlcnRleCA9
IHRoaXMudmVydGljZXNbIGkgXTsKKyAgICAgICAgICAgICAgICB2ZXJ0aWNlcy5wdXNoKCB2ZXJ0
ZXgueCwgdmVydGV4LnksIHZlcnRleC56ICk7CiAKLSAgICAgICAgICAgICAgICB2YXIgYXJyYXkg
PSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCggaW5kZXguYXJyYXkgKTsKKyAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgIGRhdGEuZGF0YS5pbmRleCA9IHsKLSAgICAgICAgICAgICAg
ICAgICAgdHlwZTogaW5kZXguYXJyYXkuY29uc3RydWN0b3IubmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgYXJyYXk6IGFycmF5Ci0gICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHZhciBm
YWNlcyA9IFtdOworICAgICAgICAgICAgdmFyIG5vcm1hbHMgPSBbXTsKKyAgICAgICAgICAgIHZh
ciBub3JtYWxzSGFzaCA9IHt9OworICAgICAgICAgICAgdmFyIGNvbG9ycyA9IFtdOworICAgICAg
ICAgICAgdmFyIGNvbG9yc0hhc2ggPSB7fTsKKyAgICAgICAgICAgIHZhciB1dnMgPSBbXTsKKyAg
ICAgICAgICAgIHZhciB1dnNIYXNoID0ge307CisKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0g
MDsgaSA8IHRoaXMuZmFjZXMubGVuZ3RoOyBpICsrICkgeworCisgICAgICAgICAgICAgICAgdmFy
IGZhY2UgPSB0aGlzLmZhY2VzWyBpIF07CisKKyAgICAgICAgICAgICAgICB2YXIgaGFzTWF0ZXJp
YWwgPSB0cnVlOworICAgICAgICAgICAgICAgIHZhciBoYXNGYWNlVXYgPSBmYWxzZTsgLy8gZGVw
cmVjYXRlZAorICAgICAgICAgICAgICAgIHZhciBoYXNGYWNlVmVydGV4VXYgPSB0aGlzLmZhY2VW
ZXJ0ZXhVdnNbIDAgXVsgaSBdICE9PSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgdmFyIGhh
c0ZhY2VOb3JtYWwgPSBmYWNlLm5vcm1hbC5sZW5ndGgoKSA+IDA7CisgICAgICAgICAgICAgICAg
dmFyIGhhc0ZhY2VWZXJ0ZXhOb3JtYWwgPSBmYWNlLnZlcnRleE5vcm1hbHMubGVuZ3RoID4gMDsK
KyAgICAgICAgICAgICAgICB2YXIgaGFzRmFjZUNvbG9yID0gZmFjZS5jb2xvci5yICE9PSAxIHx8
IGZhY2UuY29sb3IuZyAhPT0gMSB8fCBmYWNlLmNvbG9yLmIgIT09IDE7CisgICAgICAgICAgICAg
ICAgdmFyIGhhc0ZhY2VWZXJ0ZXhDb2xvciA9IGZhY2UudmVydGV4Q29sb3JzLmxlbmd0aCA+IDA7
CisKKyAgICAgICAgICAgICAgICB2YXIgZmFjZVR5cGUgPSAwOworCisgICAgICAgICAgICAgICAg
ZmFjZVR5cGUgPSBzZXRCaXQoIGZhY2VUeXBlLCAwLCAwICk7IC8vIGlzUXVhZAorICAgICAgICAg
ICAgICAgIGZhY2VUeXBlID0gc2V0Qml0KCBmYWNlVHlwZSwgMSwgaGFzTWF0ZXJpYWwgKTsKKyAg
ICAgICAgICAgICAgICBmYWNlVHlwZSA9IHNldEJpdCggZmFjZVR5cGUsIDIsIGhhc0ZhY2VVdiAp
OworICAgICAgICAgICAgICAgIGZhY2VUeXBlID0gc2V0Qml0KCBmYWNlVHlwZSwgMywgaGFzRmFj
ZVZlcnRleFV2ICk7CisgICAgICAgICAgICAgICAgZmFjZVR5cGUgPSBzZXRCaXQoIGZhY2VUeXBl
LCA0LCBoYXNGYWNlTm9ybWFsICk7CisgICAgICAgICAgICAgICAgZmFjZVR5cGUgPSBzZXRCaXQo
IGZhY2VUeXBlLCA1LCBoYXNGYWNlVmVydGV4Tm9ybWFsICk7CisgICAgICAgICAgICAgICAgZmFj
ZVR5cGUgPSBzZXRCaXQoIGZhY2VUeXBlLCA2LCBoYXNGYWNlQ29sb3IgKTsKKyAgICAgICAgICAg
ICAgICBmYWNlVHlwZSA9IHNldEJpdCggZmFjZVR5cGUsIDcsIGhhc0ZhY2VWZXJ0ZXhDb2xvciAp
OworCisgICAgICAgICAgICAgICAgZmFjZXMucHVzaCggZmFjZVR5cGUgKTsKKyAgICAgICAgICAg
ICAgICBmYWNlcy5wdXNoKCBmYWNlLmEsIGZhY2UuYiwgZmFjZS5jICk7CisgICAgICAgICAgICAg
ICAgZmFjZXMucHVzaCggZmFjZS5tYXRlcmlhbEluZGV4ICk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoIGhhc0ZhY2VWZXJ0ZXhVdiApIHsKKworICAgICAgICAgICAgICAgICAgICB2YXIgZmFjZVZl
cnRleFV2cyA9IHRoaXMuZmFjZVZlcnRleFV2c1sgMCBdWyBpIF07CisKKyAgICAgICAgICAgICAg
ICAgICAgZmFjZXMucHVzaCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldFV2SW5kZXgoIGZh
Y2VWZXJ0ZXhVdnNbIDAgXSApLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VXZJbmRleCgg
ZmFjZVZlcnRleFV2c1sgMSBdICksCisgICAgICAgICAgICAgICAgICAgICAgICBnZXRVdkluZGV4
KCBmYWNlVmVydGV4VXZzWyAyIF0gKQorICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCBoYXNGYWNlTm9ybWFsICkgeworCisg
ICAgICAgICAgICAgICAgICAgIGZhY2VzLnB1c2goIGdldE5vcm1hbEluZGV4KCBmYWNlLm5vcm1h
bCApICk7CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIGhhc0Zh
Y2VWZXJ0ZXhOb3JtYWwgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRleE5vcm1h
bHMgPSBmYWNlLnZlcnRleE5vcm1hbHM7CisKKyAgICAgICAgICAgICAgICAgICAgZmFjZXMucHVz
aCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldE5vcm1hbEluZGV4KCB2ZXJ0ZXhOb3JtYWxz
WyAwIF0gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldE5vcm1hbEluZGV4KCB2ZXJ0ZXhO
b3JtYWxzWyAxIF0gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldE5vcm1hbEluZGV4KCB2
ZXJ0ZXhOb3JtYWxzWyAyIF0gKQorICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCBoYXNGYWNlQ29sb3IgKSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgZmFjZXMucHVzaCggZ2V0Q29sb3JJbmRleCggZmFjZS5jb2xvciApICk7
CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIGhhc0ZhY2VWZXJ0
ZXhDb2xvciApIHsKKworICAgICAgICAgICAgICAgICAgICB2YXIgdmVydGV4Q29sb3JzID0gZmFj
ZS52ZXJ0ZXhDb2xvcnM7CisKKyAgICAgICAgICAgICAgICAgICAgZmFjZXMucHVzaCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdldENvbG9ySW5kZXgoIHZlcnRleENvbG9yc1sgMCBdICksCisg
ICAgICAgICAgICAgICAgICAgICAgICBnZXRDb2xvckluZGV4KCB2ZXJ0ZXhDb2xvcnNbIDEgXSAp
LAorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29sb3JJbmRleCggdmVydGV4Q29sb3JzWyAy
IF0gKQorICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVz
OworICAgICAgICAgICAgZnVuY3Rpb24gc2V0Qml0KCB2YWx1ZSwgcG9zaXRpb24sIGVuYWJsZWQg
KSB7CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBrZXkgaW4gYXR0cmlidXRlcyApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZW5hYmxlZCA/IHZhbHVlIHwgKCAxIDw8IHBvc2l0aW9uICkgOiB2
YWx1ZSAmICggfiAoIDEgPDwgcG9zaXRpb24gKSApOwogCi0gICAgICAgICAgICAgICAgdmFyIGF0
dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbIGtleSBdOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBmdW5jdGlvbiBnZXROb3JtYWxJbmRleCggbm9ybWFsICkgewogCi0gICAgICAgICAgICAgICAg
dmFyIGFycmF5ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIGF0dHJpYnV0ZS5hcnJheSAp
OworICAgICAgICAgICAgICAgIHZhciBoYXNoID0gbm9ybWFsLngudG9TdHJpbmcoKSArIG5vcm1h
bC55LnRvU3RyaW5nKCkgKyBub3JtYWwuei50b1N0cmluZygpOwogCi0gICAgICAgICAgICAgICAg
ZGF0YS5kYXRhLmF0dHJpYnV0ZXNbIGtleSBdID0gewotICAgICAgICAgICAgICAgICAgICBpdGVt
U2l6ZTogYXR0cmlidXRlLml0ZW1TaXplLAotICAgICAgICAgICAgICAgICAgICB0eXBlOiBhdHRy
aWJ1dGUuYXJyYXkuY29uc3RydWN0b3IubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgYXJyYXk6
IGFycmF5LAotICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkOiBhdHRyaWJ1dGUubm9ybWFs
aXplZAotICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgaWYgKCBub3JtYWxzSGFz
aFsgaGFzaCBdICE9PSB1bmRlZmluZWQgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vcm1hbHNIYXNoWyBoYXNoIF07CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBub3JtYWxzSGFzaFsgaGFzaCBdID0gbm9ybWFscy5sZW5ndGggLyAzOworICAgICAgICAg
ICAgICAgIG5vcm1hbHMucHVzaCggbm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueiApOworCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbHNIYXNoWyBoYXNoIF07CiAKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgdmFyIGdyb3VwcyA9IHRoaXMuZ3JvdXBzOworICAgICAgICAgICAg
ZnVuY3Rpb24gZ2V0Q29sb3JJbmRleCggY29sb3IgKSB7CiAKLSAgICAgICAgICAgIGlmICggZ3Jv
dXBzLmxlbmd0aCA+IDAgKSB7CisgICAgICAgICAgICAgICAgdmFyIGhhc2ggPSBjb2xvci5yLnRv
U3RyaW5nKCkgKyBjb2xvci5nLnRvU3RyaW5nKCkgKyBjb2xvci5iLnRvU3RyaW5nKCk7CiAKLSAg
ICAgICAgICAgICAgICBkYXRhLmRhdGEuZ3JvdXBzID0gSlNPTi5wYXJzZSggSlNPTi5zdHJpbmdp
ZnkoIGdyb3VwcyApICk7CisgICAgICAgICAgICAgICAgaWYgKCBjb2xvcnNIYXNoWyBoYXNoIF0g
IT09IHVuZGVmaW5lZCApIHsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sb3JzSGFz
aFsgaGFzaCBdOworCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY29sb3Jz
SGFzaFsgaGFzaCBdID0gY29sb3JzLmxlbmd0aDsKKyAgICAgICAgICAgICAgICBjb2xvcnMucHVz
aCggY29sb3IuZ2V0SGV4KCkgKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBjb2xvcnNIYXNo
WyBoYXNoIF07CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIGJvdW5kaW5nU3Bo
ZXJlID0gdGhpcy5ib3VuZGluZ1NwaGVyZTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGdldFV2SW5k
ZXgoIHV2ICkgewogCi0gICAgICAgICAgICBpZiAoIGJvdW5kaW5nU3BoZXJlICE9PSBudWxsICkg
eworICAgICAgICAgICAgICAgIHZhciBoYXNoID0gdXYueC50b1N0cmluZygpICsgdXYueS50b1N0
cmluZygpOwogCi0gICAgICAgICAgICAgICAgZGF0YS5kYXRhLmJvdW5kaW5nU3BoZXJlID0gewot
ICAgICAgICAgICAgICAgICAgICBjZW50ZXI6IGJvdW5kaW5nU3BoZXJlLmNlbnRlci50b0FycmF5
KCksCi0gICAgICAgICAgICAgICAgICAgIHJhZGl1czogYm91bmRpbmdTcGhlcmUucmFkaXVzCi0g
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBpZiAoIHV2c0hhc2hbIGhhc2ggXSAh
PT0gdW5kZWZpbmVkICkgeworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB1dnNIYXNoWyBo
YXNoIF07CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB1dnNIYXNoWyBo
YXNoIF0gPSB1dnMubGVuZ3RoIC8gMjsKKyAgICAgICAgICAgICAgICB1dnMucHVzaCggdXYueCwg
dXYueSApOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHV2c0hhc2hbIGhhc2ggXTsKIAogICAg
ICAgICAgICAgfQogCisgICAgICAgICAgICBkYXRhLmRhdGEgPSB7fTsKKworICAgICAgICAgICAg
ZGF0YS5kYXRhLnZlcnRpY2VzID0gdmVydGljZXM7CisgICAgICAgICAgICBkYXRhLmRhdGEubm9y
bWFscyA9IG5vcm1hbHM7CisgICAgICAgICAgICBpZiAoIGNvbG9ycy5sZW5ndGggPiAwICkgZGF0
YS5kYXRhLmNvbG9ycyA9IGNvbG9yczsKKyAgICAgICAgICAgIGlmICggdXZzLmxlbmd0aCA+IDAg
KSBkYXRhLmRhdGEudXZzID0gWyB1dnMgXTsgLy8gdGVtcG9yYWwgYmFja3dhcmQgY29tcGF0aWJp
bGl0eQorICAgICAgICAgICAgZGF0YS5kYXRhLmZhY2VzID0gZmFjZXM7CisKICAgICAgICAgICAg
IHJldHVybiBkYXRhOwogCiAgICAgICAgIH0sCkBAIC0xMjE3NCwyMCArMTI2MTQsMjUgQEAKICAg
ICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7CiAg
ICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgcmV0dXJuIG5ldyBCdWZmZXJHZW9tZXRyeSgp
LmNvcHkoIHRoaXMgKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgR2VvbWV0cnkoKS5jb3B5KCB0
aGlzICk7CiAKICAgICAgICAgfSwKIAogICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHNvdXJjZSAp
IHsKIAotICAgICAgICAgICAgdmFyIG5hbWUsIGksIGw7CisgICAgICAgICAgICB2YXIgaSwgaWws
IGosIGpsLCBrLCBrbDsKIAogICAgICAgICAgICAgLy8gcmVzZXQKIAotICAgICAgICAgICAgdGhp
cy5pbmRleCA9IG51bGw7Ci0gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSB7fTsKLSAgICAg
ICAgICAgIHRoaXMubW9ycGhBdHRyaWJ1dGVzID0ge307Ci0gICAgICAgICAgICB0aGlzLmdyb3Vw
cyA9IFtdOworICAgICAgICAgICAgdGhpcy52ZXJ0aWNlcyA9IFtdOworICAgICAgICAgICAgdGhp
cy5jb2xvcnMgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuZmFjZXMgPSBbXTsKKyAgICAgICAgICAg
IHRoaXMuZmFjZVZlcnRleFV2cyA9IFtbXV07CisgICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0
cyA9IFtdOworICAgICAgICAgICAgdGhpcy5tb3JwaE5vcm1hbHMgPSBbXTsKKyAgICAgICAgICAg
IHRoaXMuc2tpbldlaWdodHMgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuc2tpbkluZGljZXMgPSBb
XTsKKyAgICAgICAgICAgIHRoaXMubGluZURpc3RhbmNlcyA9IFtdOwogICAgICAgICAgICAgdGhp
cy5ib3VuZGluZ0JveCA9IG51bGw7CiAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJlID0g
bnVsbDsKIApAQCAtMTIxOTUsMTU1ICsxMjY0MCwyODMgQEAKIAogICAgICAgICAgICAgdGhpcy5u
YW1lID0gc291cmNlLm5hbWU7CiAKLSAgICAgICAgICAgIC8vIGluZGV4CisgICAgICAgICAgICAv
LyB2ZXJ0aWNlcwogCi0gICAgICAgICAgICB2YXIgaW5kZXggPSBzb3VyY2UuaW5kZXg7CisgICAg
ICAgICAgICB2YXIgdmVydGljZXMgPSBzb3VyY2UudmVydGljZXM7CiAKLSAgICAgICAgICAgIGlm
ICggaW5kZXggIT09IG51bGwgKSB7CisgICAgICAgICAgICBmb3IgKCBpID0gMCwgaWwgPSB2ZXJ0
aWNlcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgIHRoaXMuc2V0
SW5kZXgoIGluZGV4LmNsb25lKCkgKTsKKyAgICAgICAgICAgICAgICB0aGlzLnZlcnRpY2VzLnB1
c2goIHZlcnRpY2VzWyBpIF0uY2xvbmUoKSApOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIC8vIGF0dHJpYnV0ZXMKKyAgICAgICAgICAgIC8vIGNvbG9ycwogCi0gICAgICAgICAgICB2
YXIgYXR0cmlidXRlcyA9IHNvdXJjZS5hdHRyaWJ1dGVzOworICAgICAgICAgICAgdmFyIGNvbG9y
cyA9IHNvdXJjZS5jb2xvcnM7CiAKLSAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gYXR0cmlidXRl
cyApIHsKKyAgICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IGNvbG9ycy5sZW5ndGg7IGkgPCBp
bDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVz
WyBuYW1lIF07Ci0gICAgICAgICAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoIG5hbWUsIGF0dHJp
YnV0ZS5jbG9uZSgpICk7CisgICAgICAgICAgICAgICAgdGhpcy5jb2xvcnMucHVzaCggY29sb3Jz
WyBpIF0uY2xvbmUoKSApOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIG1vcnBo
IGF0dHJpYnV0ZXMKKyAgICAgICAgICAgIC8vIGZhY2VzCiAKLSAgICAgICAgICAgIHZhciBtb3Jw
aEF0dHJpYnV0ZXMgPSBzb3VyY2UubW9ycGhBdHRyaWJ1dGVzOworICAgICAgICAgICAgdmFyIGZh
Y2VzID0gc291cmNlLmZhY2VzOwogCi0gICAgICAgICAgICBmb3IgKCBuYW1lIGluIG1vcnBoQXR0
cmlidXRlcyApIHsKKyAgICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IGZhY2VzLmxlbmd0aDsg
aSA8IGlsOyBpICsrICkgewogCi0gICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gW107Ci0gICAg
ICAgICAgICAgICAgdmFyIG1vcnBoQXR0cmlidXRlID0gbW9ycGhBdHRyaWJ1dGVzWyBuYW1lIF07
IC8vIG1vcnBoQXR0cmlidXRlOiBhcnJheSBvZiBGbG9hdDMyQnVmZmVyQXR0cmlidXRlcworICAg
ICAgICAgICAgICAgIHRoaXMuZmFjZXMucHVzaCggZmFjZXNbIGkgXS5jbG9uZSgpICk7CiAKLSAg
ICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IG1vcnBoQXR0cmlidXRlLmxlbmd0aDsgaSA8
IGw7IGkgKysgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgYXJyYXku
cHVzaCggbW9ycGhBdHRyaWJ1dGVbIGkgXS5jbG9uZSgpICk7CisgICAgICAgICAgICAvLyBmYWNl
IHZlcnRleCB1dnMKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoIGkgPSAw
LCBpbCA9IHNvdXJjZS5mYWNlVmVydGV4VXZzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewogCi0g
ICAgICAgICAgICAgICAgdGhpcy5tb3JwaEF0dHJpYnV0ZXNbIG5hbWUgXSA9IGFycmF5OworICAg
ICAgICAgICAgICAgIHZhciBmYWNlVmVydGV4VXZzID0gc291cmNlLmZhY2VWZXJ0ZXhVdnNbIGkg
XTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICggdGhpcy5mYWNlVmVydGV4
VXZzWyBpIF0gPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgLy8gZ3JvdXBzCisgICAg
ICAgICAgICAgICAgICAgIHRoaXMuZmFjZVZlcnRleFV2c1sgaSBdID0gW107CiAKLSAgICAgICAg
ICAgIHZhciBncm91cHMgPSBzb3VyY2UuZ3JvdXBzOworICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBncm91cHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsK
KyAgICAgICAgICAgICAgICBmb3IgKCBqID0gMCwgamwgPSBmYWNlVmVydGV4VXZzLmxlbmd0aDsg
aiA8IGpsOyBqICsrICkgewogCi0gICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gZ3JvdXBzWyBp
IF07Ci0gICAgICAgICAgICAgICAgdGhpcy5hZGRHcm91cCggZ3JvdXAuc3RhcnQsIGdyb3VwLmNv
dW50LCBncm91cC5tYXRlcmlhbEluZGV4ICk7CisgICAgICAgICAgICAgICAgICAgIHZhciB1dnMg
PSBmYWNlVmVydGV4VXZzWyBqIF0sIHV2c0NvcHkgPSBbXTsKIAotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBmb3IgKCBrID0gMCwga2wgPSB1dnMubGVuZ3RoOyBrIDwga2w7IGsg
KysgKSB7CiAKLSAgICAgICAgICAgIC8vIGJvdW5kaW5nIGJveAorICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHV2ID0gdXZzWyBrIF07CiAKLSAgICAgICAgICAgIHZhciBib3VuZGluZ0JveCA9
IHNvdXJjZS5ib3VuZGluZ0JveDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHV2c0NvcHkucHVz
aCggdXYuY2xvbmUoKSApOwogCi0gICAgICAgICAgICBpZiAoIGJvdW5kaW5nQm94ICE9PSBudWxs
ICkgeworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0aGlzLmJvdW5k
aW5nQm94ID0gYm91bmRpbmdCb3guY2xvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5m
YWNlVmVydGV4VXZzWyBpIF0ucHVzaCggdXZzQ29weSApOworCisgICAgICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIGJvdW5kaW5nIHNwaGVyZQorICAgICAg
ICAgICAgLy8gbW9ycGggdGFyZ2V0cwogCi0gICAgICAgICAgICB2YXIgYm91bmRpbmdTcGhlcmUg
PSBzb3VyY2UuYm91bmRpbmdTcGhlcmU7CisgICAgICAgICAgICB2YXIgbW9ycGhUYXJnZXRzID0g
c291cmNlLm1vcnBoVGFyZ2V0czsKIAotICAgICAgICAgICAgaWYgKCBib3VuZGluZ1NwaGVyZSAh
PT0gbnVsbCApIHsKKyAgICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IG1vcnBoVGFyZ2V0cy5s
ZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdT
cGhlcmUgPSBib3VuZGluZ1NwaGVyZS5jbG9uZSgpOworICAgICAgICAgICAgICAgIHZhciBtb3Jw
aFRhcmdldCA9IHt9OworICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0Lm5hbWUgPSBtb3JwaFRh
cmdldHNbIGkgXS5uYW1lOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gdmVy
dGljZXMKIAotICAgICAgICAgICAgLy8gZHJhdyByYW5nZQorICAgICAgICAgICAgICAgIGlmICgg
bW9ycGhUYXJnZXRzWyBpIF0udmVydGljZXMgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAg
ICAgdGhpcy5kcmF3UmFuZ2Uuc3RhcnQgPSBzb3VyY2UuZHJhd1JhbmdlLnN0YXJ0OwotICAgICAg
ICAgICAgdGhpcy5kcmF3UmFuZ2UuY291bnQgPSBzb3VyY2UuZHJhd1JhbmdlLmNvdW50OworICAg
ICAgICAgICAgICAgICAgICBtb3JwaFRhcmdldC52ZXJ0aWNlcyA9IFtdOwogCi0gICAgICAgICAg
ICAvLyB1c2VyIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgZm9yICggaiA9IDAsIGpsID0gbW9y
cGhUYXJnZXRzWyBpIF0udmVydGljZXMubGVuZ3RoOyBqIDwgamw7IGogKysgKSB7CiAKLSAgICAg
ICAgICAgIHRoaXMudXNlckRhdGEgPSBzb3VyY2UudXNlckRhdGE7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtb3JwaFRhcmdldC52ZXJ0aWNlcy5wdXNoKCBtb3JwaFRhcmdldHNbIGkgXS52ZXJ0
aWNlc1sgaiBdLmNsb25lKCkgKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgLy8gbm9ybWFscwogCi0g
ICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoIHsgdHlwZTogJ2Rpc3Bvc2UnIH0gKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIG1vcnBoVGFyZ2V0c1sgaSBdLm5vcm1hbHMgIT09IHVuZGVmaW5l
ZCApIHsKIAotICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0Lm5vcm1h
bHMgPSBbXTsKIAotICAgIH0gKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggaiA9IDAsIGps
ID0gbW9ycGhUYXJnZXRzWyBpIF0ubm9ybWFscy5sZW5ndGg7IGogPCBqbDsgaiArKyApIHsKIAot
ICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAg
ICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29tL011Z2VuODcKLSAgICAgKi8K
KyAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0Lm5vcm1hbHMucHVzaCggbW9ycGhU
YXJnZXRzWyBpIF0ubm9ybWFsc1sgaiBdLmNsb25lKCkgKTsKIAotICAgIC8vIEJveEdlb21ldHJ5
CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgIGZ1bmN0aW9uIEJveEdlb21ldHJ5KCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCwgd2lkdGhTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMsIGRlcHRoU2Vn
bWVudHMgKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIEdlb21ldHJ5LmNhbGwoIHRo
aXMgKTsKKyAgICAgICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0cy5wdXNoKCBtb3JwaFRhcmdl
dCApOwogCi0gICAgICAgIHRoaXMudHlwZSA9ICdCb3hHZW9tZXRyeSc7CisgICAgICAgICAgICB9
CiAKLSAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gewotICAgICAgICAgICAgd2lkdGg6IHdpZHRo
LAotICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsCi0gICAgICAgICAgICBkZXB0aDogZGVwdGgs
Ci0gICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiB3aWR0aFNlZ21lbnRzLAotICAgICAgICAgICAg
aGVpZ2h0U2VnbWVudHM6IGhlaWdodFNlZ21lbnRzLAotICAgICAgICAgICAgZGVwdGhTZWdtZW50
czogZGVwdGhTZWdtZW50cwotICAgICAgICB9OworICAgICAgICAgICAgLy8gbW9ycGggbm9ybWFs
cwogCi0gICAgICAgIHRoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KCBuZXcgQm94QnVmZmVyR2VvbWV0
cnkoIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCB3aWR0aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cywg
ZGVwdGhTZWdtZW50cyApICk7Ci0gICAgICAgIHRoaXMubWVyZ2VWZXJ0aWNlcygpOworICAgICAg
ICAgICAgdmFyIG1vcnBoTm9ybWFscyA9IHNvdXJjZS5tb3JwaE5vcm1hbHM7CiAKLSAgICB9Cisg
ICAgICAgICAgICBmb3IgKCBpID0gMCwgaWwgPSBtb3JwaE5vcm1hbHMubGVuZ3RoOyBpIDwgaWw7
IGkgKysgKSB7CiAKLSAgICBCb3hHZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBH
ZW9tZXRyeS5wcm90b3R5cGUgKTsKLSAgICBCb3hHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0
b3IgPSBCb3hHZW9tZXRyeTsKKyAgICAgICAgICAgICAgICB2YXIgbW9ycGhOb3JtYWwgPSB7fTsK
IAotICAgIC8vIEJveEJ1ZmZlckdlb21ldHJ5CisgICAgICAgICAgICAgICAgLy8gdmVydGV4IG5v
cm1hbHMKIAotICAgIGZ1bmN0aW9uIEJveEJ1ZmZlckdlb21ldHJ5KCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgd2lkdGhTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMsIGRlcHRoU2VnbWVudHMgKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCBtb3JwaE5vcm1hbHNbIGkgXS52ZXJ0ZXhOb3JtYWxzICE9PSB1
bmRlZmluZWQgKSB7CiAKLSAgICAgICAgQnVmZmVyR2VvbWV0cnkuY2FsbCggdGhpcyApOworICAg
ICAgICAgICAgICAgICAgICBtb3JwaE5vcm1hbC52ZXJ0ZXhOb3JtYWxzID0gW107CiAKLSAgICAg
ICAgdGhpcy50eXBlID0gJ0JveEJ1ZmZlckdlb21ldHJ5JzsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICggaiA9IDAsIGpsID0gbW9ycGhOb3JtYWxzWyBpIF0udmVydGV4Tm9ybWFscy5sZW5ndGg7
IGogPCBqbDsgaiArKyApIHsKIAotICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSB7Ci0gICAgICAg
ICAgICB3aWR0aDogd2lkdGgsCi0gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCwKLSAgICAgICAg
ICAgIGRlcHRoOiBkZXB0aCwKLSAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IHdpZHRoU2VnbWVu
dHMsCi0gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHMsCi0gICAgICAg
ICAgICBkZXB0aFNlZ21lbnRzOiBkZXB0aFNlZ21lbnRzCi0gICAgICAgIH07CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgc3JjVmVydGV4Tm9ybWFsID0gbW9ycGhOb3JtYWxzWyBpIF0udmVy
dGV4Tm9ybWFsc1sgaiBdOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc3RWZXJ0ZXhO
b3JtYWwgPSB7fTsKIAotICAgICAgICB2YXIgc2NvcGUgPSB0aGlzOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFZlcnRleE5vcm1hbC5hID0gc3JjVmVydGV4Tm9ybWFsLmEuY2xvbmUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RWZXJ0ZXhOb3JtYWwuYiA9IHNyY1ZlcnRleE5v
cm1hbC5iLmNsb25lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0VmVydGV4Tm9ybWFs
LmMgPSBzcmNWZXJ0ZXhOb3JtYWwuYy5jbG9uZSgpOwogCi0gICAgICAgIHdpZHRoID0gd2lkdGgg
fHwgMTsKLSAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IDE7Ci0gICAgICAgIGRlcHRoID0gZGVw
dGggfHwgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBoTm9ybWFsLnZlcnRleE5vcm1h
bHMucHVzaCggZGVzdFZlcnRleE5vcm1hbCApOwogCi0gICAgICAgIC8vIHNlZ21lbnRzCisgICAg
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB3aWR0aFNlZ21lbnRzID0gTWF0aC5mbG9vcigg
d2lkdGhTZWdtZW50cyApIHx8IDE7Ci0gICAgICAgIGhlaWdodFNlZ21lbnRzID0gTWF0aC5mbG9v
ciggaGVpZ2h0U2VnbWVudHMgKSB8fCAxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIGZhY2Ugbm9ybWFscworCisgICAgICAgICAgICAgICAgaWYgKCBtb3JwaE5vcm1h
bHNbIGkgXS5mYWNlTm9ybWFscyAhPT0gdW5kZWZpbmVkICkgeworCisgICAgICAgICAgICAgICAg
ICAgIG1vcnBoTm9ybWFsLmZhY2VOb3JtYWxzID0gW107CisKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICggaiA9IDAsIGpsID0gbW9ycGhOb3JtYWxzWyBpIF0uZmFjZU5vcm1hbHMubGVuZ3RoOyBq
IDwgamw7IGogKysgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBoTm9ybWFsLmZh
Y2VOb3JtYWxzLnB1c2goIG1vcnBoTm9ybWFsc1sgaSBdLmZhY2VOb3JtYWxzWyBqIF0uY2xvbmUo
KSApOworCisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIHRoaXMubW9ycGhOb3JtYWxzLnB1c2goIG1vcnBoTm9ybWFsICk7CisKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gc2tpbiB3ZWlnaHRzCisKKyAgICAgICAgICAg
IHZhciBza2luV2VpZ2h0cyA9IHNvdXJjZS5za2luV2VpZ2h0czsKKworICAgICAgICAgICAgZm9y
ICggaSA9IDAsIGlsID0gc2tpbldlaWdodHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CisKKyAg
ICAgICAgICAgICAgICB0aGlzLnNraW5XZWlnaHRzLnB1c2goIHNraW5XZWlnaHRzWyBpIF0uY2xv
bmUoKSApOworCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHNraW4gaW5kaWNlcwor
CisgICAgICAgICAgICB2YXIgc2tpbkluZGljZXMgPSBzb3VyY2Uuc2tpbkluZGljZXM7CisKKyAg
ICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IHNraW5JbmRpY2VzLmxlbmd0aDsgaSA8IGlsOyBp
ICsrICkgeworCisgICAgICAgICAgICAgICAgdGhpcy5za2luSW5kaWNlcy5wdXNoKCBza2luSW5k
aWNlc1sgaSBdLmNsb25lKCkgKTsKKworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBs
aW5lIGRpc3RhbmNlcworCisgICAgICAgICAgICB2YXIgbGluZURpc3RhbmNlcyA9IHNvdXJjZS5s
aW5lRGlzdGFuY2VzOworCisgICAgICAgICAgICBmb3IgKCBpID0gMCwgaWwgPSBsaW5lRGlzdGFu
Y2VzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworCisgICAgICAgICAgICAgICAgdGhpcy5saW5l
RGlzdGFuY2VzLnB1c2goIGxpbmVEaXN0YW5jZXNbIGkgXSApOworCisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIGJvdW5kaW5nIGJveAorCisgICAgICAgICAgICB2YXIgYm91bmRpbmdC
b3ggPSBzb3VyY2UuYm91bmRpbmdCb3g7CisKKyAgICAgICAgICAgIGlmICggYm91bmRpbmdCb3gg
IT09IG51bGwgKSB7CisKKyAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gYm91bmRp
bmdCb3guY2xvbmUoKTsKKworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBib3VuZGlu
ZyBzcGhlcmUKKworICAgICAgICAgICAgdmFyIGJvdW5kaW5nU3BoZXJlID0gc291cmNlLmJvdW5k
aW5nU3BoZXJlOworCisgICAgICAgICAgICBpZiAoIGJvdW5kaW5nU3BoZXJlICE9PSBudWxsICkg
eworCisgICAgICAgICAgICAgICAgdGhpcy5ib3VuZGluZ1NwaGVyZSA9IGJvdW5kaW5nU3BoZXJl
LmNsb25lKCk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdXBkYXRlIGZsYWdz
CisKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudHNOZWVkVXBkYXRlID0gc291cmNlLmVsZW1lbnRz
TmVlZFVwZGF0ZTsKKyAgICAgICAgICAgIHRoaXMudmVydGljZXNOZWVkVXBkYXRlID0gc291cmNl
LnZlcnRpY2VzTmVlZFVwZGF0ZTsKKyAgICAgICAgICAgIHRoaXMudXZzTmVlZFVwZGF0ZSA9IHNv
dXJjZS51dnNOZWVkVXBkYXRlOworICAgICAgICAgICAgdGhpcy5ub3JtYWxzTmVlZFVwZGF0ZSA9
IHNvdXJjZS5ub3JtYWxzTmVlZFVwZGF0ZTsKKyAgICAgICAgICAgIHRoaXMuY29sb3JzTmVlZFVw
ZGF0ZSA9IHNvdXJjZS5jb2xvcnNOZWVkVXBkYXRlOworICAgICAgICAgICAgdGhpcy5saW5lRGlz
dGFuY2VzTmVlZFVwZGF0ZSA9IHNvdXJjZS5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZTsKKyAgICAg
ICAgICAgIHRoaXMuZ3JvdXBzTmVlZFVwZGF0ZSA9IHNvdXJjZS5ncm91cHNOZWVkVXBkYXRlOwor
CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKworICAgICAgICB9LAorCisgICAgICAgIGRpc3Bv
c2U6IGZ1bmN0aW9uICgpIHsKKworICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCB7IHR5
cGU6ICdkaXNwb3NlJyB9ICk7CisKKyAgICAgICAgfQorCisgICAgfSApOworCisgICAgLyoqCisg
ICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKiBAYXV0aG9y
IE11Z2VuODcgLyBodHRwczovL2dpdGh1Yi5jb20vTXVnZW44NworICAgICAqLworCisgICAgLy8g
Qm94R2VvbWV0cnkKKworICAgIGZ1bmN0aW9uIEJveEdlb21ldHJ5KCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgd2lkdGhTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMsIGRlcHRoU2VnbWVudHMgKSB7CisK
KyAgICAgICAgR2VvbWV0cnkuY2FsbCggdGhpcyApOworCisgICAgICAgIHRoaXMudHlwZSA9ICdC
b3hHZW9tZXRyeSc7CisKKyAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0geworICAgICAgICAgICAg
d2lkdGg6IHdpZHRoLAorICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsCisgICAgICAgICAgICBk
ZXB0aDogZGVwdGgsCisgICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiB3aWR0aFNlZ21lbnRzLAor
ICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IGhlaWdodFNlZ21lbnRzLAorICAgICAgICAgICAg
ZGVwdGhTZWdtZW50czogZGVwdGhTZWdtZW50cworICAgICAgICB9OworCisgICAgICAgIHRoaXMu
ZnJvbUJ1ZmZlckdlb21ldHJ5KCBuZXcgQm94QnVmZmVyR2VvbWV0cnkoIHdpZHRoLCBoZWlnaHQs
IGRlcHRoLCB3aWR0aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cywgZGVwdGhTZWdtZW50cyApICk7
CisgICAgICAgIHRoaXMubWVyZ2VWZXJ0aWNlcygpOworCisgICAgfQorCisgICAgQm94R2VvbWV0
cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggR2VvbWV0cnkucHJvdG90eXBlICk7CisgICAg
Qm94R2VvbWV0cnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQm94R2VvbWV0cnk7CisKKyAgICAv
LyBCb3hCdWZmZXJHZW9tZXRyeQorCisgICAgZnVuY3Rpb24gQm94QnVmZmVyR2VvbWV0cnkoIHdp
ZHRoLCBoZWlnaHQsIGRlcHRoLCB3aWR0aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cywgZGVwdGhT
ZWdtZW50cyApIHsKKworICAgICAgICBCdWZmZXJHZW9tZXRyeS5jYWxsKCB0aGlzICk7CisKKyAg
ICAgICAgdGhpcy50eXBlID0gJ0JveEJ1ZmZlckdlb21ldHJ5JzsKKworICAgICAgICB0aGlzLnBh
cmFtZXRlcnMgPSB7CisgICAgICAgICAgICB3aWR0aDogd2lkdGgsCisgICAgICAgICAgICBoZWln
aHQ6IGhlaWdodCwKKyAgICAgICAgICAgIGRlcHRoOiBkZXB0aCwKKyAgICAgICAgICAgIHdpZHRo
U2VnbWVudHM6IHdpZHRoU2VnbWVudHMsCisgICAgICAgICAgICBoZWlnaHRTZWdtZW50czogaGVp
Z2h0U2VnbWVudHMsCisgICAgICAgICAgICBkZXB0aFNlZ21lbnRzOiBkZXB0aFNlZ21lbnRzCisg
ICAgICAgIH07CisKKyAgICAgICAgdmFyIHNjb3BlID0gdGhpczsKKworICAgICAgICB3aWR0aCA9
IHdpZHRoIHx8IDE7CisgICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCAxOworICAgICAgICBkZXB0
aCA9IGRlcHRoIHx8IDE7CisKKyAgICAgICAgLy8gc2VnbWVudHMKKworICAgICAgICB3aWR0aFNl
Z21lbnRzID0gTWF0aC5mbG9vciggd2lkdGhTZWdtZW50cyApIHx8IDE7CisgICAgICAgIGhlaWdo
dFNlZ21lbnRzID0gTWF0aC5mbG9vciggaGVpZ2h0U2VnbWVudHMgKSB8fCAxOwogICAgICAgICBk
ZXB0aFNlZ21lbnRzID0gTWF0aC5mbG9vciggZGVwdGhTZWdtZW50cyApIHx8IDE7CiAKICAgICAg
ICAgLy8gYnVmZmVycwpAQCAtMTI0ODQsMjIwMSArMTMwNTcsMjQ2MyBAQAogICAgIEJveEJ1ZmZl
ckdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJveEJ1ZmZlckdlb21ldHJ5OwogCiAg
ICAgLyoqCi0gICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAg
KiBAYXV0aG9yIE11Z2VuODcgLyBodHRwczovL2dpdGh1Yi5jb20vTXVnZW44NworICAgICAqIFVu
aWZvcm0gVXRpbGl0aWVzCiAgICAgICovCiAKLSAgICAvLyBQbGFuZUdlb21ldHJ5CisgICAgZnVu
Y3Rpb24gY2xvbmVVbmlmb3Jtcyggc3JjICkgewogCi0gICAgZnVuY3Rpb24gUGxhbmVHZW9tZXRy
eSggd2lkdGgsIGhlaWdodCwgd2lkdGhTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMgKSB7CisgICAg
ICAgIHZhciBkc3QgPSB7fTsKIAotICAgICAgICBHZW9tZXRyeS5jYWxsKCB0aGlzICk7CisgICAg
ICAgIGZvciAoIHZhciB1IGluIHNyYyApIHsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnUGxhbmVH
ZW9tZXRyeSc7CisgICAgICAgICAgICBkc3RbIHUgXSA9IHt9OwogCi0gICAgICAgIHRoaXMucGFy
YW1ldGVycyA9IHsKLSAgICAgICAgICAgIHdpZHRoOiB3aWR0aCwKLSAgICAgICAgICAgIGhlaWdo
dDogaGVpZ2h0LAotICAgICAgICAgICAgd2lkdGhTZWdtZW50czogd2lkdGhTZWdtZW50cywKLSAg
ICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBoZWlnaHRTZWdtZW50cwotICAgICAgICB9OworICAg
ICAgICAgICAgZm9yICggdmFyIHAgaW4gc3JjWyB1IF0gKSB7CiAKLSAgICAgICAgdGhpcy5mcm9t
QnVmZmVyR2VvbWV0cnkoIG5ldyBQbGFuZUJ1ZmZlckdlb21ldHJ5KCB3aWR0aCwgaGVpZ2h0LCB3
aWR0aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cyApICk7Ci0gICAgICAgIHRoaXMubWVyZ2VWZXJ0
aWNlcygpOworICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHNyY1sgdSBdWyBwIF07CiAK
LSAgICB9CisgICAgICAgICAgICAgICAgaWYgKCBwcm9wZXJ0eSAmJiAoIHByb3BlcnR5LmlzQ29s
b3IgfHwKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkuaXNNYXRyaXgzIHx8IHByb3BlcnR5
LmlzTWF0cml4NCB8fAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eS5pc1ZlY3RvcjIgfHwg
cHJvcGVydHkuaXNWZWN0b3IzIHx8IHByb3BlcnR5LmlzVmVjdG9yNCB8fAorICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eS5pc1RleHR1cmUgKSApIHsKIAotICAgIFBsYW5lR2VvbWV0cnkucHJv
dG90eXBlID0gT2JqZWN0LmNyZWF0ZSggR2VvbWV0cnkucHJvdG90eXBlICk7Ci0gICAgUGxhbmVH
ZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbGFuZUdlb21ldHJ5OworICAgICAgICAg
ICAgICAgICAgICBkc3RbIHUgXVsgcCBdID0gcHJvcGVydHkuY2xvbmUoKTsKIAotICAgIC8vIFBs
YW5lQnVmZmVyR2VvbWV0cnkKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBBcnJheS5pc0Fy
cmF5KCBwcm9wZXJ0eSApICkgewogCi0gICAgZnVuY3Rpb24gUGxhbmVCdWZmZXJHZW9tZXRyeSgg
d2lkdGgsIGhlaWdodCwgd2lkdGhTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMgKSB7CisgICAgICAg
ICAgICAgICAgICAgIGRzdFsgdSBdWyBwIF0gPSBwcm9wZXJ0eS5zbGljZSgpOwogCi0gICAgICAg
IEJ1ZmZlckdlb21ldHJ5LmNhbGwoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewog
Ci0gICAgICAgIHRoaXMudHlwZSA9ICdQbGFuZUJ1ZmZlckdlb21ldHJ5JzsKKyAgICAgICAgICAg
ICAgICAgICAgZHN0WyB1IF1bIHAgXSA9IHByb3BlcnR5OwogCi0gICAgICAgIHRoaXMucGFyYW1l
dGVycyA9IHsKLSAgICAgICAgICAgIHdpZHRoOiB3aWR0aCwKLSAgICAgICAgICAgIGhlaWdodDog
aGVpZ2h0LAotICAgICAgICAgICAgd2lkdGhTZWdtZW50czogd2lkdGhTZWdtZW50cywKLSAgICAg
ICAgICAgIGhlaWdodFNlZ21lbnRzOiBoZWlnaHRTZWdtZW50cwotICAgICAgICB9OworICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICB3aWR0aCA9IHdpZHRoIHx8IDE7Ci0gICAgICAgIGhlaWdo
dCA9IGhlaWdodCB8fCAxOworICAgICAgICAgICAgfQogCi0gICAgICAgIHZhciB3aWR0aF9oYWxm
ID0gd2lkdGggLyAyOwotICAgICAgICB2YXIgaGVpZ2h0X2hhbGYgPSBoZWlnaHQgLyAyOworICAg
ICAgICB9CiAKLSAgICAgICAgdmFyIGdyaWRYID0gTWF0aC5mbG9vciggd2lkdGhTZWdtZW50cyAp
IHx8IDE7Ci0gICAgICAgIHZhciBncmlkWSA9IE1hdGguZmxvb3IoIGhlaWdodFNlZ21lbnRzICkg
fHwgMTsKKyAgICAgICAgcmV0dXJuIGRzdDsKIAotICAgICAgICB2YXIgZ3JpZFgxID0gZ3JpZFgg
KyAxOwotICAgICAgICB2YXIgZ3JpZFkxID0gZ3JpZFkgKyAxOworICAgIH0KIAotICAgICAgICB2
YXIgc2VnbWVudF93aWR0aCA9IHdpZHRoIC8gZ3JpZFg7Ci0gICAgICAgIHZhciBzZWdtZW50X2hl
aWdodCA9IGhlaWdodCAvIGdyaWRZOworICAgIGZ1bmN0aW9uIG1lcmdlVW5pZm9ybXMoIHVuaWZv
cm1zICkgewogCi0gICAgICAgIHZhciBpeCwgaXk7CisgICAgICAgIHZhciBtZXJnZWQgPSB7fTsK
IAotICAgICAgICAvLyBidWZmZXJzCisgICAgICAgIGZvciAoIHZhciB1ID0gMDsgdSA8IHVuaWZv
cm1zLmxlbmd0aDsgdSArKyApIHsKIAotICAgICAgICB2YXIgaW5kaWNlcyA9IFtdOwotICAgICAg
ICB2YXIgdmVydGljZXMgPSBbXTsKLSAgICAgICAgdmFyIG5vcm1hbHMgPSBbXTsKLSAgICAgICAg
dmFyIHV2cyA9IFtdOworICAgICAgICAgICAgdmFyIHRtcCA9IGNsb25lVW5pZm9ybXMoIHVuaWZv
cm1zWyB1IF0gKTsKIAotICAgICAgICAvLyBnZW5lcmF0ZSB2ZXJ0aWNlcywgbm9ybWFscyBhbmQg
dXZzCisgICAgICAgICAgICBmb3IgKCB2YXIgcCBpbiB0bXAgKSB7CiAKLSAgICAgICAgZm9yICgg
aXkgPSAwOyBpeSA8IGdyaWRZMTsgaXkgKysgKSB7CisgICAgICAgICAgICAgICAgbWVyZ2VkWyBw
IF0gPSB0bXBbIHAgXTsKIAotICAgICAgICAgICAgdmFyIHkgPSBpeSAqIHNlZ21lbnRfaGVpZ2h0
IC0gaGVpZ2h0X2hhbGY7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZvciAoIGl4ID0g
MDsgaXggPCBncmlkWDE7IGl4ICsrICkgeworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB2
YXIgeCA9IGl4ICogc2VnbWVudF93aWR0aCAtIHdpZHRoX2hhbGY7CisgICAgICAgIHJldHVybiBt
ZXJnZWQ7CiAKLSAgICAgICAgICAgICAgICB2ZXJ0aWNlcy5wdXNoKCB4LCAtIHksIDAgKTsKKyAg
ICB9CiAKLSAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2goIDAsIDAsIDEgKTsKKyAgICAvLyBM
ZWdhY3kKIAotICAgICAgICAgICAgICAgIHV2cy5wdXNoKCBpeCAvIGdyaWRYICk7Ci0gICAgICAg
ICAgICAgICAgdXZzLnB1c2goIDEgLSAoIGl5IC8gZ3JpZFkgKSApOworICAgIHZhciBVbmlmb3Jt
c1V0aWxzID0geyBjbG9uZTogY2xvbmVVbmlmb3JtcywgbWVyZ2U6IG1lcmdlVW5pZm9ybXMgfTsK
IAotICAgICAgICAgICAgfQorICAgIHZhciBkZWZhdWx0X3ZlcnRleCA9ICJ2b2lkIG1haW4oKSB7
XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZl
YzQoIHBvc2l0aW9uLCAxLjAgKTtcbn0iOwogCi0gICAgICAgIH0KKyAgICB2YXIgZGVmYXVsdF9m
cmFnbWVudCA9ICJ2b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDEuMCwgMC4w
LCAwLjAsIDEuMCApO1xufSI7CiAKLSAgICAgICAgLy8gaW5kaWNlcworICAgIC8qKgorICAgICAq
IEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCisgICAgICoKKyAg
ICAgKiBwYXJhbWV0ZXJzID0geworICAgICAqICBkZWZpbmVzOiB7ICJsYWJlbCIgOiAidmFsdWUi
IH0sCisgICAgICogIHVuaWZvcm1zOiB7ICJwYXJhbWV0ZXIxIjogeyB2YWx1ZTogMS4wIH0sICJw
YXJhbWV0ZXIyIjogeyB2YWx1ZTI6IDIgfSB9LAorICAgICAqCisgICAgICogIGZyYWdtZW50U2hh
ZGVyOiA8c3RyaW5nPiwKKyAgICAgKiAgdmVydGV4U2hhZGVyOiA8c3RyaW5nPiwKKyAgICAgKgor
ICAgICAqICB3aXJlZnJhbWU6IDxib29sZWFuPiwKKyAgICAgKiAgd2lyZWZyYW1lTGluZXdpZHRo
OiA8ZmxvYXQ+LAorICAgICAqCisgICAgICogIGxpZ2h0czogPGJvb2w+LAorICAgICAqCisgICAg
ICogIHNraW5uaW5nOiA8Ym9vbD4sCisgICAgICogIG1vcnBoVGFyZ2V0czogPGJvb2w+LAorICAg
ICAqICBtb3JwaE5vcm1hbHM6IDxib29sPgorICAgICAqIH0KKyAgICAgKi8KIAotICAgICAgICBm
b3IgKCBpeSA9IDA7IGl5IDwgZ3JpZFk7IGl5ICsrICkgeworICAgIGZ1bmN0aW9uIFNoYWRlck1h
dGVyaWFsKCBwYXJhbWV0ZXJzICkgewogCi0gICAgICAgICAgICBmb3IgKCBpeCA9IDA7IGl4IDwg
Z3JpZFg7IGl4ICsrICkgeworICAgICAgICBNYXRlcmlhbC5jYWxsKCB0aGlzICk7CiAKLSAgICAg
ICAgICAgICAgICB2YXIgYSA9IGl4ICsgZ3JpZFgxICogaXk7Ci0gICAgICAgICAgICAgICAgdmFy
IGIgPSBpeCArIGdyaWRYMSAqICggaXkgKyAxICk7Ci0gICAgICAgICAgICAgICAgdmFyIGMgPSAo
IGl4ICsgMSApICsgZ3JpZFgxICogKCBpeSArIDEgKTsKLSAgICAgICAgICAgICAgICB2YXIgZCA9
ICggaXggKyAxICkgKyBncmlkWDEgKiBpeTsKKyAgICAgICAgdGhpcy50eXBlID0gJ1NoYWRlck1h
dGVyaWFsJzsKIAotICAgICAgICAgICAgICAgIC8vIGZhY2VzCisgICAgICAgIHRoaXMuZGVmaW5l
cyA9IHt9OworICAgICAgICB0aGlzLnVuaWZvcm1zID0ge307CiAKLSAgICAgICAgICAgICAgICBp
bmRpY2VzLnB1c2goIGEsIGIsIGQgKTsKLSAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goIGIs
IGMsIGQgKTsKKyAgICAgICAgdGhpcy52ZXJ0ZXhTaGFkZXIgPSBkZWZhdWx0X3ZlcnRleDsKKyAg
ICAgICAgdGhpcy5mcmFnbWVudFNoYWRlciA9IGRlZmF1bHRfZnJhZ21lbnQ7CiAKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5saW5ld2lkdGggPSAxOwogCi0gICAgICAgIH0KKyAgICAgICAg
dGhpcy53aXJlZnJhbWUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy53aXJlZnJhbWVMaW5ld2lkdGgg
PSAxOwogCi0gICAgICAgIC8vIGJ1aWxkIGdlb21ldHJ5CisgICAgICAgIHRoaXMuZm9nID0gZmFs
c2U7IC8vIHNldCB0byB1c2Ugc2NlbmUgZm9nCisgICAgICAgIHRoaXMubGlnaHRzID0gZmFsc2U7
IC8vIHNldCB0byB1c2Ugc2NlbmUgbGlnaHRzCisgICAgICAgIHRoaXMuY2xpcHBpbmcgPSBmYWxz
ZTsgLy8gc2V0IHRvIHVzZSB1c2VyLWRlZmluZWQgY2xpcHBpbmcgcGxhbmVzCiAKLSAgICAgICAg
dGhpcy5zZXRJbmRleCggaW5kaWNlcyApOwotICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3Bv
c2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTsKLSAg
ICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJp
YnV0ZSggbm9ybWFscywgMyApICk7Ci0gICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAndXYnLCBu
ZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdXZzLCAyICkgKTsKKyAgICAgICAgdGhpcy5za2lu
bmluZyA9IGZhbHNlOyAvLyBzZXQgdG8gdXNlIHNraW5uaW5nIGF0dHJpYnV0ZSBzdHJlYW1zCisg
ICAgICAgIHRoaXMubW9ycGhUYXJnZXRzID0gZmFsc2U7IC8vIHNldCB0byB1c2UgbW9ycGggdGFy
Z2V0cworICAgICAgICB0aGlzLm1vcnBoTm9ybWFscyA9IGZhbHNlOyAvLyBzZXQgdG8gdXNlIG1v
cnBoIG5vcm1hbHMKIAotICAgIH0KKyAgICAgICAgdGhpcy5leHRlbnNpb25zID0geworICAgICAg
ICAgICAgZGVyaXZhdGl2ZXM6IGZhbHNlLCAvLyBzZXQgdG8gdXNlIGRlcml2YXRpdmVzCisgICAg
ICAgICAgICBmcmFnRGVwdGg6IGZhbHNlLCAvLyBzZXQgdG8gdXNlIGZyYWdtZW50IGRlcHRoIHZh
bHVlcworICAgICAgICAgICAgZHJhd0J1ZmZlcnM6IGZhbHNlLCAvLyBzZXQgdG8gdXNlIGRyYXcg
YnVmZmVycworICAgICAgICAgICAgc2hhZGVyVGV4dHVyZUxPRDogZmFsc2UgLy8gc2V0IHRvIHVz
ZSBzaGFkZXIgdGV4dHVyZSBMT0QKKyAgICAgICAgfTsKIAotICAgIFBsYW5lQnVmZmVyR2VvbWV0
cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlICk7
Ci0gICAgUGxhbmVCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbGFuZUJ1
ZmZlckdlb21ldHJ5OworICAgICAgICAvLyBXaGVuIHJlbmRlcmVkIGdlb21ldHJ5IGRvZXNuJ3Qg
aW5jbHVkZSB0aGVzZSBhdHRyaWJ1dGVzIGJ1dCB0aGUgbWF0ZXJpYWwgZG9lcywKKyAgICAgICAg
Ly8gdXNlIHRoZXNlIGRlZmF1bHQgdmFsdWVzIGluIFdlYkdMLiBUaGlzIGF2b2lkcyBlcnJvcnMg
d2hlbiBidWZmZXIgZGF0YSBpcyBtaXNzaW5nLgorICAgICAgICB0aGlzLmRlZmF1bHRBdHRyaWJ1
dGVWYWx1ZXMgPSB7CisgICAgICAgICAgICAnY29sb3InOiBbIDEsIDEsIDEgXSwKKyAgICAgICAg
ICAgICd1dic6IFsgMCwgMCBdLAorICAgICAgICAgICAgJ3V2Mic6IFsgMCwgMCBdCisgICAgICAg
IH07CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29t
LwotICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0g
ICAgICovCisgICAgICAgIHRoaXMuaW5kZXgwQXR0cmlidXRlTmFtZSA9IHVuZGVmaW5lZDsKKyAg
ICAgICAgdGhpcy51bmlmb3Jtc05lZWRVcGRhdGUgPSBmYWxzZTsKIAotICAgIHZhciBtYXRlcmlh
bElkID0gMDsKKyAgICAgICAgaWYgKCBwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQgKSB7CiAKLSAg
ICBmdW5jdGlvbiBNYXRlcmlhbCgpIHsKKyAgICAgICAgICAgIGlmICggcGFyYW1ldGVycy5hdHRy
aWJ1dGVzICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KCB0aGlzLCAnaWQnLCB7IHZhbHVlOiBtYXRlcmlhbElkICsrIH0gKTsKKyAgICAgICAgICAgICAg
ICBjb25zb2xlLmVycm9yKCAnVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxk
IG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuJyApOwogCi0g
ICAgICAgIHRoaXMudXVpZCA9IF9NYXRoLmdlbmVyYXRlVVVJRCgpOworICAgICAgICAgICAgfQog
Ci0gICAgICAgIHRoaXMubmFtZSA9ICcnOwotICAgICAgICB0aGlzLnR5cGUgPSAnTWF0ZXJpYWwn
OworICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMgKTsKIAotICAgICAgICB0
aGlzLmZvZyA9IHRydWU7Ci0gICAgICAgIHRoaXMubGlnaHRzID0gdHJ1ZTsKKyAgICAgICAgfQog
Ci0gICAgICAgIHRoaXMuYmxlbmRpbmcgPSBOb3JtYWxCbGVuZGluZzsKLSAgICAgICAgdGhpcy5z
aWRlID0gRnJvbnRTaWRlOwotICAgICAgICB0aGlzLmZsYXRTaGFkaW5nID0gZmFsc2U7Ci0gICAg
ICAgIHRoaXMudmVydGV4Q29sb3JzID0gTm9Db2xvcnM7IC8vIFRIUkVFLk5vQ29sb3JzLCBUSFJF
RS5WZXJ0ZXhDb2xvcnMsIFRIUkVFLkZhY2VDb2xvcnMKKyAgICB9CiAKLSAgICAgICAgdGhpcy5v
cGFjaXR5ID0gMTsKLSAgICAgICAgdGhpcy50cmFuc3BhcmVudCA9IGZhbHNlOworICAgIFNoYWRl
ck1hdGVyaWFsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1hdGVyaWFsLnByb3RvdHlwZSAp
OworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hdGVy
aWFsOwogCi0gICAgICAgIHRoaXMuYmxlbmRTcmMgPSBTcmNBbHBoYUZhY3RvcjsKLSAgICAgICAg
dGhpcy5ibGVuZERzdCA9IE9uZU1pbnVzU3JjQWxwaGFGYWN0b3I7Ci0gICAgICAgIHRoaXMuYmxl
bmRFcXVhdGlvbiA9IEFkZEVxdWF0aW9uOwotICAgICAgICB0aGlzLmJsZW5kU3JjQWxwaGEgPSBu
dWxsOwotICAgICAgICB0aGlzLmJsZW5kRHN0QWxwaGEgPSBudWxsOwotICAgICAgICB0aGlzLmJs
ZW5kRXF1YXRpb25BbHBoYSA9IG51bGw7CisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLmlz
U2hhZGVyTWF0ZXJpYWwgPSB0cnVlOwogCi0gICAgICAgIHRoaXMuZGVwdGhGdW5jID0gTGVzc0Vx
dWFsRGVwdGg7Ci0gICAgICAgIHRoaXMuZGVwdGhUZXN0ID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5k
ZXB0aFdyaXRlID0gdHJ1ZTsKKyAgICBTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuY29weSA9IGZ1
bmN0aW9uICggc291cmNlICkgewogCi0gICAgICAgIHRoaXMuY2xpcHBpbmdQbGFuZXMgPSBudWxs
OwotICAgICAgICB0aGlzLmNsaXBJbnRlcnNlY3Rpb24gPSBmYWxzZTsKLSAgICAgICAgdGhpcy5j
bGlwU2hhZG93cyA9IGZhbHNlOworICAgICAgICBNYXRlcmlhbC5wcm90b3R5cGUuY29weS5jYWxs
KCB0aGlzLCBzb3VyY2UgKTsKIAotICAgICAgICB0aGlzLnNoYWRvd1NpZGUgPSBudWxsOworICAg
ICAgICB0aGlzLmZyYWdtZW50U2hhZGVyID0gc291cmNlLmZyYWdtZW50U2hhZGVyOworICAgICAg
ICB0aGlzLnZlcnRleFNoYWRlciA9IHNvdXJjZS52ZXJ0ZXhTaGFkZXI7CiAKLSAgICAgICAgdGhp
cy5jb2xvcldyaXRlID0gdHJ1ZTsKKyAgICAgICAgdGhpcy51bmlmb3JtcyA9IGNsb25lVW5pZm9y
bXMoIHNvdXJjZS51bmlmb3JtcyApOwogCi0gICAgICAgIHRoaXMucHJlY2lzaW9uID0gbnVsbDsg
Ly8gb3ZlcnJpZGUgdGhlIHJlbmRlcmVyJ3MgZGVmYXVsdCBwcmVjaXNpb24gZm9yIHRoaXMgbWF0
ZXJpYWwKKyAgICAgICAgdGhpcy5kZWZpbmVzID0gT2JqZWN0LmFzc2lnbigge30sIHNvdXJjZS5k
ZWZpbmVzICk7CiAKLSAgICAgICAgdGhpcy5wb2x5Z29uT2Zmc2V0ID0gZmFsc2U7Ci0gICAgICAg
IHRoaXMucG9seWdvbk9mZnNldEZhY3RvciA9IDA7Ci0gICAgICAgIHRoaXMucG9seWdvbk9mZnNl
dFVuaXRzID0gMDsKKyAgICAgICAgdGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lOwor
ICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IHNvdXJjZS53aXJlZnJhbWVMaW5ld2lk
dGg7CiAKLSAgICAgICAgdGhpcy5kaXRoZXJpbmcgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5saWdo
dHMgPSBzb3VyY2UubGlnaHRzOworICAgICAgICB0aGlzLmNsaXBwaW5nID0gc291cmNlLmNsaXBw
aW5nOwogCi0gICAgICAgIHRoaXMuYWxwaGFUZXN0ID0gMDsKLSAgICAgICAgdGhpcy5wcmVtdWx0
aXBsaWVkQWxwaGEgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5za2lubmluZyA9IHNvdXJjZS5za2lu
bmluZzsKIAotICAgICAgICB0aGlzLm92ZXJkcmF3ID0gMDsgLy8gT3ZlcmRyYXduIHBpeGVscyAo
dHlwaWNhbGx5IGJldHdlZW4gMCBhbmQgMSkgZm9yIGZpeGluZyBhbnRpYWxpYXNpbmcgZ2FwcyBp
biBDYW52YXNSZW5kZXJlcgorICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0cyA9IHNvdXJjZS5tb3Jw
aFRhcmdldHM7CisgICAgICAgIHRoaXMubW9ycGhOb3JtYWxzID0gc291cmNlLm1vcnBoTm9ybWFs
czsKIAotICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlOworICAgICAgICB0aGlzLmV4dGVuc2lv
bnMgPSBzb3VyY2UuZXh0ZW5zaW9uczsKIAotICAgICAgICB0aGlzLnVzZXJEYXRhID0ge307Cisg
ICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIHRoaXMubmVlZHNVcGRhdGUgPSB0cnVlOwor
ICAgIH07CiAKLSAgICB9CisgICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLnRvSlNPTiA9IGZ1
bmN0aW9uICggbWV0YSApIHsKIAotICAgIE1hdGVyaWFsLnByb3RvdHlwZSA9IE9iamVjdC5hc3Np
Z24oIE9iamVjdC5jcmVhdGUoIEV2ZW50RGlzcGF0Y2hlci5wcm90b3R5cGUgKSwgeworICAgICAg
ICB2YXIgZGF0YSA9IE1hdGVyaWFsLnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcywgbWV0YSAp
OwogCi0gICAgICAgIGNvbnN0cnVjdG9yOiBNYXRlcmlhbCwKKyAgICAgICAgZGF0YS51bmlmb3Jt
cyA9IHt9OwogCi0gICAgICAgIGlzTWF0ZXJpYWw6IHRydWUsCisgICAgICAgIGZvciAoIHZhciBu
YW1lIGluIHRoaXMudW5pZm9ybXMgKSB7CiAKLSAgICAgICAgb25CZWZvcmVDb21waWxlOiBmdW5j
dGlvbiAoKSB7fSwKKyAgICAgICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1sgbmFt
ZSBdOworICAgICAgICAgICAgdmFyIHZhbHVlID0gdW5pZm9ybS52YWx1ZTsKIAotICAgICAgICBz
ZXRWYWx1ZXM6IGZ1bmN0aW9uICggdmFsdWVzICkgeworICAgICAgICAgICAgaWYgKCB2YWx1ZSAm
JiB2YWx1ZS5pc1RleHR1cmUgKSB7CiAKLSAgICAgICAgICAgIGlmICggdmFsdWVzID09PSB1bmRl
ZmluZWQgKSByZXR1cm47CisgICAgICAgICAgICAgICAgZGF0YS51bmlmb3Jtc1sgbmFtZSBdID0g
eworICAgICAgICAgICAgICAgICAgICB0eXBlOiAndCcsCisgICAgICAgICAgICAgICAgICAgIHZh
bHVlOiB2YWx1ZS50b0pTT04oIG1ldGEgKS51dWlkCisgICAgICAgICAgICAgICAgfTsKIAotICAg
ICAgICAgICAgZm9yICggdmFyIGtleSBpbiB2YWx1ZXMgKSB7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKCB2YWx1ZSAmJiB2YWx1ZS5pc0NvbG9yICkgewogCi0gICAgICAgICAgICAgICAgdmFyIG5l
d1ZhbHVlID0gdmFsdWVzWyBrZXkgXTsKKyAgICAgICAgICAgICAgICBkYXRhLnVuaWZvcm1zWyBu
YW1lIF0gPSB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjJywKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWU6IHZhbHVlLmdldEhleCgpCisgICAgICAgICAgICAgICAgfTsKIAotICAgICAg
ICAgICAgICAgIGlmICggbmV3VmFsdWUgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIHZhbHVlICYmIHZhbHVlLmlzVmVjdG9yMiApIHsKIAotICAgICAgICAgICAgICAg
ICAgICBjb25zb2xlLndhcm4oICJUSFJFRS5NYXRlcmlhbDogJyIgKyBrZXkgKyAiJyBwYXJhbWV0
ZXIgaXMgdW5kZWZpbmVkLiIgKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgZGF0YS51bmlmb3Jtc1sgbmFtZSBdID0geworICAgICAgICAgICAgICAgICAg
ICB0eXBlOiAndjInLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudG9BcnJheSgp
CisgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIHZhbHVlICYmIHZhbHVlLmlzVmVjdG9yMyApIHsKIAotICAgICAgICAgICAgICAg
IC8vIGZvciBiYWNrd2FyZCBjb21wYXRhYmlsaXR5IGlmIHNoYWRpbmcgaXMgc2V0IGluIHRoZSBj
b25zdHJ1Y3RvcgotICAgICAgICAgICAgICAgIGlmICgga2V5ID09PSAnc2hhZGluZycgKSB7Cisg
ICAgICAgICAgICAgICAgZGF0YS51bmlmb3Jtc1sgbmFtZSBdID0geworICAgICAgICAgICAgICAg
ICAgICB0eXBlOiAndjMnLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudG9BcnJh
eSgpCisgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndh
cm4oICdUSFJFRS4nICsgdGhpcy50eXBlICsgJzogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4g
VXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLicgKTsKLSAgICAgICAgICAgICAg
ICAgICAgdGhpcy5mbGF0U2hhZGluZyA9ICggbmV3VmFsdWUgPT09IEZsYXRTaGFkaW5nICkgPyB0
cnVlIDogZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fSBlbHNlIGlmICggdmFsdWUgJiYgdmFsdWUuaXNWZWN0b3I0ICkgewogCi0gICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGRhdGEudW5pZm9ybXNbIG5hbWUgXSA9IHsKKyAgICAgICAg
ICAgICAgICAgICAgdHlwZTogJ3Y0JywKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVl
LnRvQXJyYXkoKQorICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICB2YXIgY3Vy
cmVudFZhbHVlID0gdGhpc1sga2V5IF07CisgICAgICAgICAgICB9IGVsc2UgaWYgKCB2YWx1ZSAm
JiB2YWx1ZS5pc01hdHJpeDMgKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGN1cnJlbnRWYWx1
ZSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIGRhdGEudW5pZm9ybXNbIG5hbWUg
XSA9IHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogJ20zJywKKyAgICAgICAgICAgICAgICAg
ICAgdmFsdWU6IHZhbHVlLnRvQXJyYXkoKQorICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS53YXJuKCAiVEhSRUUuIiArIHRoaXMudHlwZSArICI6ICciICsg
a2V5ICsgIicgaXMgbm90IGEgcHJvcGVydHkgb2YgdGhpcyBtYXRlcmlhbC4iICk7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIGlmICggdmFsdWUgJiYg
dmFsdWUuaXNNYXRyaXg0ICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGRhdGEudW5pZm9ybXNbIG5hbWUgXSA9IHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogJ200
JywKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnRvQXJyYXkoKQorICAgICAgICAg
ICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICBpZiAoIGN1cnJlbnRWYWx1ZSAmJiBjdXJyZW50
VmFsdWUuaXNDb2xvciApIHsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFZhbHVlLnNldCggbmV3VmFsdWUgKTsKKyAgICAgICAgICAgICAgICBkYXRh
LnVuaWZvcm1zWyBuYW1lIF0gPSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZQor
ICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAoIGN1cnJl
bnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUuaXNWZWN0b3IzICkgJiYgKCBuZXdWYWx1ZSAmJiBuZXdW
YWx1ZS5pc1ZlY3RvcjMgKSApIHsKKyAgICAgICAgICAgICAgICAvLyBub3RlOiB0aGUgYXJyYXkg
dmFyaWFudHMgdjJ2LCB2M3YsIHY0diwgbTR2IGFuZCB0diBhcmUgbm90IHN1cHBvcnRlZCBzbyBm
YXIKIAotICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUuY29weSggbmV3VmFsdWUgKTsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGtleSA9PT0gJ292
ZXJkcmF3JyApIHsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIC8vIGVuc3VyZSBv
dmVyZHJhdyBpcyBiYWNrd2FyZHMtY29tcGF0aWJsZSB3aXRoIGxlZ2FjeSBib29sZWFuIHR5cGUK
LSAgICAgICAgICAgICAgICAgICAgdGhpc1sga2V5IF0gPSBOdW1iZXIoIG5ld1ZhbHVlICk7Cisg
ICAgICAgIGlmICggT2JqZWN0LmtleXMoIHRoaXMuZGVmaW5lcyApLmxlbmd0aCA+IDAgKSBkYXRh
LmRlZmluZXMgPSB0aGlzLmRlZmluZXM7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICBkYXRhLnZlcnRleFNoYWRlciA9IHRoaXMudmVydGV4U2hhZGVyOworICAgICAgICBkYXRh
LmZyYWdtZW50U2hhZGVyID0gdGhpcy5mcmFnbWVudFNoYWRlcjsKIAotICAgICAgICAgICAgICAg
ICAgICB0aGlzWyBrZXkgXSA9IG5ld1ZhbHVlOworICAgICAgICB2YXIgZXh0ZW5zaW9ucyA9IHt9
OwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICBmb3IgKCB2YXIga2V5IGluIHRoaXMuZXh0
ZW5zaW9ucyApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCB0aGlzLmV4dGVu
c2lvbnNbIGtleSBdID09PSB0cnVlICkgZXh0ZW5zaW9uc1sga2V5IF0gPSB0cnVlOwogCi0gICAg
ICAgIH0sCisgICAgICAgIH0KIAotICAgICAgICB0b0pTT046IGZ1bmN0aW9uICggbWV0YSApIHsK
KyAgICAgICAgaWYgKCBPYmplY3Qua2V5cyggZXh0ZW5zaW9ucyApLmxlbmd0aCA+IDAgKSBkYXRh
LmV4dGVuc2lvbnMgPSBleHRlbnNpb25zOwogCi0gICAgICAgICAgICB2YXIgaXNSb290ID0gKCBt
ZXRhID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG1ldGEgPT09ICdzdHJpbmcnICk7CisgICAgICAg
IHJldHVybiBkYXRhOwogCi0gICAgICAgICAgICBpZiAoIGlzUm9vdCApIHsKKyAgICB9OwogCi0g
ICAgICAgICAgICAgICAgbWV0YSA9IHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZXM6IHt9
LAotICAgICAgICAgICAgICAgICAgICBpbWFnZXM6IHt9Ci0gICAgICAgICAgICAgICAgfTsKKyAg
ICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAq
IEBhdXRob3IgbWlrYWVsIGVtdGluZ2VyIC8gaHR0cDovL2dvbW8uc2UvCisgICAgICogQGF1dGhv
ciBXZXN0TGFuZ2xleSAvIGh0dHA6Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5CisgICAgKi8KIAot
ICAgICAgICAgICAgfQorICAgIGZ1bmN0aW9uIENhbWVyYSgpIHsKIAotICAgICAgICAgICAgdmFy
IGRhdGEgPSB7Ci0gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgICAgICAgICAg
ICAgdmVyc2lvbjogNC41LAotICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTWF0ZXJpYWwnLAot
ICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3I6ICdNYXRlcmlhbC50b0pTT04nCi0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfTsKKyAgICAgICAgT2JqZWN0M0QuY2FsbCggdGhpcyAp
OwogCi0gICAgICAgICAgICAvLyBzdGFuZGFyZCBNYXRlcmlhbCBzZXJpYWxpemF0aW9uCi0gICAg
ICAgICAgICBkYXRhLnV1aWQgPSB0aGlzLnV1aWQ7Ci0gICAgICAgICAgICBkYXRhLnR5cGUgPSB0
aGlzLnR5cGU7CisgICAgICAgIHRoaXMudHlwZSA9ICdDYW1lcmEnOwogCi0gICAgICAgICAgICBp
ZiAoIHRoaXMubmFtZSAhPT0gJycgKSBkYXRhLm5hbWUgPSB0aGlzLm5hbWU7CisgICAgICAgIHRo
aXMubWF0cml4V29ybGRJbnZlcnNlID0gbmV3IE1hdHJpeDQoKTsKIAotICAgICAgICAgICAgaWYg
KCB0aGlzLmNvbG9yICYmIHRoaXMuY29sb3IuaXNDb2xvciApIGRhdGEuY29sb3IgPSB0aGlzLmNv
bG9yLmdldEhleCgpOworICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXggPSBuZXcgTWF0cml4
NCgpOworICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlID0gbmV3IE1hdHJpeDQo
KTsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLnJvdWdobmVzcyAhPT0gdW5kZWZpbmVkICkgZGF0
YS5yb3VnaG5lc3MgPSB0aGlzLnJvdWdobmVzczsKLSAgICAgICAgICAgIGlmICggdGhpcy5tZXRh
bG5lc3MgIT09IHVuZGVmaW5lZCApIGRhdGEubWV0YWxuZXNzID0gdGhpcy5tZXRhbG5lc3M7Cisg
ICAgfQogCi0gICAgICAgICAgICBpZiAoIHRoaXMuZW1pc3NpdmUgJiYgdGhpcy5lbWlzc2l2ZS5p
c0NvbG9yICkgZGF0YS5lbWlzc2l2ZSA9IHRoaXMuZW1pc3NpdmUuZ2V0SGV4KCk7Ci0gICAgICAg
ICAgICBpZiAoIHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkgIT09IDEgKSBkYXRhLmVtaXNzaXZlSW50
ZW5zaXR5ID0gdGhpcy5lbWlzc2l2ZUludGVuc2l0eTsKKyAgICBDYW1lcmEucHJvdG90eXBlID0g
T2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggT2JqZWN0M0QucHJvdG90eXBlICksIHsKIAot
ICAgICAgICAgICAgaWYgKCB0aGlzLnNwZWN1bGFyICYmIHRoaXMuc3BlY3VsYXIuaXNDb2xvciAp
IGRhdGEuc3BlY3VsYXIgPSB0aGlzLnNwZWN1bGFyLmdldEhleCgpOwotICAgICAgICAgICAgaWYg
KCB0aGlzLnNoaW5pbmVzcyAhPT0gdW5kZWZpbmVkICkgZGF0YS5zaGluaW5lc3MgPSB0aGlzLnNo
aW5pbmVzczsKLSAgICAgICAgICAgIGlmICggdGhpcy5jbGVhckNvYXQgIT09IHVuZGVmaW5lZCAp
IGRhdGEuY2xlYXJDb2F0ID0gdGhpcy5jbGVhckNvYXQ7Ci0gICAgICAgICAgICBpZiAoIHRoaXMu
Y2xlYXJDb2F0Um91Z2huZXNzICE9PSB1bmRlZmluZWQgKSBkYXRhLmNsZWFyQ29hdFJvdWdobmVz
cyA9IHRoaXMuY2xlYXJDb2F0Um91Z2huZXNzOworICAgICAgICBjb25zdHJ1Y3RvcjogQ2FtZXJh
LAogCi0gICAgICAgICAgICBpZiAoIHRoaXMubWFwICYmIHRoaXMubWFwLmlzVGV4dHVyZSApIGRh
dGEubWFwID0gdGhpcy5tYXAudG9KU09OKCBtZXRhICkudXVpZDsKLSAgICAgICAgICAgIGlmICgg
dGhpcy5hbHBoYU1hcCAmJiB0aGlzLmFscGhhTWFwLmlzVGV4dHVyZSApIGRhdGEuYWxwaGFNYXAg
PSB0aGlzLmFscGhhTWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7Ci0gICAgICAgICAgICBpZiAoIHRo
aXMubGlnaHRNYXAgJiYgdGhpcy5saWdodE1hcC5pc1RleHR1cmUgKSBkYXRhLmxpZ2h0TWFwID0g
dGhpcy5saWdodE1hcC50b0pTT04oIG1ldGEgKS51dWlkOworICAgICAgICBpc0NhbWVyYTogdHJ1
ZSwKIAotICAgICAgICAgICAgaWYgKCB0aGlzLmFvTWFwICYmIHRoaXMuYW9NYXAuaXNUZXh0dXJl
ICkgeworICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHNvdXJjZSwgcmVjdXJzaXZlICkgewogCi0g
ICAgICAgICAgICAgICAgZGF0YS5hb01hcCA9IHRoaXMuYW9NYXAudG9KU09OKCBtZXRhICkudXVp
ZDsKLSAgICAgICAgICAgICAgICBkYXRhLmFvTWFwSW50ZW5zaXR5ID0gdGhpcy5hb01hcEludGVu
c2l0eTsKKyAgICAgICAgICAgIE9iamVjdDNELnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNv
dXJjZSwgcmVjdXJzaXZlICk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMubWF0
cml4V29ybGRJbnZlcnNlLmNvcHkoIHNvdXJjZS5tYXRyaXhXb3JsZEludmVyc2UgKTsKIAotICAg
ICAgICAgICAgaWYgKCB0aGlzLmJ1bXBNYXAgJiYgdGhpcy5idW1wTWFwLmlzVGV4dHVyZSApIHsK
KyAgICAgICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KCBzb3VyY2UucHJvamVjdGlv
bk1hdHJpeCApOworICAgICAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5
KCBzb3VyY2UucHJvamVjdGlvbk1hdHJpeEludmVyc2UgKTsKIAotICAgICAgICAgICAgICAgIGRh
dGEuYnVtcE1hcCA9IHRoaXMuYnVtcE1hcC50b0pTT04oIG1ldGEgKS51dWlkOwotICAgICAgICAg
ICAgICAgIGRhdGEuYnVtcFNjYWxlID0gdGhpcy5idW1wU2NhbGU7CisgICAgICAgICAgICByZXR1
cm4gdGhpczsKIAotICAgICAgICAgICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAgICBpZiAo
IHRoaXMubm9ybWFsTWFwICYmIHRoaXMubm9ybWFsTWFwLmlzVGV4dHVyZSApIHsKKyAgICAgICAg
Z2V0V29ybGREaXJlY3Rpb246IGZ1bmN0aW9uICggdGFyZ2V0ICkgewogCi0gICAgICAgICAgICAg
ICAgZGF0YS5ub3JtYWxNYXAgPSB0aGlzLm5vcm1hbE1hcC50b0pTT04oIG1ldGEgKS51dWlkOwot
ICAgICAgICAgICAgICAgIGRhdGEubm9ybWFsTWFwVHlwZSA9IHRoaXMubm9ybWFsTWFwVHlwZTsK
LSAgICAgICAgICAgICAgICBkYXRhLm5vcm1hbFNjYWxlID0gdGhpcy5ub3JtYWxTY2FsZS50b0Fy
cmF5KCk7CisgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVkICkgeworCisgICAg
ICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuQ2FtZXJhOiAuZ2V0V29ybGREaXJlY3Rp
b24oKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOworICAgICAgICAgICAgICAgIHRhcmdldCA9
IG5ldyBWZWN0b3IzKCk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCB0aGlz
LmRpc3BsYWNlbWVudE1hcCAmJiB0aGlzLmRpc3BsYWNlbWVudE1hcC5pc1RleHR1cmUgKSB7Cisg
ICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCB0cnVlICk7CiAKLSAgICAgICAgICAg
ICAgICBkYXRhLmRpc3BsYWNlbWVudE1hcCA9IHRoaXMuZGlzcGxhY2VtZW50TWFwLnRvSlNPTigg
bWV0YSApLnV1aWQ7Ci0gICAgICAgICAgICAgICAgZGF0YS5kaXNwbGFjZW1lbnRTY2FsZSA9IHRo
aXMuZGlzcGxhY2VtZW50U2NhbGU7Ci0gICAgICAgICAgICAgICAgZGF0YS5kaXNwbGFjZW1lbnRC
aWFzID0gdGhpcy5kaXNwbGFjZW1lbnRCaWFzOworICAgICAgICAgICAgdmFyIGUgPSB0aGlzLm1h
dHJpeFdvcmxkLmVsZW1lbnRzOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
dGFyZ2V0LnNldCggLSBlWyA4IF0sIC0gZVsgOSBdLCAtIGVbIDEwIF0gKS5ub3JtYWxpemUoKTsK
IAotICAgICAgICAgICAgaWYgKCB0aGlzLnJvdWdobmVzc01hcCAmJiB0aGlzLnJvdWdobmVzc01h
cC5pc1RleHR1cmUgKSBkYXRhLnJvdWdobmVzc01hcCA9IHRoaXMucm91Z2huZXNzTWFwLnRvSlNP
TiggbWV0YSApLnV1aWQ7Ci0gICAgICAgICAgICBpZiAoIHRoaXMubWV0YWxuZXNzTWFwICYmIHRo
aXMubWV0YWxuZXNzTWFwLmlzVGV4dHVyZSApIGRhdGEubWV0YWxuZXNzTWFwID0gdGhpcy5tZXRh
bG5lc3NNYXAudG9KU09OKCBtZXRhICkudXVpZDsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAg
aWYgKCB0aGlzLmVtaXNzaXZlTWFwICYmIHRoaXMuZW1pc3NpdmVNYXAuaXNUZXh0dXJlICkgZGF0
YS5lbWlzc2l2ZU1hcCA9IHRoaXMuZW1pc3NpdmVNYXAudG9KU09OKCBtZXRhICkudXVpZDsKLSAg
ICAgICAgICAgIGlmICggdGhpcy5zcGVjdWxhck1hcCAmJiB0aGlzLnNwZWN1bGFyTWFwLmlzVGV4
dHVyZSApIGRhdGEuc3BlY3VsYXJNYXAgPSB0aGlzLnNwZWN1bGFyTWFwLnRvSlNPTiggbWV0YSAp
LnV1aWQ7CisgICAgICAgIHVwZGF0ZU1hdHJpeFdvcmxkOiBmdW5jdGlvbiAoIGZvcmNlICkgewog
Ci0gICAgICAgICAgICBpZiAoIHRoaXMuZW52TWFwICYmIHRoaXMuZW52TWFwLmlzVGV4dHVyZSAp
IHsKKyAgICAgICAgICAgIE9iamVjdDNELnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxs
KCB0aGlzLCBmb3JjZSApOwogCi0gICAgICAgICAgICAgICAgZGF0YS5lbnZNYXAgPSB0aGlzLmVu
dk1hcC50b0pTT04oIG1ldGEgKS51dWlkOwotICAgICAgICAgICAgICAgIGRhdGEucmVmbGVjdGl2
aXR5ID0gdGhpcy5yZWZsZWN0aXZpdHk7IC8vIFNjYWxlIGJlaGluZCBlbnZNYXAKKyAgICAgICAg
ICAgIHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmdldEludmVyc2UoIHRoaXMubWF0cml4V29ybGQg
KTsKIAotICAgICAgICAgICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAgICBpZiAoIHRoaXMu
Z3JhZGllbnRNYXAgJiYgdGhpcy5ncmFkaWVudE1hcC5pc1RleHR1cmUgKSB7CisgICAgICAgIGNs
b25lOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICBkYXRhLmdyYWRpZW50TWFwID0g
dGhpcy5ncmFkaWVudE1hcC50b0pTT04oIG1ldGEgKS51dWlkOworICAgICAgICAgICAgcmV0dXJu
IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApOwogCi0gICAgICAgICAgICB9Cisg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCB0aGlzLnNpemUgIT09IHVuZGVmaW5lZCApIGRh
dGEuc2l6ZSA9IHRoaXMuc2l6ZTsKLSAgICAgICAgICAgIGlmICggdGhpcy5zaXplQXR0ZW51YXRp
b24gIT09IHVuZGVmaW5lZCApIGRhdGEuc2l6ZUF0dGVudWF0aW9uID0gdGhpcy5zaXplQXR0ZW51
YXRpb247CisgICAgfSApOwogCi0gICAgICAgICAgICBpZiAoIHRoaXMuYmxlbmRpbmcgIT09IE5v
cm1hbEJsZW5kaW5nICkgZGF0YS5ibGVuZGluZyA9IHRoaXMuYmxlbmRpbmc7Ci0gICAgICAgICAg
ICBpZiAoIHRoaXMuZmxhdFNoYWRpbmcgPT09IHRydWUgKSBkYXRhLmZsYXRTaGFkaW5nID0gdGhp
cy5mbGF0U2hhZGluZzsKLSAgICAgICAgICAgIGlmICggdGhpcy5zaWRlICE9PSBGcm9udFNpZGUg
KSBkYXRhLnNpZGUgPSB0aGlzLnNpZGU7Ci0gICAgICAgICAgICBpZiAoIHRoaXMudmVydGV4Q29s
b3JzICE9PSBOb0NvbG9ycyApIGRhdGEudmVydGV4Q29sb3JzID0gdGhpcy52ZXJ0ZXhDb2xvcnM7
CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAg
ICAgKiBAYXV0aG9yIGdyZWdnbWFuIC8gaHR0cDovL2dhbWVzLmdyZWdnbWFuLmNvbS8KKyAgICAg
KiBAYXV0aG9yIHp6ODUgLyBodHRwOi8vd3d3LmxhYjRnYW1lcy5uZXQveno4NS9ibG9nCisgICAg
ICogQGF1dGhvciB0c2NodworICAgICAqLwogCi0gICAgICAgICAgICBpZiAoIHRoaXMub3BhY2l0
eSA8IDEgKSBkYXRhLm9wYWNpdHkgPSB0aGlzLm9wYWNpdHk7Ci0gICAgICAgICAgICBpZiAoIHRo
aXMudHJhbnNwYXJlbnQgPT09IHRydWUgKSBkYXRhLnRyYW5zcGFyZW50ID0gdGhpcy50cmFuc3Bh
cmVudDsKKyAgICBmdW5jdGlvbiBQZXJzcGVjdGl2ZUNhbWVyYSggZm92LCBhc3BlY3QsIG5lYXIs
IGZhciApIHsKIAotICAgICAgICAgICAgZGF0YS5kZXB0aEZ1bmMgPSB0aGlzLmRlcHRoRnVuYzsK
LSAgICAgICAgICAgIGRhdGEuZGVwdGhUZXN0ID0gdGhpcy5kZXB0aFRlc3Q7Ci0gICAgICAgICAg
ICBkYXRhLmRlcHRoV3JpdGUgPSB0aGlzLmRlcHRoV3JpdGU7CisgICAgICAgIENhbWVyYS5jYWxs
KCB0aGlzICk7CiAKLSAgICAgICAgICAgIC8vIHJvdGF0aW9uIChTcHJpdGVNYXRlcmlhbCkKLSAg
ICAgICAgICAgIGlmICggdGhpcy5yb3RhdGlvbiAhPT0gMCApIGRhdGEucm90YXRpb24gPSB0aGlz
LnJvdGF0aW9uOworICAgICAgICB0aGlzLnR5cGUgPSAnUGVyc3BlY3RpdmVDYW1lcmEnOwogCi0g
ICAgICAgICAgICBpZiAoIHRoaXMubGluZXdpZHRoICE9PSAxICkgZGF0YS5saW5ld2lkdGggPSB0
aGlzLmxpbmV3aWR0aDsKLSAgICAgICAgICAgIGlmICggdGhpcy5kYXNoU2l6ZSAhPT0gdW5kZWZp
bmVkICkgZGF0YS5kYXNoU2l6ZSA9IHRoaXMuZGFzaFNpemU7Ci0gICAgICAgICAgICBpZiAoIHRo
aXMuZ2FwU2l6ZSAhPT0gdW5kZWZpbmVkICkgZGF0YS5nYXBTaXplID0gdGhpcy5nYXBTaXplOwot
ICAgICAgICAgICAgaWYgKCB0aGlzLnNjYWxlICE9PSB1bmRlZmluZWQgKSBkYXRhLnNjYWxlID0g
dGhpcy5zY2FsZTsKKyAgICAgICAgdGhpcy5mb3YgPSBmb3YgIT09IHVuZGVmaW5lZCA/IGZvdiA6
IDUwOworICAgICAgICB0aGlzLnpvb20gPSAxOwogCi0gICAgICAgICAgICBpZiAoIHRoaXMuZGl0
aGVyaW5nID09PSB0cnVlICkgZGF0YS5kaXRoZXJpbmcgPSB0cnVlOworICAgICAgICB0aGlzLm5l
YXIgPSBuZWFyICE9PSB1bmRlZmluZWQgPyBuZWFyIDogMC4xOworICAgICAgICB0aGlzLmZhciA9
IGZhciAhPT0gdW5kZWZpbmVkID8gZmFyIDogMjAwMDsKKyAgICAgICAgdGhpcy5mb2N1cyA9IDEw
OwogCi0gICAgICAgICAgICBpZiAoIHRoaXMuYWxwaGFUZXN0ID4gMCApIGRhdGEuYWxwaGFUZXN0
ID0gdGhpcy5hbHBoYVRlc3Q7Ci0gICAgICAgICAgICBpZiAoIHRoaXMucHJlbXVsdGlwbGllZEFs
cGhhID09PSB0cnVlICkgZGF0YS5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0aGlzLnByZW11bHRpcGxp
ZWRBbHBoYTsKKyAgICAgICAgdGhpcy5hc3BlY3QgPSBhc3BlY3QgIT09IHVuZGVmaW5lZCA/IGFz
cGVjdCA6IDE7CisgICAgICAgIHRoaXMudmlldyA9IG51bGw7CiAKLSAgICAgICAgICAgIGlmICgg
dGhpcy53aXJlZnJhbWUgPT09IHRydWUgKSBkYXRhLndpcmVmcmFtZSA9IHRoaXMud2lyZWZyYW1l
OwotICAgICAgICAgICAgaWYgKCB0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA+IDEgKSBkYXRhLndp
cmVmcmFtZUxpbmV3aWR0aCA9IHRoaXMud2lyZWZyYW1lTGluZXdpZHRoOwotICAgICAgICAgICAg
aWYgKCB0aGlzLndpcmVmcmFtZUxpbmVjYXAgIT09ICdyb3VuZCcgKSBkYXRhLndpcmVmcmFtZUxp
bmVjYXAgPSB0aGlzLndpcmVmcmFtZUxpbmVjYXA7Ci0gICAgICAgICAgICBpZiAoIHRoaXMud2ly
ZWZyYW1lTGluZWpvaW4gIT09ICdyb3VuZCcgKSBkYXRhLndpcmVmcmFtZUxpbmVqb2luID0gdGhp
cy53aXJlZnJhbWVMaW5lam9pbjsKKyAgICAgICAgdGhpcy5maWxtR2F1Z2UgPSAzNTsgICAgLy8g
d2lkdGggb2YgdGhlIGZpbG0gKGRlZmF1bHQgaW4gbWlsbGltZXRlcnMpCisgICAgICAgIHRoaXMu
ZmlsbU9mZnNldCA9IDA7ICAgIC8vIGhvcml6b250YWwgZmlsbSBvZmZzZXQgKHNhbWUgdW5pdCBh
cyBnYXVnZSkKIAotICAgICAgICAgICAgaWYgKCB0aGlzLm1vcnBoVGFyZ2V0cyA9PT0gdHJ1ZSAp
IGRhdGEubW9ycGhUYXJnZXRzID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmICggdGhpcy5za2lubmlu
ZyA9PT0gdHJ1ZSApIGRhdGEuc2tpbm5pbmcgPSB0cnVlOworICAgICAgICB0aGlzLnVwZGF0ZVBy
b2plY3Rpb25NYXRyaXgoKTsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLnZpc2libGUgPT09IGZh
bHNlICkgZGF0YS52aXNpYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIEpTT04uc3RyaW5n
aWZ5KCB0aGlzLnVzZXJEYXRhICkgIT09ICd7fScgKSBkYXRhLnVzZXJEYXRhID0gdGhpcy51c2Vy
RGF0YTsKKyAgICB9CiAKLSAgICAgICAgICAgIC8vIFRPRE86IENvcGllZCBmcm9tIE9iamVjdDNE
LnRvSlNPTgorICAgIFBlcnNwZWN0aXZlQ2FtZXJhLnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24o
IE9iamVjdC5jcmVhdGUoIENhbWVyYS5wcm90b3R5cGUgKSwgewogCi0gICAgICAgICAgICBmdW5j
dGlvbiBleHRyYWN0RnJvbUNhY2hlKCBjYWNoZSApIHsKKyAgICAgICAgY29uc3RydWN0b3I6IFBl
cnNwZWN0aXZlQ2FtZXJhLAogCi0gICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFtdOworICAg
ICAgICBpc1BlcnNwZWN0aXZlQ2FtZXJhOiB0cnVlLAogCi0gICAgICAgICAgICAgICAgZm9yICgg
dmFyIGtleSBpbiBjYWNoZSApIHsKKyAgICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UsIHJl
Y3Vyc2l2ZSApIHsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGNhY2hlWyBrZXkg
XTsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRhdGEubWV0YWRhdGE7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhbHVlcy5wdXNoKCBkYXRhICk7CisgICAgICAgICAgICBDYW1lcmEucHJvdG90
eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlLCByZWN1cnNpdmUgKTsKIAotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXMuZm92ID0gc291cmNlLmZvdjsKKyAgICAgICAgICAgIHRo
aXMuem9vbSA9IHNvdXJjZS56b29tOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsK
KyAgICAgICAgICAgIHRoaXMubmVhciA9IHNvdXJjZS5uZWFyOworICAgICAgICAgICAgdGhpcy5m
YXIgPSBzb3VyY2UuZmFyOworICAgICAgICAgICAgdGhpcy5mb2N1cyA9IHNvdXJjZS5mb2N1czsK
IAotICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5hc3BlY3QgPSBzb3VyY2UuYXNwZWN0
OworICAgICAgICAgICAgdGhpcy52aWV3ID0gc291cmNlLnZpZXcgPT09IG51bGwgPyBudWxsIDog
T2JqZWN0LmFzc2lnbigge30sIHNvdXJjZS52aWV3ICk7CiAKLSAgICAgICAgICAgIGlmICggaXNS
b290ICkgeworICAgICAgICAgICAgdGhpcy5maWxtR2F1Z2UgPSBzb3VyY2UuZmlsbUdhdWdlOwor
ICAgICAgICAgICAgdGhpcy5maWxtT2Zmc2V0ID0gc291cmNlLmZpbG1PZmZzZXQ7CiAKLSAgICAg
ICAgICAgICAgICB2YXIgdGV4dHVyZXMgPSBleHRyYWN0RnJvbUNhY2hlKCBtZXRhLnRleHR1cmVz
ICk7Ci0gICAgICAgICAgICAgICAgdmFyIGltYWdlcyA9IGV4dHJhY3RGcm9tQ2FjaGUoIG1ldGEu
aW1hZ2VzICk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIGlm
ICggdGV4dHVyZXMubGVuZ3RoID4gMCApIGRhdGEudGV4dHVyZXMgPSB0ZXh0dXJlczsKLSAgICAg
ICAgICAgICAgICBpZiAoIGltYWdlcy5sZW5ndGggPiAwICkgZGF0YS5pbWFnZXMgPSBpbWFnZXM7
CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgLyoqCisgICAgICAgICAqIFNl
dHMgdGhlIEZPViBieSBmb2NhbCBsZW5ndGggaW4gcmVzcGVjdCB0byB0aGUgY3VycmVudCAuZmls
bUdhdWdlLgorICAgICAgICAgKgorICAgICAgICAgKiBUaGUgZGVmYXVsdCBmaWxtIGdhdWdlIGlz
IDM1LCBzbyB0aGF0IHRoZSBmb2NhbCBsZW5ndGggY2FuIGJlIHNwZWNpZmllZCBmb3IKKyAgICAg
ICAgICogYSAzNW1tIChmdWxsIGZyYW1lKSBjYW1lcmEuCisgICAgICAgICAqCisgICAgICAgICAq
IFZhbHVlcyBmb3IgZm9jYWwgbGVuZ3RoIGFuZCBmaWxtIGdhdWdlIG11c3QgaGF2ZSB0aGUgc2Ft
ZSB1bml0LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0Rm9jYWxMZW5ndGg6IGZ1bmN0aW9uICgg
Zm9jYWxMZW5ndGggKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAg
Ly8gc2VlIGh0dHA6Ly93d3cuYm9iYXRraW5zLmNvbS9waG90b2dyYXBoeS90ZWNobmljYWwvZmll
bGRfb2Zfdmlldy5odG1sCisgICAgICAgICAgICB2YXIgdkV4dGVudFNsb3BlID0gMC41ICogdGhp
cy5nZXRGaWxtSGVpZ2h0KCkgLyBmb2NhbExlbmd0aDsKKworICAgICAgICAgICAgdGhpcy5mb3Yg
PSBfTWF0aC5SQUQyREVHICogMiAqIE1hdGguYXRhbiggdkV4dGVudFNsb3BlICk7CisgICAgICAg
ICAgICB0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTsKIAogICAgICAgICB9LAogCi0gICAg
ICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWxjdWxh
dGVzIHRoZSBmb2NhbCBsZW5ndGggZnJvbSB0aGUgY3VycmVudCAuZm92IGFuZCAuZmlsbUdhdWdl
LgorICAgICAgICAgKi8KKyAgICAgICAgZ2V0Rm9jYWxMZW5ndGg6IGZ1bmN0aW9uICgpIHsKIAot
ICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApOwor
ICAgICAgICAgICAgdmFyIHZFeHRlbnRTbG9wZSA9IE1hdGgudGFuKCBfTWF0aC5ERUcyUkFEICog
MC41ICogdGhpcy5mb3YgKTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgcmV0dXJuIDAuNSAq
IHRoaXMuZ2V0RmlsbUhlaWdodCgpIC8gdkV4dGVudFNsb3BlOwogCi0gICAgICAgIGNvcHk6IGZ1
bmN0aW9uICggc291cmNlICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICB0aGlzLm5hbWUg
PSBzb3VyY2UubmFtZTsKKyAgICAgICAgZ2V0RWZmZWN0aXZlRk9WOiBmdW5jdGlvbiAoKSB7CiAK
LSAgICAgICAgICAgIHRoaXMuZm9nID0gc291cmNlLmZvZzsKLSAgICAgICAgICAgIHRoaXMubGln
aHRzID0gc291cmNlLmxpZ2h0czsKKyAgICAgICAgICAgIHJldHVybiBfTWF0aC5SQUQyREVHICog
MiAqIE1hdGguYXRhbigKKyAgICAgICAgICAgICAgICBNYXRoLnRhbiggX01hdGguREVHMlJBRCAq
IDAuNSAqIHRoaXMuZm92ICkgLyB0aGlzLnpvb20gKTsKIAotICAgICAgICAgICAgdGhpcy5ibGVu
ZGluZyA9IHNvdXJjZS5ibGVuZGluZzsKLSAgICAgICAgICAgIHRoaXMuc2lkZSA9IHNvdXJjZS5z
aWRlOwotICAgICAgICAgICAgdGhpcy5mbGF0U2hhZGluZyA9IHNvdXJjZS5mbGF0U2hhZGluZzsK
LSAgICAgICAgICAgIHRoaXMudmVydGV4Q29sb3JzID0gc291cmNlLnZlcnRleENvbG9yczsKKyAg
ICAgICAgfSwKIAotICAgICAgICAgICAgdGhpcy5vcGFjaXR5ID0gc291cmNlLm9wYWNpdHk7Ci0g
ICAgICAgICAgICB0aGlzLnRyYW5zcGFyZW50ID0gc291cmNlLnRyYW5zcGFyZW50OworICAgICAg
ICBnZXRGaWxtV2lkdGg6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgdGhpcy5ibGVuZFNy
YyA9IHNvdXJjZS5ibGVuZFNyYzsKLSAgICAgICAgICAgIHRoaXMuYmxlbmREc3QgPSBzb3VyY2Uu
YmxlbmREc3Q7Ci0gICAgICAgICAgICB0aGlzLmJsZW5kRXF1YXRpb24gPSBzb3VyY2UuYmxlbmRF
cXVhdGlvbjsKLSAgICAgICAgICAgIHRoaXMuYmxlbmRTcmNBbHBoYSA9IHNvdXJjZS5ibGVuZFNy
Y0FscGhhOwotICAgICAgICAgICAgdGhpcy5ibGVuZERzdEFscGhhID0gc291cmNlLmJsZW5kRHN0
QWxwaGE7Ci0gICAgICAgICAgICB0aGlzLmJsZW5kRXF1YXRpb25BbHBoYSA9IHNvdXJjZS5ibGVu
ZEVxdWF0aW9uQWxwaGE7CisgICAgICAgICAgICAvLyBmaWxtIG5vdCBjb21wbGV0ZWx5IGNvdmVy
ZWQgaW4gcG9ydHJhaXQgZm9ybWF0IChhc3BlY3QgPCAxKQorICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZmlsbUdhdWdlICogTWF0aC5taW4oIHRoaXMuYXNwZWN0LCAxICk7CiAKLSAgICAgICAgICAg
IHRoaXMuZGVwdGhGdW5jID0gc291cmNlLmRlcHRoRnVuYzsKLSAgICAgICAgICAgIHRoaXMuZGVw
dGhUZXN0ID0gc291cmNlLmRlcHRoVGVzdDsKLSAgICAgICAgICAgIHRoaXMuZGVwdGhXcml0ZSA9
IHNvdXJjZS5kZXB0aFdyaXRlOworICAgICAgICB9LAogCi0gICAgICAgICAgICB0aGlzLmNvbG9y
V3JpdGUgPSBzb3VyY2UuY29sb3JXcml0ZTsKKyAgICAgICAgZ2V0RmlsbUhlaWdodDogZnVuY3Rp
b24gKCkgewogCi0gICAgICAgICAgICB0aGlzLnByZWNpc2lvbiA9IHNvdXJjZS5wcmVjaXNpb247
CisgICAgICAgICAgICAvLyBmaWxtIG5vdCBjb21wbGV0ZWx5IGNvdmVyZWQgaW4gbGFuZHNjYXBl
IGZvcm1hdCAoYXNwZWN0ID4gMSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbG1HYXVnZSAv
IE1hdGgubWF4KCB0aGlzLmFzcGVjdCwgMSApOwogCi0gICAgICAgICAgICB0aGlzLnBvbHlnb25P
ZmZzZXQgPSBzb3VyY2UucG9seWdvbk9mZnNldDsKLSAgICAgICAgICAgIHRoaXMucG9seWdvbk9m
ZnNldEZhY3RvciA9IHNvdXJjZS5wb2x5Z29uT2Zmc2V0RmFjdG9yOwotICAgICAgICAgICAgdGhp
cy5wb2x5Z29uT2Zmc2V0VW5pdHMgPSBzb3VyY2UucG9seWdvbk9mZnNldFVuaXRzOworICAgICAg
ICB9LAogCi0gICAgICAgICAgICB0aGlzLmRpdGhlcmluZyA9IHNvdXJjZS5kaXRoZXJpbmc7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIGFuIG9mZnNldCBpbiBhIGxhcmdlciBmcnVzdHVt
LiBUaGlzIGlzIHVzZWZ1bCBmb3IgbXVsdGktd2luZG93IG9yCisgICAgICAgICAqIG11bHRpLW1v
bml0b3IvbXVsdGktbWFjaGluZSBzZXR1cHMuCisgICAgICAgICAqCisgICAgICAgICAqIEZvciBl
eGFtcGxlLCBpZiB5b3UgaGF2ZSAzeDIgbW9uaXRvcnMgYW5kIGVhY2ggbW9uaXRvciBpcyAxOTIw
eDEwODAgYW5kCisgICAgICAgICAqIHRoZSBtb25pdG9ycyBhcmUgaW4gZ3JpZCBsaWtlIHRoaXMK
KyAgICAgICAgICoKKyAgICAgICAgICogICArLS0tKy0tLSstLS0rCisgICAgICAgICAqICAgfCBB
IHwgQiB8IEMgfAorICAgICAgICAgKiAgICstLS0rLS0tKy0tLSsKKyAgICAgICAgICogICB8IEQg
fCBFIHwgRiB8CisgICAgICAgICAqICAgKy0tLSstLS0rLS0tKworICAgICAgICAgKgorICAgICAg
ICAgKiB0aGVuIGZvciBlYWNoIG1vbml0b3IgeW91IHdvdWxkIGNhbGwgaXQgbGlrZSB0aGlzCisg
ICAgICAgICAqCisgICAgICAgICAqICAgdmFyIHcgPSAxOTIwOworICAgICAgICAgKiAgIHZhciBo
ID0gMTA4MDsKKyAgICAgICAgICogICB2YXIgZnVsbFdpZHRoID0gdyAqIDM7CisgICAgICAgICAq
ICAgdmFyIGZ1bGxIZWlnaHQgPSBoICogMjsKKyAgICAgICAgICoKKyAgICAgICAgICogICAtLUEt
LQorICAgICAgICAgKiAgIGNhbWVyYS5zZXRWaWV3T2Zmc2V0KCBmdWxsV2lkdGgsIGZ1bGxIZWln
aHQsIHcgKiAwLCBoICogMCwgdywgaCApOworICAgICAgICAgKiAgIC0tQi0tCisgICAgICAgICAq
ICAgY2FtZXJhLnNldFZpZXdPZmZzZXQoIGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgdyAqIDEsIGgg
KiAwLCB3LCBoICk7CisgICAgICAgICAqICAgLS1DLS0KKyAgICAgICAgICogICBjYW1lcmEuc2V0
Vmlld09mZnNldCggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB3ICogMiwgaCAqIDAsIHcsIGggKTsK
KyAgICAgICAgICogICAtLUQtLQorICAgICAgICAgKiAgIGNhbWVyYS5zZXRWaWV3T2Zmc2V0KCBm
dWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHcgKiAwLCBoICogMSwgdywgaCApOworICAgICAgICAgKiAg
IC0tRS0tCisgICAgICAgICAqICAgY2FtZXJhLnNldFZpZXdPZmZzZXQoIGZ1bGxXaWR0aCwgZnVs
bEhlaWdodCwgdyAqIDEsIGggKiAxLCB3LCBoICk7CisgICAgICAgICAqICAgLS1GLS0KKyAgICAg
ICAgICogICBjYW1lcmEuc2V0Vmlld09mZnNldCggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB3ICog
MiwgaCAqIDEsIHcsIGggKTsKKyAgICAgICAgICoKKyAgICAgICAgICogICBOb3RlIHRoZXJlIGlz
IG5vIHJlYXNvbiBtb25pdG9ycyBoYXZlIHRvIGJlIHRoZSBzYW1lIHNpemUgb3IgaW4gYSBncmlk
LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0Vmlld09mZnNldDogZnVuY3Rpb24gKCBmdWxsV2lk
dGgsIGZ1bGxIZWlnaHQsIHgsIHksIHdpZHRoLCBoZWlnaHQgKSB7CiAKLSAgICAgICAgICAgIHRo
aXMuYWxwaGFUZXN0ID0gc291cmNlLmFscGhhVGVzdDsKLSAgICAgICAgICAgIHRoaXMucHJlbXVs
dGlwbGllZEFscGhhID0gc291cmNlLnByZW11bHRpcGxpZWRBbHBoYTsKKyAgICAgICAgICAgIHRo
aXMuYXNwZWN0ID0gZnVsbFdpZHRoIC8gZnVsbEhlaWdodDsKIAotICAgICAgICAgICAgdGhpcy5v
dmVyZHJhdyA9IHNvdXJjZS5vdmVyZHJhdzsKKyAgICAgICAgICAgIGlmICggdGhpcy52aWV3ID09
PSBudWxsICkgewogCi0gICAgICAgICAgICB0aGlzLnZpc2libGUgPSBzb3VyY2UudmlzaWJsZTsK
LSAgICAgICAgICAgIHRoaXMudXNlckRhdGEgPSBKU09OLnBhcnNlKCBKU09OLnN0cmluZ2lmeSgg
c291cmNlLnVzZXJEYXRhICkgKTsKKyAgICAgICAgICAgICAgICB0aGlzLnZpZXcgPSB7CisgICAg
ICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsCisgICAgICAgICAgICAgICAgICAgIGZ1bGxX
aWR0aDogMSwKKyAgICAgICAgICAgICAgICAgICAgZnVsbEhlaWdodDogMSwKKyAgICAgICAgICAg
ICAgICAgICAgb2Zmc2V0WDogMCwKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WTogMCwKKyAg
ICAgICAgICAgICAgICAgICAgd2lkdGg6IDEsCisgICAgICAgICAgICAgICAgICAgIGhlaWdodDog
MQorICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIHRoaXMuY2xpcFNoYWRvd3MgPSBz
b3VyY2UuY2xpcFNoYWRvd3M7Ci0gICAgICAgICAgICB0aGlzLmNsaXBJbnRlcnNlY3Rpb24gPSBz
b3VyY2UuY2xpcEludGVyc2VjdGlvbjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFy
IHNyY1BsYW5lcyA9IHNvdXJjZS5jbGlwcGluZ1BsYW5lcywKLSAgICAgICAgICAgICAgICBkc3RQ
bGFuZXMgPSBudWxsOworICAgICAgICAgICAgdGhpcy52aWV3LmVuYWJsZWQgPSB0cnVlOworICAg
ICAgICAgICAgdGhpcy52aWV3LmZ1bGxXaWR0aCA9IGZ1bGxXaWR0aDsKKyAgICAgICAgICAgIHRo
aXMudmlldy5mdWxsSGVpZ2h0ID0gZnVsbEhlaWdodDsKKyAgICAgICAgICAgIHRoaXMudmlldy5v
ZmZzZXRYID0geDsKKyAgICAgICAgICAgIHRoaXMudmlldy5vZmZzZXRZID0geTsKKyAgICAgICAg
ICAgIHRoaXMudmlldy53aWR0aCA9IHdpZHRoOworICAgICAgICAgICAgdGhpcy52aWV3LmhlaWdo
dCA9IGhlaWdodDsKIAotICAgICAgICAgICAgaWYgKCBzcmNQbGFuZXMgIT09IG51bGwgKSB7Cisg
ICAgICAgICAgICB0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTsKIAotICAgICAgICAgICAg
ICAgIHZhciBuID0gc3JjUGxhbmVzLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBkc3RQbGFuZXMg
PSBuZXcgQXJyYXkoIG4gKTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIGZvciAoIHZh
ciBpID0gMDsgaSAhPT0gbjsgKysgaSApCi0gICAgICAgICAgICAgICAgICAgIGRzdFBsYW5lc1sg
aSBdID0gc3JjUGxhbmVzWyBpIF0uY2xvbmUoKTsKKyAgICAgICAgY2xlYXJWaWV3T2Zmc2V0OiBm
dW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggdGhpcy52aWV3
ICE9PSBudWxsICkgewogCi0gICAgICAgICAgICB0aGlzLmNsaXBwaW5nUGxhbmVzID0gZHN0UGxh
bmVzOworICAgICAgICAgICAgICAgIHRoaXMudmlldy5lbmFibGVkID0gZmFsc2U7CiAKLSAgICAg
ICAgICAgIHRoaXMuc2hhZG93U2lkZSA9IHNvdXJjZS5zaGFkb3dTaWRlOworICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlUHJv
amVjdGlvbk1hdHJpeCgpOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgZGlzcG9zZTogZnVuY3Rp
b24gKCkgeworICAgICAgICB1cGRhdGVQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAoKSB7CiAK
LSAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggeyB0eXBlOiAnZGlzcG9zZScgfSApOwor
ICAgICAgICAgICAgdmFyIG5lYXIgPSB0aGlzLm5lYXIsCisgICAgICAgICAgICAgICAgdG9wID0g
bmVhciAqIE1hdGgudGFuKCBfTWF0aC5ERUcyUkFEICogMC41ICogdGhpcy5mb3YgKSAvIHRoaXMu
em9vbSwKKyAgICAgICAgICAgICAgICBoZWlnaHQgPSAyICogdG9wLAorICAgICAgICAgICAgICAg
IHdpZHRoID0gdGhpcy5hc3BlY3QgKiBoZWlnaHQsCisgICAgICAgICAgICAgICAgbGVmdCA9IC0g
MC41ICogd2lkdGgsCisgICAgICAgICAgICAgICAgdmlldyA9IHRoaXMudmlldzsKIAotICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIHRoaXMudmlldyAhPT0gbnVsbCAmJiB0aGlzLnZpZXcuZW5h
YmxlZCApIHsKIAotICAgIH0gKTsKKyAgICAgICAgICAgICAgICB2YXIgZnVsbFdpZHRoID0gdmll
dy5mdWxsV2lkdGgsCisgICAgICAgICAgICAgICAgICAgIGZ1bGxIZWlnaHQgPSB2aWV3LmZ1bGxI
ZWlnaHQ7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2Iu
Y29tLwotICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20v
Ci0gICAgICoKLSAgICAgKiBwYXJhbWV0ZXJzID0gewotICAgICAqICBjb2xvcjogPGhleD4sCi0g
ICAgICogIG9wYWNpdHk6IDxmbG9hdD4sCi0gICAgICogIG1hcDogbmV3IFRIUkVFLlRleHR1cmUo
IDxJbWFnZT4gKSwKLSAgICAgKgotICAgICAqICBsaWdodE1hcDogbmV3IFRIUkVFLlRleHR1cmUo
IDxJbWFnZT4gKSwKLSAgICAgKiAgbGlnaHRNYXBJbnRlbnNpdHk6IDxmbG9hdD4KLSAgICAgKgot
ICAgICAqICBhb01hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSwKLSAgICAgKiAgYW9N
YXBJbnRlbnNpdHk6IDxmbG9hdD4KLSAgICAgKgotICAgICAqICBzcGVjdWxhck1hcDogbmV3IFRI
UkVFLlRleHR1cmUoIDxJbWFnZT4gKSwKLSAgICAgKgotICAgICAqICBhbHBoYU1hcDogbmV3IFRI
UkVFLlRleHR1cmUoIDxJbWFnZT4gKSwKLSAgICAgKgotICAgICAqICBlbnZNYXA6IG5ldyBUSFJF
RS5DdWJlVGV4dHVyZSggW3Bvc3gsIG5lZ3gsIHBvc3ksIG5lZ3ksIHBvc3osIG5lZ3pdICksCi0g
ICAgICogIGNvbWJpbmU6IFRIUkVFLk11bHRpcGx5LAotICAgICAqICByZWZsZWN0aXZpdHk6IDxm
bG9hdD4sCi0gICAgICogIHJlZnJhY3Rpb25SYXRpbzogPGZsb2F0PiwKLSAgICAgKgotICAgICAq
ICBkZXB0aFRlc3Q6IDxib29sPiwKLSAgICAgKiAgZGVwdGhXcml0ZTogPGJvb2w+LAotICAgICAq
Ci0gICAgICogIHdpcmVmcmFtZTogPGJvb2xlYW4+LAotICAgICAqICB3aXJlZnJhbWVMaW5ld2lk
dGg6IDxmbG9hdD4sCi0gICAgICoKLSAgICAgKiAgc2tpbm5pbmc6IDxib29sPiwKLSAgICAgKiAg
bW9ycGhUYXJnZXRzOiA8Ym9vbD4KLSAgICAgKiB9Ci0gICAgICovCisgICAgICAgICAgICAgICAg
bGVmdCArPSB2aWV3Lm9mZnNldFggKiB3aWR0aCAvIGZ1bGxXaWR0aDsKKyAgICAgICAgICAgICAg
ICB0b3AgLT0gdmlldy5vZmZzZXRZICogaGVpZ2h0IC8gZnVsbEhlaWdodDsKKyAgICAgICAgICAg
ICAgICB3aWR0aCAqPSB2aWV3LndpZHRoIC8gZnVsbFdpZHRoOworICAgICAgICAgICAgICAgIGhl
aWdodCAqPSB2aWV3LmhlaWdodCAvIGZ1bGxIZWlnaHQ7CiAKLSAgICBmdW5jdGlvbiBNZXNoQmFz
aWNNYXRlcmlhbCggcGFyYW1ldGVycyApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBNYXRl
cmlhbC5jYWxsKCB0aGlzICk7CisgICAgICAgICAgICB2YXIgc2tldyA9IHRoaXMuZmlsbU9mZnNl
dDsKKyAgICAgICAgICAgIGlmICggc2tldyAhPT0gMCApIGxlZnQgKz0gbmVhciAqIHNrZXcgLyB0
aGlzLmdldEZpbG1XaWR0aCgpOwogCi0gICAgICAgIHRoaXMudHlwZSA9ICdNZXNoQmFzaWNNYXRl
cmlhbCc7CisgICAgICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZl
KCBsZWZ0LCBsZWZ0ICsgd2lkdGgsIHRvcCwgdG9wIC0gaGVpZ2h0LCBuZWFyLCB0aGlzLmZhciAp
OwogCi0gICAgICAgIHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoIDB4ZmZmZmZmICk7IC8vIGVtaXNz
aXZlCisgICAgICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmdldEludmVyc2Uo
IHRoaXMucHJvamVjdGlvbk1hdHJpeCApOwogCi0gICAgICAgIHRoaXMubWFwID0gbnVsbDsKKyAg
ICAgICAgfSwKIAotICAgICAgICB0aGlzLmxpZ2h0TWFwID0gbnVsbDsKLSAgICAgICAgdGhpcy5s
aWdodE1hcEludGVuc2l0eSA9IDEuMDsKKyAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoIG1ldGEg
KSB7CiAKLSAgICAgICAgdGhpcy5hb01hcCA9IG51bGw7Ci0gICAgICAgIHRoaXMuYW9NYXBJbnRl
bnNpdHkgPSAxLjA7CisgICAgICAgICAgICB2YXIgZGF0YSA9IE9iamVjdDNELnByb3RvdHlwZS50
b0pTT04uY2FsbCggdGhpcywgbWV0YSApOwogCi0gICAgICAgIHRoaXMuc3BlY3VsYXJNYXAgPSBu
dWxsOworICAgICAgICAgICAgZGF0YS5vYmplY3QuZm92ID0gdGhpcy5mb3Y7CisgICAgICAgICAg
ICBkYXRhLm9iamVjdC56b29tID0gdGhpcy56b29tOwogCi0gICAgICAgIHRoaXMuYWxwaGFNYXAg
PSBudWxsOworICAgICAgICAgICAgZGF0YS5vYmplY3QubmVhciA9IHRoaXMubmVhcjsKKyAgICAg
ICAgICAgIGRhdGEub2JqZWN0LmZhciA9IHRoaXMuZmFyOworICAgICAgICAgICAgZGF0YS5vYmpl
Y3QuZm9jdXMgPSB0aGlzLmZvY3VzOwogCi0gICAgICAgIHRoaXMuZW52TWFwID0gbnVsbDsKLSAg
ICAgICAgdGhpcy5jb21iaW5lID0gTXVsdGlwbHlPcGVyYXRpb247Ci0gICAgICAgIHRoaXMucmVm
bGVjdGl2aXR5ID0gMTsKLSAgICAgICAgdGhpcy5yZWZyYWN0aW9uUmF0aW8gPSAwLjk4OworICAg
ICAgICAgICAgZGF0YS5vYmplY3QuYXNwZWN0ID0gdGhpcy5hc3BlY3Q7CiAKLSAgICAgICAgdGhp
cy53aXJlZnJhbWUgPSBmYWxzZTsKLSAgICAgICAgdGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSAx
OwotICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSAncm91bmQnOwotICAgICAgICB0aGlz
LndpcmVmcmFtZUxpbmVqb2luID0gJ3JvdW5kJzsKKyAgICAgICAgICAgIGlmICggdGhpcy52aWV3
ICE9PSBudWxsICkgZGF0YS5vYmplY3QudmlldyA9IE9iamVjdC5hc3NpZ24oIHt9LCB0aGlzLnZp
ZXcgKTsKIAotICAgICAgICB0aGlzLnNraW5uaW5nID0gZmFsc2U7Ci0gICAgICAgIHRoaXMubW9y
cGhUYXJnZXRzID0gZmFsc2U7CisgICAgICAgICAgICBkYXRhLm9iamVjdC5maWxtR2F1Z2UgPSB0
aGlzLmZpbG1HYXVnZTsKKyAgICAgICAgICAgIGRhdGEub2JqZWN0LmZpbG1PZmZzZXQgPSB0aGlz
LmZpbG1PZmZzZXQ7CiAKLSAgICAgICAgdGhpcy5saWdodHMgPSBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiBkYXRhOwogCi0gICAgICAgIHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7Cisg
ICAgICAgIH0KIAotICAgIH0KKyAgICB9ICk7CiAKLSAgICBNZXNoQmFzaWNNYXRlcmlhbC5wcm90
b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNYXRlcmlhbC5wcm90b3R5cGUgKTsKLSAgICBNZXNoQmFz
aWNNYXRlcmlhbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoQmFzaWNNYXRlcmlhbDsKKyAg
ICAvKioKKyAgICAgKiBDYW1lcmEgZm9yIHJlbmRlcmluZyBjdWJlIG1hcHMKKyAgICAgKiAgLSBy
ZW5kZXJzIHNjZW5lIGludG8gYXhpcy1hbGlnbmVkIGN1YmUKKyAgICAgKgorICAgICAqIEBhdXRo
b3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCisgICAgICovCiAKLSAgICBN
ZXNoQmFzaWNNYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbCA9IHRydWU7Cisg
ICAgdmFyIGZvdiA9IDkwLCBhc3BlY3QgPSAxOwogCi0gICAgTWVzaEJhc2ljTWF0ZXJpYWwucHJv
dG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoIHNvdXJjZSApIHsKKyAgICBmdW5jdGlvbiBDdWJlQ2Ft
ZXJhKCBuZWFyLCBmYXIsIGN1YmVSZXNvbHV0aW9uLCBvcHRpb25zICkgewogCi0gICAgICAgIE1h
dGVyaWFsLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOworICAgICAgICBPYmpl
Y3QzRC5jYWxsKCB0aGlzICk7CiAKLSAgICAgICAgdGhpcy5jb2xvci5jb3B5KCBzb3VyY2UuY29s
b3IgKTsKKyAgICAgICAgdGhpcy50eXBlID0gJ0N1YmVDYW1lcmEnOwogCi0gICAgICAgIHRoaXMu
bWFwID0gc291cmNlLm1hcDsKKyAgICAgICAgdmFyIGNhbWVyYVBYID0gbmV3IFBlcnNwZWN0aXZl
Q2FtZXJhKCBmb3YsIGFzcGVjdCwgbmVhciwgZmFyICk7CisgICAgICAgIGNhbWVyYVBYLnVwLnNl
dCggMCwgLSAxLCAwICk7CisgICAgICAgIGNhbWVyYVBYLmxvb2tBdCggbmV3IFZlY3RvcjMoIDEs
IDAsIDAgKSApOworICAgICAgICB0aGlzLmFkZCggY2FtZXJhUFggKTsKIAotICAgICAgICB0aGlz
LmxpZ2h0TWFwID0gc291cmNlLmxpZ2h0TWFwOwotICAgICAgICB0aGlzLmxpZ2h0TWFwSW50ZW5z
aXR5ID0gc291cmNlLmxpZ2h0TWFwSW50ZW5zaXR5OworICAgICAgICB2YXIgY2FtZXJhTlggPSBu
ZXcgUGVyc3BlY3RpdmVDYW1lcmEoIGZvdiwgYXNwZWN0LCBuZWFyLCBmYXIgKTsKKyAgICAgICAg
Y2FtZXJhTlgudXAuc2V0KCAwLCAtIDEsIDAgKTsKKyAgICAgICAgY2FtZXJhTlgubG9va0F0KCBu
ZXcgVmVjdG9yMyggLSAxLCAwLCAwICkgKTsKKyAgICAgICAgdGhpcy5hZGQoIGNhbWVyYU5YICk7
CiAKLSAgICAgICAgdGhpcy5hb01hcCA9IHNvdXJjZS5hb01hcDsKLSAgICAgICAgdGhpcy5hb01h
cEludGVuc2l0eSA9IHNvdXJjZS5hb01hcEludGVuc2l0eTsKKyAgICAgICAgdmFyIGNhbWVyYVBZ
ID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCBmb3YsIGFzcGVjdCwgbmVhciwgZmFyICk7CisgICAg
ICAgIGNhbWVyYVBZLnVwLnNldCggMCwgMCwgMSApOworICAgICAgICBjYW1lcmFQWS5sb29rQXQo
IG5ldyBWZWN0b3IzKCAwLCAxLCAwICkgKTsKKyAgICAgICAgdGhpcy5hZGQoIGNhbWVyYVBZICk7
CiAKLSAgICAgICAgdGhpcy5zcGVjdWxhck1hcCA9IHNvdXJjZS5zcGVjdWxhck1hcDsKKyAgICAg
ICAgdmFyIGNhbWVyYU5ZID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCBmb3YsIGFzcGVjdCwgbmVh
ciwgZmFyICk7CisgICAgICAgIGNhbWVyYU5ZLnVwLnNldCggMCwgMCwgLSAxICk7CisgICAgICAg
IGNhbWVyYU5ZLmxvb2tBdCggbmV3IFZlY3RvcjMoIDAsIC0gMSwgMCApICk7CisgICAgICAgIHRo
aXMuYWRkKCBjYW1lcmFOWSApOwogCi0gICAgICAgIHRoaXMuYWxwaGFNYXAgPSBzb3VyY2UuYWxw
aGFNYXA7CisgICAgICAgIHZhciBjYW1lcmFQWiA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSggZm92
LCBhc3BlY3QsIG5lYXIsIGZhciApOworICAgICAgICBjYW1lcmFQWi51cC5zZXQoIDAsIC0gMSwg
MCApOworICAgICAgICBjYW1lcmFQWi5sb29rQXQoIG5ldyBWZWN0b3IzKCAwLCAwLCAxICkgKTsK
KyAgICAgICAgdGhpcy5hZGQoIGNhbWVyYVBaICk7CiAKLSAgICAgICAgdGhpcy5lbnZNYXAgPSBz
b3VyY2UuZW52TWFwOwotICAgICAgICB0aGlzLmNvbWJpbmUgPSBzb3VyY2UuY29tYmluZTsKLSAg
ICAgICAgdGhpcy5yZWZsZWN0aXZpdHkgPSBzb3VyY2UucmVmbGVjdGl2aXR5OwotICAgICAgICB0
aGlzLnJlZnJhY3Rpb25SYXRpbyA9IHNvdXJjZS5yZWZyYWN0aW9uUmF0aW87CisgICAgICAgIHZh
ciBjYW1lcmFOWiA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSggZm92LCBhc3BlY3QsIG5lYXIsIGZh
ciApOworICAgICAgICBjYW1lcmFOWi51cC5zZXQoIDAsIC0gMSwgMCApOworICAgICAgICBjYW1l
cmFOWi5sb29rQXQoIG5ldyBWZWN0b3IzKCAwLCAwLCAtIDEgKSApOworICAgICAgICB0aGlzLmFk
ZCggY2FtZXJhTlogKTsKIAotICAgICAgICB0aGlzLndpcmVmcmFtZSA9IHNvdXJjZS53aXJlZnJh
bWU7Ci0gICAgICAgIHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gc291cmNlLndpcmVmcmFtZUxp
bmV3aWR0aDsKLSAgICAgICAgdGhpcy53aXJlZnJhbWVMaW5lY2FwID0gc291cmNlLndpcmVmcmFt
ZUxpbmVjYXA7Ci0gICAgICAgIHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSBzb3VyY2Uud2lyZWZy
YW1lTGluZWpvaW47CisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHsgZm9ybWF0OiBSR0JG
b3JtYXQsIG1hZ0ZpbHRlcjogTGluZWFyRmlsdGVyLCBtaW5GaWx0ZXI6IExpbmVhckZpbHRlciB9
OwogCi0gICAgICAgIHRoaXMuc2tpbm5pbmcgPSBzb3VyY2Uuc2tpbm5pbmc7Ci0gICAgICAgIHRo
aXMubW9ycGhUYXJnZXRzID0gc291cmNlLm1vcnBoVGFyZ2V0czsKKyAgICAgICAgdGhpcy5yZW5k
ZXJUYXJnZXQgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXRDdWJlKCBjdWJlUmVzb2x1dGlvbiwgY3Vi
ZVJlc29sdXRpb24sIG9wdGlvbnMgKTsKKyAgICAgICAgdGhpcy5yZW5kZXJUYXJnZXQudGV4dHVy
ZS5uYW1lID0gIkN1YmVDYW1lcmEiOwogCi0gICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB0
aGlzLnVwZGF0ZSA9IGZ1bmN0aW9uICggcmVuZGVyZXIsIHNjZW5lICkgewogCi0gICAgfTsKKyAg
ICAgICAgICAgIGlmICggdGhpcy5wYXJlbnQgPT09IG51bGwgKSB0aGlzLnVwZGF0ZU1hdHJpeFdv
cmxkKCk7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVy
ZWRxdWFsaWEuY29tLwotICAgICAqCi0gICAgICogcGFyYW1ldGVycyA9IHsKLSAgICAgKiAgZGVm
aW5lczogeyAibGFiZWwiIDogInZhbHVlIiB9LAotICAgICAqICB1bmlmb3JtczogeyAicGFyYW1l
dGVyMSI6IHsgdmFsdWU6IDEuMCB9LCAicGFyYW1ldGVyMiI6IHsgdmFsdWUyOiAyIH0gfSwKLSAg
ICAgKgotICAgICAqICBmcmFnbWVudFNoYWRlcjogPHN0cmluZz4sCi0gICAgICogIHZlcnRleFNo
YWRlcjogPHN0cmluZz4sCi0gICAgICoKLSAgICAgKiAgd2lyZWZyYW1lOiA8Ym9vbGVhbj4sCi0g
ICAgICogIHdpcmVmcmFtZUxpbmV3aWR0aDogPGZsb2F0PiwKLSAgICAgKgotICAgICAqICBsaWdo
dHM6IDxib29sPiwKLSAgICAgKgotICAgICAqICBza2lubmluZzogPGJvb2w+LAotICAgICAqICBt
b3JwaFRhcmdldHM6IDxib29sPiwKLSAgICAgKiAgbW9ycGhOb3JtYWxzOiA8Ym9vbD4KLSAgICAg
KiB9Ci0gICAgICovCisgICAgICAgICAgICB2YXIgY3VycmVudFJlbmRlclRhcmdldCA9IHJlbmRl
cmVyLmdldFJlbmRlclRhcmdldCgpOwogCi0gICAgZnVuY3Rpb24gU2hhZGVyTWF0ZXJpYWwoIHBh
cmFtZXRlcnMgKSB7CisgICAgICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy5yZW5kZXJU
YXJnZXQ7CisgICAgICAgICAgICB2YXIgZ2VuZXJhdGVNaXBtYXBzID0gcmVuZGVyVGFyZ2V0LnRl
eHR1cmUuZ2VuZXJhdGVNaXBtYXBzOwogCi0gICAgICAgIE1hdGVyaWFsLmNhbGwoIHRoaXMgKTsK
KyAgICAgICAgICAgIHJlbmRlclRhcmdldC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNl
OwogCi0gICAgICAgIHRoaXMudHlwZSA9ICdTaGFkZXJNYXRlcmlhbCc7CisgICAgICAgICAgICBy
ZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoIHJlbmRlclRhcmdldCwgMCApOworICAgICAgICAgICAg
cmVuZGVyZXIucmVuZGVyKCBzY2VuZSwgY2FtZXJhUFggKTsKIAotICAgICAgICB0aGlzLmRlZmlu
ZXMgPSB7fTsKLSAgICAgICAgdGhpcy51bmlmb3JtcyA9IHt9OworICAgICAgICAgICAgcmVuZGVy
ZXIuc2V0UmVuZGVyVGFyZ2V0KCByZW5kZXJUYXJnZXQsIDEgKTsKKyAgICAgICAgICAgIHJlbmRl
cmVyLnJlbmRlciggc2NlbmUsIGNhbWVyYU5YICk7CiAKLSAgICAgICAgdGhpcy52ZXJ0ZXhTaGFk
ZXIgPSAndm9pZCBtYWluKCkge1xuXHRnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBt
b2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG59JzsKLSAgICAgICAgdGhp
cy5mcmFnbWVudFNoYWRlciA9ICd2b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQo
IDEuMCwgMC4wLCAwLjAsIDEuMCApO1xufSc7CisgICAgICAgICAgICByZW5kZXJlci5zZXRSZW5k
ZXJUYXJnZXQoIHJlbmRlclRhcmdldCwgMiApOworICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVy
KCBzY2VuZSwgY2FtZXJhUFkgKTsKIAotICAgICAgICB0aGlzLmxpbmV3aWR0aCA9IDE7CisgICAg
ICAgICAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoIHJlbmRlclRhcmdldCwgMyApOworICAg
ICAgICAgICAgcmVuZGVyZXIucmVuZGVyKCBzY2VuZSwgY2FtZXJhTlkgKTsKIAotICAgICAgICB0
aGlzLndpcmVmcmFtZSA9IGZhbHNlOwotICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9
IDE7CisgICAgICAgICAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoIHJlbmRlclRhcmdldCwg
NCApOworICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKCBzY2VuZSwgY2FtZXJhUFogKTsKIAot
ICAgICAgICB0aGlzLmZvZyA9IGZhbHNlOyAvLyBzZXQgdG8gdXNlIHNjZW5lIGZvZwotICAgICAg
ICB0aGlzLmxpZ2h0cyA9IGZhbHNlOyAvLyBzZXQgdG8gdXNlIHNjZW5lIGxpZ2h0cwotICAgICAg
ICB0aGlzLmNsaXBwaW5nID0gZmFsc2U7IC8vIHNldCB0byB1c2UgdXNlci1kZWZpbmVkIGNsaXBw
aW5nIHBsYW5lcworICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LnRleHR1cmUuZ2VuZXJhdGVNaXBt
YXBzID0gZ2VuZXJhdGVNaXBtYXBzOwogCi0gICAgICAgIHRoaXMuc2tpbm5pbmcgPSBmYWxzZTsg
Ly8gc2V0IHRvIHVzZSBza2lubmluZyBhdHRyaWJ1dGUgc3RyZWFtcwotICAgICAgICB0aGlzLm1v
cnBoVGFyZ2V0cyA9IGZhbHNlOyAvLyBzZXQgdG8gdXNlIG1vcnBoIHRhcmdldHMKLSAgICAgICAg
dGhpcy5tb3JwaE5vcm1hbHMgPSBmYWxzZTsgLy8gc2V0IHRvIHVzZSBtb3JwaCBub3JtYWxzCisg
ICAgICAgICAgICByZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoIHJlbmRlclRhcmdldCwgNSApOwor
ICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKCBzY2VuZSwgY2FtZXJhTlogKTsKIAotICAgICAg
ICB0aGlzLmV4dGVuc2lvbnMgPSB7Ci0gICAgICAgICAgICBkZXJpdmF0aXZlczogZmFsc2UsIC8v
IHNldCB0byB1c2UgZGVyaXZhdGl2ZXMKLSAgICAgICAgICAgIGZyYWdEZXB0aDogZmFsc2UsIC8v
IHNldCB0byB1c2UgZnJhZ21lbnQgZGVwdGggdmFsdWVzCi0gICAgICAgICAgICBkcmF3QnVmZmVy
czogZmFsc2UsIC8vIHNldCB0byB1c2UgZHJhdyBidWZmZXJzCi0gICAgICAgICAgICBzaGFkZXJU
ZXh0dXJlTE9EOiBmYWxzZSAvLyBzZXQgdG8gdXNlIHNoYWRlciB0ZXh0dXJlIExPRAotICAgICAg
ICB9OworICAgICAgICAgICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCBjdXJyZW50UmVuZGVy
VGFyZ2V0ICk7CiAKLSAgICAgICAgLy8gV2hlbiByZW5kZXJlZCBnZW9tZXRyeSBkb2Vzbid0IGlu
Y2x1ZGUgdGhlc2UgYXR0cmlidXRlcyBidXQgdGhlIG1hdGVyaWFsIGRvZXMsCi0gICAgICAgIC8v
IHVzZSB0aGVzZSBkZWZhdWx0IHZhbHVlcyBpbiBXZWJHTC4gVGhpcyBhdm9pZHMgZXJyb3JzIHdo
ZW4gYnVmZmVyIGRhdGEgaXMgbWlzc2luZy4KLSAgICAgICAgdGhpcy5kZWZhdWx0QXR0cmlidXRl
VmFsdWVzID0gewotICAgICAgICAgICAgJ2NvbG9yJzogWyAxLCAxLCAxIF0sCi0gICAgICAgICAg
ICAndXYnOiBbIDAsIDAgXSwKLSAgICAgICAgICAgICd1djInOiBbIDAsIDAgXQogICAgICAgICB9
OwogCi0gICAgICAgIHRoaXMuaW5kZXgwQXR0cmlidXRlTmFtZSA9IHVuZGVmaW5lZDsKLSAgICAg
ICAgdGhpcy51bmlmb3Jtc05lZWRVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5jbGVhciA9
IGZ1bmN0aW9uICggcmVuZGVyZXIsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCApIHsKIAotICAgICAg
ICBpZiAoIHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHZhciBjdXJy
ZW50UmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7CiAKLSAgICAgICAg
ICAgIGlmICggcGFyYW1ldGVycy5hdHRyaWJ1dGVzICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAg
ICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gdGhpcy5yZW5kZXJUYXJnZXQ7CiAKLSAgICAgICAgICAg
ICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hv
dWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuJyApOwor
ICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgNjsgaSArKyApIHsKKworICAgICAgICAg
ICAgICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCggcmVuZGVyVGFyZ2V0LCBpICk7CisKKyAg
ICAgICAgICAgICAgICByZW5kZXJlci5jbGVhciggY29sb3IsIGRlcHRoLCBzdGVuY2lsICk7CiAK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMg
KTsKKyAgICAgICAgICAgIHJlbmRlcmVyLnNldFJlbmRlclRhcmdldCggY3VycmVudFJlbmRlclRh
cmdldCApOwogCi0gICAgICAgIH0KKyAgICAgICAgfTsKIAogICAgIH0KIAotICAgIFNoYWRlck1h
dGVyaWFsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1hdGVyaWFsLnByb3RvdHlwZSApOwot
ICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRlck1hdGVyaWFs
OwotCi0gICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLmlzU2hhZGVyTWF0ZXJpYWwgPSB0cnVl
OworICAgIEN1YmVDYW1lcmEucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggT2JqZWN0M0QucHJv
dG90eXBlICk7CisgICAgQ3ViZUNhbWVyYS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDdWJlQ2Ft
ZXJhOwogCi0gICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoIHNv
dXJjZSApIHsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVy
ZWRxdWFsaWEuY29tCisgICAgICogQGF1dGhvciBXZXN0TGFuZ2xleSAvIGh0dHA6Ly9naXRodWIu
Y29tL1dlc3RMYW5nbGV5CisgICAgICovCiAKLSAgICAgICAgTWF0ZXJpYWwucHJvdG90eXBlLmNv
cHkuY2FsbCggdGhpcywgc291cmNlICk7CisgICAgZnVuY3Rpb24gV2ViR0xSZW5kZXJUYXJnZXRD
dWJlKCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zICkgewogCi0gICAgICAgIHRoaXMuZnJhZ21lbnRT
aGFkZXIgPSBzb3VyY2UuZnJhZ21lbnRTaGFkZXI7Ci0gICAgICAgIHRoaXMudmVydGV4U2hhZGVy
ID0gc291cmNlLnZlcnRleFNoYWRlcjsKKyAgICAgICAgV2ViR0xSZW5kZXJUYXJnZXQuY2FsbCgg
dGhpcywgd2lkdGgsIGhlaWdodCwgb3B0aW9ucyApOwogCi0gICAgICAgIHRoaXMudW5pZm9ybXMg
PSBVbmlmb3Jtc1V0aWxzLmNsb25lKCBzb3VyY2UudW5pZm9ybXMgKTsKKyAgICB9CiAKLSAgICAg
ICAgdGhpcy5kZWZpbmVzID0gT2JqZWN0LmFzc2lnbigge30sIHNvdXJjZS5kZWZpbmVzICk7Cisg
ICAgV2ViR0xSZW5kZXJUYXJnZXRDdWJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFdlYkdM
UmVuZGVyVGFyZ2V0LnByb3RvdHlwZSApOworICAgIFdlYkdMUmVuZGVyVGFyZ2V0Q3ViZS5wcm90
b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTFJlbmRlclRhcmdldEN1YmU7CiAKLSAgICAgICAgdGhp
cy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lOwotICAgICAgICB0aGlzLndpcmVmcmFtZUxp
bmV3aWR0aCA9IHNvdXJjZS53aXJlZnJhbWVMaW5ld2lkdGg7CisgICAgV2ViR0xSZW5kZXJUYXJn
ZXRDdWJlLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZSA9IHRydWU7CiAKLSAgICAg
ICAgdGhpcy5saWdodHMgPSBzb3VyY2UubGlnaHRzOwotICAgICAgICB0aGlzLmNsaXBwaW5nID0g
c291cmNlLmNsaXBwaW5nOworICAgIFdlYkdMUmVuZGVyVGFyZ2V0Q3ViZS5wcm90b3R5cGUuZnJv
bUVxdWlyZWN0YW5ndWxhclRleHR1cmUgPSBmdW5jdGlvbiAoIHJlbmRlcmVyLCB0ZXh0dXJlICkg
ewogCi0gICAgICAgIHRoaXMuc2tpbm5pbmcgPSBzb3VyY2Uuc2tpbm5pbmc7CisgICAgICAgIHRo
aXMudGV4dHVyZS50eXBlID0gdGV4dHVyZS50eXBlOworICAgICAgICB0aGlzLnRleHR1cmUuZm9y
bWF0ID0gdGV4dHVyZS5mb3JtYXQ7CisgICAgICAgIHRoaXMudGV4dHVyZS5lbmNvZGluZyA9IHRl
eHR1cmUuZW5jb2Rpbmc7CiAKLSAgICAgICAgdGhpcy5tb3JwaFRhcmdldHMgPSBzb3VyY2UubW9y
cGhUYXJnZXRzOwotICAgICAgICB0aGlzLm1vcnBoTm9ybWFscyA9IHNvdXJjZS5tb3JwaE5vcm1h
bHM7CisgICAgICAgIHZhciBzY2VuZSA9IG5ldyBTY2VuZSgpOwogCi0gICAgICAgIHRoaXMuZXh0
ZW5zaW9ucyA9IHNvdXJjZS5leHRlbnNpb25zOworICAgICAgICB2YXIgc2hhZGVyID0gewogCi0g
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgdW5pZm9ybXM6IHsKKyAgICAgICAgICAg
ICAgICB0RXF1aXJlY3Q6IHsgdmFsdWU6IG51bGwgfSwKKyAgICAgICAgICAgIH0sCiAKLSAgICB9
OworICAgICAgICAgICAgdmVydGV4U2hhZGVyOiBbCiAKLSAgICBTaGFkZXJNYXRlcmlhbC5wcm90
b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCBtZXRhICkgeworICAgICAgICAgICAgICAgICJ2YXJ5
aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOyIsCiAKLSAgICAgICAgdmFyIGRhdGEgPSBNYXRlcmlh
bC5wcm90b3R5cGUudG9KU09OLmNhbGwoIHRoaXMsIG1ldGEgKTsKKyAgICAgICAgICAgICAgICAi
dmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsi
LAogCi0gICAgICAgIGRhdGEudW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zOwotICAgICAgICBkYXRh
LnZlcnRleFNoYWRlciA9IHRoaXMudmVydGV4U2hhZGVyOwotICAgICAgICBkYXRhLmZyYWdtZW50
U2hhZGVyID0gdGhpcy5mcmFnbWVudFNoYWRlcjsKKyAgICAgICAgICAgICAgICAiICAgcmV0dXJu
IG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7IiwKIAotICAg
ICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAgICAgICAifSIsCiAKLSAgICB9OworICAgICAg
ICAgICAgICAgICJ2b2lkIG1haW4oKSB7IiwKIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgYmhv
dXN0b24gLyBodHRwOi8vY2xhcmEuaW8KLSAgICAgKi8KKyAgICAgICAgICAgICAgICAiICAgdldv
cmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXgg
KTsiLAogCi0gICAgZnVuY3Rpb24gUmF5KCBvcmlnaW4sIGRpcmVjdGlvbiApIHsKKyAgICAgICAg
ICAgICAgICAiICAgI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4iLAorICAgICAgICAgICAgICAgICIg
ICAjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+IiwKIAotICAgICAgICB0aGlzLm9yaWdpbiA9ICgg
b3JpZ2luICE9PSB1bmRlZmluZWQgKSA/IG9yaWdpbiA6IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAg
IHRoaXMuZGlyZWN0aW9uID0gKCBkaXJlY3Rpb24gIT09IHVuZGVmaW5lZCApID8gZGlyZWN0aW9u
IDogbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgICAgICAifSIKIAotICAgIH0KKyAgICAgICAg
ICAgIF0uam9pbiggJ1xuJyApLAogCi0gICAgT2JqZWN0LmFzc2lnbiggUmF5LnByb3RvdHlwZSwg
eworICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXI6IFsKIAotICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICggb3JpZ2luLCBkaXJlY3Rpb24gKSB7CisgICAgICAgICAgICAgICAgInVuaWZvcm0gc2FtcGxl
cjJEIHRFcXVpcmVjdDsiLAogCi0gICAgICAgICAgICB0aGlzLm9yaWdpbi5jb3B5KCBvcmlnaW4g
KTsKLSAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLmNvcHkoIGRpcmVjdGlvbiApOworICAgICAg
ICAgICAgICAgICJ2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOyIsCiAKLSAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgICIjZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4z
MTgzMDk4ODYxOCIsCisgICAgICAgICAgICAgICAgIiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4x
NTkxNTQ5NCIsCiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAidm9pZCBtYWluKCkgeyIs
CiAKLSAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAiICAgdmVj
MyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApOyIsCiAKLSAgICAgICAg
ICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKKyAgICAgICAg
ICAgICAgICAiICAgdmVjMiBzYW1wbGVVVjsiLAogCi0gICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgIiAgIHNhbXBsZVVWLnkgPSBhc2luKCBjbGFtcCggZGlyZWN0aW9uLnksIC0gMS4wLCAxLjAg
KSApICogUkVDSVBST0NBTF9QSSArIDAuNTsiLAogCi0gICAgICAgIGNvcHk6IGZ1bmN0aW9uICgg
cmF5ICkgeworICAgICAgICAgICAgICAgICIgICBzYW1wbGVVVi54ID0gYXRhbiggZGlyZWN0aW9u
LnosIGRpcmVjdGlvbi54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTsiLAogCi0gICAgICAgICAg
ICB0aGlzLm9yaWdpbi5jb3B5KCByYXkub3JpZ2luICk7Ci0gICAgICAgICAgICB0aGlzLmRpcmVj
dGlvbi5jb3B5KCByYXkuZGlyZWN0aW9uICk7CisgICAgICAgICAgICAgICAgIiAgIGdsX0ZyYWdD
b2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApOyIsCiAKLSAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgICJ9IgogCi0gICAgICAgIH0sCisgICAgICAg
ICAgICBdLmpvaW4oICdcbicgKSwKKyAgICAgICAgfTsKIAotICAgICAgICBhdDogZnVuY3Rpb24g
KCB0LCB0YXJnZXQgKSB7CisgICAgICAgIHZhciBtYXRlcmlhbCA9IG5ldyBTaGFkZXJNYXRlcmlh
bCggewogCi0gICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVkICkgeworICAgICAg
ICAgICAgdHlwZTogJ0N1YmVtYXBGcm9tRXF1aXJlY3QnLAogCi0gICAgICAgICAgICAgICAgY29u
c29sZS53YXJuKCAnVEhSRUUuUmF5OiAuYXQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOwot
ICAgICAgICAgICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICB1bmlm
b3JtczogY2xvbmVVbmlmb3Jtcyggc2hhZGVyLnVuaWZvcm1zICksCisgICAgICAgICAgICB2ZXJ0
ZXhTaGFkZXI6IHNoYWRlci52ZXJ0ZXhTaGFkZXIsCisgICAgICAgICAgICBmcmFnbWVudFNoYWRl
cjogc2hhZGVyLmZyYWdtZW50U2hhZGVyLAorICAgICAgICAgICAgc2lkZTogQmFja1NpZGUsCisg
ICAgICAgICAgICBibGVuZGluZzogTm9CbGVuZGluZwogCi0gICAgICAgICAgICB9CisgICAgICAg
IH0gKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5jb3B5KCB0aGlzLmRpcmVjdGlvbiAp
Lm11bHRpcGx5U2NhbGFyKCB0ICkuYWRkKCB0aGlzLm9yaWdpbiApOworICAgICAgICBtYXRlcmlh
bC51bmlmb3Jtcy50RXF1aXJlY3QudmFsdWUgPSB0ZXh0dXJlOwogCi0gICAgICAgIH0sCisgICAg
ICAgIHZhciBtZXNoID0gbmV3IE1lc2goIG5ldyBCb3hCdWZmZXJHZW9tZXRyeSggNSwgNSwgNSAp
LCBtYXRlcmlhbCApOwogCi0gICAgICAgIGxvb2tBdDogZnVuY3Rpb24gKCB2ICkgeworICAgICAg
ICBzY2VuZS5hZGQoIG1lc2ggKTsKIAotICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24uY29weSgg
diApLnN1YiggdGhpcy5vcmlnaW4gKS5ub3JtYWxpemUoKTsKKyAgICAgICAgdmFyIGNhbWVyYSA9
IG5ldyBDdWJlQ2FtZXJhKCAxLCAxMCwgMSApOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsK
KyAgICAgICAgY2FtZXJhLnJlbmRlclRhcmdldCA9IHRoaXM7CisgICAgICAgIGNhbWVyYS5yZW5k
ZXJUYXJnZXQudGV4dHVyZS5uYW1lID0gJ0N1YmVDYW1lcmFUZXh0dXJlJzsKIAotICAgICAgICB9
LAorICAgICAgICBjYW1lcmEudXBkYXRlKCByZW5kZXJlciwgc2NlbmUgKTsKIAotICAgICAgICBy
ZWNhc3Q6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgbWVzaC5nZW9tZXRyeS5kaXNwb3NlKCk7Cisg
ICAgICAgIG1lc2gubWF0ZXJpYWwuZGlzcG9zZSgpOwogCi0gICAgICAgICAgICB2YXIgdjEgPSBu
ZXcgVmVjdG9yMygpOworICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uIHJlY2FzdCggdCApIHsKKyAgICB9OwogCi0gICAgICAgICAgICAgICAgdGhpcy5v
cmlnaW4uY29weSggdGhpcy5hdCggdCwgdjEgKSApOworICAgIC8qKgorICAgICAqIEBhdXRob3Ig
YWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCisgICAgICovCiAKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICBmdW5jdGlvbiBEYXRhVGV4dHVyZSggZGF0YSwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRl
ciwgbWluRmlsdGVyLCBhbmlzb3Ryb3B5LCBlbmNvZGluZyApIHsKIAotICAgICAgICAgICAgfTsK
KyAgICAgICAgVGV4dHVyZS5jYWxsKCB0aGlzLCBudWxsLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQs
IG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHksIGVuY29kaW5n
ICk7CiAKLSAgICAgICAgfSgpLAorICAgICAgICB0aGlzLmltYWdlID0geyBkYXRhOiBkYXRhLCB3
aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0IH07CiAKLSAgICAgICAgY2xvc2VzdFBvaW50VG9Q
b2ludDogZnVuY3Rpb24gKCBwb2ludCwgdGFyZ2V0ICkgeworICAgICAgICB0aGlzLm1hZ0ZpbHRl
ciA9IG1hZ0ZpbHRlciAhPT0gdW5kZWZpbmVkID8gbWFnRmlsdGVyIDogTmVhcmVzdEZpbHRlcjsK
KyAgICAgICAgdGhpcy5taW5GaWx0ZXIgPSBtaW5GaWx0ZXIgIT09IHVuZGVmaW5lZCA/IG1pbkZp
bHRlciA6IE5lYXJlc3RGaWx0ZXI7CiAKLSAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRl
ZmluZWQgKSB7CisgICAgICAgIHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7CisgICAgICAg
IHRoaXMuZmxpcFkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy51bnBhY2tBbGlnbm1lbnQgPSAxOwog
Ci0gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuUmF5OiAuY2xvc2VzdFBvaW50
VG9Qb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7Ci0gICAgICAgICAgICAgICAgdGFy
Z2V0ID0gbmV3IFZlY3RvcjMoKTsKKyAgICB9CiAKLSAgICAgICAgICAgIH0KKyAgICBEYXRhVGV4
dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBUZXh0dXJlLnByb3RvdHlwZSApOworICAg
IERhdGFUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERhdGFUZXh0dXJlOwogCi0gICAg
ICAgICAgICB0YXJnZXQuc3ViVmVjdG9ycyggcG9pbnQsIHRoaXMub3JpZ2luICk7CisgICAgRGF0
YVRleHR1cmUucHJvdG90eXBlLmlzRGF0YVRleHR1cmUgPSB0cnVlOwogCi0gICAgICAgICAgICB2
YXIgZGlyZWN0aW9uRGlzdGFuY2UgPSB0YXJnZXQuZG90KCB0aGlzLmRpcmVjdGlvbiApOworICAg
IC8qKgorICAgICAqIEBhdXRob3IgYmhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW8KKyAgICAgKi8K
IAotICAgICAgICAgICAgaWYgKCBkaXJlY3Rpb25EaXN0YW5jZSA8IDAgKSB7CisgICAgZnVuY3Rp
b24gUGxhbmUoIG5vcm1hbCwgY29uc3RhbnQgKSB7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGFyZ2V0LmNvcHkoIHRoaXMub3JpZ2luICk7CisgICAgICAgIC8vIG5vcm1hbCBpcyBhc3N1bWVk
IHRvIGJlIG5vcm1hbGl6ZWQKIAotICAgICAgICAgICAgfQorICAgICAgICB0aGlzLm5vcm1hbCA9
ICggbm9ybWFsICE9PSB1bmRlZmluZWQgKSA/IG5vcm1hbCA6IG5ldyBWZWN0b3IzKCAxLCAwLCAw
ICk7CisgICAgICAgIHRoaXMuY29uc3RhbnQgPSAoIGNvbnN0YW50ICE9PSB1bmRlZmluZWQgKSA/
IGNvbnN0YW50IDogMDsKIAotICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5jb3B5KCB0aGlzLmRp
cmVjdGlvbiApLm11bHRpcGx5U2NhbGFyKCBkaXJlY3Rpb25EaXN0YW5jZSApLmFkZCggdGhpcy5v
cmlnaW4gKTsKKyAgICB9CisKKyAgICBPYmplY3QuYXNzaWduKCBQbGFuZS5wcm90b3R5cGUsIHsK
KworICAgICAgICBpc1BsYW5lOiB0cnVlLAorCisgICAgICAgIHNldDogZnVuY3Rpb24gKCBub3Jt
YWwsIGNvbnN0YW50ICkgeworCisgICAgICAgICAgICB0aGlzLm5vcm1hbC5jb3B5KCBub3JtYWwg
KTsKKyAgICAgICAgICAgIHRoaXMuY29uc3RhbnQgPSBjb25zdGFudDsKKworICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBkaXN0YW5jZVRvUG9pbnQ6IGZ1
bmN0aW9uICggcG9pbnQgKSB7CisgICAgICAgIHNldENvbXBvbmVudHM6IGZ1bmN0aW9uICggeCwg
eSwgeiwgdyApIHsKIAotICAgICAgICAgICAgcmV0dXJuIE1hdGguc3FydCggdGhpcy5kaXN0YW5j
ZVNxVG9Qb2ludCggcG9pbnQgKSApOworICAgICAgICAgICAgdGhpcy5ub3JtYWwuc2V0KCB4LCB5
LCB6ICk7CisgICAgICAgICAgICB0aGlzLmNvbnN0YW50ID0gdzsKKworICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBkaXN0YW5jZVNxVG9Qb2ludDogZnVu
Y3Rpb24gKCkgeworICAgICAgICBzZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludDogZnVuY3Rp
b24gKCBub3JtYWwsIHBvaW50ICkgewogCi0gICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9y
MygpOworICAgICAgICAgICAgdGhpcy5ub3JtYWwuY29weSggbm9ybWFsICk7CisgICAgICAgICAg
ICB0aGlzLmNvbnN0YW50ID0gLSBwb2ludC5kb3QoIHRoaXMubm9ybWFsICk7CiAKLSAgICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbiBkaXN0YW5jZVNxVG9Qb2ludCggcG9pbnQgKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIHZhciBkaXJlY3Rpb25EaXN0YW5j
ZSA9IHYxLnN1YlZlY3RvcnMoIHBvaW50LCB0aGlzLm9yaWdpbiApLmRvdCggdGhpcy5kaXJlY3Rp
b24gKTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIC8vIHBvaW50IGJlaGluZCB0aGUg
cmF5CisgICAgICAgIHNldEZyb21Db3BsYW5hclBvaW50czogZnVuY3Rpb24gKCkgewogCi0gICAg
ICAgICAgICAgICAgaWYgKCBkaXJlY3Rpb25EaXN0YW5jZSA8IDAgKSB7CisgICAgICAgICAgICB2
YXIgdjEgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdmFyIHYyID0gbmV3IFZlY3RvcjMo
KTsKIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW4uZGlzdGFuY2VUb1Nx
dWFyZWQoIHBvaW50ICk7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gc2V0RnJvbUNvcGxh
bmFyUG9pbnRzKCBhLCBiLCBjICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHZhciBub3JtYWwgPSB2MS5zdWJWZWN0b3JzKCBjLCBiICkuY3Jvc3MoIHYyLnN1YlZlY3Rv
cnMoIGEsIGIgKSApLm5vcm1hbGl6ZSgpOwogCi0gICAgICAgICAgICAgICAgdjEuY29weSggdGhp
cy5kaXJlY3Rpb24gKS5tdWx0aXBseVNjYWxhciggZGlyZWN0aW9uRGlzdGFuY2UgKS5hZGQoIHRo
aXMub3JpZ2luICk7CisgICAgICAgICAgICAgICAgLy8gUTogc2hvdWxkIGFuIGVycm9yIGJlIHRo
cm93biBpZiBub3JtYWwgaXMgemVybyAoZS5nLiBkZWdlbmVyYXRlIHBsYW5lKT8KIAotICAgICAg
ICAgICAgICAgIHJldHVybiB2MS5kaXN0YW5jZVRvU3F1YXJlZCggcG9pbnQgKTsKKyAgICAgICAg
ICAgICAgICB0aGlzLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KCBub3JtYWwsIGEgKTsK
KworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgICAgICB9OwogCiAgICAg
ICAgIH0oKSwKIAotICAgICAgICBkaXN0YW5jZVNxVG9TZWdtZW50OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHZhciBzZWdDZW50ZXIg
PSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgdmFyIHNlZ0RpciA9IG5ldyBWZWN0b3IzKCk7
Ci0gICAgICAgICAgICB2YXIgZGlmZiA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICByZXR1
cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7CiAKLSAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbiBkaXN0YW5jZVNxVG9TZWdtZW50KCB2MCwgdjEsIG9wdGlvbmFsUG9pbnRP
blJheSwgb3B0aW9uYWxQb2ludE9uU2VnbWVudCApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAg
ICAgICAgIC8vIGZyb20gaHR0cDovL3d3dy5nZW9tZXRyaWN0b29scy5jb20vR1RFbmdpbmUvSW5j
bHVkZS9NYXRoZW1hdGljcy9HdGVEaXN0UmF5U2VnbWVudC5oCi0gICAgICAgICAgICAgICAgLy8g
SXQgcmV0dXJucyB0aGUgbWluIGRpc3RhbmNlIGJldHdlZW4gdGhlIHJheSBhbmQgdGhlIHNlZ21l
bnQKLSAgICAgICAgICAgICAgICAvLyBkZWZpbmVkIGJ5IHYwIGFuZCB2MQotICAgICAgICAgICAg
ICAgIC8vIEl0IGNhbiBhbHNvIHNldCB0d28gb3B0aW9uYWwgdGFyZ2V0cyA6Ci0gICAgICAgICAg
ICAgICAgLy8gLSBUaGUgY2xvc2VzdCBwb2ludCBvbiB0aGUgcmF5Ci0gICAgICAgICAgICAgICAg
Ly8gLSBUaGUgY2xvc2VzdCBwb2ludCBvbiB0aGUgc2VnbWVudAorICAgICAgICBjb3B5OiBmdW5j
dGlvbiAoIHBsYW5lICkgewogCi0gICAgICAgICAgICAgICAgc2VnQ2VudGVyLmNvcHkoIHYwICku
YWRkKCB2MSApLm11bHRpcGx5U2NhbGFyKCAwLjUgKTsKLSAgICAgICAgICAgICAgICBzZWdEaXIu
Y29weSggdjEgKS5zdWIoIHYwICkubm9ybWFsaXplKCk7Ci0gICAgICAgICAgICAgICAgZGlmZi5j
b3B5KCB0aGlzLm9yaWdpbiApLnN1Yiggc2VnQ2VudGVyICk7CisgICAgICAgICAgICB0aGlzLm5v
cm1hbC5jb3B5KCBwbGFuZS5ub3JtYWwgKTsKKyAgICAgICAgICAgIHRoaXMuY29uc3RhbnQgPSBw
bGFuZS5jb25zdGFudDsKIAotICAgICAgICAgICAgICAgIHZhciBzZWdFeHRlbnQgPSB2MC5kaXN0
YW5jZVRvKCB2MSApICogMC41OwotICAgICAgICAgICAgICAgIHZhciBhMDEgPSAtIHRoaXMuZGly
ZWN0aW9uLmRvdCggc2VnRGlyICk7Ci0gICAgICAgICAgICAgICAgdmFyIGIwID0gZGlmZi5kb3Qo
IHRoaXMuZGlyZWN0aW9uICk7Ci0gICAgICAgICAgICAgICAgdmFyIGIxID0gLSBkaWZmLmRvdCgg
c2VnRGlyICk7Ci0gICAgICAgICAgICAgICAgdmFyIGMgPSBkaWZmLmxlbmd0aFNxKCk7Ci0gICAg
ICAgICAgICAgICAgdmFyIGRldCA9IE1hdGguYWJzKCAxIC0gYTAxICogYTAxICk7Ci0gICAgICAg
ICAgICAgICAgdmFyIHMwLCBzMSwgc3FyRGlzdCwgZXh0RGV0OworICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGRldCA+IDAgKSB7CisgICAgICAgIH0sCiAK
LSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJheSBhbmQgc2VnbWVudCBhcmUgbm90IHBhcmFs
bGVsLgorICAgICAgICBub3JtYWxpemU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAg
ICAgICBzMCA9IGEwMSAqIGIxIC0gYjA7Ci0gICAgICAgICAgICAgICAgICAgIHMxID0gYTAxICog
YjAgLSBiMTsKLSAgICAgICAgICAgICAgICAgICAgZXh0RGV0ID0gc2VnRXh0ZW50ICogZGV0Owor
ICAgICAgICAgICAgLy8gTm90ZTogd2lsbCBsZWFkIHRvIGEgZGl2aWRlIGJ5IHplcm8gaWYgdGhl
IHBsYW5lIGlzIGludmFsaWQuCiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBzMCA+PSAwICkg
eworICAgICAgICAgICAgdmFyIGludmVyc2VOb3JtYWxMZW5ndGggPSAxLjAgLyB0aGlzLm5vcm1h
bC5sZW5ndGgoKTsKKyAgICAgICAgICAgIHRoaXMubm9ybWFsLm11bHRpcGx5U2NhbGFyKCBpbnZl
cnNlTm9ybWFsTGVuZ3RoICk7CisgICAgICAgICAgICB0aGlzLmNvbnN0YW50ICo9IGludmVyc2VO
b3JtYWxMZW5ndGg7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggczEgPj0gLSBleHRE
ZXQgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggczEgPD0gZXh0RGV0ICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lvbiAwCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE1pbmltdW0gYXQgaW50ZXJpb3IgcG9pbnRzIG9mIHJheSBhbmQgc2VnbWVudC4K
KyAgICAgICAgbmVnYXRlOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGludkRldCA9IDEgLyBkZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHMwICo9IGludkRldDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEg
Kj0gaW52RGV0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcXJEaXN0ID0gczAg
KiAoIHMwICsgYTAxICogczEgKyAyICogYjAgKSArIHMxICogKCBhMDEgKiBzMCArIHMxICsgMiAq
IGIxICkgKyBjOworICAgICAgICAgICAgdGhpcy5jb25zdGFudCAqPSAtIDE7CisgICAgICAgICAg
ICB0aGlzLm5vcm1hbC5uZWdhdGUoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyByZWdpb24gMQorICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHMxID0gc2VnRXh0ZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzMCA9IE1hdGgubWF4KCAwLCAtICggYTAxICogczEgKyBiMCApICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNxckRpc3QgPSAtIHMwICogczAgKyBzMSAqICggczEgKyAy
ICogYjEgKSArIGM7CisgICAgICAgIGRpc3RhbmNlVG9Qb2ludDogZnVuY3Rpb24gKCBwb2ludCAp
IHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0
aGlzLm5vcm1hbC5kb3QoIHBvaW50ICkgKyB0aGlzLmNvbnN0YW50OwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gcmVnaW9uIDUKKyAgICAgICAgZGlzdGFuY2VUb1NwaGVyZTogZnVuY3Rpb24gKCBz
cGhlcmUgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IC0gc2VnRXh0ZW50
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gTWF0aC5tYXgoIDAsIC0gKCBhMDEg
KiBzMSArIGIwICkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcXJEaXN0ID0gLSBz
MCAqIHMwICsgczEgKiAoIHMxICsgMiAqIGIxICkgKyBjOworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZGlzdGFuY2VUb1BvaW50KCBzcGhlcmUuY2VudGVyICkgLSBzcGhlcmUucmFkaXVzOwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgcHJvamVjdFBvaW50OiBmdW5jdGlvbiAoIHBvaW50LCB0YXJn
ZXQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggczEgPD0gLSBleHREZXQgKSB7
CisgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gcmVnaW9uIDQKKyAgICAgICAgICAgICAgICBjb25zb2xlLndh
cm4oICdUSFJFRS5QbGFuZTogLnByb2plY3RQb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQn
ICk7CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHMwID0gTWF0aC5tYXgoIDAsIC0gKCAtIGEwMSAqIHNlZ0V4dGVu
dCArIGIwICkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9ICggczAgPiAwICkg
PyAtIHNlZ0V4dGVudCA6IE1hdGgubWluKCBNYXRoLm1heCggLSBzZWdFeHRlbnQsIC0gYjEgKSwg
c2VnRXh0ZW50ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FyRGlzdCA9IC0gczAg
KiBzMCArIHMxICogKCBzMSArIDIgKiBiMSApICsgYzsKKyAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggczEgPD0gZXh0RGV0ICkgeworICAgICAgICAg
ICAgcmV0dXJuIHRhcmdldC5jb3B5KCB0aGlzLm5vcm1hbCApLm11bHRpcGx5U2NhbGFyKCAtIHRo
aXMuZGlzdGFuY2VUb1BvaW50KCBwb2ludCApICkuYWRkKCBwb2ludCApOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gcmVnaW9uIDMKKyAgICAgICAgfSwKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHMwID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9
IE1hdGgubWluKCBNYXRoLm1heCggLSBzZWdFeHRlbnQsIC0gYjEgKSwgc2VnRXh0ZW50ICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FyRGlzdCA9IHMxICogKCBzMSArIDIgKiBiMSAp
ICsgYzsKKyAgICAgICAgaW50ZXJzZWN0TGluZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMo
KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lvbiAyCisgICAgICAgICAg
ICByZXR1cm4gZnVuY3Rpb24gaW50ZXJzZWN0TGluZSggbGluZSwgdGFyZ2V0ICkgewogCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBNYXRoLm1heCggMCwgLSAoIGEwMSAqIHNlZ0V4
dGVudCArIGIwICkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9ICggczAgPiAw
ICkgPyBzZWdFeHRlbnQgOiBNYXRoLm1pbiggTWF0aC5tYXgoIC0gc2VnRXh0ZW50LCAtIGIxICks
IHNlZ0V4dGVudCApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxckRpc3QgPSAtIHMw
ICogczAgKyBzMSAqICggczEgKyAyICogYjEgKSArIGM7CisgICAgICAgICAgICAgICAgaWYgKCB0
YXJnZXQgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5QbGFuZTogLmludGVyc2VjdExp
bmUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOworICAgICAgICAgICAgICAgICAgICB0YXJn
ZXQgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBk
aXJlY3Rpb24gPSBsaW5lLmRlbHRhKCB2MSApOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIFJh
eSBhbmQgc2VnbWVudCBhcmUgcGFyYWxsZWwuCisgICAgICAgICAgICAgICAgdmFyIGRlbm9taW5h
dG9yID0gdGhpcy5ub3JtYWwuZG90KCBkaXJlY3Rpb24gKTsKIAotICAgICAgICAgICAgICAgICAg
ICBzMSA9ICggYTAxID4gMCApID8gLSBzZWdFeHRlbnQgOiBzZWdFeHRlbnQ7Ci0gICAgICAgICAg
ICAgICAgICAgIHMwID0gTWF0aC5tYXgoIDAsIC0gKCBhMDEgKiBzMSArIGIwICkgKTsKLSAgICAg
ICAgICAgICAgICAgICAgc3FyRGlzdCA9IC0gczAgKiBzMCArIHMxICogKCBzMSArIDIgKiBiMSAp
ICsgYzsKKyAgICAgICAgICAgICAgICBpZiAoIGRlbm9taW5hdG9yID09PSAwICkgewogCi0gICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBsaW5lIGlzIGNvcGxhbmFyLCBy
ZXR1cm4gb3JpZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5kaXN0YW5jZVRvUG9p
bnQoIGxpbmUuc3RhcnQgKSA9PT0gMCApIHsKIAotICAgICAgICAgICAgICAgIGlmICggb3B0aW9u
YWxQb2ludE9uUmF5ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5j
b3B5KCBsaW5lLnN0YXJ0ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxQb2ludE9u
UmF5LmNvcHkoIHRoaXMuZGlyZWN0aW9uICkubXVsdGlwbHlTY2FsYXIoIHMwICkuYWRkKCB0aGlz
Lm9yaWdpbiApOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gVW5zdXJlIGlmIHRoaXMgaXMgdGhlIGNvcnJlY3QgbWV0aG9kIHRvIGhhbmRsZSB0aGlzIGNh
c2UuCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAKICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIG9wdGlvbmFsUG9pbnRPblNlZ21lbnQgKSB7
CisgICAgICAgICAgICAgICAgdmFyIHQgPSAtICggbGluZS5zdGFydC5kb3QoIHRoaXMubm9ybWFs
ICkgKyB0aGlzLmNvbnN0YW50ICkgLyBkZW5vbWluYXRvcjsKIAotICAgICAgICAgICAgICAgICAg
ICBvcHRpb25hbFBvaW50T25TZWdtZW50LmNvcHkoIHNlZ0RpciApLm11bHRpcGx5U2NhbGFyKCBz
MSApLmFkZCggc2VnQ2VudGVyICk7CisgICAgICAgICAgICAgICAgaWYgKCB0IDwgMCB8fCB0ID4g
MSApIHsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogCiAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNxckRpc3Q7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRhcmdldC5jb3B5KCBkaXJlY3Rpb24gKS5tdWx0aXBseVNjYWxhciggdCAp
LmFkZCggbGluZS5zdGFydCApOwogCiAgICAgICAgICAgICB9OwogCiAgICAgICAgIH0oKSwKIAot
ICAgICAgICBpbnRlcnNlY3RTcGhlcmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaW50ZXJzZWN0
c0xpbmU6IGZ1bmN0aW9uICggbGluZSApIHsKIAotICAgICAgICAgICAgdmFyIHYxID0gbmV3IFZl
Y3RvcjMoKTsKKyAgICAgICAgICAgIC8vIE5vdGU6IHRoaXMgdGVzdHMgaWYgYSBsaW5lIGludGVy
c2VjdHMgdGhlIHBsYW5lLCBub3Qgd2hldGhlciBpdCAob3IgaXRzIGVuZC1wb2ludHMpIGFyZSBj
b3BsYW5hciB3aXRoIGl0LgogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gaW50ZXJzZWN0
U3BoZXJlKCBzcGhlcmUsIHRhcmdldCApIHsKKyAgICAgICAgICAgIHZhciBzdGFydFNpZ24gPSB0
aGlzLmRpc3RhbmNlVG9Qb2ludCggbGluZS5zdGFydCApOworICAgICAgICAgICAgdmFyIGVuZFNp
Z24gPSB0aGlzLmRpc3RhbmNlVG9Qb2ludCggbGluZS5lbmQgKTsKIAotICAgICAgICAgICAgICAg
IHYxLnN1YlZlY3RvcnMoIHNwaGVyZS5jZW50ZXIsIHRoaXMub3JpZ2luICk7Ci0gICAgICAgICAg
ICAgICAgdmFyIHRjYSA9IHYxLmRvdCggdGhpcy5kaXJlY3Rpb24gKTsKLSAgICAgICAgICAgICAg
ICB2YXIgZDIgPSB2MS5kb3QoIHYxICkgLSB0Y2EgKiB0Y2E7Ci0gICAgICAgICAgICAgICAgdmFy
IHJhZGl1czIgPSBzcGhlcmUucmFkaXVzICogc3BoZXJlLnJhZGl1czsKKyAgICAgICAgICAgIHJl
dHVybiAoIHN0YXJ0U2lnbiA8IDAgJiYgZW5kU2lnbiA+IDAgKSB8fCAoIGVuZFNpZ24gPCAwICYm
IHN0YXJ0U2lnbiA+IDAgKTsKIAotICAgICAgICAgICAgICAgIGlmICggZDIgPiByYWRpdXMyICkg
cmV0dXJuIG51bGw7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB2YXIgdGhjID0gTWF0
aC5zcXJ0KCByYWRpdXMyIC0gZDIgKTsKKyAgICAgICAgaW50ZXJzZWN0c0JveDogZnVuY3Rpb24g
KCBib3ggKSB7CiAKLSAgICAgICAgICAgICAgICAvLyB0MCA9IGZpcnN0IGludGVyc2VjdCBwb2lu
dCAtIGVudHJhbmNlIG9uIGZyb250IG9mIHNwaGVyZQotICAgICAgICAgICAgICAgIHZhciB0MCA9
IHRjYSAtIHRoYzsKKyAgICAgICAgICAgIHJldHVybiBib3guaW50ZXJzZWN0c1BsYW5lKCB0aGlz
ICk7CiAKLSAgICAgICAgICAgICAgICAvLyB0MSA9IHNlY29uZCBpbnRlcnNlY3QgcG9pbnQgLSBl
eGl0IHBvaW50IG9uIGJhY2sgb2Ygc3BoZXJlCi0gICAgICAgICAgICAgICAgdmFyIHQxID0gdGNh
ICsgdGhjOworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgLy8gdGVzdCB0byBzZWUgaWYg
Ym90aCB0MCBhbmQgdDEgYXJlIGJlaGluZCB0aGUgcmF5IC0gaWYgc28sIHJldHVybiBudWxsCi0g
ICAgICAgICAgICAgICAgaWYgKCB0MCA8IDAgJiYgdDEgPCAwICkgcmV0dXJuIG51bGw7CisgICAg
ICAgIGludGVyc2VjdHNTcGhlcmU6IGZ1bmN0aW9uICggc3BoZXJlICkgewogCi0gICAgICAgICAg
ICAgICAgLy8gdGVzdCB0byBzZWUgaWYgdDAgaXMgYmVoaW5kIHRoZSByYXk6Ci0gICAgICAgICAg
ICAgICAgLy8gaWYgaXQgaXMsIHRoZSByYXkgaXMgaW5zaWRlIHRoZSBzcGhlcmUsIHNvIHJldHVy
biB0aGUgc2Vjb25kIGV4aXQgcG9pbnQgc2NhbGVkIGJ5IHQxLAotICAgICAgICAgICAgICAgIC8v
IGluIG9yZGVyIHRvIGFsd2F5cyByZXR1cm4gYW4gaW50ZXJzZWN0IHBvaW50IHRoYXQgaXMgaW4g
ZnJvbnQgb2YgdGhlIHJheS4KLSAgICAgICAgICAgICAgICBpZiAoIHQwIDwgMCApIHJldHVybiB0
aGlzLmF0KCB0MSwgdGFyZ2V0ICk7CisgICAgICAgICAgICByZXR1cm4gc3BoZXJlLmludGVyc2Vj
dHNQbGFuZSggdGhpcyApOwogCi0gICAgICAgICAgICAgICAgLy8gZWxzZSB0MCBpcyBpbiBmcm9u
dCBvZiB0aGUgcmF5LCBzbyByZXR1cm4gdGhlIGZpcnN0IGNvbGxpc2lvbiBwb2ludCBzY2FsZWQg
YnkgdDAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hdCggdDAsIHRhcmdldCApOworICAg
ICAgICB9LAogCi0gICAgICAgICAgICB9OworICAgICAgICBjb3BsYW5hclBvaW50OiBmdW5jdGlv
biAoIHRhcmdldCApIHsKIAotICAgICAgICB9KCksCisgICAgICAgICAgICBpZiAoIHRhcmdldCA9
PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgIGludGVyc2VjdHNTcGhlcmU6IGZ1bmN0aW9uICgg
c3BoZXJlICkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlBsYW5lOiAu
Y29wbGFuYXJQb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7CisgICAgICAgICAgICAg
ICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsKKworICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICByZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQoIHNwaGVyZS5jZW50ZXIgKSA8PSBzcGhlcmUu
cmFkaXVzOworICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5jb3B5KCB0aGlzLm5vcm1hbCApLm11
bHRpcGx5U2NhbGFyKCAtIHRoaXMuY29uc3RhbnQgKTsKIAogICAgICAgICB9LAogCi0gICAgICAg
IGRpc3RhbmNlVG9QbGFuZTogZnVuY3Rpb24gKCBwbGFuZSApIHsKKyAgICAgICAgYXBwbHlNYXRy
aXg0OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHZhciBkZW5vbWluYXRvciA9IHBsYW5l
Lm5vcm1hbC5kb3QoIHRoaXMuZGlyZWN0aW9uICk7CisgICAgICAgICAgICB2YXIgdjEgPSBuZXcg
VmVjdG9yMygpOworICAgICAgICAgICAgdmFyIG0xID0gbmV3IE1hdHJpeDMoKTsKIAotICAgICAg
ICAgICAgaWYgKCBkZW5vbWluYXRvciA9PT0gMCApIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5j
dGlvbiBhcHBseU1hdHJpeDQoIG1hdHJpeCwgb3B0aW9uYWxOb3JtYWxNYXRyaXggKSB7CiAKLSAg
ICAgICAgICAgICAgICAvLyBsaW5lIGlzIGNvcGxhbmFyLCByZXR1cm4gb3JpZ2luCi0gICAgICAg
ICAgICAgICAgaWYgKCBwbGFuZS5kaXN0YW5jZVRvUG9pbnQoIHRoaXMub3JpZ2luICkgPT09IDAg
KSB7CisgICAgICAgICAgICAgICAgdmFyIG5vcm1hbE1hdHJpeCA9IG9wdGlvbmFsTm9ybWFsTWF0
cml4IHx8IG0xLmdldE5vcm1hbE1hdHJpeCggbWF0cml4ICk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgdmFyIHJlZmVyZW5jZVBvaW50ID0gdGhpcy5j
b3BsYW5hclBvaW50KCB2MSApLmFwcGx5TWF0cml4NCggbWF0cml4ICk7CiAKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgdmFyIG5vcm1hbCA9IHRoaXMubm9ybWFsLmFwcGx5TWF0
cml4Myggbm9ybWFsTWF0cml4ICkubm9ybWFsaXplKCk7CiAKLSAgICAgICAgICAgICAgICAvLyBO
dWxsIGlzIHByZWZlcmFibGUgdG8gdW5kZWZpbmVkIHNpbmNlIHVuZGVmaW5lZCBtZWFucy4uLi4g
aXQgaXMgdW5kZWZpbmVkCisgICAgICAgICAgICAgICAgdGhpcy5jb25zdGFudCA9IC0gcmVmZXJl
bmNlUG9pbnQuZG90KCBub3JtYWwgKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAg
ICB9OwogCi0gICAgICAgICAgICB2YXIgdCA9IC0gKCB0aGlzLm9yaWdpbi5kb3QoIHBsYW5lLm5v
cm1hbCApICsgcGxhbmUuY29uc3RhbnQgKSAvIGRlbm9taW5hdG9yOworICAgICAgICB9KCksCiAK
LSAgICAgICAgICAgIC8vIFJldHVybiBpZiB0aGUgcmF5IG5ldmVyIGludGVyc2VjdHMgdGhlIHBs
YW5lCisgICAgICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24gKCBvZmZzZXQgKSB7CiAKLSAgICAgICAg
ICAgIHJldHVybiB0ID49IDAgPyB0IDogbnVsbDsKKyAgICAgICAgICAgIHRoaXMuY29uc3RhbnQg
LT0gb2Zmc2V0LmRvdCggdGhpcy5ub3JtYWwgKTsKIAotICAgICAgICB9LAorICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKLSAgICAgICAgaW50ZXJzZWN0UGxhbmU6IGZ1bmN0aW9uICggcGxhbmUs
IHRhcmdldCApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgdmFyIHQgPSB0aGlzLmRpc3Rh
bmNlVG9QbGFuZSggcGxhbmUgKTsKKyAgICAgICAgZXF1YWxzOiBmdW5jdGlvbiAoIHBsYW5lICkg
ewogCi0gICAgICAgICAgICBpZiAoIHQgPT09IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4g
cGxhbmUubm9ybWFsLmVxdWFscyggdGhpcy5ub3JtYWwgKSAmJiAoIHBsYW5lLmNvbnN0YW50ID09
PSB0aGlzLmNvbnN0YW50ICk7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg
ICAgfQogCi0gICAgICAgICAgICB9CisgICAgfSApOwogCi0gICAgICAgICAgICByZXR1cm4gdGhp
cy5hdCggdCwgdGFyZ2V0ICk7CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRw
Oi8vbXJkb29iLmNvbS8KKyAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRx
dWFsaWEuY29tLworICAgICAqIEBhdXRob3IgYmhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW8KKyAg
ICAgKi8KIAotICAgICAgICB9LAorICAgIGZ1bmN0aW9uIEZydXN0dW0oIHAwLCBwMSwgcDIsIHAz
LCBwNCwgcDUgKSB7CiAKLSAgICAgICAgaW50ZXJzZWN0c1BsYW5lOiBmdW5jdGlvbiAoIHBsYW5l
ICkgeworICAgICAgICB0aGlzLnBsYW5lcyA9IFsKIAotICAgICAgICAgICAgLy8gY2hlY2sgaWYg
dGhlIHJheSBsaWVzIG9uIHRoZSBwbGFuZSBmaXJzdAorICAgICAgICAgICAgKCBwMCAhPT0gdW5k
ZWZpbmVkICkgPyBwMCA6IG5ldyBQbGFuZSgpLAorICAgICAgICAgICAgKCBwMSAhPT0gdW5kZWZp
bmVkICkgPyBwMSA6IG5ldyBQbGFuZSgpLAorICAgICAgICAgICAgKCBwMiAhPT0gdW5kZWZpbmVk
ICkgPyBwMiA6IG5ldyBQbGFuZSgpLAorICAgICAgICAgICAgKCBwMyAhPT0gdW5kZWZpbmVkICkg
PyBwMyA6IG5ldyBQbGFuZSgpLAorICAgICAgICAgICAgKCBwNCAhPT0gdW5kZWZpbmVkICkgPyBw
NCA6IG5ldyBQbGFuZSgpLAorICAgICAgICAgICAgKCBwNSAhPT0gdW5kZWZpbmVkICkgPyBwNSA6
IG5ldyBQbGFuZSgpCiAKLSAgICAgICAgICAgIHZhciBkaXN0VG9Qb2ludCA9IHBsYW5lLmRpc3Rh
bmNlVG9Qb2ludCggdGhpcy5vcmlnaW4gKTsKKyAgICAgICAgXTsKIAotICAgICAgICAgICAgaWYg
KCBkaXN0VG9Qb2ludCA9PT0gMCApIHsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBPYmplY3QuYXNzaWduKCBGcnVzdHVtLnByb3RvdHlwZSwgewogCi0gICAgICAg
ICAgICB9CisgICAgICAgIHNldDogZnVuY3Rpb24gKCBwMCwgcDEsIHAyLCBwMywgcDQsIHA1ICkg
ewogCi0gICAgICAgICAgICB2YXIgZGVub21pbmF0b3IgPSBwbGFuZS5ub3JtYWwuZG90KCB0aGlz
LmRpcmVjdGlvbiApOworICAgICAgICAgICAgdmFyIHBsYW5lcyA9IHRoaXMucGxhbmVzOwogCi0g
ICAgICAgICAgICBpZiAoIGRlbm9taW5hdG9yICogZGlzdFRvUG9pbnQgPCAwICkgeworICAgICAg
ICAgICAgcGxhbmVzWyAwIF0uY29weSggcDAgKTsKKyAgICAgICAgICAgIHBsYW5lc1sgMSBdLmNv
cHkoIHAxICk7CisgICAgICAgICAgICBwbGFuZXNbIDIgXS5jb3B5KCBwMiApOworICAgICAgICAg
ICAgcGxhbmVzWyAzIF0uY29weSggcDMgKTsKKyAgICAgICAgICAgIHBsYW5lc1sgNCBdLmNvcHko
IHA0ICk7CisgICAgICAgICAgICBwbGFuZXNbIDUgXS5jb3B5KCBwNSApOwogCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAg
ICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAgICAvLyByYXkgb3JpZ2luIGlzIGJlaGluZCB0
aGUgcGxhbmUgKGFuZCBpcyBwb2ludGluZyBiZWhpbmQgaXQpCisgICAgICAgIGNsb25lOiBmdW5j
dGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKIAogICAgICAgICB9LAogCi0g
ICAgICAgIGludGVyc2VjdEJveDogZnVuY3Rpb24gKCBib3gsIHRhcmdldCApIHsKKyAgICAgICAg
Y29weTogZnVuY3Rpb24gKCBmcnVzdHVtICkgewogCi0gICAgICAgICAgICB2YXIgdG1pbiwgdG1h
eCwgdHltaW4sIHR5bWF4LCB0em1pbiwgdHptYXg7CisgICAgICAgICAgICB2YXIgcGxhbmVzID0g
dGhpcy5wbGFuZXM7CiAKLSAgICAgICAgICAgIHZhciBpbnZkaXJ4ID0gMSAvIHRoaXMuZGlyZWN0
aW9uLngsCi0gICAgICAgICAgICAgICAgaW52ZGlyeSA9IDEgLyB0aGlzLmRpcmVjdGlvbi55LAot
ICAgICAgICAgICAgICAgIGludmRpcnogPSAxIC8gdGhpcy5kaXJlY3Rpb24uejsKKyAgICAgICAg
ICAgIGZvciAoIHZhciBpID0gMDsgaSA8IDY7IGkgKysgKSB7CiAKLSAgICAgICAgICAgIHZhciBv
cmlnaW4gPSB0aGlzLm9yaWdpbjsKKyAgICAgICAgICAgICAgICBwbGFuZXNbIGkgXS5jb3B5KCBm
cnVzdHVtLnBsYW5lc1sgaSBdICk7CiAKLSAgICAgICAgICAgIGlmICggaW52ZGlyeCA+PSAwICkg
eworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdG1pbiA9ICggYm94Lm1pbi54IC0g
b3JpZ2luLnggKSAqIGludmRpcng7Ci0gICAgICAgICAgICAgICAgdG1heCA9ICggYm94Lm1heC54
IC0gb3JpZ2luLnggKSAqIGludmRpcng7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHRtaW4gPSAo
IGJveC5tYXgueCAtIG9yaWdpbi54ICkgKiBpbnZkaXJ4OwotICAgICAgICAgICAgICAgIHRtYXgg
PSAoIGJveC5taW4ueCAtIG9yaWdpbi54ICkgKiBpbnZkaXJ4OworICAgICAgICBzZXRGcm9tTWF0
cml4OiBmdW5jdGlvbiAoIG0gKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBw
bGFuZXMgPSB0aGlzLnBsYW5lczsKKyAgICAgICAgICAgIHZhciBtZSA9IG0uZWxlbWVudHM7Cisg
ICAgICAgICAgICB2YXIgbWUwID0gbWVbIDAgXSwgbWUxID0gbWVbIDEgXSwgbWUyID0gbWVbIDIg
XSwgbWUzID0gbWVbIDMgXTsKKyAgICAgICAgICAgIHZhciBtZTQgPSBtZVsgNCBdLCBtZTUgPSBt
ZVsgNSBdLCBtZTYgPSBtZVsgNiBdLCBtZTcgPSBtZVsgNyBdOworICAgICAgICAgICAgdmFyIG1l
OCA9IG1lWyA4IF0sIG1lOSA9IG1lWyA5IF0sIG1lMTAgPSBtZVsgMTAgXSwgbWUxMSA9IG1lWyAx
MSBdOworICAgICAgICAgICAgdmFyIG1lMTIgPSBtZVsgMTIgXSwgbWUxMyA9IG1lWyAxMyBdLCBt
ZTE0ID0gbWVbIDE0IF0sIG1lMTUgPSBtZVsgMTUgXTsKIAotICAgICAgICAgICAgaWYgKCBpbnZk
aXJ5ID49IDAgKSB7CisgICAgICAgICAgICBwbGFuZXNbIDAgXS5zZXRDb21wb25lbnRzKCBtZTMg
LSBtZTAsIG1lNyAtIG1lNCwgbWUxMSAtIG1lOCwgbWUxNSAtIG1lMTIgKS5ub3JtYWxpemUoKTsK
KyAgICAgICAgICAgIHBsYW5lc1sgMSBdLnNldENvbXBvbmVudHMoIG1lMyArIG1lMCwgbWU3ICsg
bWU0LCBtZTExICsgbWU4LCBtZTE1ICsgbWUxMiApLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAg
cGxhbmVzWyAyIF0uc2V0Q29tcG9uZW50cyggbWUzICsgbWUxLCBtZTcgKyBtZTUsIG1lMTEgKyBt
ZTksIG1lMTUgKyBtZTEzICkubm9ybWFsaXplKCk7CisgICAgICAgICAgICBwbGFuZXNbIDMgXS5z
ZXRDb21wb25lbnRzKCBtZTMgLSBtZTEsIG1lNyAtIG1lNSwgbWUxMSAtIG1lOSwgbWUxNSAtIG1l
MTMgKS5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgIHBsYW5lc1sgNCBdLnNldENvbXBvbmVudHMo
IG1lMyAtIG1lMiwgbWU3IC0gbWU2LCBtZTExIC0gbWUxMCwgbWUxNSAtIG1lMTQgKS5ub3JtYWxp
emUoKTsKKyAgICAgICAgICAgIHBsYW5lc1sgNSBdLnNldENvbXBvbmVudHMoIG1lMyArIG1lMiwg
bWU3ICsgbWU2LCBtZTExICsgbWUxMCwgbWUxNSArIG1lMTQgKS5ub3JtYWxpemUoKTsKIAotICAg
ICAgICAgICAgICAgIHR5bWluID0gKCBib3gubWluLnkgLSBvcmlnaW4ueSApICogaW52ZGlyeTsK
LSAgICAgICAgICAgICAgICB0eW1heCA9ICggYm94Lm1heC55IC0gb3JpZ2luLnkgKSAqIGludmRp
cnk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHR5bWluID0gKCBib3gubWF4LnkgLSBvcmlnaW4u
eSApICogaW52ZGlyeTsKLSAgICAgICAgICAgICAgICB0eW1heCA9ICggYm94Lm1pbi55IC0gb3Jp
Z2luLnkgKSAqIGludmRpcnk7CisgICAgICAgIGludGVyc2VjdHNPYmplY3Q6IGZ1bmN0aW9uICgp
IHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHNwaGVyZSA9IG5ldyBTcGhlcmUo
KTsKIAotICAgICAgICAgICAgaWYgKCAoIHRtaW4gPiB0eW1heCApIHx8ICggdHltaW4gPiB0bWF4
ICkgKSByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBpbnRlcnNlY3Rz
T2JqZWN0KCBvYmplY3QgKSB7CiAKLSAgICAgICAgICAgIC8vIFRoZXNlIGxpbmVzIGFsc28gaGFu
ZGxlIHRoZSBjYXNlIHdoZXJlIHRtaW4gb3IgdG1heCBpcyBOYU4KLSAgICAgICAgICAgIC8vIChy
ZXN1bHQgb2YgMCAqIEluZmluaXR5KS4geCAhPT0geCByZXR1cm5zIHRydWUgaWYgeCBpcyBOYU4K
KyAgICAgICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSBvYmplY3QuZ2VvbWV0cnk7CiAKLSAgICAg
ICAgICAgIGlmICggdHltaW4gPiB0bWluIHx8IHRtaW4gIT09IHRtaW4gKSB0bWluID0gdHltaW47
CisgICAgICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSA9PT0gbnVsbCAp
CisgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOwog
Ci0gICAgICAgICAgICBpZiAoIHR5bWF4IDwgdG1heCB8fCB0bWF4ICE9PSB0bWF4ICkgdG1heCA9
IHR5bWF4OworICAgICAgICAgICAgICAgIHNwaGVyZS5jb3B5KCBnZW9tZXRyeS5ib3VuZGluZ1Nw
aGVyZSApCisgICAgICAgICAgICAgICAgICAgIC5hcHBseU1hdHJpeDQoIG9iamVjdC5tYXRyaXhX
b3JsZCApOwogCi0gICAgICAgICAgICBpZiAoIGludmRpcnogPj0gMCApIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJlKCBzcGhlcmUgKTsKIAotICAgICAgICAg
ICAgICAgIHR6bWluID0gKCBib3gubWluLnogLSBvcmlnaW4ueiApICogaW52ZGlyejsKLSAgICAg
ICAgICAgICAgICB0em1heCA9ICggYm94Lm1heC56IC0gb3JpZ2luLnogKSAqIGludmRpcno7Cisg
ICAgICAgICAgICB9OwogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICB9KCksCiAKLSAg
ICAgICAgICAgICAgICB0em1pbiA9ICggYm94Lm1heC56IC0gb3JpZ2luLnogKSAqIGludmRpcno7
Ci0gICAgICAgICAgICAgICAgdHptYXggPSAoIGJveC5taW4ueiAtIG9yaWdpbi56ICkgKiBpbnZk
aXJ6OworICAgICAgICBpbnRlcnNlY3RzU3ByaXRlOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHZhciBzcGhlcmUgPSBuZXcgU3BoZXJlKCk7CiAKLSAgICAgICAg
ICAgIGlmICggKCB0bWluID4gdHptYXggKSB8fCAoIHR6bWluID4gdG1heCApICkgcmV0dXJuIG51
bGw7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gaW50ZXJzZWN0c1Nwcml0ZSggc3ByaXRl
ICkgewogCi0gICAgICAgICAgICBpZiAoIHR6bWluID4gdG1pbiB8fCB0bWluICE9PSB0bWluICkg
dG1pbiA9IHR6bWluOworICAgICAgICAgICAgICAgIHNwaGVyZS5jZW50ZXIuc2V0KCAwLCAwLCAw
ICk7CisgICAgICAgICAgICAgICAgc3BoZXJlLnJhZGl1cyA9IDAuNzA3MTA2NzgxMTg2NTQ3NjsK
KyAgICAgICAgICAgICAgICBzcGhlcmUuYXBwbHlNYXRyaXg0KCBzcHJpdGUubWF0cml4V29ybGQg
KTsKIAotICAgICAgICAgICAgaWYgKCB0em1heCA8IHRtYXggfHwgdG1heCAhPT0gdG1heCApIHRt
YXggPSB0em1heDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJl
KCBzcGhlcmUgKTsKIAotICAgICAgICAgICAgLy9yZXR1cm4gcG9pbnQgY2xvc2VzdCB0byB0aGUg
cmF5IChwb3NpdGl2ZSBzaWRlKQorICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgaWYgKCB0
bWF4IDwgMCApIHJldHVybiBudWxsOworICAgICAgICB9KCksCiAKLSAgICAgICAgICAgIHJldHVy
biB0aGlzLmF0KCB0bWluID49IDAgPyB0bWluIDogdG1heCwgdGFyZ2V0ICk7CisgICAgICAgIGlu
dGVyc2VjdHNTcGhlcmU6IGZ1bmN0aW9uICggc3BoZXJlICkgewogCi0gICAgICAgIH0sCisgICAg
ICAgICAgICB2YXIgcGxhbmVzID0gdGhpcy5wbGFuZXM7CisgICAgICAgICAgICB2YXIgY2VudGVy
ID0gc3BoZXJlLmNlbnRlcjsKKyAgICAgICAgICAgIHZhciBuZWdSYWRpdXMgPSAtIHNwaGVyZS5y
YWRpdXM7CiAKLSAgICAgICAgaW50ZXJzZWN0c0JveDogKCBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCA2OyBpICsrICkgewogCi0gICAgICAgICAgICB2YXIg
diA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gcGxhbmVz
WyBpIF0uZGlzdGFuY2VUb1BvaW50KCBjZW50ZXIgKTsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uIGludGVyc2VjdHNCb3goIGJveCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGRpc3Rh
bmNlIDwgbmVnUmFkaXVzICkgewogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJz
ZWN0Qm94KCBib3gsIHYgKSAhPT0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB9ICko
KSwKKyAgICAgICAgICAgIH0KIAotICAgICAgICBpbnRlcnNlY3RUcmlhbmdsZTogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgICAgIC8vIENvbXB1dGUg
dGhlIG9mZnNldCBvcmlnaW4sIGVkZ2VzLCBhbmQgbm9ybWFsLgotICAgICAgICAgICAgdmFyIGRp
ZmYgPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgdmFyIGVkZ2UxID0gbmV3IFZlY3RvcjMo
KTsKLSAgICAgICAgICAgIHZhciBlZGdlMiA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICB2
YXIgbm9ybWFsID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uIGludGVyc2VjdFRyaWFuZ2xlKCBhLCBiLCBjLCBiYWNrZmFjZUN1bGxpbmcs
IHRhcmdldCApIHsKKyAgICAgICAgaW50ZXJzZWN0c0JveDogZnVuY3Rpb24gKCkgewogCi0gICAg
ICAgICAgICAgICAgLy8gZnJvbSBodHRwOi8vd3d3Lmdlb21ldHJpY3Rvb2xzLmNvbS9HVEVuZ2lu
ZS9JbmNsdWRlL01hdGhlbWF0aWNzL0d0ZUludHJSYXkzVHJpYW5nbGUzLmgKKyAgICAgICAgICAg
IHZhciBwID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAgICAgICAgIGVkZ2UxLnN1YlZlY3Rv
cnMoIGIsIGEgKTsKLSAgICAgICAgICAgICAgICBlZGdlMi5zdWJWZWN0b3JzKCBjLCBhICk7Ci0g
ICAgICAgICAgICAgICAgbm9ybWFsLmNyb3NzVmVjdG9ycyggZWRnZTEsIGVkZ2UyICk7CisgICAg
ICAgICAgICByZXR1cm4gZnVuY3Rpb24gaW50ZXJzZWN0c0JveCggYm94ICkgewogCi0gICAgICAg
ICAgICAgICAgLy8gU29sdmUgUSArIHQqRCA9IGIxKkUxICsgYjIqRTIgKFEgPSBrRGlmZiwgRCA9
IHJheSBkaXJlY3Rpb24sCi0gICAgICAgICAgICAgICAgLy8gRTEgPSBrRWRnZTEsIEUyID0ga0Vk
Z2UyLCBOID0gQ3Jvc3MoRTEsRTIpKSBieQotICAgICAgICAgICAgICAgIC8vICAgfERvdChELE4p
fCpiMSA9IHNpZ24oRG90KEQsTikpKkRvdChELENyb3NzKFEsRTIpKQotICAgICAgICAgICAgICAg
IC8vICAgfERvdChELE4pfCpiMiA9IHNpZ24oRG90KEQsTikpKkRvdChELENyb3NzKEUxLFEpKQot
ICAgICAgICAgICAgICAgIC8vICAgfERvdChELE4pfCp0ID0gLXNpZ24oRG90KEQsTikpKkRvdChR
LE4pCi0gICAgICAgICAgICAgICAgdmFyIERkTiA9IHRoaXMuZGlyZWN0aW9uLmRvdCggbm9ybWFs
ICk7Ci0gICAgICAgICAgICAgICAgdmFyIHNpZ247CisgICAgICAgICAgICAgICAgdmFyIHBsYW5l
cyA9IHRoaXMucGxhbmVzOwogCi0gICAgICAgICAgICAgICAgaWYgKCBEZE4gPiAwICkgeworICAg
ICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IDY7IGkgKysgKSB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCBiYWNrZmFjZUN1bGxpbmcgKSByZXR1cm4gbnVsbDsKLSAgICAgICAg
ICAgICAgICAgICAgc2lnbiA9IDE7CisgICAgICAgICAgICAgICAgICAgIHZhciBwbGFuZSA9IHBs
YW5lc1sgaSBdOwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggRGROIDwgMCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gY29ybmVyIGF0IG1heCBkaXN0YW5jZQogCi0gICAgICAgICAg
ICAgICAgICAgIHNpZ24gPSAtIDE7Ci0gICAgICAgICAgICAgICAgICAgIERkTiA9IC0gRGROOwor
ICAgICAgICAgICAgICAgICAgICBwLnggPSBwbGFuZS5ub3JtYWwueCA+IDAgPyBib3gubWF4Lngg
OiBib3gubWluLng7CisgICAgICAgICAgICAgICAgICAgIHAueSA9IHBsYW5lLm5vcm1hbC55ID4g
MCA/IGJveC5tYXgueSA6IGJveC5taW4ueTsKKyAgICAgICAgICAgICAgICAgICAgcC56ID0gcGxh
bmUubm9ybWFsLnogPiAwID8gYm94Lm1heC56IDogYm94Lm1pbi56OwogCi0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBwbGFuZS5kaXN0YW5jZVRvUG9p
bnQoIHAgKSA8IDAgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgZGlmZi5zdWJWZWN0b3Jz
KCB0aGlzLm9yaWdpbiwgYSApOwotICAgICAgICAgICAgICAgIHZhciBEZFF4RTIgPSBzaWduICog
dGhpcy5kaXJlY3Rpb24uZG90KCBlZGdlMi5jcm9zc1ZlY3RvcnMoIGRpZmYsIGVkZ2UyICkgKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICAgICAgICAgIC8vIGIxIDwg
MCwgbm8gaW50ZXJzZWN0aW9uCi0gICAgICAgICAgICAgICAgaWYgKCBEZFF4RTIgPCAwICkgewor
ICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg
ICAgfSgpLAogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICBjb250YWluc1BvaW50OiBmdW5j
dGlvbiAoIHBvaW50ICkgewogCi0gICAgICAgICAgICAgICAgdmFyIERkRTF4USA9IHNpZ24gKiB0
aGlzLmRpcmVjdGlvbi5kb3QoIGVkZ2UxLmNyb3NzKCBkaWZmICkgKTsKKyAgICAgICAgICAgIHZh
ciBwbGFuZXMgPSB0aGlzLnBsYW5lczsKIAotICAgICAgICAgICAgICAgIC8vIGIyIDwgMCwgbm8g
aW50ZXJzZWN0aW9uCi0gICAgICAgICAgICAgICAgaWYgKCBEZEUxeFEgPCAwICkgeworICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgNjsgaSArKyApIHsKIAotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICBpZiAoIHBsYW5lc1sgaSBdLmRpc3Rh
bmNlVG9Qb2ludCggcG9pbnQgKSA8IDAgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gYjErYjIg
PiAxLCBubyBpbnRlcnNlY3Rpb24KLSAgICAgICAgICAgICAgICBpZiAoIERkUXhFMiArIERkRTF4
USA+IERkTiApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgICAgICAgICAgfQorICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBMaW5lIGludGVyc2VjdHMgdHJpYW5nbGUsIGNo
ZWNrIGlmIHJheSBkb2VzLgotICAgICAgICAgICAgICAgIHZhciBRZE4gPSAtIHNpZ24gKiBkaWZm
LmRvdCggbm9ybWFsICk7CisgICAgfSApOwogCi0gICAgICAgICAgICAgICAgLy8gdCA8IDAsIG5v
IGludGVyc2VjdGlvbgotICAgICAgICAgICAgICAgIGlmICggUWROIDwgMCApIHsKKyAgICB2YXIg
YWxwaGFtYXBfZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3Iu
YSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xuI2VuZGlmIjsKIAotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB2YXIgYWxwaGFtYXBfcGFyc19mcmFnbWVudCA9
ICIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2Vu
ZGlmIjsKIAotICAgICAgICAgICAgICAgIH0KKyAgICB2YXIgYWxwaGF0ZXN0X2ZyYWdtZW50ID0g
IiNpZmRlZiBBTFBIQVRFU1Rcblx0aWYgKCBkaWZmdXNlQ29sb3IuYSA8IEFMUEhBVEVTVCApIGRp
c2NhcmQ7XG4jZW5kaWYiOwogCi0gICAgICAgICAgICAgICAgLy8gUmF5IGludGVyc2VjdHMgdHJp
YW5nbGUuCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXQoIFFkTiAvIERkTiwgdGFyZ2V0
ICk7CisgICAgdmFyIGFvbWFwX2ZyYWdtZW50ID0gIiNpZmRlZiBVU0VfQU9NQVBcblx0ZmxvYXQg
YW1iaWVudE9jY2x1c2lvbiA9ICggdGV4dHVyZTJEKCBhb01hcCwgdlV2MiApLnIgLSAxLjAgKSAq
IGFvTWFwSW50ZW5zaXR5ICsgMS4wO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2Ug
Kj0gYW1iaWVudE9jY2x1c2lvbjtcblx0I2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZp
bmVkKCBQSFlTSUNBTCApXG5cdFx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRy
eS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGly
ZWN0U3BlY3VsYXIgKj0gY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBkb3ROViwgYW1iaWVudE9j
Y2x1c2lvbiwgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG4jZW5kaWYi
OwogCi0gICAgICAgICAgICB9OworICAgIHZhciBhb21hcF9wYXJzX2ZyYWdtZW50ID0gIiNpZmRl
ZiBVU0VfQU9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYW9NYXA7XG5cdHVuaWZvcm0gZmxvYXQg
YW9NYXBJbnRlbnNpdHk7XG4jZW5kaWYiOwogCi0gICAgICAgIH0oKSwKKyAgICB2YXIgYmVnaW5f
dmVydGV4ID0gInZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKCBwb3NpdGlvbiApOyI7CiAKLSAgICAg
ICAgYXBwbHlNYXRyaXg0OiBmdW5jdGlvbiAoIG1hdHJpeDQgKSB7CisgICAgdmFyIGJlZ2lubm9y
bWFsX3ZlcnRleCA9ICJ2ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApO1xuI2lmZGVm
IFVTRV9UQU5HRU5UXG5cdHZlYzMgb2JqZWN0VGFuZ2VudCA9IHZlYzMoIHRhbmdlbnQueHl6ICk7
XG4jZW5kaWYiOwogCi0gICAgICAgICAgICB0aGlzLm9yaWdpbi5hcHBseU1hdHJpeDQoIG1hdHJp
eDQgKTsKLSAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbiggbWF0
cml4NCApOworICAgIHZhciBic2RmcyA9ICJ2ZWMyIGludGVncmF0ZVNwZWN1bGFyQlJERiggY29u
c3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0Y29uc3Qg
dmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7XG5cdGNvbnN0
IHZlYzQgYzEgPSB2ZWM0KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApO1xuXHR2ZWM0IHIgPSBy
b3VnaG5lc3MgKiBjMCArIGMxO1xuXHRmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIo
IC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcblx0cmV0dXJuIHZlYzIoIC0xLjA0LCAx
LjA0ICkgKiBhMDA0ICsgci56dztcbn1cbmZsb2F0IHB1bmN0dWFsTGlnaHRJbnRlbnNpdHlUb0ly
cmFkaWFuY2VGYWN0b3IoIGNvbnN0IGluIGZsb2F0IGxpZ2h0RGlzdGFuY2UsIGNvbnN0IGluIGZs
b2F0IGN1dG9mZkRpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBkZWNheUV4cG9uZW50ICkge1xuI2lm
IGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0ZmxvYXQgZGlzdGFuY2VG
YWxsb2ZmID0gMS4wIC8gbWF4KCBwb3coIGxpZ2h0RGlzdGFuY2UsIGRlY2F5RXhwb25lbnQgKSwg
MC4wMSApO1xuXHRpZiggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgKSB7XG5cdFx0ZGlzdGFuY2VGYWxs
b2ZmICo9IHBvdzIoIHNhdHVyYXRlKCAxLjAgLSBwb3c0KCBsaWdodERpc3RhbmNlIC8gY3V0b2Zm
RGlzdGFuY2UgKSApICk7XG5cdH1cblx0cmV0dXJuIGRpc3RhbmNlRmFsbG9mZjtcbiNlbHNlXG5c
dGlmKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCAmJiBkZWNheUV4cG9uZW50ID4gMC4wICkge1xuXHRc
dHJldHVybiBwb3coIHNhdHVyYXRlKCAtbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICsg
MS4wICksIGRlY2F5RXhwb25lbnQgKTtcblx0fVxuXHRyZXR1cm4gMS4wO1xuI2VuZGlmXG59XG52
ZWMzIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciApIHtc
blx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBkaWZmdXNlQ29sb3I7XG59XG52ZWMzIEZfU2NobGlj
ayggY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBkb3RMSCApIHtc
blx0ZmxvYXQgZnJlc25lbCA9IGV4cDIoICggLTUuNTU0NzMgKiBkb3RMSCAtIDYuOTgzMTYgKSAq
IGRvdExIICk7XG5cdHJldHVybiAoIDEuMCAtIHNwZWN1bGFyQ29sb3IgKSAqIGZyZXNuZWwgKyBz
cGVjdWxhckNvbG9yO1xufVxudmVjMyBGX1NjaGxpY2tfUm91Z2huZXNzRGVwZW5kZW50KCBjb25z
dCBpbiB2ZWMzIEYwLCBjb25zdCBpbiBmbG9hdCBkb3ROViwgY29uc3QgaW4gZmxvYXQgcm91Z2hu
ZXNzICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtNS41NTQ3MyAqIGRvdE5WIC0gNi45
ODMxNiApICogZG90TlYgKTtcblx0dmVjMyBGciA9IG1heCggdmVjMyggMS4wIC0gcm91Z2huZXNz
ICksIEYwICkgLSBGMDtcblx0cmV0dXJuIEZyICogZnJlc25lbCArIEYwO1xufVxuZmxvYXQgR19H
R1hfU21pdGgoIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROTCwgY29u
c3QgaW4gZmxvYXQgZG90TlYgKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0Zmxv
YXQgZ2wgPSBkb3ROTCArIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSAp
O1xuXHRmbG9hdCBndiA9IGRvdE5WICsgc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBk
b3ROViApICk7XG5cdHJldHVybiAxLjAgLyAoIGdsICogZ3YgKTtcbn1cbmZsb2F0IEdfR0dYX1Nt
aXRoQ29ycmVsYXRlZCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5M
LCBjb25zdCBpbiBmbG9hdCBkb3ROViApIHtcblx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xu
XHRmbG9hdCBndiA9IGRvdE5MICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3RO
ViApICk7XG5cdGZsb2F0IGdsID0gZG90TlYgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBv
dzIoIGRvdE5MICkgKTtcblx0cmV0dXJuIDAuNSAvIG1heCggZ3YgKyBnbCwgRVBTSUxPTiApO1xu
fVxuZmxvYXQgRF9HR1goIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3RO
SCApIHtcblx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xuXHRmbG9hdCBkZW5vbSA9IHBvdzIo
IGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7XG5cdHJldHVybiBSRUNJUFJPQ0FMX1BJICog
YTIgLyBwb3cyKCBkZW5vbSApO1xufVxudmVjMyBCUkRGX1NwZWN1bGFyX0dHWCggY29uc3QgaW4g
SW5jaWRlbnRMaWdodCBpbmNpZGVudExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdl
b21ldHJ5LCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHJvdWdo
bmVzcyApIHtcblx0ZmxvYXQgYWxwaGEgPSBwb3cyKCByb3VnaG5lc3MgKTtcblx0dmVjMyBoYWxm
RGlyID0gbm9ybWFsaXplKCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiArIGdlb21ldHJ5LnZpZXdE
aXIgKTtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGlu
Y2lkZW50TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90
KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xuXHRmbG9hdCBkb3ROSCA9
IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgaGFsZkRpciApICk7XG5cdGZsb2F0IGRv
dExIID0gc2F0dXJhdGUoIGRvdCggaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24sIGhhbGZEaXIgKSAp
O1xuXHR2ZWMzIEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIGRvdExIICk7XG5cdGZsb2F0
IEcgPSBHX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGFscGhhLCBkb3ROTCwgZG90TlYgKTtcblx0Zmxv
YXQgRCA9IERfR0dYKCBhbHBoYSwgZG90TkggKTtcblx0cmV0dXJuIEYgKiAoIEcgKiBEICk7XG59
XG52ZWMyIExUQ19VdiggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGlu
IGZsb2F0IHJvdWdobmVzcyApIHtcblx0Y29uc3QgZmxvYXQgTFVUX1NJWkUgID0gNjQuMDtcblx0
Y29uc3QgZmxvYXQgTFVUX1NDQUxFID0gKCBMVVRfU0laRSAtIDEuMCApIC8gTFVUX1NJWkU7XG5c
dGNvbnN0IGZsb2F0IExVVF9CSUFTICA9IDAuNSAvIExVVF9TSVpFO1xuXHRmbG9hdCBkb3ROViA9
IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApO1xuXHR2ZWMyIHV2ID0gdmVjMiggcm91Z2huZXNzLCBz
cXJ0KCAxLjAgLSBkb3ROViApICk7XG5cdHV2ID0gdXYgKiBMVVRfU0NBTEUgKyBMVVRfQklBUztc
blx0cmV0dXJuIHV2O1xufVxuZmxvYXQgTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCBjb25z
dCBpbiB2ZWMzIGYgKSB7XG5cdGZsb2F0IGwgPSBsZW5ndGgoIGYgKTtcblx0cmV0dXJuIG1heCgg
KCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApO1xufVxudmVjMyBMVENfRWRnZVZl
Y3RvckZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgdjEsIGNvbnN0IGluIHZlYzMgdjIgKSB7XG5c
dGZsb2F0IHggPSBkb3QoIHYxLCB2MiApO1xuXHRmbG9hdCB5ID0gYWJzKCB4ICk7XG5cdGZsb2F0
IGEgPSAwLjg1NDM5ODUgKyAoIDAuNDk2NTE1NSArIDAuMDE0NTIwNiAqIHkgKSAqIHk7XG5cdGZs
b2F0IGIgPSAzLjQxNzU5NDAgKyAoIDQuMTYxNjcyNCArIHkgKSAqIHk7XG5cdGZsb2F0IHYgPSBh
IC8gYjtcblx0ZmxvYXQgdGhldGFfc2ludGhldGEgPSAoIHggPiAwLjAgKSA/IHYgOiAwLjUgKiBp
bnZlcnNlc3FydCggbWF4KCAxLjAgLSB4ICogeCwgMWUtNyApICkgLSB2O1xuXHRyZXR1cm4gY3Jv
c3MoIHYxLCB2MiApICogdGhldGFfc2ludGhldGE7XG59XG52ZWMzIExUQ19FdmFsdWF0ZSggY29u
c3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4g
bWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHtcblx0dmVjMyB2MSA9
IHJlY3RDb29yZHNbIDEgXSAtIHJlY3RDb29yZHNbIDAgXTtcblx0dmVjMyB2MiA9IHJlY3RDb29y
ZHNbIDMgXSAtIHJlY3RDb29yZHNbIDAgXTtcblx0dmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2
MSwgdjIgKTtcblx0aWYoIGRvdCggbGlnaHROb3JtYWwsIFAgLSByZWN0Q29vcmRzWyAwIF0gKSA8
IDAuMCApIHJldHVybiB2ZWMzKCAwLjAgKTtcblx0dmVjMyBUMSwgVDI7XG5cdFQxID0gbm9ybWFs
aXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7XG5cdFQyID0gLSBjcm9zcyggTiwgVDEgKTtcblx0
bWF0MyBtYXQgPSBtSW52ICogdHJhbnNwb3NlTWF0MyggbWF0MyggVDEsIFQyLCBOICkgKTtcblx0
dmVjMyBjb29yZHNbIDQgXTtcblx0Y29vcmRzWyAwIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDAg
XSAtIFAgKTtcblx0Y29vcmRzWyAxIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDEgXSAtIFAgKTtc
blx0Y29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTtcblx0Y29vcmRz
WyAzIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDMgXSAtIFAgKTtcblx0Y29vcmRzWyAwIF0gPSBu
b3JtYWxpemUoIGNvb3Jkc1sgMCBdICk7XG5cdGNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29y
ZHNbIDEgXSApO1xuXHRjb29yZHNbIDIgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAyIF0gKTtcblx0
Y29vcmRzWyAzIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMyBdICk7XG5cdHZlYzMgdmVjdG9yRm9y
bUZhY3RvciA9IHZlYzMoIDAuMCApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVj
dG9yRm9ybUZhY3RvciggY29vcmRzWyAwIF0sIGNvb3Jkc1sgMSBdICk7XG5cdHZlY3RvckZvcm1G
YWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDEgXSwgY29vcmRzWyAy
IF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNv
b3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdl
VmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAzIF0sIGNvb3Jkc1sgMCBdICk7XG5cdGZsb2F0IHJl
c3VsdCA9IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggdmVjdG9yRm9ybUZhY3RvciApO1xu
XHRyZXR1cm4gdmVjMyggcmVzdWx0ICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfR0dYX0Vudmly
b25tZW50KCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiB2ZWMz
IHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgZG90
TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSAp
O1xuXHR2ZWMyIGJyZGYgPSBpbnRlZ3JhdGVTcGVjdWxhckJSREYoIGRvdE5WLCByb3VnaG5lc3Mg
KTtcblx0cmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBicmRmLnggKyBicmRmLnk7XG59XG52b2lkIEJS
REZfU3BlY3VsYXJfTXVsdGlzY2F0dGVyaW5nX0Vudmlyb25tZW50KCBjb25zdCBpbiBHZW9tZXRy
aWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGlu
IGZsb2F0IHJvdWdobmVzcywgaW5vdXQgdmVjMyBzaW5nbGVTY2F0dGVyLCBpbm91dCB2ZWMzIG11
bHRpU2NhdHRlciApIHtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5u
b3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xuXHR2ZWMzIEYgPSBGX1NjaGxpY2tfUm91Z2hu
ZXNzRGVwZW5kZW50KCBzcGVjdWxhckNvbG9yLCBkb3ROViwgcm91Z2huZXNzICk7XG5cdHZlYzIg
YnJkZiA9IGludGVncmF0ZVNwZWN1bGFyQlJERiggZG90TlYsIHJvdWdobmVzcyApO1xuXHR2ZWMz
IEZzc0VzcyA9IEYgKiBicmRmLnggKyBicmRmLnk7XG5cdGZsb2F0IEVzcyA9IGJyZGYueCArIGJy
ZGYueTtcblx0ZmxvYXQgRW1zID0gMS4wIC0gRXNzO1xuXHR2ZWMzIEZhdmcgPSBzcGVjdWxhckNv
bG9yICsgKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiAwLjA0NzYxOTtcdHZlYzMgRm1zID0gRnNz
RXNzICogRmF2ZyAvICggMS4wIC0gRW1zICogRmF2ZyApO1xuXHRzaW5nbGVTY2F0dGVyICs9IEZz
c0Vzcztcblx0bXVsdGlTY2F0dGVyICs9IEZtcyAqIEVtcztcbn1cbmZsb2F0IEdfQmxpbm5QaG9u
Z19JbXBsaWNpdCggKSB7XG5cdHJldHVybiAwLjI1O1xufVxuZmxvYXQgRF9CbGlublBob25nKCBj
b25zdCBpbiBmbG9hdCBzaGluaW5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRyZXR1
cm4gUkVDSVBST0NBTF9QSSAqICggc2hpbmluZXNzICogMC41ICsgMS4wICkgKiBwb3coIGRvdE5I
LCBzaGluaW5lc3MgKTtcbn1cbnZlYzMgQlJERl9TcGVjdWxhcl9CbGlublBob25nKCBjb25zdCBp
biBJbmNpZGVudExpZ2h0IGluY2lkZW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQg
Z2VvbWV0cnksIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc2hp
bmluZXNzICkge1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGluY2lkZW50TGlnaHQuZGly
ZWN0aW9uICsgZ2VvbWV0cnkudmlld0RpciApO1xuXHRmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBk
b3QoIGdlb21ldHJ5Lm5vcm1hbCwgaGFsZkRpciApICk7XG5cdGZsb2F0IGRvdExIID0gc2F0dXJh
dGUoIGRvdCggaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24sIGhhbGZEaXIgKSApO1xuXHR2ZWMzIEYg
PSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIGRvdExIICk7XG5cdGZsb2F0IEcgPSBHX0JsaW5u
UGhvbmdfSW1wbGljaXQoICk7XG5cdGZsb2F0IEQgPSBEX0JsaW5uUGhvbmcoIHNoaW5pbmVzcywg
ZG90TkggKTtcblx0cmV0dXJuIEYgKiAoIEcgKiBEICk7XG59XG5mbG9hdCBHR1hSb3VnaG5lc3NU
b0JsaW5uRXhwb25lbnQoIGNvbnN0IGluIGZsb2F0IGdneFJvdWdobmVzcyApIHtcblx0cmV0dXJu
ICggMi4wIC8gcG93MiggZ2d4Um91Z2huZXNzICsgMC4wMDAxICkgLSAyLjAgKTtcbn1cbmZsb2F0
IEJsaW5uRXhwb25lbnRUb0dHWFJvdWdobmVzcyggY29uc3QgaW4gZmxvYXQgYmxpbm5FeHBvbmVu
dCApIHtcblx0cmV0dXJuIHNxcnQoIDIuMCAvICggYmxpbm5FeHBvbmVudCArIDIuMCApICk7XG59
IjsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgdmFyIGJ1bXBtYXBfcGFyc19mcmFn
bWVudCA9ICIjaWZkZWYgVVNFX0JVTVBNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtc
blx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XG5cdHZlYzIgZEhkeHlfZndkKCkge1xuXHRcdHZl
YzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcblx0XHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XG5c
dFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xu
XHRcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNU
ZHggKS54IC0gSGxsO1xuXHRcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVt
cE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xuXHRcdHJldHVybiB2ZWMyKCBkQngsIGRCeSAp
O1xuXHR9XG5cdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJm
X25vcm0sIHZlYzIgZEhkeHkgKSB7XG5cdFx0dmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3Vy
Zl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApO1xuXHRc
dHZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3Mu
eSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZOID0gc3VyZl9ub3JtO1xuXHRc
dHZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTtcblx0XHR2ZWMzIFIyID0gY3Jvc3MoIHZO
LCB2U2lnbWFYICk7XG5cdFx0ZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKTtcblx0XHRm
RGV0ICo9ICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHR2ZWMz
IHZHcmFkID0gc2lnbiggZkRldCApICogKCBkSGR4eS54ICogUjEgKyBkSGR4eS55ICogUjIgKTtc
blx0XHRyZXR1cm4gbm9ybWFsaXplKCBhYnMoIGZEZXQgKSAqIHN1cmZfbm9ybSAtIHZHcmFkICk7
XG5cdH1cbiNlbmRpZiI7CiAKLSAgICAgICAgfSwKKyAgICB2YXIgY2xpcHBpbmdfcGxhbmVzX2Zy
YWdtZW50ID0gIiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2ZWM0IHBsYW5lO1xuXHQj
cHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpID0gMDsgaSA8IFVOSU9OX0NMSVBQSU5H
X1BMQU5FUzsgaSArKyApIHtcblx0XHRwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0
aWYgKCBkb3QoIHZWaWV3UG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7
XG5cdH1cblx0I2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVNc
blx0XHRib29sIGNsaXBwZWQgPSB0cnVlO1xuXHRcdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0XHRm
b3IgKCBpbnQgaSA9IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSA8IE5VTV9DTElQUElOR19QTEFO
RVM7IGkgKysgKSB7XG5cdFx0XHRwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0XHRj
bGlwcGVkID0gKCBkb3QoIHZWaWV3UG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApICYm
IGNsaXBwZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xpcHBlZCApIGRpc2NhcmQ7XG5cdCNlbmRpZlxu
I2VuZGlmIjsKIAotICAgICAgICBlcXVhbHM6IGZ1bmN0aW9uICggcmF5ICkgeworICAgIHZhciBj
bGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudCA9ICIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+
IDBcblx0I2lmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAhIGRlZmluZWQoIFBIT05HICkgJiYg
ISBkZWZpbmVkKCBNQVRDQVAgKVxuXHRcdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuXHQj
ZW5kaWZcblx0dW5pZm9ybSB2ZWM0IGNsaXBwaW5nUGxhbmVzWyBOVU1fQ0xJUFBJTkdfUExBTkVT
IF07XG4jZW5kaWYiOwogCi0gICAgICAgICAgICByZXR1cm4gcmF5Lm9yaWdpbi5lcXVhbHMoIHRo
aXMub3JpZ2luICkgJiYgcmF5LmRpcmVjdGlvbi5lcXVhbHMoIHRoaXMuZGlyZWN0aW9uICk7Cisg
ICAgdmFyIGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleCA9ICIjaWYgTlVNX0NMSVBQSU5HX1BM
QU5FUyA+IDAgJiYgISBkZWZpbmVkKCBQSFlTSUNBTCApICYmICEgZGVmaW5lZCggUEhPTkcgKSAm
JiAhIGRlZmluZWQoIE1BVENBUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2Vu
ZGlmIjsKIAotICAgICAgICB9CisgICAgdmFyIGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXggPSAiI2lm
IE5VTV9DTElQUElOR19QTEFORVMgPiAwICYmICEgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiAhIGRl
ZmluZWQoIFBIT05HICkgJiYgISBkZWZpbmVkKCBNQVRDQVAgKVxuXHR2Vmlld1Bvc2l0aW9uID0g
LSBtdlBvc2l0aW9uLnh5ejtcbiNlbmRpZiI7CiAKLSAgICB9ICk7CisgICAgdmFyIGNvbG9yX2Zy
YWdtZW50ID0gIiNpZmRlZiBVU0VfQ09MT1Jcblx0ZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7
XG4jZW5kaWYiOwogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBiaG91c3RvbiAvIGh0dHA6Ly9j
bGFyYS5pbwotICAgICAqLworICAgIHZhciBjb2xvcl9wYXJzX2ZyYWdtZW50ID0gIiNpZmRlZiBV
U0VfQ09MT1Jcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiI7CiAKLSAgICBmdW5jdGlv
biBMaW5lMyggc3RhcnQsIGVuZCApIHsKKyAgICB2YXIgY29sb3JfcGFyc192ZXJ0ZXggPSAiI2lm
ZGVmIFVTRV9DT0xPUlxuXHR2YXJ5aW5nIHZlYzMgdkNvbG9yO1xuI2VuZGlmIjsKIAotICAgICAg
ICB0aGlzLnN0YXJ0ID0gKCBzdGFydCAhPT0gdW5kZWZpbmVkICkgPyBzdGFydCA6IG5ldyBWZWN0
b3IzKCk7Ci0gICAgICAgIHRoaXMuZW5kID0gKCBlbmQgIT09IHVuZGVmaW5lZCApID8gZW5kIDog
bmV3IFZlY3RvcjMoKTsKKyAgICB2YXIgY29sb3JfdmVydGV4ID0gIiNpZmRlZiBVU0VfQ09MT1Jc
blx0dkNvbG9yLnh5eiA9IGNvbG9yLnh5ejtcbiNlbmRpZiI7CiAKLSAgICB9CisgICAgdmFyIGNv
bW1vbiA9ICIjZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTlcbiNkZWZpbmUgUEkyIDYuMjgzMTg1MzA3
MThcbiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDlcbiNkZWZpbmUgUkVDSVBST0NBTF9Q
SSAwLjMxODMwOTg4NjE4XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkyIDAuMTU5MTU0OTRcbiNkZWZp
bmUgTE9HMiAxLjQ0MjY5NVxuI2RlZmluZSBFUFNJTE9OIDFlLTZcbiNkZWZpbmUgc2F0dXJhdGUo
YSkgY2xhbXAoIGEsIDAuMCwgMS4wIClcbiNkZWZpbmUgd2hpdGVDb21wbGltZW50KGEpICggMS4w
IC0gc2F0dXJhdGUoIGEgKSApXG5mbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1
cm4geCp4OyB9XG5mbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7
IH1cbmZsb2F0IHBvdzQoIGNvbnN0IGluIGZsb2F0IHggKSB7IGZsb2F0IHgyID0geCp4OyByZXR1
cm4geDIqeDI7IH1cbmZsb2F0IGF2ZXJhZ2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7IHJldHVy
biBkb3QoIGNvbG9yLCB2ZWMzKCAwLjMzMzMgKSApOyB9XG5oaWdocCBmbG9hdCByYW5kKCBjb25z
dCBpbiB2ZWMyIHV2ICkge1xuXHRjb25zdCBoaWdocCBmbG9hdCBhID0gMTIuOTg5OCwgYiA9IDc4
LjIzMywgYyA9IDQzNzU4LjU0NTM7XG5cdGhpZ2hwIGZsb2F0IGR0ID0gZG90KCB1di54eSwgdmVj
MiggYSxiICkgKSwgc24gPSBtb2QoIGR0LCBQSSApO1xuXHRyZXR1cm4gZnJhY3Qoc2luKHNuKSAq
IGMpO1xufVxuc3RydWN0IEluY2lkZW50TGlnaHQge1xuXHR2ZWMzIGNvbG9yO1xuXHR2ZWMzIGRp
cmVjdGlvbjtcblx0Ym9vbCB2aXNpYmxlO1xufTtcbnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7XG5c
dHZlYzMgZGlyZWN0RGlmZnVzZTtcblx0dmVjMyBkaXJlY3RTcGVjdWxhcjtcblx0dmVjMyBpbmRp
cmVjdERpZmZ1c2U7XG5cdHZlYzMgaW5kaXJlY3RTcGVjdWxhcjtcbn07XG5zdHJ1Y3QgR2VvbWV0
cmljQ29udGV4dCB7XG5cdHZlYzMgcG9zaXRpb247XG5cdHZlYzMgbm9ybWFsO1xuXHR2ZWMzIHZp
ZXdEaXI7XG59O1xudmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0
IG1hdHJpeCApIHtcblx0cmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAu
MCApICkueHl6ICk7XG59XG52ZWMzIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMg
ZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHtcblx0cmV0dXJuIG5vcm1hbGl6ZSggKCB2ZWM0KCBkaXIs
IDAuMCApICogbWF0cml4ICkueHl6ICk7XG59XG52ZWMzIHByb2plY3RPblBsYW5lKGluIHZlYzMg
cG9pbnQsIGluIHZlYzMgcG9pbnRPblBsYW5lLCBpbiB2ZWMzIHBsYW5lTm9ybWFsICkge1xuXHRm
bG9hdCBkaXN0YW5jZSA9IGRvdCggcGxhbmVOb3JtYWwsIHBvaW50IC0gcG9pbnRPblBsYW5lICk7
XG5cdHJldHVybiAtIGRpc3RhbmNlICogcGxhbmVOb3JtYWwgKyBwb2ludDtcbn1cbmZsb2F0IHNp
ZGVPZlBsYW5lKCBpbiB2ZWMzIHBvaW50LCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBw
bGFuZU5vcm1hbCApIHtcblx0cmV0dXJuIHNpZ24oIGRvdCggcG9pbnQgLSBwb2ludE9uUGxhbmUs
IHBsYW5lTm9ybWFsICkgKTtcbn1cbnZlYzMgbGluZVBsYW5lSW50ZXJzZWN0KCBpbiB2ZWMzIHBv
aW50T25MaW5lLCBpbiB2ZWMzIGxpbmVEaXJlY3Rpb24sIGluIHZlYzMgcG9pbnRPblBsYW5lLCBp
biB2ZWMzIHBsYW5lTm9ybWFsICkge1xuXHRyZXR1cm4gbGluZURpcmVjdGlvbiAqICggZG90KCBw
bGFuZU5vcm1hbCwgcG9pbnRPblBsYW5lIC0gcG9pbnRPbkxpbmUgKSAvIGRvdCggcGxhbmVOb3Jt
YWwsIGxpbmVEaXJlY3Rpb24gKSApICsgcG9pbnRPbkxpbmU7XG59XG5tYXQzIHRyYW5zcG9zZU1h
dDMoIGNvbnN0IGluIG1hdDMgbSApIHtcblx0bWF0MyB0bXA7XG5cdHRtcFsgMCBdID0gdmVjMygg
bVsgMCBdLngsIG1bIDEgXS54LCBtWyAyIF0ueCApO1xuXHR0bXBbIDEgXSA9IHZlYzMoIG1bIDAg
XS55LCBtWyAxIF0ueSwgbVsgMiBdLnkgKTtcblx0dG1wWyAyIF0gPSB2ZWMzKCBtWyAwIF0ueiwg
bVsgMSBdLnosIG1bIDIgXS56ICk7XG5cdHJldHVybiB0bXA7XG59XG5mbG9hdCBsaW5lYXJUb1Jl
bGF0aXZlTHVtaW5hbmNlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkge1xuXHR2ZWMzIHdlaWdodHMg
PSB2ZWMzKCAwLjIxMjYsIDAuNzE1MiwgMC4wNzIyICk7XG5cdHJldHVybiBkb3QoIHdlaWdodHMs
IGNvbG9yLnJnYiApO1xufSI7CiAKLSAgICBPYmplY3QuYXNzaWduKCBMaW5lMy5wcm90b3R5cGUs
IHsKKyAgICB2YXIgY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50ID0gIiNpZmRlZiBFTlZNQVBf
VFlQRV9DVUJFX1VWXG4jZGVmaW5lIGN1YmVVVl90ZXh0dXJlU2l6ZSAoMTAyNC4wKVxuaW50IGdl
dEZhY2VGcm9tRGlyZWN0aW9uKHZlYzMgZGlyZWN0aW9uKSB7XG5cdHZlYzMgYWJzRGlyZWN0aW9u
ID0gYWJzKGRpcmVjdGlvbik7XG5cdGludCBmYWNlID0gLTE7XG5cdGlmKCBhYnNEaXJlY3Rpb24u
eCA+IGFic0RpcmVjdGlvbi56ICkge1xuXHRcdGlmKGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0
aW9uLnkgKVxuXHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMCA6IDM7XG5cdFx0ZWxz
ZVxuXHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMSA6IDQ7XG5cdH1cblx0ZWxzZSB7
XG5cdFx0aWYoYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApXG5cdFx0XHRmYWNlID0g
ZGlyZWN0aW9uLnogPiAwLjAgPyAyIDogNTtcblx0XHRlbHNlXG5cdFx0XHRmYWNlID0gZGlyZWN0
aW9uLnkgPiAwLjAgPyAxIDogNDtcblx0fVxuXHRyZXR1cm4gZmFjZTtcbn1cbiNkZWZpbmUgY3Vi
ZVVWX21heExvZHMxICAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAxLjApXG4jZGVm
aW5lIGN1YmVVVl9yYW5nZUNsYW1wIChleHAyKCg2LjAgLSAxLjApICogMi4wKSlcbnZlYzIgTWlw
TGV2ZWxJbmZvKCB2ZWMzIHZlYywgZmxvYXQgcm91Z2huZXNzTGV2ZWwsIGZsb2F0IHJvdWdobmVz
cyApIHtcblx0ZmxvYXQgc2NhbGUgPSBleHAyKGN1YmVVVl9tYXhMb2RzMSAtIHJvdWdobmVzc0xl
dmVsKTtcblx0ZmxvYXQgZHhSb3VnaG5lc3MgPSBkRmR4KHJvdWdobmVzcyk7XG5cdGZsb2F0IGR5
Um91Z2huZXNzID0gZEZkeShyb3VnaG5lc3MpO1xuXHR2ZWMzIGR4ID0gZEZkeCggdmVjICogc2Nh
bGUgKiBkeFJvdWdobmVzcyApO1xuXHR2ZWMzIGR5ID0gZEZkeSggdmVjICogc2NhbGUgKiBkeVJv
dWdobmVzcyApO1xuXHRmbG9hdCBkID0gbWF4KCBkb3QoIGR4LCBkeCApLCBkb3QoIGR5LCBkeSAp
ICk7XG5cdGQgPSBjbGFtcChkLCAxLjAsIGN1YmVVVl9yYW5nZUNsYW1wKTtcblx0ZmxvYXQgbWlw
TGV2ZWwgPSAwLjUgKiBsb2cyKGQpO1xuXHRyZXR1cm4gdmVjMihmbG9vcihtaXBMZXZlbCksIGZy
YWN0KG1pcExldmVsKSk7XG59XG4jZGVmaW5lIGN1YmVVVl9tYXhMb2RzMiAobG9nMihjdWJlVVZf
dGV4dHVyZVNpemUqMC4yNSkgLSAyLjApXG4jZGVmaW5lIGN1YmVVVl9yY3BUZXh0dXJlU2l6ZSAo
MS4wIC8gY3ViZVVWX3RleHR1cmVTaXplKVxudmVjMiBnZXRDdWJlVVYodmVjMyBkaXJlY3Rpb24s
IGZsb2F0IHJvdWdobmVzc0xldmVsLCBmbG9hdCBtaXBMZXZlbCkge1xuXHRtaXBMZXZlbCA9IHJv
dWdobmVzc0xldmVsID4gY3ViZVVWX21heExvZHMyIC0gMy4wID8gMC4wIDogbWlwTGV2ZWw7XG5c
dGZsb2F0IGEgPSAxNi4wICogY3ViZVVWX3JjcFRleHR1cmVTaXplO1xuXHR2ZWMyIGV4cDJfcGFj
a2VkID0gZXhwMiggdmVjMiggcm91Z2huZXNzTGV2ZWwsIG1pcExldmVsICkgKTtcblx0dmVjMiBy
Y3BfZXhwMl9wYWNrZWQgPSB2ZWMyKCAxLjAgKSAvIGV4cDJfcGFja2VkO1xuXHRmbG9hdCBwb3dT
Y2FsZSA9IGV4cDJfcGFja2VkLnggKiBleHAyX3BhY2tlZC55O1xuXHRmbG9hdCBzY2FsZSA9IHJj
cF9leHAyX3BhY2tlZC54ICogcmNwX2V4cDJfcGFja2VkLnkgKiAwLjI1O1xuXHRmbG9hdCBtaXBP
ZmZzZXQgPSAwLjc1KigxLjAgLSByY3BfZXhwMl9wYWNrZWQueSkgKiByY3BfZXhwMl9wYWNrZWQu
eDtcblx0Ym9vbCBiUmVzID0gbWlwTGV2ZWwgPT0gMC4wO1xuXHRzY2FsZSA9ICBiUmVzICYmIChz
Y2FsZSA8IGEpID8gYSA6IHNjYWxlO1xuXHR2ZWMzIHI7XG5cdHZlYzIgb2Zmc2V0O1xuXHRpbnQg
ZmFjZSA9IGdldEZhY2VGcm9tRGlyZWN0aW9uKGRpcmVjdGlvbik7XG5cdGZsb2F0IHJjcFBvd1Nj
YWxlID0gMS4wIC8gcG93U2NhbGU7XG5cdGlmKCBmYWNlID09IDApIHtcblx0XHRyID0gdmVjMyhk
aXJlY3Rpb24ueCwgLWRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSk7XG5cdFx0b2Zmc2V0ID0gdmVj
MigwLjArbWlwT2Zmc2V0LDAuNzUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVz
ICYmIChvZmZzZXQueSA8IDIuMCphKSA/IGEgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIGlmKCBm
YWNlID09IDEpIHtcblx0XHRyID0gdmVjMyhkaXJlY3Rpb24ueSwgZGlyZWN0aW9uLngsIGRpcmVj
dGlvbi56KTtcblx0XHRvZmZzZXQgPSB2ZWMyKHNjYWxlK21pcE9mZnNldCwgMC43NSAqIHJjcFBv
d1NjYWxlKTtcblx0XHRvZmZzZXQueSA9IGJSZXMgJiYgKG9mZnNldC55IDwgMi4wKmEpID8gYSA6
IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgPT0gMikge1xuXHRcdHIgPSB2ZWMzKGRp
cmVjdGlvbi56LCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCA9IHZlYzIo
Mi4wKnNjYWxlK21pcE9mZnNldCwgMC43NSAqIHJjcFBvd1NjYWxlKTtcblx0XHRvZmZzZXQueSA9
IGJSZXMgJiYgKG9mZnNldC55IDwgMi4wKmEpID8gYSA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2Ug
aWYoIGZhY2UgPT0gMykge1xuXHRcdHIgPSB2ZWMzKGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiwg
ZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCA9IHZlYzIoMC4wK21pcE9mZnNldCwwLjUgKiByY3BQ
b3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYmIChvZmZzZXQueSA8IDIuMCphKSA/IDAu
MCA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgPT0gNCkge1xuXHRcdHIgPSB2ZWMz
KGRpcmVjdGlvbi55LCBkaXJlY3Rpb24ueCwgLWRpcmVjdGlvbi56KTtcblx0XHRvZmZzZXQgPSB2
ZWMyKHNjYWxlK21pcE9mZnNldCwgMC41ICogcmNwUG93U2NhbGUpO1xuXHRcdG9mZnNldC55ID0g
YlJlcyAmJiAob2Zmc2V0LnkgPCAyLjAqYSkgPyAwLjAgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNl
IHtcblx0XHRyID0gdmVjMyhkaXJlY3Rpb24ueiwgLWRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueSk7
XG5cdFx0b2Zmc2V0ID0gdmVjMigyLjAqc2NhbGUrbWlwT2Zmc2V0LCAwLjUgKiByY3BQb3dTY2Fs
ZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYmIChvZmZzZXQueSA8IDIuMCphKSA/IDAuMCA6IG9m
ZnNldC55O1xuXHR9XG5cdHIgPSBub3JtYWxpemUocik7XG5cdGZsb2F0IHRleGVsT2Zmc2V0ID0g
MC41ICogY3ViZVVWX3JjcFRleHR1cmVTaXplO1xuXHR2ZWMyIHMgPSAoIHIueXogLyBhYnMoIHIu
eCApICsgdmVjMiggMS4wICkgKSAqIDAuNTtcblx0dmVjMiBiYXNlID0gb2Zmc2V0ICsgdmVjMigg
dGV4ZWxPZmZzZXQgKTtcblx0cmV0dXJuIGJhc2UgKyBzICogKCBzY2FsZSAtIDIuMCAqIHRleGVs
T2Zmc2V0ICk7XG59XG4jZGVmaW5lIGN1YmVVVl9tYXhMb2RzMyAobG9nMihjdWJlVVZfdGV4dHVy
ZVNpemUqMC4yNSkgLSAzLjApXG52ZWM0IHRleHR1cmVDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAs
IHZlYzMgcmVmbGVjdGVkRGlyZWN0aW9uLCBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IHJv
dWdobmVzc1ZhbCA9IHJvdWdobmVzcyogY3ViZVVWX21heExvZHMzO1xuXHRmbG9hdCByMSA9IGZs
b29yKHJvdWdobmVzc1ZhbCk7XG5cdGZsb2F0IHIyID0gcjEgKyAxLjA7XG5cdGZsb2F0IHQgPSBm
cmFjdChyb3VnaG5lc3NWYWwpO1xuXHR2ZWMyIG1pcEluZm8gPSBNaXBMZXZlbEluZm8ocmVmbGVj
dGVkRGlyZWN0aW9uLCByMSwgcm91Z2huZXNzKTtcblx0ZmxvYXQgcyA9IG1pcEluZm8ueTtcblx0
ZmxvYXQgbGV2ZWwwID0gbWlwSW5mby54O1xuXHRmbG9hdCBsZXZlbDEgPSBsZXZlbDAgKyAxLjA7
XG5cdGxldmVsMSA9IGxldmVsMSA+IDUuMCA/IDUuMCA6IGxldmVsMTtcblx0bGV2ZWwwICs9IG1p
biggZmxvb3IoIHMgKyAwLjUgKSwgNS4wICk7XG5cdHZlYzIgdXZfMTAgPSBnZXRDdWJlVVYocmVm
bGVjdGVkRGlyZWN0aW9uLCByMSwgbGV2ZWwwKTtcblx0dmVjNCBjb2xvcjEwID0gZW52TWFwVGV4
ZWxUb0xpbmVhcih0ZXh0dXJlMkQoZW52TWFwLCB1dl8xMCkpO1xuXHR2ZWMyIHV2XzIwID0gZ2V0
Q3ViZVVWKHJlZmxlY3RlZERpcmVjdGlvbiwgcjIsIGxldmVsMCk7XG5cdHZlYzQgY29sb3IyMCA9
IGVudk1hcFRleGVsVG9MaW5lYXIodGV4dHVyZTJEKGVudk1hcCwgdXZfMjApKTtcblx0dmVjNCBy
ZXN1bHQgPSBtaXgoY29sb3IxMCwgY29sb3IyMCwgdCk7XG5cdHJldHVybiB2ZWM0KHJlc3VsdC5y
Z2IsIDEuMCk7XG59XG4jZW5kaWYiOwogCi0gICAgICAgIHNldDogZnVuY3Rpb24gKCBzdGFydCwg
ZW5kICkgeworICAgIHZhciBkZWZhdWx0bm9ybWFsX3ZlcnRleCA9ICJ2ZWMzIHRyYW5zZm9ybWVk
Tm9ybWFsID0gbm9ybWFsTWF0cml4ICogb2JqZWN0Tm9ybWFsO1xuI2lmZGVmIEZMSVBfU0lERURc
blx0dHJhbnNmb3JtZWROb3JtYWwgPSAtIHRyYW5zZm9ybWVkTm9ybWFsO1xuI2VuZGlmXG4jaWZk
ZWYgVVNFX1RBTkdFTlRcblx0dmVjMyB0cmFuc2Zvcm1lZFRhbmdlbnQgPSBub3JtYWxNYXRyaXgg
KiBvYmplY3RUYW5nZW50O1xuXHQjaWZkZWYgRkxJUF9TSURFRFxuXHRcdHRyYW5zZm9ybWVkVGFu
Z2VudCA9IC0gdHJhbnNmb3JtZWRUYW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZiI7CiAKLSAgICAg
ICAgICAgIHRoaXMuc3RhcnQuY29weSggc3RhcnQgKTsKLSAgICAgICAgICAgIHRoaXMuZW5kLmNv
cHkoIGVuZCApOworICAgIHZhciBkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXggPSAiI2lmZGVm
IFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZGlzcGxhY2VtZW50TWFw
O1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlO1xuXHR1bmlmb3JtIGZsb2F0IGRp
c3BsYWNlbWVudEJpYXM7XG4jZW5kaWYiOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICB2YXIgZGlzcGxhY2VtZW50bWFwX3ZlcnRleCA9ICIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1B
UFxuXHR0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJl
MkQoIGRpc3BsYWNlbWVudE1hcCwgdXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFj
ZW1lbnRCaWFzICk7XG4jZW5kaWYiOwogCi0gICAgICAgIH0sCisgICAgdmFyIGVtaXNzaXZlbWFw
X2ZyYWdtZW50ID0gIiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcblx0dmVjNCBlbWlzc2l2ZUNvbG9y
ID0gdGV4dHVyZTJEKCBlbWlzc2l2ZU1hcCwgdlV2ICk7XG5cdGVtaXNzaXZlQ29sb3IucmdiID0g
ZW1pc3NpdmVNYXBUZXhlbFRvTGluZWFyKCBlbWlzc2l2ZUNvbG9yICkucmdiO1xuXHR0b3RhbEVt
aXNzaXZlUmFkaWFuY2UgKj0gZW1pc3NpdmVDb2xvci5yZ2I7XG4jZW5kaWYiOwogCi0gICAgICAg
IGNsb25lOiBmdW5jdGlvbiAoKSB7CisgICAgdmFyIGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQg
PSAiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZU1h
cDtcbiNlbmRpZiI7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcigp
LmNvcHkoIHRoaXMgKTsKKyAgICB2YXIgZW5jb2RpbmdzX2ZyYWdtZW50ID0gImdsX0ZyYWdDb2xv
ciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyI7CiAKLSAgICAgICAgfSwK
KyAgICB2YXIgZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQgPSAiXG52ZWM0IExpbmVhclRvTGluZWFy
KCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmFsdWU7XG59XG52ZWM0IEdhbW1hVG9MaW5l
YXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IGdhbW1hRmFjdG9yICkge1xuXHRyZXR1cm4gdmVj
NCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIGdhbW1hRmFjdG9yICkgKSwgdmFsdWUuYSApO1xufVxu
dmVjNCBMaW5lYXJUb0dhbW1hKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBnYW1tYUZhY3RvciAp
IHtcblx0cmV0dXJuIHZlYzQoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCAxLjAgLyBnYW1tYUZhY3Rv
ciApICksIHZhbHVlLmEgKTtcbn1cbnZlYzQgc1JHQlRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkg
e1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZl
YzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQgKSApLCB2YWx1ZS5yZ2IgKiAwLjA3NzM5OTM4
MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMyggMC4wNDA0NSApICkgKSAp
LCB2YWx1ZS5hICk7XG59XG52ZWM0IExpbmVhclRvc1JHQiggaW4gdmVjNCB2YWx1ZSApIHtcblx0
cmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIDAuNDE2NjYgKSApICogMS4w
NTUgLSB2ZWMzKCAwLjA1NSApLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMyggbGVzc1RoYW5FcXVh
bCggdmFsdWUucmdiLCB2ZWMzKCAwLjAwMzEzMDggKSApICkgKSwgdmFsdWUuYSApO1xufVxudmVj
NCBSR0JFVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5y
Z2IgKiBleHAyKCB2YWx1ZS5hICogMjU1LjAgLSAxMjguMCApLCAxLjAgKTtcbn1cbnZlYzQgTGlu
ZWFyVG9SR0JFKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRmbG9hdCBtYXhDb21wb25lbnQgPSBtYXgo
IG1heCggdmFsdWUuciwgdmFsdWUuZyApLCB2YWx1ZS5iICk7XG5cdGZsb2F0IGZFeHAgPSBjbGFt
cCggY2VpbCggbG9nMiggbWF4Q29tcG9uZW50ICkgKSwgLTEyOC4wLCAxMjcuMCApO1xuXHRyZXR1
cm4gdmVjNCggdmFsdWUucmdiIC8gZXhwMiggZkV4cCApLCAoIGZFeHAgKyAxMjguMCApIC8gMjU1
LjAgKTtcbn1cbnZlYzQgUkdCTVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBtYXhS
YW5nZSApIHtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAqIHZhbHVlLmEgKiBtYXhSYW5nZSwg
MS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCTSggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4
UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiA9IG1heCggdmFsdWUuciwgbWF4KCB2YWx1ZS5nLCB2
YWx1ZS5iICkgKTtcblx0ZmxvYXQgTSA9IGNsYW1wKCBtYXhSR0IgLyBtYXhSYW5nZSwgMC4wLCAx
LjAgKTtcblx0TSA9IGNlaWwoIE0gKiAyNTUuMCApIC8gMjU1LjA7XG5cdHJldHVybiB2ZWM0KCB2
YWx1ZS5yZ2IgLyAoIE0gKiBtYXhSYW5nZSApLCBNICk7XG59XG52ZWM0IFJHQkRUb0xpbmVhcigg
aW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdHJldHVybiB2ZWM0KCB2YWx1
ZS5yZ2IgKiAoICggbWF4UmFuZ2UgLyAyNTUuMCApIC8gdmFsdWUuYSApLCAxLjAgKTtcbn1cbnZl
YzQgTGluZWFyVG9SR0JEKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBtYXhSYW5nZSApIHtcblx0
ZmxvYXQgbWF4UkdCID0gbWF4KCB2YWx1ZS5yLCBtYXgoIHZhbHVlLmcsIHZhbHVlLmIgKSApO1xu
XHRmbG9hdCBEID0gbWF4KCBtYXhSYW5nZSAvIG1heFJHQiwgMS4wICk7XG5cdEQgPSBtaW4oIGZs
b29yKCBEICkgLyAyNTUuMCwgMS4wICk7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgKiAoIEQg
KiAoIDI1NS4wIC8gbWF4UmFuZ2UgKSApLCBEICk7XG59XG5jb25zdCBtYXQzIGNMb2dMdXZNID0g
bWF0MyggMC4yMjA5LCAwLjMzOTAsIDAuNDE4NCwgMC4xMTM4LCAwLjY3ODAsIDAuNzMxOSwgMC4w
MTAyLCAwLjExMzAsIDAuMjk2OSApO1xudmVjNCBMaW5lYXJUb0xvZ0x1diggaW4gdmVjNCB2YWx1
ZSApICB7XG5cdHZlYzMgWHBfWV9YWVpwID0gY0xvZ0x1dk0gKiB2YWx1ZS5yZ2I7XG5cdFhwX1lf
WFlacCA9IG1heCggWHBfWV9YWVpwLCB2ZWMzKCAxZS02LCAxZS02LCAxZS02ICkgKTtcblx0dmVj
NCB2UmVzdWx0O1xuXHR2UmVzdWx0Lnh5ID0gWHBfWV9YWVpwLnh5IC8gWHBfWV9YWVpwLno7XG5c
dGZsb2F0IExlID0gMi4wICogbG9nMihYcF9ZX1hZWnAueSkgKyAxMjcuMDtcblx0dlJlc3VsdC53
ID0gZnJhY3QoIExlICk7XG5cdHZSZXN1bHQueiA9ICggTGUgLSAoIGZsb29yKCB2UmVzdWx0Lncg
KiAyNTUuMCApICkgLyAyNTUuMCApIC8gMjU1LjA7XG5cdHJldHVybiB2UmVzdWx0O1xufVxuY29u
c3QgbWF0MyBjTG9nTHV2SW52ZXJzZU0gPSBtYXQzKCA2LjAwMTQsIC0yLjcwMDgsIC0xLjc5OTYs
IC0xLjMzMjAsIDMuMTAyOSwgLTUuNzcyMSwgMC4zMDA4LCAtMS4wODgyLCA1LjYyNjggKTtcbnZl
YzQgTG9nTHV2VG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdGZsb2F0IExlID0gdmFsdWUu
eiAqIDI1NS4wICsgdmFsdWUudztcblx0dmVjMyBYcF9ZX1hZWnA7XG5cdFhwX1lfWFlacC55ID0g
ZXhwMiggKCBMZSAtIDEyNy4wICkgLyAyLjAgKTtcblx0WHBfWV9YWVpwLnogPSBYcF9ZX1hZWnAu
eSAvIHZhbHVlLnk7XG5cdFhwX1lfWFlacC54ID0gdmFsdWUueCAqIFhwX1lfWFlacC56O1xuXHR2
ZWMzIHZSR0IgPSBjTG9nTHV2SW52ZXJzZU0gKiBYcF9ZX1hZWnAucmdiO1xuXHRyZXR1cm4gdmVj
NCggbWF4KCB2UkdCLCAwLjAgKSwgMS4wICk7XG59IjsKIAotICAgICAgICBjb3B5OiBmdW5jdGlv
biAoIGxpbmUgKSB7CisgICAgdmFyIGVudm1hcF9mcmFnbWVudCA9ICIjaWZkZWYgVVNFX0VOVk1B
UFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQ
ICkgfHwgZGVmaW5lZCggUEhPTkcgKVxuXHRcdHZlYzMgY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxp
emUoIHZXb3JsZFBvc2l0aW9uIC0gY2FtZXJhUG9zaXRpb24gKTtcblx0XHR2ZWMzIHdvcmxkTm9y
bWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XG5c
dFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZlYzMgcmVmbGVjdFZlYyA9
IHJlZmxlY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0
XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWws
IHJlZnJhY3Rpb25SYXRpbyApO1xuXHRcdCNlbmRpZlxuXHQjZWxzZVxuXHRcdHZlYzMgcmVmbGVj
dFZlYyA9IHZSZWZsZWN0O1xuXHQjZW5kaWZcblx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0
XHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAq
IHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1B
UF9UWVBFX0VRVUlSRUMgKVxuXHRcdHZlYzIgc2FtcGxlVVY7XG5cdFx0cmVmbGVjdFZlYyA9IG5v
cm1hbGl6ZSggcmVmbGVjdFZlYyApO1xuXHRcdHNhbXBsZVVWLnkgPSBhc2luKCBjbGFtcCggcmVm
bGVjdFZlYy55LCAtIDEuMCwgMS4wICkgKSAqIFJFQ0lQUk9DQUxfUEkgKyAwLjU7XG5cdFx0c2Ft
cGxlVVYueCA9IGF0YW4oIHJlZmxlY3RWZWMueiwgcmVmbGVjdFZlYy54ICkgKiBSRUNJUFJPQ0FM
X1BJMiArIDAuNTtcblx0XHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZTJEKCBlbnZNYXAsIHNhbXBs
ZVVWICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX1NQSEVSRSApXG5cdFx0cmVmbGVj
dFZlYyA9IG5vcm1hbGl6ZSggcmVmbGVjdFZlYyApO1xuXHRcdHZlYzMgcmVmbGVjdFZpZXcgPSBu
b3JtYWxpemUoICggdmlld01hdHJpeCAqIHZlYzQoIHJlZmxlY3RWZWMsIDAuMCApICkueHl6ICsg
dmVjMyggMC4wLCAwLjAsIDEuMCApICk7XG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmUyRCgg
ZW52TWFwLCByZWZsZWN0Vmlldy54eSAqIDAuNSArIDAuNSApO1xuXHQjZWxzZVxuXHRcdHZlYzQg
ZW52Q29sb3IgPSB2ZWM0KCAwLjAgKTtcblx0I2VuZGlmXG5cdGVudkNvbG9yID0gZW52TWFwVGV4
ZWxUb0xpbmVhciggZW52Q29sb3IgKTtcblx0I2lmZGVmIEVOVk1BUF9CTEVORElOR19NVUxUSVBM
WVxuXHRcdG91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIG91dGdvaW5nTGlnaHQg
KiBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcblx0I2Vs
aWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX01JWCApXG5cdFx0b3V0Z29pbmdMaWdodCA9IG1p
eCggb3V0Z29pbmdMaWdodCwgZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVj
dGl2aXR5ICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19BREQgKVxuXHRcdG91
dGdvaW5nTGlnaHQgKz0gZW52Q29sb3IueHl6ICogc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rp
dml0eTtcblx0I2VuZGlmXG4jZW5kaWYiOwogCi0gICAgICAgICAgICB0aGlzLnN0YXJ0LmNvcHko
IGxpbmUuc3RhcnQgKTsKLSAgICAgICAgICAgIHRoaXMuZW5kLmNvcHkoIGxpbmUuZW5kICk7Cisg
ICAgdmFyIGVudm1hcF9wYXJzX2ZyYWdtZW50ID0gIiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkg
fHwgZGVmaW5lZCggUEhZU0lDQUwgKVxuXHR1bmlmb3JtIGZsb2F0IHJlZmxlY3Rpdml0eTtcblx0
dW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7XG4jZW5kaWZcbiNpZmRlZiBVU0VfRU5WTUFQ
XG5cdCNpZiAhIGRlZmluZWQoIFBIWVNJQ0FMICkgJiYgKCBkZWZpbmVkKCBVU0VfQlVNUE1BUCAp
IHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApIClcblx0XHR2
YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX1RZ
UEVfQ1VCRVxuXHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXHQjZWxzZVxuXHRcdHVu
aWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0I2VuZGlmXG5cdHVuaWZvcm0gZmxvYXQgZmxpcEVu
dk1hcDtcblx0dW5pZm9ybSBpbnQgbWF4TWlwTGV2ZWw7XG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVN
UE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApIHx8
IGRlZmluZWQoIFBIWVNJQ0FMIClcblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztc
blx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5cdCNlbmRpZlxuI2VuZGlmIjsK
IAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgdmFyIGVudm1hcF9wYXJzX3ZlcnRleCA9
ICIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZp
bmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKVxuXHRcdHZhcnlpbmcgdmVj
MyB2V29ybGRQb3NpdGlvbjtcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5c
dFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbmRpZlxuI2VuZGlmIjsKIAot
ICAgICAgICB9LAorICAgIHZhciBlbnZtYXBfdmVydGV4ID0gIiNpZmRlZiBVU0VfRU5WTUFQXG5c
dCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8
fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5
ejtcblx0I2Vsc2Vcblx0XHR2ZWMzIGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBv
c2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGlu
dmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7
XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZSZWZsZWN0ID0gcmVm
bGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZS
ZWZsZWN0ID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9u
UmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWYiOwogCi0gICAgICAgIGdldENl
bnRlcjogZnVuY3Rpb24gKCB0YXJnZXQgKSB7CisgICAgdmFyIGZvZ192ZXJ0ZXggPSAiI2lmZGVm
IFVTRV9GT0dcblx0Zm9nRGVwdGggPSAtbXZQb3NpdGlvbi56O1xuI2VuZGlmIjsKIAotICAgICAg
ICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVmaW5lZCApIHsKKyAgICB2YXIgZm9nX3BhcnNfdmVy
dGV4ID0gIiNpZmRlZiBVU0VfRk9HXG5cdHZhcnlpbmcgZmxvYXQgZm9nRGVwdGg7XG4jZW5kaWYi
OwogCi0gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuTGluZTM6IC5nZXRDZW50
ZXIoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOwotICAgICAgICAgICAgICAgIHRhcmdldCA9
IG5ldyBWZWN0b3IzKCk7CisgICAgdmFyIGZvZ19mcmFnbWVudCA9ICIjaWZkZWYgVVNFX0ZPR1xu
XHQjaWZkZWYgRk9HX0VYUDJcblx0XHRmbG9hdCBmb2dGYWN0b3IgPSB3aGl0ZUNvbXBsaW1lbnQo
IGV4cDIoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiBmb2dEZXB0aCAqIGZvZ0RlcHRoICog
TE9HMiApICk7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgZm9nRmFjdG9yID0gc21vb3Roc3RlcCggZm9n
TmVhciwgZm9nRmFyLCBmb2dEZXB0aCApO1xuXHQjZW5kaWZcblx0Z2xfRnJhZ0NvbG9yLnJnYiA9
IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZm9nQ29sb3IsIGZvZ0ZhY3RvciApO1xuI2VuZGlmIjsK
IAotICAgICAgICAgICAgfQorICAgIHZhciBmb2dfcGFyc19mcmFnbWVudCA9ICIjaWZkZWYgVVNF
X0ZPR1xuXHR1bmlmb3JtIHZlYzMgZm9nQ29sb3I7XG5cdHZhcnlpbmcgZmxvYXQgZm9nRGVwdGg7
XG5cdCNpZmRlZiBGT0dfRVhQMlxuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRGVuc2l0eTtcblx0I2Vs
c2Vcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ05lYXI7XG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dGYXI7
XG5cdCNlbmRpZlxuI2VuZGlmIjsKIAotICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hZGRWZWN0
b3JzKCB0aGlzLnN0YXJ0LCB0aGlzLmVuZCApLm11bHRpcGx5U2NhbGFyKCAwLjUgKTsKKyAgICB2
YXIgZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudCA9ICIjaWZkZWYgVE9PTlxuXHR1bmlmb3JtIHNh
bXBsZXIyRCBncmFkaWVudE1hcDtcblx0dmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMg
bm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkge1xuXHRcdGZsb2F0IGRvdE5MID0gZG90KCBu
b3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7XG5cdFx0dmVjMiBjb29yZCA9IHZlYzIoIGRvdE5MICog
MC41ICsgMC41LCAwLjAgKTtcblx0XHQjaWZkZWYgVVNFX0dSQURJRU5UTUFQXG5cdFx0XHRyZXR1
cm4gdGV4dHVyZTJEKCBncmFkaWVudE1hcCwgY29vcmQgKS5yZ2I7XG5cdFx0I2Vsc2Vcblx0XHRc
dHJldHVybiAoIGNvb3JkLnggPCAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7XG5c
dFx0I2VuZGlmXG5cdH1cbiNlbmRpZiI7CiAKLSAgICAgICAgfSwKKyAgICB2YXIgbGlnaHRtYXBf
ZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9MSUdIVE1BUFxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVj
dERpZmZ1c2UgKz0gUEkgKiB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICkueHl6ICogbGlnaHRN
YXBJbnRlbnNpdHk7XG4jZW5kaWYiOwogCi0gICAgICAgIGRlbHRhOiBmdW5jdGlvbiAoIHRhcmdl
dCApIHsKKyAgICB2YXIgbGlnaHRtYXBfcGFyc19mcmFnbWVudCA9ICIjaWZkZWYgVVNFX0xJR0hU
TUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGxpZ2h0
TWFwSW50ZW5zaXR5O1xuI2VuZGlmIjsKIAotICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVu
ZGVmaW5lZCApIHsKKyAgICB2YXIgbGlnaHRzX2xhbWJlcnRfdmVydGV4ID0gInZlYzMgZGlmZnVz
ZSA9IHZlYzMoIDEuMCApO1xuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBv
c2l0aW9uID0gbXZQb3NpdGlvbi54eXo7XG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWxpemUoIHRy
YW5zZm9ybWVkTm9ybWFsICk7XG5nZW9tZXRyeS52aWV3RGlyID0gbm9ybWFsaXplKCAtbXZQb3Np
dGlvbi54eXogKTtcbkdlb21ldHJpY0NvbnRleHQgYmFja0dlb21ldHJ5O1xuYmFja0dlb21ldHJ5
LnBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247XG5iYWNrR2VvbWV0cnkubm9ybWFsID0gLWdl
b21ldHJ5Lm5vcm1hbDtcbmJhY2tHZW9tZXRyeS52aWV3RGlyID0gZ2VvbWV0cnkudmlld0Rpcjtc
bnZMaWdodEZyb250ID0gdmVjMyggMC4wICk7XG52SW5kaXJlY3RGcm9udCA9IHZlYzMoIDAuMCAp
O1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2TGlnaHRCYWNrID0gdmVjMyggMC4wICk7XG5cdHZJ
bmRpcmVjdEJhY2sgPSB2ZWMzKCAwLjAgKTtcbiNlbmRpZlxuSW5jaWRlbnRMaWdodCBkaXJlY3RM
aWdodDtcbmZsb2F0IGRvdE5MO1xudmVjMyBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG4jaWYg
TlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQg
aSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdGdldFBvaW50RGlyZWN0
TGlnaHRJcnJhZGlhbmNlKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQg
KTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rp
b24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBQSSAqIGRpcmVjdExpZ2h0LmNv
bG9yO1xuXHRcdHZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRD
b2xvcl9EaWZmdXNlO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZMaWdodEJhY2sg
Kz0gc2F0dXJhdGUoIC1kb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNl
bmRpZlxuXHR9XG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5y
b2xsX2xvb3Bcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkg
e1xuXHRcdGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIHNwb3RMaWdodHNbIGkgXSwgZ2Vv
bWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwg
ZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0g
UEkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90
TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVE
XG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29s
b3JfRGlmZnVzZTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmXG4jaWYgTlVNX0RJUl9MSUdIVFMg
PiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJ
Ul9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodElycmFkaWFu
Y2UoIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRc
dGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xu
XHRcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IFBJICogZGlyZWN0TGlnaHQuY29sb3I7XG5c
dFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0Rp
ZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBzYXR1
cmF0ZSggLWRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5c
dH1cbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9v
cFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0
dkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVy
ZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeSApO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRc
dHZJbmRpcmVjdEJhY2sgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVy
ZUxpZ2h0c1sgaSBdLCBiYWNrR2VvbWV0cnkgKTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmIjsK
IAotICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkxpbmUzOiAuZGVsdGEoKSB0
YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOwotICAgICAgICAgICAgICAgIHRhcmdldCA9IG5ldyBW
ZWN0b3IzKCk7CisgICAgdmFyIGxpZ2h0c19wYXJzX2JlZ2luID0gInVuaWZvcm0gdmVjMyBhbWJp
ZW50TGlnaHRDb2xvcjtcbnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07XG52ZWMzIHNoR2V0
SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBd
ICkge1xuXHRmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56O1xu
XHR2ZWMzIHJlc3VsdCA9IHNoQ29lZmZpY2llbnRzWyAwIF0gKiAwLjg4NjIyNztcblx0cmVzdWx0
ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7XG5cdHJlc3VsdCAr
PSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6O1xuXHRyZXN1bHQgKz0g
c2hDb2VmZmljaWVudHNbIDMgXSAqIDIuMCAqIDAuNTExNjY0ICogeDtcblx0cmVzdWx0ICs9IHNo
Q29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5O1xuXHRyZXN1bHQgKz0g
c2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7XG5cdHJlc3VsdCAr
PSBzaENvZWZmaWNpZW50c1sgNiBdICogKCAwLjc0MzEyNSAqIHogKiB6IC0gMC4yNDc3MDggKTtc
blx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6
O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAt
IHkgKiB5ICk7XG5cdHJldHVybiByZXN1bHQ7XG59XG52ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlh
bmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gR2VvbWV0cmljQ29u
dGV4dCBnZW9tZXRyeSApIHtcblx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1E
aXJlY3Rpb24oIGdlb21ldHJ5Lm5vcm1hbCwgdmlld01hdHJpeCApO1xuXHR2ZWMzIGlycmFkaWFu
Y2UgPSBzaEdldElycmFkaWFuY2VBdCggd29ybGROb3JtYWwsIGxpZ2h0UHJvYmUgKTtcblx0cmV0
dXJuIGlycmFkaWFuY2U7XG59XG52ZWMzIGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGNvbnN0
IGluIHZlYzMgYW1iaWVudExpZ2h0Q29sb3IgKSB7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGFtYmll
bnRMaWdodENvbG9yO1xuXHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRp
cnJhZGlhbmNlICo9IFBJO1xuXHQjZW5kaWZcblx0cmV0dXJuIGlycmFkaWFuY2U7XG59XG4jaWYg
TlVNX0RJUl9MSUdIVFMgPiAwXG5cdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0IHtcblx0XHR2ZWMz
IGRpcmVjdGlvbjtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdGludCBzaGFkb3c7XG5cdFx0ZmxvYXQg
c2hhZG93Qmlhcztcblx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0dmVjMiBzaGFkb3dNYXBT
aXplO1xuXHR9O1xuXHR1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodHNb
IE5VTV9ESVJfTElHSFRTIF07XG5cdHZvaWQgZ2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodElycmFk
aWFuY2UoIGNvbnN0IGluIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodCwgY29uc3Qg
aW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgZGlyZWN0TGln
aHQgKSB7XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgPSBkaXJlY3Rpb25hbExpZ2h0LmNvbG9yO1xu
XHRcdGRpcmVjdExpZ2h0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbmFsTGlnaHQuZGlyZWN0aW9uO1xu
XHRcdGRpcmVjdExpZ2h0LnZpc2libGUgPSB0cnVlO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fUE9J
TlRfTElHSFRTID4gMFxuXHRzdHJ1Y3QgUG9pbnRMaWdodCB7XG5cdFx0dmVjMyBwb3NpdGlvbjtc
blx0XHR2ZWMzIGNvbG9yO1xuXHRcdGZsb2F0IGRpc3RhbmNlO1xuXHRcdGZsb2F0IGRlY2F5O1xu
XHRcdGludCBzaGFkb3c7XG5cdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRmbG9hdCBzaGFkb3dS
YWRpdXM7XG5cdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdGZsb2F0IHNoYWRvd0NhbWVyYU5l
YXI7XG5cdFx0ZmxvYXQgc2hhZG93Q2FtZXJhRmFyO1xuXHR9O1xuXHR1bmlmb3JtIFBvaW50TGln
aHQgcG9pbnRMaWdodHNbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRQb2ludERpcmVj
dExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gUG9pbnRMaWdodCBwb2ludExpZ2h0LCBjb25zdCBp
biBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdo
dCApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBwb2ludExpZ2h0LnBvc2l0aW9uIC0gZ2VvbWV0cnku
cG9zaXRpb247XG5cdFx0ZGlyZWN0TGlnaHQuZGlyZWN0aW9uID0gbm9ybWFsaXplKCBsVmVjdG9y
ICk7XG5cdFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xuXHRcdGRp
cmVjdExpZ2h0LmNvbG9yID0gcG9pbnRMaWdodC5jb2xvcjtcblx0XHRkaXJlY3RMaWdodC5jb2xv
ciAqPSBwdW5jdHVhbExpZ2h0SW50ZW5zaXR5VG9JcnJhZGlhbmNlRmFjdG9yKCBsaWdodERpc3Rh
bmNlLCBwb2ludExpZ2h0LmRpc3RhbmNlLCBwb2ludExpZ2h0LmRlY2F5ICk7XG5cdFx0ZGlyZWN0
TGlnaHQudmlzaWJsZSA9ICggZGlyZWN0TGlnaHQuY29sb3IgIT0gdmVjMyggMC4wICkgKTtcblx0
fVxuI2VuZGlmXG4jaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHRzdHJ1Y3QgU3BvdExpZ2h0IHtc
blx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7
XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdFx0ZmxvYXQgY29uZUNv
cztcblx0XHRmbG9hdCBwZW51bWJyYUNvcztcblx0XHRpbnQgc2hhZG93O1xuXHRcdGZsb2F0IHNo
YWRvd0JpYXM7XG5cdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdHZlYzIgc2hhZG93TWFwU2l6
ZTtcblx0fTtcblx0dW5pZm9ybSBTcG90TGlnaHQgc3BvdExpZ2h0c1sgTlVNX1NQT1RfTElHSFRT
IF07XG5cdHZvaWQgZ2V0U3BvdERpcmVjdExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gU3BvdExp
Z2h0IHNwb3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IElu
Y2lkZW50TGlnaHQgZGlyZWN0TGlnaHQgICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHNwb3RMaWdo
dC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdGRpcmVjdExpZ2h0LmRpcmVjdGlv
biA9IG5vcm1hbGl6ZSggbFZlY3RvciApO1xuXHRcdGZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5n
dGgoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBhbmdsZUNvcyA9IGRvdCggZGlyZWN0TGlnaHQuZGly
ZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0aWYgKCBhbmdsZUNvcyA+IHNwb3RM
aWdodC5jb25lQ29zICkge1xuXHRcdFx0ZmxvYXQgc3BvdEVmZmVjdCA9IHNtb290aHN0ZXAoIHNw
b3RMaWdodC5jb25lQ29zLCBzcG90TGlnaHQucGVudW1icmFDb3MsIGFuZ2xlQ29zICk7XG5cdFx0
XHRkaXJlY3RMaWdodC5jb2xvciA9IHNwb3RMaWdodC5jb2xvcjtcblx0XHRcdGRpcmVjdExpZ2h0
LmNvbG9yICo9IHNwb3RFZmZlY3QgKiBwdW5jdHVhbExpZ2h0SW50ZW5zaXR5VG9JcnJhZGlhbmNl
RmFjdG9yKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNh
eSApO1xuXHRcdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0
XHRcdGRpcmVjdExpZ2h0LmNvbG9yID0gdmVjMyggMC4wICk7XG5cdFx0XHRkaXJlY3RMaWdodC52
aXNpYmxlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG4jZW5kaWZcbiNpZiBOVU1fUkVDVF9BUkVBX0xJ
R0hUUyA+IDBcblx0c3RydWN0IFJlY3RBcmVhTGlnaHQge1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0
dmVjMyBwb3NpdGlvbjtcblx0XHR2ZWMzIGhhbGZXaWR0aDtcblx0XHR2ZWMzIGhhbGZIZWlnaHQ7
XG5cdH07XG5cdHVuaWZvcm0gc2FtcGxlcjJEIGx0Y18xO1x0dW5pZm9ybSBzYW1wbGVyMkQgbHRj
XzI7XG5cdHVuaWZvcm0gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0c1sgTlVNX1JFQ1RfQVJF
QV9MSUdIVFMgXTtcbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0c3RydWN0IEhl
bWlzcGhlcmVMaWdodCB7XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBza3lDb2xvcjtc
blx0XHR2ZWMzIGdyb3VuZENvbG9yO1xuXHR9O1xuXHR1bmlmb3JtIEhlbWlzcGhlcmVMaWdodCBo
ZW1pc3BoZXJlTGlnaHRzWyBOVU1fSEVNSV9MSUdIVFMgXTtcblx0dmVjMyBnZXRIZW1pc3BoZXJl
TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBIZW1pc3BoZXJlTGlnaHQgaGVtaUxpZ2h0LCBjb25z
dCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5ICkge1xuXHRcdGZsb2F0IGRvdE5MID0gZG90
KCBnZW9tZXRyeS5ub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBoZW1p
RGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41O1xuXHRcdHZlYzMgaXJyYWRpYW5jZSA9
IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZm
dXNlV2VpZ2h0ICk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0
XHRpcnJhZGlhbmNlICo9IFBJO1xuXHRcdCNlbmRpZlxuXHRcdHJldHVybiBpcnJhZGlhbmNlO1xu
XHR9XG4jZW5kaWYiOwogCi0gICAgICAgICAgICB9CisgICAgdmFyIGVudm1hcF9waHlzaWNhbF9w
YXJzX2ZyYWdtZW50ID0gIiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUEhZ
U0lDQUwgKVxuXHR2ZWMzIGdldExpZ2h0UHJvYmVJbmRpcmVjdElycmFkaWFuY2UoIGNvbnN0IGlu
IEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtc
blx0XHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggZ2VvbWV0
cnkubm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0
XHRcdHZlYzMgcXVlcnlWZWMgPSB2ZWMzKCBmbGlwRW52TWFwICogd29ybGROb3JtYWwueCwgd29y
bGROb3JtYWwueXogKTtcblx0XHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdFx0dmVj
NCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlTG9kRVhUKCBlbnZNYXAsIHF1ZXJ5VmVjLCBmbG9h
dCggbWF4TUlQTGV2ZWwgKSApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xv
ciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHF1ZXJ5VmVjLCBmbG9hdCggbWF4TUlQTGV2ZWwgKSAp
O1xuXHRcdFx0I2VuZGlmXG5cdFx0XHRlbnZNYXBDb2xvci5yZ2IgPSBlbnZNYXBUZXhlbFRvTGlu
ZWFyKCBlbnZNYXBDb2xvciApLnJnYjtcblx0XHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9D
VUJFX1VWIClcblx0XHRcdHZlYzMgcXVlcnlWZWMgPSB2ZWMzKCBmbGlwRW52TWFwICogd29ybGRO
b3JtYWwueCwgd29ybGROb3JtYWwueXogKTtcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0
dXJlQ3ViZVVWKCBlbnZNYXAsIHF1ZXJ5VmVjLCAxLjAgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVj
NCBlbnZNYXBDb2xvciA9IHZlYzQoIDAuMCApO1xuXHRcdCNlbmRpZlxuXHRcdHJldHVybiBQSSAq
IGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcblx0fVxuXHRmbG9hdCBnZXRTcGVj
dWxhck1JUExldmVsKCBjb25zdCBpbiBmbG9hdCBibGlublNoaW5pbmVzc0V4cG9uZW50LCBjb25z
dCBpbiBpbnQgbWF4TUlQTGV2ZWwgKSB7XG5cdFx0ZmxvYXQgbWF4TUlQTGV2ZWxTY2FsYXIgPSBm
bG9hdCggbWF4TUlQTGV2ZWwgKTtcblx0XHRmbG9hdCBkZXNpcmVkTUlQTGV2ZWwgPSBtYXhNSVBM
ZXZlbFNjYWxhciArIDAuNzkyNDggLSAwLjUgKiBsb2cyKCBwb3cyKCBibGlublNoaW5pbmVzc0V4
cG9uZW50ICkgKyAxLjAgKTtcblx0XHRyZXR1cm4gY2xhbXAoIGRlc2lyZWRNSVBMZXZlbCwgMC4w
LCBtYXhNSVBMZXZlbFNjYWxhciApO1xuXHR9XG5cdHZlYzMgZ2V0TGlnaHRQcm9iZUluZGlyZWN0
UmFkaWFuY2UoIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIGZs
b2F0IGJsaW5uU2hpbmluZXNzRXhwb25lbnQsIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtc
blx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dmVjMyByZWZsZWN0VmVj
ID0gcmVmbGVjdCggLWdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCApO1xuXHRcdCNl
bHNlXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCAtZ2VvbWV0cnkudmlld0Rpciwg
Z2VvbWV0cnkubm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0XHRyZWZs
ZWN0VmVjID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggcmVmbGVjdFZlYywgdmlld01hdHJp
eCApO1xuXHRcdGZsb2F0IHNwZWN1bGFyTUlQTGV2ZWwgPSBnZXRTcGVjdWxhck1JUExldmVsKCBi
bGlublNoaW5pbmVzc0V4cG9uZW50LCBtYXhNSVBMZXZlbCApO1xuXHRcdCNpZmRlZiBFTlZNQVBf
VFlQRV9DVUJFXG5cdFx0XHR2ZWMzIHF1ZXJ5UmVmbGVjdFZlYyA9IHZlYzMoIGZsaXBFbnZNYXAg
KiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKTtcblx0XHRcdCNpZmRlZiBURVhUVVJFX0xP
RF9FWFRcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlTG9kRVhUKCBlbnZN
YXAsIHF1ZXJ5UmVmbGVjdFZlYywgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2Vsc2Vcblx0
XHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHF1ZXJ5UmVmbGVj
dFZlYywgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2VuZGlmXG5cdFx0XHRlbnZNYXBDb2xv
ci5yZ2IgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCBlbnZNYXBDb2xvciApLnJnYjtcblx0XHQjZWxp
ZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzMgcXVlcnlSZWZsZWN0
VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApO1xu
XHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcXVlcnlSZWZs
ZWN0VmVjLCBCbGlubkV4cG9uZW50VG9HR1hSb3VnaG5lc3MoYmxpbm5TaGluaW5lc3NFeHBvbmVu
dCApKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9FUVVJUkVDIClcblx0XHRcdHZl
YzIgc2FtcGxlVVY7XG5cdFx0XHRzYW1wbGVVVi55ID0gYXNpbiggY2xhbXAoIHJlZmxlY3RWZWMu
eSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41O1xuXHRcdFx0c2FtcGxlVVYu
eCA9IGF0YW4oIHJlZmxlY3RWZWMueiwgcmVmbGVjdFZlYy54ICkgKiBSRUNJUFJPQ0FMX1BJMiAr
IDAuNTtcblx0XHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdFx0dmVjNCBlbnZNYXBD
b2xvciA9IHRleHR1cmUyRExvZEVYVCggZW52TWFwLCBzYW1wbGVVViwgc3BlY3VsYXJNSVBMZXZl
bCApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmUyRCgg
ZW52TWFwLCBzYW1wbGVVViwgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2VuZGlmXG5cdFx0
XHRlbnZNYXBDb2xvci5yZ2IgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCBlbnZNYXBDb2xvciApLnJn
Yjtcblx0XHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9TUEhFUkUgKVxuXHRcdFx0dmVjMyBy
ZWZsZWN0VmlldyA9IG5vcm1hbGl6ZSggKCB2aWV3TWF0cml4ICogdmVjNCggcmVmbGVjdFZlYywg
MC4wICkgKS54eXogKyB2ZWMzKCAwLjAsMC4wLDEuMCApICk7XG5cdFx0XHQjaWZkZWYgVEVYVFVS
RV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlMkRMb2RFWFQoIGVu
dk1hcCwgcmVmbGVjdFZpZXcueHkgKiAwLjUgKyAwLjUsIHNwZWN1bGFyTUlQTGV2ZWwgKTtcblx0
XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlMkQoIGVudk1hcCwg
cmVmbGVjdFZpZXcueHkgKiAwLjUgKyAwLjUsIHNwZWN1bGFyTUlQTGV2ZWwgKTtcblx0XHRcdCNl
bmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiID0gZW52TWFwVGV4ZWxUb0xpbmVhciggZW52TWFw
Q29sb3IgKS5yZ2I7XG5cdFx0I2VuZGlmXG5cdFx0cmV0dXJuIGVudk1hcENvbG9yLnJnYiAqIGVu
dk1hcEludGVuc2l0eTtcblx0fVxuI2VuZGlmIjsKIAotICAgICAgICAgICAgcmV0dXJuIHRhcmdl
dC5zdWJWZWN0b3JzKCB0aGlzLmVuZCwgdGhpcy5zdGFydCApOworICAgIHZhciBsaWdodHNfcGhv
bmdfZnJhZ21lbnQgPSAiQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlm
ZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtcbm1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBz
cGVjdWxhcjtcbm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzO1xubWF0ZXJp
YWwuc3BlY3VsYXJTdHJlbmd0aCA9IHNwZWN1bGFyU3RyZW5ndGg7IjsKIAotICAgICAgICB9LAor
ICAgIHZhciBsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudCA9ICJ2YXJ5aW5nIHZlYzMgdlZpZXdQ
b3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4j
ZW5kaWZcbnN0cnVjdCBCbGlublBob25nTWF0ZXJpYWwge1xuXHR2ZWMzXHRkaWZmdXNlQ29sb3I7
XG5cdHZlYzNcdHNwZWN1bGFyQ29sb3I7XG5cdGZsb2F0XHRzcGVjdWxhclNoaW5pbmVzcztcblx0
ZmxvYXRcdHNwZWN1bGFyU3RyZW5ndGg7XG59O1xudm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZygg
Y29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29u
dGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91
dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0I2lmZGVmIFRPT05cblx0XHR2
ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwg
ZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0I2Vsc2Vcblx0
XHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGln
aHQuZGlyZWN0aW9uICkgKTtcblx0XHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExp
Z2h0LmNvbG9yO1xuXHQjZW5kaWZcblx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRT
XG5cdFx0aXJyYWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVj
dERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5k
aWZmdXNlQ29sb3IgKTtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRp
YW5jZSAqIEJSREZfU3BlY3VsYXJfQmxpbm5QaG9uZyggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBt
YXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0
ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5u
UGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4
dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBS
ZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJl
Y3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2VfTGFtYmVydCggbWF0ZXJpYWwu
ZGlmZnVzZUNvbG9yICk7XG59XG4jZGVmaW5lIFJFX0RpcmVjdFx0XHRcdFx0UkVfRGlyZWN0X0Js
aW5uUGhvbmdcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVz
ZV9CbGlublBob25nXG4jZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsIClc
dCgwKSI7CiAKLSAgICAgICAgZGlzdGFuY2VTcTogZnVuY3Rpb24gKCkgeworICAgIHZhciBsaWdo
dHNfcGh5c2ljYWxfZnJhZ21lbnQgPSAiUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVy
aWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0Zh
Y3RvciApO1xubWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgPSBjbGFtcCggcm91Z2huZXNzRmFj
dG9yLCAwLjA0LCAxLjAgKTtcbiNpZmRlZiBTVEFOREFSRFxuXHRtYXRlcmlhbC5zcGVjdWxhckNv
bG9yID0gbWl4KCB2ZWMzKCBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICksIGRpZmZ1c2VD
b2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xuI2Vsc2Vcblx0bWF0ZXJpYWwuc3BlY3VsYXJD
b2xvciA9IG1peCggdmVjMyggTUFYSU1VTV9TUEVDVUxBUl9DT0VGRklDSUVOVCAqIHBvdzIoIHJl
ZmxlY3Rpdml0eSApICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xuXHRt
YXRlcmlhbC5jbGVhckNvYXQgPSBzYXR1cmF0ZSggY2xlYXJDb2F0ICk7XHRtYXRlcmlhbC5jbGVh
ckNvYXRSb3VnaG5lc3MgPSBjbGFtcCggY2xlYXJDb2F0Um91Z2huZXNzLCAwLjA0LCAxLjAgKTtc
biNlbmRpZiI7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG9TcXVh
cmVkKCB0aGlzLmVuZCApOworICAgIHZhciBsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudCA9
ICJzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XG5cdHZlYzNcdGRpZmZ1c2VDb2xvcjtcblx0Zmxv
YXRcdHNwZWN1bGFyUm91Z2huZXNzO1xuXHR2ZWMzXHRzcGVjdWxhckNvbG9yO1xuXHQjaWZuZGVm
IFNUQU5EQVJEXG5cdFx0ZmxvYXQgY2xlYXJDb2F0O1xuXHRcdGZsb2F0IGNsZWFyQ29hdFJvdWdo
bmVzcztcblx0I2VuZGlmXG59O1xuI2RlZmluZSBNQVhJTVVNX1NQRUNVTEFSX0NPRUZGSUNJRU5U
IDAuMTZcbiNkZWZpbmUgREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCAwLjA0XG5mbG9hdCBj
bGVhckNvYXRESFJBcHByb3goIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxv
YXQgZG90TkwgKSB7XG5cdHJldHVybiBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICsgKCAx
LjAgLSBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICkgKiAoIHBvdyggMS4wIC0gZG90Tkws
IDUuMCApICogcG93KCAxLjAgLSByb3VnaG5lc3MsIDIuMCApICk7XG59XG4jaWYgTlVNX1JFQ1Rf
QVJFQV9MSUdIVFMgPiAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25z
dCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRl
eHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJl
ZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRcdHZlYzMgbm9ybWFsID0gZ2VvbWV0
cnkubm9ybWFsO1xuXHRcdHZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XG5cdFx0dmVj
MyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdHZlYzMgbGlnaHRQb3MgPSByZWN0
QXJlYUxpZ2h0LnBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5o
YWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0
O1xuXHRcdHZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7XG5cdFx0ZmxvYXQg
cm91Z2huZXNzID0gbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3M7XG5cdFx0dmVjMyByZWN0Q29v
cmRzWyA0IF07XG5cdFx0cmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBo
YWxmSGVpZ2h0O1x0XHRyZWN0Q29vcmRzWyAxIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCAtIGhh
bGZIZWlnaHQ7XG5cdFx0cmVjdENvb3Jkc1sgMiBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggKyBo
YWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDMgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoICsg
aGFsZkhlaWdodDtcblx0XHR2ZWMyIHV2ID0gTFRDX1V2KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdo
bmVzcyApO1xuXHRcdHZlYzQgdDEgPSB0ZXh0dXJlMkQoIGx0Y18xLCB1diApO1xuXHRcdHZlYzQg
dDIgPSB0ZXh0dXJlMkQoIGx0Y18yLCB1diApO1xuXHRcdG1hdDMgbUludiA9IG1hdDMoXG5cdFx0
XHR2ZWMzKCB0MS54LCAwLCB0MS55ICksXG5cdFx0XHR2ZWMzKCAgICAwLCAxLCAgICAwICksXG5c
dFx0XHR2ZWMzKCB0MS56LCAwLCB0MS53IClcblx0XHQpO1xuXHRcdHZlYzMgZnJlc25lbCA9ICgg
bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAqIHQyLnggKyAoIHZlYzMoIDEuMCApIC0gbWF0ZXJpYWwu
c3BlY3VsYXJDb2xvciApICogdDIueSApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1
bGFyICs9IGxpZ2h0Q29sb3IgKiBmcmVzbmVsICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdE
aXIsIHBvc2l0aW9uLCBtSW52LCByZWN0Q29vcmRzICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGly
ZWN0RGlmZnVzZSArPSBsaWdodENvbG9yICogbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogTFRDX0V2
YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtYXQzKCAxLjAgKSwgcmVjdENvb3Jk
cyApO1xuXHR9XG4jZW5kaWZcbnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNp
ZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5
LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdo
dCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9t
ZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5j
ZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JS
RUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHQjaWZuZGVmIFNU
QU5EQVJEXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSID0gbWF0ZXJpYWwuY2xlYXJDb2F0ICogY2xl
YXJDb2F0REhSQXBwcm94KCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MsIGRvdE5MICk7XG5c
dCNlbHNlXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSID0gMC4wO1xuXHQjZW5kaWZcblx0cmVmbGVj
dGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gKCAxLjAgLSBjbGVhckNvYXRESFIgKSAqIGlycmFk
aWFuY2UgKiBCUkRGX1NwZWN1bGFyX0dHWCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlh
bC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyApO1xuXHRyZWZsZWN0
ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9ICggMS4wIC0gY2xlYXJDb2F0REhSICkgKiBpcnJhZGlh
bmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHQj
aWZuZGVmIFNUQU5EQVJEXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJy
YWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyQ29hdCAqIEJSREZfU3BlY3VsYXJfR0dYKCBkaXJlY3RM
aWdodCwgZ2VvbWV0cnksIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgbWF0
ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzICk7XG5cdCNlbmRpZlxufVxudm9pZCBSRV9JbmRpcmVj
dERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2Vv
bWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlh
bCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdCNpZm5kZWYgRU5W
TUFQX1RZUEVfQ1VCRV9VVlxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBp
cnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAp
O1xuXHQjZW5kaWZcbn1cbnZvaWQgUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbCggY29uc3Qg
aW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiB2ZWMz
IGNsZWFyQ29hdFJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBj
b25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCBy
ZWZsZWN0ZWRMaWdodCkge1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0ZmxvYXQgZG90TlYgPSBz
YXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xuXHRc
dGZsb2F0IGRvdE5MID0gZG90TlY7XG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSID0gbWF0ZXJpYWwu
Y2xlYXJDb2F0ICogY2xlYXJDb2F0REhSQXBwcm94KCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5l
c3MsIGRvdE5MICk7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSID0gMC4wO1xuXHQj
ZW5kaWZcblx0ZmxvYXQgY2xlYXJDb2F0SW52ID0gMS4wIC0gY2xlYXJDb2F0REhSO1xuXHQjaWYg
ZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0dmVjMyBzaW5nbGVTY2F0dGVyaW5n
ID0gdmVjMyggMC4wICk7XG5cdFx0dmVjMyBtdWx0aVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtc
blx0XHR2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSA9IGlycmFkaWFuY2UgKiBSRUNJUFJP
Q0FMX1BJO1xuXHRcdEJSREZfU3BlY3VsYXJfTXVsdGlzY2F0dGVyaW5nX0Vudmlyb25tZW50KCBn
ZW9tZXRyeSwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5l
c3MsIHNpbmdsZVNjYXR0ZXJpbmcsIG11bHRpU2NhdHRlcmluZyApO1xuXHRcdHZlYzMgZGlmZnVz
ZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsg
bXVsdGlTY2F0dGVyaW5nICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFy
ICs9IGNsZWFyQ29hdEludiAqIHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZztcblx0XHRyZWZs
ZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbXVsdGlTY2F0dGVyaW5nICogY29zaW5lV2Vp
Z2h0ZWRJcnJhZGlhbmNlO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBk
aWZmdXNlICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xuXHQjZWxzZVxuXHRcdHJlZmxlY3Rl
ZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gY2xlYXJDb2F0SW52ICogcmFkaWFuY2UgKiBCUkRG
X1NwZWN1bGFyX0dHWF9FbnZpcm9ubWVudCggZ2VvbWV0cnksIG1hdGVyaWFsLnNwZWN1bGFyQ29s
b3IsIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuXHQjaWZuZGVmIFNU
QU5EQVJEXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBjbGVhckNvYXRS
YWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyQ29hdCAqIEJSREZfU3BlY3VsYXJfR0dYX0Vudmlyb25t
ZW50KCBnZW9tZXRyeSwgdmVjMyggREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApLCBtYXRl
cmlhbC5jbGVhckNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG59XG4jZGVmaW5lIFJFX0RpcmVj
dFx0XHRcdFx0UkVfRGlyZWN0X1BoeXNpY2FsXG4jZGVmaW5lIFJFX0RpcmVjdF9SZWN0QXJlYVx0
XHRSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNl
XHRcdFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbFxuI2RlZmluZSBSRV9JbmRpcmVjdFNwZWN1
bGFyXHRcdFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWxcbiNkZWZpbmUgTWF0ZXJpYWxfQmxp
bm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSAgIEdHWFJvdWdobmVzc1RvQmxpbm5FeHBv
bmVudCggbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgKVxuI2RlZmluZSBNYXRlcmlhbF9DbGVh
ckNvYXRfQmxpbm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSAgIEdHWFJvdWdobmVzc1Rv
Qmxpbm5FeHBvbmVudCggbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzIClcbmZsb2F0IGNvbXB1
dGVTcGVjdWxhck9jY2x1c2lvbiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0
IGFtYmllbnRPY2NsdXNpb24sIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0cmV0dXJu
IHNhdHVyYXRlKCBwb3coIGRvdE5WICsgYW1iaWVudE9jY2x1c2lvbiwgZXhwMiggLSAxNi4wICog
cm91Z2huZXNzIC0gMS4wICkgKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24gKTtcbn0iOwogCi0g
ICAgICAgIH0sCisgICAgdmFyIGxpZ2h0c19mcmFnbWVudF9iZWdpbiA9ICJcbkdlb21ldHJpY0Nv
bnRleHQgZ2VvbWV0cnk7XG5nZW9tZXRyeS5wb3NpdGlvbiA9IC0gdlZpZXdQb3NpdGlvbjtcbmdl
b21ldHJ5Lm5vcm1hbCA9IG5vcm1hbDtcbmdlb21ldHJ5LnZpZXdEaXIgPSBub3JtYWxpemUoIHZW
aWV3UG9zaXRpb24gKTtcbkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7XG4jaWYgKCBOVU1fUE9J
TlRfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApXG5cdFBvaW50TGlnaHQgcG9p
bnRMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBO
VU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdHBvaW50TGlnaHQgPSBwb2ludExpZ2h0c1sg
aSBdO1xuXHRcdGdldFBvaW50RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBwb2ludExpZ2h0LCBnZW9t
ZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWZkZWYgVVNFX1NIQURPV01BUFxuXHRcdGRpcmVj
dExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIHBvaW50TGlnaHQuc2hhZG93LCBkaXJlY3RMaWdo
dC52aXNpYmxlICkgKSA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2lu
dExpZ2h0LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHQuc2hhZG93QmlhcywgcG9pbnRMaWdodC5z
aGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93Q2Ft
ZXJhTmVhciwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDtcblx0XHQjZW5kaWZc
blx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3Rl
ZExpZ2h0ICk7XG5cdH1cbiNlbmRpZlxuI2lmICggTlVNX1NQT1RfTElHSFRTID4gMCApICYmIGRl
ZmluZWQoIFJFX0RpcmVjdCApXG5cdFNwb3RMaWdodCBzcG90TGlnaHQ7XG5cdCNwcmFnbWEgdW5y
b2xsX2xvb3Bcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkg
e1xuXHRcdHNwb3RMaWdodCA9IHNwb3RMaWdodHNbIGkgXTtcblx0XHRnZXRTcG90RGlyZWN0TGln
aHRJcnJhZGlhbmNlKCBzcG90TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNp
ZmRlZiBVU0VfU0hBRE9XTUFQXG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMigg
c3BvdExpZ2h0LnNoYWRvdywgZGlyZWN0TGlnaHQudmlzaWJsZSApICkgPyBnZXRTaGFkb3coIHNw
b3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFk
b3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6
IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwg
bWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cbiNlbmRpZlxuI2lmICggTlVNX0RJUl9M
SUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0RGlyZWN0aW9uYWxMaWdodCBk
aXJlY3Rpb25hbExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpID0g
MDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBk
aXJlY3Rpb25hbExpZ2h0c1sgaSBdO1xuXHRcdGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJcnJh
ZGlhbmNlKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQj
aWZkZWYgVVNFX1NIQURPV01BUFxuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIo
IGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93LCBkaXJlY3RMaWdodC52aXNpYmxlICkgKSA/IGdldFNo
YWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dN
YXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hh
ZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdFx0I2Vu
ZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZs
ZWN0ZWRMaWdodCApO1xuXHR9XG4jZW5kaWZcbiNpZiAoIE5VTV9SRUNUX0FSRUFfTElHSFRTID4g
MCApICYmIGRlZmluZWQoIFJFX0RpcmVjdF9SZWN0QXJlYSApXG5cdFJlY3RBcmVhTGlnaHQgcmVj
dEFyZWFMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkg
PCBOVU1fUkVDVF9BUkVBX0xJR0hUUzsgaSArKyApIHtcblx0XHRyZWN0QXJlYUxpZ2h0ID0gcmVj
dEFyZWFMaWdodHNbIGkgXTtcblx0XHRSRV9EaXJlY3RfUmVjdEFyZWEoIHJlY3RBcmVhTGlnaHQs
IGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuI2VuZGlmXG4jaWYg
ZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0dmVjMyBpcnJhZGlhbmNlID0gZ2V0QW1i
aWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0aXJyYWRpYW5jZSAr
PSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkgKTtcblx0I2lm
ICggTlVNX0hFTUlfTElHSFRTID4gMCApXG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRcdGZv
ciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHtcblx0XHRcdGlycmFk
aWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sg
aSBdLCBnZW9tZXRyeSApO1xuXHRcdH1cblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBS
RV9JbmRpcmVjdFNwZWN1bGFyIClcblx0dmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2
ZWMzIGNsZWFyQ29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7XG4jZW5kaWYiOwogCi0gICAgICAg
IGRpc3RhbmNlOiBmdW5jdGlvbiAoKSB7CisgICAgdmFyIGxpZ2h0c19mcmFnbWVudF9tYXBzID0g
IiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHQjaWZkZWYgVVNFX0xJR0hUTUFQ
XG5cdFx0dmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYy
ICkueHl6ICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJF
Q1RfTElHSFRTXG5cdFx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5c
dFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG5cdCNlbmRpZlxuXHQjaWYgZGVm
aW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFBIWVNJQ0FMICkgJiYgZGVmaW5lZCggRU5W
TUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0aXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSW5kaXJl
Y3RJcnJhZGlhbmNlKCBnZW9tZXRyeSwgbWF4TWlwTGV2ZWwgKTtcblx0I2VuZGlmXG4jZW5kaWZc
biNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxh
ciApXG5cdHJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJbmRpcmVjdFJhZGlhbmNlKCBnZW9tZXRy
eSwgTWF0ZXJpYWxfQmxpbm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSwgbWF4TWlwTGV2
ZWwgKTtcblx0I2lmbmRlZiBTVEFOREFSRFxuXHRcdGNsZWFyQ29hdFJhZGlhbmNlICs9IGdldExp
Z2h0UHJvYmVJbmRpcmVjdFJhZGlhbmNlKCBnZW9tZXRyeSwgTWF0ZXJpYWxfQ2xlYXJDb2F0X0Js
aW5uU2hpbmluZXNzRXhwb25lbnQoIG1hdGVyaWFsICksIG1heE1pcExldmVsICk7XG5cdCNlbmRp
ZlxuI2VuZGlmIjsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUbygg
dGhpcy5lbmQgKTsKKyAgICB2YXIgbGlnaHRzX2ZyYWdtZW50X2VuZCA9ICIjaWYgZGVmaW5lZCgg
UkVfSW5kaXJlY3REaWZmdXNlIClcblx0UkVfSW5kaXJlY3REaWZmdXNlKCBpcnJhZGlhbmNlLCBn
ZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG4jZW5kaWZcbiNpZiBkZWZpbmVk
KCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcblx0UkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2Us
IGlycmFkaWFuY2UsIGNsZWFyQ29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxl
Y3RlZExpZ2h0ICk7XG4jZW5kaWYiOwogCi0gICAgICAgIH0sCisgICAgdmFyIGxvZ2RlcHRoYnVm
X2ZyYWdtZW50ID0gIiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBV
U0VfTE9HREVQVEhCVUZfRVhUIClcblx0Z2xfRnJhZ0RlcHRoRVhUID0gbG9nMiggdkZyYWdEZXB0
aCApICogbG9nRGVwdGhCdWZGQyAqIDAuNTtcbiNlbmRpZiI7CiAKLSAgICAgICAgYXQ6IGZ1bmN0
aW9uICggdCwgdGFyZ2V0ICkgeworICAgIHZhciBsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50ID0g
IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhC
VUZfRVhUIClcblx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHR2YXJ5aW5nIGZsb2F0
IHZGcmFnRGVwdGg7XG4jZW5kaWYiOwogCi0gICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5k
ZWZpbmVkICkgeworICAgIHZhciBsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleCA9ICIjaWZkZWYgVVNF
X0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dmFyeWluZyBm
bG9hdCB2RnJhZ0RlcHRoO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gZmxvYXQgbG9nRGVwdGhCdWZG
Qztcblx0I2VuZGlmXG4jZW5kaWYiOwogCi0gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAn
VEhSRUUuTGluZTM6IC5hdCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7Ci0gICAgICAgICAg
ICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsKKyAgICB2YXIgbG9nZGVwdGhidWZfdmVydGV4
ID0gIiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcblx0I2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFRc
blx0XHR2RnJhZ0RlcHRoID0gMS4wICsgZ2xfUG9zaXRpb24udztcblx0I2Vsc2Vcblx0XHRnbF9Q
b3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAq
IGxvZ0RlcHRoQnVmRkMgLSAxLjA7XG5cdFx0Z2xfUG9zaXRpb24ueiAqPSBnbF9Qb3NpdGlvbi53
O1xuXHQjZW5kaWZcbiNlbmRpZiI7CiAKLSAgICAgICAgICAgIH0KKyAgICB2YXIgbWFwX2ZyYWdt
ZW50ID0gIiNpZmRlZiBVU0VfTUFQXG5cdHZlYzQgdGV4ZWxDb2xvciA9IHRleHR1cmUyRCggbWFw
LCB2VXYgKTtcblx0dGV4ZWxDb2xvciA9IG1hcFRleGVsVG9MaW5lYXIoIHRleGVsQ29sb3IgKTtc
blx0ZGlmZnVzZUNvbG9yICo9IHRleGVsQ29sb3I7XG4jZW5kaWYiOwogCi0gICAgICAgICAgICBy
ZXR1cm4gdGhpcy5kZWx0YSggdGFyZ2V0ICkubXVsdGlwbHlTY2FsYXIoIHQgKS5hZGQoIHRoaXMu
c3RhcnQgKTsKKyAgICB2YXIgbWFwX3BhcnNfZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9NQVBcblx0
dW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xuI2VuZGlmIjsKIAotICAgICAgICB9LAorICAgIHZhciBt
YXBfcGFydGljbGVfZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9NQVBcblx0dmVjMiB1diA9ICggdXZU
cmFuc2Zvcm0gKiB2ZWMzKCBnbF9Qb2ludENvb3JkLngsIDEuMCAtIGdsX1BvaW50Q29vcmQueSwg
MSApICkueHk7XG5cdHZlYzQgbWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIG1hcCwgdXYgKTtcblx0ZGlm
ZnVzZUNvbG9yICo9IG1hcFRleGVsVG9MaW5lYXIoIG1hcFRleGVsICk7XG4jZW5kaWYiOwogCi0g
ICAgICAgIGNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXI6IGZ1bmN0aW9uICgpIHsKKyAgICB2
YXIgbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9NQVBcblx0dW5pZm9y
bSBtYXQzIHV2VHJhbnNmb3JtO1xuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWYiOwog
Ci0gICAgICAgICAgICB2YXIgc3RhcnRQID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgICAgIHZh
ciBzdGFydEVuZCA9IG5ldyBWZWN0b3IzKCk7CisgICAgdmFyIG1ldGFsbmVzc21hcF9mcmFnbWVu
dCA9ICJmbG9hdCBtZXRhbG5lc3NGYWN0b3IgPSBtZXRhbG5lc3M7XG4jaWZkZWYgVVNFX01FVEFM
TkVTU01BUFxuXHR2ZWM0IHRleGVsTWV0YWxuZXNzID0gdGV4dHVyZTJEKCBtZXRhbG5lc3NNYXAs
IHZVdiApO1xuXHRtZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjtcbiNlbmRpZiI7
CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1l
dGVyKCBwb2ludCwgY2xhbXBUb0xpbmUgKSB7CisgICAgdmFyIG1ldGFsbmVzc21hcF9wYXJzX2Zy
YWdtZW50ID0gIiNpZmRlZiBVU0VfTUVUQUxORVNTTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG1l
dGFsbmVzc01hcDtcbiNlbmRpZiI7CiAKLSAgICAgICAgICAgICAgICBzdGFydFAuc3ViVmVjdG9y
cyggcG9pbnQsIHRoaXMuc3RhcnQgKTsKLSAgICAgICAgICAgICAgICBzdGFydEVuZC5zdWJWZWN0
b3JzKCB0aGlzLmVuZCwgdGhpcy5zdGFydCApOworICAgIHZhciBtb3JwaG5vcm1hbF92ZXJ0ZXgg
PSAiI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0b2JqZWN0Tm9ybWFsICs9ICggbW9ycGhOb3Jt
YWwwIC0gbm9ybWFsICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcblx0b2JqZWN0Tm9y
bWFsICs9ICggbW9ycGhOb3JtYWwxIC0gbm9ybWFsICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNb
IDEgXTtcblx0b2JqZWN0Tm9ybWFsICs9ICggbW9ycGhOb3JtYWwyIC0gbm9ybWFsICkgKiBtb3Jw
aFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0b2JqZWN0Tm9ybWFsICs9ICggbW9ycGhOb3JtYWwz
IC0gbm9ybWFsICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcbiNlbmRpZiI7CiAKLSAg
ICAgICAgICAgICAgICB2YXIgc3RhcnRFbmQyID0gc3RhcnRFbmQuZG90KCBzdGFydEVuZCApOwot
ICAgICAgICAgICAgICAgIHZhciBzdGFydEVuZF9zdGFydFAgPSBzdGFydEVuZC5kb3QoIHN0YXJ0
UCApOworICAgIHZhciBtb3JwaHRhcmdldF9wYXJzX3ZlcnRleCA9ICIjaWZkZWYgVVNFX01PUlBI
VEFSR0VUU1xuXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0dW5pZm9ybSBmbG9hdCBtb3Jw
aFRhcmdldEluZmx1ZW5jZXNbIDggXTtcblx0I2Vsc2Vcblx0dW5pZm9ybSBmbG9hdCBtb3JwaFRh
cmdldEluZmx1ZW5jZXNbIDQgXTtcblx0I2VuZGlmXG4jZW5kaWYiOwogCi0gICAgICAgICAgICAg
ICAgdmFyIHQgPSBzdGFydEVuZF9zdGFydFAgLyBzdGFydEVuZDI7CisgICAgdmFyIG1vcnBodGFy
Z2V0X3ZlcnRleCA9ICIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xuXHR0cmFuc2Zvcm1lZCArPSAo
IG1vcnBoVGFyZ2V0MCAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtc
blx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDEgLSBwb3NpdGlvbiApICogbW9ycGhUYXJn
ZXRJbmZsdWVuY2VzWyAxIF07XG5cdHRyYW5zZm9ybWVkICs9ICggbW9ycGhUYXJnZXQyIC0gcG9z
aXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdO1xuXHR0cmFuc2Zvcm1lZCArPSAo
IG1vcnBoVGFyZ2V0MyAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtc
blx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdHRyYW5zZm9ybWVkICs9ICggbW9ycGhUYXJn
ZXQ0IC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xuXHR0cmFuc2Zv
cm1lZCArPSAoIG1vcnBoVGFyZ2V0NSAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5j
ZXNbIDUgXTtcblx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDYgLSBwb3NpdGlvbiApICog
bW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA2IF07XG5cdHRyYW5zZm9ybWVkICs9ICggbW9ycGhUYXJn
ZXQ3IC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdO1xuXHQjZW5kaWZc
biNlbmRpZiI7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGNsYW1wVG9MaW5lICkgeworICAgIHZh
ciBub3JtYWxfZnJhZ21lbnRfYmVnaW4gPSAiI2lmZGVmIEZMQVRfU0hBREVEXG5cdHZlYzMgZmR4
ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSAp
LCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xuXHR2ZWMzIGZkeSA9IHZlYzMoIGRGZHkoIHZW
aWV3UG9zaXRpb24ueCApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeSggdlZpZXdQb3Np
dGlvbi56ICkgKTtcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSAp
ICk7XG4jZWxzZVxuXHR2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApO1xuXHQjaWZk
ZWYgRE9VQkxFX1NJREVEXG5cdFx0bm9ybWFsID0gbm9ybWFsICogKCBmbG9hdCggZ2xfRnJvbnRG
YWNpbmcgKSAqIDIuMCAtIDEuMCApO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5c
dFx0dmVjMyB0YW5nZW50ID0gbm9ybWFsaXplKCB2VGFuZ2VudCApO1xuXHRcdHZlYzMgYml0YW5n
ZW50ID0gbm9ybWFsaXplKCB2Qml0YW5nZW50ICk7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxu
XHRcdFx0dGFuZ2VudCA9IHRhbmdlbnQgKiAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4w
IC0gMS4wICk7XG5cdFx0XHRiaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiAoIGZsb2F0KCBnbF9Gcm9u
dEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmIjsK
IAotICAgICAgICAgICAgICAgICAgICB0ID0gX01hdGguY2xhbXAoIHQsIDAsIDEgKTsKKyAgICB2
YXIgbm9ybWFsX2ZyYWdtZW50X21hcHMgPSAiI2lmZGVmIFVTRV9OT1JNQUxNQVBcblx0I2lmZGVm
IE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHRcdG5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFw
LCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdFx0I2lmZGVmIEZMSVBfU0lERURcblx0XHRcdG5v
cm1hbCA9IC0gbm9ybWFsO1xuXHRcdCNlbmRpZlxuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0
XHRcdG5vcm1hbCA9IG5vcm1hbCAqICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAx
LjAgKTtcblx0XHQjZW5kaWZcblx0XHRub3JtYWwgPSBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAq
IG5vcm1hbCApO1xuXHQjZWxzZVxuXHRcdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdFx0bWF0MyB2
VEJOID0gbWF0MyggdGFuZ2VudCwgYml0YW5nZW50LCBub3JtYWwgKTtcblx0XHRcdHZlYzMgbWFw
TiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdFx0XHRt
YXBOLnh5ID0gbm9ybWFsU2NhbGUgKiBtYXBOLnh5O1xuXHRcdFx0bm9ybWFsID0gbm9ybWFsaXpl
KCB2VEJOICogbWFwTiApO1xuXHRcdCNlbHNlXG5cdFx0XHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFs
MkFyYiggLXZWaWV3UG9zaXRpb24sIG5vcm1hbCApO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNl
bGlmIGRlZmluZWQoIFVTRV9CVU1QTUFQIClcblx0bm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYigg
LXZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCkgKTtcbiNlbmRpZiI7CiAKLSAgICAg
ICAgICAgICAgICB9CisgICAgdmFyIG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50ID0gIiNpZmRlZiBV
U0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcblx0dW5pZm9ybSB2
ZWMyIG5vcm1hbFNjYWxlO1xuXHQjaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXG5cdFx0dW5p
Zm9ybSBtYXQzIG5vcm1hbE1hdHJpeDtcblx0I2Vsc2Vcblx0XHR2ZWMzIHBlcnR1cmJOb3JtYWwy
QXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtICkge1xuXHRcdFx0dmVjMyBxMCA9IHZl
YzMoIGRGZHgoIGV5ZV9wb3MueCApLCBkRmR4KCBleWVfcG9zLnkgKSwgZEZkeCggZXllX3Bvcy56
ICkgKTtcblx0XHRcdHZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXll
X3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7XG5cdFx0XHR2ZWMyIHN0MCA9IGRGZHgoIHZV
di5zdCApO1xuXHRcdFx0dmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTtcblx0XHRcdGZsb2F0IHNj
YWxlID0gc2lnbiggc3QxLnQgKiBzdDAucyAtIHN0MC50ICogc3QxLnMgKTtcblx0XHRcdHZlYzMg
UyA9IG5vcm1hbGl6ZSggKCBxMCAqIHN0MS50IC0gcTEgKiBzdDAudCApICogc2NhbGUgKTtcblx0
XHRcdHZlYzMgVCA9IG5vcm1hbGl6ZSggKCAtIHEwICogc3QxLnMgKyBxMSAqIHN0MC5zICkgKiBz
Y2FsZSApO1xuXHRcdFx0dmVjMyBOID0gbm9ybWFsaXplKCBzdXJmX25vcm0gKTtcblx0XHRcdG1h
dDMgdHNuID0gbWF0MyggUywgVCwgTiApO1xuXHRcdFx0dmVjMyBtYXBOID0gdGV4dHVyZTJEKCBu
b3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0XHRcdG1hcE4ueHkgKj0gbm9ybWFs
U2NhbGU7XG5cdFx0XHRtYXBOLnh5ICo9ICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAg
LSAxLjAgKTtcblx0XHRcdHJldHVybiBub3JtYWxpemUoIHRzbiAqIG1hcE4gKTtcblx0XHR9XG5c
dCNlbmRpZlxuI2VuZGlmIjsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0OworICAgIHZhciBw
YWNraW5nID0gInZlYzMgcGFja05vcm1hbFRvUkdCKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHtc
blx0cmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7XG59XG52ZWMzIHVucGFj
a1JHQlRvTm9ybWFsKCBjb25zdCBpbiB2ZWMzIHJnYiApIHtcblx0cmV0dXJuIDIuMCAqIHJnYi54
eXogLSAxLjA7XG59XG5jb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0
IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuO1xuY29uc3QgdmVjMyBQYWNrRmFj
dG9ycyA9IHZlYzMoIDI1Ni4gKiAyNTYuICogMjU2LiwgMjU2LiAqIDI1Ni4sICAyNTYuICk7XG5j
b25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFj
dG9ycywgMS4gKTtcbmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4ID0gMS4gLyAyNTYuO1xudmVjNCBw
YWNrRGVwdGhUb1JHQkEoIGNvbnN0IGluIGZsb2F0IHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIGZy
YWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApO1xuXHRyLnl6dyAtPSByLnh5eiAqIFNoaWZ0Umln
aHQ4O1x0cmV0dXJuIHIgKiBQYWNrVXBzY2FsZTtcbn1cbmZsb2F0IHVucGFja1JHQkFUb0RlcHRo
KCBjb25zdCBpbiB2ZWM0IHYgKSB7XG5cdHJldHVybiBkb3QoIHYsIFVucGFja0ZhY3RvcnMgKTtc
bn1cbmZsb2F0IHZpZXdaVG9PcnRob2dyYXBoaWNEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1os
IGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICgg
dmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTtcbn1cbmZsb2F0IG9ydGhvZ3JhcGhpY0Rl
cHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgbGluZWFyQ2xpcFosIGNvbnN0IGluIGZsb2F0IG5l
YXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuIGxpbmVhckNsaXBaICogKCBuZWFy
IC0gZmFyICkgLSBuZWFyO1xufVxuZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0
IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIg
KSB7XG5cdHJldHVybiAoKCBuZWFyICsgdmlld1ogKSAqIGZhciApIC8gKCggZmFyIC0gbmVhciAp
ICogdmlld1ogKTtcbn1cbmZsb2F0IHBlcnNwZWN0aXZlRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBm
bG9hdCBpbnZDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkg
e1xuXHRyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52Q2xpcFog
LSBmYXIgKTtcbn0iOwogCi0gICAgICAgICAgICB9OworICAgIHZhciBwcmVtdWx0aXBsaWVkX2Fs
cGhhX2ZyYWdtZW50ID0gIiNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBXG5cdGdsX0ZyYWdDb2xv
ci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XG4jZW5kaWYiOwogCi0gICAgICAgIH0oKSwKKyAgICB2
YXIgcHJvamVjdF92ZXJ0ZXggPSAidmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICog
dmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4
ICogbXZQb3NpdGlvbjsiOwogCi0gICAgICAgIGNsb3Nlc3RQb2ludFRvUG9pbnQ6IGZ1bmN0aW9u
ICggcG9pbnQsIGNsYW1wVG9MaW5lLCB0YXJnZXQgKSB7CisgICAgdmFyIGRpdGhlcmluZ19mcmFn
bWVudCA9ICIjaWYgZGVmaW5lZCggRElUSEVSSU5HIClcblx0Z2xfRnJhZ0NvbG9yLnJnYiA9IGRp
dGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApO1xuI2VuZGlmIjsKIAotICAgICAgICAgICAgdmFy
IHQgPSB0aGlzLmNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXIoIHBvaW50LCBjbGFtcFRvTGlu
ZSApOworICAgIHZhciBkaXRoZXJpbmdfcGFyc19mcmFnbWVudCA9ICIjaWYgZGVmaW5lZCggRElU
SEVSSU5HIClcblx0dmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7XG5cdFx0ZmxvYXQgZ3Jp
ZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApO1xuXHRcdHZlYzMgZGl0aGVyX3No
aWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4w
ICk7XG5cdFx0ZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwg
LTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTtcblx0XHRyZXR1cm4gY29s
b3IgKyBkaXRoZXJfc2hpZnRfUkdCO1xuXHR9XG4jZW5kaWYiOwogCi0gICAgICAgICAgICBpZiAo
IHRhcmdldCA9PT0gdW5kZWZpbmVkICkgeworICAgIHZhciByb3VnaG5lc3NtYXBfZnJhZ21lbnQg
PSAiZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzO1xuI2lmZGVmIFVTRV9ST1VHSE5F
U1NNQVBcblx0dmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2
VXYgKTtcblx0cm91Z2huZXNzRmFjdG9yICo9IHRleGVsUm91Z2huZXNzLmc7XG4jZW5kaWYiOwog
Ci0gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuTGluZTM6IC5jbG9zZXN0UG9p
bnRUb1BvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCcgKTsKLSAgICAgICAgICAgICAgICB0
YXJnZXQgPSBuZXcgVmVjdG9yMygpOworICAgIHZhciByb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVu
dCA9ICIjaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5l
c3NNYXA7XG4jZW5kaWYiOwogCi0gICAgICAgICAgICB9CisgICAgdmFyIHNoYWRvd21hcF9wYXJz
X2ZyYWdtZW50ID0gIiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUUyA+
IDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgTlVNX0RJUl9M
SUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9E
SVJfTElHSFRTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHRcdHVu
aWZvcm0gc2FtcGxlcjJEIHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUUyBdO1xuXHRcdHZh
cnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0I2VuZGlm
XG5cdCNpZiBOVU1fUE9JTlRfTElHSFRTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHBvaW50
U2hhZG93TWFwWyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNo
YWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdCNlbmRpZlxuXHRmbG9hdCB0ZXh0dXJl
MkRDb21wYXJlKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkge1xu
XHRcdHJldHVybiBzdGVwKCBjb21wYXJlLCB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBk
ZXB0aHMsIHV2ICkgKSApO1xuXHR9XG5cdGZsb2F0IHRleHR1cmUyRFNoYWRvd0xlcnAoIHNhbXBs
ZXIyRCBkZXB0aHMsIHZlYzIgc2l6ZSwgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApIHtcblx0XHRj
b25zdCB2ZWMyIG9mZnNldCA9IHZlYzIoIDAuMCwgMS4wICk7XG5cdFx0dmVjMiB0ZXhlbFNpemUg
PSB2ZWMyKCAxLjAgKSAvIHNpemU7XG5cdFx0dmVjMiBjZW50cm9pZFVWID0gZmxvb3IoIHV2ICog
c2l6ZSArIDAuNSApIC8gc2l6ZTtcblx0XHRmbG9hdCBsYiA9IHRleHR1cmUyRENvbXBhcmUoIGRl
cHRocywgY2VudHJvaWRVViArIHRleGVsU2l6ZSAqIG9mZnNldC54eCwgY29tcGFyZSApO1xuXHRc
dGZsb2F0IGx0ID0gdGV4dHVyZTJEQ29tcGFyZSggZGVwdGhzLCBjZW50cm9pZFVWICsgdGV4ZWxT
aXplICogb2Zmc2V0Lnh5LCBjb21wYXJlICk7XG5cdFx0ZmxvYXQgcmIgPSB0ZXh0dXJlMkRDb21w
YXJlKCBkZXB0aHMsIGNlbnRyb2lkVVYgKyB0ZXhlbFNpemUgKiBvZmZzZXQueXgsIGNvbXBhcmUg
KTtcblx0XHRmbG9hdCBydCA9IHRleHR1cmUyRENvbXBhcmUoIGRlcHRocywgY2VudHJvaWRVViAr
IHRleGVsU2l6ZSAqIG9mZnNldC55eSwgY29tcGFyZSApO1xuXHRcdHZlYzIgZiA9IGZyYWN0KCB1
diAqIHNpemUgKyAwLjUgKTtcblx0XHRmbG9hdCBhID0gbWl4KCBsYiwgbHQsIGYueSApO1xuXHRc
dGZsb2F0IGIgPSBtaXgoIHJiLCBydCwgZi55ICk7XG5cdFx0ZmxvYXQgYyA9IG1peCggYSwgYiwg
Zi54ICk7XG5cdFx0cmV0dXJuIGM7XG5cdH1cblx0ZmxvYXQgZ2V0U2hhZG93KCBzYW1wbGVyMkQg
c2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNo
YWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCApIHtcblx0XHRmbG9hdCBzaGFkb3cgPSAxLjA7
XG5cdFx0c2hhZG93Q29vcmQueHl6IC89IHNoYWRvd0Nvb3JkLnc7XG5cdFx0c2hhZG93Q29vcmQu
eiArPSBzaGFkb3dCaWFzO1xuXHRcdGJ2ZWM0IGluRnJ1c3R1bVZlYyA9IGJ2ZWM0ICggc2hhZG93
Q29vcmQueCA+PSAwLjAsIHNoYWRvd0Nvb3JkLnggPD0gMS4wLCBzaGFkb3dDb29yZC55ID49IDAu
MCwgc2hhZG93Q29vcmQueSA8PSAxLjAgKTtcblx0XHRib29sIGluRnJ1c3R1bSA9IGFsbCggaW5G
cnVzdHVtVmVjICk7XG5cdFx0YnZlYzIgZnJ1c3R1bVRlc3RWZWMgPSBidmVjMiggaW5GcnVzdHVt
LCBzaGFkb3dDb29yZC56IDw9IDEuMCApO1xuXHRcdGJvb2wgZnJ1c3R1bVRlc3QgPSBhbGwoIGZy
dXN0dW1UZXN0VmVjICk7XG5cdFx0aWYgKCBmcnVzdHVtVGVzdCApIHtcblx0XHQjaWYgZGVmaW5l
ZCggU0hBRE9XTUFQX1RZUEVfUENGIClcblx0XHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4w
ICkgLyBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgZHgwID0gLSB0ZXhlbFNpemUueCAqIHNo
YWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MCA9IC0gdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRp
dXM7XG5cdFx0XHRmbG9hdCBkeDEgPSArIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xuXHRc
dFx0ZmxvYXQgZHkxID0gKyB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0
IGR4MiA9IGR4MCAvIDIuMDtcblx0XHRcdGZsb2F0IGR5MiA9IGR5MCAvIDIuMDtcblx0XHRcdGZs
b2F0IGR4MyA9IGR4MSAvIDIuMDtcblx0XHRcdGZsb2F0IGR5MyA9IGR5MSAvIDIuMDtcblx0XHRc
dHNoYWRvdyA9IChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dD
b29yZC54eSArIHZlYzIoIGR4MCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRl
eHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5
MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dN
YXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtc
blx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZl
YzIoIGR4MiwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBh
cmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MiApLCBzaGFkb3dD
b29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nv
b3JkLnh5ICsgdmVjMiggZHgzLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4
dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgMC4w
ICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01h
cCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xu
XHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFk
b3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRv
d0Nvb3JkLnh5ICsgdmVjMiggZHgzLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0
dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwg
MC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRv
d01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MyApLCBzaGFkb3dDb29yZC56ICkg
K1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsg
dmVjMiggMC4wLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29t
cGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkzICksIHNoYWRv
d0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93
Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0
ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBk
eTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93
TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKVxu
XHRcdFx0KSAqICggMS4wIC8gMTcuMCApO1xuXHRcdCNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9U
WVBFX1BDRl9TT0ZUIClcblx0XHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFk
b3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgZHgwID0gLSB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1
cztcblx0XHRcdGZsb2F0IGR5MCA9IC0gdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0
XHRmbG9hdCBkeDEgPSArIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQg
ZHkxID0gKyB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdHNoYWRvdyA9IChcblx0
XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFk
b3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRc
dHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29v
cmQueHkgKyB2ZWMyKCAwLjAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0
dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5
ICsgdmVjMiggZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJE
U2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZl
YzIoIGR4MCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRv
d0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nv
b3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93
TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56
ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNp
emUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtc
blx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBz
aGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0
XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93
Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcblx0XHRcdCkgKiAo
IDEuMCAvIDkuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHRzaGFkb3cgPSB0ZXh0dXJlMkRDb21wYXJl
KCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7XG5cdFx0I2VuZGlm
XG5cdFx0fVxuXHRcdHJldHVybiBzaGFkb3c7XG5cdH1cblx0dmVjMiBjdWJlVG9VViggdmVjMyB2
LCBmbG9hdCB0ZXhlbFNpemVZICkge1xuXHRcdHZlYzMgYWJzViA9IGFicyggdiApO1xuXHRcdGZs
b2F0IHNjYWxlVG9DdWJlID0gMS4wIC8gbWF4KCBhYnNWLngsIG1heCggYWJzVi55LCBhYnNWLnog
KSApO1xuXHRcdGFic1YgKj0gc2NhbGVUb0N1YmU7XG5cdFx0diAqPSBzY2FsZVRvQ3ViZSAqICgg
MS4wIC0gMi4wICogdGV4ZWxTaXplWSApO1xuXHRcdHZlYzIgcGxhbmFyID0gdi54eTtcblx0XHRm
bG9hdCBhbG1vc3RBVGV4ZWwgPSAxLjUgKiB0ZXhlbFNpemVZO1xuXHRcdGZsb2F0IGFsbW9zdE9u
ZSA9IDEuMCAtIGFsbW9zdEFUZXhlbDtcblx0XHRpZiAoIGFic1YueiA+PSBhbG1vc3RPbmUgKSB7
XG5cdFx0XHRpZiAoIHYueiA+IDAuMCApXG5cdFx0XHRcdHBsYW5hci54ID0gNC4wIC0gdi54O1xu
XHRcdH0gZWxzZSBpZiAoIGFic1YueCA+PSBhbG1vc3RPbmUgKSB7XG5cdFx0XHRmbG9hdCBzaWdu
WCA9IHNpZ24oIHYueCApO1xuXHRcdFx0cGxhbmFyLnggPSB2LnogKiBzaWduWCArIDIuMCAqIHNp
Z25YO1xuXHRcdH0gZWxzZSBpZiAoIGFic1YueSA+PSBhbG1vc3RPbmUgKSB7XG5cdFx0XHRmbG9h
dCBzaWduWSA9IHNpZ24oIHYueSApO1xuXHRcdFx0cGxhbmFyLnggPSB2LnggKyAyLjAgKiBzaWdu
WSArIDIuMDtcblx0XHRcdHBsYW5hci55ID0gdi56ICogc2lnblkgLSAyLjA7XG5cdFx0fVxuXHRc
dHJldHVybiB2ZWMyKCAwLjEyNSwgMC4yNSApICogcGxhbmFyICsgdmVjMiggMC4zNzUsIDAuNzUg
KTtcblx0fVxuXHRmbG9hdCBnZXRQb2ludFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVj
MiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZl
YzQgc2hhZG93Q29vcmQsIGZsb2F0IHNoYWRvd0NhbWVyYU5lYXIsIGZsb2F0IHNoYWRvd0NhbWVy
YUZhciApIHtcblx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gKCBzaGFkb3dNYXBT
aXplICogdmVjMiggNC4wLCAyLjAgKSApO1xuXHRcdHZlYzMgbGlnaHRUb1Bvc2l0aW9uID0gc2hh
ZG93Q29vcmQueHl6O1xuXHRcdGZsb2F0IGRwID0gKCBsZW5ndGgoIGxpZ2h0VG9Qb3NpdGlvbiAp
IC0gc2hhZG93Q2FtZXJhTmVhciApIC8gKCBzaGFkb3dDYW1lcmFGYXIgLSBzaGFkb3dDYW1lcmFO
ZWFyICk7XHRcdGRwICs9IHNoYWRvd0JpYXM7XG5cdFx0dmVjMyBiZDNEID0gbm9ybWFsaXplKCBs
aWdodFRvUG9zaXRpb24gKTtcblx0XHQjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkg
fHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKVxuXHRcdFx0dmVjMiBvZmZzZXQg
PSB2ZWMyKCAtIDEsIDEgKSAqIHNoYWRvd1JhZGl1cyAqIHRleGVsU2l6ZS55O1xuXHRcdFx0cmV0
dXJuIChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQz
RCArIG9mZnNldC54eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRD
b21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eSwgdGV4ZWxTaXpl
LnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRv
VVYoIGJkM0QgKyBvZmZzZXQueHl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4
dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXgsIHRl
eGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAs
IGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJE
Q29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHksIHRleGVsU2l6
ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVU
b1VWKCBiZDNEICsgb2Zmc2V0Lnl4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRl
eHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh4LCB0
ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFw
LCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHgsIHRleGVsU2l6ZS55ICksIGRwIClcblx0XHRc
dCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdGV4dHVyZTJEQ29t
cGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKTtcblx0
XHQjZW5kaWZcblx0fVxuI2VuZGlmIjsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVsdGEo
IHRhcmdldCApLm11bHRpcGx5U2NhbGFyKCB0ICkuYWRkKCB0aGlzLnN0YXJ0ICk7CisgICAgdmFy
IHNoYWRvd21hcF9wYXJzX3ZlcnRleCA9ICIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVN
X0RJUl9MSUdIVFMgPiAwXG5cdFx0dW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4
WyBOVU1fRElSX0xJR0hUUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dD
b29yZFsgTlVNX0RJUl9MSUdIVFMgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVFMg
PiAwXG5cdFx0dW5pZm9ybSBtYXQ0IHNwb3RTaGFkb3dNYXRyaXhbIE5VTV9TUE9UX0xJR0hUUyBd
O1xuXHRcdHZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVFMgXTtc
blx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRTID4gMFxuXHRcdHVuaWZvcm0gbWF0NCBw
b2ludFNoYWRvd01hdHJpeFsgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2
UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHQjZW5kaWZcbiNlbmRpZiI7
CiAKLSAgICAgICAgfSwKKyAgICB2YXIgc2hhZG93bWFwX3ZlcnRleCA9ICIjaWZkZWYgVVNFX1NI
QURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bc
blx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7XG5cdFx0dkRp
cmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSA9IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBpIF0g
KiB3b3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRTID4g
MFxuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9U
X0xJR0hUUzsgaSArKyApIHtcblx0XHR2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93
TWF0cml4WyBpIF0gKiB3b3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BP
SU5UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSA9IDA7
IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdHZQb2ludFNoYWRvd0Nvb3JkWyBp
IF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogd29ybGRQb3NpdGlvbjtcblx0fVxuXHQjZW5k
aWZcbiNlbmRpZiI7CiAKLSAgICAgICAgYXBwbHlNYXRyaXg0OiBmdW5jdGlvbiAoIG1hdHJpeCAp
IHsKKyAgICB2YXIgc2hhZG93bWFza19wYXJzX2ZyYWdtZW50ID0gImZsb2F0IGdldFNoYWRvd01h
c2soKSB7XG5cdGZsb2F0IHNoYWRvdyA9IDEuMDtcblx0I2lmZGVmIFVTRV9TSEFET1dNQVBcblx0
I2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGln
aHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJ
Ul9MSUdIVFM7IGkgKysgKSB7XG5cdFx0ZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGln
aHRzWyBpIF07XG5cdFx0c2hhZG93ICo9IGJvb2woIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93ICkg
PyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHQu
c2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExp
Z2h0LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xu
XHR9XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHRTcG90TGlnaHQgc3Bv
dExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5V
TV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07
XG5cdFx0c2hhZG93ICo9IGJvb2woIHNwb3RMaWdodC5zaGFkb3cgKSA/IGdldFNoYWRvdyggc3Bv
dFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRv
d0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDog
MS4wO1xuXHR9XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0UG9pbnRM
aWdodCBwb2ludExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpID0g
MDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50
TGlnaHRzWyBpIF07XG5cdFx0c2hhZG93ICo9IGJvb2woIHBvaW50TGlnaHQuc2hhZG93ICkgPyBn
ZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBT
aXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9p
bnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGln
aHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdH1cblx0I2VuZGlmXG5cdCNlbmRpZlxuXHRy
ZXR1cm4gc2hhZG93O1xufSI7CiAKLSAgICAgICAgICAgIHRoaXMuc3RhcnQuYXBwbHlNYXRyaXg0
KCBtYXRyaXggKTsKLSAgICAgICAgICAgIHRoaXMuZW5kLmFwcGx5TWF0cml4NCggbWF0cml4ICk7
CisgICAgdmFyIHNraW5iYXNlX3ZlcnRleCA9ICIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQg
Ym9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApO1xuXHRtYXQ0IGJvbmVNYXRZ
ID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTtcblx0bWF0NCBib25lTWF0WiA9IGdldEJv
bmVNYXRyaXgoIHNraW5JbmRleC56ICk7XG5cdG1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4
KCBza2luSW5kZXgudyApO1xuI2VuZGlmIjsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgdmFyIHNraW5uaW5nX3BhcnNfdmVydGV4ID0gIiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dW5p
Zm9ybSBtYXQ0IGJpbmRNYXRyaXg7XG5cdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTtc
blx0I2lmZGVmIEJPTkVfVEVYVFVSRVxuXHRcdHVuaWZvcm0gaGlnaHAgc2FtcGxlcjJEIGJvbmVU
ZXh0dXJlO1xuXHRcdHVuaWZvcm0gaW50IGJvbmVUZXh0dXJlU2l6ZTtcblx0XHRtYXQ0IGdldEJv
bmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7XG5cdFx0XHRmbG9hdCBqID0gaSAqIDQuMDtc
blx0XHRcdGZsb2F0IHggPSBtb2QoIGosIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApO1xuXHRc
dFx0ZmxvYXQgeSA9IGZsb29yKCBqIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0
XHRmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcblx0XHRcdGZsb2F0
IGR5ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0eSA9IGR5ICogKCB5
ICsgMC41ICk7XG5cdFx0XHR2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMigg
ZHggKiAoIHggKyAwLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYyID0gdGV4dHVyZTJEKCBib25l
VGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAxLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYzID0g
dGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAyLjUgKSwgeSApICk7XG5c
dFx0XHR2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAz
LjUgKSwgeSApICk7XG5cdFx0XHRtYXQ0IGJvbmUgPSBtYXQ0KCB2MSwgdjIsIHYzLCB2NCApO1xu
XHRcdFx0cmV0dXJuIGJvbmU7XG5cdFx0fVxuXHQjZWxzZVxuXHRcdHVuaWZvcm0gbWF0NCBib25l
TWF0cmljZXNbIE1BWF9CT05FUyBdO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4g
ZmxvYXQgaSApIHtcblx0XHRcdG1hdDQgYm9uZSA9IGJvbmVNYXRyaWNlc1sgaW50KGkpIF07XG5c
dFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbmRpZlxuI2VuZGlmIjsKIAotICAgICAgICB9
LAorICAgIHZhciBza2lubmluZ192ZXJ0ZXggPSAiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR2ZWM0
IHNraW5WZXJ0ZXggPSBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHR2
ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTtcblx0c2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5W
ZXJ0ZXggKiBza2luV2VpZ2h0Lng7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4
ICogc2tpbldlaWdodC55O1xuXHRza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNr
aW5XZWlnaHQuejtcblx0c2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2Vp
Z2h0Lnc7XG5cdHRyYW5zZm9ybWVkID0gKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54
eXo7XG4jZW5kaWYiOwogCi0gICAgICAgIGVxdWFsczogZnVuY3Rpb24gKCBsaW5lICkgeworICAg
IHZhciBza2lubm9ybWFsX3ZlcnRleCA9ICIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgc2tp
bk1hdHJpeCA9IG1hdDQoIDAuMCApO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueCAqIGJv
bmVNYXRYO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZO1xuXHRza2lu
TWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaO1xuXHRza2luTWF0cml4ICs9IHNraW5X
ZWlnaHQudyAqIGJvbmVNYXRXO1xuXHRza2luTWF0cml4ICA9IGJpbmRNYXRyaXhJbnZlcnNlICog
c2tpbk1hdHJpeCAqIGJpbmRNYXRyaXg7XG5cdG9iamVjdE5vcm1hbCA9IHZlYzQoIHNraW5NYXRy
aXggKiB2ZWM0KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6O1xuXHQjaWZkZWYgVVNFX1RBTkdF
TlRcblx0XHRvYmplY3RUYW5nZW50ID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdFRh
bmdlbnQsIDAuMCApICkueHl6O1xuXHQjZW5kaWZcbiNlbmRpZiI7CiAKLSAgICAgICAgICAgIHJl
dHVybiBsaW5lLnN0YXJ0LmVxdWFscyggdGhpcy5zdGFydCApICYmIGxpbmUuZW5kLmVxdWFscygg
dGhpcy5lbmQgKTsKKyAgICB2YXIgc3BlY3VsYXJtYXBfZnJhZ21lbnQgPSAiZmxvYXQgc3BlY3Vs
YXJTdHJlbmd0aDtcbiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcblx0dmVjNCB0ZXhlbFNwZWN1bGFy
ID0gdGV4dHVyZTJEKCBzcGVjdWxhck1hcCwgdlV2ICk7XG5cdHNwZWN1bGFyU3RyZW5ndGggPSB0
ZXhlbFNwZWN1bGFyLnI7XG4jZWxzZVxuXHRzcGVjdWxhclN0cmVuZ3RoID0gMS4wO1xuI2VuZGlm
IjsKIAotICAgICAgICB9CisgICAgdmFyIHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQgPSAiI2lm
ZGVmIFVTRV9TUEVDVUxBUk1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDtcbiNl
bmRpZiI7CiAKLSAgICB9ICk7CisgICAgdmFyIHRvbmVtYXBwaW5nX2ZyYWdtZW50ID0gIiNpZiBk
ZWZpbmVkKCBUT05FX01BUFBJTkcgKVxuXHRnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmco
IGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZiI7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9y
IGJob3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvCi0gICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRw
Oi8vbXJkb29iLmNvbS8KLSAgICAgKi8KKyAgICB2YXIgdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVu
dCA9ICIjaWZuZGVmIHNhdHVyYXRlXG5cdCNkZWZpbmUgc2F0dXJhdGUoYSkgY2xhbXAoIGEsIDAu
MCwgMS4wIClcbiNlbmRpZlxudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ0V4cG9zdXJlO1xudW5p
Zm9ybSBmbG9hdCB0b25lTWFwcGluZ1doaXRlUG9pbnQ7XG52ZWMzIExpbmVhclRvbmVNYXBwaW5n
KCB2ZWMzIGNvbG9yICkge1xuXHRyZXR1cm4gdG9uZU1hcHBpbmdFeHBvc3VyZSAqIGNvbG9yO1xu
fVxudmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0
b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRyZXR1cm4gc2F0dXJhdGUoIGNvbG9yIC8gKCB2ZWMzKCAx
LjAgKSArIGNvbG9yICkgKTtcbn1cbiNkZWZpbmUgVW5jaGFydGVkMkhlbHBlciggeCApIG1heCgg
KCAoIHggKiAoIDAuMTUgKiB4ICsgMC4xMCAqIDAuNTAgKSArIDAuMjAgKiAwLjAyICkgLyAoIHgg
KiAoIDAuMTUgKiB4ICsgMC41MCApICsgMC4yMCAqIDAuMzAgKSApIC0gMC4wMiAvIDAuMzAsIHZl
YzMoIDAuMCApIClcbnZlYzMgVW5jaGFydGVkMlRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xu
XHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRyZXR1cm4gc2F0dXJhdGUoIFVuY2hh
cnRlZDJIZWxwZXIoIGNvbG9yICkgLyBVbmNoYXJ0ZWQySGVscGVyKCB2ZWMzKCB0b25lTWFwcGlu
Z1doaXRlUG9pbnQgKSApICk7XG59XG52ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2
ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRjb2xvciA9
IG1heCggdmVjMyggMC4wICksIGNvbG9yIC0gMC4wMDQgKTtcblx0cmV0dXJuIHBvdyggKCBjb2xv
ciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAx
LjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTtcbn1cbnZlYzMgQUNFU0ZpbG1pY1RvbmVNYXBw
aW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRy
ZXR1cm4gc2F0dXJhdGUoICggY29sb3IgKiAoIDIuNTEgKiBjb2xvciArIDAuMDMgKSApIC8gKCBj
b2xvciAqICggMi40MyAqIGNvbG9yICsgMC41OSApICsgMC4xNCApICk7XG59IjsKIAotICAgIGZ1
bmN0aW9uIFRyaWFuZ2xlKCBhLCBiLCBjICkgeworICAgIHZhciB1dl9wYXJzX2ZyYWdtZW50ID0g
IiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZp
bmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX1NQRUNVTEFSTUFQICkgfHwgZGVm
aW5lZCggVVNFX0FMUEhBTUFQICkgfHwgZGVmaW5lZCggVVNFX0VNSVNTSVZFTUFQICkgfHwgZGVm
aW5lZCggVVNFX1JPVUdITkVTU01BUCApIHx8IGRlZmluZWQoIFVTRV9NRVRBTE5FU1NNQVAgKVxu
XHR2YXJ5aW5nIHZlYzIgdlV2O1xuI2VuZGlmIjsKIAotICAgICAgICB0aGlzLmEgPSAoIGEgIT09
IHVuZGVmaW5lZCApID8gYSA6IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgIHRoaXMuYiA9ICggYiAh
PT0gdW5kZWZpbmVkICkgPyBiIDogbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgdGhpcy5jID0gKCBj
ICE9PSB1bmRlZmluZWQgKSA/IGMgOiBuZXcgVmVjdG9yMygpOworICAgIHZhciB1dl9wYXJzX3Zl
cnRleCA9ICIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkg
fHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9TUEVDVUxBUk1BUCAp
IHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApIHx8IGRlZmluZWQoIFVTRV9FTUlTU0lWRU1BUCAp
IHx8IGRlZmluZWQoIFVTRV9ST1VHSE5FU1NNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTUVUQUxORVNT
TUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjtcblx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xu
I2VuZGlmIjsKIAotICAgIH0KKyAgICB2YXIgdXZfdmVydGV4ID0gIiNpZiBkZWZpbmVkKCBVU0Vf
TUFQICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQ
ICkgfHwgZGVmaW5lZCggVVNFX1NQRUNVTEFSTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQ
ICkgfHwgZGVmaW5lZCggVVNFX0VNSVNTSVZFTUFQICkgfHwgZGVmaW5lZCggVVNFX1JPVUdITkVT
U01BUCApIHx8IGRlZmluZWQoIFVTRV9NRVRBTE5FU1NNQVAgKVxuXHR2VXYgPSAoIHV2VHJhbnNm
b3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xuI2VuZGlmIjsKIAotICAgIE9iamVjdC5hc3NpZ24o
IFRyaWFuZ2xlLCB7CisgICAgdmFyIHV2Ml9wYXJzX2ZyYWdtZW50ID0gIiNpZiBkZWZpbmVkKCBV
U0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHR2YXJ5aW5nIHZlYzIgdlV2
MjtcbiNlbmRpZiI7CiAKLSAgICAgICAgZ2V0Tm9ybWFsOiBmdW5jdGlvbiAoKSB7CisgICAgdmFy
IHV2Ml9wYXJzX3ZlcnRleCA9ICIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5l
ZCggVVNFX0FPTUFQIClcblx0YXR0cmlidXRlIHZlYzIgdXYyO1xuXHR2YXJ5aW5nIHZlYzIgdlV2
MjtcbiNlbmRpZiI7CiAKLSAgICAgICAgICAgIHZhciB2MCA9IG5ldyBWZWN0b3IzKCk7CisgICAg
dmFyIHV2Ml92ZXJ0ZXggPSAiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQo
IFVTRV9BT01BUCApXG5cdHZVdjIgPSB1djI7XG4jZW5kaWYiOwogCi0gICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb24gZ2V0Tm9ybWFsKCBhLCBiLCBjLCB0YXJnZXQgKSB7CisgICAgdmFyIHdvcmxk
cG9zX3ZlcnRleCA9ICIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIERJU1RB
TkNFICkgfHwgZGVmaW5lZCAoIFVTRV9TSEFET1dNQVAgKVxuXHR2ZWM0IHdvcmxkUG9zaXRpb24g
PSBtb2RlbE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcbiNlbmRpZiI7CiAKLSAg
ICAgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVkICkgeworICAgIHZhciBiYWNr
Z3JvdW5kX2ZyYWcgPSAidW5pZm9ybSBzYW1wbGVyMkQgdDJEO1xudmFyeWluZyB2ZWMyIHZVdjtc
bnZvaWQgbWFpbigpIHtcblx0dmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCggdDJELCB2VXYgKTtc
blx0Z2xfRnJhZ0NvbG9yID0gbWFwVGV4ZWxUb0xpbmVhciggdGV4Q29sb3IgKTtcblx0I2luY2x1
ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50
PlxufSI7CiAKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuVHJpYW5n
bGU6IC5nZXROb3JtYWwoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOwotICAgICAgICAgICAg
ICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMygpOworICAgIHZhciBiYWNrZ3JvdW5kX3ZlcnQg
PSAidmFyeWluZyB2ZWMyIHZVdjtcbnVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbnZvaWQgbWFp
bigpIHtcblx0dlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTtcblx0Z2xf
UG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbi54eSwgMS4wLCAxLjAgKTtcbn0iOwogCi0gICAgICAg
ICAgICAgICAgfQorICAgIHZhciBjdWJlX2ZyYWcgPSAidW5pZm9ybSBzYW1wbGVyQ3ViZSB0Q3Vi
ZTtcbnVuaWZvcm0gZmxvYXQgdEZsaXA7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5n
IHZlYzMgdldvcmxkRGlyZWN0aW9uO1xudm9pZCBtYWluKCkge1xuXHR2ZWM0IHRleENvbG9yID0g
dGV4dHVyZUN1YmUoIHRDdWJlLCB2ZWMzKCB0RmxpcCAqIHZXb3JsZERpcmVjdGlvbi54LCB2V29y
bGREaXJlY3Rpb24ueXogKSApO1xuXHRnbF9GcmFnQ29sb3IgPSBtYXBUZXhlbFRvTGluZWFyKCB0
ZXhDb2xvciApO1xuXHRnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5O1xuXHQjaW5jbHVkZSA8dG9u
ZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG59IjsK
IAotICAgICAgICAgICAgICAgIHRhcmdldC5zdWJWZWN0b3JzKCBjLCBiICk7Ci0gICAgICAgICAg
ICAgICAgdjAuc3ViVmVjdG9ycyggYSwgYiApOwotICAgICAgICAgICAgICAgIHRhcmdldC5jcm9z
cyggdjAgKTsKKyAgICB2YXIgY3ViZV92ZXJ0ID0gInZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rp
b247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2V29ybGREaXJlY3Rpb24g
PSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXHQjaW5jbHVk
ZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdGdsX1Bvc2l0
aW9uLnogPSBnbF9Qb3NpdGlvbi53O1xufSI7CiAKLSAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0
TGVuZ3RoU3EgPSB0YXJnZXQubGVuZ3RoU3EoKTsKLSAgICAgICAgICAgICAgICBpZiAoIHRhcmdl
dExlbmd0aFNxID4gMCApIHsKKyAgICB2YXIgZGVwdGhfZnJhZyA9ICIjaWYgREVQVEhfUEFDS0lO
RyA9PSAzMjAwXG5cdHVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNlbmRpZlxuI2luY2x1ZGUgPGNv
bW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4j
aW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFn
bWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNs
aXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8
Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEu
MCApO1xuXHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXG5cdFx0ZGlmZnVzZUNvbG9yLmEgPSBv
cGFjaXR5O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUg
PGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQj
aW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpZiBERVBUSF9QQUNLSU5HID09IDMy
MDBcblx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCB2ZWMzKCAxLjAgLSBnbF9GcmFnQ29vcmQueiAp
LCBvcGFjaXR5ICk7XG5cdCNlbGlmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMVxuXHRcdGdsX0ZyYWdD
b2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZ2xfRnJhZ0Nvb3JkLnogKTtcblx0I2VuZGlmXG59IjsK
IAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0Lm11bHRpcGx5U2NhbGFyKCAxIC8g
TWF0aC5zcXJ0KCB0YXJnZXRMZW5ndGhTcSApICk7CisgICAgdmFyIGRlcHRoX3ZlcnQgPSAiI2lu
Y2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNw
bGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0
ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhi
dWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxu
dm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJh
c2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxi
ZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0
XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVn
aW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8
c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0
I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4
PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cbn0iOwogCi0gICAgICAgICAg
ICAgICAgfQorICAgIHZhciBkaXN0YW5jZVJHQkFfZnJhZyA9ICIjZGVmaW5lIERJU1RBTkNFXG51
bmlmb3JtIHZlYzMgcmVmZXJlbmNlUG9zaXRpb247XG51bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5j
ZTtcbnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7XG52YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRp
b247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZf
cGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxh
bHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2Zy
YWdtZW50Plxudm9pZCBtYWluICgpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFn
bWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2luY2x1ZGUgPG1h
cF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8
YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlv
biAtIHJlZmVyZW5jZVBvc2l0aW9uICk7XG5cdGRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2Ug
KSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTtcblx0ZGlzdCA9IHNhdHVyYXRlKCBk
aXN0ICk7XG5cdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApO1xufSI7CiAK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LnNldCggMCwgMCwgMCApOworICAgIHZhciBk
aXN0YW5jZVJHQkFfdmVydCA9ICIjZGVmaW5lIERJU1RBTkNFXG52YXJ5aW5nIHZlYzMgdldvcmxk
UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4Plxu
I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRh
cmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNs
dWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNs
dWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpZmRlZiBV
U0VfRElTUExBQ0VNRU5UTUFQXG5cdFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0
XHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxza2lubm9ybWFs
X3ZlcnRleD5cblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRl
IDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNp
bmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0
ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19w
bGFuZXNfdmVydGV4PlxuXHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xufSI7
CiAKLSAgICAgICAgICAgIH07CisgICAgdmFyIGVxdWlyZWN0X2ZyYWcgPSAidW5pZm9ybSBzYW1w
bGVyMkQgdEVxdWlyZWN0O1xudmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRl
IDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2
V29ybGREaXJlY3Rpb24gKTtcblx0dmVjMiBzYW1wbGVVVjtcblx0c2FtcGxlVVYueSA9IGFzaW4o
IGNsYW1wKCBkaXJlY3Rpb24ueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41
O1xuXHRzYW1wbGVVVi54ID0gYXRhbiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi54ICkgKiBSRUNJ
UFJPQ0FMX1BJMiArIDAuNTtcblx0dmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0
LCBzYW1wbGVVViApO1xuXHRnbF9GcmFnQ29sb3IgPSBtYXBUZXhlbFRvTGluZWFyKCB0ZXhDb2xv
ciApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNv
ZGluZ3NfZnJhZ21lbnQ+XG59IjsKIAotICAgICAgICB9KCksCisgICAgdmFyIGVxdWlyZWN0X3Zl
cnQgPSAidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52
b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9z
aXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNs
dWRlIDxwcm9qZWN0X3ZlcnRleD5cbn0iOwogCi0gICAgICAgIC8vIHN0YXRpYy9pbnN0YW5jZSBt
ZXRob2QgdG8gY2FsY3VsYXRlIGJhcnljZW50cmljIGNvb3JkaW5hdGVzCi0gICAgICAgIC8vIGJh
c2VkIG9uOiBodHRwOi8vd3d3LmJsYWNrcGF3bi5jb20vdGV4dHMvcG9pbnRpbnBvbHkvZGVmYXVs
dC5odG1sCi0gICAgICAgIGdldEJhcnljb29yZDogZnVuY3Rpb24gKCkgeworICAgIHZhciBsaW5l
ZGFzaGVkX2ZyYWcgPSAidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNp
dHk7XG51bmlmb3JtIGZsb2F0IGRhc2hTaXplO1xudW5pZm9ybSBmbG9hdCB0b3RhbFNpemU7XG52
YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUg
PGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5j
bHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFu
ZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3Bs
YW5lc19mcmFnbWVudD5cblx0aWYgKCBtb2QoIHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApID4g
ZGFzaFNpemUgKSB7XG5cdFx0ZGlzY2FyZDtcblx0fVxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2
ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5
ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9y
X2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJh
Z0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1
ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGlu
Z19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUg
PGZvZ19mcmFnbWVudD5cbn0iOwogCi0gICAgICAgICAgICB2YXIgdjAgPSBuZXcgVmVjdG9yMygp
OwotICAgICAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgICAgIHZhciB2
MiA9IG5ldyBWZWN0b3IzKCk7CisgICAgdmFyIGxpbmVkYXNoZWRfdmVydCA9ICJ1bmlmb3JtIGZs
b2F0IHNjYWxlO1xuYXR0cmlidXRlIGZsb2F0IGxpbmVEaXN0YW5jZTtcbnZhcnlpbmcgZmxvYXQg
dkxpbmVEaXN0YW5jZTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192
ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVm
X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZv
aWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0dkxpbmVEaXN0YW5jZSA9
IHNjYWxlICogbGluZURpc3RhbmNlO1xuXHR2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRy
aXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1h
dHJpeCAqIG12UG9zaXRpb247XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNp
bmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5c
bn0iOwogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZ2V0QmFyeWNvb3JkKCBwb2ludCwg
YSwgYiwgYywgdGFyZ2V0ICkgeworICAgIHZhciBtZXNoYmFzaWNfZnJhZyA9ICJ1bmlmb3JtIHZl
YzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZm5kZWYgRkxBVF9TSEFERURc
blx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5j
bHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50Plxu
I2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50
PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFy
c19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUg
PGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2lu
Y2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZf
cGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5c
bnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0
dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRl
IDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2lu
Y2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5c
dCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVjdWxhcm1hcF9m
cmFnbWVudD5cblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdo
dCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtc
blx0I2lmZGVmIFVTRV9MSUdIVE1BUFxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVz
ZSArPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICkueHl6ICogbGlnaHRNYXBJbnRlbnNpdHk7
XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZlYzMoIDEu
MCApO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRM
aWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gZGlmZnVzZUNvbG9yLnJnYjtcblx0dmVjMyBvdXRnb2lu
Z0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlO1xuXHQjaW5jbHVkZSA8ZW52
bWFwX2ZyYWdtZW50PlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZm
dXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5c
blx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2Rpbmdz
X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxufSI7CiAKLSAgICAgICAgICAg
ICAgICB2MC5zdWJWZWN0b3JzKCBjLCBhICk7Ci0gICAgICAgICAgICAgICAgdjEuc3ViVmVjdG9y
cyggYiwgYSApOwotICAgICAgICAgICAgICAgIHYyLnN1YlZlY3RvcnMoIHBvaW50LCBhICk7Cisg
ICAgdmFyIG1lc2hiYXNpY192ZXJ0ID0gIiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZf
cGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGVudm1h
cF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxm
b2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5j
bHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192
ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWlu
KCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0
I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0
I2lmZGVmIFVTRV9FTlZNQVBcblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2lu
Y2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4
PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVk
ZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5j
bHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNp
bmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+
XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFw
X3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IjsKIAotICAgICAgICAgICAgICAg
IHZhciBkb3QwMCA9IHYwLmRvdCggdjAgKTsKLSAgICAgICAgICAgICAgICB2YXIgZG90MDEgPSB2
MC5kb3QoIHYxICk7Ci0gICAgICAgICAgICAgICAgdmFyIGRvdDAyID0gdjAuZG90KCB2MiApOwot
ICAgICAgICAgICAgICAgIHZhciBkb3QxMSA9IHYxLmRvdCggdjEgKTsKLSAgICAgICAgICAgICAg
ICB2YXIgZG90MTIgPSB2MS5kb3QoIHYyICk7CisgICAgdmFyIG1lc2hsYW1iZXJ0X2ZyYWcgPSAi
dW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZs
b2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG52YXJ5aW5nIHZlYzMgdklu
ZGlyZWN0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRC
YWNrO1xuXHR2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjaztcbiNlbmRpZlxuI2luY2x1ZGUgPGNv
bW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdt
ZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19m
cmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFy
c19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUg
PGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5c
biNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9w
YXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2Jl
Z2luPlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9w
YXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD5cbiNpbmNs
dWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3Bh
cnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52
b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZl
YzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRM
aWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMygg
MC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVS
YWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5c
dCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0
I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdt
ZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbWlz
c2l2ZW1hcF9mcmFnbWVudD5cblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlID0gZ2V0
QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0I2lmZGVmIERP
VUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zy
b250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7XG5cdCNlbHNlXG5c
dFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250O1xuXHQj
ZW5kaWZcblx0I2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5p
bmRpcmVjdERpZmZ1c2UgKj0gQlJERl9EaWZmdXNlX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2Ig
KTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1
c2UgPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2TGlnaHRGcm9udCA6IHZMaWdodEJhY2s7XG5cdCNl
bHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9IHZMaWdodEZyb250O1xuXHQj
ZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0RpZmZ1c2VfTGFt
YmVydCggZGlmZnVzZUNvbG9yLnJnYiApICogZ2V0U2hhZG93TWFzaygpO1xuXHQjaW5jbHVkZSA8
YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRp
cmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNz
aXZlUmFkaWFuY2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdGdsX0ZyYWdDb2xv
ciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0
b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0
I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFf
ZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IjsKIAotICAgICAg
ICAgICAgICAgIHZhciBkZW5vbSA9ICggZG90MDAgKiBkb3QxMSAtIGRvdDAxICogZG90MDEgKTsK
KyAgICB2YXIgbWVzaGxhbWJlcnRfdmVydCA9ICIjZGVmaW5lIExBTUJFUlRcbnZhcnlpbmcgdmVj
MyB2TGlnaHRGcm9udDtcbnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDtcbiNpZmRlZiBET1VC
TEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XG5cdHZhcnlpbmcgdmVjMyB2SW5k
aXJlY3RCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNf
dmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFy
c192ZXJ0ZXg+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+
XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4
PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5n
X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRl
IDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFy
c192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNs
dWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8
YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQj
aW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+
XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3Zl
cnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5u
aW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9n
ZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0
I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5c
dCNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBf
dmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iOwogCi0gICAgICAgICAgICAgICAg
aWYgKCB0YXJnZXQgPT09IHVuZGVmaW5lZCApIHsKKyAgICB2YXIgbWVzaG1hdGNhcF9mcmFnID0g
IiNkZWZpbmUgTUFUQ0FQXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3Bh
Y2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIG1hdGNhcDtcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0
aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRp
ZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1
ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+
XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2Zy
YWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxv
Z2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNf
ZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJh
Z21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xu
XHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21l
bnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVz
dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1
ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHR2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoIHZW
aWV3UG9zaXRpb24gKTtcblx0dmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAu
MCwgLSB2aWV3RGlyLnggKSApO1xuXHR2ZWMzIHkgPSBjcm9zcyggdmlld0RpciwgeCApO1xuXHR2
ZWMyIHV2ID0gdmVjMiggZG90KCB4LCBub3JtYWwgKSwgZG90KCB5LCBub3JtYWwgKSApICogMC40
OTUgKyAwLjU7XG5cdCNpZmRlZiBVU0VfTUFUQ0FQXG5cdFx0dmVjNCBtYXRjYXBDb2xvciA9IHRl
eHR1cmUyRCggbWF0Y2FwLCB1diApO1xuXHRcdG1hdGNhcENvbG9yID0gbWF0Y2FwVGV4ZWxUb0xp
bmVhciggbWF0Y2FwQ29sb3IgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IG1hdGNhcENvbG9yID0gdmVj
NCggMS4wICk7XG5cdCNlbmRpZlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3Iu
cmdiICogbWF0Y2FwQ29sb3IucmdiO1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xp
Z2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9m
cmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8
ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxufSI7CiAKLSAg
ICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuVHJpYW5nbGU6IC5nZXRCYXJ5
Y29vcmQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOwotICAgICAgICAgICAgICAgICAgICB0
YXJnZXQgPSBuZXcgVmVjdG9yMygpOworICAgIHZhciBtZXNobWF0Y2FwX3ZlcnQgPSAiI2RlZmlu
ZSBNQVRDQVBcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURF
RFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNp
bmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192
ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0
X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUg
PGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJz
X3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1
ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5c
blx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVy
dGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpZm5kZWYgRkxBVF9T
SEFERURcblx0XHR2Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuXHQj
ZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0
X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3Bs
YWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1
ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0
ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0
aW9uLnh5ejtcbn0iOwogCi0gICAgICAgICAgICAgICAgfQorICAgIHZhciBtZXNocGhvbmdfZnJh
ZyA9ICIjZGVmaW5lIFBIT05HXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBl
bWlzc2l2ZTtcbnVuaWZvcm0gdmVjMyBzcGVjdWxhcjtcbnVuaWZvcm0gZmxvYXQgc2hpbmluZXNz
O1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxw
YWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNv
bG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRl
IDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNs
dWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21l
bnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2
ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2lu
Y2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfZnJh
Z21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4j
aW5jbHVkZSA8bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c2hhZG93bWFw
X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1
ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNf
ZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRl
IDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1
ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0
KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0g
UmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZl
YzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7XG5c
dCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVu
dD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJh
Z21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxzcGVj
dWxhcm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0
I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBf
ZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfcGhvbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRl
IDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFw
cz5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+XG5cdCNpbmNsdWRlIDxhb21hcF9m
cmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlm
ZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRp
cmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1p
c3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0Nv
bG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUg
PHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Plxu
XHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBo
YV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iOwogCi0gICAg
ICAgICAgICAgICAgLy8gY29sbGluZWFyIG9yIHNpbmd1bGFyIHRyaWFuZ2xlCi0gICAgICAgICAg
ICAgICAgaWYgKCBkZW5vbSA9PT0gMCApIHsKKyAgICB2YXIgbWVzaHBob25nX3ZlcnQgPSAiI2Rl
ZmluZSBQSE9OR1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hB
REVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxu
I2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNp
bmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3Bh
cnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19w
YXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRl
IDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+
XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdf
cGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4
PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0
I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3Zl
cnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3Jt
YWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZM
QVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4j
ZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0
X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3Bs
YWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1
ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0
ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29y
bGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNo
YWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSI7CiAKLSAgICAgICAg
ICAgICAgICAgICAgLy8gYXJiaXRyYXJ5IGxvY2F0aW9uIG91dHNpZGUgb2YgdHJpYW5nbGU/Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIG5vdCBzdXJlIGlmIHRoaXMgaXMgdGhlIGJlc3QgaWRlYSwg
bWF5YmUgc2hvdWxkIGJlIHJldHVybmluZyB1bmRlZmluZWQKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRhcmdldC5zZXQoIC0gMiwgLSAxLCAtIDEgKTsKKyAgICB2YXIgbWVzaHBoeXNpY2Fs
X2ZyYWcgPSAiI2RlZmluZSBQSFlTSUNBTFxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3Jt
IHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcztcbnVuaWZvcm0gZmxvYXQg
bWV0YWxuZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBTVEFOREFSRFxuXHR1
bmlmb3JtIGZsb2F0IGNsZWFyQ29hdDtcblx0dW5pZm9ybSBmbG9hdCBjbGVhckNvYXRSb3VnaG5l
c3M7XG4jZW5kaWZcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NI
QURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0
dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQj
ZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2lu
Y2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJh
Z21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19m
cmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1h
cF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVk
ZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2Zy
YWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9m
cmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZt
YXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5c
biNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxf
cGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNs
dWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJh
Z21lbnQ+XG4jaW5jbHVkZSA8cm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8
bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19m
cmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQg
bWFpbigpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBk
aWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0
IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAg
KSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlh
bmNlID0gZW1pc3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2lu
Y2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5j
bHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+
XG5cdCNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtZXRhbG5l
c3NtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+XG5cdCNp
bmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2Zy
YWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PlxuXHQjaW5jbHVk
ZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21h
cHM+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxuXHQjaW5jbHVkZSA8YW9tYXBf
ZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERp
ZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5k
aXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKyB0b3RhbEVt
aXNzaXZlUmFkaWFuY2U7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRp
ZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2lu
Y2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0
I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRo
ZXJpbmdfZnJhZ21lbnQ+XG59IjsKIAotICAgICAgICAgICAgICAgIH0KKyAgICB2YXIgbWVzaHBo
eXNpY2FsX3ZlcnQgPSAiI2RlZmluZSBQSFlTSUNBTFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRp
b247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZk
ZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2
ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2lu
Y2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNs
dWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192
ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0
X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUg
PHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRl
eD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7
XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5j
bHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQj
aW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4
PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9y
bWFsX3ZlcnRleD5cbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCA9IG5vcm1hbGl6ZSgg
dHJhbnNmb3JtZWROb3JtYWwgKTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dlRhbmdlbnQg
PSBub3JtYWxpemUoIHRyYW5zZm9ybWVkVGFuZ2VudCApO1xuXHRcdHZCaXRhbmdlbnQgPSBub3Jt
YWxpemUoIGNyb3NzKCB2Tm9ybWFsLCB2VGFuZ2VudCApICogdGFuZ2VudC53ICk7XG5cdCNlbmRp
ZlxuI2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRh
cmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxk
aXNwbGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNp
bmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNf
dmVydGV4PlxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcblx0I2luY2x1ZGUg
PHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNs
dWRlIDxmb2dfdmVydGV4PlxufSI7CiAKLSAgICAgICAgICAgICAgICB2YXIgaW52RGVub20gPSAx
IC8gZGVub207Ci0gICAgICAgICAgICAgICAgdmFyIHUgPSAoIGRvdDExICogZG90MDIgLSBkb3Qw
MSAqIGRvdDEyICkgKiBpbnZEZW5vbTsKLSAgICAgICAgICAgICAgICB2YXIgdiA9ICggZG90MDAg
KiBkb3QxMiAtIGRvdDAxICogZG90MDIgKSAqIGludkRlbm9tOworICAgIHZhciBub3JtYWxfZnJh
ZyA9ICIjZGVmaW5lIE5PUk1BTFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmIGRlZmluZWQo
IEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCAoIGRlZmluZWQoIFVT
RV9OT1JNQUxNQVAgKSAmJiAhIGRlZmluZWQoIE9CSkVDVFNQQUNFX05PUk1BTE1BUCApIClcblx0
dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpZm5kZWYgRkxBVF9TSEFERURc
blx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlp
bmcgdmVjMyB2VGFuZ2VudDtcblx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlm
XG4jZW5kaWZcbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+
XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9w
YXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5j
bHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNp
bmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1
Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1
ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9y
bWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7XG59IjsKIAotICAgICAgICAgICAgICAgIC8v
IGJhcnljZW50cmljIGNvb3JkaW5hdGVzIG11c3QgYWx3YXlzIHN1bSB0byAxCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRhcmdldC5zZXQoIDEgLSB1IC0gdiwgdiwgdSApOworICAgIHZhciBub3Jt
YWxfdmVydCA9ICIjZGVmaW5lIE5PUk1BTFxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwg
ZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCAoIGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSAmJiAh
IGRlZmluZWQoIE9CSkVDVFNQQUNFX05PUk1BTE1BUCApIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3
UG9zaXRpb247XG4jZW5kaWZcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZO
b3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtc
blx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRl
IDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+
XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdf
cGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVk
ZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVk
ZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVk
ZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQj
aW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3Zl
cnRleD5cbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNm
b3JtZWROb3JtYWwgKTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dlRhbmdlbnQgPSBub3Jt
YWxpemUoIHRyYW5zZm9ybWVkVGFuZ2VudCApO1xuXHRcdHZCaXRhbmdlbnQgPSBub3JtYWxpemUo
IGNyb3NzKCB2Tm9ybWFsLCB2VGFuZ2VudCApICogdGFuZ2VudC53ICk7XG5cdCNlbmRpZlxuI2Vu
ZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92
ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNwbGFj
ZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRl
IDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4
PlxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8
fCAoIGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSAmJiAhIGRlZmluZWQoIE9CSkVDVFNQQUNFX05P
Uk1BTE1BUCApIClcblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWZc
bn0iOwogCi0gICAgICAgICAgICB9OworICAgIHZhciBwb2ludHNfZnJhZyA9ICJ1bmlmb3JtIHZl
YzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4j
aW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFy
c19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dk
ZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2Zy
YWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdt
ZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNl
Q29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1
Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD5cblx0I2luY2x1
ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRv
dXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCgg
b3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHByZW11bHRpcGxp
ZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0
I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5c
bn0iOwogCi0gICAgICAgIH0oKSwKKyAgICB2YXIgcG9pbnRzX3ZlcnQgPSAidW5pZm9ybSBmbG9h
dCBzaXplO1xudW5pZm9ybSBmbG9hdCBzY2FsZTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVk
ZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1
ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNf
dmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFp
bigpIHtcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRl
eD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3Rf
dmVydGV4PlxuXHRnbF9Qb2ludFNpemUgPSBzaXplO1xuXHQjaWZkZWYgVVNFX1NJWkVBVFRFTlVB
VElPTlxuXHRcdGJvb2wgaXNQZXJzcGVjdGl2ZSA9ICggcHJvamVjdGlvbk1hdHJpeFsgMiBdWyAz
IF0gPT0gLSAxLjAgKTtcblx0XHRpZiAoIGlzUGVyc3BlY3RpdmUgKSBnbF9Qb2ludFNpemUgKj0g
KCBzY2FsZSAvIC0gbXZQb3NpdGlvbi56ICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8bG9nZGVw
dGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2lu
Y2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IjsKIAot
ICAgICAgICBjb250YWluc1BvaW50OiBmdW5jdGlvbiAoKSB7CisgICAgdmFyIHNoYWRvd19mcmFn
ID0gInVuaWZvcm0gdmVjMyBjb2xvcjtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRl
IDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVu
dD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNs
dWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNf
ZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLCBv
cGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xuXHQjaW5jbHVkZSA8Zm9nX2Zy
YWdtZW50PlxufSI7CiAKLSAgICAgICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7CisgICAg
dmFyIHNoYWRvd192ZXJ0ID0gIiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8
c2hhZG93bWFwX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8YmVnaW5f
dmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBv
c192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9n
X3ZlcnRleD5cbn0iOwogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29udGFpbnNQb2lu
dCggcG9pbnQsIGEsIGIsIGMgKSB7CisgICAgdmFyIHNwcml0ZV9mcmFnID0gInVuaWZvcm0gdmVj
MyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNp
bmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50Plxu
I2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNf
ZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lk
IG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMg
b3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQo
IGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50Plxu
XHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50
PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yID0g
dmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHRvbmVt
YXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5j
bHVkZSA8Zm9nX2ZyYWdtZW50PlxufSI7CiAKLSAgICAgICAgICAgICAgICBUcmlhbmdsZS5nZXRC
YXJ5Y29vcmQoIHBvaW50LCBhLCBiLCBjLCB2MSApOworICAgIHZhciBzcHJpdGVfdmVydCA9ICJ1
bmlmb3JtIGZsb2F0IHJvdGF0aW9uO1xudW5pZm9ybSB2ZWMyIGNlbnRlcjtcbiNpbmNsdWRlIDxj
b21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVy
dGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBw
aW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3Zl
cnRleD5cblx0dmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggMC4wLCAw
LjAsIDAuMCwgMS4wICk7XG5cdHZlYzIgc2NhbGU7XG5cdHNjYWxlLnggPSBsZW5ndGgoIHZlYzMo
IG1vZGVsTWF0cml4WyAwIF0ueCwgbW9kZWxNYXRyaXhbIDAgXS55LCBtb2RlbE1hdHJpeFsgMCBd
LnogKSApO1xuXHRzY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLngsIG1v
ZGVsTWF0cml4WyAxIF0ueSwgbW9kZWxNYXRyaXhbIDEgXS56ICkgKTtcblx0I2lmbmRlZiBVU0Vf
U0laRUFUVEVOVUFUSU9OXG5cdFx0Ym9vbCBpc1BlcnNwZWN0aXZlID0gKCBwcm9qZWN0aW9uTWF0
cml4WyAyIF1bIDMgXSA9PSAtIDEuMCApO1xuXHRcdGlmICggaXNQZXJzcGVjdGl2ZSApIHNjYWxl
ICo9IC0gbXZQb3NpdGlvbi56O1xuXHQjZW5kaWZcblx0dmVjMiBhbGlnbmVkUG9zaXRpb24gPSAo
IHBvc2l0aW9uLnh5IC0gKCBjZW50ZXIgLSB2ZWMyKCAwLjUgKSApICkgKiBzY2FsZTtcblx0dmVj
MiByb3RhdGVkUG9zaXRpb247XG5cdHJvdGF0ZWRQb3NpdGlvbi54ID0gY29zKCByb3RhdGlvbiAp
ICogYWxpZ25lZFBvc2l0aW9uLnggLSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24u
eTtcblx0cm90YXRlZFBvc2l0aW9uLnkgPSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRp
b24ueCArIGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xuXHRtdlBvc2l0aW9u
Lnh5ICs9IHJvdGF0ZWRQb3NpdGlvbjtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4
ICogbXZQb3NpdGlvbjtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1
ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSI7
CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gKCB2MS54ID49IDAgKSAmJiAoIHYxLnkgPj0gMCAp
ICYmICggKCB2MS54ICsgdjEueSApIDw9IDEgKTsKKyAgICB2YXIgU2hhZGVyQ2h1bmsgPSB7Cisg
ICAgICAgIGFscGhhbWFwX2ZyYWdtZW50OiBhbHBoYW1hcF9mcmFnbWVudCwKKyAgICAgICAgYWxw
aGFtYXBfcGFyc19mcmFnbWVudDogYWxwaGFtYXBfcGFyc19mcmFnbWVudCwKKyAgICAgICAgYWxw
aGF0ZXN0X2ZyYWdtZW50OiBhbHBoYXRlc3RfZnJhZ21lbnQsCisgICAgICAgIGFvbWFwX2ZyYWdt
ZW50OiBhb21hcF9mcmFnbWVudCwKKyAgICAgICAgYW9tYXBfcGFyc19mcmFnbWVudDogYW9tYXBf
cGFyc19mcmFnbWVudCwKKyAgICAgICAgYmVnaW5fdmVydGV4OiBiZWdpbl92ZXJ0ZXgsCisgICAg
ICAgIGJlZ2lubm9ybWFsX3ZlcnRleDogYmVnaW5ub3JtYWxfdmVydGV4LAorICAgICAgICBic2Rm
czogYnNkZnMsCisgICAgICAgIGJ1bXBtYXBfcGFyc19mcmFnbWVudDogYnVtcG1hcF9wYXJzX2Zy
YWdtZW50LAorICAgICAgICBjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ6IGNsaXBwaW5nX3BsYW5l
c19mcmFnbWVudCwKKyAgICAgICAgY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6IGNsaXBw
aW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50LAorICAgICAgICBjbGlwcGluZ19wbGFuZXNfcGFyc192
ZXJ0ZXg6IGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleCwKKyAgICAgICAgY2xpcHBpbmdfcGxh
bmVzX3ZlcnRleDogY2xpcHBpbmdfcGxhbmVzX3ZlcnRleCwKKyAgICAgICAgY29sb3JfZnJhZ21l
bnQ6IGNvbG9yX2ZyYWdtZW50LAorICAgICAgICBjb2xvcl9wYXJzX2ZyYWdtZW50OiBjb2xvcl9w
YXJzX2ZyYWdtZW50LAorICAgICAgICBjb2xvcl9wYXJzX3ZlcnRleDogY29sb3JfcGFyc192ZXJ0
ZXgsCisgICAgICAgIGNvbG9yX3ZlcnRleDogY29sb3JfdmVydGV4LAorICAgICAgICBjb21tb246
IGNvbW1vbiwKKyAgICAgICAgY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50OiBjdWJlX3V2X3Jl
ZmxlY3Rpb25fZnJhZ21lbnQsCisgICAgICAgIGRlZmF1bHRub3JtYWxfdmVydGV4OiBkZWZhdWx0
bm9ybWFsX3ZlcnRleCwKKyAgICAgICAgZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4OiBkaXNw
bGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXgsCisgICAgICAgIGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6
IGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXgsCisgICAgICAgIGVtaXNzaXZlbWFwX2ZyYWdtZW50OiBl
bWlzc2l2ZW1hcF9mcmFnbWVudCwKKyAgICAgICAgZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudDog
ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudCwKKyAgICAgICAgZW5jb2RpbmdzX2ZyYWdtZW50OiBl
bmNvZGluZ3NfZnJhZ21lbnQsCisgICAgICAgIGVuY29kaW5nc19wYXJzX2ZyYWdtZW50OiBlbmNv
ZGluZ3NfcGFyc19mcmFnbWVudCwKKyAgICAgICAgZW52bWFwX2ZyYWdtZW50OiBlbnZtYXBfZnJh
Z21lbnQsCisgICAgICAgIGVudm1hcF9wYXJzX2ZyYWdtZW50OiBlbnZtYXBfcGFyc19mcmFnbWVu
dCwKKyAgICAgICAgZW52bWFwX3BhcnNfdmVydGV4OiBlbnZtYXBfcGFyc192ZXJ0ZXgsCisgICAg
ICAgIGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiBlbnZtYXBfcGh5c2ljYWxfcGFyc19m
cmFnbWVudCwKKyAgICAgICAgZW52bWFwX3ZlcnRleDogZW52bWFwX3ZlcnRleCwKKyAgICAgICAg
Zm9nX3ZlcnRleDogZm9nX3ZlcnRleCwKKyAgICAgICAgZm9nX3BhcnNfdmVydGV4OiBmb2dfcGFy
c192ZXJ0ZXgsCisgICAgICAgIGZvZ19mcmFnbWVudDogZm9nX2ZyYWdtZW50LAorICAgICAgICBm
b2dfcGFyc19mcmFnbWVudDogZm9nX3BhcnNfZnJhZ21lbnQsCisgICAgICAgIGdyYWRpZW50bWFw
X3BhcnNfZnJhZ21lbnQ6IGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQsCisgICAgICAgIGxpZ2h0
bWFwX2ZyYWdtZW50OiBsaWdodG1hcF9mcmFnbWVudCwKKyAgICAgICAgbGlnaHRtYXBfcGFyc19m
cmFnbWVudDogbGlnaHRtYXBfcGFyc19mcmFnbWVudCwKKyAgICAgICAgbGlnaHRzX2xhbWJlcnRf
dmVydGV4OiBsaWdodHNfbGFtYmVydF92ZXJ0ZXgsCisgICAgICAgIGxpZ2h0c19wYXJzX2JlZ2lu
OiBsaWdodHNfcGFyc19iZWdpbiwKKyAgICAgICAgbGlnaHRzX3Bob25nX2ZyYWdtZW50OiBsaWdo
dHNfcGhvbmdfZnJhZ21lbnQsCisgICAgICAgIGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50OiBs
aWdodHNfcGhvbmdfcGFyc19mcmFnbWVudCwKKyAgICAgICAgbGlnaHRzX3BoeXNpY2FsX2ZyYWdt
ZW50OiBsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQsCisgICAgICAgIGxpZ2h0c19waHlzaWNhbF9w
YXJzX2ZyYWdtZW50OiBsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudCwKKyAgICAgICAgbGln
aHRzX2ZyYWdtZW50X2JlZ2luOiBsaWdodHNfZnJhZ21lbnRfYmVnaW4sCisgICAgICAgIGxpZ2h0
c19mcmFnbWVudF9tYXBzOiBsaWdodHNfZnJhZ21lbnRfbWFwcywKKyAgICAgICAgbGlnaHRzX2Zy
YWdtZW50X2VuZDogbGlnaHRzX2ZyYWdtZW50X2VuZCwKKyAgICAgICAgbG9nZGVwdGhidWZfZnJh
Z21lbnQ6IGxvZ2RlcHRoYnVmX2ZyYWdtZW50LAorICAgICAgICBsb2dkZXB0aGJ1Zl9wYXJzX2Zy
YWdtZW50OiBsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50LAorICAgICAgICBsb2dkZXB0aGJ1Zl9w
YXJzX3ZlcnRleDogbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXgsCisgICAgICAgIGxvZ2RlcHRoYnVm
X3ZlcnRleDogbG9nZGVwdGhidWZfdmVydGV4LAorICAgICAgICBtYXBfZnJhZ21lbnQ6IG1hcF9m
cmFnbWVudCwKKyAgICAgICAgbWFwX3BhcnNfZnJhZ21lbnQ6IG1hcF9wYXJzX2ZyYWdtZW50LAor
ICAgICAgICBtYXBfcGFydGljbGVfZnJhZ21lbnQ6IG1hcF9wYXJ0aWNsZV9mcmFnbWVudCwKKyAg
ICAgICAgbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdt
ZW50LAorICAgICAgICBtZXRhbG5lc3NtYXBfZnJhZ21lbnQ6IG1ldGFsbmVzc21hcF9mcmFnbWVu
dCwKKyAgICAgICAgbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ6IG1ldGFsbmVzc21hcF9wYXJz
X2ZyYWdtZW50LAorICAgICAgICBtb3JwaG5vcm1hbF92ZXJ0ZXg6IG1vcnBobm9ybWFsX3ZlcnRl
eCwKKyAgICAgICAgbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6IG1vcnBodGFyZ2V0X3BhcnNfdmVy
dGV4LAorICAgICAgICBtb3JwaHRhcmdldF92ZXJ0ZXg6IG1vcnBodGFyZ2V0X3ZlcnRleCwKKyAg
ICAgICAgbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiBub3JtYWxfZnJhZ21lbnRfYmVnaW4sCisgICAg
ICAgIG5vcm1hbF9mcmFnbWVudF9tYXBzOiBub3JtYWxfZnJhZ21lbnRfbWFwcywKKyAgICAgICAg
bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50LAorICAgICAg
ICBwYWNraW5nOiBwYWNraW5nLAorICAgICAgICBwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50
OiBwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50LAorICAgICAgICBwcm9qZWN0X3ZlcnRleDog
cHJvamVjdF92ZXJ0ZXgsCisgICAgICAgIGRpdGhlcmluZ19mcmFnbWVudDogZGl0aGVyaW5nX2Zy
YWdtZW50LAorICAgICAgICBkaXRoZXJpbmdfcGFyc19mcmFnbWVudDogZGl0aGVyaW5nX3BhcnNf
ZnJhZ21lbnQsCisgICAgICAgIHJvdWdobmVzc21hcF9mcmFnbWVudDogcm91Z2huZXNzbWFwX2Zy
YWdtZW50LAorICAgICAgICByb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDogcm91Z2huZXNzbWFw
X3BhcnNfZnJhZ21lbnQsCisgICAgICAgIHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OiBzaGFkb3dt
YXBfcGFyc19mcmFnbWVudCwKKyAgICAgICAgc2hhZG93bWFwX3BhcnNfdmVydGV4OiBzaGFkb3dt
YXBfcGFyc192ZXJ0ZXgsCisgICAgICAgIHNoYWRvd21hcF92ZXJ0ZXg6IHNoYWRvd21hcF92ZXJ0
ZXgsCisgICAgICAgIHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDogc2hhZG93bWFza19wYXJzX2Zy
YWdtZW50LAorICAgICAgICBza2luYmFzZV92ZXJ0ZXg6IHNraW5iYXNlX3ZlcnRleCwKKyAgICAg
ICAgc2tpbm5pbmdfcGFyc192ZXJ0ZXg6IHNraW5uaW5nX3BhcnNfdmVydGV4LAorICAgICAgICBz
a2lubmluZ192ZXJ0ZXg6IHNraW5uaW5nX3ZlcnRleCwKKyAgICAgICAgc2tpbm5vcm1hbF92ZXJ0
ZXg6IHNraW5ub3JtYWxfdmVydGV4LAorICAgICAgICBzcGVjdWxhcm1hcF9mcmFnbWVudDogc3Bl
Y3VsYXJtYXBfZnJhZ21lbnQsCisgICAgICAgIHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ6IHNw
ZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQsCisgICAgICAgIHRvbmVtYXBwaW5nX2ZyYWdtZW50OiB0
b25lbWFwcGluZ19mcmFnbWVudCwKKyAgICAgICAgdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDog
dG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudCwKKyAgICAgICAgdXZfcGFyc19mcmFnbWVudDogdXZf
cGFyc19mcmFnbWVudCwKKyAgICAgICAgdXZfcGFyc192ZXJ0ZXg6IHV2X3BhcnNfdmVydGV4LAor
ICAgICAgICB1dl92ZXJ0ZXg6IHV2X3ZlcnRleCwKKyAgICAgICAgdXYyX3BhcnNfZnJhZ21lbnQ6
IHV2Ml9wYXJzX2ZyYWdtZW50LAorICAgICAgICB1djJfcGFyc192ZXJ0ZXg6IHV2Ml9wYXJzX3Zl
cnRleCwKKyAgICAgICAgdXYyX3ZlcnRleDogdXYyX3ZlcnRleCwKKyAgICAgICAgd29ybGRwb3Nf
dmVydGV4OiB3b3JsZHBvc192ZXJ0ZXgsCiAKLSAgICAgICAgICAgIH07CisgICAgICAgIGJhY2tn
cm91bmRfZnJhZzogYmFja2dyb3VuZF9mcmFnLAorICAgICAgICBiYWNrZ3JvdW5kX3ZlcnQ6IGJh
Y2tncm91bmRfdmVydCwKKyAgICAgICAgY3ViZV9mcmFnOiBjdWJlX2ZyYWcsCisgICAgICAgIGN1
YmVfdmVydDogY3ViZV92ZXJ0LAorICAgICAgICBkZXB0aF9mcmFnOiBkZXB0aF9mcmFnLAorICAg
ICAgICBkZXB0aF92ZXJ0OiBkZXB0aF92ZXJ0LAorICAgICAgICBkaXN0YW5jZVJHQkFfZnJhZzog
ZGlzdGFuY2VSR0JBX2ZyYWcsCisgICAgICAgIGRpc3RhbmNlUkdCQV92ZXJ0OiBkaXN0YW5jZVJH
QkFfdmVydCwKKyAgICAgICAgZXF1aXJlY3RfZnJhZzogZXF1aXJlY3RfZnJhZywKKyAgICAgICAg
ZXF1aXJlY3RfdmVydDogZXF1aXJlY3RfdmVydCwKKyAgICAgICAgbGluZWRhc2hlZF9mcmFnOiBs
aW5lZGFzaGVkX2ZyYWcsCisgICAgICAgIGxpbmVkYXNoZWRfdmVydDogbGluZWRhc2hlZF92ZXJ0
LAorICAgICAgICBtZXNoYmFzaWNfZnJhZzogbWVzaGJhc2ljX2ZyYWcsCisgICAgICAgIG1lc2hi
YXNpY192ZXJ0OiBtZXNoYmFzaWNfdmVydCwKKyAgICAgICAgbWVzaGxhbWJlcnRfZnJhZzogbWVz
aGxhbWJlcnRfZnJhZywKKyAgICAgICAgbWVzaGxhbWJlcnRfdmVydDogbWVzaGxhbWJlcnRfdmVy
dCwKKyAgICAgICAgbWVzaG1hdGNhcF9mcmFnOiBtZXNobWF0Y2FwX2ZyYWcsCisgICAgICAgIG1l
c2htYXRjYXBfdmVydDogbWVzaG1hdGNhcF92ZXJ0LAorICAgICAgICBtZXNocGhvbmdfZnJhZzog
bWVzaHBob25nX2ZyYWcsCisgICAgICAgIG1lc2hwaG9uZ192ZXJ0OiBtZXNocGhvbmdfdmVydCwK
KyAgICAgICAgbWVzaHBoeXNpY2FsX2ZyYWc6IG1lc2hwaHlzaWNhbF9mcmFnLAorICAgICAgICBt
ZXNocGh5c2ljYWxfdmVydDogbWVzaHBoeXNpY2FsX3ZlcnQsCisgICAgICAgIG5vcm1hbF9mcmFn
OiBub3JtYWxfZnJhZywKKyAgICAgICAgbm9ybWFsX3ZlcnQ6IG5vcm1hbF92ZXJ0LAorICAgICAg
ICBwb2ludHNfZnJhZzogcG9pbnRzX2ZyYWcsCisgICAgICAgIHBvaW50c192ZXJ0OiBwb2ludHNf
dmVydCwKKyAgICAgICAgc2hhZG93X2ZyYWc6IHNoYWRvd19mcmFnLAorICAgICAgICBzaGFkb3df
dmVydDogc2hhZG93X3ZlcnQsCisgICAgICAgIHNwcml0ZV9mcmFnOiBzcHJpdGVfZnJhZywKKyAg
ICAgICAgc3ByaXRlX3ZlcnQ6IHNwcml0ZV92ZXJ0CisgICAgfTsKIAotICAgICAgICB9KCkKKyAg
ICAvKioKKyAgICAgKiBVbmlmb3JtcyBsaWJyYXJ5IGZvciBzaGFyZWQgd2ViZ2wgc2hhZGVycwor
ICAgICAqLwogCi0gICAgfSApOworICAgIHZhciBVbmlmb3Jtc0xpYiA9IHsKIAotICAgIE9iamVj
dC5hc3NpZ24oIFRyaWFuZ2xlLnByb3RvdHlwZSwgeworICAgICAgICBjb21tb246IHsKIAotICAg
ICAgICBzZXQ6IGZ1bmN0aW9uICggYSwgYiwgYyApIHsKKyAgICAgICAgICAgIGRpZmZ1c2U6IHsg
dmFsdWU6IG5ldyBDb2xvciggMHhlZWVlZWUgKSB9LAorICAgICAgICAgICAgb3BhY2l0eTogeyB2
YWx1ZTogMS4wIH0sCiAKLSAgICAgICAgICAgIHRoaXMuYS5jb3B5KCBhICk7Ci0gICAgICAgICAg
ICB0aGlzLmIuY29weSggYiApOwotICAgICAgICAgICAgdGhpcy5jLmNvcHkoIGMgKTsKKyAgICAg
ICAgICAgIG1hcDogeyB2YWx1ZTogbnVsbCB9LAorICAgICAgICAgICAgdXZUcmFuc2Zvcm06IHsg
dmFsdWU6IG5ldyBNYXRyaXgzKCkgfSwKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgICAgICBhbHBoYU1hcDogeyB2YWx1ZTogbnVsbCB9LAogCiAgICAgICAgIH0sCiAKLSAgICAg
ICAgc2V0RnJvbVBvaW50c0FuZEluZGljZXM6IGZ1bmN0aW9uICggcG9pbnRzLCBpMCwgaTEsIGky
ICkgewotCi0gICAgICAgICAgICB0aGlzLmEuY29weSggcG9pbnRzWyBpMCBdICk7Ci0gICAgICAg
ICAgICB0aGlzLmIuY29weSggcG9pbnRzWyBpMSBdICk7Ci0gICAgICAgICAgICB0aGlzLmMuY29w
eSggcG9pbnRzWyBpMiBdICk7CisgICAgICAgIHNwZWN1bGFybWFwOiB7CiAKLSAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICAgICAgc3BlY3VsYXJNYXA6IHsgdmFsdWU6IG51bGwgfSwK
IAogICAgICAgICB9LAogCi0gICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGVu
dm1hcDogewogCi0gICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5
KCB0aGlzICk7CisgICAgICAgICAgICBlbnZNYXA6IHsgdmFsdWU6IG51bGwgfSwKKyAgICAgICAg
ICAgIGZsaXBFbnZNYXA6IHsgdmFsdWU6IC0gMSB9LAorICAgICAgICAgICAgcmVmbGVjdGl2aXR5
OiB7IHZhbHVlOiAxLjAgfSwKKyAgICAgICAgICAgIHJlZnJhY3Rpb25SYXRpbzogeyB2YWx1ZTog
MC45OCB9LAorICAgICAgICAgICAgbWF4TWlwTGV2ZWw6IHsgdmFsdWU6IDAgfQogCiAgICAgICAg
IH0sCiAKLSAgICAgICAgY29weTogZnVuY3Rpb24gKCB0cmlhbmdsZSApIHsKLQotICAgICAgICAg
ICAgdGhpcy5hLmNvcHkoIHRyaWFuZ2xlLmEgKTsKLSAgICAgICAgICAgIHRoaXMuYi5jb3B5KCB0
cmlhbmdsZS5iICk7Ci0gICAgICAgICAgICB0aGlzLmMuY29weSggdHJpYW5nbGUuYyApOworICAg
ICAgICBhb21hcDogewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIGFv
TWFwOiB7IHZhbHVlOiBudWxsIH0sCisgICAgICAgICAgICBhb01hcEludGVuc2l0eTogeyB2YWx1
ZTogMSB9CiAKICAgICAgICAgfSwKIAotICAgICAgICBnZXRBcmVhOiBmdW5jdGlvbiAoKSB7Ci0K
LSAgICAgICAgICAgIHZhciB2MCA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICB2YXIgdjEg
PSBuZXcgVmVjdG9yMygpOwotCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZ2V0QXJlYSgp
IHsKLQotICAgICAgICAgICAgICAgIHYwLnN1YlZlY3RvcnMoIHRoaXMuYywgdGhpcy5iICk7Ci0g
ICAgICAgICAgICAgICAgdjEuc3ViVmVjdG9ycyggdGhpcy5hLCB0aGlzLmIgKTsKLQotICAgICAg
ICAgICAgICAgIHJldHVybiB2MC5jcm9zcyggdjEgKS5sZW5ndGgoKSAqIDAuNTsKLQotICAgICAg
ICAgICAgfTsKLQotICAgICAgICB9KCksCi0KLSAgICAgICAgZ2V0TWlkcG9pbnQ6IGZ1bmN0aW9u
ICggdGFyZ2V0ICkgewotCi0gICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVkICkg
ewotCi0gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuVHJpYW5nbGU6IC5nZXRN
aWRwb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7Ci0gICAgICAgICAgICAgICAgdGFy
Z2V0ID0gbmV3IFZlY3RvcjMoKTsKLQotICAgICAgICAgICAgfQorICAgICAgICBsaWdodG1hcDog
ewogCi0gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFkZFZlY3RvcnMoIHRoaXMuYSwgdGhpcy5i
ICkuYWRkKCB0aGlzLmMgKS5tdWx0aXBseVNjYWxhciggMSAvIDMgKTsKKyAgICAgICAgICAgIGxp
Z2h0TWFwOiB7IHZhbHVlOiBudWxsIH0sCisgICAgICAgICAgICBsaWdodE1hcEludGVuc2l0eTog
eyB2YWx1ZTogMSB9CiAKICAgICAgICAgfSwKIAotICAgICAgICBnZXROb3JtYWw6IGZ1bmN0aW9u
ICggdGFyZ2V0ICkgeworICAgICAgICBlbWlzc2l2ZW1hcDogewogCi0gICAgICAgICAgICByZXR1
cm4gVHJpYW5nbGUuZ2V0Tm9ybWFsKCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5jLCB0YXJnZXQgKTsK
KyAgICAgICAgICAgIGVtaXNzaXZlTWFwOiB7IHZhbHVlOiBudWxsIH0KIAogICAgICAgICB9LAog
Ci0gICAgICAgIGdldFBsYW5lOiBmdW5jdGlvbiAoIHRhcmdldCApIHsKLQotICAgICAgICAgICAg
aWYgKCB0YXJnZXQgPT09IHVuZGVmaW5lZCApIHsKLQotICAgICAgICAgICAgICAgIGNvbnNvbGUu
d2FybiggJ1RIUkVFLlRyaWFuZ2xlOiAuZ2V0UGxhbmUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVk
JyApOwotICAgICAgICAgICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKCk7Ci0KLSAgICAgICAg
ICAgIH0KKyAgICAgICAgYnVtcG1hcDogewogCi0gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LnNl
dEZyb21Db3BsYW5hclBvaW50cyggdGhpcy5hLCB0aGlzLmIsIHRoaXMuYyApOworICAgICAgICAg
ICAgYnVtcE1hcDogeyB2YWx1ZTogbnVsbCB9LAorICAgICAgICAgICAgYnVtcFNjYWxlOiB7IHZh
bHVlOiAxIH0KIAogICAgICAgICB9LAogCi0gICAgICAgIGdldEJhcnljb29yZDogZnVuY3Rpb24g
KCBwb2ludCwgdGFyZ2V0ICkgeworICAgICAgICBub3JtYWxtYXA6IHsKIAotICAgICAgICAgICAg
cmV0dXJuIFRyaWFuZ2xlLmdldEJhcnljb29yZCggcG9pbnQsIHRoaXMuYSwgdGhpcy5iLCB0aGlz
LmMsIHRhcmdldCApOworICAgICAgICAgICAgbm9ybWFsTWFwOiB7IHZhbHVlOiBudWxsIH0sCisg
ICAgICAgICAgICBub3JtYWxTY2FsZTogeyB2YWx1ZTogbmV3IFZlY3RvcjIoIDEsIDEgKSB9CiAK
ICAgICAgICAgfSwKIAotICAgICAgICBjb250YWluc1BvaW50OiBmdW5jdGlvbiAoIHBvaW50ICkg
eworICAgICAgICBkaXNwbGFjZW1lbnRtYXA6IHsKIAotICAgICAgICAgICAgcmV0dXJuIFRyaWFu
Z2xlLmNvbnRhaW5zUG9pbnQoIHBvaW50LCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5jICk7CisgICAg
ICAgICAgICBkaXNwbGFjZW1lbnRNYXA6IHsgdmFsdWU6IG51bGwgfSwKKyAgICAgICAgICAgIGRp
c3BsYWNlbWVudFNjYWxlOiB7IHZhbHVlOiAxIH0sCisgICAgICAgICAgICBkaXNwbGFjZW1lbnRC
aWFzOiB7IHZhbHVlOiAwIH0KIAogICAgICAgICB9LAogCi0gICAgICAgIGludGVyc2VjdHNCb3g6
IGZ1bmN0aW9uICggYm94ICkgeworICAgICAgICByb3VnaG5lc3NtYXA6IHsKIAotICAgICAgICAg
ICAgcmV0dXJuIGJveC5pbnRlcnNlY3RzVHJpYW5nbGUoIHRoaXMgKTsKKyAgICAgICAgICAgIHJv
dWdobmVzc01hcDogeyB2YWx1ZTogbnVsbCB9CiAKICAgICAgICAgfSwKIAotICAgICAgICBjbG9z
ZXN0UG9pbnRUb1BvaW50OiBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAgIHZhciBwbGFuZSA9
IG5ldyBQbGFuZSgpOwotICAgICAgICAgICAgdmFyIGVkZ2VMaXN0ID0gWyBuZXcgTGluZTMoKSwg
bmV3IExpbmUzKCksIG5ldyBMaW5lMygpIF07Ci0gICAgICAgICAgICB2YXIgcHJvamVjdGVkUG9p
bnQgPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgdmFyIGNsb3Nlc3RQb2ludCA9IG5ldyBW
ZWN0b3IzKCk7CisgICAgICAgIG1ldGFsbmVzc21hcDogewogCi0gICAgICAgICAgICByZXR1cm4g
ZnVuY3Rpb24gY2xvc2VzdFBvaW50VG9Qb2ludCggcG9pbnQsIHRhcmdldCApIHsKKyAgICAgICAg
ICAgIG1ldGFsbmVzc01hcDogeyB2YWx1ZTogbnVsbCB9CiAKLSAgICAgICAgICAgICAgICBpZiAo
IHRhcmdldCA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlRyaWFuZ2xlOiAuY2xvc2VzdFBvaW50VG9Qb2ludCgp
IHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldCA9
IG5ldyBWZWN0b3IzKCk7CisgICAgICAgIGdyYWRpZW50bWFwOiB7CiAKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICBncmFkaWVudE1hcDogeyB2YWx1ZTogbnVsbCB9CiAKLSAgICAgICAg
ICAgICAgICB2YXIgbWluRGlzdGFuY2UgPSBJbmZpbml0eTsKKyAgICAgICAgfSwKIAotICAgICAg
ICAgICAgICAgIC8vIHByb2plY3QgdGhlIHBvaW50IG9udG8gdGhlIHBsYW5lIG9mIHRoZSB0cmlh
bmdsZQorICAgICAgICBmb2c6IHsKIAotICAgICAgICAgICAgICAgIHBsYW5lLnNldEZyb21Db3Bs
YW5hclBvaW50cyggdGhpcy5hLCB0aGlzLmIsIHRoaXMuYyApOwotICAgICAgICAgICAgICAgIHBs
YW5lLnByb2plY3RQb2ludCggcG9pbnQsIHByb2plY3RlZFBvaW50ICk7CisgICAgICAgICAgICBm
b2dEZW5zaXR5OiB7IHZhbHVlOiAwLjAwMDI1IH0sCisgICAgICAgICAgICBmb2dOZWFyOiB7IHZh
bHVlOiAxIH0sCisgICAgICAgICAgICBmb2dGYXI6IHsgdmFsdWU6IDIwMDAgfSwKKyAgICAgICAg
ICAgIGZvZ0NvbG9yOiB7IHZhbHVlOiBuZXcgQ29sb3IoIDB4ZmZmZmZmICkgfQogCi0gICAgICAg
ICAgICAgICAgLy8gY2hlY2sgaWYgdGhlIHByb2plY3Rpb24gbGllcyB3aXRoaW4gdGhlIHRyaWFu
Z2xlCisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICBpZiAoIHRoaXMuY29udGFpbnNQb2lu
dCggcHJvamVjdGVkUG9pbnQgKSA9PT0gdHJ1ZSApIHsKKyAgICAgICAgbGlnaHRzOiB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgLy8gaWYgc28sIHRoaXMgaXMgdGhlIGNsb3Nlc3QgcG9pbnQKKyAg
ICAgICAgICAgIGFtYmllbnRMaWdodENvbG9yOiB7IHZhbHVlOiBbXSB9LAogCi0gICAgICAgICAg
ICAgICAgICAgIHRhcmdldC5jb3B5KCBwcm9qZWN0ZWRQb2ludCApOworICAgICAgICAgICAgbGln
aHRQcm9iZTogeyB2YWx1ZTogW10gfSwKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBkaXJlY3Rpb25hbExpZ2h0czogeyB2YWx1ZTogW10sIHByb3BlcnRpZXM6IHsKKyAg
ICAgICAgICAgICAgICBkaXJlY3Rpb246IHt9LAorICAgICAgICAgICAgICAgIGNvbG9yOiB7fSwK
IAotICAgICAgICAgICAgICAgICAgICAvLyBpZiBub3QsIHRoZSBwb2ludCBmYWxscyBvdXRzaWRl
IHRoZSB0cmlhbmdsZS4gdGhlIHRhcmdldCBpcyB0aGUgY2xvc2VzdCBwb2ludCB0byB0aGUgdHJp
YW5nbGUncyBlZGdlcyBvciB2ZXJ0aWNlcworICAgICAgICAgICAgICAgIHNoYWRvdzoge30sCisg
ICAgICAgICAgICAgICAgc2hhZG93Qmlhczoge30sCisgICAgICAgICAgICAgICAgc2hhZG93UmFk
aXVzOiB7fSwKKyAgICAgICAgICAgICAgICBzaGFkb3dNYXBTaXplOiB7fQorICAgICAgICAgICAg
fSB9LAogCi0gICAgICAgICAgICAgICAgICAgIGVkZ2VMaXN0WyAwIF0uc2V0KCB0aGlzLmEsIHRo
aXMuYiApOwotICAgICAgICAgICAgICAgICAgICBlZGdlTGlzdFsgMSBdLnNldCggdGhpcy5iLCB0
aGlzLmMgKTsKLSAgICAgICAgICAgICAgICAgICAgZWRnZUxpc3RbIDIgXS5zZXQoIHRoaXMuYywg
dGhpcy5hICk7CisgICAgICAgICAgICBkaXJlY3Rpb25hbFNoYWRvd01hcDogeyB2YWx1ZTogW10g
fSwKKyAgICAgICAgICAgIGRpcmVjdGlvbmFsU2hhZG93TWF0cml4OiB7IHZhbHVlOiBbXSB9LAog
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGVkZ2VMaXN0Lmxlbmd0
aDsgaSArKyApIHsKKyAgICAgICAgICAgIHNwb3RMaWdodHM6IHsgdmFsdWU6IFtdLCBwcm9wZXJ0
aWVzOiB7CisgICAgICAgICAgICAgICAgY29sb3I6IHt9LAorICAgICAgICAgICAgICAgIHBvc2l0
aW9uOiB7fSwKKyAgICAgICAgICAgICAgICBkaXJlY3Rpb246IHt9LAorICAgICAgICAgICAgICAg
IGRpc3RhbmNlOiB7fSwKKyAgICAgICAgICAgICAgICBjb25lQ29zOiB7fSwKKyAgICAgICAgICAg
ICAgICBwZW51bWJyYUNvczoge30sCisgICAgICAgICAgICAgICAgZGVjYXk6IHt9LAogCi0gICAg
ICAgICAgICAgICAgICAgICAgICBlZGdlTGlzdFsgaSBdLmNsb3Nlc3RQb2ludFRvUG9pbnQoIHBy
b2plY3RlZFBvaW50LCB0cnVlLCBjbG9zZXN0UG9pbnQgKTsKKyAgICAgICAgICAgICAgICBzaGFk
b3c6IHt9LAorICAgICAgICAgICAgICAgIHNoYWRvd0JpYXM6IHt9LAorICAgICAgICAgICAgICAg
IHNoYWRvd1JhZGl1czoge30sCisgICAgICAgICAgICAgICAgc2hhZG93TWFwU2l6ZToge30KKyAg
ICAgICAgICAgIH0gfSwKIAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0g
cHJvamVjdGVkUG9pbnQuZGlzdGFuY2VUb1NxdWFyZWQoIGNsb3Nlc3RQb2ludCApOworICAgICAg
ICAgICAgc3BvdFNoYWRvd01hcDogeyB2YWx1ZTogW10gfSwKKyAgICAgICAgICAgIHNwb3RTaGFk
b3dNYXRyaXg6IHsgdmFsdWU6IFtdIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZGlzdGFuY2UgPCBtaW5EaXN0YW5jZSApIHsKKyAgICAgICAgICAgIHBvaW50TGlnaHRzOiB7IHZh
bHVlOiBbXSwgcHJvcGVydGllczogeworICAgICAgICAgICAgICAgIGNvbG9yOiB7fSwKKyAgICAg
ICAgICAgICAgICBwb3NpdGlvbjoge30sCisgICAgICAgICAgICAgICAgZGVjYXk6IHt9LAorICAg
ICAgICAgICAgICAgIGRpc3RhbmNlOiB7fSwKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7CisgICAgICAgICAgICAgICAgc2hhZG93OiB7fSwKKyAg
ICAgICAgICAgICAgICBzaGFkb3dCaWFzOiB7fSwKKyAgICAgICAgICAgICAgICBzaGFkb3dSYWRp
dXM6IHt9LAorICAgICAgICAgICAgICAgIHNoYWRvd01hcFNpemU6IHt9LAorICAgICAgICAgICAg
ICAgIHNoYWRvd0NhbWVyYU5lYXI6IHt9LAorICAgICAgICAgICAgICAgIHNoYWRvd0NhbWVyYUZh
cjoge30KKyAgICAgICAgICAgIH0gfSwKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRh
cmdldC5jb3B5KCBjbG9zZXN0UG9pbnQgKTsKKyAgICAgICAgICAgIHBvaW50U2hhZG93TWFwOiB7
IHZhbHVlOiBbXSB9LAorICAgICAgICAgICAgcG9pbnRTaGFkb3dNYXRyaXg6IHsgdmFsdWU6IFtd
IH0sCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhlbWlzcGhlcmVM
aWdodHM6IHsgdmFsdWU6IFtdLCBwcm9wZXJ0aWVzOiB7CisgICAgICAgICAgICAgICAgZGlyZWN0
aW9uOiB7fSwKKyAgICAgICAgICAgICAgICBza3lDb2xvcjoge30sCisgICAgICAgICAgICAgICAg
Z3JvdW5kQ29sb3I6IHt9CisgICAgICAgICAgICB9IH0sCiAKLSAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgLy8gVE9ETyAoYWJlbG5hdGlvbik6IFJlY3RBcmVhTGlnaHQgQlJERiBk
YXRhIG5lZWRzIHRvIGJlIG1vdmVkIGZyb20gZXhhbXBsZSB0byBtYWluIHNyYworICAgICAgICAg
ICAgcmVjdEFyZWFMaWdodHM6IHsgdmFsdWU6IFtdLCBwcm9wZXJ0aWVzOiB7CisgICAgICAgICAg
ICAgICAgY29sb3I6IHt9LAorICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7fSwKKyAgICAgICAg
ICAgICAgICB3aWR0aDoge30sCisgICAgICAgICAgICAgICAgaGVpZ2h0OiB7fQorICAgICAgICAg
ICAgfSB9CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdGFyZ2V0OworICAgICAgICBwb2ludHM6IHsKIAotICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGRpZmZ1c2U6IHsgdmFsdWU6IG5ldyBDb2xvciggMHhlZWVlZWUgKSB9LAorICAg
ICAgICAgICAgb3BhY2l0eTogeyB2YWx1ZTogMS4wIH0sCisgICAgICAgICAgICBzaXplOiB7IHZh
bHVlOiAxLjAgfSwKKyAgICAgICAgICAgIHNjYWxlOiB7IHZhbHVlOiAxLjAgfSwKKyAgICAgICAg
ICAgIG1hcDogeyB2YWx1ZTogbnVsbCB9LAorICAgICAgICAgICAgdXZUcmFuc2Zvcm06IHsgdmFs
dWU6IG5ldyBNYXRyaXgzKCkgfQogCi0gICAgICAgIH0oKSwKKyAgICAgICAgfSwKIAotICAgICAg
ICBlcXVhbHM6IGZ1bmN0aW9uICggdHJpYW5nbGUgKSB7CisgICAgICAgIHNwcml0ZTogewogCi0g
ICAgICAgICAgICByZXR1cm4gdHJpYW5nbGUuYS5lcXVhbHMoIHRoaXMuYSApICYmIHRyaWFuZ2xl
LmIuZXF1YWxzKCB0aGlzLmIgKSAmJiB0cmlhbmdsZS5jLmVxdWFscyggdGhpcy5jICk7CisgICAg
ICAgICAgICBkaWZmdXNlOiB7IHZhbHVlOiBuZXcgQ29sb3IoIDB4ZWVlZWVlICkgfSwKKyAgICAg
ICAgICAgIG9wYWNpdHk6IHsgdmFsdWU6IDEuMCB9LAorICAgICAgICAgICAgY2VudGVyOiB7IHZh
bHVlOiBuZXcgVmVjdG9yMiggMC41LCAwLjUgKSB9LAorICAgICAgICAgICAgcm90YXRpb246IHsg
dmFsdWU6IDAuMCB9LAorICAgICAgICAgICAgbWFwOiB7IHZhbHVlOiBudWxsIH0sCisgICAgICAg
ICAgICB1dlRyYW5zZm9ybTogeyB2YWx1ZTogbmV3IE1hdHJpeDMoKSB9CiAKICAgICAgICAgfQog
Ci0gICAgfSApOworICAgIH07CiAKICAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0
dHA6Ly9tcmRvb2IuY29tLwogICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJl
ZHF1YWxpYS5jb20vCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8K
ICAgICAgKiBAYXV0aG9yIG1pa2FlbCBlbXRpbmdlciAvIGh0dHA6Ly9nb21vLnNlLwotICAgICAq
IEBhdXRob3Igam9ub2JyMSAvIGh0dHA6Ly9qb25vYnIxLmNvbS8KICAgICAgKi8KIAotICAgIGZ1
bmN0aW9uIE1lc2goIGdlb21ldHJ5LCBtYXRlcmlhbCApIHsKLQotICAgICAgICBPYmplY3QzRC5j
YWxsKCB0aGlzICk7Ci0KLSAgICAgICAgdGhpcy50eXBlID0gJ01lc2gnOwotCi0gICAgICAgIHRo
aXMuZ2VvbWV0cnkgPSBnZW9tZXRyeSAhPT0gdW5kZWZpbmVkID8gZ2VvbWV0cnkgOiBuZXcgQnVm
ZmVyR2VvbWV0cnkoKTsKLSAgICAgICAgdGhpcy5tYXRlcmlhbCA9IG1hdGVyaWFsICE9PSB1bmRl
ZmluZWQgPyBtYXRlcmlhbCA6IG5ldyBNZXNoQmFzaWNNYXRlcmlhbCggeyBjb2xvcjogTWF0aC5y
YW5kb20oKSAqIDB4ZmZmZmZmIH0gKTsKLQotICAgICAgICB0aGlzLmRyYXdNb2RlID0gVHJpYW5n
bGVzRHJhd01vZGU7Ci0KLSAgICAgICAgdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKTsKLQotICAg
IH0KLQotICAgIE1lc2gucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSgg
T2JqZWN0M0QucHJvdG90eXBlICksIHsKLQotICAgICAgICBjb25zdHJ1Y3RvcjogTWVzaCwKKyAg
ICB2YXIgU2hhZGVyTGliID0gewogCi0gICAgICAgIGlzTWVzaDogdHJ1ZSwKKyAgICAgICAgYmFz
aWM6IHsKIAotICAgICAgICBzZXREcmF3TW9kZTogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKyAgICAg
ICAgICAgIHVuaWZvcm1zOiBtZXJnZVVuaWZvcm1zKCBbCisgICAgICAgICAgICAgICAgVW5pZm9y
bXNMaWIuY29tbW9uLAorICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLnNwZWN1bGFybWFwLAor
ICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmVudm1hcCwKKyAgICAgICAgICAgICAgICBVbmlm
b3Jtc0xpYi5hb21hcCwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5saWdodG1hcCwKKyAg
ICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5mb2cKKyAgICAgICAgICAgIF0gKSwKIAotICAgICAg
ICAgICAgdGhpcy5kcmF3TW9kZSA9IHZhbHVlOworICAgICAgICAgICAgdmVydGV4U2hhZGVyOiBT
aGFkZXJDaHVuay5tZXNoYmFzaWNfdmVydCwKKyAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiBT
aGFkZXJDaHVuay5tZXNoYmFzaWNfZnJhZwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgY29weTog
ZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisgICAgICAgIGxhbWJlcnQ6IHsKIAotICAgICAgICAgICAg
T2JqZWN0M0QucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CisgICAgICAgICAg
ICB1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyggWworICAgICAgICAgICAgICAgIFVuaWZvcm1zTGli
LmNvbW1vbiwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5zcGVjdWxhcm1hcCwKKyAgICAg
ICAgICAgICAgICBVbmlmb3Jtc0xpYi5lbnZtYXAsCisgICAgICAgICAgICAgICAgVW5pZm9ybXNM
aWIuYW9tYXAsCisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIubGlnaHRtYXAsCisgICAgICAg
ICAgICAgICAgVW5pZm9ybXNMaWIuZW1pc3NpdmVtYXAsCisgICAgICAgICAgICAgICAgVW5pZm9y
bXNMaWIuZm9nLAorICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmxpZ2h0cywKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVtaXNzaXZlOiB7IHZhbHVlOiBuZXcgQ29s
b3IoIDB4MDAwMDAwICkgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0gKSwKIAot
ICAgICAgICAgICAgdGhpcy5kcmF3TW9kZSA9IHNvdXJjZS5kcmF3TW9kZTsKKyAgICAgICAgICAg
IHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaGxhbWJlcnRfdmVydCwKKyAgICAgICAgICAg
IGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNobGFtYmVydF9mcmFnCiAKLSAgICAgICAg
ICAgIGlmICggc291cmNlLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyAhPT0gdW5kZWZpbmVkICkgewor
ICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgdGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMg
PSBzb3VyY2UubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnNsaWNlKCk7CisgICAgICAgIHBob25nOiB7
CiAKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCBzb3VyY2UubW9ycGhUYXJnZXRE
aWN0aW9uYXJ5ICE9PSB1bmRlZmluZWQgKSB7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLm1vcnBo
VGFyZ2V0RGljdGlvbmFyeSA9IE9iamVjdC5hc3NpZ24oIHt9LCBzb3VyY2UubW9ycGhUYXJnZXRE
aWN0aW9uYXJ5ICk7Ci0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVuaWZvcm1zOiBtZXJn
ZVVuaWZvcm1zKCBbCisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuY29tbW9uLAorICAgICAg
ICAgICAgICAgIFVuaWZvcm1zTGliLnNwZWN1bGFybWFwLAorICAgICAgICAgICAgICAgIFVuaWZv
cm1zTGliLmVudm1hcCwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5hb21hcCwKKyAgICAg
ICAgICAgICAgICBVbmlmb3Jtc0xpYi5saWdodG1hcCwKKyAgICAgICAgICAgICAgICBVbmlmb3Jt
c0xpYi5lbWlzc2l2ZW1hcCwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5idW1wbWFwLAor
ICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLm5vcm1hbG1hcCwKKyAgICAgICAgICAgICAgICBV
bmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXAsCisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIu
Z3JhZGllbnRtYXAsCisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuZm9nLAorICAgICAgICAg
ICAgICAgIFVuaWZvcm1zTGliLmxpZ2h0cywKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGVtaXNzaXZlOiB7IHZhbHVlOiBuZXcgQ29sb3IoIDB4MDAwMDAwICkgfSwKKyAg
ICAgICAgICAgICAgICAgICAgc3BlY3VsYXI6IHsgdmFsdWU6IG5ldyBDb2xvciggMHgxMTExMTEg
KSB9LAorICAgICAgICAgICAgICAgICAgICBzaGluaW5lc3M6IHsgdmFsdWU6IDMwIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICBdICksCiAKLSAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICAgICAgdmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNocGhvbmdfdmVydCwK
KyAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNocGhvbmdfZnJhZwog
CiAgICAgICAgIH0sCiAKLSAgICAgICAgdXBkYXRlTW9ycGhUYXJnZXRzOiBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHN0YW5kYXJkOiB7CiAKLSAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IHRoaXMu
Z2VvbWV0cnk7Ci0gICAgICAgICAgICB2YXIgbSwgbWwsIG5hbWU7CisgICAgICAgICAgICB1bmlm
b3JtczogbWVyZ2VVbmlmb3JtcyggWworICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmNvbW1v
biwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5lbnZtYXAsCisgICAgICAgICAgICAgICAg
VW5pZm9ybXNMaWIuYW9tYXAsCisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIubGlnaHRtYXAs
CisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuZW1pc3NpdmVtYXAsCisgICAgICAgICAgICAg
ICAgVW5pZm9ybXNMaWIuYnVtcG1hcCwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5ub3Jt
YWxtYXAsCisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuZGlzcGxhY2VtZW50bWFwLAorICAg
ICAgICAgICAgICAgIFVuaWZvcm1zTGliLnJvdWdobmVzc21hcCwKKyAgICAgICAgICAgICAgICBV
bmlmb3Jtc0xpYi5tZXRhbG5lc3NtYXAsCisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuZm9n
LAorICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmxpZ2h0cywKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGVtaXNzaXZlOiB7IHZhbHVlOiBuZXcgQ29sb3IoIDB4MDAw
MDAwICkgfSwKKyAgICAgICAgICAgICAgICAgICAgcm91Z2huZXNzOiB7IHZhbHVlOiAwLjUgfSwK
KyAgICAgICAgICAgICAgICAgICAgbWV0YWxuZXNzOiB7IHZhbHVlOiAwLjUgfSwKKyAgICAgICAg
ICAgICAgICAgICAgZW52TWFwSW50ZW5zaXR5OiB7IHZhbHVlOiAxIH0gLy8gdGVtcG9yYXJ5Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXSApLAogCi0gICAgICAgICAgICBpZiAoIGdl
b21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkgKSB7CisgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXI6IFNo
YWRlckNodW5rLm1lc2hwaHlzaWNhbF92ZXJ0LAorICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXI6
IFNoYWRlckNodW5rLm1lc2hwaHlzaWNhbF9mcmFnCiAKLSAgICAgICAgICAgICAgICB2YXIgbW9y
cGhBdHRyaWJ1dGVzID0gZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzOwotICAgICAgICAgICAgICAg
IHZhciBrZXlzID0gT2JqZWN0LmtleXMoIG1vcnBoQXR0cmlidXRlcyApOworICAgICAgICB9LAog
Ci0gICAgICAgICAgICAgICAgaWYgKCBrZXlzLmxlbmd0aCA+IDAgKSB7CisgICAgICAgIG1hdGNh
cDogewogCi0gICAgICAgICAgICAgICAgICAgIHZhciBtb3JwaEF0dHJpYnV0ZSA9IG1vcnBoQXR0
cmlidXRlc1sga2V5c1sgMCBdIF07CisgICAgICAgICAgICB1bmlmb3JtczogbWVyZ2VVbmlmb3Jt
cyggWworICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmNvbW1vbiwKKyAgICAgICAgICAgICAg
ICBVbmlmb3Jtc0xpYi5idW1wbWFwLAorICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLm5vcm1h
bG1hcCwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXAsCisgICAg
ICAgICAgICAgICAgVW5pZm9ybXNMaWIuZm9nLAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgbWF0Y2FwOiB7IHZhbHVlOiBudWxsIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBdICksCiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBtb3JwaEF0dHJpYnV0
ZSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgdmVydGV4U2hhZGVyOiBTaGFkZXJDaHVu
ay5tZXNobWF0Y2FwX3ZlcnQsCisgICAgICAgICAgICBmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1
bmsubWVzaG1hdGNhcF9mcmFnCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9ycGhU
YXJnZXRJbmZsdWVuY2VzID0gW107Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcnBo
VGFyZ2V0RGljdGlvbmFyeSA9IHt9OworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCBtID0gMCwgbWwgPSBtb3JwaEF0dHJpYnV0ZS5sZW5ndGg7IG0gPCBtbDsgbSAr
KyApIHsKKyAgICAgICAgcG9pbnRzOiB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lID0gbW9ycGhBdHRyaWJ1dGVbIG0gXS5uYW1lIHx8IFN0cmluZyggbSApOworICAgICAgICAg
ICAgdW5pZm9ybXM6IG1lcmdlVW5pZm9ybXMoIFsKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xp
Yi5wb2ludHMsCisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuZm9nCisgICAgICAgICAgICBd
ICksCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0SW5mbHVl
bmNlcy5wdXNoKCAwICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3JwaFRh
cmdldERpY3Rpb25hcnlbIG5hbWUgXSA9IG07CisgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXI6IFNo
YWRlckNodW5rLnBvaW50c192ZXJ0LAorICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXI6IFNoYWRl
ckNodW5rLnBvaW50c19mcmFnCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
fSwKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIGRhc2hlZDogewogCisgICAgICAg
ICAgICB1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyggWworICAgICAgICAgICAgICAgIFVuaWZvcm1z
TGliLmNvbW1vbiwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5mb2csCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBzY2FsZTogeyB2YWx1ZTogMSB9LAorICAgICAg
ICAgICAgICAgICAgICBkYXNoU2l6ZTogeyB2YWx1ZTogMSB9LAorICAgICAgICAgICAgICAgICAg
ICB0b3RhbFNpemU6IHsgdmFsdWU6IDIgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IF0gKSwKIAotICAgICAgICAgICAgfSBlbHNlIHsKLQotICAgICAgICAgICAgICAgIHZhciBtb3Jw
aFRhcmdldHMgPSBnZW9tZXRyeS5tb3JwaFRhcmdldHM7CisgICAgICAgICAgICB2ZXJ0ZXhTaGFk
ZXI6IFNoYWRlckNodW5rLmxpbmVkYXNoZWRfdmVydCwKKyAgICAgICAgICAgIGZyYWdtZW50U2hh
ZGVyOiBTaGFkZXJDaHVuay5saW5lZGFzaGVkX2ZyYWcKIAotICAgICAgICAgICAgICAgIGlmICgg
bW9ycGhUYXJnZXRzICE9PSB1bmRlZmluZWQgJiYgbW9ycGhUYXJnZXRzLmxlbmd0aCA+IDAgKSB7
CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3JwaFRhcmdldEluZmx1
ZW5jZXMgPSBbXTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3JwaFRhcmdldERpY3Rpb25h
cnkgPSB7fTsKKyAgICAgICAgZGVwdGg6IHsKIAotICAgICAgICAgICAgICAgICAgICBmb3IgKCBt
ID0gMCwgbWwgPSBtb3JwaFRhcmdldHMubGVuZ3RoOyBtIDwgbWw7IG0gKysgKSB7CisgICAgICAg
ICAgICB1bmlmb3JtczogbWVyZ2VVbmlmb3JtcyggWworICAgICAgICAgICAgICAgIFVuaWZvcm1z
TGliLmNvbW1vbiwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXAK
KyAgICAgICAgICAgIF0gKSwKIAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG1vcnBo
VGFyZ2V0c1sgbSBdLm5hbWUgfHwgU3RyaW5nKCBtICk7CisgICAgICAgICAgICB2ZXJ0ZXhTaGFk
ZXI6IFNoYWRlckNodW5rLmRlcHRoX3ZlcnQsCisgICAgICAgICAgICBmcmFnbWVudFNoYWRlcjog
U2hhZGVyQ2h1bmsuZGVwdGhfZnJhZwogCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1v
cnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKCAwICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVsgbmFtZSBdID0gbTsKKyAgICAgICAgfSwKIAotICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgIG5vcm1hbDogewogCisgICAgICAgICAgICB1bmlm
b3JtczogbWVyZ2VVbmlmb3JtcyggWworICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmNvbW1v
biwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5idW1wbWFwLAorICAgICAgICAgICAgICAg
IFVuaWZvcm1zTGliLm5vcm1hbG1hcCwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5kaXNw
bGFjZW1lbnRtYXAsCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvcGFj
aXR5OiB7IHZhbHVlOiAxLjAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0gKSwK
IAotICAgICAgICAgICAgfQorICAgICAgICAgICAgdmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5u
b3JtYWxfdmVydCwKKyAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5ub3Jt
YWxfZnJhZwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgcmF5Y2FzdDogKCBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHNwcml0ZTogewogCi0gICAgICAgICAgICB2YXIgaW52ZXJzZU1hdHJpeCA9IG5l
dyBNYXRyaXg0KCk7Ci0gICAgICAgICAgICB2YXIgcmF5ID0gbmV3IFJheSgpOwotICAgICAgICAg
ICAgdmFyIHNwaGVyZSA9IG5ldyBTcGhlcmUoKTsKKyAgICAgICAgICAgIHVuaWZvcm1zOiBtZXJn
ZVVuaWZvcm1zKCBbCisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuc3ByaXRlLAorICAgICAg
ICAgICAgICAgIFVuaWZvcm1zTGliLmZvZworICAgICAgICAgICAgXSApLAogCi0gICAgICAgICAg
ICB2YXIgdkEgPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgdmFyIHZCID0gbmV3IFZlY3Rv
cjMoKTsKLSAgICAgICAgICAgIHZhciB2QyA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICB2
ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLnNwcml0ZV92ZXJ0LAorICAgICAgICAgICAgZnJhZ21l
bnRTaGFkZXI6IFNoYWRlckNodW5rLnNwcml0ZV9mcmFnCiAKLSAgICAgICAgICAgIHZhciB0ZW1w
QSA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICB2YXIgdGVtcEIgPSBuZXcgVmVjdG9yMygp
OwotICAgICAgICAgICAgdmFyIHRlbXBDID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgfSwKIAot
ICAgICAgICAgICAgdmFyIHV2QSA9IG5ldyBWZWN0b3IyKCk7Ci0gICAgICAgICAgICB2YXIgdXZC
ID0gbmV3IFZlY3RvcjIoKTsKLSAgICAgICAgICAgIHZhciB1dkMgPSBuZXcgVmVjdG9yMigpOwor
ICAgICAgICBiYWNrZ3JvdW5kOiB7CiAKLSAgICAgICAgICAgIHZhciBiYXJ5Y29vcmQgPSBuZXcg
VmVjdG9yMygpOworICAgICAgICAgICAgdW5pZm9ybXM6IHsKKyAgICAgICAgICAgICAgICB1dlRy
YW5zZm9ybTogeyB2YWx1ZTogbmV3IE1hdHJpeDMoKSB9LAorICAgICAgICAgICAgICAgIHQyRDog
eyB2YWx1ZTogbnVsbCB9LAorICAgICAgICAgICAgfSwKIAotICAgICAgICAgICAgdmFyIGludGVy
c2VjdGlvblBvaW50ID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgICAgIHZhciBpbnRlcnNlY3Rp
b25Qb2ludFdvcmxkID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZlcnRleFNoYWRlcjog
U2hhZGVyQ2h1bmsuYmFja2dyb3VuZF92ZXJ0LAorICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXI6
IFNoYWRlckNodW5rLmJhY2tncm91bmRfZnJhZwogCi0gICAgICAgICAgICBmdW5jdGlvbiB1dklu
dGVyc2VjdGlvbiggcG9pbnQsIHAxLCBwMiwgcDMsIHV2MSwgdXYyLCB1djMgKSB7CisgICAgICAg
IH0sCisgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gIEN1YmUgbWFwIHNo
YWRlcgorICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0gICAgICAgICAgICAgICAgVHJp
YW5nbGUuZ2V0QmFyeWNvb3JkKCBwb2ludCwgcDEsIHAyLCBwMywgYmFyeWNvb3JkICk7CisgICAg
ICAgIGN1YmU6IHsKIAotICAgICAgICAgICAgICAgIHV2MS5tdWx0aXBseVNjYWxhciggYmFyeWNv
b3JkLnggKTsKLSAgICAgICAgICAgICAgICB1djIubXVsdGlwbHlTY2FsYXIoIGJhcnljb29yZC55
ICk7Ci0gICAgICAgICAgICAgICAgdXYzLm11bHRpcGx5U2NhbGFyKCBiYXJ5Y29vcmQueiApOwor
ICAgICAgICAgICAgdW5pZm9ybXM6IHsKKyAgICAgICAgICAgICAgICB0Q3ViZTogeyB2YWx1ZTog
bnVsbCB9LAorICAgICAgICAgICAgICAgIHRGbGlwOiB7IHZhbHVlOiAtIDEgfSwKKyAgICAgICAg
ICAgICAgICBvcGFjaXR5OiB7IHZhbHVlOiAxLjAgfQorICAgICAgICAgICAgfSwKIAotICAgICAg
ICAgICAgICAgIHV2MS5hZGQoIHV2MiApLmFkZCggdXYzICk7CisgICAgICAgICAgICB2ZXJ0ZXhT
aGFkZXI6IFNoYWRlckNodW5rLmN1YmVfdmVydCwKKyAgICAgICAgICAgIGZyYWdtZW50U2hhZGVy
OiBTaGFkZXJDaHVuay5jdWJlX2ZyYWcKIAotICAgICAgICAgICAgICAgIHJldHVybiB1djEuY2xv
bmUoKTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgfQorICAgICAgICBlcXVpcmVjdDogewog
Ci0gICAgICAgICAgICBmdW5jdGlvbiBjaGVja0ludGVyc2VjdGlvbiggb2JqZWN0LCBtYXRlcmlh
bCwgcmF5Y2FzdGVyLCByYXksIHBBLCBwQiwgcEMsIHBvaW50ICkgeworICAgICAgICAgICAgdW5p
Zm9ybXM6IHsKKyAgICAgICAgICAgICAgICB0RXF1aXJlY3Q6IHsgdmFsdWU6IG51bGwgfSwKKyAg
ICAgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB2YXIgaW50ZXJzZWN0OworICAgICAgICAg
ICAgdmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5lcXVpcmVjdF92ZXJ0LAorICAgICAgICAgICAg
ZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLmVxdWlyZWN0X2ZyYWcKIAotICAgICAgICAgICAg
ICAgIGlmICggbWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUgKSB7CisgICAgICAgIH0sCiAKLSAg
ICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0ID0gcmF5LmludGVyc2VjdFRyaWFuZ2xlKCBwQywg
cEIsIHBBLCB0cnVlLCBwb2ludCApOworICAgICAgICBkaXN0YW5jZVJHQkE6IHsKIAotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1bmlmb3JtczogbWVyZ2VVbmlmb3Jtcygg
WworICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmNvbW1vbiwKKyAgICAgICAgICAgICAgICBV
bmlmb3Jtc0xpYi5kaXNwbGFjZW1lbnRtYXAsCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZWZlcmVuY2VQb3NpdGlvbjogeyB2YWx1ZTogbmV3IFZlY3RvcjMoKSB9LAor
ICAgICAgICAgICAgICAgICAgICBuZWFyRGlzdGFuY2U6IHsgdmFsdWU6IDEgfSwKKyAgICAgICAg
ICAgICAgICAgICAgZmFyRGlzdGFuY2U6IHsgdmFsdWU6IDEwMDAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIF0gKSwKIAotICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3QgPSBy
YXkuaW50ZXJzZWN0VHJpYW5nbGUoIHBBLCBwQiwgcEMsIG1hdGVyaWFsLnNpZGUgIT09IERvdWJs
ZVNpZGUsIHBvaW50ICk7CisgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLmRp
c3RhbmNlUkdCQV92ZXJ0LAorICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5r
LmRpc3RhbmNlUkdCQV9mcmFnCiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCiAKLSAg
ICAgICAgICAgICAgICBpZiAoIGludGVyc2VjdCA9PT0gbnVsbCApIHJldHVybiBudWxsOworICAg
ICAgICBzaGFkb3c6IHsKIAotICAgICAgICAgICAgICAgIGludGVyc2VjdGlvblBvaW50V29ybGQu
Y29weSggcG9pbnQgKTsKLSAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25Qb2ludFdvcmxkLmFw
cGx5TWF0cml4NCggb2JqZWN0Lm1hdHJpeFdvcmxkICk7CisgICAgICAgICAgICB1bmlmb3Jtczog
bWVyZ2VVbmlmb3JtcyggWworICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmxpZ2h0cywKKyAg
ICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5mb2csCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBjb2xvcjogeyB2YWx1ZTogbmV3IENvbG9yKCAweDAwMDAwICkgfSwKKyAg
ICAgICAgICAgICAgICAgICAgb3BhY2l0eTogeyB2YWx1ZTogMS4wIH0KKyAgICAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgXSApLAogCi0gICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0g
cmF5Y2FzdGVyLnJheS5vcmlnaW4uZGlzdGFuY2VUbyggaW50ZXJzZWN0aW9uUG9pbnRXb3JsZCAp
OworICAgICAgICAgICAgdmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5zaGFkb3dfdmVydCwKKyAg
ICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5zaGFkb3dfZnJhZwogCi0gICAg
ICAgICAgICAgICAgaWYgKCBkaXN0YW5jZSA8IHJheWNhc3Rlci5uZWFyIHx8IGRpc3RhbmNlID4g
cmF5Y2FzdGVyLmZhciApIHJldHVybiBudWxsOworICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZTogZGlzdGFuY2UsCi0gICAg
ICAgICAgICAgICAgICAgIHBvaW50OiBpbnRlcnNlY3Rpb25Qb2ludFdvcmxkLmNsb25lKCksCi0g
ICAgICAgICAgICAgICAgICAgIG9iamVjdDogb2JqZWN0Ci0gICAgICAgICAgICAgICAgfTsKKyAg
ICB9OwogCisgICAgU2hhZGVyTGliLnBoeXNpY2FsID0geworCisgICAgICAgIHVuaWZvcm1zOiBt
ZXJnZVVuaWZvcm1zKCBbCisgICAgICAgICAgICBTaGFkZXJMaWIuc3RhbmRhcmQudW5pZm9ybXMs
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2xlYXJDb2F0OiB7IHZhbHVlOiAwIH0s
CisgICAgICAgICAgICAgICAgY2xlYXJDb2F0Um91Z2huZXNzOiB7IHZhbHVlOiAwIH0KICAgICAg
ICAgICAgIH0KKyAgICAgICAgXSApLAogCi0gICAgICAgICAgICBmdW5jdGlvbiBjaGVja0J1ZmZl
ckdlb21ldHJ5SW50ZXJzZWN0aW9uKCBvYmplY3QsIG1hdGVyaWFsLCByYXljYXN0ZXIsIHJheSwg
cG9zaXRpb24sIHV2LCBhLCBiLCBjICkgeworICAgICAgICB2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNo
dW5rLm1lc2hwaHlzaWNhbF92ZXJ0LAorICAgICAgICBmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1
bmsubWVzaHBoeXNpY2FsX2ZyYWcKIAotICAgICAgICAgICAgICAgIHZBLmZyb21CdWZmZXJBdHRy
aWJ1dGUoIHBvc2l0aW9uLCBhICk7Ci0gICAgICAgICAgICAgICAgdkIuZnJvbUJ1ZmZlckF0dHJp
YnV0ZSggcG9zaXRpb24sIGIgKTsKLSAgICAgICAgICAgICAgICB2Qy5mcm9tQnVmZmVyQXR0cmli
dXRlKCBwb3NpdGlvbiwgYyApOworICAgIH07CiAKLSAgICAgICAgICAgICAgICB2YXIgaW50ZXJz
ZWN0aW9uID0gY2hlY2tJbnRlcnNlY3Rpb24oIG9iamVjdCwgbWF0ZXJpYWwsIHJheWNhc3Rlciwg
cmF5LCB2QSwgdkIsIHZDLCBpbnRlcnNlY3Rpb25Qb2ludCApOworICAgIC8qKgorICAgICAqIEBh
dXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICovCiAKLSAgICAgICAgICAg
ICAgICBpZiAoIGludGVyc2VjdGlvbiApIHsKKyAgICBmdW5jdGlvbiBXZWJHTEFuaW1hdGlvbigp
IHsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIHV2ICkgeworICAgICAgICB2YXIgY29udGV4
dCA9IG51bGw7CisgICAgICAgIHZhciBpc0FuaW1hdGluZyA9IGZhbHNlOworICAgICAgICB2YXIg
YW5pbWF0aW9uTG9vcCA9IG51bGw7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHV2QS5mcm9t
QnVmZmVyQXR0cmlidXRlKCB1diwgYSApOwotICAgICAgICAgICAgICAgICAgICAgICAgdXZCLmZy
b21CdWZmZXJBdHRyaWJ1dGUoIHV2LCBiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1dkMu
ZnJvbUJ1ZmZlckF0dHJpYnV0ZSggdXYsIGMgKTsKKyAgICAgICAgZnVuY3Rpb24gb25BbmltYXRp
b25GcmFtZSggdGltZSwgZnJhbWUgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGludGVy
c2VjdGlvbi51diA9IHV2SW50ZXJzZWN0aW9uKCBpbnRlcnNlY3Rpb25Qb2ludCwgdkEsIHZCLCB2
QywgdXZBLCB1dkIsIHV2QyApOworICAgICAgICAgICAgaWYgKCBpc0FuaW1hdGluZyA9PT0gZmFs
c2UgKSByZXR1cm47CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYW5pbWF0
aW9uTG9vcCggdGltZSwgZnJhbWUgKTsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgZmFjZSA9
IG5ldyBGYWNlMyggYSwgYiwgYyApOwotICAgICAgICAgICAgICAgICAgICBUcmlhbmdsZS5nZXRO
b3JtYWwoIHZBLCB2QiwgdkMsIGZhY2Uubm9ybWFsICk7CisgICAgICAgICAgICBjb250ZXh0LnJl
cXVlc3RBbmltYXRpb25GcmFtZSggb25BbmltYXRpb25GcmFtZSApOwogCi0gICAgICAgICAgICAg
ICAgICAgIGludGVyc2VjdGlvbi5mYWNlID0gZmFjZTsKKyAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgfQorICAgICAgICByZXR1cm4gewogCi0gICAgICAgICAgICAgICAgcmV0dXJuIGludGVy
c2VjdGlvbjsKKyAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoIGlzQW5pbWF0aW5nID09PSB0cnVlICkgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIGlmICggYW5pbWF0aW9uTG9vcCA9PT0gbnVsbCApIHJldHVybjsKIAot
ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJheWNhc3QoIHJheWNhc3RlciwgaW50ZXJzZWN0
cyApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVlc3RBbmltYXRpb25GcmFtZSggb25B
bmltYXRpb25GcmFtZSApOwogCi0gICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gdGhpcy5n
ZW9tZXRyeTsKLSAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsOwot
ICAgICAgICAgICAgICAgIHZhciBtYXRyaXhXb3JsZCA9IHRoaXMubWF0cml4V29ybGQ7CisgICAg
ICAgICAgICAgICAgaXNBbmltYXRpbmcgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgaWYgKCBt
YXRlcmlhbCA9PT0gdW5kZWZpbmVkICkgcmV0dXJuOworICAgICAgICAgICAgfSwKIAotICAgICAg
ICAgICAgICAgIC8vIENoZWNraW5nIGJvdW5kaW5nU3BoZXJlIGRpc3RhbmNlIHRvIHJheQorICAg
ICAgICAgICAgc3RvcDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgaWYgKCBnZW9t
ZXRyeS5ib3VuZGluZ1NwaGVyZSA9PT0gbnVsbCApIGdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1Nw
aGVyZSgpOworICAgICAgICAgICAgICAgIGlzQW5pbWF0aW5nID0gZmFsc2U7CiAKLSAgICAgICAg
ICAgICAgICBzcGhlcmUuY29weSggZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUgKTsKLSAgICAgICAg
ICAgICAgICBzcGhlcmUuYXBwbHlNYXRyaXg0KCBtYXRyaXhXb3JsZCApOworICAgICAgICAgICAg
fSwKIAotICAgICAgICAgICAgICAgIGlmICggcmF5Y2FzdGVyLnJheS5pbnRlcnNlY3RzU3BoZXJl
KCBzcGhlcmUgKSA9PT0gZmFsc2UgKSByZXR1cm47CisgICAgICAgICAgICBzZXRBbmltYXRpb25M
b29wOiBmdW5jdGlvbiAoIGNhbGxiYWNrICkgewogCi0gICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICBhbmltYXRpb25Mb29wID0gY2FsbGJhY2s7CiAKLSAgICAgICAgICAgICAgICBp
bnZlcnNlTWF0cml4LmdldEludmVyc2UoIG1hdHJpeFdvcmxkICk7Ci0gICAgICAgICAgICAgICAg
cmF5LmNvcHkoIHJheWNhc3Rlci5yYXkgKS5hcHBseU1hdHJpeDQoIGludmVyc2VNYXRyaXggKTsK
KyAgICAgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAvLyBDaGVjayBib3VuZGluZ0JveCBi
ZWZvcmUgY29udGludWluZworICAgICAgICAgICAgc2V0Q29udGV4dDogZnVuY3Rpb24gKCB2YWx1
ZSApIHsKIAotICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuYm91bmRpbmdCb3ggIT09IG51
bGwgKSB7CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHZhbHVlOwogCi0gICAgICAgICAgICAg
ICAgICAgIGlmICggcmF5LmludGVyc2VjdHNCb3goIGdlb21ldHJ5LmJvdW5kaW5nQm94ICkgPT09
IGZhbHNlICkgcmV0dXJuOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgfQorICAg
ICAgICB9OwogCi0gICAgICAgICAgICAgICAgdmFyIGludGVyc2VjdGlvbjsKKyAgICB9CiAKLSAg
ICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkgKSB7CisgICAgLyoq
CisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKi8KIAot
ICAgICAgICAgICAgICAgICAgICB2YXIgYSwgYiwgYzsKLSAgICAgICAgICAgICAgICAgICAgdmFy
IGluZGV4ID0gZ2VvbWV0cnkuaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlv
biA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciB1diA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMudXY7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBn
cm91cHMgPSBnZW9tZXRyeS5ncm91cHM7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBkcmF3UmFu
Z2UgPSBnZW9tZXRyeS5kcmF3UmFuZ2U7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBpLCBqLCBp
bCwgamw7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBncm91cCwgZ3JvdXBNYXRlcmlhbDsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0LCBlbmQ7CisgICAgZnVuY3Rpb24gV2ViR0xBdHRy
aWJ1dGVzKCBnbCApIHsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIGluZGV4ICE9PSBudWxs
ICkgeworICAgICAgICB2YXIgYnVmZmVycyA9IG5ldyBXZWFrTWFwKCk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGluZGV4ZWQgYnVmZmVyIGdlb21ldHJ5CisgICAgICAgIGZ1bmN0aW9u
IGNyZWF0ZUJ1ZmZlciggYXR0cmlidXRlLCBidWZmZXJUeXBlICkgewogCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIEFycmF5LmlzQXJyYXkoIG1hdGVyaWFsICkgKSB7CisgICAgICAgICAg
ICB2YXIgYXJyYXkgPSBhdHRyaWJ1dGUuYXJyYXk7CisgICAgICAgICAgICB2YXIgdXNhZ2UgPSBh
dHRyaWJ1dGUuZHluYW1pYyA/IDM1MDQ4IDogMzUwNDQ7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKCBpID0gMCwgaWwgPSBncm91cHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7
CisgICAgICAgICAgICB2YXIgYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBncm91cHNbIGkgXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3JvdXBNYXRlcmlhbCA9IG1hdGVyaWFsWyBncm91cC5tYXRl
cmlhbEluZGV4IF07CisgICAgICAgICAgICBnbC5iaW5kQnVmZmVyKCBidWZmZXJUeXBlLCBidWZm
ZXIgKTsKKyAgICAgICAgICAgIGdsLmJ1ZmZlckRhdGEoIGJ1ZmZlclR5cGUsIGFycmF5LCB1c2Fn
ZSApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gTWF0aC5tYXgo
IGdyb3VwLnN0YXJ0LCBkcmF3UmFuZ2Uuc3RhcnQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kID0gTWF0aC5taW4oICggZ3JvdXAuc3RhcnQgKyBncm91cC5jb3VudCApLCAo
IGRyYXdSYW5nZS5zdGFydCArIGRyYXdSYW5nZS5jb3VudCApICk7CisgICAgICAgICAgICBhdHRy
aWJ1dGUub25VcGxvYWRDYWxsYmFjaygpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIGogPSBzdGFydCwgamwgPSBlbmQ7IGogPCBqbDsgaiArPSAzICkgeworICAgICAg
ICAgICAgdmFyIHR5cGUgPSA1MTI2OwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhID0gaW5kZXguZ2V0WCggaSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYiA9IGluZGV4LmdldFgoIGkgKyAxICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjID0gaW5kZXguZ2V0WCggaSArIDIgKTsKKyAgICAgICAgICAgIGlmICggYXJy
YXkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludGVyc2VjdGlvbiA9IGNoZWNrQnVmZmVyR2VvbWV0cnlJbnRlcnNlY3Rp
b24oIHRoaXMsIGdyb3VwTWF0ZXJpYWwsIHJheWNhc3RlciwgcmF5LCBwb3NpdGlvbiwgdXYsIGEs
IGIsIGMgKTsKKyAgICAgICAgICAgICAgICB0eXBlID0gNTEyNjsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbnRlcnNlY3Rpb24gKSB7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKCBhcnJheSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSApIHsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbi5mYWNlSW5kZXggPSBN
YXRoLmZsb29yKCBpIC8gMyApOyAvLyB0cmlhbmdsZSBudW1iZXIgaW4gaW5kZXhlZCBidWZmZXIg
c2VtYW50aWNzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJz
ZWN0cy5wdXNoKCBpbnRlcnNlY3Rpb24gKTsKKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4o
ICdUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVuc3VwcG9ydGVkIGRhdGEgYnVmZmVyIGZvcm1hdDog
RmxvYXQ2NEFycmF5LicgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIGlmICggYXJyYXkgaW5zdGFuY2VvZiBVaW50MTZBcnJheSAp
IHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dHlwZSA9IDUxMjM7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKCBhcnJheSBpbnN0YW5jZW9mIEludDE2QXJyYXkgKSB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdHlwZSA9IDUxMjI7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IE1hdGgubWF4KCAwLCBkcmF3UmFu
Z2Uuc3RhcnQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBNYXRoLm1pbigg
aW5kZXguY291bnQsICggZHJhd1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50ICkgKTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIGFycmF5IGluc3RhbmNlb2YgVWludDMyQXJyYXkgKSB7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gc3RhcnQsIGlsID0gZW5kOyBp
IDwgaWw7IGkgKz0gMyApIHsKKyAgICAgICAgICAgICAgICB0eXBlID0gNTEyNTsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gaW5kZXguZ2V0WCggaSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiID0gaW5kZXguZ2V0WCggaSArIDEgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGluZGV4LmdldFgoIGkgKyAyICk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKCBhcnJheSBpbnN0YW5jZW9mIEludDMyQXJyYXkgKSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uID0gY2hlY2tCdWZmZXJHZW9t
ZXRyeUludGVyc2VjdGlvbiggdGhpcywgbWF0ZXJpYWwsIHJheWNhc3RlciwgcmF5LCBwb3NpdGlv
biwgdXYsIGEsIGIsIGMgKTsKKyAgICAgICAgICAgICAgICB0eXBlID0gNTEyNDsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGludGVyc2VjdGlvbiApIHsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIGFycmF5IGluc3RhbmNlb2YgSW50OEFycmF5ICkgewogCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24uZmFjZUluZGV4ID0gTWF0
aC5mbG9vciggaSAvIDMgKTsgLy8gdHJpYW5nbGUgbnVtYmVyIGluIGluZGV4ZWQgYnVmZmVyIHNl
bWFudGljcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0cy5w
dXNoKCBpbnRlcnNlY3Rpb24gKTsKKyAgICAgICAgICAgICAgICB0eXBlID0gNTEyMDsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBh
cnJheSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgdHlwZSA9IDUxMjE7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCBwb3NpdGlvbiAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICBidWZmZXI6IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLAor
ICAgICAgICAgICAgICAgIGJ5dGVzUGVyRWxlbWVudDogYXJyYXkuQllURVNfUEVSX0VMRU1FTlQs
CisgICAgICAgICAgICAgICAgdmVyc2lvbjogYXR0cmlidXRlLnZlcnNpb24KKyAgICAgICAgICAg
IH07CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbi1pbmRleGVkIGJ1ZmZlciBnZW9t
ZXRyeQorICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggQXJyYXkuaXNB
cnJheSggbWF0ZXJpYWwgKSApIHsKKyAgICAgICAgZnVuY3Rpb24gdXBkYXRlQnVmZmVyKCBidWZm
ZXIsIGF0dHJpYnV0ZSwgYnVmZmVyVHlwZSApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIGkgPSAwLCBpbCA9IGdyb3Vwcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAg
ICAgICAgICAgIHZhciBhcnJheSA9IGF0dHJpYnV0ZS5hcnJheTsKKyAgICAgICAgICAgIHZhciB1
cGRhdGVSYW5nZSA9IGF0dHJpYnV0ZS51cGRhdGVSYW5nZTsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBncm91cCA9IGdyb3Vwc1sgaSBdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBncm91cE1hdGVyaWFsID0gbWF0ZXJpYWxbIGdyb3VwLm1hdGVyaWFsSW5kZXgg
XTsKKyAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoIGJ1ZmZlclR5cGUsIGJ1ZmZlciApOwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gTWF0aC5tYXgoIGdyb3VwLnN0
YXJ0LCBkcmF3UmFuZ2Uuc3RhcnQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZW5kID0gTWF0aC5taW4oICggZ3JvdXAuc3RhcnQgKyBncm91cC5jb3VudCApLCAoIGRyYXdSYW5n
ZS5zdGFydCArIGRyYXdSYW5nZS5jb3VudCApICk7CisgICAgICAgICAgICBpZiAoIGF0dHJpYnV0
ZS5keW5hbWljID09PSBmYWxzZSApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCBqID0gc3RhcnQsIGpsID0gZW5kOyBqIDwgamw7IGogKz0gMyApIHsKKyAgICAgICAg
ICAgICAgICBnbC5idWZmZXJEYXRhKCBidWZmZXJUeXBlLCBhcnJheSwgMzUwNDQgKTsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IGo7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiID0gaiArIDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjID0gaiArIDI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCB1cGRhdGVSYW5n
ZS5jb3VudCA9PT0gLSAxICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnRlcnNlY3Rpb24gPSBjaGVja0J1ZmZlckdlb21ldHJ5SW50ZXJzZWN0aW9uKCB0aGlzLCBn
cm91cE1hdGVyaWFsLCByYXljYXN0ZXIsIHJheSwgcG9zaXRpb24sIHV2LCBhLCBiLCBjICk7Cisg
ICAgICAgICAgICAgICAgLy8gTm90IHVzaW5nIHVwZGF0ZSByYW5nZXMKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbnRlcnNlY3Rpb24gKSB7CisgICAgICAgICAg
ICAgICAgZ2wuYnVmZmVyU3ViRGF0YSggYnVmZmVyVHlwZSwgMCwgYXJyYXkgKTsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbi5mYWNlSW5kZXgg
PSBNYXRoLmZsb29yKCBpIC8gMyApOyAvLyB0cmlhbmdsZSBudW1iZXIgaW4gbm9uLWluZGV4ZWQg
YnVmZmVyIHNlbWFudGljcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludGVyc2VjdHMucHVzaCggaW50ZXJzZWN0aW9uICk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KCB1cGRhdGVSYW5nZS5jb3VudCA9PT0gMCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJH
TE9iamVjdHMudXBkYXRlQnVmZmVyOiBkeW5hbWljIFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSBtYXJr
ZWQgYXMgbmVlZHNVcGRhdGUgYnV0IHVwZGF0ZVJhbmdlLmNvdW50IGlzIDAsIGVuc3VyZSB5b3Ug
YXJlIHVzaW5nIHNldCBtZXRob2RzIG9yIHVwZGF0aW5nIG1hbnVhbGx5LicgKTsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdsLmJ1ZmZlclN1YkRh
dGEoIGJ1ZmZlclR5cGUsIHVwZGF0ZVJhbmdlLm9mZnNldCAqIGFycmF5LkJZVEVTX1BFUl9FTEVN
RU5ULAorICAgICAgICAgICAgICAgICAgICBhcnJheS5zdWJhcnJheSggdXBkYXRlUmFuZ2Uub2Zm
c2V0LCB1cGRhdGVSYW5nZS5vZmZzZXQgKyB1cGRhdGVSYW5nZS5jb3VudCApICk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdXBkYXRlUmFuZ2Uu
Y291bnQgPSAtIDE7IC8vIHJlc2V0IHJhbmdlCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGFydCA9IE1hdGgubWF4KCAwLCBkcmF3UmFuZ2Uuc3RhcnQgKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbmQgPSBNYXRoLm1pbiggcG9zaXRpb24uY291bnQsICggZHJhd1Jhbmdl
LnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50ICkgKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSBzdGFydCwgaWwgPSBlbmQ7IGkgPCBpbDsgaSAr
PSAzICkgeworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9
IGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBpICsgMTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGkgKyAyOworICAgICAgICAvLwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbiA9IGNoZWNrQnVmZmVyR2VvbWV0
cnlJbnRlcnNlY3Rpb24oIHRoaXMsIG1hdGVyaWFsLCByYXljYXN0ZXIsIHJheSwgcG9zaXRpb24s
IHV2LCBhLCBiLCBjICk7CisgICAgICAgIGZ1bmN0aW9uIGdldCggYXR0cmlidXRlICkgewogCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW50ZXJzZWN0aW9uICkgeworICAg
ICAgICAgICAgaWYgKCBhdHRyaWJ1dGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSApIGF0
dHJpYnV0ZSA9IGF0dHJpYnV0ZS5kYXRhOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnRlcnNlY3Rpb24uZmFjZUluZGV4ID0gTWF0aC5mbG9vciggaSAvIDMgKTsgLy8g
dHJpYW5nbGUgbnVtYmVyIGluIG5vbi1pbmRleGVkIGJ1ZmZlciBzZW1hbnRpY3MKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdHMucHVzaCggaW50ZXJzZWN0aW9u
ICk7CisgICAgICAgICAgICByZXR1cm4gYnVmZmVycy5nZXQoIGF0dHJpYnV0ZSApOwogCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiByZW1vdmUoIGF0dHJpYnV0ZSApIHsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBhdHRyaWJ1dGUu
aXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSApIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZS5kYXRh
OwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBkYXRhID0gYnVmZmVy
cy5nZXQoIGF0dHJpYnV0ZSApOwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZ2VvbWV0
cnkuaXNHZW9tZXRyeSApIHsKKyAgICAgICAgICAgIGlmICggZGF0YSApIHsKIAotICAgICAgICAg
ICAgICAgICAgICB2YXIgZnZBLCBmdkIsIGZ2QzsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGlz
TXVsdGlNYXRlcmlhbCA9IEFycmF5LmlzQXJyYXkoIG1hdGVyaWFsICk7CisgICAgICAgICAgICAg
ICAgZ2wuZGVsZXRlQnVmZmVyKCBkYXRhLmJ1ZmZlciApOwogCi0gICAgICAgICAgICAgICAgICAg
IHZhciB2ZXJ0aWNlcyA9IGdlb21ldHJ5LnZlcnRpY2VzOwotICAgICAgICAgICAgICAgICAgICB2
YXIgZmFjZXMgPSBnZW9tZXRyeS5mYWNlczsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHV2czsK
KyAgICAgICAgICAgICAgICBidWZmZXJzLmRlbGV0ZSggYXR0cmlidXRlICk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIGZhY2VWZXJ0ZXhVdnMgPSBnZW9tZXRyeS5mYWNlVmVydGV4VXZzWyAw
IF07Ci0gICAgICAgICAgICAgICAgICAgIGlmICggZmFjZVZlcnRleFV2cy5sZW5ndGggPiAwICkg
dXZzID0gZmFjZVZlcnRleFV2czsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAg
ICBmb3IgKCB2YXIgZiA9IDAsIGZsID0gZmFjZXMubGVuZ3RoOyBmIDwgZmw7IGYgKysgKSB7Cisg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZhY2UgPSBmYWNlc1sgZiBd
OwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZhY2VNYXRlcmlhbCA9IGlzTXVsdGlNYXRl
cmlhbCA/IG1hdGVyaWFsWyBmYWNlLm1hdGVyaWFsSW5kZXggXSA6IG1hdGVyaWFsOworICAgICAg
ICBmdW5jdGlvbiB1cGRhdGUoIGF0dHJpYnV0ZSwgYnVmZmVyVHlwZSApIHsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBmYWNlTWF0ZXJpYWwgPT09IHVuZGVmaW5lZCApIGNvbnRpbnVl
OworICAgICAgICAgICAgaWYgKCBhdHRyaWJ1dGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0
ZSApIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZS5kYXRhOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBmdkEgPSB2ZXJ0aWNlc1sgZmFjZS5hIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdkIg
PSB2ZXJ0aWNlc1sgZmFjZS5iIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdkMgPSB2ZXJ0
aWNlc1sgZmFjZS5jIF07CisgICAgICAgICAgICB2YXIgZGF0YSA9IGJ1ZmZlcnMuZ2V0KCBhdHRy
aWJ1dGUgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmYWNlTWF0ZXJpYWwubW9y
cGhUYXJnZXRzID09PSB0cnVlICkgeworICAgICAgICAgICAgaWYgKCBkYXRhID09PSB1bmRlZmlu
ZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9ycGhUYXJnZXRzID0g
Z2VvbWV0cnkubW9ycGhUYXJnZXRzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBt
b3JwaEluZmx1ZW5jZXMgPSB0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlczsKKyAgICAgICAgICAg
ICAgICBidWZmZXJzLnNldCggYXR0cmlidXRlLCBjcmVhdGVCdWZmZXIoIGF0dHJpYnV0ZSwgYnVm
ZmVyVHlwZSApICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2QS5zZXQoIDAsIDAs
IDAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Qi5zZXQoIDAsIDAsIDAgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2Qy5zZXQoIDAsIDAsIDAgKTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoIGRhdGEudmVyc2lvbiA8IGF0dHJpYnV0ZS52ZXJzaW9uICkgewogCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIHQgPSAwLCB0bCA9IG1vcnBoVGFyZ2V0
cy5sZW5ndGg7IHQgPCB0bDsgdCArKyApIHsKKyAgICAgICAgICAgICAgICB1cGRhdGVCdWZmZXIo
IGRhdGEuYnVmZmVyLCBhdHRyaWJ1dGUsIGJ1ZmZlclR5cGUgKTsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgaW5mbHVlbmNlID0gbW9ycGhJbmZsdWVuY2VzWyB0IF07Cisg
ICAgICAgICAgICAgICAgZGF0YS52ZXJzaW9uID0gYXR0cmlidXRlLnZlcnNpb247CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbmZsdWVuY2UgPT09IDAgKSBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
dGFyZ2V0cyA9IG1vcnBoVGFyZ2V0c1sgdCBdLnZlcnRpY2VzOworICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdkEuYWRkU2NhbGVkVmVjdG9yKCB0ZW1wQS5zdWJW
ZWN0b3JzKCB0YXJnZXRzWyBmYWNlLmEgXSwgZnZBICksIGluZmx1ZW5jZSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2Qi5hZGRTY2FsZWRWZWN0b3IoIHRlbXBCLnN1YlZlY3Rv
cnMoIHRhcmdldHNbIGZhY2UuYiBdLCBmdkIgKSwgaW5mbHVlbmNlICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZDLmFkZFNjYWxlZFZlY3RvciggdGVtcEMuc3ViVmVjdG9ycygg
dGFyZ2V0c1sgZmFjZS5jIF0sIGZ2QyApLCBpbmZsdWVuY2UgKTsKKyAgICAgICAgcmV0dXJuIHsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdldDogZ2V0LAor
ICAgICAgICAgICAgcmVtb3ZlOiByZW1vdmUsCisgICAgICAgICAgICB1cGRhdGU6IHVwZGF0ZQog
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdkEuYWRkKCBmdkEgKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2Qi5hZGQoIGZ2QiApOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZDLmFkZCggZnZDICk7CisgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmdkEgPSB2QTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdkIgPSB2QjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmdkMgPSB2QzsKKyAgICB9CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9t
cmRvb2IuY29tLworICAgICAqIEBhdXRob3IgTXVnZW44NyAvIGh0dHBzOi8vZ2l0aHViLmNvbS9N
dWdlbjg3CisgICAgICovCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbiA9
IGNoZWNrSW50ZXJzZWN0aW9uKCB0aGlzLCBmYWNlTWF0ZXJpYWwsIHJheWNhc3RlciwgcmF5LCBm
dkEsIGZ2QiwgZnZDLCBpbnRlcnNlY3Rpb25Qb2ludCApOworICAgIC8vIFBsYW5lR2VvbWV0cnkK
IAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbnRlcnNlY3Rpb24gKSB7CisgICAgZnVu
Y3Rpb24gUGxhbmVHZW9tZXRyeSggd2lkdGgsIGhlaWdodCwgd2lkdGhTZWdtZW50cywgaGVpZ2h0
U2VnbWVudHMgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHV2cyAmJiB1
dnNbIGYgXSApIHsKKyAgICAgICAgR2VvbWV0cnkuY2FsbCggdGhpcyApOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB1dnNfZiA9IHV2c1sgZiBdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1dkEuY29weSggdXZzX2ZbIDAgXSApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1dkIuY29weSggdXZzX2ZbIDEgXSApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1dkMuY29weSggdXZzX2ZbIDIgXSApOworICAgICAgICB0aGlz
LnR5cGUgPSAnUGxhbmVHZW9tZXRyeSc7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50ZXJzZWN0aW9uLnV2ID0gdXZJbnRlcnNlY3Rpb24oIGludGVyc2VjdGlvblBvaW50LCBm
dkEsIGZ2QiwgZnZDLCB1dkEsIHV2QiwgdXZDICk7CisgICAgICAgIHRoaXMucGFyYW1ldGVycyA9
IHsKKyAgICAgICAgICAgIHdpZHRoOiB3aWR0aCwKKyAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0
LAorICAgICAgICAgICAgd2lkdGhTZWdtZW50czogd2lkdGhTZWdtZW50cywKKyAgICAgICAgICAg
IGhlaWdodFNlZ21lbnRzOiBoZWlnaHRTZWdtZW50cworICAgICAgICB9OwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICB0aGlzLmZyb21CdWZmZXJHZW9tZXRyeSggbmV3
IFBsYW5lQnVmZmVyR2VvbWV0cnkoIHdpZHRoLCBoZWlnaHQsIHdpZHRoU2VnbWVudHMsIGhlaWdo
dFNlZ21lbnRzICkgKTsKKyAgICAgICAgdGhpcy5tZXJnZVZlcnRpY2VzKCk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24uZmFjZSA9IGZhY2U7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uLmZhY2VJbmRleCA9IGY7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0cy5wdXNoKCBpbnRlcnNlY3Rpb24gKTsKKyAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICBQbGFuZUdlb21ldHJ5LnByb3RvdHlw
ZSA9IE9iamVjdC5jcmVhdGUoIEdlb21ldHJ5LnByb3RvdHlwZSApOworICAgIFBsYW5lR2VvbWV0
cnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGxhbmVHZW9tZXRyeTsKIAotICAgICAgICAgICAg
ICAgICAgICB9CisgICAgLy8gUGxhbmVCdWZmZXJHZW9tZXRyeQogCi0gICAgICAgICAgICAgICAg
fQorICAgIGZ1bmN0aW9uIFBsYW5lQnVmZmVyR2VvbWV0cnkoIHdpZHRoLCBoZWlnaHQsIHdpZHRo
U2VnbWVudHMsIGhlaWdodFNlZ21lbnRzICkgewogCi0gICAgICAgICAgICB9OworICAgICAgICBC
dWZmZXJHZW9tZXRyeS5jYWxsKCB0aGlzICk7CiAKLSAgICAgICAgfSgpICksCisgICAgICAgIHRo
aXMudHlwZSA9ICdQbGFuZUJ1ZmZlckdlb21ldHJ5JzsKIAotICAgICAgICBjbG9uZTogZnVuY3Rp
b24gKCkgeworICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSB7CisgICAgICAgICAgICB3aWR0aDog
d2lkdGgsCisgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCwKKyAgICAgICAgICAgIHdpZHRoU2Vn
bWVudHM6IHdpZHRoU2VnbWVudHMsCisgICAgICAgICAgICBoZWlnaHRTZWdtZW50czogaGVpZ2h0
U2VnbWVudHMKKyAgICAgICAgfTsKIAotICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0
cnVjdG9yKCB0aGlzLmdlb21ldHJ5LCB0aGlzLm1hdGVyaWFsICkuY29weSggdGhpcyApOworICAg
ICAgICB3aWR0aCA9IHdpZHRoIHx8IDE7CisgICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCAxOwog
Ci0gICAgICAgIH0KKyAgICAgICAgdmFyIHdpZHRoX2hhbGYgPSB3aWR0aCAvIDI7CisgICAgICAg
IHZhciBoZWlnaHRfaGFsZiA9IGhlaWdodCAvIDI7CiAKLSAgICB9ICk7CisgICAgICAgIHZhciBn
cmlkWCA9IE1hdGguZmxvb3IoIHdpZHRoU2VnbWVudHMgKSB8fCAxOworICAgICAgICB2YXIgZ3Jp
ZFkgPSBNYXRoLmZsb29yKCBoZWlnaHRTZWdtZW50cyApIHx8IDE7CiAKLSAgICAvKioKLSAgICAg
KiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqLworICAgICAgICB2
YXIgZ3JpZFgxID0gZ3JpZFggKyAxOworICAgICAgICB2YXIgZ3JpZFkxID0gZ3JpZFkgKyAxOwog
Ci0gICAgZnVuY3Rpb24gV2ViR0xCYWNrZ3JvdW5kKCByZW5kZXJlciwgc3RhdGUsIG9iamVjdHMs
IHByZW11bHRpcGxpZWRBbHBoYSApIHsKKyAgICAgICAgdmFyIHNlZ21lbnRfd2lkdGggPSB3aWR0
aCAvIGdyaWRYOworICAgICAgICB2YXIgc2VnbWVudF9oZWlnaHQgPSBoZWlnaHQgLyBncmlkWTsK
IAotICAgICAgICB2YXIgY2xlYXJDb2xvciA9IG5ldyBDb2xvciggMHgwMDAwMDAgKTsKLSAgICAg
ICAgdmFyIGNsZWFyQWxwaGEgPSAwOworICAgICAgICB2YXIgaXgsIGl5OwogCi0gICAgICAgIHZh
ciBwbGFuZUNhbWVyYSwgcGxhbmVNZXNoOwotICAgICAgICB2YXIgYm94TWVzaDsKKyAgICAgICAg
Ly8gYnVmZmVycwogCi0gICAgICAgIGZ1bmN0aW9uIHJlbmRlciggcmVuZGVyTGlzdCwgc2NlbmUs
IGNhbWVyYSwgZm9yY2VDbGVhciApIHsKKyAgICAgICAgdmFyIGluZGljZXMgPSBbXTsKKyAgICAg
ICAgdmFyIHZlcnRpY2VzID0gW107CisgICAgICAgIHZhciBub3JtYWxzID0gW107CisgICAgICAg
IHZhciB1dnMgPSBbXTsKIAotICAgICAgICAgICAgdmFyIGJhY2tncm91bmQgPSBzY2VuZS5iYWNr
Z3JvdW5kOworICAgICAgICAvLyBnZW5lcmF0ZSB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdXZzCiAK
LSAgICAgICAgICAgIGlmICggYmFja2dyb3VuZCA9PT0gbnVsbCApIHsKKyAgICAgICAgZm9yICgg
aXkgPSAwOyBpeSA8IGdyaWRZMTsgaXkgKysgKSB7CisKKyAgICAgICAgICAgIHZhciB5ID0gaXkg
KiBzZWdtZW50X2hlaWdodCAtIGhlaWdodF9oYWxmOworCisgICAgICAgICAgICBmb3IgKCBpeCA9
IDA7IGl4IDwgZ3JpZFgxOyBpeCArKyApIHsKKworICAgICAgICAgICAgICAgIHZhciB4ID0gaXgg
KiBzZWdtZW50X3dpZHRoIC0gd2lkdGhfaGFsZjsKKworICAgICAgICAgICAgICAgIHZlcnRpY2Vz
LnB1c2goIHgsIC0geSwgMCApOworCisgICAgICAgICAgICAgICAgbm9ybWFscy5wdXNoKCAwLCAw
LCAxICk7CisKKyAgICAgICAgICAgICAgICB1dnMucHVzaCggaXggLyBncmlkWCApOworICAgICAg
ICAgICAgICAgIHV2cy5wdXNoKCAxIC0gKCBpeSAvIGdyaWRZICkgKTsKKworICAgICAgICAgICAg
fQorCisgICAgICAgIH0KKworICAgICAgICAvLyBpbmRpY2VzCisKKyAgICAgICAgZm9yICggaXkg
PSAwOyBpeSA8IGdyaWRZOyBpeSArKyApIHsKKworICAgICAgICAgICAgZm9yICggaXggPSAwOyBp
eCA8IGdyaWRYOyBpeCArKyApIHsKKworICAgICAgICAgICAgICAgIHZhciBhID0gaXggKyBncmlk
WDEgKiBpeTsKKyAgICAgICAgICAgICAgICB2YXIgYiA9IGl4ICsgZ3JpZFgxICogKCBpeSArIDEg
KTsKKyAgICAgICAgICAgICAgICB2YXIgYyA9ICggaXggKyAxICkgKyBncmlkWDEgKiAoIGl5ICsg
MSApOworICAgICAgICAgICAgICAgIHZhciBkID0gKCBpeCArIDEgKSArIGdyaWRYMSAqIGl5Owor
CisgICAgICAgICAgICAgICAgLy8gZmFjZXMKKworICAgICAgICAgICAgICAgIGluZGljZXMucHVz
aCggYSwgYiwgZCApOworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCggYiwgYywgZCApOwor
CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisgICAgICAgIC8vIGJ1aWxkIGdlb21ldHJ5
CisKKyAgICAgICAgdGhpcy5zZXRJbmRleCggaW5kaWNlcyApOworICAgICAgICB0aGlzLmFkZEF0
dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2Vz
LCAzICkgKTsKKyAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdub3JtYWwnLCBuZXcgRmxvYXQz
MkJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFscywgMyApICk7CisgICAgICAgIHRoaXMuYWRkQXR0cmli
dXRlKCAndXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdXZzLCAyICkgKTsKKworICAg
IH0KKworICAgIFBsYW5lQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSgg
QnVmZmVyR2VvbWV0cnkucHJvdG90eXBlICk7CisgICAgUGxhbmVCdWZmZXJHZW9tZXRyeS5wcm90
b3R5cGUuY29uc3RydWN0b3IgPSBQbGFuZUJ1ZmZlckdlb21ldHJ5OworCisgICAgLyoqCisgICAg
ICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKi8KKworICAgIGZ1
bmN0aW9uIFdlYkdMQmFja2dyb3VuZCggcmVuZGVyZXIsIHN0YXRlLCBvYmplY3RzLCBwcmVtdWx0
aXBsaWVkQWxwaGEgKSB7CisKKyAgICAgICAgdmFyIGNsZWFyQ29sb3IgPSBuZXcgQ29sb3IoIDB4
MDAwMDAwICk7CisgICAgICAgIHZhciBjbGVhckFscGhhID0gMDsKKworICAgICAgICB2YXIgcGxh
bmVNZXNoOworICAgICAgICB2YXIgYm94TWVzaDsKKyAgICAgICAgLy8gU3RvcmUgdGhlIGN1cnJl
bnQgYmFja2dyb3VuZCB0ZXh0dXJlIGFuZCBpdHMgYHZlcnNpb25gCisgICAgICAgIC8vIHNvIHdl
IGNhbiByZWNvbXBpbGUgdGhlIG1hdGVyaWFsIGFjY29yZGluZ2x5LgorICAgICAgICB2YXIgY3Vy
cmVudEJhY2tncm91bmQgPSBudWxsOworICAgICAgICB2YXIgY3VycmVudEJhY2tncm91bmRWZXJz
aW9uID0gMDsKKworICAgICAgICBmdW5jdGlvbiByZW5kZXIoIHJlbmRlckxpc3QsIHNjZW5lLCBj
YW1lcmEsIGZvcmNlQ2xlYXIgKSB7CisKKyAgICAgICAgICAgIHZhciBiYWNrZ3JvdW5kID0gc2Nl
bmUuYmFja2dyb3VuZDsKKworICAgICAgICAgICAgLy8gSWdub3JlIGJhY2tncm91bmQgaW4gQVIK
KyAgICAgICAgICAgIC8vIFRPRE86IFJlY29uc2lkZXIgdGhpcy4KKworICAgICAgICAgICAgdmFy
IHZyID0gcmVuZGVyZXIudnI7CisgICAgICAgICAgICB2YXIgc2Vzc2lvbiA9IHZyLmdldFNlc3Np
b24gJiYgdnIuZ2V0U2Vzc2lvbigpOworCisgICAgICAgICAgICBpZiAoIHNlc3Npb24gJiYgc2Vz
c2lvbi5lbnZpcm9ubWVudEJsZW5kTW9kZSA9PT0gJ2FkZGl0aXZlJyApIHsKKworICAgICAgICAg
ICAgICAgIGJhY2tncm91bmQgPSBudWxsOworCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICggYmFja2dyb3VuZCA9PT0gbnVsbCApIHsKIAogICAgICAgICAgICAgICAgIHNldENsZWFy
KCBjbGVhckNvbG9yLCBjbGVhckFscGhhICk7CisgICAgICAgICAgICAgICAgY3VycmVudEJhY2tn
cm91bmQgPSBudWxsOworICAgICAgICAgICAgICAgIGN1cnJlbnRCYWNrZ3JvdW5kVmVyc2lvbiA9
IDA7CiAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGJhY2tncm91bmQgJiYgYmFja2dyb3VuZC5p
c0NvbG9yICkgewogCiAgICAgICAgICAgICAgICAgc2V0Q2xlYXIoIGJhY2tncm91bmQsIDEgKTsK
ICAgICAgICAgICAgICAgICBmb3JjZUNsZWFyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjdXJy
ZW50QmFja2dyb3VuZCA9IG51bGw7CisgICAgICAgICAgICAgICAgY3VycmVudEJhY2tncm91bmRW
ZXJzaW9uID0gMDsKIAogICAgICAgICAgICAgfQogCkBAIC0xNDY4OCwxOCArMTU1MjMsMTkgQEAK
IAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIGJhY2tncm91bmQgJiYgYmFja2dy
b3VuZC5pc0N1YmVUZXh0dXJlICkgeworICAgICAgICAgICAgaWYgKCBiYWNrZ3JvdW5kICYmICgg
YmFja2dyb3VuZC5pc0N1YmVUZXh0dXJlIHx8IGJhY2tncm91bmQuaXNXZWJHTFJlbmRlclRhcmdl
dEN1YmUgKSApIHsKIAogICAgICAgICAgICAgICAgIGlmICggYm94TWVzaCA9PT0gdW5kZWZpbmVk
ICkgewogCiAgICAgICAgICAgICAgICAgICAgIGJveE1lc2ggPSBuZXcgTWVzaCgKICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ldyBCb3hCdWZmZXJHZW9tZXRyeSggMSwgMSwgMSApLAogICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3IFNoYWRlck1hdGVyaWFsKCB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5pZm9ybXM6IFNoYWRlckxpYi5jdWJlLnVuaWZvcm1zLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCYWNrZ3JvdW5kQ3ViZU1hdGVyaWFsJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtczogY2xvbmVVbmlmb3JtcyggU2hhZGVyTGli
LmN1YmUudW5pZm9ybXMgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhTaGFk
ZXI6IFNoYWRlckxpYi5jdWJlLnZlcnRleFNoYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmcmFnbWVudFNoYWRlcjogU2hhZGVyTGliLmN1YmUuZnJhZ21lbnRTaGFkZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2lkZTogQmFja1NpZGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVwdGhUZXN0OiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlcHRoVGVzdDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhXcml0
ZTogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9nOiBmYWxzZQogICAgICAg
ICAgICAgICAgICAgICAgICAgfSApCkBAIC0xNDcxNCwzNCArMTU1NTAsOTYgQEAKIAogICAgICAg
ICAgICAgICAgICAgICB9OwogCisgICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBjb2RlIGlu
amVjdGlvbiBmb3Igbm9uLWJ1aWx0LWluIG1hdGVyaWFsCisgICAgICAgICAgICAgICAgICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eSggYm94TWVzaC5tYXRlcmlhbCwgJ21hcCcsIHsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3Jtcy50Q3ViZS52YWx1ZTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIH0gKTsKKwogICAgICAgICAg
ICAgICAgICAgICBvYmplY3RzLnVwZGF0ZSggYm94TWVzaCApOwogCiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgYm94TWVzaC5tYXRlcmlhbC51bmlmb3Jtcy50Q3ViZS52YWx1
ZSA9IGJhY2tncm91bmQ7CisgICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBiYWNrZ3JvdW5k
LmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlID8gYmFja2dyb3VuZC50ZXh0dXJlIDogYmFja2dyb3Vu
ZDsKKyAgICAgICAgICAgICAgICBib3hNZXNoLm1hdGVyaWFsLnVuaWZvcm1zLnRDdWJlLnZhbHVl
ID0gdGV4dHVyZTsKKyAgICAgICAgICAgICAgICBib3hNZXNoLm1hdGVyaWFsLnVuaWZvcm1zLnRG
bGlwLnZhbHVlID0gKCBiYWNrZ3JvdW5kLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlICkgPyAxIDog
LSAxOwogCi0gICAgICAgICAgICAgICAgcmVuZGVyTGlzdC5wdXNoKCBib3hNZXNoLCBib3hNZXNo
Lmdlb21ldHJ5LCBib3hNZXNoLm1hdGVyaWFsLCAwLCBudWxsICk7CisgICAgICAgICAgICAgICAg
aWYgKCBjdXJyZW50QmFja2dyb3VuZCAhPT0gYmFja2dyb3VuZCB8fAorICAgICAgICAgICAgICAg
ICAgICAgY3VycmVudEJhY2tncm91bmRWZXJzaW9uICE9PSB0ZXh0dXJlLnZlcnNpb24gKSB7CiAK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoIGJhY2tncm91bmQgJiYgYmFja2dyb3VuZC5pc1RleHR1
cmUgKSB7CisgICAgICAgICAgICAgICAgICAgIGJveE1lc2gubWF0ZXJpYWwubmVlZHNVcGRhdGUg
PSB0cnVlOwogCi0gICAgICAgICAgICAgICAgaWYgKCBwbGFuZUNhbWVyYSA9PT0gdW5kZWZpbmVk
ICkgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50QmFja2dyb3VuZCA9IGJhY2tncm91bmQ7
CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCYWNrZ3JvdW5kVmVyc2lvbiA9IHRleHR1cmUu
dmVyc2lvbjsKIAotICAgICAgICAgICAgICAgICAgICBwbGFuZUNhbWVyYSA9IG5ldyBPcnRob2dy
YXBoaWNDYW1lcmEoIC0gMSwgMSwgMSwgLSAxLCAwLCAxICk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gcHVzaCB0byB0aGUgcHJlLXNvcnRlZCBvcGFxdWUgcmVuZGVy
IGxpc3QKKyAgICAgICAgICAgICAgICByZW5kZXJMaXN0LnVuc2hpZnQoIGJveE1lc2gsIGJveE1l
c2guZ2VvbWV0cnksIGJveE1lc2gubWF0ZXJpYWwsIDAsIDAsIG51bGwgKTsKKworICAgICAgICAg
ICAgfSBlbHNlIGlmICggYmFja2dyb3VuZCAmJiBiYWNrZ3JvdW5kLmlzVGV4dHVyZSApIHsKKwor
ICAgICAgICAgICAgICAgIGlmICggcGxhbmVNZXNoID09PSB1bmRlZmluZWQgKSB7CiAKICAgICAg
ICAgICAgICAgICAgICAgcGxhbmVNZXNoID0gbmV3IE1lc2goCiAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXcgUGxhbmVCdWZmZXJHZW9tZXRyeSggMiwgMiApLAotICAgICAgICAgICAgICAgICAg
ICAgICAgbmV3IE1lc2hCYXNpY01hdGVyaWFsKCB7IGRlcHRoVGVzdDogZmFsc2UsIGRlcHRoV3Jp
dGU6IGZhbHNlLCBmb2c6IGZhbHNlIH0gKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNo
YWRlck1hdGVyaWFsKCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0JhY2tn
cm91bmRNYXRlcmlhbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXM6IGNs
b25lVW5pZm9ybXMoIFNoYWRlckxpYi5iYWNrZ3JvdW5kLnVuaWZvcm1zICksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyOiBTaGFkZXJMaWIuYmFja2dyb3VuZC52ZXJ0
ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXI6IFNo
YWRlckxpYi5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpZGU6IEZyb250U2lkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0
aFRlc3Q6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoV3JpdGU6IGZh
bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvZzogZmFsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gKQogICAgICAgICAgICAgICAgICAgICApOwogCisgICAgICAgICAgICAg
ICAgICAgIHBsYW5lTWVzaC5nZW9tZXRyeS5yZW1vdmVBdHRyaWJ1dGUoICdub3JtYWwnICk7CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gZW5hYmxlIGNvZGUgaW5qZWN0aW9uIGZvciBub24tYnVp
bHQtaW4gbWF0ZXJpYWwKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KCBwbGFuZU1lc2gubWF0ZXJpYWwsICdtYXAnLCB7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMudW5pZm9ybXMudDJELnZhbHVlOworCisgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgfSApOworCiAgICAgICAgICAgICAgICAgICAgIG9iamVjdHMu
dXBkYXRlKCBwbGFuZU1lc2ggKTsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIHBsYW5lTWVzaC5tYXRlcmlhbC5tYXAgPSBiYWNrZ3JvdW5kOworICAgICAgICAgICAgICAg
IHBsYW5lTWVzaC5tYXRlcmlhbC51bmlmb3Jtcy50MkQudmFsdWUgPSBiYWNrZ3JvdW5kOworCisg
ICAgICAgICAgICAgICAgaWYgKCBiYWNrZ3JvdW5kLm1hdHJpeEF1dG9VcGRhdGUgPT09IHRydWUg
KSB7CisKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC51cGRhdGVNYXRyaXgoKTsKKwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHBsYW5lTWVzaC5tYXRlcmlhbC51
bmlmb3Jtcy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KCBiYWNrZ3JvdW5kLm1hdHJpeCApOworCisg
ICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50QmFja2dyb3VuZCAhPT0gYmFja2dyb3VuZCB8fAor
ICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50QmFja2dyb3VuZFZlcnNpb24gIT09IGJhY2tn
cm91bmQudmVyc2lvbiApIHsKKworICAgICAgICAgICAgICAgICAgICBwbGFuZU1lc2gubWF0ZXJp
YWwubmVlZHNVcGRhdGUgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgLy8gVE9ETyBQdXNoIHRo
aXMgdG8gcmVuZGVyTGlzdAorICAgICAgICAgICAgICAgICAgICBjdXJyZW50QmFja2dyb3VuZCA9
IGJhY2tncm91bmQ7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCYWNrZ3JvdW5kVmVyc2lv
biA9IGJhY2tncm91bmQudmVyc2lvbjsKIAotICAgICAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRl
ckJ1ZmZlckRpcmVjdCggcGxhbmVDYW1lcmEsIG51bGwsIHBsYW5lTWVzaC5nZW9tZXRyeSwgcGxh
bmVNZXNoLm1hdGVyaWFsLCBwbGFuZU1lc2gsIG51bGwgKTsKKyAgICAgICAgICAgICAgICB9CisK
KworICAgICAgICAgICAgICAgIC8vIHB1c2ggdG8gdGhlIHByZS1zb3J0ZWQgb3BhcXVlIHJlbmRl
ciBsaXN0CisgICAgICAgICAgICAgICAgcmVuZGVyTGlzdC51bnNoaWZ0KCBwbGFuZU1lc2gsIHBs
YW5lTWVzaC5nZW9tZXRyeSwgcGxhbmVNZXNoLm1hdGVyaWFsLCAwLCAwLCBudWxsICk7CiAKICAg
ICAgICAgICAgIH0KIApAQCAtMTQ3ODgsNyArMTU2ODYsNyBAQAogICAgICAqIEBhdXRob3IgbXJk
b29iIC8gaHR0cDovL21yZG9vYi5jb20vCiAgICAgICovCiAKLSAgICBmdW5jdGlvbiBXZWJHTEJ1
ZmZlclJlbmRlcmVyKCBnbCwgZXh0ZW5zaW9ucywgaW5mbyApIHsKKyAgICBmdW5jdGlvbiBXZWJH
TEJ1ZmZlclJlbmRlcmVyKCBnbCwgZXh0ZW5zaW9ucywgaW5mbywgY2FwYWJpbGl0aWVzICkgewog
CiAgICAgICAgIHZhciBtb2RlOwogCkBAIC0xNDgwOCwxNiArMTU3MDYsMjYgQEAKIAogICAgICAg
ICBmdW5jdGlvbiByZW5kZXJJbnN0YW5jZXMoIGdlb21ldHJ5LCBzdGFydCwgY291bnQgKSB7CiAK
LSAgICAgICAgICAgIHZhciBleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ0FOR0xFX2luc3Rh
bmNlZF9hcnJheXMnICk7CisgICAgICAgICAgICB2YXIgZXh0ZW5zaW9uOwogCi0gICAgICAgICAg
ICBpZiAoIGV4dGVuc2lvbiA9PT0gbnVsbCApIHsKKyAgICAgICAgICAgIGlmICggY2FwYWJpbGl0
aWVzLmlzV2ViR0wyICkgewogCi0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVF
LldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5
IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRf
YXJyYXlzLicgKTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgZXh0
ZW5zaW9uID0gZ2w7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICBl
eHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICk7CisK
KyAgICAgICAgICAgICAgICBpZiAoIGV4dGVuc2lvbiA9PT0gbnVsbCApIHsKKworICAgICAgICAg
ICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xCdWZmZXJSZW5kZXJlcjogdXNp
bmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1
cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuJyApOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgZXh0ZW5zaW9uLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSggbW9kZSwgc3Rh
cnQsIGNvdW50LCBnZW9tZXRyeS5tYXhJbnN0YW5jZWRDb3VudCApOworICAgICAgICAgICAgZXh0
ZW5zaW9uWyBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgPyAnZHJhd0FycmF5c0luc3RhbmNlZCcgOiAn
ZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFJyBdKCBtb2RlLCBzdGFydCwgY291bnQsIGdlb21ldHJ5
Lm1heEluc3RhbmNlZENvdW50ICk7CiAKICAgICAgICAgICAgIGluZm8udXBkYXRlKCBjb3VudCwg
bW9kZSwgZ2VvbWV0cnkubWF4SW5zdGFuY2VkQ291bnQgKTsKIApAQCAtMTQ4NjMsOCArMTU3NzEs
OCBAQAogCiAgICAgICAgICAgICBpZiAoIHByZWNpc2lvbiA9PT0gJ2hpZ2hwJyApIHsKIAotICAg
ICAgICAgICAgICAgIGlmICggZ2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KCBnbC5WRVJURVhf
U0hBREVSLCBnbC5ISUdIX0ZMT0FUICkucHJlY2lzaW9uID4gMCAmJgotICAgICAgICAgICAgICAg
ICAgICAgZ2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KCBnbC5GUkFHTUVOVF9TSEFERVIsIGds
LkhJR0hfRkxPQVQgKS5wcmVjaXNpb24gPiAwICkgeworICAgICAgICAgICAgICAgIGlmICggZ2wu
Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KCAzNTYzMywgMzYzMzggKS5wcmVjaXNpb24gPiAwICYm
CisgICAgICAgICAgICAgICAgICAgICBnbC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoIDM1NjMy
LCAzNjMzOCApLnByZWNpc2lvbiA+IDAgKSB7CiAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICdoaWdocCc7CiAKQEAgLTE0ODc2LDggKzE1Nzg0LDggQEAKIAogICAgICAgICAgICAgaWYgKCBw
cmVjaXNpb24gPT09ICdtZWRpdW1wJyApIHsKIAotICAgICAgICAgICAgICAgIGlmICggZ2wuZ2V0
U2hhZGVyUHJlY2lzaW9uRm9ybWF0KCBnbC5WRVJURVhfU0hBREVSLCBnbC5NRURJVU1fRkxPQVQg
KS5wcmVjaXNpb24gPiAwICYmCi0gICAgICAgICAgICAgICAgICAgICBnbC5nZXRTaGFkZXJQcmVj
aXNpb25Gb3JtYXQoIGdsLkZSQUdNRU5UX1NIQURFUiwgZ2wuTUVESVVNX0ZMT0FUICkucHJlY2lz
aW9uID4gMCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGdsLmdldFNoYWRlclByZWNpc2lvbkZv
cm1hdCggMzU2MzMsIDM2MzM3ICkucHJlY2lzaW9uID4gMCAmJgorICAgICAgICAgICAgICAgICAg
ICAgZ2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KCAzNTYzMiwgMzYzMzcgKS5wcmVjaXNpb24g
PiAwICkgewogCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnbWVkaXVtcCc7CiAKQEAgLTE0
ODg5LDYgKzE1Nzk3LDggQEAKIAogICAgICAgICB9CiAKKyAgICAgICAgdmFyIGlzV2ViR0wyID0g
dHlwZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQgIT09ICd1bmRlZmluZWQnICYmIGdsIGluc3Rh
bmNlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDsKKwogICAgICAgICB2YXIgcHJlY2lzaW9uID0g
cGFyYW1ldGVycy5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMucHJlY2lzaW9u
IDogJ2hpZ2hwJzsKICAgICAgICAgdmFyIG1heFByZWNpc2lvbiA9IGdldE1heFByZWNpc2lvbigg
cHJlY2lzaW9uICk7CiAKQEAgLTE0OTAxLDIyICsxNTgxMSwyNiBAQAogCiAgICAgICAgIHZhciBs
b2dhcml0aG1pY0RlcHRoQnVmZmVyID0gcGFyYW1ldGVycy5sb2dhcml0aG1pY0RlcHRoQnVmZmVy
ID09PSB0cnVlOwogCi0gICAgICAgIHZhciBtYXhUZXh0dXJlcyA9IGdsLmdldFBhcmFtZXRlcigg
Z2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKTsKLSAgICAgICAgdmFyIG1heFZlcnRleFRleHR1
cmVzID0gZ2wuZ2V0UGFyYW1ldGVyKCBnbC5NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMg
KTsKLSAgICAgICAgdmFyIG1heFRleHR1cmVTaXplID0gZ2wuZ2V0UGFyYW1ldGVyKCBnbC5NQVhf
VEVYVFVSRV9TSVpFICk7Ci0gICAgICAgIHZhciBtYXhDdWJlbWFwU2l6ZSA9IGdsLmdldFBhcmFt
ZXRlciggZ2wuTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSApOworICAgICAgICB2YXIgbWF4VGV4
dHVyZXMgPSBnbC5nZXRQYXJhbWV0ZXIoIDM0OTMwICk7CisgICAgICAgIHZhciBtYXhWZXJ0ZXhU
ZXh0dXJlcyA9IGdsLmdldFBhcmFtZXRlciggMzU2NjAgKTsKKyAgICAgICAgdmFyIG1heFRleHR1
cmVTaXplID0gZ2wuZ2V0UGFyYW1ldGVyKCAzMzc5ICk7CisgICAgICAgIHZhciBtYXhDdWJlbWFw
U2l6ZSA9IGdsLmdldFBhcmFtZXRlciggMzQwNzYgKTsKIAotICAgICAgICB2YXIgbWF4QXR0cmli
dXRlcyA9IGdsLmdldFBhcmFtZXRlciggZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTICk7Ci0gICAgICAg
IHZhciBtYXhWZXJ0ZXhVbmlmb3JtcyA9IGdsLmdldFBhcmFtZXRlciggZ2wuTUFYX1ZFUlRFWF9V
TklGT1JNX1ZFQ1RPUlMgKTsKLSAgICAgICAgdmFyIG1heFZhcnlpbmdzID0gZ2wuZ2V0UGFyYW1l
dGVyKCBnbC5NQVhfVkFSWUlOR19WRUNUT1JTICk7Ci0gICAgICAgIHZhciBtYXhGcmFnbWVudFVu
aWZvcm1zID0gZ2wuZ2V0UGFyYW1ldGVyKCBnbC5NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JT
ICk7CisgICAgICAgIHZhciBtYXhBdHRyaWJ1dGVzID0gZ2wuZ2V0UGFyYW1ldGVyKCAzNDkyMSAp
OworICAgICAgICB2YXIgbWF4VmVydGV4VW5pZm9ybXMgPSBnbC5nZXRQYXJhbWV0ZXIoIDM2MzQ3
ICk7CisgICAgICAgIHZhciBtYXhWYXJ5aW5ncyA9IGdsLmdldFBhcmFtZXRlciggMzYzNDggKTsK
KyAgICAgICAgdmFyIG1heEZyYWdtZW50VW5pZm9ybXMgPSBnbC5nZXRQYXJhbWV0ZXIoIDM2MzQ5
ICk7CiAKICAgICAgICAgdmFyIHZlcnRleFRleHR1cmVzID0gbWF4VmVydGV4VGV4dHVyZXMgPiAw
OwotICAgICAgICB2YXIgZmxvYXRGcmFnbWVudFRleHR1cmVzID0gISEgZXh0ZW5zaW9ucy5nZXQo
ICdPRVNfdGV4dHVyZV9mbG9hdCcgKTsKKyAgICAgICAgdmFyIGZsb2F0RnJhZ21lbnRUZXh0dXJl
cyA9IGlzV2ViR0wyIHx8ICEhIGV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfZmxvYXQnICk7
CiAgICAgICAgIHZhciBmbG9hdFZlcnRleFRleHR1cmVzID0gdmVydGV4VGV4dHVyZXMgJiYgZmxv
YXRGcmFnbWVudFRleHR1cmVzOwogCisgICAgICAgIHZhciBtYXhTYW1wbGVzID0gaXNXZWJHTDIg
PyBnbC5nZXRQYXJhbWV0ZXIoIDM2MTgzICkgOiAwOworCiAgICAgICAgIHJldHVybiB7CiAKKyAg
ICAgICAgICAgIGlzV2ViR0wyOiBpc1dlYkdMMiwKKwogICAgICAgICAgICAgZ2V0TWF4QW5pc290
cm9weTogZ2V0TWF4QW5pc290cm9weSwKICAgICAgICAgICAgIGdldE1heFByZWNpc2lvbjogZ2V0
TWF4UHJlY2lzaW9uLAogCkBAIC0xNDkzNSw3ICsxNTg0OSw5IEBACiAKICAgICAgICAgICAgIHZl
cnRleFRleHR1cmVzOiB2ZXJ0ZXhUZXh0dXJlcywKICAgICAgICAgICAgIGZsb2F0RnJhZ21lbnRU
ZXh0dXJlczogZmxvYXRGcmFnbWVudFRleHR1cmVzLAotICAgICAgICAgICAgZmxvYXRWZXJ0ZXhU
ZXh0dXJlczogZmxvYXRWZXJ0ZXhUZXh0dXJlcworICAgICAgICAgICAgZmxvYXRWZXJ0ZXhUZXh0
dXJlczogZmxvYXRWZXJ0ZXhUZXh0dXJlcywKKworICAgICAgICAgICAgbWF4U2FtcGxlczogbWF4
U2FtcGxlcwogCiAgICAgICAgIH07CiAKQEAgLTE1MTg5LDE4ICsxNjEwNSw3IEBACiAKICAgICAg
ICAgICAgIGRlbGV0ZSBnZW9tZXRyaWVzWyBnZW9tZXRyeS5pZCBdOwogCi0gICAgICAgICAgICAv
LyBUT0RPIFJlbW92ZSBkdXBsaWNhdGUgY29kZQotCi0gICAgICAgICAgICB2YXIgYXR0cmlidXRl
ID0gd2lyZWZyYW1lQXR0cmlidXRlc1sgZ2VvbWV0cnkuaWQgXTsKLQotICAgICAgICAgICAgaWYg
KCBhdHRyaWJ1dGUgKSB7Ci0KLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnJlbW92ZSggYXR0
cmlidXRlICk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHdpcmVmcmFtZUF0dHJpYnV0ZXNbIGdl
b21ldHJ5LmlkIF07Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXR0cmlidXRlID0g
d2lyZWZyYW1lQXR0cmlidXRlc1sgYnVmZmVyZ2VvbWV0cnkuaWQgXTsKKyAgICAgICAgICAgIHZh
ciBhdHRyaWJ1dGUgPSB3aXJlZnJhbWVBdHRyaWJ1dGVzWyBidWZmZXJnZW9tZXRyeS5pZCBdOwog
CiAgICAgICAgICAgICBpZiAoIGF0dHJpYnV0ZSApIHsKIApAQCAtMTUyNTQsMTMgKzE2MTU5LDEz
IEBACiAKICAgICAgICAgICAgIGlmICggaW5kZXggIT09IG51bGwgKSB7CiAKLSAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGVzLnVwZGF0ZSggaW5kZXgsIGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSICk7
CisgICAgICAgICAgICAgICAgYXR0cmlidXRlcy51cGRhdGUoIGluZGV4LCAzNDk2MyApOwogCiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvciAoIHZhciBuYW1lIGluIGdlb21ldHJ5QXR0
cmlidXRlcyApIHsKIAotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMudXBkYXRlKCBnZW9tZXRy
eUF0dHJpYnV0ZXNbIG5hbWUgXSwgZ2wuQVJSQVlfQlVGRkVSICk7CisgICAgICAgICAgICAgICAg
YXR0cmlidXRlcy51cGRhdGUoIGdlb21ldHJ5QXR0cmlidXRlc1sgbmFtZSBdLCAzNDk2MiApOwog
CiAgICAgICAgICAgICB9CiAKQEAgLTE1Mjc0LDcgKzE2MTc5LDcgQEAKIAogICAgICAgICAgICAg
ICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAK
LSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy51cGRhdGUoIGFycmF5WyBpIF0sIGdsLkFS
UkFZX0JVRkZFUiApOworICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnVwZGF0ZSggYXJy
YXlbIGkgXSwgMzQ5NjIgKTsKIAogICAgICAgICAgICAgICAgIH0KIApAQCAtMTUzMjksNyArMTYy
MzQsNyBAQAogCiAgICAgICAgICAgICBhdHRyaWJ1dGUgPSBuZXcgKCBhcnJheU1heCggaW5kaWNl
cyApID4gNjU1MzUgPyBVaW50MzJCdWZmZXJBdHRyaWJ1dGUgOiBVaW50MTZCdWZmZXJBdHRyaWJ1
dGUgKSggaW5kaWNlcywgMSApOwogCi0gICAgICAgICAgICBhdHRyaWJ1dGVzLnVwZGF0ZSggYXR0
cmlidXRlLCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiApOworICAgICAgICAgICAgYXR0cmlidXRl
cy51cGRhdGUoIGF0dHJpYnV0ZSwgMzQ5NjMgKTsKIAogICAgICAgICAgICAgd2lyZWZyYW1lQXR0
cmlidXRlc1sgZ2VvbWV0cnkuaWQgXSA9IGF0dHJpYnV0ZTsKIApAQCAtMTUzNTIsNyArMTYyNTcs
NyBAQAogICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCiAgICAgICov
CiAKLSAgICBmdW5jdGlvbiBXZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlciggZ2wsIGV4dGVuc2lv
bnMsIGluZm8gKSB7CisgICAgZnVuY3Rpb24gV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXIoIGds
LCBleHRlbnNpb25zLCBpbmZvLCBjYXBhYmlsaXRpZXMgKSB7CiAKICAgICAgICAgdmFyIG1vZGU7
CiAKQEAgLTE1MzgxLDE2ICsxNjI4NiwyNiBAQAogCiAgICAgICAgIGZ1bmN0aW9uIHJlbmRlcklu
c3RhbmNlcyggZ2VvbWV0cnksIHN0YXJ0LCBjb3VudCApIHsKIAotICAgICAgICAgICAgdmFyIGV4
dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKTsKKyAg
ICAgICAgICAgIHZhciBleHRlbnNpb247CiAKLSAgICAgICAgICAgIGlmICggZXh0ZW5zaW9uID09
PSBudWxsICkgeworICAgICAgICAgICAgaWYgKCBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgKSB7CiAK
LSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVy
UmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2Fy
ZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLicgKTsK
LSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gZ2w7
CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICB2YXIgZXh0ZW5zaW9u
ID0gZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApOworCisgICAgICAg
ICAgICAgICAgaWYgKCBleHRlbnNpb24gPT09IG51bGwgKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgY29uc29sZS5lcnJvciggJ1RIUkVFLldlYkdMSW5kZXhlZEJ1ZmZlclJlbmRlcmVyOiB1c2lu
ZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3Vw
cG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4nICk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBleHRlbnNpb24uZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoIG1vZGUsIGNv
dW50LCB0eXBlLCBzdGFydCAqIGJ5dGVzUGVyRWxlbWVudCwgZ2VvbWV0cnkubWF4SW5zdGFuY2Vk
Q291bnQgKTsKKyAgICAgICAgICAgIGV4dGVuc2lvblsgY2FwYWJpbGl0aWVzLmlzV2ViR0wyID8g
J2RyYXdFbGVtZW50c0luc3RhbmNlZCcgOiAnZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUnIF0o
IG1vZGUsIGNvdW50LCB0eXBlLCBzdGFydCAqIGJ5dGVzUGVyRWxlbWVudCwgZ2VvbWV0cnkubWF4
SW5zdGFuY2VkQ291bnQgKTsKIAogICAgICAgICAgICAgaW5mby51cGRhdGUoIGNvdW50LCBtb2Rl
LCBnZW9tZXRyeS5tYXhJbnN0YW5jZWRDb3VudCApOwogCkBAIC0xNTQzMiwyOCArMTYzNDcsMjgg
QEAKIAogICAgICAgICAgICAgc3dpdGNoICggbW9kZSApIHsKIAotICAgICAgICAgICAgICAgIGNh
c2UgZ2wuVFJJQU5HTEVTOgorICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAg
ICAgICAgcmVuZGVyLnRyaWFuZ2xlcyArPSBpbnN0YW5jZUNvdW50ICogKCBjb3VudCAvIDMgKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBjYXNlIGdsLlRS
SUFOR0xFX1NUUklQOgotICAgICAgICAgICAgICAgIGNhc2UgZ2wuVFJJQU5HTEVfRkFOOgorICAg
ICAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAg
ICAgICAgICAgIHJlbmRlci50cmlhbmdsZXMgKz0gaW5zdGFuY2VDb3VudCAqICggY291bnQgLSAy
ICk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgY2FzZSBn
bC5MSU5FUzoKKyAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgIHJl
bmRlci5saW5lcyArPSBpbnN0YW5jZUNvdW50ICogKCBjb3VudCAvIDIgKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBjYXNlIGdsLkxJTkVfU1RSSVA6Cisg
ICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgICByZW5kZXIubGluZXMg
Kz0gaW5zdGFuY2VDb3VudCAqICggY291bnQgLSAxICk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgICAgICAgICAgY2FzZSBnbC5MSU5FX0xPT1A6CisgICAgICAgICAgICAg
ICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICByZW5kZXIubGluZXMgKz0gaW5zdGFuY2VD
b3VudCAqIGNvdW50OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAg
ICAgIGNhc2UgZ2wuUE9JTlRTOgorICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAg
ICAgICAgICAgcmVuZGVyLnBvaW50cyArPSBpbnN0YW5jZUNvdW50ICogY291bnQ7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0xNTY1Myw2ICsxNjU2OCw3IEBACiAKICAgICAgICAg
aW1hZ2VzID0gaW1hZ2VzICE9PSB1bmRlZmluZWQgPyBpbWFnZXMgOiBbXTsKICAgICAgICAgbWFw
cGluZyA9IG1hcHBpbmcgIT09IHVuZGVmaW5lZCA/IG1hcHBpbmcgOiBDdWJlUmVmbGVjdGlvbk1h
cHBpbmc7CisgICAgICAgIGZvcm1hdCA9IGZvcm1hdCAhPT0gdW5kZWZpbmVkID8gZm9ybWF0IDog
UkdCRm9ybWF0OwogCiAgICAgICAgIFRleHR1cmUuY2FsbCggdGhpcywgaW1hZ2VzLCBtYXBwaW5n
LCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNv
dHJvcHksIGVuY29kaW5nICk7CiAKQEAgLTE1NjgxLDYgKzE2NTk3LDYyIEBACiAKICAgICB9ICk7
CiAKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIFRha2FoaXJvIGh0dHBzOi8vZ2l0aHViLmNvbS90
YWthaGlyb3gKKyAgICAgKi8KKworICAgIGZ1bmN0aW9uIERhdGFUZXh0dXJlMkRBcnJheSggZGF0
YSwgd2lkdGgsIGhlaWdodCwgZGVwdGggKSB7CisKKyAgICAgICAgVGV4dHVyZS5jYWxsKCB0aGlz
LCBudWxsICk7CisKKyAgICAgICAgdGhpcy5pbWFnZSA9IHsgZGF0YTogZGF0YSwgd2lkdGg6IHdp
ZHRoLCBoZWlnaHQ6IGhlaWdodCwgZGVwdGg6IGRlcHRoIH07CisKKyAgICAgICAgdGhpcy5tYWdG
aWx0ZXIgPSBOZWFyZXN0RmlsdGVyOworICAgICAgICB0aGlzLm1pbkZpbHRlciA9IE5lYXJlc3RG
aWx0ZXI7CisKKyAgICAgICAgdGhpcy53cmFwUiA9IENsYW1wVG9FZGdlV3JhcHBpbmc7CisKKyAg
ICAgICAgdGhpcy5nZW5lcmF0ZU1pcG1hcHMgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5mbGlwWSA9
IGZhbHNlOworCisgICAgfQorCisgICAgRGF0YVRleHR1cmUyREFycmF5LnByb3RvdHlwZSA9IE9i
amVjdC5jcmVhdGUoIFRleHR1cmUucHJvdG90eXBlICk7CisgICAgRGF0YVRleHR1cmUyREFycmF5
LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERhdGFUZXh0dXJlMkRBcnJheTsKKyAgICBEYXRhVGV4
dHVyZTJEQXJyYXkucHJvdG90eXBlLmlzRGF0YVRleHR1cmUyREFycmF5ID0gdHJ1ZTsKKworICAg
IC8qKgorICAgICAqIEBhdXRob3IgQXJ0dXIgVHJ6ZXNpb2sKKyAgICAgKi8KKworICAgIGZ1bmN0
aW9uIERhdGFUZXh0dXJlM0QoIGRhdGEsIHdpZHRoLCBoZWlnaHQsIGRlcHRoICkgeworCisgICAg
ICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGFkZCAuc2V0WFhYKCkgbWV0aG9kcyBmb3Igc2V0dGluZyBw
cm9wZXJ0aWVzIGxhdGVyLgorICAgICAgICAvLyBVc2VycyBjYW4gc3RpbGwgc2V0IGluIERhdGFU
ZXh0dXJlM0QgZGlyZWN0bHkuCisgICAgICAgIC8vCisgICAgICAgIC8vICB2YXIgdGV4dHVyZSA9
IG5ldyBUSFJFRS5EYXRhVGV4dHVyZTNEKCBkYXRhLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCApOwor
ICAgICAgICAvLyAgdGV4dHVyZS5hbmlzb3Ryb3B5ID0gMTY7CisgICAgICAgIC8vCisgICAgICAg
IC8vIFNlZSAjMTQ4MzkKKworICAgICAgICBUZXh0dXJlLmNhbGwoIHRoaXMsIG51bGwgKTsKKwor
ICAgICAgICB0aGlzLmltYWdlID0geyBkYXRhOiBkYXRhLCB3aWR0aDogd2lkdGgsIGhlaWdodDog
aGVpZ2h0LCBkZXB0aDogZGVwdGggfTsKKworICAgICAgICB0aGlzLm1hZ0ZpbHRlciA9IE5lYXJl
c3RGaWx0ZXI7CisgICAgICAgIHRoaXMubWluRmlsdGVyID0gTmVhcmVzdEZpbHRlcjsKKworICAg
ICAgICB0aGlzLndyYXBSID0gQ2xhbXBUb0VkZ2VXcmFwcGluZzsKKworICAgICAgICB0aGlzLmdl
bmVyYXRlTWlwbWFwcyA9IGZhbHNlOworICAgICAgICB0aGlzLmZsaXBZID0gZmFsc2U7CisKKyAg
ICB9CisKKyAgICBEYXRhVGV4dHVyZTNELnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFRleHR1
cmUucHJvdG90eXBlICk7CisgICAgRGF0YVRleHR1cmUzRC5wcm90b3R5cGUuY29uc3RydWN0b3Ig
PSBEYXRhVGV4dHVyZTNEOworICAgIERhdGFUZXh0dXJlM0QucHJvdG90eXBlLmlzRGF0YVRleHR1
cmUzRCA9IHRydWU7CisKICAgICAvKioKICAgICAgKiBAYXV0aG9yIHRzY2h3CiAgICAgICogQGF1
dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29tL011Z2VuODcKQEAgLTE1Njg4LDcgKzE2
NjYwLDcgQEAKICAgICAgKgogICAgICAqIFVuaWZvcm1zIG9mIGEgcHJvZ3JhbS4KICAgICAgKiBU
aG9zZSBmb3JtIGEgdHJlZSBzdHJ1Y3R1cmUgd2l0aCBhIHNwZWNpYWwgdG9wLWxldmVsIGNvbnRh
aW5lciBmb3IgdGhlIHJvb3QsCi0gICAgICogd2hpY2ggeW91IGdldCBieSBjYWxsaW5nICduZXcg
V2ViR0xVbmlmb3JtcyggZ2wsIHByb2dyYW0sIHJlbmRlcmVyICknLgorICAgICAqIHdoaWNoIHlv
dSBnZXQgYnkgY2FsbGluZyAnbmV3IFdlYkdMVW5pZm9ybXMoIGdsLCBwcm9ncmFtICknLgogICAg
ICAqCiAgICAgICoKICAgICAgKiBQcm9wZXJ0aWVzIG9mIGlubmVyIG5vZGVzIGluY2x1ZGluZyB0
aGUgdG9wLWxldmVsIGNvbnRhaW5lcjoKQEAgLTE1Njk5LDE1ICsxNjY3MSwxNSBAQAogICAgICAq
CiAgICAgICogTWV0aG9kcyBvZiBhbGwgbm9kZXMgZXhjZXB0IHRoZSB0b3AtbGV2ZWwgY29udGFp
bmVyOgogICAgICAqCi0gICAgICogLnNldFZhbHVlKCBnbCwgdmFsdWUsIFtyZW5kZXJlcl0gKQor
ICAgICAqIC5zZXRWYWx1ZSggZ2wsIHZhbHVlLCBbdGV4dHVyZXNdICkKICAgICAgKgogICAgICAq
ICAgICAgdXBsb2FkcyBhIHVuaWZvcm0gdmFsdWUocykKLSAgICAgKiAgICAgIHRoZSAncmVuZGVy
ZXInIHBhcmFtZXRlciBpcyBuZWVkZWQgZm9yIHNhbXBsZXIgdW5pZm9ybXMKKyAgICAgKiAgICAg
IHRoZSAndGV4dHVyZXMnIHBhcmFtZXRlciBpcyBuZWVkZWQgZm9yIHNhbXBsZXIgdW5pZm9ybXMK
ICAgICAgKgogICAgICAqCi0gICAgICogU3RhdGljIG1ldGhvZHMgb2YgdGhlIHRvcC1sZXZlbCBj
b250YWluZXIgKHJlbmRlcmVyIGZhY3Rvcml6YXRpb25zKToKKyAgICAgKiBTdGF0aWMgbWV0aG9k
cyBvZiB0aGUgdG9wLWxldmVsIGNvbnRhaW5lciAodGV4dHVyZXMgZmFjdG9yaXphdGlvbnMpOgog
ICAgICAqCi0gICAgICogLnVwbG9hZCggZ2wsIHNlcSwgdmFsdWVzLCByZW5kZXJlciApCisgICAg
ICogLnVwbG9hZCggZ2wsIHNlcSwgdmFsdWVzLCB0ZXh0dXJlcyApCiAgICAgICoKICAgICAgKiAg
ICAgIHNldHMgdW5pZm9ybXMgaW4gJ3NlcScgdG8gJ3ZhbHVlc1tpZF0udmFsdWUnCiAgICAgICoK
QEAgLTE1NzE2LDE2ICsxNjY4OCwxMiBAQAogICAgICAqICAgICAgZmlsdGVycyAnc2VxJyBlbnRy
aWVzIHdpdGggY29ycmVzcG9uZGluZyBlbnRyeSBpbiB2YWx1ZXMKICAgICAgKgogICAgICAqCi0g
ICAgICogTWV0aG9kcyBvZiB0aGUgdG9wLWxldmVsIGNvbnRhaW5lciAocmVuZGVyZXIgZmFjdG9y
aXphdGlvbnMpOgorICAgICAqIE1ldGhvZHMgb2YgdGhlIHRvcC1sZXZlbCBjb250YWluZXIgKHRl
eHR1cmVzIGZhY3Rvcml6YXRpb25zKToKICAgICAgKgotICAgICAqIC5zZXRWYWx1ZSggZ2wsIG5h
bWUsIHZhbHVlICkKKyAgICAgKiAuc2V0VmFsdWUoIGdsLCBuYW1lLCB2YWx1ZSwgdGV4dHVyZXMg
KQogICAgICAqCiAgICAgICogICAgICBzZXRzIHVuaWZvcm0gd2l0aCAgbmFtZSAnbmFtZScgdG8g
J3ZhbHVlJwogICAgICAqCi0gICAgICogLnNldCggZ2wsIG9iaiwgcHJvcCApCi0gICAgICoKLSAg
ICAgKiAgICAgIHNldHMgdW5pZm9ybSBmcm9tIG9iamVjdCBhbmQgcHJvcGVydHkgd2l0aCBzYW1l
IG5hbWUgdGhhbiB1bmlmb3JtCi0gICAgICoKICAgICAgKiAuc2V0T3B0aW9uYWwoIGdsLCBvYmos
IHByb3AgKQogICAgICAqCiAgICAgICogICAgICBsaWtlIC5zZXQgZm9yIGFuIG9wdGlvbmFsIHBy
b3BlcnR5IG9mIHRoZSBvYmplY3QKQEAgLTE1NzMzLDE3ICsxNjcwMSwxMCBAQAogICAgICAqLwog
CiAgICAgdmFyIGVtcHR5VGV4dHVyZSA9IG5ldyBUZXh0dXJlKCk7CisgICAgdmFyIGVtcHR5VGV4
dHVyZTJkQXJyYXkgPSBuZXcgRGF0YVRleHR1cmUyREFycmF5KCk7CisgICAgdmFyIGVtcHR5VGV4
dHVyZTNkID0gbmV3IERhdGFUZXh0dXJlM0QoKTsKICAgICB2YXIgZW1wdHlDdWJlVGV4dHVyZSA9
IG5ldyBDdWJlVGV4dHVyZSgpOwogCi0gICAgLy8gLS0tIEJhc2UgZm9yIGlubmVyIG5vZGVzIChp
bmNsdWRpbmcgdGhlIHJvb3QpIC0tLQotCi0gICAgZnVuY3Rpb24gVW5pZm9ybUNvbnRhaW5lcigp
IHsKLQotICAgICAgICB0aGlzLnNlcSA9IFtdOwotICAgICAgICB0aGlzLm1hcCA9IHt9OwotCi0g
ICAgfQotCiAgICAgLy8gLS0tIFV0aWxpdGllcyAtLS0KIAogICAgIC8vIEFycmF5IENhY2hlcyAo
cHJvdmlkZSB0eXBlZCBhcnJheXMgZm9yIHRlbXBvcmFyeSBieSBzaXplKQpAQCAtMTU4MjAsNyAr
MTY3ODEsNyBAQAogCiAgICAgLy8gVGV4dHVyZSB1bml0IGFsbG9jYXRpb24KIAotICAgIGZ1bmN0
aW9uIGFsbG9jVGV4VW5pdHMoIHJlbmRlcmVyLCBuICkgeworICAgIGZ1bmN0aW9uIGFsbG9jVGV4
VW5pdHMoIHRleHR1cmVzLCBuICkgewogCiAgICAgICAgIHZhciByID0gYXJyYXlDYWNoZUkzMlsg
biBdOwogCkBAIC0xNTgzMiw3ICsxNjc5Myw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBmb3Ig
KCB2YXIgaSA9IDA7IGkgIT09IG47ICsrIGkgKQotICAgICAgICAgICAgclsgaSBdID0gcmVuZGVy
ZXIuYWxsb2NUZXh0dXJlVW5pdCgpOworICAgICAgICAgICAgclsgaSBdID0gdGV4dHVyZXMuYWxs
b2NhdGVUZXh0dXJlVW5pdCgpOwogCiAgICAgICAgIHJldHVybiByOwogCkBAIC0xNTg0NSw3ICsx
NjgwNiw3IEBACiAKICAgICAvLyBTaW5nbGUgc2NhbGFyCiAKLSAgICBmdW5jdGlvbiBzZXRWYWx1
ZTFmKCBnbCwgdiApIHsKKyAgICBmdW5jdGlvbiBzZXRWYWx1ZVYxZiggZ2wsIHYgKSB7CiAKICAg
ICAgICAgdmFyIGNhY2hlID0gdGhpcy5jYWNoZTsKIApAQCAtMTU4NTcsMjEgKzE2ODE4LDkgQEAK
IAogICAgIH0KIAotICAgIGZ1bmN0aW9uIHNldFZhbHVlMWkoIGdsLCB2ICkgewotCi0gICAgICAg
IHZhciBjYWNoZSA9IHRoaXMuY2FjaGU7Ci0KLSAgICAgICAgaWYgKCBjYWNoZVsgMCBdID09PSB2
ICkgcmV0dXJuOwotCi0gICAgICAgIGdsLnVuaWZvcm0xaSggdGhpcy5hZGRyLCB2ICk7Ci0KLSAg
ICAgICAgY2FjaGVbIDAgXSA9IHY7Ci0KLSAgICB9Ci0KICAgICAvLyBTaW5nbGUgZmxvYXQgdmVj
dG9yIChmcm9tIGZsYXQgYXJyYXkgb3IgVEhSRUUuVmVjdG9yTikKIAotICAgIGZ1bmN0aW9uIHNl
dFZhbHVlMmZ2KCBnbCwgdiApIHsKKyAgICBmdW5jdGlvbiBzZXRWYWx1ZVYyZiggZ2wsIHYgKSB7
CiAKICAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5jYWNoZTsKIApAQCAtMTU4OTgsNyArMTY4NDcs
NyBAQAogCiAgICAgfQogCi0gICAgZnVuY3Rpb24gc2V0VmFsdWUzZnYoIGdsLCB2ICkgeworICAg
IGZ1bmN0aW9uIHNldFZhbHVlVjNmKCBnbCwgdiApIHsKIAogICAgICAgICB2YXIgY2FjaGUgPSB0
aGlzLmNhY2hlOwogCkBAIC0xNTkzOCw3ICsxNjg4Nyw3IEBACiAKICAgICB9CiAKLSAgICBmdW5j
dGlvbiBzZXRWYWx1ZTRmdiggZ2wsIHYgKSB7CisgICAgZnVuY3Rpb24gc2V0VmFsdWVWNGYoIGds
LCB2ICkgewogCiAgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuY2FjaGU7CiAKQEAgLTE1OTY5LDcg
KzE2OTE4LDcgQEAKIAogICAgIC8vIFNpbmdsZSBtYXRyaXggKGZyb20gZmxhdCBhcnJheSBvciBN
YXRyaXhOKQogCi0gICAgZnVuY3Rpb24gc2V0VmFsdWUyZm0oIGdsLCB2ICkgeworICAgIGZ1bmN0
aW9uIHNldFZhbHVlTTIoIGdsLCB2ICkgewogCiAgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuY2Fj
aGU7CiAgICAgICAgIHZhciBlbGVtZW50cyA9IHYuZWxlbWVudHM7CkBAIC0xNTk5Niw3ICsxNjk0
NSw3IEBACiAKICAgICB9CiAKLSAgICBmdW5jdGlvbiBzZXRWYWx1ZTNmbSggZ2wsIHYgKSB7Cisg
ICAgZnVuY3Rpb24gc2V0VmFsdWVNMyggZ2wsIHYgKSB7CiAKICAgICAgICAgdmFyIGNhY2hlID0g
dGhpcy5jYWNoZTsKICAgICAgICAgdmFyIGVsZW1lbnRzID0gdi5lbGVtZW50czsKQEAgLTE2MDIz
LDcgKzE2OTcyLDcgQEAKIAogICAgIH0KIAotICAgIGZ1bmN0aW9uIHNldFZhbHVlNGZtKCBnbCwg
diApIHsKKyAgICBmdW5jdGlvbiBzZXRWYWx1ZU00KCBnbCwgdiApIHsKIAogICAgICAgICB2YXIg
Y2FjaGUgPSB0aGlzLmNhY2hlOwogICAgICAgICB2YXIgZWxlbWVudHMgPSB2LmVsZW1lbnRzOwpA
QCAtMTYwNTIsMTAgKzE3MDAxLDEwIEBACiAKICAgICAvLyBTaW5nbGUgdGV4dHVyZSAoMkQgLyBD
dWJlKQogCi0gICAgZnVuY3Rpb24gc2V0VmFsdWVUMSggZ2wsIHYsIHJlbmRlcmVyICkgeworICAg
IGZ1bmN0aW9uIHNldFZhbHVlVDEoIGdsLCB2LCB0ZXh0dXJlcyApIHsKIAogICAgICAgICB2YXIg
Y2FjaGUgPSB0aGlzLmNhY2hlOwotICAgICAgICB2YXIgdW5pdCA9IHJlbmRlcmVyLmFsbG9jVGV4
dHVyZVVuaXQoKTsKKyAgICAgICAgdmFyIHVuaXQgPSB0ZXh0dXJlcy5hbGxvY2F0ZVRleHR1cmVV
bml0KCk7CiAKICAgICAgICAgaWYgKCBjYWNoZVsgMCBdICE9PSB1bml0ICkgewogCkBAIC0xNjA2
NCwxNCArMTcwMTMsMTQgQEAKIAogICAgICAgICB9CiAKLSAgICAgICAgcmVuZGVyZXIuc2V0VGV4
dHVyZTJEKCB2IHx8IGVtcHR5VGV4dHVyZSwgdW5pdCApOworICAgICAgICB0ZXh0dXJlcy5zYWZl
U2V0VGV4dHVyZTJEKCB2IHx8IGVtcHR5VGV4dHVyZSwgdW5pdCApOwogCiAgICAgfQogCi0gICAg
ZnVuY3Rpb24gc2V0VmFsdWVUNiggZ2wsIHYsIHJlbmRlcmVyICkgeworICAgIGZ1bmN0aW9uIHNl
dFZhbHVlVDJEQXJyYXkxKCBnbCwgdiwgdGV4dHVyZXMgKSB7CiAKICAgICAgICAgdmFyIGNhY2hl
ID0gdGhpcy5jYWNoZTsKLSAgICAgICAgdmFyIHVuaXQgPSByZW5kZXJlci5hbGxvY1RleHR1cmVV
bml0KCk7CisgICAgICAgIHZhciB1bml0ID0gdGV4dHVyZXMuYWxsb2NhdGVUZXh0dXJlVW5pdCgp
OwogCiAgICAgICAgIGlmICggY2FjaGVbIDAgXSAhPT0gdW5pdCApIHsKIApAQCAtMTYwODAsMTMg
KzE3MDI5LDU3IEBACiAKICAgICAgICAgfQogCi0gICAgICAgIHJlbmRlcmVyLnNldFRleHR1cmVD
dWJlKCB2IHx8IGVtcHR5Q3ViZVRleHR1cmUsIHVuaXQgKTsKKyAgICAgICAgdGV4dHVyZXMuc2V0
VGV4dHVyZTJEQXJyYXkoIHYgfHwgZW1wdHlUZXh0dXJlMmRBcnJheSwgdW5pdCApOworCisgICAg
fQorCisgICAgZnVuY3Rpb24gc2V0VmFsdWVUM0QxKCBnbCwgdiwgdGV4dHVyZXMgKSB7CisKKyAg
ICAgICAgdmFyIGNhY2hlID0gdGhpcy5jYWNoZTsKKyAgICAgICAgdmFyIHVuaXQgPSB0ZXh0dXJl
cy5hbGxvY2F0ZVRleHR1cmVVbml0KCk7CisKKyAgICAgICAgaWYgKCBjYWNoZVsgMCBdICE9PSB1
bml0ICkgeworCisgICAgICAgICAgICBnbC51bmlmb3JtMWkoIHRoaXMuYWRkciwgdW5pdCApOwor
ICAgICAgICAgICAgY2FjaGVbIDAgXSA9IHVuaXQ7CisKKyAgICAgICAgfQorCisgICAgICAgIHRl
eHR1cmVzLnNldFRleHR1cmUzRCggdiB8fCBlbXB0eVRleHR1cmUzZCwgdW5pdCApOworCisgICAg
fQorCisgICAgZnVuY3Rpb24gc2V0VmFsdWVUNiggZ2wsIHYsIHRleHR1cmVzICkgeworCisgICAg
ICAgIHZhciBjYWNoZSA9IHRoaXMuY2FjaGU7CisgICAgICAgIHZhciB1bml0ID0gdGV4dHVyZXMu
YWxsb2NhdGVUZXh0dXJlVW5pdCgpOworCisgICAgICAgIGlmICggY2FjaGVbIDAgXSAhPT0gdW5p
dCApIHsKKworICAgICAgICAgICAgZ2wudW5pZm9ybTFpKCB0aGlzLmFkZHIsIHVuaXQgKTsKKyAg
ICAgICAgICAgIGNhY2hlWyAwIF0gPSB1bml0OworCisgICAgICAgIH0KKworICAgICAgICB0ZXh0
dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmUoIHYgfHwgZW1wdHlDdWJlVGV4dHVyZSwgdW5pdCApOwog
CiAgICAgfQogCiAgICAgLy8gSW50ZWdlciAvIEJvb2xlYW4gdmVjdG9ycyBvciBhcnJheXMgdGhl
cmVvZiAoYWx3YXlzIGZsYXQgYXJyYXlzKQogCi0gICAgZnVuY3Rpb24gc2V0VmFsdWUyaXYoIGds
LCB2ICkgeworICAgIGZ1bmN0aW9uIHNldFZhbHVlVjFpKCBnbCwgdiApIHsKKworICAgICAgICB2
YXIgY2FjaGUgPSB0aGlzLmNhY2hlOworCisgICAgICAgIGlmICggY2FjaGVbIDAgXSA9PT0gdiAp
IHJldHVybjsKKworICAgICAgICBnbC51bmlmb3JtMWkoIHRoaXMuYWRkciwgdiApOworCisgICAg
ICAgIGNhY2hlWyAwIF0gPSB2OworCisgICAgfQorCisgICAgZnVuY3Rpb24gc2V0VmFsdWVWMmko
IGdsLCB2ICkgewogCiAgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuY2FjaGU7CiAKQEAgLTE2MDk4
LDcgKzE3MDkxLDcgQEAKIAogICAgIH0KIAotICAgIGZ1bmN0aW9uIHNldFZhbHVlM2l2KCBnbCwg
diApIHsKKyAgICBmdW5jdGlvbiBzZXRWYWx1ZVYzaSggZ2wsIHYgKSB7CiAKICAgICAgICAgdmFy
IGNhY2hlID0gdGhpcy5jYWNoZTsKIApAQCAtMTYxMTAsNyArMTcxMDMsNyBAQAogCiAgICAgfQog
Ci0gICAgZnVuY3Rpb24gc2V0VmFsdWU0aXYoIGdsLCB2ICkgeworICAgIGZ1bmN0aW9uIHNldFZh
bHVlVjRpKCBnbCwgdiApIHsKIAogICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLmNhY2hlOwogCkBA
IC0xNjEyOCwxNzUgKzE3MTIxLDE0MyBAQAogCiAgICAgICAgIHN3aXRjaCAoIHR5cGUgKSB7CiAK
LSAgICAgICAgICAgIGNhc2UgMHgxNDA2OiByZXR1cm4gc2V0VmFsdWUxZjsgLy8gRkxPQVQKLSAg
ICAgICAgICAgIGNhc2UgMHg4YjUwOiByZXR1cm4gc2V0VmFsdWUyZnY7IC8vIF9WRUMyCi0gICAg
ICAgICAgICBjYXNlIDB4OGI1MTogcmV0dXJuIHNldFZhbHVlM2Z2OyAvLyBfVkVDMwotICAgICAg
ICAgICAgY2FzZSAweDhiNTI6IHJldHVybiBzZXRWYWx1ZTRmdjsgLy8gX1ZFQzQKKyAgICAgICAg
ICAgIGNhc2UgMHgxNDA2OiByZXR1cm4gc2V0VmFsdWVWMWY7IC8vIEZMT0FUCisgICAgICAgICAg
ICBjYXNlIDB4OGI1MDogcmV0dXJuIHNldFZhbHVlVjJmOyAvLyBfVkVDMgorICAgICAgICAgICAg
Y2FzZSAweDhiNTE6IHJldHVybiBzZXRWYWx1ZVYzZjsgLy8gX1ZFQzMKKyAgICAgICAgICAgIGNh
c2UgMHg4YjUyOiByZXR1cm4gc2V0VmFsdWVWNGY7IC8vIF9WRUM0CiAKLSAgICAgICAgICAgIGNh
c2UgMHg4YjVhOiByZXR1cm4gc2V0VmFsdWUyZm07IC8vIF9NQVQyCi0gICAgICAgICAgICBjYXNl
IDB4OGI1YjogcmV0dXJuIHNldFZhbHVlM2ZtOyAvLyBfTUFUMwotICAgICAgICAgICAgY2FzZSAw
eDhiNWM6IHJldHVybiBzZXRWYWx1ZTRmbTsgLy8gX01BVDQKKyAgICAgICAgICAgIGNhc2UgMHg4
YjVhOiByZXR1cm4gc2V0VmFsdWVNMjsgLy8gX01BVDIKKyAgICAgICAgICAgIGNhc2UgMHg4YjVi
OiByZXR1cm4gc2V0VmFsdWVNMzsgLy8gX01BVDMKKyAgICAgICAgICAgIGNhc2UgMHg4YjVjOiBy
ZXR1cm4gc2V0VmFsdWVNNDsgLy8gX01BVDQKIAogICAgICAgICAgICAgY2FzZSAweDhiNWU6IGNh
c2UgMHg4ZDY2OiByZXR1cm4gc2V0VmFsdWVUMTsgLy8gU0FNUExFUl8yRCwgU0FNUExFUl9FWFRF
Uk5BTF9PRVMKKyAgICAgICAgICAgIGNhc2UgMHg4YjVmOiByZXR1cm4gc2V0VmFsdWVUM0QxOyAv
LyBTQU1QTEVSXzNECiAgICAgICAgICAgICBjYXNlIDB4OGI2MDogcmV0dXJuIHNldFZhbHVlVDY7
IC8vIFNBTVBMRVJfQ1VCRQorICAgICAgICAgICAgY2FzZSAweDhEQzE6IHJldHVybiBzZXRWYWx1
ZVQyREFycmF5MTsgLy8gU0FNUExFUl8yRF9BUlJBWQogCi0gICAgICAgICAgICBjYXNlIDB4MTQw
NDogY2FzZSAweDhiNTY6IHJldHVybiBzZXRWYWx1ZTFpOyAvLyBJTlQsIEJPT0wKLSAgICAgICAg
ICAgIGNhc2UgMHg4YjUzOiBjYXNlIDB4OGI1NzogcmV0dXJuIHNldFZhbHVlMml2OyAvLyBfVkVD
MgotICAgICAgICAgICAgY2FzZSAweDhiNTQ6IGNhc2UgMHg4YjU4OiByZXR1cm4gc2V0VmFsdWUz
aXY7IC8vIF9WRUMzCi0gICAgICAgICAgICBjYXNlIDB4OGI1NTogY2FzZSAweDhiNTk6IHJldHVy
biBzZXRWYWx1ZTRpdjsgLy8gX1ZFQzQKKyAgICAgICAgICAgIGNhc2UgMHgxNDA0OiBjYXNlIDB4
OGI1NjogcmV0dXJuIHNldFZhbHVlVjFpOyAvLyBJTlQsIEJPT0wKKyAgICAgICAgICAgIGNhc2Ug
MHg4YjUzOiBjYXNlIDB4OGI1NzogcmV0dXJuIHNldFZhbHVlVjJpOyAvLyBfVkVDMgorICAgICAg
ICAgICAgY2FzZSAweDhiNTQ6IGNhc2UgMHg4YjU4OiByZXR1cm4gc2V0VmFsdWVWM2k7IC8vIF9W
RUMzCisgICAgICAgICAgICBjYXNlIDB4OGI1NTogY2FzZSAweDhiNTk6IHJldHVybiBzZXRWYWx1
ZVY0aTsgLy8gX1ZFQzQKIAogICAgICAgICB9CiAKICAgICB9CiAKICAgICAvLyBBcnJheSBvZiBz
Y2FsYXJzCisgICAgZnVuY3Rpb24gc2V0VmFsdWVWMWZBcnJheSggZ2wsIHYgKSB7CiAKLSAgICBm
dW5jdGlvbiBzZXRWYWx1ZTFmdiggZ2wsIHYgKSB7CisgICAgICAgIGdsLnVuaWZvcm0xZnYoIHRo
aXMuYWRkciwgdiApOwogCi0gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuY2FjaGU7CisgICAgfQog
Ci0gICAgICAgIGlmICggYXJyYXlzRXF1YWwoIGNhY2hlLCB2ICkgKSByZXR1cm47CisgICAgLy8g
SW50ZWdlciAvIEJvb2xlYW4gdmVjdG9ycyBvciBhcnJheXMgdGhlcmVvZiAoYWx3YXlzIGZsYXQg
YXJyYXlzKQorICAgIGZ1bmN0aW9uIHNldFZhbHVlVjFpQXJyYXkoIGdsLCB2ICkgewogCi0gICAg
ICAgIGdsLnVuaWZvcm0xZnYoIHRoaXMuYWRkciwgdiApOworICAgICAgICBnbC51bmlmb3JtMWl2
KCB0aGlzLmFkZHIsIHYgKTsKIAotICAgICAgICBjb3B5QXJyYXkoIGNhY2hlLCB2ICk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gc2V0VmFsdWVWMmlBcnJheSggZ2wsIHYgKSB7CisKKyAgICAgICAg
Z2wudW5pZm9ybTJpdiggdGhpcy5hZGRyLCB2ICk7CiAKICAgICB9Ci0gICAgZnVuY3Rpb24gc2V0
VmFsdWUxaXYoIGdsLCB2ICkgewogCi0gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuY2FjaGU7Cisg
ICAgZnVuY3Rpb24gc2V0VmFsdWVWM2lBcnJheSggZ2wsIHYgKSB7CiAKLSAgICAgICAgaWYgKCBh
cnJheXNFcXVhbCggY2FjaGUsIHYgKSApIHJldHVybjsKKyAgICAgICAgZ2wudW5pZm9ybTNpdigg
dGhpcy5hZGRyLCB2ICk7CiAKLSAgICAgICAgZ2wudW5pZm9ybTFpdiggdGhpcy5hZGRyLCB2ICk7
CisgICAgfQogCi0gICAgICAgIGNvcHlBcnJheSggY2FjaGUsIHYgKTsKKyAgICBmdW5jdGlvbiBz
ZXRWYWx1ZVY0aUFycmF5KCBnbCwgdiApIHsKKworICAgICAgICBnbC51bmlmb3JtNGl2KCB0aGlz
LmFkZHIsIHYgKTsKIAogICAgIH0KIAorCiAgICAgLy8gQXJyYXkgb2YgdmVjdG9ycyAoZmxhdCBv
ciBmcm9tIFRIUkVFIGNsYXNzZXMpCiAKLSAgICBmdW5jdGlvbiBzZXRWYWx1ZVYyYSggZ2wsIHYg
KSB7CisgICAgZnVuY3Rpb24gc2V0VmFsdWVWMmZBcnJheSggZ2wsIHYgKSB7CiAKLSAgICAgICAg
dmFyIGNhY2hlID0gdGhpcy5jYWNoZTsKICAgICAgICAgdmFyIGRhdGEgPSBmbGF0dGVuKCB2LCB0
aGlzLnNpemUsIDIgKTsKIAotICAgICAgICBpZiAoIGFycmF5c0VxdWFsKCBjYWNoZSwgZGF0YSAp
ICkgcmV0dXJuOwotCiAgICAgICAgIGdsLnVuaWZvcm0yZnYoIHRoaXMuYWRkciwgZGF0YSApOwog
Ci0gICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoIGRhdGEgKTsKLQogICAgIH0KIAotICAgIGZ1bmN0
aW9uIHNldFZhbHVlVjNhKCBnbCwgdiApIHsKKyAgICBmdW5jdGlvbiBzZXRWYWx1ZVYzZkFycmF5
KCBnbCwgdiApIHsKIAotICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLmNhY2hlOwogICAgICAgICB2
YXIgZGF0YSA9IGZsYXR0ZW4oIHYsIHRoaXMuc2l6ZSwgMyApOwogCi0gICAgICAgIGlmICggYXJy
YXlzRXF1YWwoIGNhY2hlLCBkYXRhICkgKSByZXR1cm47Ci0KICAgICAgICAgZ2wudW5pZm9ybTNm
diggdGhpcy5hZGRyLCBkYXRhICk7CiAKLSAgICAgICAgdGhpcy51cGRhdGVDYWNoZSggZGF0YSAp
OwotCiAgICAgfQogCi0gICAgZnVuY3Rpb24gc2V0VmFsdWVWNGEoIGdsLCB2ICkgeworICAgIGZ1
bmN0aW9uIHNldFZhbHVlVjRmQXJyYXkoIGdsLCB2ICkgewogCi0gICAgICAgIHZhciBjYWNoZSA9
IHRoaXMuY2FjaGU7CiAgICAgICAgIHZhciBkYXRhID0gZmxhdHRlbiggdiwgdGhpcy5zaXplLCA0
ICk7CiAKLSAgICAgICAgaWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIGRhdGEgKSApIHJldHVybjsK
LQogICAgICAgICBnbC51bmlmb3JtNGZ2KCB0aGlzLmFkZHIsIGRhdGEgKTsKIAotICAgICAgICB0
aGlzLnVwZGF0ZUNhY2hlKCBkYXRhICk7Ci0KICAgICB9CiAKICAgICAvLyBBcnJheSBvZiBtYXRy
aWNlcyAoZmxhdCBvciBmcm9tIFRIUkVFIGNsYXNlcykKIAotICAgIGZ1bmN0aW9uIHNldFZhbHVl
TTJhKCBnbCwgdiApIHsKKyAgICBmdW5jdGlvbiBzZXRWYWx1ZU0yQXJyYXkoIGdsLCB2ICkgewog
Ci0gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuY2FjaGU7CiAgICAgICAgIHZhciBkYXRhID0gZmxh
dHRlbiggdiwgdGhpcy5zaXplLCA0ICk7CiAKLSAgICAgICAgaWYgKCBhcnJheXNFcXVhbCggY2Fj
aGUsIGRhdGEgKSApIHJldHVybjsKLQogICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KCB0aGlz
LmFkZHIsIGZhbHNlLCBkYXRhICk7CiAKLSAgICAgICAgdGhpcy51cGRhdGVDYWNoZSggZGF0YSAp
OwotCiAgICAgfQogCi0gICAgZnVuY3Rpb24gc2V0VmFsdWVNM2EoIGdsLCB2ICkgeworICAgIGZ1
bmN0aW9uIHNldFZhbHVlTTNBcnJheSggZ2wsIHYgKSB7CiAKLSAgICAgICAgdmFyIGNhY2hlID0g
dGhpcy5jYWNoZTsKICAgICAgICAgdmFyIGRhdGEgPSBmbGF0dGVuKCB2LCB0aGlzLnNpemUsIDkg
KTsKIAotICAgICAgICBpZiAoIGFycmF5c0VxdWFsKCBjYWNoZSwgZGF0YSApICkgcmV0dXJuOwot
CiAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoIHRoaXMuYWRkciwgZmFsc2UsIGRhdGEgKTsK
IAotICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCBkYXRhICk7Ci0KICAgICB9CiAKLSAgICBmdW5j
dGlvbiBzZXRWYWx1ZU00YSggZ2wsIHYgKSB7CisgICAgZnVuY3Rpb24gc2V0VmFsdWVNNEFycmF5
KCBnbCwgdiApIHsKIAotICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLmNhY2hlOwogICAgICAgICB2
YXIgZGF0YSA9IGZsYXR0ZW4oIHYsIHRoaXMuc2l6ZSwgMTYgKTsKIAotICAgICAgICBpZiAoIGFy
cmF5c0VxdWFsKCBjYWNoZSwgZGF0YSApICkgcmV0dXJuOwotCiAgICAgICAgIGdsLnVuaWZvcm1N
YXRyaXg0ZnYoIHRoaXMuYWRkciwgZmFsc2UsIGRhdGEgKTsKIAotICAgICAgICB0aGlzLnVwZGF0
ZUNhY2hlKCBkYXRhICk7Ci0KICAgICB9CiAKICAgICAvLyBBcnJheSBvZiB0ZXh0dXJlcyAoMkQg
LyBDdWJlKQogCi0gICAgZnVuY3Rpb24gc2V0VmFsdWVUMWEoIGdsLCB2LCByZW5kZXJlciApIHsK
KyAgICBmdW5jdGlvbiBzZXRWYWx1ZVQxQXJyYXkoIGdsLCB2LCB0ZXh0dXJlcyApIHsKIAotICAg
ICAgICB2YXIgY2FjaGUgPSB0aGlzLmNhY2hlOwogICAgICAgICB2YXIgbiA9IHYubGVuZ3RoOwog
Ci0gICAgICAgIHZhciB1bml0cyA9IGFsbG9jVGV4VW5pdHMoIHJlbmRlcmVyLCBuICk7Ci0KLSAg
ICAgICAgaWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIHVuaXRzICkgPT09IGZhbHNlICkgeworICAg
ICAgICB2YXIgdW5pdHMgPSBhbGxvY1RleFVuaXRzKCB0ZXh0dXJlcywgbiApOwogCi0gICAgICAg
ICAgICBnbC51bmlmb3JtMWl2KCB0aGlzLmFkZHIsIHVuaXRzICk7Ci0gICAgICAgICAgICBjb3B5
QXJyYXkoIGNhY2hlLCB1bml0cyApOwotCi0gICAgICAgIH0KKyAgICAgICAgZ2wudW5pZm9ybTFp
diggdGhpcy5hZGRyLCB1bml0cyApOwogCiAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSAhPT0g
bjsgKysgaSApIHsKIAotICAgICAgICAgICAgcmVuZGVyZXIuc2V0VGV4dHVyZTJEKCB2WyBpIF0g
fHwgZW1wdHlUZXh0dXJlLCB1bml0c1sgaSBdICk7CisgICAgICAgICAgICB0ZXh0dXJlcy5zYWZl
U2V0VGV4dHVyZTJEKCB2WyBpIF0gfHwgZW1wdHlUZXh0dXJlLCB1bml0c1sgaSBdICk7CiAKICAg
ICAgICAgfQogCiAgICAgfQogCi0gICAgZnVuY3Rpb24gc2V0VmFsdWVUNmEoIGdsLCB2LCByZW5k
ZXJlciApIHsKKyAgICBmdW5jdGlvbiBzZXRWYWx1ZVQ2QXJyYXkoIGdsLCB2LCB0ZXh0dXJlcyAp
IHsKIAotICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLmNhY2hlOwogICAgICAgICB2YXIgbiA9IHYu
bGVuZ3RoOwogCi0gICAgICAgIHZhciB1bml0cyA9IGFsbG9jVGV4VW5pdHMoIHJlbmRlcmVyLCBu
ICk7Ci0KLSAgICAgICAgaWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIHVuaXRzICkgPT09IGZhbHNl
ICkgeworICAgICAgICB2YXIgdW5pdHMgPSBhbGxvY1RleFVuaXRzKCB0ZXh0dXJlcywgbiApOwog
Ci0gICAgICAgICAgICBnbC51bmlmb3JtMWl2KCB0aGlzLmFkZHIsIHVuaXRzICk7Ci0gICAgICAg
ICAgICBjb3B5QXJyYXkoIGNhY2hlLCB1bml0cyApOwotCi0gICAgICAgIH0KKyAgICAgICAgZ2wu
dW5pZm9ybTFpdiggdGhpcy5hZGRyLCB1bml0cyApOwogCiAgICAgICAgIGZvciAoIHZhciBpID0g
MDsgaSAhPT0gbjsgKysgaSApIHsKIAotICAgICAgICAgICAgcmVuZGVyZXIuc2V0VGV4dHVyZUN1
YmUoIHZbIGkgXSB8fCBlbXB0eUN1YmVUZXh0dXJlLCB1bml0c1sgaSBdICk7CisgICAgICAgICAg
ICB0ZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmUoIHZbIGkgXSB8fCBlbXB0eUN1YmVUZXh0dXJl
LCB1bml0c1sgaSBdICk7CiAKICAgICAgICAgfQogCkBAIC0xNjMwOCwyMiArMTcyNjksMjIgQEAK
IAogICAgICAgICBzd2l0Y2ggKCB0eXBlICkgewogCi0gICAgICAgICAgICBjYXNlIDB4MTQwNjog
cmV0dXJuIHNldFZhbHVlMWZ2OyAvLyBGTE9BVAotICAgICAgICAgICAgY2FzZSAweDhiNTA6IHJl
dHVybiBzZXRWYWx1ZVYyYTsgLy8gX1ZFQzIKLSAgICAgICAgICAgIGNhc2UgMHg4YjUxOiByZXR1
cm4gc2V0VmFsdWVWM2E7IC8vIF9WRUMzCi0gICAgICAgICAgICBjYXNlIDB4OGI1MjogcmV0dXJu
IHNldFZhbHVlVjRhOyAvLyBfVkVDNAorICAgICAgICAgICAgY2FzZSAweDE0MDY6IHJldHVybiBz
ZXRWYWx1ZVYxZkFycmF5OyAvLyBGTE9BVAorICAgICAgICAgICAgY2FzZSAweDhiNTA6IHJldHVy
biBzZXRWYWx1ZVYyZkFycmF5OyAvLyBfVkVDMgorICAgICAgICAgICAgY2FzZSAweDhiNTE6IHJl
dHVybiBzZXRWYWx1ZVYzZkFycmF5OyAvLyBfVkVDMworICAgICAgICAgICAgY2FzZSAweDhiNTI6
IHJldHVybiBzZXRWYWx1ZVY0ZkFycmF5OyAvLyBfVkVDNAogCi0gICAgICAgICAgICBjYXNlIDB4
OGI1YTogcmV0dXJuIHNldFZhbHVlTTJhOyAvLyBfTUFUMgotICAgICAgICAgICAgY2FzZSAweDhi
NWI6IHJldHVybiBzZXRWYWx1ZU0zYTsgLy8gX01BVDMKLSAgICAgICAgICAgIGNhc2UgMHg4YjVj
OiByZXR1cm4gc2V0VmFsdWVNNGE7IC8vIF9NQVQ0CisgICAgICAgICAgICBjYXNlIDB4OGI1YTog
cmV0dXJuIHNldFZhbHVlTTJBcnJheTsgLy8gX01BVDIKKyAgICAgICAgICAgIGNhc2UgMHg4YjVi
OiByZXR1cm4gc2V0VmFsdWVNM0FycmF5OyAvLyBfTUFUMworICAgICAgICAgICAgY2FzZSAweDhi
NWM6IHJldHVybiBzZXRWYWx1ZU00QXJyYXk7IC8vIF9NQVQ0CiAKLSAgICAgICAgICAgIGNhc2Ug
MHg4YjVlOiByZXR1cm4gc2V0VmFsdWVUMWE7IC8vIFNBTVBMRVJfMkQKLSAgICAgICAgICAgIGNh
c2UgMHg4YjYwOiByZXR1cm4gc2V0VmFsdWVUNmE7IC8vIFNBTVBMRVJfQ1VCRQorICAgICAgICAg
ICAgY2FzZSAweDhiNWU6IHJldHVybiBzZXRWYWx1ZVQxQXJyYXk7IC8vIFNBTVBMRVJfMkQKKyAg
ICAgICAgICAgIGNhc2UgMHg4YjYwOiByZXR1cm4gc2V0VmFsdWVUNkFycmF5OyAvLyBTQU1QTEVS
X0NVQkUKIAotICAgICAgICAgICAgY2FzZSAweDE0MDQ6IGNhc2UgMHg4YjU2OiByZXR1cm4gc2V0
VmFsdWUxaXY7IC8vIElOVCwgQk9PTAotICAgICAgICAgICAgY2FzZSAweDhiNTM6IGNhc2UgMHg4
YjU3OiByZXR1cm4gc2V0VmFsdWUyaXY7IC8vIF9WRUMyCi0gICAgICAgICAgICBjYXNlIDB4OGI1
NDogY2FzZSAweDhiNTg6IHJldHVybiBzZXRWYWx1ZTNpdjsgLy8gX1ZFQzMKLSAgICAgICAgICAg
IGNhc2UgMHg4YjU1OiBjYXNlIDB4OGI1OTogcmV0dXJuIHNldFZhbHVlNGl2OyAvLyBfVkVDNAor
ICAgICAgICAgICAgY2FzZSAweDE0MDQ6IGNhc2UgMHg4YjU2OiByZXR1cm4gc2V0VmFsdWVWMWlB
cnJheTsgLy8gSU5ULCBCT09MCisgICAgICAgICAgICBjYXNlIDB4OGI1MzogY2FzZSAweDhiNTc6
IHJldHVybiBzZXRWYWx1ZVYyaUFycmF5OyAvLyBfVkVDMgorICAgICAgICAgICAgY2FzZSAweDhi
NTQ6IGNhc2UgMHg4YjU4OiByZXR1cm4gc2V0VmFsdWVWM2lBcnJheTsgLy8gX1ZFQzMKKyAgICAg
ICAgICAgIGNhc2UgMHg4YjU1OiBjYXNlIDB4OGI1OTogcmV0dXJuIHNldFZhbHVlVjRpQXJyYXk7
IC8vIF9WRUM0CiAKICAgICAgICAgfQogCkBAIC0xNjM3MiwyMSArMTczMzMsMTkgQEAKIAogICAg
ICAgICB0aGlzLmlkID0gaWQ7CiAKLSAgICAgICAgVW5pZm9ybUNvbnRhaW5lci5jYWxsKCB0aGlz
ICk7IC8vIG1peC1pbgorICAgICAgICB0aGlzLnNlcSA9IFtdOworICAgICAgICB0aGlzLm1hcCA9
IHt9OwogCiAgICAgfQogCi0gICAgU3RydWN0dXJlZFVuaWZvcm0ucHJvdG90eXBlLnNldFZhbHVl
ID0gZnVuY3Rpb24gKCBnbCwgdmFsdWUgKSB7Ci0KLSAgICAgICAgLy8gTm90ZTogRG9uJ3QgbmVl
ZCBhbiBleHRyYSAncmVuZGVyZXInIHBhcmFtZXRlciwgc2luY2Ugc2FtcGxlcnMKLSAgICAgICAg
Ly8gYXJlIG5vdCBhbGxvd2VkIGluIHN0cnVjdHVyZWQgdW5pZm9ybXMuCisgICAgU3RydWN0dXJl
ZFVuaWZvcm0ucHJvdG90eXBlLnNldFZhbHVlID0gZnVuY3Rpb24gKCBnbCwgdmFsdWUsIHRleHR1
cmVzICkgewogCiAgICAgICAgIHZhciBzZXEgPSB0aGlzLnNlcTsKIAogICAgICAgICBmb3IgKCB2
YXIgaSA9IDAsIG4gPSBzZXEubGVuZ3RoOyBpICE9PSBuOyArKyBpICkgewogCiAgICAgICAgICAg
ICB2YXIgdSA9IHNlcVsgaSBdOwotICAgICAgICAgICAgdS5zZXRWYWx1ZSggZ2wsIHZhbHVlWyB1
LmlkIF0gKTsKKyAgICAgICAgICAgIHUuc2V0VmFsdWUoIGdsLCB2YWx1ZVsgdS5pZCBdLCB0ZXh0
dXJlcyApOwogCiAgICAgICAgIH0KIApAQCAtMTY0NjYsMTMgKzE3NDI1LDEyIEBACiAKICAgICAv
LyBSb290IENvbnRhaW5lcgogCi0gICAgZnVuY3Rpb24gV2ViR0xVbmlmb3JtcyggZ2wsIHByb2dy
YW0sIHJlbmRlcmVyICkgeworICAgIGZ1bmN0aW9uIFdlYkdMVW5pZm9ybXMoIGdsLCBwcm9ncmFt
ICkgewogCi0gICAgICAgIFVuaWZvcm1Db250YWluZXIuY2FsbCggdGhpcyApOwotCi0gICAgICAg
IHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjsKKyAgICAgICAgdGhpcy5zZXEgPSBbXTsKKyAgICAg
ICAgdGhpcy5tYXAgPSB7fTsKIAotICAgICAgICB2YXIgbiA9IGdsLmdldFByb2dyYW1QYXJhbWV0
ZXIoIHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUyApOworICAgICAgICB2YXIgbiA9IGdsLmdl
dFByb2dyYW1QYXJhbWV0ZXIoIHByb2dyYW0sIDM1NzE4ICk7CiAKICAgICAgICAgZm9yICggdmFy
IGkgPSAwOyBpIDwgbjsgKysgaSApIHsKIApAQCAtMTY0ODUsMTEgKzE3NDQzLDExIEBACiAKICAg
ICB9CiAKLSAgICBXZWJHTFVuaWZvcm1zLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uICgg
Z2wsIG5hbWUsIHZhbHVlICkgeworICAgIFdlYkdMVW5pZm9ybXMucHJvdG90eXBlLnNldFZhbHVl
ID0gZnVuY3Rpb24gKCBnbCwgbmFtZSwgdmFsdWUsIHRleHR1cmVzICkgewogCiAgICAgICAgIHZh
ciB1ID0gdGhpcy5tYXBbIG5hbWUgXTsKIAotICAgICAgICBpZiAoIHUgIT09IHVuZGVmaW5lZCAp
IHUuc2V0VmFsdWUoIGdsLCB2YWx1ZSwgdGhpcy5yZW5kZXJlciApOworICAgICAgICBpZiAoIHUg
IT09IHVuZGVmaW5lZCApIHUuc2V0VmFsdWUoIGdsLCB2YWx1ZSwgdGV4dHVyZXMgKTsKIAogICAg
IH07CiAKQEAgLTE2NTA0LDcgKzE3NDYyLDcgQEAKIAogICAgIC8vIFN0YXRpYyBpbnRlcmZhY2UK
IAotICAgIFdlYkdMVW5pZm9ybXMudXBsb2FkID0gZnVuY3Rpb24gKCBnbCwgc2VxLCB2YWx1ZXMs
IHJlbmRlcmVyICkgeworICAgIFdlYkdMVW5pZm9ybXMudXBsb2FkID0gZnVuY3Rpb24gKCBnbCwg
c2VxLCB2YWx1ZXMsIHRleHR1cmVzICkgewogCiAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbiA9
IHNlcS5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7CiAKQEAgLTE2NTE0LDcgKzE3NDcyLDcgQEAK
ICAgICAgICAgICAgIGlmICggdi5uZWVkc1VwZGF0ZSAhPT0gZmFsc2UgKSB7CiAKICAgICAgICAg
ICAgICAgICAvLyBub3RlOiBhbHdheXMgdXBkYXRpbmcgd2hlbiAubmVlZHNVcGRhdGUgaXMgdW5k
ZWZpbmVkCi0gICAgICAgICAgICAgICAgdS5zZXRWYWx1ZSggZ2wsIHYudmFsdWUsIHJlbmRlcmVy
ICk7CisgICAgICAgICAgICAgICAgdS5zZXRWYWx1ZSggZ2wsIHYudmFsdWUsIHRleHR1cmVzICk7
CiAKICAgICAgICAgICAgIH0KIApAQCAtMTY1NDEsMjAgKzE3NDk5LDYgQEAKICAgICAgKiBAYXV0
aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwogICAgICAqLwogCi0gICAgZnVuY3Rpb24g
YWRkTGluZU51bWJlcnMoIHN0cmluZyApIHsKLQotICAgICAgICB2YXIgbGluZXMgPSBzdHJpbmcu
c3BsaXQoICdcbicgKTsKLQotICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5n
dGg7IGkgKysgKSB7Ci0KLSAgICAgICAgICAgIGxpbmVzWyBpIF0gPSAoIGkgKyAxICkgKyAnOiAn
ICsgbGluZXNbIGkgXTsKLQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGxpbmVzLmpvaW4o
ICdcbicgKTsKLQotICAgIH0KLQogICAgIGZ1bmN0aW9uIFdlYkdMU2hhZGVyKCBnbCwgdHlwZSwg
c3RyaW5nICkgewogCiAgICAgICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoIHR5cGUg
KTsKQEAgLTE2NTYyLDMwICsxNzUwNiwyOSBAQAogICAgICAgICBnbC5zaGFkZXJTb3VyY2UoIHNo
YWRlciwgc3RyaW5nICk7CiAgICAgICAgIGdsLmNvbXBpbGVTaGFkZXIoIHNoYWRlciApOwogCi0g
ICAgICAgIGlmICggZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKCBzaGFkZXIsIGdsLkNPTVBJTEVfU1RB
VFVTICkgPT09IGZhbHNlICkgeworICAgICAgICByZXR1cm4gc2hhZGVyOwogCi0gICAgICAgICAg
ICBjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xTaGFkZXI6IFNoYWRlciBjb3VsZG5cJ3QgY29t
cGlsZS4nICk7CisgICAgfQogCi0gICAgICAgIH0KKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1y
ZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqLwogCi0gICAgICAgIGlmICggZ2wuZ2V0
U2hhZGVySW5mb0xvZyggc2hhZGVyICkgIT09ICcnICkgeworICAgIHZhciBwcm9ncmFtSWRDb3Vu
dCA9IDA7CiAKLSAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMU2hhZGVyOiBn
bC5nZXRTaGFkZXJJbmZvTG9nKCknLCB0eXBlID09PSBnbC5WRVJURVhfU0hBREVSID8gJ3ZlcnRl
eCcgOiAnZnJhZ21lbnQnLCBnbC5nZXRTaGFkZXJJbmZvTG9nKCBzaGFkZXIgKSwgYWRkTGluZU51
bWJlcnMoIHN0cmluZyApICk7CisgICAgZnVuY3Rpb24gYWRkTGluZU51bWJlcnMoIHN0cmluZyAp
IHsKIAotICAgICAgICB9CisgICAgICAgIHZhciBsaW5lcyA9IHN0cmluZy5zcGxpdCggJ1xuJyAp
OwogCi0gICAgICAgIC8vIC0tZW5hYmxlLXByaXZpbGVnZWQtd2ViZ2wtZXh0ZW5zaW9uCi0gICAg
ICAgIC8vIGNvbnNvbGUubG9nKCB0eXBlLCBnbC5nZXRFeHRlbnNpb24oICdXRUJHTF9kZWJ1Z19z
aGFkZXJzJyApLmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UoIHNoYWRlciApICk7CisgICAgICAg
IGZvciAoIHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICBy
ZXR1cm4gc2hhZGVyOworICAgICAgICAgICAgbGluZXNbIGkgXSA9ICggaSArIDEgKSArICc6ICcg
KyBsaW5lc1sgaSBdOwogCi0gICAgfQorICAgICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAYXV0
aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqLworICAgICAgICByZXR1cm4g
bGluZXMuam9pbiggJ1xuJyApOwogCi0gICAgdmFyIHByb2dyYW1JZENvdW50ID0gMDsKKyAgICB9
CiAKICAgICBmdW5jdGlvbiBnZXRFbmNvZGluZ0NvbXBvbmVudHMoIGVuY29kaW5nICkgewogCkBA
IC0xNjYxMiw2ICsxNzU1NSwyMiBAQAogCiAgICAgfQogCisgICAgZnVuY3Rpb24gZ2V0U2hhZGVy
RXJyb3JzKCBnbCwgc2hhZGVyLCB0eXBlICkgeworCisgICAgICAgIHZhciBzdGF0dXMgPSBnbC5n
ZXRTaGFkZXJQYXJhbWV0ZXIoIHNoYWRlciwgMzU3MTMgKTsKKyAgICAgICAgdmFyIGxvZyA9IGds
LmdldFNoYWRlckluZm9Mb2coIHNoYWRlciApLnRyaW0oKTsKKworICAgICAgICBpZiAoIHN0YXR1
cyAmJiBsb2cgPT09ICcnICkgcmV0dXJuICcnOworCisgICAgICAgIC8vIC0tZW5hYmxlLXByaXZp
bGVnZWQtd2ViZ2wtZXh0ZW5zaW9uCisgICAgICAgIC8vIGNvbnNvbGUubG9nKCAnKionICsgdHlw
ZSArICcqKicsIGdsLmdldEV4dGVuc2lvbiggJ1dFQkdMX2RlYnVnX3NoYWRlcnMnICkuZ2V0VHJh
bnNsYXRlZFNoYWRlclNvdXJjZSggc2hhZGVyICkgKTsKKworICAgICAgICB2YXIgc291cmNlID0g
Z2wuZ2V0U2hhZGVyU291cmNlKCBzaGFkZXIgKTsKKworICAgICAgICByZXR1cm4gJ1RIUkVFLldl
YkdMU2hhZGVyOiBnbC5nZXRTaGFkZXJJbmZvTG9nKCkgJyArIHR5cGUgKyAnXG4nICsgbG9nICsg
YWRkTGluZU51bWJlcnMoIHNvdXJjZSApOworCisgICAgfQorCiAgICAgZnVuY3Rpb24gZ2V0VGV4
ZWxEZWNvZGluZ0Z1bmN0aW9uKCBmdW5jdGlvbk5hbWUsIGVuY29kaW5nICkgewogCiAgICAgICAg
IHZhciBjb21wb25lbnRzID0gZ2V0RW5jb2RpbmdDb21wb25lbnRzKCBlbmNvZGluZyApOwpAQCAt
MTY2NDgsNiArMTc2MDcsMTAgQEAKICAgICAgICAgICAgICAgICB0b25lTWFwcGluZ05hbWUgPSAn
T3B0aW1pemVkQ2luZW9uJzsKICAgICAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICAg
Y2FzZSBBQ0VTRmlsbWljVG9uZU1hcHBpbmc6CisgICAgICAgICAgICAgICAgdG9uZU1hcHBpbmdO
YW1lID0gJ0FDRVNGaWxtaWMnOworICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvciggJ3Vuc3VwcG9ydGVk
IHRvbmVNYXBwaW5nOiAnICsgdG9uZU1hcHBpbmcgKTsKIApAQCAtMTY2OTQsNyArMTc2NTcsNyBA
QAogCiAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0ge307CiAKLSAgICAgICAgdmFyIG4gPSBnbC5n
ZXRQcm9ncmFtUGFyYW1ldGVyKCBwcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUyApOworICAg
ICAgICB2YXIgbiA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIoIHByb2dyYW0sIDM1NzIxICk7CiAK
ICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgbjsgaSArKyApIHsKIApAQCAtMTY3MzgsNyAr
MTc3MDEsNyBAQAogCiAgICAgZnVuY3Rpb24gcGFyc2VJbmNsdWRlcyggc3RyaW5nICkgewogCi0g
ICAgICAgIHZhciBwYXR0ZXJuID0gL15bIFx0XSojaW5jbHVkZSArPChbXHdcZC5dKyk+L2dtOwor
ICAgICAgICB2YXIgcGF0dGVybiA9IC9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuL10rKT4vZ207
CiAKICAgICAgICAgZnVuY3Rpb24gcmVwbGFjZSggbWF0Y2gsIGluY2x1ZGUgKSB7CiAKQEAgLTE2
NzgwLDcgKzE3NzQzLDcgQEAKIAogICAgIH0KIAotICAgIGZ1bmN0aW9uIFdlYkdMUHJvZ3JhbSgg
cmVuZGVyZXIsIGV4dGVuc2lvbnMsIGNvZGUsIG1hdGVyaWFsLCBzaGFkZXIsIHBhcmFtZXRlcnMg
KSB7CisgICAgZnVuY3Rpb24gV2ViR0xQcm9ncmFtKCByZW5kZXJlciwgZXh0ZW5zaW9ucywgY29k
ZSwgbWF0ZXJpYWwsIHNoYWRlciwgcGFyYW1ldGVycywgY2FwYWJpbGl0aWVzICkgewogCiAgICAg
ICAgIHZhciBnbCA9IHJlbmRlcmVyLmNvbnRleHQ7CiAKQEAgLTE2ODYzLDcgKzE3ODI2LDcgQEAK
IAogICAgICAgICAvLwogCi0gICAgICAgIHZhciBjdXN0b21FeHRlbnNpb25zID0gZ2VuZXJhdGVF
eHRlbnNpb25zKCBtYXRlcmlhbC5leHRlbnNpb25zLCBwYXJhbWV0ZXJzLCBleHRlbnNpb25zICk7
CisgICAgICAgIHZhciBjdXN0b21FeHRlbnNpb25zID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyID8g
JycgOiBnZW5lcmF0ZUV4dGVuc2lvbnMoIG1hdGVyaWFsLmV4dGVuc2lvbnMsIHBhcmFtZXRlcnMs
IGV4dGVuc2lvbnMgKTsKIAogICAgICAgICB2YXIgY3VzdG9tRGVmaW5lcyA9IGdlbmVyYXRlRGVm
aW5lcyggZGVmaW5lcyApOwogCkBAIC0xNjkzMyw2ICsxNzg5Niw4IEBACiAgICAgICAgICAgICAg
ICAgcGFyYW1ldGVycy5yb3VnaG5lc3NNYXAgPyAnI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQJyA6
ICcnLAogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMubWV0YWxuZXNzTWFwID8gJyNkZWZpbmUg
VVNFX01FVEFMTkVTU01BUCcgOiAnJywKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFscGhh
TWFwID8gJyNkZWZpbmUgVVNFX0FMUEhBTUFQJyA6ICcnLAorCisgICAgICAgICAgICAgICAgcGFy
YW1ldGVycy52ZXJ0ZXhUYW5nZW50cyA/ICcjZGVmaW5lIFVTRV9UQU5HRU5UJyA6ICcnLAogICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcnMudmVydGV4Q29sb3JzID8gJyNkZWZpbmUgVVNFX0NPTE9S
JyA6ICcnLAogCiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5mbGF0U2hhZGluZyA/ICcjZGVm
aW5lIEZMQVRfU0hBREVEJyA6ICcnLApAQCAtMTY5NTEsNyArMTc5MTYsNyBAQAogICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcnMuc2l6ZUF0dGVudWF0aW9uID8gJyNkZWZpbmUgVVNFX1NJWkVBVFRF
TlVBVElPTicgOiAnJywKIAogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMubG9nYXJpdGhtaWNE
ZXB0aEJ1ZmZlciA/ICcjZGVmaW5lIFVTRV9MT0dERVBUSEJVRicgOiAnJywKLSAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJzLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIgJiYgZXh0ZW5zaW9ucy5nZXQo
ICdFWFRfZnJhZ19kZXB0aCcgKSA/ICcjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQnIDogJycs
CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyICYmICgg
Y2FwYWJpbGl0aWVzLmlzV2ViR0wyIHx8IGV4dGVuc2lvbnMuZ2V0KCAnRVhUX2ZyYWdfZGVwdGgn
ICkgKSA/ICcjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQnIDogJycsCiAKICAgICAgICAgICAg
ICAgICAndW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OycsCiAgICAgICAgICAgICAgICAgJ3VuaWZv
cm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7JywKQEAgLTE2OTY0LDYgKzE3OTI5LDEyIEBACiAgICAg
ICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsnLAogICAgICAgICAgICAgICAgICdh
dHRyaWJ1dGUgdmVjMiB1djsnLAogCisgICAgICAgICAgICAgICAgJyNpZmRlZiBVU0VfVEFOR0VO
VCcsCisKKyAgICAgICAgICAgICAgICAnICAgYXR0cmlidXRlIHZlYzQgdGFuZ2VudDsnLAorCisg
ICAgICAgICAgICAgICAgJyNlbmRpZicsCisKICAgICAgICAgICAgICAgICAnI2lmZGVmIFVTRV9D
T0xPUicsCiAKICAgICAgICAgICAgICAgICAnICAgYXR0cmlidXRlIHZlYzMgY29sb3I7JywKQEAg
LTE3MDI1LDYgKzE3OTk2LDcgQEAKICAgICAgICAgICAgICAgICAoIHBhcmFtZXRlcnMudXNlRm9n
ICYmIHBhcmFtZXRlcnMuZm9nRXhwICkgPyAnI2RlZmluZSBGT0dfRVhQMicgOiAnJywKIAogICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcnMubWFwID8gJyNkZWZpbmUgVVNFX01BUCcgOiAnJywKKyAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJzLm1hdGNhcCA/ICcjZGVmaW5lIFVTRV9NQVRDQVAnIDog
JycsCiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5lbnZNYXAgPyAnI2RlZmluZSBVU0VfRU5W
TUFQJyA6ICcnLAogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuZW52TWFwID8gJyNkZWZpbmUg
JyArIGVudk1hcFR5cGVEZWZpbmUgOiAnJywKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmVu
dk1hcCA/ICcjZGVmaW5lICcgKyBlbnZNYXBNb2RlRGVmaW5lIDogJycsCkBAIC0xNzAzOSw2ICsx
ODAxMSw4IEBACiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5yb3VnaG5lc3NNYXAgPyAnI2Rl
ZmluZSBVU0VfUk9VR0hORVNTTUFQJyA6ICcnLAogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMu
bWV0YWxuZXNzTWFwID8gJyNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCcgOiAnJywKICAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJzLmFscGhhTWFwID8gJyNkZWZpbmUgVVNFX0FMUEhBTUFQJyA6ICcn
LAorCisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy52ZXJ0ZXhUYW5nZW50cyA/ICcjZGVmaW5l
IFVTRV9UQU5HRU5UJyA6ICcnLAogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMudmVydGV4Q29s
b3JzID8gJyNkZWZpbmUgVVNFX0NPTE9SJyA6ICcnLAogCiAgICAgICAgICAgICAgICAgcGFyYW1l
dGVycy5ncmFkaWVudE1hcCA/ICcjZGVmaW5lIFVTRV9HUkFESUVOVE1BUCcgOiAnJywKQEAgLTE3
MDU2LDkgKzE4MDMwLDkgQEAKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnBoeXNpY2FsbHlD
b3JyZWN0TGlnaHRzID8gJyNkZWZpbmUgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUycgOiAnJywK
IAogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciA/ICcj
ZGVmaW5lIFVTRV9MT0dERVBUSEJVRicgOiAnJywKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJz
LmxvZ2FyaXRobWljRGVwdGhCdWZmZXIgJiYgZXh0ZW5zaW9ucy5nZXQoICdFWFRfZnJhZ19kZXB0
aCcgKSA/ICcjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQnIDogJycsCisgICAgICAgICAgICAg
ICAgcGFyYW1ldGVycy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyICYmICggY2FwYWJpbGl0aWVzLmlz
V2ViR0wyIHx8IGV4dGVuc2lvbnMuZ2V0KCAnRVhUX2ZyYWdfZGVwdGgnICkgKSA/ICcjZGVmaW5l
IFVTRV9MT0dERVBUSEJVRl9FWFQnIDogJycsCiAKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJz
LmVudk1hcCAmJiBleHRlbnNpb25zLmdldCggJ0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QnICkgPyAn
I2RlZmluZSBURVhUVVJFX0xPRF9FWFQnIDogJycsCisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
cy5lbnZNYXAgJiYgKCBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgfHwgZXh0ZW5zaW9ucy5nZXQoICdF
WFRfc2hhZGVyX3RleHR1cmVfbG9kJyApICkgPyAnI2RlZmluZSBURVhUVVJFX0xPRF9FWFQnIDog
JycsCiAKICAgICAgICAgICAgICAgICAndW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7JywKICAgICAg
ICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOycsCkBAIC0xNzA2OSw4ICsx
ODA0MywxMCBAQAogCiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5kaXRoZXJpbmcgPyAnI2Rl
ZmluZSBESVRIRVJJTkcnIDogJycsCiAKLSAgICAgICAgICAgICAgICAoIHBhcmFtZXRlcnMub3V0
cHV0RW5jb2RpbmcgfHwgcGFyYW1ldGVycy5tYXBFbmNvZGluZyB8fCBwYXJhbWV0ZXJzLmVudk1h
cEVuY29kaW5nIHx8IHBhcmFtZXRlcnMuZW1pc3NpdmVNYXBFbmNvZGluZyApID8gU2hhZGVyQ2h1
bmtbICdlbmNvZGluZ3NfcGFyc19mcmFnbWVudCcgXSA6ICcnLCAvLyB0aGlzIGNvZGUgaXMgcmVx
dWlyZWQgaGVyZSBiZWNhdXNlIGl0IGlzIHVzZWQgYnkgdGhlIHZhcmlvdXMgZW5jb2RpbmcvZGVj
b2RpbmcgZnVuY3Rpb24gZGVmaW5lZCBiZWxvdworICAgICAgICAgICAgICAgICggcGFyYW1ldGVy
cy5vdXRwdXRFbmNvZGluZyB8fCBwYXJhbWV0ZXJzLm1hcEVuY29kaW5nIHx8IHBhcmFtZXRlcnMu
bWF0Y2FwRW5jb2RpbmcgfHwgcGFyYW1ldGVycy5lbnZNYXBFbmNvZGluZyB8fCBwYXJhbWV0ZXJz
LmVtaXNzaXZlTWFwRW5jb2RpbmcgKSA/CisgICAgICAgICAgICAgICAgICAgIFNoYWRlckNodW5r
WyAnZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQnIF0gOiAnJywgLy8gdGhpcyBjb2RlIGlzIHJlcXVp
cmVkIGhlcmUgYmVjYXVzZSBpdCBpcyB1c2VkIGJ5IHRoZSB2YXJpb3VzIGVuY29kaW5nL2RlY29k
aW5nIGZ1bmN0aW9uIGRlZmluZWQgYmVsb3cKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLm1h
cEVuY29kaW5nID8gZ2V0VGV4ZWxEZWNvZGluZ0Z1bmN0aW9uKCAnbWFwVGV4ZWxUb0xpbmVhcics
IHBhcmFtZXRlcnMubWFwRW5jb2RpbmcgKSA6ICcnLAorICAgICAgICAgICAgICAgIHBhcmFtZXRl
cnMubWF0Y2FwRW5jb2RpbmcgPyBnZXRUZXhlbERlY29kaW5nRnVuY3Rpb24oICdtYXRjYXBUZXhl
bFRvTGluZWFyJywgcGFyYW1ldGVycy5tYXRjYXBFbmNvZGluZyApIDogJycsCiAgICAgICAgICAg
ICAgICAgcGFyYW1ldGVycy5lbnZNYXBFbmNvZGluZyA/IGdldFRleGVsRGVjb2RpbmdGdW5jdGlv
biggJ2Vudk1hcFRleGVsVG9MaW5lYXInLCBwYXJhbWV0ZXJzLmVudk1hcEVuY29kaW5nICkgOiAn
JywKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmVtaXNzaXZlTWFwRW5jb2RpbmcgPyBnZXRU
ZXhlbERlY29kaW5nRnVuY3Rpb24oICdlbWlzc2l2ZU1hcFRleGVsVG9MaW5lYXInLCBwYXJhbWV0
ZXJzLmVtaXNzaXZlTWFwRW5jb2RpbmcgKSA6ICcnLAogICAgICAgICAgICAgICAgIHBhcmFtZXRl
cnMub3V0cHV0RW5jb2RpbmcgPyBnZXRUZXhlbEVuY29kaW5nRnVuY3Rpb24oICdsaW5lYXJUb091
dHB1dFRleGVsJywgcGFyYW1ldGVycy5vdXRwdXRFbmNvZGluZyApIDogJycsCkBAIC0xNzA5NCwx
NCArMTgwNzAsNTggQEAKICAgICAgICAgdmVydGV4U2hhZGVyID0gdW5yb2xsTG9vcHMoIHZlcnRl
eFNoYWRlciApOwogICAgICAgICBmcmFnbWVudFNoYWRlciA9IHVucm9sbExvb3BzKCBmcmFnbWVu
dFNoYWRlciApOwogCisgICAgICAgIGlmICggY2FwYWJpbGl0aWVzLmlzV2ViR0wyICYmICEgbWF0
ZXJpYWwuaXNSYXdTaGFkZXJNYXRlcmlhbCApIHsKKworICAgICAgICAgICAgdmFyIGlzR0xTTDNT
aGFkZXJNYXRlcmlhbCA9IGZhbHNlOworCisgICAgICAgICAgICB2YXIgdmVyc2lvblJlZ2V4ID0g
L15ccyojdmVyc2lvblxzKzMwMFxzK2VzXHMqXG4vOworCisgICAgICAgICAgICBpZiAoIG1hdGVy
aWFsLmlzU2hhZGVyTWF0ZXJpYWwgJiYKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXIubWF0
Y2goIHZlcnNpb25SZWdleCApICE9PSBudWxsICYmCisgICAgICAgICAgICAgICAgZnJhZ21lbnRT
aGFkZXIubWF0Y2goIHZlcnNpb25SZWdleCApICE9PSBudWxsICkgeworCisgICAgICAgICAgICAg
ICAgaXNHTFNMM1NoYWRlck1hdGVyaWFsID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIHZlcnRl
eFNoYWRlciA9IHZlcnRleFNoYWRlci5yZXBsYWNlKCB2ZXJzaW9uUmVnZXgsICcnICk7CisgICAg
ICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlci5yZXBsYWNlKCB2ZXJz
aW9uUmVnZXgsICcnICk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gR0xTTCAz
LjAgY29udmVyc2lvbgorICAgICAgICAgICAgcHJlZml4VmVydGV4ID0gWworICAgICAgICAgICAg
ICAgICcjdmVyc2lvbiAzMDAgZXNcbicsCisgICAgICAgICAgICAgICAgJyNkZWZpbmUgYXR0cmli
dXRlIGluJywKKyAgICAgICAgICAgICAgICAnI2RlZmluZSB2YXJ5aW5nIG91dCcsCisgICAgICAg
ICAgICAgICAgJyNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUnCisgICAgICAgICAgICBdLmpvaW4o
ICdcbicgKSArICdcbicgKyBwcmVmaXhWZXJ0ZXg7CisKKyAgICAgICAgICAgIHByZWZpeEZyYWdt
ZW50ID0gWworICAgICAgICAgICAgICAgICcjdmVyc2lvbiAzMDAgZXNcbicsCisgICAgICAgICAg
ICAgICAgJyNkZWZpbmUgdmFyeWluZyBpbicsCisgICAgICAgICAgICAgICAgaXNHTFNMM1NoYWRl
ck1hdGVyaWFsID8gJycgOiAnb3V0IGhpZ2hwIHZlYzQgcGNfZnJhZ0NvbG9yOycsCisgICAgICAg
ICAgICAgICAgaXNHTFNMM1NoYWRlck1hdGVyaWFsID8gJycgOiAnI2RlZmluZSBnbF9GcmFnQ29s
b3IgcGNfZnJhZ0NvbG9yJywKKyAgICAgICAgICAgICAgICAnI2RlZmluZSBnbF9GcmFnRGVwdGhF
WFQgZ2xfRnJhZ0RlcHRoJywKKyAgICAgICAgICAgICAgICAnI2RlZmluZSB0ZXh0dXJlMkQgdGV4
dHVyZScsCisgICAgICAgICAgICAgICAgJyNkZWZpbmUgdGV4dHVyZUN1YmUgdGV4dHVyZScsCisg
ICAgICAgICAgICAgICAgJyNkZWZpbmUgdGV4dHVyZTJEUHJvaiB0ZXh0dXJlUHJvaicsCisgICAg
ICAgICAgICAgICAgJyNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2QnLAorICAgICAg
ICAgICAgICAgICcjZGVmaW5lIHRleHR1cmUyRFByb2pMb2RFWFQgdGV4dHVyZVByb2pMb2QnLAor
ICAgICAgICAgICAgICAgICcjZGVmaW5lIHRleHR1cmVDdWJlTG9kRVhUIHRleHR1cmVMb2QnLAor
ICAgICAgICAgICAgICAgICcjZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWQnLAor
ICAgICAgICAgICAgICAgICcjZGVmaW5lIHRleHR1cmUyRFByb2pHcmFkRVhUIHRleHR1cmVQcm9q
R3JhZCcsCisgICAgICAgICAgICAgICAgJyNkZWZpbmUgdGV4dHVyZUN1YmVHcmFkRVhUIHRleHR1
cmVHcmFkJworICAgICAgICAgICAgXS5qb2luKCAnXG4nICkgKyAnXG4nICsgcHJlZml4RnJhZ21l
bnQ7CisKKyAgICAgICAgfQorCiAgICAgICAgIHZhciB2ZXJ0ZXhHbHNsID0gcHJlZml4VmVydGV4
ICsgdmVydGV4U2hhZGVyOwogICAgICAgICB2YXIgZnJhZ21lbnRHbHNsID0gcHJlZml4RnJhZ21l
bnQgKyBmcmFnbWVudFNoYWRlcjsKIAogICAgICAgICAvLyBjb25zb2xlLmxvZyggJypWRVJURVgq
JywgdmVydGV4R2xzbCApOwogICAgICAgICAvLyBjb25zb2xlLmxvZyggJypGUkFHTUVOVConLCBm
cmFnbWVudEdsc2wgKTsKIAotICAgICAgICB2YXIgZ2xWZXJ0ZXhTaGFkZXIgPSBXZWJHTFNoYWRl
ciggZ2wsIGdsLlZFUlRFWF9TSEFERVIsIHZlcnRleEdsc2wgKTsKLSAgICAgICAgdmFyIGdsRnJh
Z21lbnRTaGFkZXIgPSBXZWJHTFNoYWRlciggZ2wsIGdsLkZSQUdNRU5UX1NIQURFUiwgZnJhZ21l
bnRHbHNsICk7CisgICAgICAgIHZhciBnbFZlcnRleFNoYWRlciA9IFdlYkdMU2hhZGVyKCBnbCwg
MzU2MzMsIHZlcnRleEdsc2wgKTsKKyAgICAgICAgdmFyIGdsRnJhZ21lbnRTaGFkZXIgPSBXZWJH
TFNoYWRlciggZ2wsIDM1NjMyLCBmcmFnbWVudEdsc2wgKTsKIAogICAgICAgICBnbC5hdHRhY2hT
aGFkZXIoIHByb2dyYW0sIGdsVmVydGV4U2hhZGVyICk7CiAgICAgICAgIGdsLmF0dGFjaFNoYWRl
ciggcHJvZ3JhbSwgZ2xGcmFnbWVudFNoYWRlciApOwpAQCAtMTcxMjEsNTYgKzE4MTQxLDYxIEBA
CiAKICAgICAgICAgZ2wubGlua1Byb2dyYW0oIHByb2dyYW0gKTsKIAotICAgICAgICB2YXIgcHJv
Z3JhbUxvZyA9IGdsLmdldFByb2dyYW1JbmZvTG9nKCBwcm9ncmFtICkudHJpbSgpOwotICAgICAg
ICB2YXIgdmVydGV4TG9nID0gZ2wuZ2V0U2hhZGVySW5mb0xvZyggZ2xWZXJ0ZXhTaGFkZXIgKS50
cmltKCk7Ci0gICAgICAgIHZhciBmcmFnbWVudExvZyA9IGdsLmdldFNoYWRlckluZm9Mb2coIGds
RnJhZ21lbnRTaGFkZXIgKS50cmltKCk7CisgICAgICAgIC8vIGNoZWNrIGZvciBsaW5rIGVycm9y
cworICAgICAgICBpZiAoIHJlbmRlcmVyLmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzICkgewogCi0g
ICAgICAgIHZhciBydW5uYWJsZSA9IHRydWU7Ci0gICAgICAgIHZhciBoYXZlRGlhZ25vc3RpY3Mg
PSB0cnVlOworICAgICAgICAgICAgdmFyIHByb2dyYW1Mb2cgPSBnbC5nZXRQcm9ncmFtSW5mb0xv
ZyggcHJvZ3JhbSApLnRyaW0oKTsKKyAgICAgICAgICAgIHZhciB2ZXJ0ZXhMb2cgPSBnbC5nZXRT
aGFkZXJJbmZvTG9nKCBnbFZlcnRleFNoYWRlciApLnRyaW0oKTsKKyAgICAgICAgICAgIHZhciBm
cmFnbWVudExvZyA9IGdsLmdldFNoYWRlckluZm9Mb2coIGdsRnJhZ21lbnRTaGFkZXIgKS50cmlt
KCk7CiAKLSAgICAgICAgLy8gY29uc29sZS5sb2coICcqKlZFUlRFWCoqJywgZ2wuZ2V0RXh0ZW5z
aW9uKCAnV0VCR0xfZGVidWdfc2hhZGVycycgKS5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlKCBn
bFZlcnRleFNoYWRlciApICk7Ci0gICAgICAgIC8vIGNvbnNvbGUubG9nKCAnKipGUkFHTUVOVCoq
JywgZ2wuZ2V0RXh0ZW5zaW9uKCAnV0VCR0xfZGVidWdfc2hhZGVycycgKS5nZXRUcmFuc2xhdGVk
U2hhZGVyU291cmNlKCBnbEZyYWdtZW50U2hhZGVyICkgKTsKKyAgICAgICAgICAgIHZhciBydW5u
YWJsZSA9IHRydWU7CisgICAgICAgICAgICB2YXIgaGF2ZURpYWdub3N0aWNzID0gdHJ1ZTsKIAot
ICAgICAgICBpZiAoIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIoIHByb2dyYW0sIGdsLkxJTktfU1RB
VFVTICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgaWYgKCBnbC5nZXRQcm9ncmFtUGFyYW1l
dGVyKCBwcm9ncmFtLCAzNTcxNCApID09PSBmYWxzZSApIHsKIAotICAgICAgICAgICAgcnVubmFi
bGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBydW5uYWJsZSA9IGZhbHNlOwogCi0gICAgICAg
ICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xQcm9ncmFtOiBzaGFkZXIgZXJyb3I6ICcs
IGdsLmdldEVycm9yKCksICdnbC5WQUxJREFURV9TVEFUVVMnLCBnbC5nZXRQcm9ncmFtUGFyYW1l
dGVyKCBwcm9ncmFtLCBnbC5WQUxJREFURV9TVEFUVVMgKSwgJ2dsLmdldFByb2dyYW1JbmZvTG9n
JywgcHJvZ3JhbUxvZywgdmVydGV4TG9nLCBmcmFnbWVudExvZyApOworICAgICAgICAgICAgICAg
IHZhciB2ZXJ0ZXhFcnJvcnMgPSBnZXRTaGFkZXJFcnJvcnMoIGdsLCBnbFZlcnRleFNoYWRlciwg
J3ZlcnRleCcgKTsKKyAgICAgICAgICAgICAgICB2YXIgZnJhZ21lbnRFcnJvcnMgPSBnZXRTaGFk
ZXJFcnJvcnMoIGdsLCBnbEZyYWdtZW50U2hhZGVyLCAnZnJhZ21lbnQnICk7CiAKLSAgICAgICAg
fSBlbHNlIGlmICggcHJvZ3JhbUxvZyAhPT0gJycgKSB7CisgICAgICAgICAgICAgICAgY29uc29s
ZS5lcnJvciggJ1RIUkVFLldlYkdMUHJvZ3JhbTogc2hhZGVyIGVycm9yOiAnLCBnbC5nZXRFcnJv
cigpLCAnMzU3MTUnLCBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKCBwcm9ncmFtLCAzNTcxNSApLCAn
Z2wuZ2V0UHJvZ3JhbUluZm9Mb2cnLCBwcm9ncmFtTG9nLCB2ZXJ0ZXhFcnJvcnMsIGZyYWdtZW50
RXJyb3JzICk7CiAKLSAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUHJvZ3Jh
bTogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2coKScsIHByb2dyYW1Mb2cgKTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIHByb2dyYW1Mb2cgIT09ICcnICkgewogCi0gICAgICAgIH0gZWxzZSBpZiAoIHZl
cnRleExvZyA9PT0gJycgfHwgZnJhZ21lbnRMb2cgPT09ICcnICkgeworICAgICAgICAgICAgICAg
IGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUHJvZ3JhbTogZ2wuZ2V0UHJvZ3JhbUluZm9Mb2co
KScsIHByb2dyYW1Mb2cgKTsKIAotICAgICAgICAgICAgaGF2ZURpYWdub3N0aWNzID0gZmFsc2U7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKCB2ZXJ0ZXhMb2cgPT09ICcnIHx8IGZyYWdtZW50TG9n
ID09PSAnJyApIHsKIAotICAgICAgICB9CisgICAgICAgICAgICAgICAgaGF2ZURpYWdub3N0aWNz
ID0gZmFsc2U7CiAKLSAgICAgICAgaWYgKCBoYXZlRGlhZ25vc3RpY3MgKSB7CisgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHRoaXMuZGlhZ25vc3RpY3MgPSB7CisgICAgICAgICAgICBpZiAo
IGhhdmVEaWFnbm9zdGljcyApIHsKIAotICAgICAgICAgICAgICAgIHJ1bm5hYmxlOiBydW5uYWJs
ZSwKLSAgICAgICAgICAgICAgICBtYXRlcmlhbDogbWF0ZXJpYWwsCisgICAgICAgICAgICAgICAg
dGhpcy5kaWFnbm9zdGljcyA9IHsKIAotICAgICAgICAgICAgICAgIHByb2dyYW1Mb2c6IHByb2dy
YW1Mb2csCisgICAgICAgICAgICAgICAgICAgIHJ1bm5hYmxlOiBydW5uYWJsZSwKKyAgICAgICAg
ICAgICAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLAogCi0gICAgICAgICAgICAgICAgdmVydGV4
U2hhZGVyOiB7CisgICAgICAgICAgICAgICAgICAgIHByb2dyYW1Mb2c6IHByb2dyYW1Mb2csCiAK
LSAgICAgICAgICAgICAgICAgICAgbG9nOiB2ZXJ0ZXhMb2csCi0gICAgICAgICAgICAgICAgICAg
IHByZWZpeDogcHJlZml4VmVydGV4CisgICAgICAgICAgICAgICAgICAgIHZlcnRleFNoYWRlcjog
ewogCi0gICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZzogdmVy
dGV4TG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiBwcmVmaXhWZXJ0ZXgKIAot
ICAgICAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiB7CisgICAgICAgICAgICAgICAgICAgIH0s
CiAKLSAgICAgICAgICAgICAgICAgICAgbG9nOiBmcmFnbWVudExvZywKLSAgICAgICAgICAgICAg
ICAgICAgcHJlZml4OiBwcmVmaXhGcmFnbWVudAorICAgICAgICAgICAgICAgICAgICBmcmFnbWVu
dFNoYWRlcjogewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
bG9nOiBmcmFnbWVudExvZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeDogcHJlZml4
RnJhZ21lbnQKIAotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgfQogCiAgICAgICAgIH0KIApAQCAtMTcxODcs
NyArMTgyMTIsNyBAQAogCiAgICAgICAgICAgICBpZiAoIGNhY2hlZFVuaWZvcm1zID09PSB1bmRl
ZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICBjYWNoZWRVbmlmb3JtcyA9IG5ldyBXZWJHTFVu
aWZvcm1zKCBnbCwgcHJvZ3JhbSwgcmVuZGVyZXIgKTsKKyAgICAgICAgICAgICAgICBjYWNoZWRV
bmlmb3JtcyA9IG5ldyBXZWJHTFVuaWZvcm1zKCBnbCwgcHJvZ3JhbSApOwogCiAgICAgICAgICAg
ICB9CiAKQEAgLTE3MjIwLDMxICsxODI0NSw2IEBACiAKICAgICAgICAgfTsKIAotICAgICAgICAv
LyBERVBSRUNBVEVECi0KLSAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIHRoaXMsIHsK
LQotICAgICAgICAgICAgdW5pZm9ybXM6IHsKLSAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKLQotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFBy
b2dyYW06IC51bmlmb3JtcyBpcyBub3cgLmdldFVuaWZvcm1zKCkuJyApOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5nZXRVbmlmb3JtcygpOwotCi0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgYXR0cmlidXRlczogewotICAgICAgICAgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgewotCi0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fy
biggJ1RIUkVFLldlYkdMUHJvZ3JhbTogLmF0dHJpYnV0ZXMgaXMgbm93IC5nZXRBdHRyaWJ1dGVz
KCkuJyApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzKCk7
Ci0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSApOwotCi0K
ICAgICAgICAgLy8KIAogICAgICAgICB0aGlzLm5hbWUgPSBzaGFkZXIubmFtZTsKQEAgLTE3Mjc3
LDE3ICsxODI3NywxOSBAQAogICAgICAgICAgICAgTWVzaFRvb25NYXRlcmlhbDogJ3Bob25nJywK
ICAgICAgICAgICAgIE1lc2hTdGFuZGFyZE1hdGVyaWFsOiAncGh5c2ljYWwnLAogICAgICAgICAg
ICAgTWVzaFBoeXNpY2FsTWF0ZXJpYWw6ICdwaHlzaWNhbCcsCisgICAgICAgICAgICBNZXNoTWF0
Y2FwTWF0ZXJpYWw6ICdtYXRjYXAnLAogICAgICAgICAgICAgTGluZUJhc2ljTWF0ZXJpYWw6ICdi
YXNpYycsCiAgICAgICAgICAgICBMaW5lRGFzaGVkTWF0ZXJpYWw6ICdkYXNoZWQnLAogICAgICAg
ICAgICAgUG9pbnRzTWF0ZXJpYWw6ICdwb2ludHMnLAotICAgICAgICAgICAgU2hhZG93TWF0ZXJp
YWw6ICdzaGFkb3cnCisgICAgICAgICAgICBTaGFkb3dNYXRlcmlhbDogJ3NoYWRvdycsCisgICAg
ICAgICAgICBTcHJpdGVNYXRlcmlhbDogJ3Nwcml0ZScKICAgICAgICAgfTsKIAogICAgICAgICB2
YXIgcGFyYW1ldGVyTmFtZXMgPSBbCi0gICAgICAgICAgICAicHJlY2lzaW9uIiwgInN1cHBvcnRz
VmVydGV4VGV4dHVyZXMiLCAibWFwIiwgIm1hcEVuY29kaW5nIiwgImVudk1hcCIsICJlbnZNYXBN
b2RlIiwgImVudk1hcEVuY29kaW5nIiwKKyAgICAgICAgICAgICJwcmVjaXNpb24iLCAic3VwcG9y
dHNWZXJ0ZXhUZXh0dXJlcyIsICJtYXAiLCAibWFwRW5jb2RpbmciLCAibWF0Y2FwIiwgIm1hdGNh
cEVuY29kaW5nIiwgImVudk1hcCIsICJlbnZNYXBNb2RlIiwgImVudk1hcEVuY29kaW5nIiwKICAg
ICAgICAgICAgICJsaWdodE1hcCIsICJhb01hcCIsICJlbWlzc2l2ZU1hcCIsICJlbWlzc2l2ZU1h
cEVuY29kaW5nIiwgImJ1bXBNYXAiLCAibm9ybWFsTWFwIiwgIm9iamVjdFNwYWNlTm9ybWFsTWFw
IiwgImRpc3BsYWNlbWVudE1hcCIsICJzcGVjdWxhck1hcCIsCiAgICAgICAgICAgICAicm91Z2hu
ZXNzTWFwIiwgIm1ldGFsbmVzc01hcCIsICJncmFkaWVudE1hcCIsCi0gICAgICAgICAgICAiYWxw
aGFNYXAiLCAiY29tYmluZSIsICJ2ZXJ0ZXhDb2xvcnMiLCAiZm9nIiwgInVzZUZvZyIsICJmb2dF
eHAiLAorICAgICAgICAgICAgImFscGhhTWFwIiwgImNvbWJpbmUiLCAidmVydGV4Q29sb3JzIiwg
InZlcnRleFRhbmdlbnRzIiwgImZvZyIsICJ1c2VGb2ciLCAiZm9nRXhwIiwKICAgICAgICAgICAg
ICJmbGF0U2hhZGluZyIsICJzaXplQXR0ZW51YXRpb24iLCAibG9nYXJpdGhtaWNEZXB0aEJ1ZmZl
ciIsICJza2lubmluZyIsCiAgICAgICAgICAgICAibWF4Qm9uZXMiLCAidXNlVmVydGV4VGV4dHVy
ZSIsICJtb3JwaFRhcmdldHMiLCAibW9ycGhOb3JtYWxzIiwKICAgICAgICAgICAgICJtYXhNb3Jw
aFRhcmdldHMiLCAibWF4TW9ycGhOb3JtYWxzIiwgInByZW11bHRpcGxpZWRBbHBoYSIsCkBAIC0x
NzM5Niw2ICsxODM5OCw4IEBACiAgICAgICAgICAgICAgICAgb3V0cHV0RW5jb2Rpbmc6IGdldFRl
eHR1cmVFbmNvZGluZ0Zyb21NYXAoICggISBjdXJyZW50UmVuZGVyVGFyZ2V0ICkgPyBudWxsIDog
Y3VycmVudFJlbmRlclRhcmdldC50ZXh0dXJlLCByZW5kZXJlci5nYW1tYU91dHB1dCApLAogICAg
ICAgICAgICAgICAgIG1hcDogISEgbWF0ZXJpYWwubWFwLAogICAgICAgICAgICAgICAgIG1hcEVu
Y29kaW5nOiBnZXRUZXh0dXJlRW5jb2RpbmdGcm9tTWFwKCBtYXRlcmlhbC5tYXAsIHJlbmRlcmVy
LmdhbW1hSW5wdXQgKSwKKyAgICAgICAgICAgICAgICBtYXRjYXA6ICEhIG1hdGVyaWFsLm1hdGNh
cCwKKyAgICAgICAgICAgICAgICBtYXRjYXBFbmNvZGluZzogZ2V0VGV4dHVyZUVuY29kaW5nRnJv
bU1hcCggbWF0ZXJpYWwubWF0Y2FwLCByZW5kZXJlci5nYW1tYUlucHV0ICksCiAgICAgICAgICAg
ICAgICAgZW52TWFwOiAhISBtYXRlcmlhbC5lbnZNYXAsCiAgICAgICAgICAgICAgICAgZW52TWFw
TW9kZTogbWF0ZXJpYWwuZW52TWFwICYmIG1hdGVyaWFsLmVudk1hcC5tYXBwaW5nLAogICAgICAg
ICAgICAgICAgIGVudk1hcEVuY29kaW5nOiBnZXRUZXh0dXJlRW5jb2RpbmdGcm9tTWFwKCBtYXRl
cmlhbC5lbnZNYXAsIHJlbmRlcmVyLmdhbW1hSW5wdXQgKSwKQEAgLTE3NDE3LDYgKzE4NDIxLDcg
QEAKIAogICAgICAgICAgICAgICAgIGNvbWJpbmU6IG1hdGVyaWFsLmNvbWJpbmUsCiAKKyAgICAg
ICAgICAgICAgICB2ZXJ0ZXhUYW5nZW50czogKCBtYXRlcmlhbC5ub3JtYWxNYXAgJiYgbWF0ZXJp
YWwudmVydGV4VGFuZ2VudHMgKSwKICAgICAgICAgICAgICAgICB2ZXJ0ZXhDb2xvcnM6IG1hdGVy
aWFsLnZlcnRleENvbG9ycywKIAogICAgICAgICAgICAgICAgIGZvZzogISEgZm9nLApAQCAtMTc1
MDQsNiArMTg1MDksOCBAQAogCiAgICAgICAgICAgICBhcnJheS5wdXNoKCByZW5kZXJlci5nYW1t
YU91dHB1dCApOwogCisgICAgICAgICAgICBhcnJheS5wdXNoKCByZW5kZXJlci5nYW1tYUZhY3Rv
ciApOworCiAgICAgICAgICAgICByZXR1cm4gYXJyYXkuam9pbigpOwogCiAgICAgICAgIH07CkBA
IC0xNzUzMCw3ICsxODUzNyw3IEBACiAKICAgICAgICAgICAgIGlmICggcHJvZ3JhbSA9PT0gdW5k
ZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgcHJvZ3JhbSA9IG5ldyBXZWJHTFByb2dyYW0o
IHJlbmRlcmVyLCBleHRlbnNpb25zLCBjb2RlLCBtYXRlcmlhbCwgc2hhZGVyLCBwYXJhbWV0ZXJz
ICk7CisgICAgICAgICAgICAgICAgcHJvZ3JhbSA9IG5ldyBXZWJHTFByb2dyYW0oIHJlbmRlcmVy
LCBleHRlbnNpb25zLCBjb2RlLCBtYXRlcmlhbCwgc2hhZGVyLCBwYXJhbWV0ZXJzLCBjYXBhYmls
aXRpZXMgKTsKICAgICAgICAgICAgICAgICBwcm9ncmFtcy5wdXNoKCBwcm9ncmFtICk7CiAKICAg
ICAgICAgICAgIH0KQEAgLTE3NjE2LDExICsxODYyMywxNSBAQAogCiAgICAgZnVuY3Rpb24gcGFp
bnRlclNvcnRTdGFibGUoIGEsIGIgKSB7CiAKLSAgICAgICAgaWYgKCBhLnJlbmRlck9yZGVyICE9
PSBiLnJlbmRlck9yZGVyICkgeworICAgICAgICBpZiAoIGEuZ3JvdXBPcmRlciAhPT0gYi5ncm91
cE9yZGVyICkgeworCisgICAgICAgICAgICByZXR1cm4gYS5ncm91cE9yZGVyIC0gYi5ncm91cE9y
ZGVyOworCisgICAgICAgIH0gZWxzZSBpZiAoIGEucmVuZGVyT3JkZXIgIT09IGIucmVuZGVyT3Jk
ZXIgKSB7CiAKICAgICAgICAgICAgIHJldHVybiBhLnJlbmRlck9yZGVyIC0gYi5yZW5kZXJPcmRl
cjsKIAotICAgICAgICB9IGVsc2UgaWYgKCBhLnByb2dyYW0gJiYgYi5wcm9ncmFtICYmIGEucHJv
Z3JhbSAhPT0gYi5wcm9ncmFtICkgeworICAgICAgICB9IGVsc2UgaWYgKCBhLnByb2dyYW0gIT09
IGIucHJvZ3JhbSApIHsKIAogICAgICAgICAgICAgcmV0dXJuIGEucHJvZ3JhbS5pZCAtIGIucHJv
Z3JhbS5pZDsKIApAQCAtMTc2NDIsMTEgKzE4NjUzLDE1IEBACiAKICAgICBmdW5jdGlvbiByZXZl
cnNlUGFpbnRlclNvcnRTdGFibGUoIGEsIGIgKSB7CiAKLSAgICAgICAgaWYgKCBhLnJlbmRlck9y
ZGVyICE9PSBiLnJlbmRlck9yZGVyICkgeworICAgICAgICBpZiAoIGEuZ3JvdXBPcmRlciAhPT0g
Yi5ncm91cE9yZGVyICkgeworCisgICAgICAgICAgICByZXR1cm4gYS5ncm91cE9yZGVyIC0gYi5n
cm91cE9yZGVyOworCisgICAgICAgIH0gZWxzZSBpZiAoIGEucmVuZGVyT3JkZXIgIT09IGIucmVu
ZGVyT3JkZXIgKSB7CiAKICAgICAgICAgICAgIHJldHVybiBhLnJlbmRlck9yZGVyIC0gYi5yZW5k
ZXJPcmRlcjsKIAotICAgICAgICB9IGlmICggYS56ICE9PSBiLnogKSB7CisgICAgICAgIH0gZWxz
ZSBpZiAoIGEueiAhPT0gYi56ICkgewogCiAgICAgICAgICAgICByZXR1cm4gYi56IC0gYS56Owog
CkBAIC0xNzY1OCw2ICsxODY3Myw3IEBACiAKICAgICB9CiAKKwogICAgIGZ1bmN0aW9uIFdlYkdM
UmVuZGVyTGlzdCgpIHsKIAogICAgICAgICB2YXIgcmVuZGVySXRlbXMgPSBbXTsKQEAgLTE3NjY2
LDYgKzE4NjgyLDggQEAKICAgICAgICAgdmFyIG9wYXF1ZSA9IFtdOwogICAgICAgICB2YXIgdHJh
bnNwYXJlbnQgPSBbXTsKIAorICAgICAgICB2YXIgZGVmYXVsdFByb2dyYW0gPSB7IGlkOiAtIDEg
fTsKKwogICAgICAgICBmdW5jdGlvbiBpbml0KCkgewogCiAgICAgICAgICAgICByZW5kZXJJdGVt
c0luZGV4ID0gMDsKQEAgLTE3Njc1LDcgKzE4NjkzLDcgQEAKIAogICAgICAgICB9CiAKLSAgICAg
ICAgZnVuY3Rpb24gcHVzaCggb2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHosIGdyb3VwICkg
eworICAgICAgICBmdW5jdGlvbiBnZXROZXh0UmVuZGVySXRlbSggb2JqZWN0LCBnZW9tZXRyeSwg
bWF0ZXJpYWwsIGdyb3VwT3JkZXIsIHosIGdyb3VwICkgewogCiAgICAgICAgICAgICB2YXIgcmVu
ZGVySXRlbSA9IHJlbmRlckl0ZW1zWyByZW5kZXJJdGVtc0luZGV4IF07CiAKQEAgLTE3Njg2LDcg
KzE4NzA0LDggQEAKICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiBvYmplY3QsCiAgICAgICAg
ICAgICAgICAgICAgIGdlb21ldHJ5OiBnZW9tZXRyeSwKICAgICAgICAgICAgICAgICAgICAgbWF0
ZXJpYWw6IG1hdGVyaWFsLAotICAgICAgICAgICAgICAgICAgICBwcm9ncmFtOiBtYXRlcmlhbC5w
cm9ncmFtLAorICAgICAgICAgICAgICAgICAgICBwcm9ncmFtOiBtYXRlcmlhbC5wcm9ncmFtIHx8
IGRlZmF1bHRQcm9ncmFtLAorICAgICAgICAgICAgICAgICAgICBncm91cE9yZGVyOiBncm91cE9y
ZGVyLAogICAgICAgICAgICAgICAgICAgICByZW5kZXJPcmRlcjogb2JqZWN0LnJlbmRlck9yZGVy
LAogICAgICAgICAgICAgICAgICAgICB6OiB6LAogICAgICAgICAgICAgICAgICAgICBncm91cDog
Z3JvdXAKQEAgLTE3NzAwLDE2ICsxODcxOSwzMyBAQAogICAgICAgICAgICAgICAgIHJlbmRlckl0
ZW0ub2JqZWN0ID0gb2JqZWN0OwogICAgICAgICAgICAgICAgIHJlbmRlckl0ZW0uZ2VvbWV0cnkg
PSBnZW9tZXRyeTsKICAgICAgICAgICAgICAgICByZW5kZXJJdGVtLm1hdGVyaWFsID0gbWF0ZXJp
YWw7Ci0gICAgICAgICAgICAgICAgcmVuZGVySXRlbS5wcm9ncmFtID0gbWF0ZXJpYWwucHJvZ3Jh
bTsKKyAgICAgICAgICAgICAgICByZW5kZXJJdGVtLnByb2dyYW0gPSBtYXRlcmlhbC5wcm9ncmFt
IHx8IGRlZmF1bHRQcm9ncmFtOworICAgICAgICAgICAgICAgIHJlbmRlckl0ZW0uZ3JvdXBPcmRl
ciA9IGdyb3VwT3JkZXI7CiAgICAgICAgICAgICAgICAgcmVuZGVySXRlbS5yZW5kZXJPcmRlciA9
IG9iamVjdC5yZW5kZXJPcmRlcjsKICAgICAgICAgICAgICAgICByZW5kZXJJdGVtLnogPSB6Owog
ICAgICAgICAgICAgICAgIHJlbmRlckl0ZW0uZ3JvdXAgPSBncm91cDsKIAogICAgICAgICAgICAg
fQogCisgICAgICAgICAgICByZW5kZXJJdGVtc0luZGV4ICsrOworCisgICAgICAgICAgICByZXR1
cm4gcmVuZGVySXRlbTsKKworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcHVzaCggb2Jq
ZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwT3JkZXIsIHosIGdyb3VwICkgeworCisgICAg
ICAgICAgICB2YXIgcmVuZGVySXRlbSA9IGdldE5leHRSZW5kZXJJdGVtKCBvYmplY3QsIGdlb21l
dHJ5LCBtYXRlcmlhbCwgZ3JvdXBPcmRlciwgeiwgZ3JvdXAgKTsKKwogICAgICAgICAgICAgKCBt
YXRlcmlhbC50cmFuc3BhcmVudCA9PT0gdHJ1ZSA/IHRyYW5zcGFyZW50IDogb3BhcXVlICkucHVz
aCggcmVuZGVySXRlbSApOwogCi0gICAgICAgICAgICByZW5kZXJJdGVtc0luZGV4ICsrOworICAg
ICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdW5zaGlmdCggb2JqZWN0LCBnZW9tZXRyeSwgbWF0
ZXJpYWwsIGdyb3VwT3JkZXIsIHosIGdyb3VwICkgeworCisgICAgICAgICAgICB2YXIgcmVuZGVy
SXRlbSA9IGdldE5leHRSZW5kZXJJdGVtKCBvYmplY3QsIGdlb21ldHJ5LCBtYXRlcmlhbCwgZ3Jv
dXBPcmRlciwgeiwgZ3JvdXAgKTsKKworICAgICAgICAgICAgKCBtYXRlcmlhbC50cmFuc3BhcmVu
dCA9PT0gdHJ1ZSA/IHRyYW5zcGFyZW50IDogb3BhcXVlICkudW5zaGlmdCggcmVuZGVySXRlbSAp
OwogCiAgICAgICAgIH0KIApAQCAtMTc3MjYsNiArMTg3NjIsNyBAQAogCiAgICAgICAgICAgICBp
bml0OiBpbml0LAogICAgICAgICAgICAgcHVzaDogcHVzaCwKKyAgICAgICAgICAgIHVuc2hpZnQ6
IHVuc2hpZnQsCiAKICAgICAgICAgICAgIHNvcnQ6IHNvcnQKICAgICAgICAgfTsKQEAgLTE3NzM2
LDE3ICsxODc3MywzNyBAQAogCiAgICAgICAgIHZhciBsaXN0cyA9IHt9OwogCi0gICAgICAgIGZ1
bmN0aW9uIGdldCggc2NlbmUsIGNhbWVyYSApIHsKKyAgICAgICAgZnVuY3Rpb24gb25TY2VuZURp
c3Bvc2UoIGV2ZW50ICkgewogCi0gICAgICAgICAgICB2YXIgaGFzaCA9IHNjZW5lLmlkICsgJywn
ICsgY2FtZXJhLmlkOwotICAgICAgICAgICAgdmFyIGxpc3QgPSBsaXN0c1sgaGFzaCBdOworICAg
ICAgICAgICAgdmFyIHNjZW5lID0gZXZlbnQudGFyZ2V0OwogCi0gICAgICAgICAgICBpZiAoIGxp
c3QgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHNjZW5lLnJlbW92ZUV2ZW50TGlzdGVu
ZXIoICdkaXNwb3NlJywgb25TY2VuZURpc3Bvc2UgKTsKIAotICAgICAgICAgICAgICAgIC8vIGNv
bnNvbGUubG9nKCAnVEhSRUUuV2ViR0xSZW5kZXJMaXN0czonLCBoYXNoICk7CisgICAgICAgICAg
ICBkZWxldGUgbGlzdHNbIHNjZW5lLmlkIF07CisKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0
aW9uIGdldCggc2NlbmUsIGNhbWVyYSApIHsKKworICAgICAgICAgICAgdmFyIGNhbWVyYXMgPSBs
aXN0c1sgc2NlbmUuaWQgXTsKKyAgICAgICAgICAgIHZhciBsaXN0OworICAgICAgICAgICAgaWYg
KCBjYW1lcmFzID09PSB1bmRlZmluZWQgKSB7CiAKICAgICAgICAgICAgICAgICBsaXN0ID0gbmV3
IFdlYkdMUmVuZGVyTGlzdCgpOwotICAgICAgICAgICAgICAgIGxpc3RzWyBoYXNoIF0gPSBsaXN0
OworICAgICAgICAgICAgICAgIGxpc3RzWyBzY2VuZS5pZCBdID0ge307CisgICAgICAgICAgICAg
ICAgbGlzdHNbIHNjZW5lLmlkIF1bIGNhbWVyYS5pZCBdID0gbGlzdDsKKworICAgICAgICAgICAg
ICAgIHNjZW5lLmFkZEV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25TY2VuZURpc3Bvc2UgKTsK
KworICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgIGxpc3QgPSBjYW1lcmFz
WyBjYW1lcmEuaWQgXTsKKyAgICAgICAgICAgICAgICBpZiAoIGxpc3QgPT09IHVuZGVmaW5lZCAp
IHsKKworICAgICAgICAgICAgICAgICAgICBsaXN0ID0gbmV3IFdlYkdMUmVuZGVyTGlzdCgpOwor
ICAgICAgICAgICAgICAgICAgICBjYW1lcmFzWyBjYW1lcmEuaWQgXSA9IGxpc3Q7CisKKyAgICAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIH0KIApAQCAtMTc4NjQsNyArMTg5MjEsNyBAQAog
CiAgICAgfQogCi0gICAgdmFyIGNvdW50ID0gMDsKKyAgICB2YXIgbmV4dFZlcnNpb24gPSAwOwog
CiAgICAgZnVuY3Rpb24gV2ViR0xMaWdodHMoKSB7CiAKQEAgLTE3ODcyLDExICsxODkyOSwxOSBA
QAogCiAgICAgICAgIHZhciBzdGF0ZSA9IHsKIAotICAgICAgICAgICAgaWQ6IGNvdW50ICsrLAor
ICAgICAgICAgICAgdmVyc2lvbjogMCwKIAotICAgICAgICAgICAgaGFzaDogJycsCisgICAgICAg
ICAgICBoYXNoOiB7CisgICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMZW5ndGg6IC0gMSwKKyAg
ICAgICAgICAgICAgICBwb2ludExlbmd0aDogLSAxLAorICAgICAgICAgICAgICAgIHNwb3RMZW5n
dGg6IC0gMSwKKyAgICAgICAgICAgICAgICByZWN0QXJlYUxlbmd0aDogLSAxLAorICAgICAgICAg
ICAgICAgIGhlbWlMZW5ndGg6IC0gMSwKKyAgICAgICAgICAgICAgICBzaGFkb3dzTGVuZ3RoOiAt
IDEsCisgICAgICAgICAgICB9LAogCiAgICAgICAgICAgICBhbWJpZW50OiBbIDAsIDAsIDAgXSwK
KyAgICAgICAgICAgIHByb2JlOiBbXSwKICAgICAgICAgICAgIGRpcmVjdGlvbmFsOiBbXSwKICAg
ICAgICAgICAgIGRpcmVjdGlvbmFsU2hhZG93TWFwOiBbXSwKICAgICAgICAgICAgIGRpcmVjdGlv
bmFsU2hhZG93TWF0cml4OiBbXSwKQEAgLTE3ODkxLDYgKzE4OTU2LDggQEAKIAogICAgICAgICB9
OwogCisgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IDk7IGkgKysgKSBzdGF0ZS5wcm9iZS5w
dXNoKCBuZXcgVmVjdG9yMygpICk7CisKICAgICAgICAgdmFyIHZlY3RvcjMgPSBuZXcgVmVjdG9y
MygpOwogICAgICAgICB2YXIgbWF0cml4NCA9IG5ldyBNYXRyaXg0KCk7CiAgICAgICAgIHZhciBt
YXRyaXg0MiA9IG5ldyBNYXRyaXg0KCk7CkBAIC0xNzg5OSw2ICsxODk2Niw4IEBACiAKICAgICAg
ICAgICAgIHZhciByID0gMCwgZyA9IDAsIGIgPSAwOwogCisgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDA7IGkgPCA5OyBpICsrICkgc3RhdGUucHJvYmVbIGkgXS5zZXQoIDAsIDAsIDAgKTsKKwog
ICAgICAgICAgICAgdmFyIGRpcmVjdGlvbmFsTGVuZ3RoID0gMDsKICAgICAgICAgICAgIHZhciBw
b2ludExlbmd0aCA9IDA7CiAgICAgICAgICAgICB2YXIgc3BvdExlbmd0aCA9IDA7CkBAIC0xNzky
Myw2ICsxODk5MiwxNCBAQAogICAgICAgICAgICAgICAgICAgICBnICs9IGNvbG9yLmcgKiBpbnRl
bnNpdHk7CiAgICAgICAgICAgICAgICAgICAgIGIgKz0gY29sb3IuYiAqIGludGVuc2l0eTsKIAor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGxpZ2h0LmlzTGlnaHRQcm9iZSApIHsKKworICAg
ICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDA7IGogPCA5OyBqICsrICkgeworCisgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcm9iZVsgaiBdLmFkZFNjYWxlZFZlY3RvciggbGln
aHQuc2guY29lZmZpY2llbnRzWyBqIF0sIGludGVuc2l0eSApOworCisgICAgICAgICAgICAgICAg
ICAgIH0KKwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGxpZ2h0LmlzRGlyZWN0aW9uYWxM
aWdodCApIHsKIAogICAgICAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybXMgPSBjYWNoZS5nZXQo
IGxpZ2h0ICk7CkBAIC0xNzk2OCw3ICsxOTA0NSw3IEBACiAKICAgICAgICAgICAgICAgICAgICAg
dW5pZm9ybXMuY29uZUNvcyA9IE1hdGguY29zKCBsaWdodC5hbmdsZSApOwogICAgICAgICAgICAg
ICAgICAgICB1bmlmb3Jtcy5wZW51bWJyYUNvcyA9IE1hdGguY29zKCBsaWdodC5hbmdsZSAqICgg
MSAtIGxpZ2h0LnBlbnVtYnJhICkgKTsKLSAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMuZGVj
YXkgPSAoIGxpZ2h0LmRpc3RhbmNlID09PSAwICkgPyAwLjAgOiBsaWdodC5kZWNheTsKKyAgICAg
ICAgICAgICAgICAgICAgdW5pZm9ybXMuZGVjYXkgPSBsaWdodC5kZWNheTsKIAogICAgICAgICAg
ICAgICAgICAgICB1bmlmb3Jtcy5zaGFkb3cgPSBsaWdodC5jYXN0U2hhZG93OwogCkBAIC0xODAy
OSw3ICsxOTEwNiw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMuY29sb3IuY29w
eSggbGlnaHQuY29sb3IgKS5tdWx0aXBseVNjYWxhciggbGlnaHQuaW50ZW5zaXR5ICk7CiAgICAg
ICAgICAgICAgICAgICAgIHVuaWZvcm1zLmRpc3RhbmNlID0gbGlnaHQuZGlzdGFuY2U7Ci0gICAg
ICAgICAgICAgICAgICAgIHVuaWZvcm1zLmRlY2F5ID0gKCBsaWdodC5kaXN0YW5jZSA9PT0gMCAp
ID8gMC4wIDogbGlnaHQuZGVjYXk7CisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLmRlY2F5
ID0gbGlnaHQuZGVjYXk7CiAKICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMuc2hhZG93ID0g
bGlnaHQuY2FzdFNoYWRvdzsKIApAQCAtMTgwNzQsMTMgKzE5MTUxLDMxIEBACiAgICAgICAgICAg
ICBzdGF0ZS5hbWJpZW50WyAxIF0gPSBnOwogICAgICAgICAgICAgc3RhdGUuYW1iaWVudFsgMiBd
ID0gYjsKIAotICAgICAgICAgICAgc3RhdGUuZGlyZWN0aW9uYWwubGVuZ3RoID0gZGlyZWN0aW9u
YWxMZW5ndGg7Ci0gICAgICAgICAgICBzdGF0ZS5zcG90Lmxlbmd0aCA9IHNwb3RMZW5ndGg7Ci0g
ICAgICAgICAgICBzdGF0ZS5yZWN0QXJlYS5sZW5ndGggPSByZWN0QXJlYUxlbmd0aDsKLSAgICAg
ICAgICAgIHN0YXRlLnBvaW50Lmxlbmd0aCA9IHBvaW50TGVuZ3RoOwotICAgICAgICAgICAgc3Rh
dGUuaGVtaS5sZW5ndGggPSBoZW1pTGVuZ3RoOworICAgICAgICAgICAgdmFyIGhhc2ggPSBzdGF0
ZS5oYXNoOwogCi0gICAgICAgICAgICBzdGF0ZS5oYXNoID0gc3RhdGUuaWQgKyAnLCcgKyBkaXJl
Y3Rpb25hbExlbmd0aCArICcsJyArIHBvaW50TGVuZ3RoICsgJywnICsgc3BvdExlbmd0aCArICcs
JyArIHJlY3RBcmVhTGVuZ3RoICsgJywnICsgaGVtaUxlbmd0aCArICcsJyArIHNoYWRvd3MubGVu
Z3RoOworICAgICAgICAgICAgaWYgKCBoYXNoLmRpcmVjdGlvbmFsTGVuZ3RoICE9PSBkaXJlY3Rp
b25hbExlbmd0aCB8fAorICAgICAgICAgICAgICAgIGhhc2gucG9pbnRMZW5ndGggIT09IHBvaW50
TGVuZ3RoIHx8CisgICAgICAgICAgICAgICAgaGFzaC5zcG90TGVuZ3RoICE9PSBzcG90TGVuZ3Ro
IHx8CisgICAgICAgICAgICAgICAgaGFzaC5yZWN0QXJlYUxlbmd0aCAhPT0gcmVjdEFyZWFMZW5n
dGggfHwKKyAgICAgICAgICAgICAgICBoYXNoLmhlbWlMZW5ndGggIT09IGhlbWlMZW5ndGggfHwK
KyAgICAgICAgICAgICAgICBoYXNoLnNoYWRvd3NMZW5ndGggIT09IHNoYWRvd3MubGVuZ3RoICkg
eworCisgICAgICAgICAgICAgICAgc3RhdGUuZGlyZWN0aW9uYWwubGVuZ3RoID0gZGlyZWN0aW9u
YWxMZW5ndGg7CisgICAgICAgICAgICAgICAgc3RhdGUuc3BvdC5sZW5ndGggPSBzcG90TGVuZ3Ro
OworICAgICAgICAgICAgICAgIHN0YXRlLnJlY3RBcmVhLmxlbmd0aCA9IHJlY3RBcmVhTGVuZ3Ro
OworICAgICAgICAgICAgICAgIHN0YXRlLnBvaW50Lmxlbmd0aCA9IHBvaW50TGVuZ3RoOworICAg
ICAgICAgICAgICAgIHN0YXRlLmhlbWkubGVuZ3RoID0gaGVtaUxlbmd0aDsKKworICAgICAgICAg
ICAgICAgIGhhc2guZGlyZWN0aW9uYWxMZW5ndGggPSBkaXJlY3Rpb25hbExlbmd0aDsKKyAgICAg
ICAgICAgICAgICBoYXNoLnBvaW50TGVuZ3RoID0gcG9pbnRMZW5ndGg7CisgICAgICAgICAgICAg
ICAgaGFzaC5zcG90TGVuZ3RoID0gc3BvdExlbmd0aDsKKyAgICAgICAgICAgICAgICBoYXNoLnJl
Y3RBcmVhTGVuZ3RoID0gcmVjdEFyZWFMZW5ndGg7CisgICAgICAgICAgICAgICAgaGFzaC5oZW1p
TGVuZ3RoID0gaGVtaUxlbmd0aDsKKyAgICAgICAgICAgICAgICBoYXNoLnNoYWRvd3NMZW5ndGgg
PSBzaGFkb3dzLmxlbmd0aDsKKworICAgICAgICAgICAgICAgIHN0YXRlLnZlcnNpb24gPSBuZXh0
VmVyc2lvbiArKzsKKworICAgICAgICAgICAgfQogCiAgICAgICAgIH0KIApAQCAtMTgxMDEsMTMg
KzE5MTk2LDExIEBACiAKICAgICAgICAgdmFyIGxpZ2h0c0FycmF5ID0gW107CiAgICAgICAgIHZh
ciBzaGFkb3dzQXJyYXkgPSBbXTsKLSAgICAgICAgdmFyIHNwcml0ZXNBcnJheSA9IFtdOwogCiAg
ICAgICAgIGZ1bmN0aW9uIGluaXQoKSB7CiAKICAgICAgICAgICAgIGxpZ2h0c0FycmF5Lmxlbmd0
aCA9IDA7CiAgICAgICAgICAgICBzaGFkb3dzQXJyYXkubGVuZ3RoID0gMDsKLSAgICAgICAgICAg
IHNwcml0ZXNBcnJheS5sZW5ndGggPSAwOwogCiAgICAgICAgIH0KIApAQCAtMTgxMjMsMTIgKzE5
MjE2LDYgQEAKIAogICAgICAgICB9CiAKLSAgICAgICAgZnVuY3Rpb24gcHVzaFNwcml0ZSggc3By
aXRlICkgewotCi0gICAgICAgICAgICBzcHJpdGVzQXJyYXkucHVzaCggc3ByaXRlICk7Ci0KLSAg
ICAgICAgfQotCiAgICAgICAgIGZ1bmN0aW9uIHNldHVwTGlnaHRzKCBjYW1lcmEgKSB7CiAKICAg
ICAgICAgICAgIGxpZ2h0cy5zZXR1cCggbGlnaHRzQXJyYXksIHNoYWRvd3NBcnJheSwgY2FtZXJh
ICk7CkBAIC0xODEzOCw3ICsxOTIyNSw2IEBACiAgICAgICAgIHZhciBzdGF0ZSA9IHsKICAgICAg
ICAgICAgIGxpZ2h0c0FycmF5OiBsaWdodHNBcnJheSwKICAgICAgICAgICAgIHNoYWRvd3NBcnJh
eTogc2hhZG93c0FycmF5LAotICAgICAgICAgICAgc3ByaXRlc0FycmF5OiBzcHJpdGVzQXJyYXks
CiAKICAgICAgICAgICAgIGxpZ2h0czogbGlnaHRzCiAgICAgICAgIH07CkBAIC0xODE0OSw4ICsx
OTIzNSw3IEBACiAgICAgICAgICAgICBzZXR1cExpZ2h0czogc2V0dXBMaWdodHMsCiAKICAgICAg
ICAgICAgIHB1c2hMaWdodDogcHVzaExpZ2h0LAotICAgICAgICAgICAgcHVzaFNoYWRvdzogcHVz
aFNoYWRvdywKLSAgICAgICAgICAgIHB1c2hTcHJpdGU6IHB1c2hTcHJpdGUKKyAgICAgICAgICAg
IHB1c2hTaGFkb3c6IHB1c2hTaGFkb3cKICAgICAgICAgfTsKIAogICAgIH0KQEAgLTE4MTU5LDE2
ICsxOTI0NCw0MCBAQAogCiAgICAgICAgIHZhciByZW5kZXJTdGF0ZXMgPSB7fTsKIAotICAgICAg
ICBmdW5jdGlvbiBnZXQoIHNjZW5lLCBjYW1lcmEgKSB7CisgICAgICAgIGZ1bmN0aW9uIG9uU2Nl
bmVEaXNwb3NlKCBldmVudCApIHsKKworICAgICAgICAgICAgdmFyIHNjZW5lID0gZXZlbnQudGFy
Z2V0OwogCi0gICAgICAgICAgICB2YXIgaGFzaCA9IHNjZW5lLmlkICsgJywnICsgY2FtZXJhLmlk
OworICAgICAgICAgICAgc2NlbmUucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2Rpc3Bvc2UnLCBvblNj
ZW5lRGlzcG9zZSApOwogCi0gICAgICAgICAgICB2YXIgcmVuZGVyU3RhdGUgPSByZW5kZXJTdGF0
ZXNbIGhhc2ggXTsKKyAgICAgICAgICAgIGRlbGV0ZSByZW5kZXJTdGF0ZXNbIHNjZW5lLmlkIF07
CiAKLSAgICAgICAgICAgIGlmICggcmVuZGVyU3RhdGUgPT09IHVuZGVmaW5lZCApIHsKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGdldCggc2NlbmUsIGNhbWVyYSApIHsKKworICAgICAg
ICAgICAgdmFyIHJlbmRlclN0YXRlOworCisgICAgICAgICAgICBpZiAoIHJlbmRlclN0YXRlc1sg
c2NlbmUuaWQgXSA9PT0gdW5kZWZpbmVkICkgewogCiAgICAgICAgICAgICAgICAgcmVuZGVyU3Rh
dGUgPSBuZXcgV2ViR0xSZW5kZXJTdGF0ZSgpOwotICAgICAgICAgICAgICAgIHJlbmRlclN0YXRl
c1sgaGFzaCBdID0gcmVuZGVyU3RhdGU7CisgICAgICAgICAgICAgICAgcmVuZGVyU3RhdGVzWyBz
Y2VuZS5pZCBdID0ge307CisgICAgICAgICAgICAgICAgcmVuZGVyU3RhdGVzWyBzY2VuZS5pZCBd
WyBjYW1lcmEuaWQgXSA9IHJlbmRlclN0YXRlOworCisgICAgICAgICAgICAgICAgc2NlbmUuYWRk
RXZlbnRMaXN0ZW5lciggJ2Rpc3Bvc2UnLCBvblNjZW5lRGlzcG9zZSApOworCisgICAgICAgICAg
ICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgaWYgKCByZW5kZXJTdGF0ZXNbIHNjZW5lLmlk
IF1bIGNhbWVyYS5pZCBdID09PSB1bmRlZmluZWQgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
cmVuZGVyU3RhdGUgPSBuZXcgV2ViR0xSZW5kZXJTdGF0ZSgpOworICAgICAgICAgICAgICAgICAg
ICByZW5kZXJTdGF0ZXNbIHNjZW5lLmlkIF1bIGNhbWVyYS5pZCBdID0gcmVuZGVyU3RhdGU7CisK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgICAgIHJlbmRlclN0
YXRlID0gcmVuZGVyU3RhdGVzWyBzY2VuZS5pZCBdWyBjYW1lcmEuaWQgXTsKKworICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgfQogCkBAIC0xODQ0MSwxMiArMTk1NTAsMTQgQEAKIAog
ICAgICAgICAgICAgaWYgKCBsaWdodHMubGVuZ3RoID09PSAwICkgcmV0dXJuOwogCi0gICAgICAg
ICAgICAvLyBUT0RPIENsZWFuIHVwIChuZWVkZWQgaW4gY2FzZSBvZiBjb250ZXh0bG9zdCkKLSAg
ICAgICAgICAgIHZhciBfZ2wgPSBfcmVuZGVyZXIuY29udGV4dDsKKyAgICAgICAgICAgIHZhciBj
dXJyZW50UmVuZGVyVGFyZ2V0ID0gX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpOworICAgICAg
ICAgICAgdmFyIGFjdGl2ZUN1YmVGYWNlID0gX3JlbmRlcmVyLmdldEFjdGl2ZUN1YmVGYWNlKCk7
CisgICAgICAgICAgICB2YXIgYWN0aXZlTWlwTWFwTGV2ZWwgPSBfcmVuZGVyZXIuZ2V0QWN0aXZl
TWlwTWFwTGV2ZWwoKTsKKwogICAgICAgICAgICAgdmFyIF9zdGF0ZSA9IF9yZW5kZXJlci5zdGF0
ZTsKIAogICAgICAgICAgICAgLy8gU2V0IEdMIHN0YXRlIGZvciBkZXB0aCBtYXAuCi0gICAgICAg
ICAgICBfc3RhdGUuZGlzYWJsZSggX2dsLkJMRU5EICk7CisgICAgICAgICAgICBfc3RhdGUuc2V0
QmxlbmRpbmcoIE5vQmxlbmRpbmcgKTsKICAgICAgICAgICAgIF9zdGF0ZS5idWZmZXJzLmNvbG9y
LnNldENsZWFyKCAxLCAxLCAxLCAxICk7CiAgICAgICAgICAgICBfc3RhdGUuYnVmZmVycy5kZXB0
aC5zZXRUZXN0KCB0cnVlICk7CiAgICAgICAgICAgICBfc3RhdGUuc2V0U2Npc3NvclRlc3QoIGZh
bHNlICk7CkBAIC0xODU5OSw2ICsxOTcxMCw4IEBACiAKICAgICAgICAgICAgIHNjb3BlLm5lZWRz
VXBkYXRlID0gZmFsc2U7CiAKKyAgICAgICAgICAgIF9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQo
IGN1cnJlbnRSZW5kZXJUYXJnZXQsIGFjdGl2ZUN1YmVGYWNlLCBhY3RpdmVNaXBNYXBMZXZlbCAp
OworCiAgICAgICAgIH07CiAKICAgICAgICAgZnVuY3Rpb24gZ2V0RGVwdGhNYXRlcmlhbCggb2Jq
ZWN0LCBtYXRlcmlhbCwgaXNQb2ludExpZ2h0LCBsaWdodFBvc2l0aW9uV29ybGQsIHNoYWRvd0Nh
bWVyYU5lYXIsIHNoYWRvd0NhbWVyYUZhciApIHsKQEAgLTE4NzcxLDQwNCArMTk4ODQsNyBAQAog
ICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCiAgICAgICovCiAKLSAg
ICBmdW5jdGlvbiBDYW52YXNUZXh0dXJlKCBjYW52YXMsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwg
bWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSApIHsKLQotICAg
ICAgICBUZXh0dXJlLmNhbGwoIHRoaXMsIGNhbnZhcywgbWFwcGluZywgd3JhcFMsIHdyYXBULCBt
YWdGaWx0ZXIsIG1pbkZpbHRlciwgZm9ybWF0LCB0eXBlLCBhbmlzb3Ryb3B5ICk7Ci0KLSAgICAg
ICAgdGhpcy5uZWVkc1VwZGF0ZSA9IHRydWU7Ci0KLSAgICB9Ci0KLSAgICBDYW52YXNUZXh0dXJl
LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFRleHR1cmUucHJvdG90eXBlICk7Ci0gICAgQ2Fu
dmFzVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYW52YXNUZXh0dXJlOwotICAgIENh
bnZhc1RleHR1cmUucHJvdG90eXBlLmlzQ2FudmFzVGV4dHVyZSA9IHRydWU7Ci0KLSAgICAvKioK
LSAgICAgKiBAYXV0aG9yIG1pa2FlbCBlbXRpbmdlciAvIGh0dHA6Ly9nb21vLnNlLwotICAgICAq
IEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICovCi0K
LSAgICBmdW5jdGlvbiBXZWJHTFNwcml0ZVJlbmRlcmVyKCByZW5kZXJlciwgZ2wsIHN0YXRlLCB0
ZXh0dXJlcywgY2FwYWJpbGl0aWVzICkgewotCi0gICAgICAgIHZhciB2ZXJ0ZXhCdWZmZXIsIGVs
ZW1lbnRCdWZmZXI7Ci0gICAgICAgIHZhciBwcm9ncmFtLCBhdHRyaWJ1dGVzLCB1bmlmb3JtczsK
LQotICAgICAgICB2YXIgdGV4dHVyZTsKLQotICAgICAgICAvLyBkZWNvbXBvc2UgbWF0cml4V29y
bGQKLQotICAgICAgICB2YXIgc3ByaXRlUG9zaXRpb24gPSBuZXcgVmVjdG9yMygpOwotICAgICAg
ICB2YXIgc3ByaXRlUm90YXRpb24gPSBuZXcgUXVhdGVybmlvbigpOwotICAgICAgICB2YXIgc3By
aXRlU2NhbGUgPSBuZXcgVmVjdG9yMygpOwotCi0gICAgICAgIGZ1bmN0aW9uIGluaXQoKSB7Ci0K
LSAgICAgICAgICAgIHZhciB2ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoIFsKLSAgICAgICAg
ICAgICAgICAtIDAuNSwgLSAwLjUsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAwLjUsIC0gMC41
LCAxLCAwLAotICAgICAgICAgICAgICAgICAgMC41LCAwLjUsIDEsIDEsCi0gICAgICAgICAgICAg
ICAgLSAwLjUsIDAuNSwgMCwgMQotICAgICAgICAgICAgXSApOwotCi0gICAgICAgICAgICB2YXIg
ZmFjZXMgPSBuZXcgVWludDE2QXJyYXkoIFsKLSAgICAgICAgICAgICAgICAwLCAxLCAyLAotICAg
ICAgICAgICAgICAgIDAsIDIsIDMKLSAgICAgICAgICAgIF0gKTsKLQotICAgICAgICAgICAgdmVy
dGV4QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7Ci0gICAgICAgICAgICBlbGVtZW50QnVmZmVy
ID0gZ2wuY3JlYXRlQnVmZmVyKCk7Ci0KLSAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoIGdsLkFS
UkFZX0JVRkZFUiwgdmVydGV4QnVmZmVyICk7Ci0gICAgICAgICAgICBnbC5idWZmZXJEYXRhKCBn
bC5BUlJBWV9CVUZGRVIsIHZlcnRpY2VzLCBnbC5TVEFUSUNfRFJBVyApOwotCi0gICAgICAgICAg
ICBnbC5iaW5kQnVmZmVyKCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZWxlbWVudEJ1ZmZlciAp
OwotICAgICAgICAgICAgZ2wuYnVmZmVyRGF0YSggZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGZh
Y2VzLCBnbC5TVEFUSUNfRFJBVyApOwotCi0gICAgICAgICAgICBwcm9ncmFtID0gY3JlYXRlUHJv
Z3JhbSgpOwotCi0gICAgICAgICAgICBhdHRyaWJ1dGVzID0gewotICAgICAgICAgICAgICAgIHBv
c2l0aW9uOiBnbC5nZXRBdHRyaWJMb2NhdGlvbiggcHJvZ3JhbSwgJ3Bvc2l0aW9uJyApLAotICAg
ICAgICAgICAgICAgIHV2OiBnbC5nZXRBdHRyaWJMb2NhdGlvbiggcHJvZ3JhbSwgJ3V2JyApCi0g
ICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB1bmlmb3JtcyA9IHsKLSAgICAgICAgICAgICAg
ICB1dk9mZnNldDogZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKCBwcm9ncmFtLCAndXZPZmZzZXQnICks
Ci0gICAgICAgICAgICAgICAgdXZTY2FsZTogZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKCBwcm9ncmFt
LCAndXZTY2FsZScgKSwKLQotICAgICAgICAgICAgICAgIHJvdGF0aW9uOiBnbC5nZXRVbmlmb3Jt
TG9jYXRpb24oIHByb2dyYW0sICdyb3RhdGlvbicgKSwKLSAgICAgICAgICAgICAgICBjZW50ZXI6
IGdsLmdldFVuaWZvcm1Mb2NhdGlvbiggcHJvZ3JhbSwgJ2NlbnRlcicgKSwKLSAgICAgICAgICAg
ICAgICBzY2FsZTogZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKCBwcm9ncmFtLCAnc2NhbGUnICksCi0K
LSAgICAgICAgICAgICAgICBjb2xvcjogZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKCBwcm9ncmFtLCAn
Y29sb3InICksCi0gICAgICAgICAgICAgICAgbWFwOiBnbC5nZXRVbmlmb3JtTG9jYXRpb24oIHBy
b2dyYW0sICdtYXAnICksCi0gICAgICAgICAgICAgICAgb3BhY2l0eTogZ2wuZ2V0VW5pZm9ybUxv
Y2F0aW9uKCBwcm9ncmFtLCAnb3BhY2l0eScgKSwKLQotICAgICAgICAgICAgICAgIG1vZGVsVmll
d01hdHJpeDogZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKCBwcm9ncmFtLCAnbW9kZWxWaWV3TWF0cml4
JyApLAotICAgICAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IGdsLmdldFVuaWZvcm1Mb2Nh
dGlvbiggcHJvZ3JhbSwgJ3Byb2plY3Rpb25NYXRyaXgnICksCi0KLSAgICAgICAgICAgICAgICBm
b2dUeXBlOiBnbC5nZXRVbmlmb3JtTG9jYXRpb24oIHByb2dyYW0sICdmb2dUeXBlJyApLAotICAg
ICAgICAgICAgICAgIGZvZ0RlbnNpdHk6IGdsLmdldFVuaWZvcm1Mb2NhdGlvbiggcHJvZ3JhbSwg
J2ZvZ0RlbnNpdHknICksCi0gICAgICAgICAgICAgICAgZm9nTmVhcjogZ2wuZ2V0VW5pZm9ybUxv
Y2F0aW9uKCBwcm9ncmFtLCAnZm9nTmVhcicgKSwKLSAgICAgICAgICAgICAgICBmb2dGYXI6IGds
LmdldFVuaWZvcm1Mb2NhdGlvbiggcHJvZ3JhbSwgJ2ZvZ0ZhcicgKSwKLSAgICAgICAgICAgICAg
ICBmb2dDb2xvcjogZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKCBwcm9ncmFtLCAnZm9nQ29sb3InICks
Ci0gICAgICAgICAgICAgICAgZm9nRGVwdGg6IGdsLmdldFVuaWZvcm1Mb2NhdGlvbiggcHJvZ3Jh
bSwgJ2ZvZ0RlcHRoJyApLAotCi0gICAgICAgICAgICAgICAgYWxwaGFUZXN0OiBnbC5nZXRVbmlm
b3JtTG9jYXRpb24oIHByb2dyYW0sICdhbHBoYVRlc3QnICkKLSAgICAgICAgICAgIH07Ci0KLSAg
ICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoICdodHRwOi8v
d3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2NhbnZhcycgKTsKLSAgICAgICAgICAgIGNhbnZhcy53
aWR0aCA9IDg7Ci0gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gODsKLQotICAgICAgICAgICAg
dmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApOwotICAgICAgICAgICAgY29u
dGV4dC5maWxsU3R5bGUgPSAnd2hpdGUnOwotICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdCgg
MCwgMCwgOCwgOCApOwotCi0gICAgICAgICAgICB0ZXh0dXJlID0gbmV3IENhbnZhc1RleHR1cmUo
IGNhbnZhcyApOwotCi0gICAgICAgIH0KLQotICAgICAgICB0aGlzLnJlbmRlciA9IGZ1bmN0aW9u
ICggc3ByaXRlcywgc2NlbmUsIGNhbWVyYSApIHsKLQotICAgICAgICAgICAgaWYgKCBzcHJpdGVz
Lmxlbmd0aCA9PT0gMCApIHJldHVybjsKLQotICAgICAgICAgICAgLy8gc2V0dXAgZ2wKLQotICAg
ICAgICAgICAgaWYgKCBwcm9ncmFtID09PSB1bmRlZmluZWQgKSB7Ci0KLSAgICAgICAgICAgICAg
ICBpbml0KCk7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RhdGUudXNlUHJvZ3Jh
bSggcHJvZ3JhbSApOwotCi0gICAgICAgICAgICBzdGF0ZS5pbml0QXR0cmlidXRlcygpOwotICAg
ICAgICAgICAgc3RhdGUuZW5hYmxlQXR0cmlidXRlKCBhdHRyaWJ1dGVzLnBvc2l0aW9uICk7Ci0g
ICAgICAgICAgICBzdGF0ZS5lbmFibGVBdHRyaWJ1dGUoIGF0dHJpYnV0ZXMudXYgKTsKLSAgICAg
ICAgICAgIHN0YXRlLmRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCk7Ci0KLSAgICAgICAgICAgIHN0
YXRlLmRpc2FibGUoIGdsLkNVTExfRkFDRSApOwotICAgICAgICAgICAgc3RhdGUuZW5hYmxlKCBn
bC5CTEVORCApOwotCi0gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIs
IHZlcnRleEJ1ZmZlciApOwotICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlciggYXR0
cmlidXRlcy5wb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAyICogOCwgMCApOwotICAgICAg
ICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlciggYXR0cmlidXRlcy51diwgMiwgZ2wuRkxPQVQs
IGZhbHNlLCAyICogOCwgOCApOwotCi0gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKCBnbC5FTEVN
RU5UX0FSUkFZX0JVRkZFUiwgZWxlbWVudEJ1ZmZlciApOwotCi0gICAgICAgICAgICBnbC51bmlm
b3JtTWF0cml4NGZ2KCB1bmlmb3Jtcy5wcm9qZWN0aW9uTWF0cml4LCBmYWxzZSwgY2FtZXJhLnBy
b2plY3Rpb25NYXRyaXguZWxlbWVudHMgKTsKLQotICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGV4
dHVyZSggZ2wuVEVYVFVSRTAgKTsKLSAgICAgICAgICAgIGdsLnVuaWZvcm0xaSggdW5pZm9ybXMu
bWFwLCAwICk7Ci0KLSAgICAgICAgICAgIHZhciBvbGRGb2dUeXBlID0gMDsKLSAgICAgICAgICAg
IHZhciBzY2VuZUZvZ1R5cGUgPSAwOwotICAgICAgICAgICAgdmFyIGZvZyA9IHNjZW5lLmZvZzsK
LQotICAgICAgICAgICAgaWYgKCBmb2cgKSB7Ci0KLSAgICAgICAgICAgICAgICBnbC51bmlmb3Jt
M2YoIHVuaWZvcm1zLmZvZ0NvbG9yLCBmb2cuY29sb3IuciwgZm9nLmNvbG9yLmcsIGZvZy5jb2xv
ci5iICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGZvZy5pc0ZvZyApIHsKLQotICAgICAgICAg
ICAgICAgICAgICBnbC51bmlmb3JtMWYoIHVuaWZvcm1zLmZvZ05lYXIsIGZvZy5uZWFyICk7Ci0g
ICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0xZiggdW5pZm9ybXMuZm9nRmFyLCBmb2cuZmFy
ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZ2wudW5pZm9ybTFpKCB1bmlmb3Jtcy5mb2dUeXBl
LCAxICk7Ci0gICAgICAgICAgICAgICAgICAgIG9sZEZvZ1R5cGUgPSAxOwotICAgICAgICAgICAg
ICAgICAgICBzY2VuZUZvZ1R5cGUgPSAxOwotCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg
Zm9nLmlzRm9nRXhwMiApIHsKLQotICAgICAgICAgICAgICAgICAgICBnbC51bmlmb3JtMWYoIHVu
aWZvcm1zLmZvZ0RlbnNpdHksIGZvZy5kZW5zaXR5ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Z2wudW5pZm9ybTFpKCB1bmlmb3Jtcy5mb2dUeXBlLCAyICk7Ci0gICAgICAgICAgICAgICAgICAg
IG9sZEZvZ1R5cGUgPSAyOwotICAgICAgICAgICAgICAgICAgICBzY2VuZUZvZ1R5cGUgPSAyOwot
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAg
ICAgICAgZ2wudW5pZm9ybTFpKCB1bmlmb3Jtcy5mb2dUeXBlLCAwICk7Ci0gICAgICAgICAgICAg
ICAgb2xkRm9nVHlwZSA9IDA7Ci0gICAgICAgICAgICAgICAgc2NlbmVGb2dUeXBlID0gMDsKLQot
ICAgICAgICAgICAgfQotCi0KLSAgICAgICAgICAgIC8vIHVwZGF0ZSBwb3NpdGlvbnMgYW5kIHNv
cnQKLQotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gc3ByaXRlcy5sZW5ndGg7IGkg
PCBsOyBpICsrICkgewotCi0gICAgICAgICAgICAgICAgdmFyIHNwcml0ZSA9IHNwcml0ZXNbIGkg
XTsKLQotICAgICAgICAgICAgICAgIHNwcml0ZS5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRy
aWNlcyggY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSwgc3ByaXRlLm1hdHJpeFdvcmxkICk7Ci0g
ICAgICAgICAgICAgICAgc3ByaXRlLnogPSAtIHNwcml0ZS5tb2RlbFZpZXdNYXRyaXguZWxlbWVu
dHNbIDE0IF07Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3ByaXRlcy5zb3J0KCBw
YWludGVyU29ydFN0YWJsZSApOwotCi0gICAgICAgICAgICAvLyByZW5kZXIgYWxsIHNwcml0ZXMK
LQotICAgICAgICAgICAgdmFyIHNjYWxlID0gW107Ci0gICAgICAgICAgICB2YXIgY2VudGVyID0g
W107Ci0KLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHNwcml0ZXMubGVuZ3RoOyBp
IDwgbDsgaSArKyApIHsKLQotICAgICAgICAgICAgICAgIHZhciBzcHJpdGUgPSBzcHJpdGVzWyBp
IF07Ci0gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gc3ByaXRlLm1hdGVyaWFsOwotCi0g
ICAgICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC52aXNpYmxlID09PSBmYWxzZSApIGNvbnRpbnVl
OwotCi0gICAgICAgICAgICAgICAgc3ByaXRlLm9uQmVmb3JlUmVuZGVyKCByZW5kZXJlciwgc2Nl
bmUsIGNhbWVyYSwgdW5kZWZpbmVkLCBtYXRlcmlhbCwgdW5kZWZpbmVkICk7Ci0KLSAgICAgICAg
ICAgICAgICBnbC51bmlmb3JtMWYoIHVuaWZvcm1zLmFscGhhVGVzdCwgbWF0ZXJpYWwuYWxwaGFU
ZXN0ICk7Ci0gICAgICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdiggdW5pZm9ybXMubW9k
ZWxWaWV3TWF0cml4LCBmYWxzZSwgc3ByaXRlLm1vZGVsVmlld01hdHJpeC5lbGVtZW50cyApOwot
Ci0gICAgICAgICAgICAgICAgc3ByaXRlLm1hdHJpeFdvcmxkLmRlY29tcG9zZSggc3ByaXRlUG9z
aXRpb24sIHNwcml0ZVJvdGF0aW9uLCBzcHJpdGVTY2FsZSApOwotCi0gICAgICAgICAgICAgICAg
c2NhbGVbIDAgXSA9IHNwcml0ZVNjYWxlLng7Ci0gICAgICAgICAgICAgICAgc2NhbGVbIDEgXSA9
IHNwcml0ZVNjYWxlLnk7Ci0KLSAgICAgICAgICAgICAgICBjZW50ZXJbIDAgXSA9IHNwcml0ZS5j
ZW50ZXIueCAtIDAuNTsKLSAgICAgICAgICAgICAgICBjZW50ZXJbIDEgXSA9IHNwcml0ZS5jZW50
ZXIueSAtIDAuNTsKLQotICAgICAgICAgICAgICAgIHZhciBmb2dUeXBlID0gMDsKLQotICAgICAg
ICAgICAgICAgIGlmICggc2NlbmUuZm9nICYmIG1hdGVyaWFsLmZvZyApIHsKLQotICAgICAgICAg
ICAgICAgICAgICBmb2dUeXBlID0gc2NlbmVGb2dUeXBlOwotCi0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKCBvbGRGb2dUeXBlICE9PSBmb2dUeXBlICkgewotCi0gICAg
ICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0xaSggdW5pZm9ybXMuZm9nVHlwZSwgZm9nVHlwZSAp
OwotICAgICAgICAgICAgICAgICAgICBvbGRGb2dUeXBlID0gZm9nVHlwZTsKLQotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWwubWFwICE9PSBudWxsICkg
ewotCi0gICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0yZiggdW5pZm9ybXMudXZPZmZzZXQs
IG1hdGVyaWFsLm1hcC5vZmZzZXQueCwgbWF0ZXJpYWwubWFwLm9mZnNldC55ICk7Ci0gICAgICAg
ICAgICAgICAgICAgIGdsLnVuaWZvcm0yZiggdW5pZm9ybXMudXZTY2FsZSwgbWF0ZXJpYWwubWFw
LnJlcGVhdC54LCBtYXRlcmlhbC5tYXAucmVwZWF0LnkgKTsKLQotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgZ2wudW5pZm9ybTJmKCB1bmlmb3Jtcy51dk9m
ZnNldCwgMCwgMCApOwotICAgICAgICAgICAgICAgICAgICBnbC51bmlmb3JtMmYoIHVuaWZvcm1z
LnV2U2NhbGUsIDEsIDEgKTsKLQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGdsLnVuaWZvcm0xZiggdW5pZm9ybXMub3BhY2l0eSwgbWF0ZXJpYWwub3BhY2l0eSApOwotICAg
ICAgICAgICAgICAgIGdsLnVuaWZvcm0zZiggdW5pZm9ybXMuY29sb3IsIG1hdGVyaWFsLmNvbG9y
LnIsIG1hdGVyaWFsLmNvbG9yLmcsIG1hdGVyaWFsLmNvbG9yLmIgKTsKLQotICAgICAgICAgICAg
ICAgIGdsLnVuaWZvcm0xZiggdW5pZm9ybXMucm90YXRpb24sIG1hdGVyaWFsLnJvdGF0aW9uICk7
Ci0gICAgICAgICAgICAgICAgZ2wudW5pZm9ybTJmdiggdW5pZm9ybXMuY2VudGVyLCBjZW50ZXIg
KTsKLSAgICAgICAgICAgICAgICBnbC51bmlmb3JtMmZ2KCB1bmlmb3Jtcy5zY2FsZSwgc2NhbGUg
KTsKLQotICAgICAgICAgICAgICAgIHN0YXRlLnNldEJsZW5kaW5nKCBtYXRlcmlhbC5ibGVuZGlu
ZywgbWF0ZXJpYWwuYmxlbmRFcXVhdGlvbiwgbWF0ZXJpYWwuYmxlbmRTcmMsIG1hdGVyaWFsLmJs
ZW5kRHN0LCBtYXRlcmlhbC5ibGVuZEVxdWF0aW9uQWxwaGEsIG1hdGVyaWFsLmJsZW5kU3JjQWxw
aGEsIG1hdGVyaWFsLmJsZW5kRHN0QWxwaGEsIG1hdGVyaWFsLnByZW11bHRpcGxpZWRBbHBoYSAp
OwotICAgICAgICAgICAgICAgIHN0YXRlLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCggbWF0ZXJpYWwu
ZGVwdGhUZXN0ICk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuYnVmZmVycy5kZXB0aC5zZXRNYXNr
KCBtYXRlcmlhbC5kZXB0aFdyaXRlICk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuYnVmZmVycy5j
b2xvci5zZXRNYXNrKCBtYXRlcmlhbC5jb2xvcldyaXRlICk7Ci0KLSAgICAgICAgICAgICAgICB0
ZXh0dXJlcy5zZXRUZXh0dXJlMkQoIG1hdGVyaWFsLm1hcCB8fCB0ZXh0dXJlLCAwICk7Ci0KLSAg
ICAgICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoIGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdO
RURfU0hPUlQsIDAgKTsKLQotICAgICAgICAgICAgICAgIHNwcml0ZS5vbkFmdGVyUmVuZGVyKCBy
ZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdW5kZWZpbmVkLCBtYXRlcmlhbCwgdW5kZWZpbmVkICk7
Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gcmVzdG9yZSBnbAotCi0gICAgICAg
ICAgICBzdGF0ZS5lbmFibGUoIGdsLkNVTExfRkFDRSApOwotCi0gICAgICAgICAgICBzdGF0ZS5y
ZXNldCgpOwotCi0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gY3JlYXRlUHJvZ3JhbSgp
IHsKLQotICAgICAgICAgICAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7Ci0KLSAg
ICAgICAgICAgIHZhciB2ZXJ0ZXhTaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoIGdsLlZFUlRFWF9T
SEFERVIgKTsKLSAgICAgICAgICAgIHZhciBmcmFnbWVudFNoYWRlciA9IGdsLmNyZWF0ZVNoYWRl
ciggZ2wuRlJBR01FTlRfU0hBREVSICk7Ci0KLSAgICAgICAgICAgIGdsLnNoYWRlclNvdXJjZSgg
dmVydGV4U2hhZGVyLCBbCi0KLSAgICAgICAgICAgICAgICAncHJlY2lzaW9uICcgKyBjYXBhYmls
aXRpZXMucHJlY2lzaW9uICsgJyBmbG9hdDsnLAotCi0gICAgICAgICAgICAgICAgJyNkZWZpbmUg
U0hBREVSX05BTUUgJyArICdTcHJpdGVNYXRlcmlhbCcsCi0KLSAgICAgICAgICAgICAgICAndW5p
Zm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsnLAotICAgICAgICAgICAgICAgICd1bmlmb3JtIG1h
dDQgcHJvamVjdGlvbk1hdHJpeDsnLAotICAgICAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IHJv
dGF0aW9uOycsCi0gICAgICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMiBjZW50ZXI7JywKLSAgICAg
ICAgICAgICAgICAndW5pZm9ybSB2ZWMyIHNjYWxlOycsCi0gICAgICAgICAgICAgICAgJ3VuaWZv
cm0gdmVjMiB1dk9mZnNldDsnLAotICAgICAgICAgICAgICAgICd1bmlmb3JtIHZlYzIgdXZTY2Fs
ZTsnLAotCi0gICAgICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOycsCi0gICAg
ICAgICAgICAgICAgJ2F0dHJpYnV0ZSB2ZWMyIHV2OycsCi0KLSAgICAgICAgICAgICAgICAndmFy
eWluZyB2ZWMyIHZVVjsnLAotICAgICAgICAgICAgICAgICd2YXJ5aW5nIGZsb2F0IGZvZ0RlcHRo
OycsCi0KLSAgICAgICAgICAgICAgICAndm9pZCBtYWluKCkgeycsCi0KLSAgICAgICAgICAgICAg
ICAnICAgdlVWID0gdXZPZmZzZXQgKyB1diAqIHV2U2NhbGU7JywKLQotICAgICAgICAgICAgICAg
ICcgICB2ZWMyIGFsaWduZWRQb3NpdGlvbiA9ICggcG9zaXRpb24gLSBjZW50ZXIgKSAqIHNjYWxl
OycsCi0KLSAgICAgICAgICAgICAgICAnICAgdmVjMiByb3RhdGVkUG9zaXRpb247JywKLSAgICAg
ICAgICAgICAgICAnICAgcm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGln
bmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55OycsCi0g
ICAgICAgICAgICAgICAgJyAgIHJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICog
YWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTsn
LAotCi0gICAgICAgICAgICAgICAgJyAgIHZlYzQgbXZQb3NpdGlvbjsnLAotCi0gICAgICAgICAg
ICAgICAgJyAgIG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCAwLjAsIDAuMCwg
MC4wLCAxLjAgKTsnLAotICAgICAgICAgICAgICAgICcgICBtdlBvc2l0aW9uLnh5ICs9IHJvdGF0
ZWRQb3NpdGlvbjsnLAotCi0gICAgICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gcHJvamVj
dGlvbk1hdHJpeCAqIG12UG9zaXRpb247JywKLQotICAgICAgICAgICAgICAgICcgICBmb2dEZXB0
aCA9IC0gbXZQb3NpdGlvbi56OycsCi0KLSAgICAgICAgICAgICAgICAnfScKLQotICAgICAgICAg
ICAgXS5qb2luKCAnXG4nICkgKTsKLQotICAgICAgICAgICAgZ2wuc2hhZGVyU291cmNlKCBmcmFn
bWVudFNoYWRlciwgWwotCi0gICAgICAgICAgICAgICAgJ3ByZWNpc2lvbiAnICsgY2FwYWJpbGl0
aWVzLnByZWNpc2lvbiArICcgZmxvYXQ7JywKLQotICAgICAgICAgICAgICAgICcjZGVmaW5lIFNI
QURFUl9OQU1FICcgKyAnU3ByaXRlTWF0ZXJpYWwnLAotCi0gICAgICAgICAgICAgICAgJ3VuaWZv
cm0gdmVjMyBjb2xvcjsnLAotICAgICAgICAgICAgICAgICd1bmlmb3JtIHNhbXBsZXIyRCBtYXA7
JywKLSAgICAgICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBvcGFjaXR5OycsCi0KLSAgICAgICAg
ICAgICAgICAndW5pZm9ybSBpbnQgZm9nVHlwZTsnLAotICAgICAgICAgICAgICAgICd1bmlmb3Jt
IHZlYzMgZm9nQ29sb3I7JywKLSAgICAgICAgICAgICAgICAndW5pZm9ybSBmbG9hdCBmb2dEZW5z
aXR5OycsCi0gICAgICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgZm9nTmVhcjsnLAotICAgICAg
ICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZvZ0ZhcjsnLAotICAgICAgICAgICAgICAgICd1bmlm
b3JtIGZsb2F0IGFscGhhVGVzdDsnLAotCi0gICAgICAgICAgICAgICAgJ3ZhcnlpbmcgdmVjMiB2
VVY7JywKLSAgICAgICAgICAgICAgICAndmFyeWluZyBmbG9hdCBmb2dEZXB0aDsnLAotCi0gICAg
ICAgICAgICAgICAgJ3ZvaWQgbWFpbigpIHsnLAotCi0gICAgICAgICAgICAgICAgJyAgIHZlYzQg
dGV4dHVyZSA9IHRleHR1cmUyRCggbWFwLCB2VVYgKTsnLAotCi0gICAgICAgICAgICAgICAgJyAg
IGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yICogdGV4dHVyZS54eXosIHRleHR1cmUuYSAqIG9w
YWNpdHkgKTsnLAotCi0gICAgICAgICAgICAgICAgJyAgIGlmICggZ2xfRnJhZ0NvbG9yLmEgPCBh
bHBoYVRlc3QgKSBkaXNjYXJkOycsCi0KLSAgICAgICAgICAgICAgICAnICAgaWYgKCBmb2dUeXBl
ID4gMCApIHsnLAotCi0gICAgICAgICAgICAgICAgJyAgICAgICBmbG9hdCBmb2dGYWN0b3IgPSAw
LjA7JywKLQotICAgICAgICAgICAgICAgICcgICAgICAgaWYgKCBmb2dUeXBlID09IDEgKSB7JywK
LQotICAgICAgICAgICAgICAgICcgICAgICAgICAgIGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZv
Z05lYXIsIGZvZ0ZhciwgZm9nRGVwdGggKTsnLAotCi0gICAgICAgICAgICAgICAgJyAgICAgICB9
IGVsc2UgeycsCi0KLSAgICAgICAgICAgICAgICAnICAgICAgICAgICBjb25zdCBmbG9hdCBMT0cy
ID0gMS40NDI2OTU7JywKLSAgICAgICAgICAgICAgICAnICAgICAgICAgICBmb2dGYWN0b3IgPSBl
eHAyKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogZm9nRGVwdGggKiBmb2dEZXB0aCAqIExP
RzIgKTsnLAotICAgICAgICAgICAgICAgICcgICAgICAgICAgIGZvZ0ZhY3RvciA9IDEuMCAtIGNs
YW1wKCBmb2dGYWN0b3IsIDAuMCwgMS4wICk7JywKLQotICAgICAgICAgICAgICAgICcgICAgICAg
fScsCi0KLSAgICAgICAgICAgICAgICAnICAgICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGds
X0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTsnLAotCi0gICAgICAgICAgICAg
ICAgJyAgIH0nLAotCi0gICAgICAgICAgICAgICAgJ30nCi0KLSAgICAgICAgICAgIF0uam9pbigg
J1xuJyApICk7Ci0KLSAgICAgICAgICAgIGdsLmNvbXBpbGVTaGFkZXIoIHZlcnRleFNoYWRlciAp
OwotICAgICAgICAgICAgZ2wuY29tcGlsZVNoYWRlciggZnJhZ21lbnRTaGFkZXIgKTsKLQotICAg
ICAgICAgICAgZ2wuYXR0YWNoU2hhZGVyKCBwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIgKTsKLSAgICAg
ICAgICAgIGdsLmF0dGFjaFNoYWRlciggcHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIgKTsKLQotICAg
ICAgICAgICAgZ2wubGlua1Byb2dyYW0oIHByb2dyYW0gKTsKLQotICAgICAgICAgICAgcmV0dXJu
IHByb2dyYW07Ci0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHBhaW50ZXJTb3J0U3Rh
YmxlKCBhLCBiICkgewotCi0gICAgICAgICAgICBpZiAoIGEucmVuZGVyT3JkZXIgIT09IGIucmVu
ZGVyT3JkZXIgKSB7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gYS5yZW5kZXJPcmRlciAtIGIu
cmVuZGVyT3JkZXI7Ci0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIGEueiAhPT0gYi56ICkgewot
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGIueiAtIGEuejsKLQotICAgICAgICAgICAgfSBlbHNl
IHsKLQotICAgICAgICAgICAgICAgIHJldHVybiBiLmlkIC0gYS5pZDsKLQotICAgICAgICAgICAg
fQotCi0gICAgICAgIH0KLQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29i
IC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAgICovCi0KLSAgICBmdW5jdGlvbiBXZWJHTFN0YXRl
KCBnbCwgZXh0ZW5zaW9ucywgdXRpbHMgKSB7CisgICAgZnVuY3Rpb24gV2ViR0xTdGF0ZSggZ2ws
IGV4dGVuc2lvbnMsIHV0aWxzLCBjYXBhYmlsaXRpZXMgKSB7CiAKICAgICAgICAgZnVuY3Rpb24g
Q29sb3JCdWZmZXIoKSB7CiAKQEAgLTE5MjQzLDExICsxOTk1OSwxMSBAQAogCiAgICAgICAgICAg
ICAgICAgICAgIGlmICggZGVwdGhUZXN0ICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBl
bmFibGUoIGdsLkRFUFRIX1RFU1QgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZSgg
MjkyOSApOwogCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRpc2FibGUoIGdsLkRFUFRIX1RFU1QgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRpc2FibGUoIDI5MjkgKTsKIAogICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTE5Mjc0
LDUzICsxOTk5MCw1MyBAQAogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
TmV2ZXJEZXB0aDoKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZGVw
dGhGdW5jKCBnbC5ORVZFUiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2wuZGVwdGhGdW5jKCA1MTIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQWx3YXlzRGVw
dGg6CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmRlcHRoRnVuYygg
Z2wuQUxXQVlTICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbC5kZXB0
aEZ1bmMoIDUxOSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBMZXNzRGVwdGg6CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmRlcHRoRnVuYyggZ2wuTEVTUyAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZGVwdGhGdW5jKCA1MTMg
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTGVzc0VxdWFsRGVwdGg6CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmRlcHRoRnVuYyggZ2wuTEVRVUFMICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbC5kZXB0aEZ1bmMoIDUxNSApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBFcXVhbERlcHRoOgogCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbC5kZXB0aEZ1bmMoIGdsLkVRVUFMICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbC5kZXB0aEZ1bmMoIDUxNCApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBHcmVhdGVyRXF1YWxEZXB0aDoKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2wuZGVwdGhGdW5jKCBnbC5HRVFVQUwgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmRlcHRoRnVuYyggNTE4ICk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIEdyZWF0ZXJEZXB0aDoKIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2wuZGVwdGhGdW5jKCBnbC5HUkVBVEVSICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbC5kZXB0aEZ1bmMoIDUxNiApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBOb3RFcXVhbERlcHRoOgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbC5kZXB0aEZ1bmMoIGdsLk5PVEVRVUFMICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbC5kZXB0aEZ1bmMoIDUxNyApOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZGVw
dGhGdW5jKCBnbC5MRVFVQUwgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsLmRlcHRoRnVuYyggNTE1ICk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbC5kZXB0aEZ1bmMoIGdsLkxFUVVBTCApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsLmRlcHRoRnVuYyggNTE1ICk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
IApAQCAtMTkzODAsMTEgKzIwMDk2LDExIEBACiAKICAgICAgICAgICAgICAgICAgICAgaWYgKCBz
dGVuY2lsVGVzdCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlKCBnbC5TVEVO
Q0lMX1RFU1QgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZSggMjk2MCApOwogCiAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGRp
c2FibGUoIGdsLlNURU5DSUxfVEVTVCApOworICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJs
ZSggMjk2MCApOwogCiAgICAgICAgICAgICAgICAgICAgIH0KIApAQCAtMTk0NzUsMTcgKzIwMTkx
LDE4IEBACiAgICAgICAgIHZhciBkZXB0aEJ1ZmZlciA9IG5ldyBEZXB0aEJ1ZmZlcigpOwogICAg
ICAgICB2YXIgc3RlbmNpbEJ1ZmZlciA9IG5ldyBTdGVuY2lsQnVmZmVyKCk7CiAKLSAgICAgICAg
dmFyIG1heFZlcnRleEF0dHJpYnV0ZXMgPSBnbC5nZXRQYXJhbWV0ZXIoIGdsLk1BWF9WRVJURVhf
QVRUUklCUyApOworICAgICAgICB2YXIgbWF4VmVydGV4QXR0cmlidXRlcyA9IGdsLmdldFBhcmFt
ZXRlciggMzQ5MjEgKTsKICAgICAgICAgdmFyIG5ld0F0dHJpYnV0ZXMgPSBuZXcgVWludDhBcnJh
eSggbWF4VmVydGV4QXR0cmlidXRlcyApOwogICAgICAgICB2YXIgZW5hYmxlZEF0dHJpYnV0ZXMg
PSBuZXcgVWludDhBcnJheSggbWF4VmVydGV4QXR0cmlidXRlcyApOwogICAgICAgICB2YXIgYXR0
cmlidXRlRGl2aXNvcnMgPSBuZXcgVWludDhBcnJheSggbWF4VmVydGV4QXR0cmlidXRlcyApOwog
Ci0gICAgICAgIHZhciBjYXBhYmlsaXRpZXMgPSB7fTsKKyAgICAgICAgdmFyIGVuYWJsZWRDYXBh
YmlsaXRpZXMgPSB7fTsKIAogICAgICAgICB2YXIgY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0g
bnVsbDsKIAogICAgICAgICB2YXIgY3VycmVudFByb2dyYW0gPSBudWxsOwogCisgICAgICAgIHZh
ciBjdXJyZW50QmxlbmRpbmdFbmFibGVkID0gbnVsbDsKICAgICAgICAgdmFyIGN1cnJlbnRCbGVu
ZGluZyA9IG51bGw7CiAgICAgICAgIHZhciBjdXJyZW50QmxlbmRFcXVhdGlvbiA9IG51bGw7CiAg
ICAgICAgIHZhciBjdXJyZW50QmxlbmRTcmMgPSBudWxsOwpAQCAtMTk1MDMsMTEgKzIwMjIwLDEx
IEBACiAgICAgICAgIHZhciBjdXJyZW50UG9seWdvbk9mZnNldEZhY3RvciA9IG51bGw7CiAgICAg
ICAgIHZhciBjdXJyZW50UG9seWdvbk9mZnNldFVuaXRzID0gbnVsbDsKIAotICAgICAgICB2YXIg
bWF4VGV4dHVyZXMgPSBnbC5nZXRQYXJhbWV0ZXIoIGdsLk1BWF9DT01CSU5FRF9URVhUVVJFX0lN
QUdFX1VOSVRTICk7CisgICAgICAgIHZhciBtYXhUZXh0dXJlcyA9IGdsLmdldFBhcmFtZXRlcigg
MzU2NjEgKTsKIAogICAgICAgICB2YXIgbGluZVdpZHRoQXZhaWxhYmxlID0gZmFsc2U7CiAgICAg
ICAgIHZhciB2ZXJzaW9uID0gMDsKLSAgICAgICAgdmFyIGdsVmVyc2lvbiA9IGdsLmdldFBhcmFt
ZXRlciggZ2wuVkVSU0lPTiApOworICAgICAgICB2YXIgZ2xWZXJzaW9uID0gZ2wuZ2V0UGFyYW1l
dGVyKCA3OTM4ICk7CiAKICAgICAgICAgaWYgKCBnbFZlcnNpb24uaW5kZXhPZiggJ1dlYkdMJyAp
ICE9PSAtIDEgKSB7CiAKQEAgLTE5NTMzLDEyICsyMDI1MCwxMiBAQAogICAgICAgICAgICAgdmFy
IHRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7CiAKICAgICAgICAgICAgIGdsLmJpbmRUZXh0
dXJlKCB0eXBlLCB0ZXh0dXJlICk7Ci0gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKCB0eXBl
LCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGdsLk5FQVJFU1QgKTsKLSAgICAgICAgICAgIGdsLnRl
eFBhcmFtZXRlcmkoIHR5cGUsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTkVBUkVTVCApOwor
ICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaSggdHlwZSwgMTAyNDEsIDk3MjggKTsKKyAgICAg
ICAgICAgIGdsLnRleFBhcmFtZXRlcmkoIHR5cGUsIDEwMjQwLCA5NzI4ICk7CiAKICAgICAgICAg
ICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGNvdW50OyBpICsrICkgewogCi0gICAgICAgICAgICAg
ICAgZ2wudGV4SW1hZ2UyRCggdGFyZ2V0ICsgaSwgMCwgZ2wuUkdCQSwgMSwgMSwgMCwgZ2wuUkdC
QSwgZ2wuVU5TSUdORURfQllURSwgZGF0YSApOworICAgICAgICAgICAgICAgIGdsLnRleEltYWdl
MkQoIHRhcmdldCArIGksIDAsIDY0MDgsIDEsIDEsIDAsIDY0MDgsIDUxMjEsIGRhdGEgKTsKIAog
ICAgICAgICAgICAgfQogCkBAIC0xOTU0Nyw4ICsyMDI2NCw4IEBACiAgICAgICAgIH0KIAogICAg
ICAgICB2YXIgZW1wdHlUZXh0dXJlcyA9IHt9OwotICAgICAgICBlbXB0eVRleHR1cmVzWyBnbC5U
RVhUVVJFXzJEIF0gPSBjcmVhdGVUZXh0dXJlKCBnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFXzJE
LCAxICk7Ci0gICAgICAgIGVtcHR5VGV4dHVyZXNbIGdsLlRFWFRVUkVfQ1VCRV9NQVAgXSA9IGNy
ZWF0ZVRleHR1cmUoIGdsLlRFWFRVUkVfQ1VCRV9NQVAsIGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCwgNiApOworICAgICAgICBlbXB0eVRleHR1cmVzWyAzNTUzIF0gPSBjcmVhdGVUZXh0
dXJlKCAzNTUzLCAzNTUzLCAxICk7CisgICAgICAgIGVtcHR5VGV4dHVyZXNbIDM0MDY3IF0gPSBj
cmVhdGVUZXh0dXJlKCAzNDA2NywgMzQwNjksIDYgKTsKIAogICAgICAgICAvLyBpbml0CiAKQEAg
LTE5NTU2LDE1ICsyMDI3MywxNCBAQAogICAgICAgICBkZXB0aEJ1ZmZlci5zZXRDbGVhciggMSAp
OwogICAgICAgICBzdGVuY2lsQnVmZmVyLnNldENsZWFyKCAwICk7CiAKLSAgICAgICAgZW5hYmxl
KCBnbC5ERVBUSF9URVNUICk7CisgICAgICAgIGVuYWJsZSggMjkyOSApOwogICAgICAgICBkZXB0
aEJ1ZmZlci5zZXRGdW5jKCBMZXNzRXF1YWxEZXB0aCApOwogCiAgICAgICAgIHNldEZsaXBTaWRl
ZCggZmFsc2UgKTsKICAgICAgICAgc2V0Q3VsbEZhY2UoIEN1bGxGYWNlQmFjayApOwotICAgICAg
ICBlbmFibGUoIGdsLkNVTExfRkFDRSApOworICAgICAgICBlbmFibGUoIDI4ODQgKTsKIAotICAg
ICAgICBlbmFibGUoIGdsLkJMRU5EICk7Ci0gICAgICAgIHNldEJsZW5kaW5nKCBOb3JtYWxCbGVu
ZGluZyApOworICAgICAgICBzZXRCbGVuZGluZyggTm9CbGVuZGluZyApOwogCiAgICAgICAgIC8v
CiAKQEAgLTE5NTk3LDkgKzIwMzEzLDkgQEAKIAogICAgICAgICAgICAgaWYgKCBhdHRyaWJ1dGVE
aXZpc29yc1sgYXR0cmlidXRlIF0gIT09IG1lc2hQZXJBdHRyaWJ1dGUgKSB7CiAKLSAgICAgICAg
ICAgICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRf
YXJyYXlzJyApOworICAgICAgICAgICAgICAgIHZhciBleHRlbnNpb24gPSBjYXBhYmlsaXRpZXMu
aXNXZWJHTDIgPyBnbCA6IGV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycg
KTsKIAotICAgICAgICAgICAgICAgIGV4dGVuc2lvbi52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUo
IGF0dHJpYnV0ZSwgbWVzaFBlckF0dHJpYnV0ZSApOworICAgICAgICAgICAgICAgIGV4dGVuc2lv
blsgY2FwYWJpbGl0aWVzLmlzV2ViR0wyID8gJ3ZlcnRleEF0dHJpYkRpdmlzb3InIDogJ3ZlcnRl
eEF0dHJpYkRpdmlzb3JBTkdMRScgXSggYXR0cmlidXRlLCBtZXNoUGVyQXR0cmlidXRlICk7CiAg
ICAgICAgICAgICAgICAgYXR0cmlidXRlRGl2aXNvcnNbIGF0dHJpYnV0ZSBdID0gbWVzaFBlckF0
dHJpYnV0ZTsKIAogICAgICAgICAgICAgfQpAQCAtMTk2MjMsMTAgKzIwMzM5LDEwIEBACiAKICAg
ICAgICAgZnVuY3Rpb24gZW5hYmxlKCBpZCApIHsKIAotICAgICAgICAgICAgaWYgKCBjYXBhYmls
aXRpZXNbIGlkIF0gIT09IHRydWUgKSB7CisgICAgICAgICAgICBpZiAoIGVuYWJsZWRDYXBhYmls
aXRpZXNbIGlkIF0gIT09IHRydWUgKSB7CiAKICAgICAgICAgICAgICAgICBnbC5lbmFibGUoIGlk
ICk7Ci0gICAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzWyBpZCBdID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBlbmFibGVkQ2FwYWJpbGl0aWVzWyBpZCBdID0gdHJ1ZTsKIAogICAgICAgICAgICAg
fQogCkBAIC0xOTYzNCwxMCArMjAzNTAsMTAgQEAKIAogICAgICAgICBmdW5jdGlvbiBkaXNhYmxl
KCBpZCApIHsKIAotICAgICAgICAgICAgaWYgKCBjYXBhYmlsaXRpZXNbIGlkIF0gIT09IGZhbHNl
ICkgeworICAgICAgICAgICAgaWYgKCBlbmFibGVkQ2FwYWJpbGl0aWVzWyBpZCBdICE9PSBmYWxz
ZSApIHsKIAogICAgICAgICAgICAgICAgIGdsLmRpc2FibGUoIGlkICk7Ci0gICAgICAgICAgICAg
ICAgY2FwYWJpbGl0aWVzWyBpZCBdID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZW5hYmxlZENh
cGFiaWxpdGllc1sgaWQgXSA9IGZhbHNlOwogCiAgICAgICAgICAgICB9CiAKQEAgLTE5NjU0LDcg
KzIwMzcwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xf
Y29tcHJlc3NlZF90ZXh0dXJlX2V0YzEnICkgfHwKICAgICAgICAgICAgICAgICAgICAgIGV4dGVu
c2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMnICkgKSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIGZvcm1hdHMgPSBnbC5nZXRQYXJhbWV0ZXIoIGdsLkNPTVBSRVNT
RURfVEVYVFVSRV9GT1JNQVRTICk7CisgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtYXRzID0g
Z2wuZ2V0UGFyYW1ldGVyKCAzNDQ2NyApOwogCiAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZh
ciBpID0gMDsgaSA8IGZvcm1hdHMubGVuZ3RoOyBpICsrICkgewogCkBAIC0xOTY4OCwxMzAgKzIw
NDA0LDE0MyBAQAogCiAgICAgICAgIGZ1bmN0aW9uIHNldEJsZW5kaW5nKCBibGVuZGluZywgYmxl
bmRFcXVhdGlvbiwgYmxlbmRTcmMsIGJsZW5kRHN0LCBibGVuZEVxdWF0aW9uQWxwaGEsIGJsZW5k
U3JjQWxwaGEsIGJsZW5kRHN0QWxwaGEsIHByZW11bHRpcGxpZWRBbHBoYSApIHsKIAotICAgICAg
ICAgICAgaWYgKCBibGVuZGluZyAhPT0gTm9CbGVuZGluZyApIHsKKyAgICAgICAgICAgIGlmICgg
YmxlbmRpbmcgPT09IE5vQmxlbmRpbmcgKSB7CiAKLSAgICAgICAgICAgICAgICBlbmFibGUoIGds
LkJMRU5EICk7CisgICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50QmxlbmRpbmdFbmFibGVkICkg
ewogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkaXNhYmxlKCAz
MDQyICk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCbGVuZGluZ0VuYWJsZWQgPSBmYWxz
ZTsKIAotICAgICAgICAgICAgICAgIGRpc2FibGUoIGdsLkJMRU5EICk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGlmICggYmxlbmRpbmcgIT09IEN1c3RvbUJsZW5kaW5nICkgeworICAgICAgICAgICAg
aWYgKCAhIGN1cnJlbnRCbGVuZGluZ0VuYWJsZWQgKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAo
IGJsZW5kaW5nICE9PSBjdXJyZW50QmxlbmRpbmcgfHwgcHJlbXVsdGlwbGllZEFscGhhICE9PSBj
dXJyZW50UHJlbXVsdGlwbGVkQWxwaGEgKSB7CisgICAgICAgICAgICAgICAgZW5hYmxlKCAzMDQy
ICk7CisgICAgICAgICAgICAgICAgY3VycmVudEJsZW5kaW5nRW5hYmxlZCA9IHRydWU7CiAKLSAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoICggYmxlbmRpbmcgKSB7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQWRkaXRpdmVCbGVuZGluZzoKKyAgICAgICAg
ICAgIGlmICggYmxlbmRpbmcgIT09IEN1c3RvbUJsZW5kaW5nICkgewogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBwcmVtdWx0aXBsaWVkQWxwaGEgKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCBibGVuZGluZyAhPT0gY3VycmVudEJsZW5kaW5nIHx8IHByZW11bHRpcGxpZWRBbHBo
YSAhPT0gY3VycmVudFByZW11bHRpcGxlZEFscGhhICkgewogCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsLmJsZW5kRXF1YXRpb25TZXBhcmF0ZSggZ2wuRlVOQ19BREQsIGdsLkZV
TkNfQUREICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJsZW5kRnVuY1Nl
cGFyYXRlKCBnbC5PTkUsIGdsLk9ORSwgZ2wuT05FLCBnbC5PTkUgKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCBjdXJyZW50QmxlbmRFcXVhdGlvbiAhPT0gQWRkRXF1YXRpb24gfHwgY3VycmVu
dEJsZW5kRXF1YXRpb25BbHBoYSAhPT0gQWRkRXF1YXRpb24gKSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYmxlbmRF
cXVhdGlvbiggMzI3NzQgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbC5i
bGVuZEVxdWF0aW9uKCBnbC5GVU5DX0FERCApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbC5ibGVuZEZ1bmMoIGdsLlNSQ19BTFBIQSwgZ2wuT05FICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50QmxlbmRFcXVhdGlvbiA9IEFkZEVxdWF0aW9uOworICAgICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudEJsZW5kRXF1YXRpb25BbHBoYSA9IEFkZEVxdWF0aW9uOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgU3VidHJhY3RpdmVCbGVuZGluZzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBw
cmVtdWx0aXBsaWVkQWxwaGEgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHByZW11bHRpcGxpZWRBbHBoYSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
IGJsZW5kaW5nICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJsZW5k
RXF1YXRpb25TZXBhcmF0ZSggZ2wuRlVOQ19BREQsIGdsLkZVTkNfQUREICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsLmJsZW5kRnVuY1NlcGFyYXRlKCBnbC5aRVJPLCBnbC5a
RVJPLCBnbC5PTkVfTUlOVVNfU1JDX0NPTE9SLCBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBOb3JtYWxCbGVuZGluZzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYmxlbmRGdW5jU2VwYXJhdGUoIDEsIDc3MSwgMSwg
NzcxICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFkZGl0aXZlQmxlbmRpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsLmJsZW5kRnVuYyggMSwgMSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbC5ibGVuZEVxdWF0aW9u
KCBnbC5GVU5DX0FERCApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbC5ibGVu
ZEZ1bmMoIGdsLlpFUk8sIGdsLk9ORV9NSU5VU19TUkNfQ09MT1IgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIFN1YnRyYWN0aXZlQmxlbmRpbmc6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsLmJsZW5kRnVuY1NlcGFyYXRlKCAwLCAwLCA3NjksIDc3MSApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE11bHRpcGx5QmxlbmRpbmc6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsLmJsZW5kRnVuY1NlcGFyYXRlKCAwLCA3NjgsIDAsIDc3
MCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBNdWx0aXBseUJsZW5kaW5nOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNv
bGUuZXJyb3IoICdUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAnLCBibGVuZGlu
ZyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggcHJlbXVsdGlwbGllZEFscGhhICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJs
ZW5kRXF1YXRpb25TZXBhcmF0ZSggZ2wuRlVOQ19BREQsIGdsLkZVTkNfQUREICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJsZW5kRnVuY1NlcGFyYXRlKCBnbC5aRVJPLCBn
bC5TUkNfQ09MT1IsIGdsLlpFUk8sIGdsLlNSQ19BTFBIQSApOworICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoIGJsZW5kaW5nICkgewogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsLmJsZW5kRXF1YXRpb24oIGdsLkZVTkNfQUREICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJsZW5kRnVuYyggZ2wuWkVSTywgZ2wuU1JD
X0NPTE9SICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBOb3JtYWxCbGVuZGlu
ZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYmxlbmRGdW5jU2VwYXJhdGUo
IDc3MCwgNzcxLCAxLCA3NzEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBZGRpdGl2
ZUJsZW5kaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbC5ibGVuZEZ1bmMo
IDc3MCwgMSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIFN1YnRyYWN0aXZlQmxlbmRpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsLmJsZW5kRnVuYyggMCwgNzY5ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwcmVtdWx0aXBs
aWVkQWxwaGEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aXBseUJs
ZW5kaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbC5ibGVuZEZ1bmMoIDAs
IDc2OCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbC5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoIGdsLkZV
TkNfQURELCBnbC5GVU5DX0FERCApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bC5ibGVuZEZ1bmNTZXBhcmF0ZSggZ2wuT05FLCBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBLCBnbC5P
TkUsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9y
KCAnVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogJywgYmxlbmRpbmcgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJsZW5kRXF1YXRpb25TZXBhcmF0ZSggZ2wuRlVO
Q19BREQsIGdsLkZVTkNfQUREICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
LmJsZW5kRnVuY1NlcGFyYXRlKCBnbC5TUkNfQUxQSEEsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEEs
IGdsLk9ORSwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSApOworICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRCbGVuZFNyYyA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCbGVuZERz
dCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCbGVuZFNyY0FscGhhID0gbnVs
bDsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEJsZW5kRHN0QWxwaGEgPSBudWxsOwogCi0g
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEJsZW5kaW5n
ID0gYmxlbmRpbmc7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQcmVtdWx0aXBsZWRBbHBo
YSA9IHByZW11bHRpcGxpZWRBbHBoYTsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIGN1cnJlbnRCbGVuZEVxdWF0aW9uID0gbnVsbDsKLSAgICAgICAgICAgICAgICBjdXJy
ZW50QmxlbmRTcmMgPSBudWxsOwotICAgICAgICAgICAgICAgIGN1cnJlbnRCbGVuZERzdCA9IG51
bGw7Ci0gICAgICAgICAgICAgICAgY3VycmVudEJsZW5kRXF1YXRpb25BbHBoYSA9IG51bGw7Ci0g
ICAgICAgICAgICAgICAgY3VycmVudEJsZW5kU3JjQWxwaGEgPSBudWxsOwotICAgICAgICAgICAg
ICAgIGN1cnJlbnRCbGVuZERzdEFscGhhID0gbnVsbDsKKyAgICAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBibGVuZEVxdWF0aW9uQWxwaGEgPSBibGVuZEVxdWF0aW9uQWxwaGEgfHwgYmxlbmRFcXVhdGlv
bjsKLSAgICAgICAgICAgICAgICBibGVuZFNyY0FscGhhID0gYmxlbmRTcmNBbHBoYSB8fCBibGVu
ZFNyYzsKLSAgICAgICAgICAgICAgICBibGVuZERzdEFscGhhID0gYmxlbmREc3RBbHBoYSB8fCBi
bGVuZERzdDsKKyAgICAgICAgICAgIC8vIGN1c3RvbSBibGVuZGluZwogCi0gICAgICAgICAgICAg
ICAgaWYgKCBibGVuZEVxdWF0aW9uICE9PSBjdXJyZW50QmxlbmRFcXVhdGlvbiB8fCBibGVuZEVx
dWF0aW9uQWxwaGEgIT09IGN1cnJlbnRCbGVuZEVxdWF0aW9uQWxwaGEgKSB7CisgICAgICAgICAg
ICBibGVuZEVxdWF0aW9uQWxwaGEgPSBibGVuZEVxdWF0aW9uQWxwaGEgfHwgYmxlbmRFcXVhdGlv
bjsKKyAgICAgICAgICAgIGJsZW5kU3JjQWxwaGEgPSBibGVuZFNyY0FscGhhIHx8IGJsZW5kU3Jj
OworICAgICAgICAgICAgYmxlbmREc3RBbHBoYSA9IGJsZW5kRHN0QWxwaGEgfHwgYmxlbmREc3Q7
CiAKLSAgICAgICAgICAgICAgICAgICAgZ2wuYmxlbmRFcXVhdGlvblNlcGFyYXRlKCB1dGlscy5j
b252ZXJ0KCBibGVuZEVxdWF0aW9uICksIHV0aWxzLmNvbnZlcnQoIGJsZW5kRXF1YXRpb25BbHBo
YSApICk7CisgICAgICAgICAgICBpZiAoIGJsZW5kRXF1YXRpb24gIT09IGN1cnJlbnRCbGVuZEVx
dWF0aW9uIHx8IGJsZW5kRXF1YXRpb25BbHBoYSAhPT0gY3VycmVudEJsZW5kRXF1YXRpb25BbHBo
YSApIHsKIAotICAgICAgICAgICAgICAgICAgICBjdXJyZW50QmxlbmRFcXVhdGlvbiA9IGJsZW5k
RXF1YXRpb247Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCbGVuZEVxdWF0aW9uQWxwaGEg
PSBibGVuZEVxdWF0aW9uQWxwaGE7CisgICAgICAgICAgICAgICAgZ2wuYmxlbmRFcXVhdGlvblNl
cGFyYXRlKCB1dGlscy5jb252ZXJ0KCBibGVuZEVxdWF0aW9uICksIHV0aWxzLmNvbnZlcnQoIGJs
ZW5kRXF1YXRpb25BbHBoYSApICk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgY3VycmVudEJsZW5kRXF1YXRpb24gPSBibGVuZEVxdWF0aW9uOworICAgICAgICAgICAgICAg
IGN1cnJlbnRCbGVuZEVxdWF0aW9uQWxwaGEgPSBibGVuZEVxdWF0aW9uQWxwaGE7CiAKLSAgICAg
ICAgICAgICAgICBpZiAoIGJsZW5kU3JjICE9PSBjdXJyZW50QmxlbmRTcmMgfHwgYmxlbmREc3Qg
IT09IGN1cnJlbnRCbGVuZERzdCB8fCBibGVuZFNyY0FscGhhICE9PSBjdXJyZW50QmxlbmRTcmNB
bHBoYSB8fCBibGVuZERzdEFscGhhICE9PSBjdXJyZW50QmxlbmREc3RBbHBoYSApIHsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBnbC5ibGVuZEZ1bmNTZXBhcmF0ZSggdXRp
bHMuY29udmVydCggYmxlbmRTcmMgKSwgdXRpbHMuY29udmVydCggYmxlbmREc3QgKSwgdXRpbHMu
Y29udmVydCggYmxlbmRTcmNBbHBoYSApLCB1dGlscy5jb252ZXJ0KCBibGVuZERzdEFscGhhICkg
KTsKKyAgICAgICAgICAgIGlmICggYmxlbmRTcmMgIT09IGN1cnJlbnRCbGVuZFNyYyB8fCBibGVu
ZERzdCAhPT0gY3VycmVudEJsZW5kRHN0IHx8IGJsZW5kU3JjQWxwaGEgIT09IGN1cnJlbnRCbGVu
ZFNyY0FscGhhIHx8IGJsZW5kRHN0QWxwaGEgIT09IGN1cnJlbnRCbGVuZERzdEFscGhhICkgewog
Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCbGVuZFNyYyA9IGJsZW5kU3JjOwotICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50QmxlbmREc3QgPSBibGVuZERzdDsKLSAgICAgICAgICAgICAg
ICAgICAgY3VycmVudEJsZW5kU3JjQWxwaGEgPSBibGVuZFNyY0FscGhhOwotICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50QmxlbmREc3RBbHBoYSA9IGJsZW5kRHN0QWxwaGE7CisgICAgICAgICAg
ICAgICAgZ2wuYmxlbmRGdW5jU2VwYXJhdGUoIHV0aWxzLmNvbnZlcnQoIGJsZW5kU3JjICksIHV0
aWxzLmNvbnZlcnQoIGJsZW5kRHN0ICksIHV0aWxzLmNvbnZlcnQoIGJsZW5kU3JjQWxwaGEgKSwg
dXRpbHMuY29udmVydCggYmxlbmREc3RBbHBoYSApICk7CiAKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgY3VycmVudEJsZW5kU3JjID0gYmxlbmRTcmM7CisgICAgICAgICAgICAg
ICAgY3VycmVudEJsZW5kRHN0ID0gYmxlbmREc3Q7CisgICAgICAgICAgICAgICAgY3VycmVudEJs
ZW5kU3JjQWxwaGEgPSBibGVuZFNyY0FscGhhOworICAgICAgICAgICAgICAgIGN1cnJlbnRCbGVu
ZERzdEFscGhhID0gYmxlbmREc3RBbHBoYTsKIAogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBjdXJyZW50QmxlbmRpbmcgPSBibGVuZGluZzsKLSAgICAgICAgICAgIGN1cnJlbnRQcmVtdWx0
aXBsZWRBbHBoYSA9IHByZW11bHRpcGxpZWRBbHBoYTsKKyAgICAgICAgICAgIGN1cnJlbnRQcmVt
dWx0aXBsZWRBbHBoYSA9IG51bGw7CiAKICAgICAgICAgfQogCiAgICAgICAgIGZ1bmN0aW9uIHNl
dE1hdGVyaWFsKCBtYXRlcmlhbCwgZnJvbnRGYWNlQ1cgKSB7CiAKICAgICAgICAgICAgIG1hdGVy
aWFsLnNpZGUgPT09IERvdWJsZVNpZGUKLSAgICAgICAgICAgICAgICA/IGRpc2FibGUoIGdsLkNV
TExfRkFDRSApCi0gICAgICAgICAgICAgICAgOiBlbmFibGUoIGdsLkNVTExfRkFDRSApOworICAg
ICAgICAgICAgICAgID8gZGlzYWJsZSggMjg4NCApCisgICAgICAgICAgICAgICAgOiBlbmFibGUo
IDI4ODQgKTsKIAogICAgICAgICAgICAgdmFyIGZsaXBTaWRlZCA9ICggbWF0ZXJpYWwuc2lkZSA9
PT0gQmFja1NpZGUgKTsKICAgICAgICAgICAgIGlmICggZnJvbnRGYWNlQ1cgKSBmbGlwU2lkZWQg
PSAhIGZsaXBTaWRlZDsKQEAgLTE5ODM5LDExICsyMDU2OCwxMSBAQAogCiAgICAgICAgICAgICAg
ICAgaWYgKCBmbGlwU2lkZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgZ2wuZnJvbnRGYWNl
KCBnbC5DVyApOworICAgICAgICAgICAgICAgICAgICBnbC5mcm9udEZhY2UoIDIzMDQgKTsKIAog
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICAgICAgZ2wuZnJvbnRG
YWNlKCBnbC5DQ1cgKTsKKyAgICAgICAgICAgICAgICAgICAgZ2wuZnJvbnRGYWNlKCAyMzA1ICk7
CiAKICAgICAgICAgICAgICAgICB9CiAKQEAgLTE5ODU3LDIxICsyMDU4NiwyMSBAQAogCiAgICAg
ICAgICAgICBpZiAoIGN1bGxGYWNlICE9PSBDdWxsRmFjZU5vbmUgKSB7CiAKLSAgICAgICAgICAg
ICAgICBlbmFibGUoIGdsLkNVTExfRkFDRSApOworICAgICAgICAgICAgICAgIGVuYWJsZSggMjg4
NCApOwogCiAgICAgICAgICAgICAgICAgaWYgKCBjdWxsRmFjZSAhPT0gY3VycmVudEN1bGxGYWNl
ICkgewogCiAgICAgICAgICAgICAgICAgICAgIGlmICggY3VsbEZhY2UgPT09IEN1bGxGYWNlQmFj
ayApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgZ2wuY3VsbEZhY2UoIGdsLkJBQ0sgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGdsLmN1bGxGYWNlKCAxMDI5ICk7CiAKICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICggY3VsbEZhY2UgPT09IEN1bGxGYWNlRnJvbnQgKSB7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgIGdsLmN1bGxGYWNlKCBnbC5GUk9OVCApOworICAgICAg
ICAgICAgICAgICAgICAgICAgZ2wuY3VsbEZhY2UoIDEwMjggKTsKIAogICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBnbC5jdWxsRmFjZSggZ2wu
RlJPTlRfQU5EX0JBQ0sgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsLmN1bGxGYWNlKCAx
MDMyICk7CiAKICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0xOTg3OSw3ICsyMDYwOCw3IEBA
CiAKICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICBkaXNhYmxlKCBnbC5D
VUxMX0ZBQ0UgKTsKKyAgICAgICAgICAgICAgICBkaXNhYmxlKCAyODg0ICk7CiAKICAgICAgICAg
ICAgIH0KIApAQCAtMTk5MDMsNyArMjA2MzIsNyBAQAogCiAgICAgICAgICAgICBpZiAoIHBvbHln
b25PZmZzZXQgKSB7CiAKLSAgICAgICAgICAgICAgICBlbmFibGUoIGdsLlBPTFlHT05fT0ZGU0VU
X0ZJTEwgKTsKKyAgICAgICAgICAgICAgICBlbmFibGUoIDMyODIzICk7CiAKICAgICAgICAgICAg
ICAgICBpZiAoIGN1cnJlbnRQb2x5Z29uT2Zmc2V0RmFjdG9yICE9PSBmYWN0b3IgfHwgY3VycmVu
dFBvbHlnb25PZmZzZXRVbml0cyAhPT0gdW5pdHMgKSB7CiAKQEAgLTE5OTE2LDcgKzIwNjQ1LDcg
QEAKIAogICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgIGRpc2FibGUoIGds
LlBPTFlHT05fT0ZGU0VUX0ZJTEwgKTsKKyAgICAgICAgICAgICAgICBkaXNhYmxlKCAzMjgyMyAp
OwogCiAgICAgICAgICAgICB9CiAKQEAgLTE5OTI2LDExICsyMDY1NSwxMSBAQAogCiAgICAgICAg
ICAgICBpZiAoIHNjaXNzb3JUZXN0ICkgewogCi0gICAgICAgICAgICAgICAgZW5hYmxlKCBnbC5T
Q0lTU09SX1RFU1QgKTsKKyAgICAgICAgICAgICAgICBlbmFibGUoIDMwODkgKTsKIAogICAgICAg
ICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgIGRpc2FibGUoIGdsLlNDSVNTT1JfVEVT
VCApOworICAgICAgICAgICAgICAgIGRpc2FibGUoIDMwODkgKTsKIAogICAgICAgICAgICAgfQog
CkBAIC0xOTk0MCw3ICsyMDY2OSw3IEBACiAKICAgICAgICAgZnVuY3Rpb24gYWN0aXZlVGV4dHVy
ZSggd2ViZ2xTbG90ICkgewogCi0gICAgICAgICAgICBpZiAoIHdlYmdsU2xvdCA9PT0gdW5kZWZp
bmVkICkgd2ViZ2xTbG90ID0gZ2wuVEVYVFVSRTAgKyBtYXhUZXh0dXJlcyAtIDE7CisgICAgICAg
ICAgICBpZiAoIHdlYmdsU2xvdCA9PT0gdW5kZWZpbmVkICkgd2ViZ2xTbG90ID0gMzM5ODQgKyBt
YXhUZXh0dXJlcyAtIDE7CiAKICAgICAgICAgICAgIGlmICggY3VycmVudFRleHR1cmVTbG90ICE9
PSB3ZWJnbFNsb3QgKSB7CiAKQEAgLTIwMDA3LDYgKzIwNzM2LDIwIEBACiAKICAgICAgICAgfQog
CisgICAgICAgIGZ1bmN0aW9uIHRleEltYWdlM0QoKSB7CisKKyAgICAgICAgICAgIHRyeSB7CisK
KyAgICAgICAgICAgICAgICBnbC50ZXhJbWFnZTNELmFwcGx5KCBnbCwgYXJndW1lbnRzICk7CisK
KyAgICAgICAgICAgIH0gY2F0Y2ggKCBlcnJvciApIHsKKworICAgICAgICAgICAgICAgIGNvbnNv
bGUuZXJyb3IoICdUSFJFRS5XZWJHTFN0YXRlOicsIGVycm9yICk7CisKKyAgICAgICAgICAgIH0K
KworICAgICAgICB9CisKICAgICAgICAgLy8KIAogICAgICAgICBmdW5jdGlvbiBzY2lzc29yKCBz
Y2lzc29yICkgewpAQCAtMjAwNDYsNyArMjA3ODksNyBAQAogCiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGNhcGFiaWxpdGllcyA9IHt9OworICAgICAgICAgICAgZW5hYmxlZENhcGFiaWxp
dGllcyA9IHt9OwogCiAgICAgICAgICAgICBjb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgPSBudWxs
OwogCkBAIC0yMDA5OSw2ICsyMDg0Miw3IEBACiAgICAgICAgICAgICBiaW5kVGV4dHVyZTogYmlu
ZFRleHR1cmUsCiAgICAgICAgICAgICBjb21wcmVzc2VkVGV4SW1hZ2UyRDogY29tcHJlc3NlZFRl
eEltYWdlMkQsCiAgICAgICAgICAgICB0ZXhJbWFnZTJEOiB0ZXhJbWFnZTJELAorICAgICAgICAg
ICAgdGV4SW1hZ2UzRDogdGV4SW1hZ2UzRCwKIAogICAgICAgICAgICAgc2Npc3Nvcjogc2Npc3Nv
ciwKICAgICAgICAgICAgIHZpZXdwb3J0OiB2aWV3cG9ydCwKQEAgLTIwMTE1LDY2ICsyMDg1OSw3
NyBAQAogCiAgICAgZnVuY3Rpb24gV2ViR0xUZXh0dXJlcyggX2dsLCBleHRlbnNpb25zLCBzdGF0
ZSwgcHJvcGVydGllcywgY2FwYWJpbGl0aWVzLCB1dGlscywgaW5mbyApIHsKIAotICAgICAgICB2
YXIgX2lzV2ViR0wyID0gKCB0eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCAhPT0gJ3VuZGVm
aW5lZCcgJiYgX2dsIGluc3RhbmNlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCApOyAvKiBnbG9i
YWwgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCAqLwogICAgICAgICB2YXIgX3ZpZGVvVGV4dHVyZXMg
PSB7fTsKICAgICAgICAgdmFyIF9jYW52YXM7CiAKICAgICAgICAgLy8KIAotICAgICAgICBmdW5j
dGlvbiBjbGFtcFRvTWF4U2l6ZSggaW1hZ2UsIG1heFNpemUgKSB7CisgICAgICAgIHZhciB1c2VP
ZmZzY3JlZW5DYW52YXMgPSBmYWxzZTsgLy8gdHlwZW9mIE9mZnNjcmVlbkNhbnZhcyAhPT0gJ3Vu
ZGVmaW5lZCc7IC8vIFNNRlIKIAotICAgICAgICAgICAgaWYgKCBpbWFnZS53aWR0aCA+IG1heFNp
emUgfHwgaW1hZ2UuaGVpZ2h0ID4gbWF4U2l6ZSApIHsKKyAgICAgICAgZnVuY3Rpb24gY3JlYXRl
Q2FudmFzKCB3aWR0aCwgaGVpZ2h0ICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCAnZGF0YScg
aW4gaW1hZ2UgKSB7CisgICAgICAgICAgICAvLyBVc2UgT2Zmc2NyZWVuQ2FudmFzIHdoZW4gYXZh
aWxhYmxlLiBTcGVjaWFsbHkgbmVlZGVkIGluIHdlYiB3b3JrZXJzCiAKLSAgICAgICAgICAgICAg
ICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogaW1hZ2UgaW4gRGF0YVRl
eHR1cmUgaXMgdG9vIGJpZyAoJyArIGltYWdlLndpZHRoICsgJ3gnICsgaW1hZ2UuaGVpZ2h0ICsg
JykuJyApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4g
dXNlT2Zmc2NyZWVuQ2FudmFzID8KKyAgICAgICAgICAgICAgICBuZXcgT2Zmc2NyZWVuQ2FudmFz
KCB3aWR0aCwgaGVpZ2h0ICkgOgorICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnROUyggJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLCAnY2FudmFzJyApOwogCi0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gV2FybmluZzogU2NhbGluZyB0aHJv
dWdoIHRoZSBjYW52YXMgd2lsbCBvbmx5IHdvcmsgd2l0aCBpbWFnZXMgdGhhdCB1c2UKLSAgICAg
ICAgICAgICAgICAvLyBwcmVtdWx0aXBsaWVkIGFscGhhLgorICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICB2YXIgc2NhbGUgPSBtYXhTaXplIC8gTWF0aC5tYXgoIGltYWdlLndpZHRoLCBpbWFn
ZS5oZWlnaHQgKTsKKyAgICAgICAgZnVuY3Rpb24gcmVzaXplSW1hZ2UoIGltYWdlLCBuZWVkc1Bv
d2VyT2ZUd28sIG5lZWRzTmV3Q2FudmFzLCBtYXhTaXplICkgewogCi0gICAgICAgICAgICAgICAg
dmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggJ2h0dHA6Ly93d3cudzMub3Jn
LzE5OTkveGh0bWwnLCAnY2FudmFzJyApOwotICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9
IE1hdGguZmxvb3IoIGltYWdlLndpZHRoICogc2NhbGUgKTsKLSAgICAgICAgICAgICAgICBjYW52
YXMuaGVpZ2h0ID0gTWF0aC5mbG9vciggaW1hZ2UuaGVpZ2h0ICogc2NhbGUgKTsKKyAgICAgICAg
ICAgIHZhciBzY2FsZSA9IDE7CiAKLSAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZh
cy5nZXRDb250ZXh0KCAnMmQnICk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2Uo
IGltYWdlLCAwLCAwLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCAwLCAwLCBjYW52YXMud2lk
dGgsIGNhbnZhcy5oZWlnaHQgKTsKKyAgICAgICAgICAgIC8vIGhhbmRsZSBjYXNlIGlmIHRleHR1
cmUgZXhjZWVkcyBtYXggc2l6ZQogCi0gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhS
RUUuV2ViR0xSZW5kZXJlcjogaW1hZ2UgaXMgdG9vIGJpZyAoJyArIGltYWdlLndpZHRoICsgJ3gn
ICsgaW1hZ2UuaGVpZ2h0ICsgJykuIFJlc2l6ZWQgdG8gJyArIGNhbnZhcy53aWR0aCArICd4JyAr
IGNhbnZhcy5oZWlnaHQsIGltYWdlICk7CisgICAgICAgICAgICBpZiAoIGltYWdlLndpZHRoID4g
bWF4U2l6ZSB8fCBpbWFnZS5oZWlnaHQgPiBtYXhTaXplICkgewogCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGNhbnZhczsKKyAgICAgICAgICAgICAgICBzY2FsZSA9IG1heFNpemUgLyBNYXRoLm1h
eCggaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCApOwogCiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIHJldHVybiBpbWFnZTsKKyAgICAgICAgICAgIC8vIG9ubHkgcGVyZm9ybSByZXNpemUg
aWYgbmVjZXNzYXJ5CiAKLSAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBzY2FsZSA8IDEgfHwg
bmVlZHNQb3dlck9mVHdvID09PSB0cnVlICkgewogCi0gICAgICAgIGZ1bmN0aW9uIGlzUG93ZXJP
ZlR3byggaW1hZ2UgKSB7CisgICAgICAgICAgICAgICAgLy8gb25seSBwZXJmb3JtIHJlc2l6ZSBm
b3IgY2VydGFpbiBpbWFnZSB0eXBlcwogCi0gICAgICAgICAgICByZXR1cm4gX01hdGguaXNQb3dl
ck9mVHdvKCBpbWFnZS53aWR0aCApICYmIF9NYXRoLmlzUG93ZXJPZlR3byggaW1hZ2UuaGVpZ2h0
ICk7CisgICAgICAgICAgICAgICAgaWYgKCAoIHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50ICE9PSAn
dW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgKSB8fAorICAg
ICAgICAgICAgICAgICAgICAoIHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCAhPT0gJ3VuZGVmaW5l
ZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCApIHx8CisgICAgICAgICAg
ICAgICAgICAgICggdHlwZW9mIEltYWdlQml0bWFwICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBp
bnN0YW5jZW9mIEltYWdlQml0bWFwICkgKSB7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB2YXIgZmxvb3IgPSBuZWVkc1Bvd2VyT2ZUd28gPyBfTWF0aC5mbG9vclBvd2VyT2ZUd28g
OiBNYXRoLmZsb29yOwogCi0gICAgICAgIGZ1bmN0aW9uIG1ha2VQb3dlck9mVHdvKCBpbWFnZSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gZmxvb3IoIHNjYWxlICogaW1hZ2Uu
d2lkdGggKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGZsb29yKCBzY2FsZSAq
IGltYWdlLmhlaWdodCApOwogCi0gICAgICAgICAgICBpZiAoIGltYWdlIGluc3RhbmNlb2YgSFRN
TEltYWdlRWxlbWVudCB8fCBpbWFnZSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50IHx8IGlt
YWdlIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXAgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgg
X2NhbnZhcyA9PT0gdW5kZWZpbmVkICkgX2NhbnZhcyA9IGNyZWF0ZUNhbnZhcyggd2lkdGgsIGhl
aWdodCApOwogCi0gICAgICAgICAgICAgICAgaWYgKCBfY2FudmFzID09PSB1bmRlZmluZWQgKSBf
Y2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCAnaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCcsICdjYW52YXMnICk7CisgICAgICAgICAgICAgICAgICAgIC8vIGN1YmUgdGV4dHVy
ZXMgY2FuJ3QgcmV1c2UgdGhlIHNhbWUgY2FudmFzCiAKLSAgICAgICAgICAgICAgICBfY2FudmFz
LndpZHRoID0gX01hdGguZmxvb3JQb3dlck9mVHdvKCBpbWFnZS53aWR0aCApOwotICAgICAgICAg
ICAgICAgIF9jYW52YXMuaGVpZ2h0ID0gX01hdGguZmxvb3JQb3dlck9mVHdvKCBpbWFnZS5oZWln
aHQgKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhcyA9IG5lZWRzTmV3Q2FudmFzID8g
Y3JlYXRlQ2FudmFzKCB3aWR0aCwgaGVpZ2h0ICkgOiBfY2FudmFzOwogCi0gICAgICAgICAgICAg
ICAgdmFyIGNvbnRleHQgPSBfY2FudmFzLmdldENvbnRleHQoICcyZCcgKTsKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LmRyYXdJbWFnZSggaW1hZ2UsIDAsIDAsIF9jYW52YXMud2lkdGgsIF9jYW52
YXMuaGVpZ2h0ICk7CisgICAgICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoOwor
ICAgICAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0OworCisgICAgICAgICAg
ICAgICAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoIGltYWdlLCAwLCAwLCB3aWR0aCwgaGVp
Z2h0ICk7CiAKLSAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRl
cmVyOiBpbWFnZSBpcyBub3QgcG93ZXIgb2YgdHdvICgnICsgaW1hZ2Uud2lkdGggKyAneCcgKyBp
bWFnZS5oZWlnaHQgKyAnKS4gUmVzaXplZCB0byAnICsgX2NhbnZhcy53aWR0aCArICd4JyArIF9j
YW52YXMuaGVpZ2h0LCBpbWFnZSApOworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4o
ICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGhhcyBiZWVuIHJlc2l6ZWQgZnJvbSAoJyAr
IGltYWdlLndpZHRoICsgJ3gnICsgaW1hZ2UuaGVpZ2h0ICsgJykgdG8gKCcgKyB3aWR0aCArICd4
JyArIGhlaWdodCArICcpLicgKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiBfY2FudmFzOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FudmFzOworCisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKworICAgICAgICAgICAgICAgICAgICBpZiAoICdkYXRhJyBpbiBpbWFnZSApIHsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJl
cjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoJyArIGltYWdlLndpZHRoICsgJ3gn
ICsgaW1hZ2UuaGVpZ2h0ICsgJykuJyApOworCisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2U7CisKKyAgICAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIH0KIApAQCAtMjAxODIsMTYgKzIwOTM3LDI0IEBACiAKICAgICAgICAgfQogCisg
ICAgICAgIGZ1bmN0aW9uIGlzUG93ZXJPZlR3byggaW1hZ2UgKSB7CisKKyAgICAgICAgICAgIHJl
dHVybiBfTWF0aC5pc1Bvd2VyT2ZUd28oIGltYWdlLndpZHRoICkgJiYgX01hdGguaXNQb3dlck9m
VHdvKCBpbWFnZS5oZWlnaHQgKTsKKworICAgICAgICB9CisKICAgICAgICAgZnVuY3Rpb24gdGV4
dHVyZU5lZWRzUG93ZXJPZlR3byggdGV4dHVyZSApIHsKIAorICAgICAgICAgICAgaWYgKCBjYXBh
YmlsaXRpZXMuaXNXZWJHTDIgKSByZXR1cm4gZmFsc2U7CisKICAgICAgICAgICAgIHJldHVybiAo
IHRleHR1cmUud3JhcFMgIT09IENsYW1wVG9FZGdlV3JhcHBpbmcgfHwgdGV4dHVyZS53cmFwVCAh
PT0gQ2xhbXBUb0VkZ2VXcmFwcGluZyApIHx8CiAgICAgICAgICAgICAgICAgKCB0ZXh0dXJlLm1p
bkZpbHRlciAhPT0gTmVhcmVzdEZpbHRlciAmJiB0ZXh0dXJlLm1pbkZpbHRlciAhPT0gTGluZWFy
RmlsdGVyICk7CiAKICAgICAgICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIHRleHR1cmVOZWVkc0dl
bmVyYXRlTWlwbWFwcyggdGV4dHVyZSwgaXNQb3dlck9mVHdvICkgeworICAgICAgICBmdW5jdGlv
biB0ZXh0dXJlTmVlZHNHZW5lcmF0ZU1pcG1hcHMoIHRleHR1cmUsIHN1cHBvcnRzTWlwcyApIHsK
IAotICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzICYmIGlzUG93ZXJP
ZlR3byAmJgorICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzICYmIHN1
cHBvcnRzTWlwcyAmJgogICAgICAgICAgICAgICAgIHRleHR1cmUubWluRmlsdGVyICE9PSBOZWFy
ZXN0RmlsdGVyICYmIHRleHR1cmUubWluRmlsdGVyICE9PSBMaW5lYXJGaWx0ZXI7CiAKICAgICAg
ICAgfQpAQCAtMjAyMDcsMTcgKzIwOTcwLDYyIEBACiAKICAgICAgICAgfQogCisgICAgICAgIGZ1
bmN0aW9uIGdldEludGVybmFsRm9ybWF0KCBnbEZvcm1hdCwgZ2xUeXBlICkgeworCisgICAgICAg
ICAgICBpZiAoICEgY2FwYWJpbGl0aWVzLmlzV2ViR0wyICkgcmV0dXJuIGdsRm9ybWF0OworCisg
ICAgICAgICAgICB2YXIgaW50ZXJuYWxGb3JtYXQgPSBnbEZvcm1hdDsKKworICAgICAgICAgICAg
aWYgKCBnbEZvcm1hdCA9PT0gNjQwMyApIHsKKworICAgICAgICAgICAgICAgIGlmICggZ2xUeXBl
ID09PSA1MTI2ICkgaW50ZXJuYWxGb3JtYXQgPSAzMzMyNjsKKyAgICAgICAgICAgICAgICBpZiAo
IGdsVHlwZSA9PT0gNTEzMSApIGludGVybmFsRm9ybWF0ID0gMzMzMjU7CisgICAgICAgICAgICAg
ICAgaWYgKCBnbFR5cGUgPT09IDUxMjEgKSBpbnRlcm5hbEZvcm1hdCA9IDMzMzIxOworCisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggZ2xGb3JtYXQgPT09IDY0MDcgKSB7CisKKyAg
ICAgICAgICAgICAgICBpZiAoIGdsVHlwZSA9PT0gNTEyNiApIGludGVybmFsRm9ybWF0ID0gMzQ4
Mzc7CisgICAgICAgICAgICAgICAgaWYgKCBnbFR5cGUgPT09IDUxMzEgKSBpbnRlcm5hbEZvcm1h
dCA9IDM0ODQzOworICAgICAgICAgICAgICAgIGlmICggZ2xUeXBlID09PSA1MTIxICkgaW50ZXJu
YWxGb3JtYXQgPSAzMjg0OTsKKworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGds
Rm9ybWF0ID09PSA2NDA4ICkgeworCisgICAgICAgICAgICAgICAgaWYgKCBnbFR5cGUgPT09IDUx
MjYgKSBpbnRlcm5hbEZvcm1hdCA9IDM0ODM2OworICAgICAgICAgICAgICAgIGlmICggZ2xUeXBl
ID09PSA1MTMxICkgaW50ZXJuYWxGb3JtYXQgPSAzNDg0MjsKKyAgICAgICAgICAgICAgICBpZiAo
IGdsVHlwZSA9PT0gNTEyMSApIGludGVybmFsRm9ybWF0ID0gMzI4NTY7CisKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCBpbnRlcm5hbEZvcm1hdCA9PT0gMzMzMjUgfHwgaW50ZXJu
YWxGb3JtYXQgPT09IDMzMzI2IHx8CisgICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPT09
IDM0ODQyIHx8IGludGVybmFsRm9ybWF0ID09PSAzNDgzNiApIHsKKworICAgICAgICAgICAgICAg
IGV4dGVuc2lvbnMuZ2V0KCAnRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCcgKTsKKworICAgICAgICAg
ICAgfSBlbHNlIGlmICggaW50ZXJuYWxGb3JtYXQgPT09IDM0ODQzIHx8IGludGVybmFsRm9ybWF0
ID09PSAzNDgzNyApIHsKKworICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldl
YkdMUmVuZGVyZXI6IEZsb2F0aW5nIHBvaW50IHRleHR1cmVzIHdpdGggUkdCIGZvcm1hdCBub3Qg
c3VwcG9ydGVkLiBQbGVhc2UgdXNlIFJHQkEgaW5zdGVhZC4nICk7CisKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0OworCisgICAgICAgIH0KKwogICAg
ICAgICAvLyBGYWxsYmFjayBmaWx0ZXJzIGZvciBub24tcG93ZXItb2YtMiB0ZXh0dXJlcwogCiAg
ICAgICAgIGZ1bmN0aW9uIGZpbHRlckZhbGxiYWNrKCBmICkgewogCiAgICAgICAgICAgICBpZiAo
IGYgPT09IE5lYXJlc3RGaWx0ZXIgfHwgZiA9PT0gTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXIg
fHwgZiA9PT0gTmVhcmVzdE1pcE1hcExpbmVhckZpbHRlciApIHsKIAotICAgICAgICAgICAgICAg
IHJldHVybiBfZ2wuTkVBUkVTVDsKKyAgICAgICAgICAgICAgICByZXR1cm4gOTcyODsKIAogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gX2dsLkxJTkVBUjsKKyAgICAgICAgICAg
IHJldHVybiA5NzI5OwogCiAgICAgICAgIH0KIApAQCAtMjAyNTksMjMgKzIxMDY3LDEwIEBACiAK
ICAgICAgICAgICAgIHZhciB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCB0ZXh0
dXJlICk7CiAKLSAgICAgICAgICAgIGlmICggdGV4dHVyZS5pbWFnZSAmJiB0ZXh0dXJlUHJvcGVy
dGllcy5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlICkgewotCi0gICAgICAgICAgICAgICAgLy8g
Y3ViZSB0ZXh0dXJlCi0KLSAgICAgICAgICAgICAgICBfZ2wuZGVsZXRlVGV4dHVyZSggdGV4dHVy
ZVByb3BlcnRpZXMuX19pbWFnZV9fd2ViZ2xUZXh0dXJlQ3ViZSApOwotCi0gICAgICAgICAgICB9
IGVsc2UgewotCi0gICAgICAgICAgICAgICAgLy8gMkQgdGV4dHVyZQotCi0gICAgICAgICAgICAg
ICAgaWYgKCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsSW5pdCA9PT0gdW5kZWZpbmVkICkgcmV0
dXJuOworICAgICAgICAgICAgaWYgKCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsSW5pdCA9PT0g
dW5kZWZpbmVkICkgcmV0dXJuOwogCi0gICAgICAgICAgICAgICAgX2dsLmRlbGV0ZVRleHR1cmUo
IHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlICk7Ci0KLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIF9nbC5kZWxldGVUZXh0dXJlKCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4
dHVyZSApOwogCi0gICAgICAgICAgICAvLyByZW1vdmUgYWxsIHdlYmdsIHByb3BlcnRpZXMKICAg
ICAgICAgICAgIHByb3BlcnRpZXMucmVtb3ZlKCB0ZXh0dXJlICk7CiAKICAgICAgICAgfQpAQCAt
MjAzMjIsNyArMjExMTcsMzEgQEAKIAogICAgICAgICAvLwogCisgICAgICAgIHZhciB0ZXh0dXJl
VW5pdHMgPSAwOwogCisgICAgICAgIGZ1bmN0aW9uIHJlc2V0VGV4dHVyZVVuaXRzKCkgeworCisg
ICAgICAgICAgICB0ZXh0dXJlVW5pdHMgPSAwOworCisgICAgICAgIH0KKworICAgICAgICBmdW5j
dGlvbiBhbGxvY2F0ZVRleHR1cmVVbml0KCkgeworCisgICAgICAgICAgICB2YXIgdGV4dHVyZVVu
aXQgPSB0ZXh0dXJlVW5pdHM7CisKKyAgICAgICAgICAgIGlmICggdGV4dHVyZVVuaXQgPj0gY2Fw
YWJpbGl0aWVzLm1heFRleHR1cmVzICkgeworCisgICAgICAgICAgICAgICAgY29uc29sZS53YXJu
KCAnVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAnICsgdGV4dHVyZVVuaXQgKyAn
IHRleHR1cmUgdW5pdHMgd2hpbGUgdGhpcyBHUFUgc3VwcG9ydHMgb25seSAnICsgY2FwYWJpbGl0
aWVzLm1heFRleHR1cmVzICk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGV4dHVy
ZVVuaXRzICs9IDE7CisKKyAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlVW5pdDsKKworICAgICAg
ICB9CisKKyAgICAgICAgLy8KIAogICAgICAgICBmdW5jdGlvbiBzZXRUZXh0dXJlMkQoIHRleHR1
cmUsIHNsb3QgKSB7CiAKQEAgLTIwMzM2LDExICsyMTE1NSwxMSBAQAogCiAgICAgICAgICAgICAg
ICAgaWYgKCBpbWFnZSA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgICAgIGNv
bnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRh
dGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCcsIHRleHR1cmUgKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9y
IHVwZGF0ZSBidXQgaW1hZ2UgaXMgdW5kZWZpbmVkJyApOwogCiAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICggaW1hZ2UuY29tcGxldGUgPT09IGZhbHNlICkgewogCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZv
ciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUnLCB0ZXh0dXJlICk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFy
a2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUnICk7CiAKICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogCkBAIC0yMDM1MSwzMyArMjExNzAsNTcgQEAKIAogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBzdGF0ZS5hY3RpdmVUZXh0dXJlKCBfZ2wuVEVYVFVSRTAgKyBzbG90
ICk7Ci0gICAgICAgICAgICBzdGF0ZS5iaW5kVGV4dHVyZSggX2dsLlRFWFRVUkVfMkQsIHRleHR1
cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlICk7CisgICAgICAgICAgICBzdGF0ZS5hY3RpdmVU
ZXh0dXJlKCAzMzk4NCArIHNsb3QgKTsKKyAgICAgICAgICAgIHN0YXRlLmJpbmRUZXh0dXJlKCAz
NTUzLCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSApOwogCiAgICAgICAgIH0KIAot
ICAgICAgICBmdW5jdGlvbiBzZXRUZXh0dXJlQ3ViZSggdGV4dHVyZSwgc2xvdCApIHsKKyAgICAg
ICAgZnVuY3Rpb24gc2V0VGV4dHVyZTJEQXJyYXkoIHRleHR1cmUsIHNsb3QgKSB7CiAKICAgICAg
ICAgICAgIHZhciB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCB0ZXh0dXJlICk7
CiAKLSAgICAgICAgICAgIGlmICggdGV4dHVyZS5pbWFnZS5sZW5ndGggPT09IDYgKSB7CisgICAg
ICAgICAgICBpZiAoIHRleHR1cmUudmVyc2lvbiA+IDAgJiYgdGV4dHVyZVByb3BlcnRpZXMuX192
ZXJzaW9uICE9PSB0ZXh0dXJlLnZlcnNpb24gKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHRl
eHR1cmUudmVyc2lvbiA+IDAgJiYgdGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uICE9PSB0ZXh0
dXJlLnZlcnNpb24gKSB7CisgICAgICAgICAgICAgICAgdXBsb2FkVGV4dHVyZSggdGV4dHVyZVBy
b3BlcnRpZXMsIHRleHR1cmUsIHNsb3QgKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhIHRleHR1cmVQcm9wZXJ0aWVzLl9faW1hZ2VfX3dlYmds
VGV4dHVyZUN1YmUgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUuYWRkRXZlbnRMaXN0ZW5lciggJ2Rpc3Bvc2UnLCBvblRleHR1cmVEaXNwb3NlICk7
CisgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUZXh0dXJlKCAzMzk4NCArIHNsb3QgKTsKKyAgICAg
ICAgICAgIHN0YXRlLmJpbmRUZXh0dXJlKCAzNTg2NiwgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJn
bFRleHR1cmUgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb3BlcnRpZXMu
X19pbWFnZV9fd2ViZ2xUZXh0dXJlQ3ViZSA9IF9nbC5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5tZW1vcnkudGV4dHVyZXMgKys7Cisg
ICAgICAgIGZ1bmN0aW9uIHNldFRleHR1cmUzRCggdGV4dHVyZSwgc2xvdCApIHsKIAotICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgdGV4dHVyZVByb3BlcnRpZXMgPSBwcm9w
ZXJ0aWVzLmdldCggdGV4dHVyZSApOworCisgICAgICAgICAgICBpZiAoIHRleHR1cmUudmVyc2lv
biA+IDAgJiYgdGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uICE9PSB0ZXh0dXJlLnZlcnNpb24g
KSB7CisKKyAgICAgICAgICAgICAgICB1cGxvYWRUZXh0dXJlKCB0ZXh0dXJlUHJvcGVydGllcywg
dGV4dHVyZSwgc2xvdCApOworICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUZXh0dXJlKCAzMzk4NCArIHNsb3QgKTsKKyAg
ICAgICAgICAgIHN0YXRlLmJpbmRUZXh0dXJlKCAzMjg3OSwgdGV4dHVyZVByb3BlcnRpZXMuX193
ZWJnbFRleHR1cmUgKTsKKworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc2V0VGV4dHVy
ZUN1YmUoIHRleHR1cmUsIHNsb3QgKSB7CisKKyAgICAgICAgICAgIHZhciB0ZXh0dXJlUHJvcGVy
dGllcyA9IHByb3BlcnRpZXMuZ2V0KCB0ZXh0dXJlICk7CisKKyAgICAgICAgICAgIGlmICggdGV4
dHVyZS5pbWFnZS5sZW5ndGggPT09IDYgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUu
YWN0aXZlVGV4dHVyZSggX2dsLlRFWFRVUkUwICsgc2xvdCApOwotICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5iaW5kVGV4dHVyZSggX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRleHR1cmVQcm9wZXJ0
aWVzLl9faW1hZ2VfX3dlYmdsVGV4dHVyZUN1YmUgKTsKKyAgICAgICAgICAgICAgICBpZiAoIHRl
eHR1cmUudmVyc2lvbiA+IDAgJiYgdGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uICE9PSB0ZXh0
dXJlLnZlcnNpb24gKSB7CisKKyAgICAgICAgICAgICAgICAgICAgaW5pdFRleHR1cmUoIHRleHR1
cmVQcm9wZXJ0aWVzLCB0ZXh0dXJlICk7CisKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0
aXZlVGV4dHVyZSggMzM5ODQgKyBzbG90ICk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmJp
bmRUZXh0dXJlKCAzNDA2NywgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgKTsKIAot
ICAgICAgICAgICAgICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoIF9nbC5VTlBBQ0tfRkxJUF9ZX1dF
QkdMLCB0ZXh0dXJlLmZsaXBZICk7CisgICAgICAgICAgICAgICAgICAgIF9nbC5waXhlbFN0b3Jl
aSggMzc0NDAsIHRleHR1cmUuZmxpcFkgKTsKIAogICAgICAgICAgICAgICAgICAgICB2YXIgaXND
b21wcmVzc2VkID0gKCB0ZXh0dXJlICYmIHRleHR1cmUuaXNDb21wcmVzc2VkVGV4dHVyZSApOwog
ICAgICAgICAgICAgICAgICAgICB2YXIgaXNEYXRhVGV4dHVyZSA9ICggdGV4dHVyZS5pbWFnZVsg
MCBdICYmIHRleHR1cmUuaW1hZ2VbIDAgXS5pc0RhdGFUZXh0dXJlICk7CkBAIC0yMDM4OCw3ICsy
MTIzMSw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISBpc0NvbXByZXNzZWQg
JiYgISBpc0RhdGFUZXh0dXJlICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vi
ZUltYWdlWyBpIF0gPSBjbGFtcFRvTWF4U2l6ZSggdGV4dHVyZS5pbWFnZVsgaSBdLCBjYXBhYmls
aXRpZXMubWF4Q3ViZW1hcFNpemUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdWJl
SW1hZ2VbIGkgXSA9IHJlc2l6ZUltYWdlKCB0ZXh0dXJlLmltYWdlWyBpIF0sIGZhbHNlLCB0cnVl
LCBjYXBhYmlsaXRpZXMubWF4Q3ViZW1hcFNpemUgKTsKIAogICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKIApAQCAtMjAzOTksMTEgKzIxMjQyLDEyIEBACiAgICAgICAgICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBjdWJlSW1hZ2VbIDAgXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlzUG93ZXJPZlR3b0ltYWdlID0gaXNQb3dlck9mVHdv
KCBpbWFnZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHNNaXBzID0gaXNQb3dl
ck9mVHdvKCBpbWFnZSApIHx8IGNhcGFiaWxpdGllcy5pc1dlYkdMMiwKICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsRm9ybWF0ID0gdXRpbHMuY29udmVydCggdGV4dHVyZS5mb3JtYXQgKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGdsVHlwZSA9IHV0aWxzLmNvbnZlcnQoIHRleHR1cmUudHlw
ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgZ2xUeXBlID0gdXRpbHMuY29udmVydCggdGV4
dHVyZS50eXBlICksCisgICAgICAgICAgICAgICAgICAgICAgICBnbEludGVybmFsRm9ybWF0ID0g
Z2V0SW50ZXJuYWxGb3JtYXQoIGdsRm9ybWF0LCBnbFR5cGUgKTsKIAotICAgICAgICAgICAgICAg
ICAgICBzZXRUZXh0dXJlUGFyYW1ldGVycyggX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRleHR1cmUs
IGlzUG93ZXJPZlR3b0ltYWdlICk7CisgICAgICAgICAgICAgICAgICAgIHNldFRleHR1cmVQYXJh
bWV0ZXJzKCAzNDA2NywgdGV4dHVyZSwgc3VwcG9ydHNNaXBzICk7CiAKICAgICAgICAgICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgNjsgaSArKyApIHsKIApAQCAtMjA0MTEsMTEgKzIx
MjU1LDExIEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzRGF0YVRleHR1
cmUgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUudGV4SW1hZ2Uy
RCggX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIDAsIGdsRm9ybWF0LCBjdWJl
SW1hZ2VbIGkgXS53aWR0aCwgY3ViZUltYWdlWyBpIF0uaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xU
eXBlLCBjdWJlSW1hZ2VbIGkgXS5kYXRhICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRlLnRleEltYWdlMkQoIDM0MDY5ICsgaSwgMCwgZ2xJbnRlcm5hbEZvcm1hdCwgY3Vi
ZUltYWdlWyBpIF0ud2lkdGgsIGN1YmVJbWFnZVsgaSBdLmhlaWdodCwgMCwgZ2xGb3JtYXQsIGds
VHlwZSwgY3ViZUltYWdlWyBpIF0uZGF0YSApOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS50ZXhJ
bWFnZTJEKCBfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSwgMCwgZ2xGb3JtYXQs
IGdsRm9ybWF0LCBnbFR5cGUsIGN1YmVJbWFnZVsgaSBdICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLnRleEltYWdlMkQoIDM0MDY5ICsgaSwgMCwgZ2xJbnRlcm5hbEZv
cm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgY3ViZUltYWdlWyBpIF0gKTsKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KIApAQCAtMjA0MzEsNyArMjEyNzUsNyBAQAogCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YXRlLmdldENvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0cygpLmluZGV4T2YoIGdsRm9ybWF0ICkgPiAtIDEgKSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCggX2ds
LlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIGosIGdsRm9ybWF0LCBtaXBtYXAud2lk
dGgsIG1pcG1hcC5oZWlnaHQsIDAsIG1pcG1hcC5kYXRhICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29tcHJlc3NlZFRleEltYWdlMkQoIDM0MDY5ICsg
aSwgaiwgZ2xJbnRlcm5hbEZvcm1hdCwgbWlwbWFwLndpZHRoLCBtaXBtYXAuaGVpZ2h0LCAwLCBt
aXBtYXAuZGF0YSApOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogCkBAIC0yMDQ0MSw3ICsyMTI4NSw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUudGV4SW1hZ2UyRCggX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIGos
IGdsRm9ybWF0LCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5
cGUsIG1pcG1hcC5kYXRhICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZS50ZXhJbWFnZTJEKCAzNDA2OSArIGksIGosIGdsSW50ZXJuYWxGb3JtYXQsIG1pcG1hcC53
aWR0aCwgbWlwbWFwLmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwLmRhdGEgKTsK
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTIwNDYxLDEwICsyMTMw
NSwxMCBAQAogCiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBp
ZiAoIHRleHR1cmVOZWVkc0dlbmVyYXRlTWlwbWFwcyggdGV4dHVyZSwgaXNQb3dlck9mVHdvSW1h
Z2UgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0ZXh0dXJlTmVlZHNHZW5lcmF0ZU1p
cG1hcHMoIHRleHR1cmUsIHN1cHBvcnRzTWlwcyApICkgewogCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBhc3N1bWUgaW1hZ2VzIGZvciBjdWJlIG1hcCBoYXZlIHRoZSBzYW1lIHNpemUu
Ci0gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZU1pcG1hcCggX2dsLlRFWFRVUkVfQ1VC
RV9NQVAsIHRleHR1cmUsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGdlbmVyYXRlTWlwbWFwKCAzNDA2NywgdGV4dHVyZSwgaW1hZ2Uud2lkdGgs
IGltYWdlLmhlaWdodCApOwogCiAgICAgICAgICAgICAgICAgICAgIH0KIApAQCAtMjA0NzQsOCAr
MjEzMTgsOCBAQAogCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5hY3RpdmVUZXh0dXJlKCBfZ2wuVEVYVFVSRTAgKyBzbG90ICk7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0YXRlLmJpbmRUZXh0dXJlKCBfZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGV4
dHVyZVByb3BlcnRpZXMuX19pbWFnZV9fd2ViZ2xUZXh0dXJlQ3ViZSApOworICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5hY3RpdmVUZXh0dXJlKCAzMzk4NCArIHNsb3QgKTsKKyAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuYmluZFRleHR1cmUoIDM0MDY3LCB0ZXh0dXJlUHJvcGVydGllcy5fX3dl
YmdsVGV4dHVyZSApOwogCiAgICAgICAgICAgICAgICAgfQogCkBAIC0yMDQ4NSw0MCArMjEzMjks
NTIgQEAKIAogICAgICAgICBmdW5jdGlvbiBzZXRUZXh0dXJlQ3ViZUR5bmFtaWMoIHRleHR1cmUs
IHNsb3QgKSB7CiAKLSAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRleHR1cmUoIF9nbC5URVhUVVJF
MCArIHNsb3QgKTsKLSAgICAgICAgICAgIHN0YXRlLmJpbmRUZXh0dXJlKCBfZ2wuVEVYVFVSRV9D
VUJFX01BUCwgcHJvcGVydGllcy5nZXQoIHRleHR1cmUgKS5fX3dlYmdsVGV4dHVyZSApOworICAg
ICAgICAgICAgc3RhdGUuYWN0aXZlVGV4dHVyZSggMzM5ODQgKyBzbG90ICk7CisgICAgICAgICAg
ICBzdGF0ZS5iaW5kVGV4dHVyZSggMzQwNjcsIHByb3BlcnRpZXMuZ2V0KCB0ZXh0dXJlICkuX193
ZWJnbFRleHR1cmUgKTsKIAogICAgICAgICB9CiAKLSAgICAgICAgZnVuY3Rpb24gc2V0VGV4dHVy
ZVBhcmFtZXRlcnMoIHRleHR1cmVUeXBlLCB0ZXh0dXJlLCBpc1Bvd2VyT2ZUd29JbWFnZSApIHsK
KyAgICAgICAgZnVuY3Rpb24gc2V0VGV4dHVyZVBhcmFtZXRlcnMoIHRleHR1cmVUeXBlLCB0ZXh0
dXJlLCBzdXBwb3J0c01pcHMgKSB7CiAKICAgICAgICAgICAgIHZhciBleHRlbnNpb247CiAKLSAg
ICAgICAgICAgIGlmICggaXNQb3dlck9mVHdvSW1hZ2UgKSB7CisgICAgICAgICAgICBpZiAoIHN1
cHBvcnRzTWlwcyApIHsKKworICAgICAgICAgICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKCB0ZXh0
dXJlVHlwZSwgMTAyNDIsIHV0aWxzLmNvbnZlcnQoIHRleHR1cmUud3JhcFMgKSApOworICAgICAg
ICAgICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKCB0ZXh0dXJlVHlwZSwgMTAyNDMsIHV0aWxzLmNv
bnZlcnQoIHRleHR1cmUud3JhcFQgKSApOwogCi0gICAgICAgICAgICAgICAgX2dsLnRleFBhcmFt
ZXRlcmkoIHRleHR1cmVUeXBlLCBfZ2wuVEVYVFVSRV9XUkFQX1MsIHV0aWxzLmNvbnZlcnQoIHRl
eHR1cmUud3JhcFMgKSApOwotICAgICAgICAgICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKCB0ZXh0
dXJlVHlwZSwgX2dsLlRFWFRVUkVfV1JBUF9ULCB1dGlscy5jb252ZXJ0KCB0ZXh0dXJlLndyYXBU
ICkgKTsKKyAgICAgICAgICAgICAgICBpZiAoIHRleHR1cmVUeXBlID09PSAzMjg3OSB8fCB0ZXh0
dXJlVHlwZSA9PT0gMzU4NjYgKSB7CiAKLSAgICAgICAgICAgICAgICBfZ2wudGV4UGFyYW1ldGVy
aSggdGV4dHVyZVR5cGUsIF9nbC5URVhUVVJFX01BR19GSUxURVIsIHV0aWxzLmNvbnZlcnQoIHRl
eHR1cmUubWFnRmlsdGVyICkgKTsKLSAgICAgICAgICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaSgg
dGV4dHVyZVR5cGUsIF9nbC5URVhUVVJFX01JTl9GSUxURVIsIHV0aWxzLmNvbnZlcnQoIHRleHR1
cmUubWluRmlsdGVyICkgKTsKKyAgICAgICAgICAgICAgICAgICAgX2dsLnRleFBhcmFtZXRlcmko
IHRleHR1cmVUeXBlLCAzMjg4MiwgdXRpbHMuY29udmVydCggdGV4dHVyZS53cmFwUiApICk7CisK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaSgg
dGV4dHVyZVR5cGUsIDEwMjQwLCB1dGlscy5jb252ZXJ0KCB0ZXh0dXJlLm1hZ0ZpbHRlciApICk7
CisgICAgICAgICAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoIHRleHR1cmVUeXBlLCAxMDI0MSwg
dXRpbHMuY29udmVydCggdGV4dHVyZS5taW5GaWx0ZXIgKSApOwogCiAgICAgICAgICAgICB9IGVs
c2UgewogCi0gICAgICAgICAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoIHRleHR1cmVUeXBlLCBf
Z2wuVEVYVFVSRV9XUkFQX1MsIF9nbC5DTEFNUF9UT19FREdFICk7Ci0gICAgICAgICAgICAgICAg
X2dsLnRleFBhcmFtZXRlcmkoIHRleHR1cmVUeXBlLCBfZ2wuVEVYVFVSRV9XUkFQX1QsIF9nbC5D
TEFNUF9UT19FREdFICk7CisgICAgICAgICAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoIHRleHR1
cmVUeXBlLCAxMDI0MiwgMzMwNzEgKTsKKyAgICAgICAgICAgICAgICBfZ2wudGV4UGFyYW1ldGVy
aSggdGV4dHVyZVR5cGUsIDEwMjQzLCAzMzA3MSApOworCisgICAgICAgICAgICAgICAgaWYgKCB0
ZXh0dXJlVHlwZSA9PT0gMzI4NzkgfHwgdGV4dHVyZVR5cGUgPT09IDM1ODY2ICkgeworCisgICAg
ICAgICAgICAgICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKCB0ZXh0dXJlVHlwZSwgMzI4ODIsIDMz
MDcxICk7CisKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoIHRleHR1
cmUud3JhcFMgIT09IENsYW1wVG9FZGdlV3JhcHBpbmcgfHwgdGV4dHVyZS53cmFwVCAhPT0gQ2xh
bXBUb0VkZ2VXcmFwcGluZyApIHsKIAotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4o
ICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1
cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRv
RWRnZVdyYXBwaW5nLicsIHRleHR1cmUgKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS53
YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBU
ZXh0dXJlLndyYXBTIGFuZCBUZXh0dXJlLndyYXBUIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuQ2xh
bXBUb0VkZ2VXcmFwcGluZy4nICk7CiAKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBfZ2wudGV4UGFyYW1ldGVyaSggdGV4dHVyZVR5cGUsIF9nbC5URVhUVVJFX01BR19GSUxU
RVIsIGZpbHRlckZhbGxiYWNrKCB0ZXh0dXJlLm1hZ0ZpbHRlciApICk7Ci0gICAgICAgICAgICAg
ICAgX2dsLnRleFBhcmFtZXRlcmkoIHRleHR1cmVUeXBlLCBfZ2wuVEVYVFVSRV9NSU5fRklMVEVS
LCBmaWx0ZXJGYWxsYmFjayggdGV4dHVyZS5taW5GaWx0ZXIgKSApOworICAgICAgICAgICAgICAg
IF9nbC50ZXhQYXJhbWV0ZXJpKCB0ZXh0dXJlVHlwZSwgMTAyNDAsIGZpbHRlckZhbGxiYWNrKCB0
ZXh0dXJlLm1hZ0ZpbHRlciApICk7CisgICAgICAgICAgICAgICAgX2dsLnRleFBhcmFtZXRlcmko
IHRleHR1cmVUeXBlLCAxMDI0MSwgZmlsdGVyRmFsbGJhY2soIHRleHR1cmUubWluRmlsdGVyICkg
KTsKIAogICAgICAgICAgICAgICAgIGlmICggdGV4dHVyZS5taW5GaWx0ZXIgIT09IE5lYXJlc3RG
aWx0ZXIgJiYgdGV4dHVyZS5taW5GaWx0ZXIgIT09IExpbmVhckZpbHRlciApIHsKIAotICAgICAg
ICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJl
IGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUubWluRmlsdGVyIHNob3VsZCBiZSBzZXQgdG8g
VEhSRUUuTmVhcmVzdEZpbHRlciBvciBUSFJFRS5MaW5lYXJGaWx0ZXIuJywgdGV4dHVyZSApOwor
ICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBU
ZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUubWluRmlsdGVyIHNob3VsZCBiZSBz
ZXQgdG8gVEhSRUUuTmVhcmVzdEZpbHRlciBvciBUSFJFRS5MaW5lYXJGaWx0ZXIuJyApOwogCiAg
ICAgICAgICAgICAgICAgfQogCkBAIC0yMDUyOSw3ICsyMTM4NSw3IEBACiAgICAgICAgICAgICBp
ZiAoIGV4dGVuc2lvbiApIHsKIAogICAgICAgICAgICAgICAgIGlmICggdGV4dHVyZS50eXBlID09
PSBGbG9hdFR5cGUgJiYgZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIn
ICkgPT09IG51bGwgKSByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKCB0ZXh0dXJlLnR5cGUg
PT09IEhhbGZGbG9hdFR5cGUgJiYgZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9oYWxmX2Zs
b2F0X2xpbmVhcicgKSA9PT0gbnVsbCApIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoIHRl
eHR1cmUudHlwZSA9PT0gSGFsZkZsb2F0VHlwZSAmJiAoIGNhcGFiaWxpdGllcy5pc1dlYkdMMiB8
fCBleHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyJyApICkgPT09
IG51bGwgKSByZXR1cm47CiAKICAgICAgICAgICAgICAgICBpZiAoIHRleHR1cmUuYW5pc290cm9w
eSA+IDEgfHwgcHJvcGVydGllcy5nZXQoIHRleHR1cmUgKS5fX2N1cnJlbnRBbmlzb3Ryb3B5ICkg
ewogCkBAIC0yMDU0Miw3ICsyMTM5OCw3IEBACiAKICAgICAgICAgfQogCi0gICAgICAgIGZ1bmN0
aW9uIHVwbG9hZFRleHR1cmUoIHRleHR1cmVQcm9wZXJ0aWVzLCB0ZXh0dXJlLCBzbG90ICkgewor
ICAgICAgICBmdW5jdGlvbiBpbml0VGV4dHVyZSggdGV4dHVyZVByb3BlcnRpZXMsIHRleHR1cmUg
KSB7CiAKICAgICAgICAgICAgIGlmICggdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbEluaXQgPT09
IHVuZGVmaW5lZCApIHsKIApAQCAtMjA1NTYsMjYgKzIxNDEyLDMzIEBACiAKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGV4dHVyZSggX2dsLlRFWFRVUkUwICsgc2xv
dCApOwotICAgICAgICAgICAgc3RhdGUuYmluZFRleHR1cmUoIF9nbC5URVhUVVJFXzJELCB0ZXh0
dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSApOworICAgICAgICB9CiAKLSAgICAgICAgICAg
IF9nbC5waXhlbFN0b3JlaSggX2dsLlVOUEFDS19GTElQX1lfV0VCR0wsIHRleHR1cmUuZmxpcFkg
KTsKLSAgICAgICAgICAgIF9nbC5waXhlbFN0b3JlaSggX2dsLlVOUEFDS19QUkVNVUxUSVBMWV9B
TFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBseUFscGhhICk7Ci0gICAgICAgICAgICBfZ2wu
cGl4ZWxTdG9yZWkoIF9nbC5VTlBBQ0tfQUxJR05NRU5ULCB0ZXh0dXJlLnVucGFja0FsaWdubWVu
dCApOworICAgICAgICBmdW5jdGlvbiB1cGxvYWRUZXh0dXJlKCB0ZXh0dXJlUHJvcGVydGllcywg
dGV4dHVyZSwgc2xvdCApIHsKIAotICAgICAgICAgICAgdmFyIGltYWdlID0gY2xhbXBUb01heFNp
emUoIHRleHR1cmUuaW1hZ2UsIGNhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSApOworICAgICAg
ICAgICAgdmFyIHRleHR1cmVUeXBlID0gMzU1MzsKIAotICAgICAgICAgICAgaWYgKCB0ZXh0dXJl
TmVlZHNQb3dlck9mVHdvKCB0ZXh0dXJlICkgJiYgaXNQb3dlck9mVHdvKCBpbWFnZSApID09PSBm
YWxzZSApIHsKKyAgICAgICAgICAgIGlmICggdGV4dHVyZS5pc0RhdGFUZXh0dXJlMkRBcnJheSAp
IHRleHR1cmVUeXBlID0gMzU4NjY7CisgICAgICAgICAgICBpZiAoIHRleHR1cmUuaXNEYXRhVGV4
dHVyZTNEICkgdGV4dHVyZVR5cGUgPSAzMjg3OTsKIAotICAgICAgICAgICAgICAgIGltYWdlID0g
bWFrZVBvd2VyT2ZUd28oIGltYWdlICk7CisgICAgICAgICAgICBpbml0VGV4dHVyZSggdGV4dHVy
ZVByb3BlcnRpZXMsIHRleHR1cmUgKTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgc3Rh
dGUuYWN0aXZlVGV4dHVyZSggMzM5ODQgKyBzbG90ICk7CisgICAgICAgICAgICBzdGF0ZS5iaW5k
VGV4dHVyZSggdGV4dHVyZVR5cGUsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlICk7
CisKKyAgICAgICAgICAgIF9nbC5waXhlbFN0b3JlaSggMzc0NDAsIHRleHR1cmUuZmxpcFkgKTsK
KyAgICAgICAgICAgIF9nbC5waXhlbFN0b3JlaSggMzc0NDEsIHRleHR1cmUucHJlbXVsdGlwbHlB
bHBoYSApOworICAgICAgICAgICAgX2dsLnBpeGVsU3RvcmVpKCAzMzE3LCB0ZXh0dXJlLnVucGFj
a0FsaWdubWVudCApOworCisgICAgICAgICAgICB2YXIgbmVlZHNQb3dlck9mVHdvID0gdGV4dHVy
ZU5lZWRzUG93ZXJPZlR3byggdGV4dHVyZSApICYmIGlzUG93ZXJPZlR3byggdGV4dHVyZS5pbWFn
ZSApID09PSBmYWxzZTsKKyAgICAgICAgICAgIHZhciBpbWFnZSA9IHJlc2l6ZUltYWdlKCB0ZXh0
dXJlLmltYWdlLCBuZWVkc1Bvd2VyT2ZUd28sIGZhbHNlLCBjYXBhYmlsaXRpZXMubWF4VGV4dHVy
ZVNpemUgKTsKIAotICAgICAgICAgICAgdmFyIGlzUG93ZXJPZlR3b0ltYWdlID0gaXNQb3dlck9m
VHdvKCBpbWFnZSApLAorICAgICAgICAgICAgdmFyIHN1cHBvcnRzTWlwcyA9IGlzUG93ZXJPZlR3
byggaW1hZ2UgKSB8fCBjYXBhYmlsaXRpZXMuaXNXZWJHTDIsCiAgICAgICAgICAgICAgICAgZ2xG
b3JtYXQgPSB1dGlscy5jb252ZXJ0KCB0ZXh0dXJlLmZvcm1hdCApLAotICAgICAgICAgICAgICAg
IGdsVHlwZSA9IHV0aWxzLmNvbnZlcnQoIHRleHR1cmUudHlwZSApOworICAgICAgICAgICAgICAg
IGdsVHlwZSA9IHV0aWxzLmNvbnZlcnQoIHRleHR1cmUudHlwZSApLAorICAgICAgICAgICAgICAg
IGdsSW50ZXJuYWxGb3JtYXQgPSBnZXRJbnRlcm5hbEZvcm1hdCggZ2xGb3JtYXQsIGdsVHlwZSAp
OwogCi0gICAgICAgICAgICBzZXRUZXh0dXJlUGFyYW1ldGVycyggX2dsLlRFWFRVUkVfMkQsIHRl
eHR1cmUsIGlzUG93ZXJPZlR3b0ltYWdlICk7CisgICAgICAgICAgICBzZXRUZXh0dXJlUGFyYW1l
dGVycyggdGV4dHVyZVR5cGUsIHRleHR1cmUsIHN1cHBvcnRzTWlwcyApOwogCiAgICAgICAgICAg
ICB2YXIgbWlwbWFwLCBtaXBtYXBzID0gdGV4dHVyZS5taXBtYXBzOwogCkBAIC0yMDU4MywyMSAr
MjE0NDYsMjEgQEAKIAogICAgICAgICAgICAgICAgIC8vIHBvcHVsYXRlIGRlcHRoIHRleHR1cmUg
d2l0aCBkdW1teSBkYXRhCiAKLSAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxGb3JtYXQgPSBf
Z2wuREVQVEhfQ09NUE9ORU5UOworICAgICAgICAgICAgICAgIGdsSW50ZXJuYWxGb3JtYXQgPSA2
NDAyOwogCiAgICAgICAgICAgICAgICAgaWYgKCB0ZXh0dXJlLnR5cGUgPT09IEZsb2F0VHlwZSAp
IHsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoICEgX2lzV2ViR0wyICkgdGhyb3cgbmV3IEVy
cm9yKCAnRmxvYXQgRGVwdGggVGV4dHVyZSBvbmx5IHN1cHBvcnRlZCBpbiBXZWJHTDIuMCcgKTsK
LSAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBfZ2wuREVQVEhfQ09NUE9ORU5U
MzJGOworICAgICAgICAgICAgICAgICAgICBpZiAoICEgY2FwYWJpbGl0aWVzLmlzV2ViR0wyICkg
dGhyb3cgbmV3IEVycm9yKCAnRmxvYXQgRGVwdGggVGV4dHVyZSBvbmx5IHN1cHBvcnRlZCBpbiBX
ZWJHTDIuMCcgKTsKKyAgICAgICAgICAgICAgICAgICAgZ2xJbnRlcm5hbEZvcm1hdCA9IDM2MDEy
OwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggX2lzV2ViR0wyICkgeworICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIGNhcGFiaWxpdGllcy5pc1dlYkdMMiApIHsKIAogICAgICAgICAg
ICAgICAgICAgICAvLyBXZWJHTCAyLjAgcmVxdWlyZXMgc2lnbmVkIGludGVybmFsZm9ybWF0IGZv
ciBnbFRleEltYWdlMkQKLSAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBfZ2wu
REVQVEhfQ09NUE9ORU5UMTY7CisgICAgICAgICAgICAgICAgICAgIGdsSW50ZXJuYWxGb3JtYXQg
PSAzMzE4OTsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICggdGV4
dHVyZS5mb3JtYXQgPT09IERlcHRoRm9ybWF0ICYmIGludGVybmFsRm9ybWF0ID09PSBfZ2wuREVQ
VEhfQ09NUE9ORU5UICkgeworICAgICAgICAgICAgICAgIGlmICggdGV4dHVyZS5mb3JtYXQgPT09
IERlcHRoRm9ybWF0ICYmIGdsSW50ZXJuYWxGb3JtYXQgPT09IDY0MDIgKSB7CiAKICAgICAgICAg
ICAgICAgICAgICAgLy8gVGhlIGVycm9yIElOVkFMSURfT1BFUkFUSU9OIGlzIGdlbmVyYXRlZCBi
eSB0ZXhJbWFnZTJEIGlmIGZvcm1hdCBhbmQgaW50ZXJuYWxmb3JtYXQgYXJlCiAgICAgICAgICAg
ICAgICAgICAgIC8vIERFUFRIX0NPTVBPTkVOVCBhbmQgdHlwZSBpcyBub3QgVU5TSUdORURfU0hP
UlQgb3IgVU5TSUdORURfSU5UCkBAIC0yMDYxNyw3ICsyMTQ4MCw3IEBACiAgICAgICAgICAgICAg
ICAgLy8gKGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL2V4dGVuc2lvbnMv
V0VCR0xfZGVwdGhfdGV4dHVyZS8pCiAgICAgICAgICAgICAgICAgaWYgKCB0ZXh0dXJlLmZvcm1h
dCA9PT0gRGVwdGhTdGVuY2lsRm9ybWF0ICkgewogCi0gICAgICAgICAgICAgICAgICAgIGludGVy
bmFsRm9ybWF0ID0gX2dsLkRFUFRIX1NURU5DSUw7CisgICAgICAgICAgICAgICAgICAgIGdsSW50
ZXJuYWxGb3JtYXQgPSAzNDA0MTsKIAogICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZXJyb3Ig
SU5WQUxJRF9PUEVSQVRJT04gaXMgZ2VuZXJhdGVkIGJ5IHRleEltYWdlMkQgaWYgZm9ybWF0IGFu
ZCBpbnRlcm5hbGZvcm1hdCBhcmUKICAgICAgICAgICAgICAgICAgICAgLy8gREVQVEhfU1RFTkNJ
TCBhbmQgdHlwZSBpcyBub3QgVU5TSUdORURfSU5UXzI0XzhfV0VCR0wuCkBAIC0yMDYzMyw3ICsy
MTQ5Niw3IEBACiAKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBzdGF0ZS50
ZXhJbWFnZTJEKCBfZ2wuVEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRo
LCBpbWFnZS5oZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIG51bGwgKTsKKyAgICAgICAgICAg
ICAgICBzdGF0ZS50ZXhJbWFnZTJEKCAzNTUzLCAwLCBnbEludGVybmFsRm9ybWF0LCBpbWFnZS53
aWR0aCwgaW1hZ2UuaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBudWxsICk7CiAKICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIHRleHR1cmUuaXNEYXRhVGV4dHVyZSApIHsKIApAQCAtMjA2NDEs
MTIgKzIxNTA0LDEyIEBACiAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG5vIG1hbnVh
bCBtaXBtYXBzCiAgICAgICAgICAgICAgICAgLy8gc2V0IDAgbGV2ZWwgbWlwbWFwIGFuZCB0aGVu
IHVzZSBHTCB0byBnZW5lcmF0ZSBvdGhlciBtaXBtYXAgbGV2ZWxzCiAKLSAgICAgICAgICAgICAg
ICBpZiAoIG1pcG1hcHMubGVuZ3RoID4gMCAmJiBpc1Bvd2VyT2ZUd29JbWFnZSApIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIG1pcG1hcHMubGVuZ3RoID4gMCAmJiBzdXBwb3J0c01pcHMgKSB7CiAK
ICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IG1pcG1hcHMubGVuZ3Ro
OyBpIDwgaWw7IGkgKysgKSB7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIG1pcG1hcCA9IG1p
cG1hcHNbIGkgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnRleEltYWdlMkQoIF9n
bC5URVhUVVJFXzJELCBpLCBnbEZvcm1hdCwgbWlwbWFwLndpZHRoLCBtaXBtYXAuaGVpZ2h0LCAw
LCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXAuZGF0YSApOworICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUudGV4SW1hZ2UyRCggMzU1MywgaSwgZ2xJbnRlcm5hbEZvcm1hdCwgbWlwbWFwLndp
ZHRoLCBtaXBtYXAuaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXAuZGF0YSApOwog
CiAgICAgICAgICAgICAgICAgICAgIH0KIApAQCAtMjA2NTUsNyArMjE1MTgsNyBAQAogCiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgICAgICBzdGF0ZS50ZXhJbWFn
ZTJEKCBfZ2wuVEVYVFVSRV8yRCwgMCwgZ2xGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWln
aHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGltYWdlLmRhdGEgKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RhdGUudGV4SW1hZ2UyRCggMzU1MywgMCwgZ2xJbnRlcm5hbEZvcm1hdCwgaW1hZ2Uud2lk
dGgsIGltYWdlLmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1hZ2UuZGF0YSApOwogICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJvcGVydGllcy5fX21heE1pcExldmVsID0gMDsKIAog
ICAgICAgICAgICAgICAgIH0KQEAgLTIwNjcwLDcgKzIxNTMzLDcgQEAKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBzdGF0ZS5nZXRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMoKS5pbmRl
eE9mKCBnbEZvcm1hdCApID4gLSAxICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUuY29tcHJlc3NlZFRleEltYWdlMkQoIF9nbC5URVhUVVJFXzJELCBpLCBnbEZvcm1hdCwg
bWlwbWFwLndpZHRoLCBtaXBtYXAuaGVpZ2h0LCAwLCBtaXBtYXAuZGF0YSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvbXByZXNzZWRUZXhJbWFnZTJEKCAzNTUzLCBpLCBn
bEludGVybmFsRm9ybWF0LCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQsIDAsIG1pcG1hcC5k
YXRhICk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKQEAgLTIwNjgwLDcg
KzIxNTQzLDcgQEAKIAogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS50ZXhJbWFnZTJEKCBfZ2wuVEVYVFVSRV8yRCwgaSwgZ2xGb3Jt
YXQsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlw
bWFwLmRhdGEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnRleEltYWdlMkQoIDM1
NTMsIGksIGdsSW50ZXJuYWxGb3JtYXQsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgMCwg
Z2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwLmRhdGEgKTsKIAogICAgICAgICAgICAgICAgICAgICB9
CiAKQEAgLTIwNjg4LDYgKzIxNTUxLDE2IEBACiAKICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJv
cGVydGllcy5fX21heE1pcExldmVsID0gbWlwbWFwcy5sZW5ndGggLSAxOwogCisgICAgICAgICAg
ICB9IGVsc2UgaWYgKCB0ZXh0dXJlLmlzRGF0YVRleHR1cmUyREFycmF5ICkgeworCisgICAgICAg
ICAgICAgICAgc3RhdGUudGV4SW1hZ2UzRCggMzU4NjYsIDAsIGdsSW50ZXJuYWxGb3JtYXQsIGlt
YWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIGltYWdlLmRlcHRoLCAwLCBnbEZvcm1hdCwgZ2xUeXBl
LCBpbWFnZS5kYXRhICk7CisgICAgICAgICAgICAgICAgdGV4dHVyZVByb3BlcnRpZXMuX19tYXhN
aXBMZXZlbCA9IDA7CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHRleHR1cmUuaXNEYXRhVGV4
dHVyZTNEICkgeworCisgICAgICAgICAgICAgICAgc3RhdGUudGV4SW1hZ2UzRCggMzI4NzksIDAs
IGdsSW50ZXJuYWxGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIGltYWdlLmRlcHRo
LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWFnZS5kYXRhICk7CisgICAgICAgICAgICAgICAgdGV4
dHVyZVByb3BlcnRpZXMuX19tYXhNaXBMZXZlbCA9IDA7CisKICAgICAgICAgICAgIH0gZWxzZSB7
CiAKICAgICAgICAgICAgICAgICAvLyByZWd1bGFyIFRleHR1cmUgKGltYWdlLCB2aWRlbywgY2Fu
dmFzKQpAQCAtMjA2OTYsMTIgKzIxNTY5LDEyIEBACiAgICAgICAgICAgICAgICAgLy8gaWYgdGhl
cmUgYXJlIG5vIG1hbnVhbCBtaXBtYXBzCiAgICAgICAgICAgICAgICAgLy8gc2V0IDAgbGV2ZWwg
bWlwbWFwIGFuZCB0aGVuIHVzZSBHTCB0byBnZW5lcmF0ZSBvdGhlciBtaXBtYXAgbGV2ZWxzCiAK
LSAgICAgICAgICAgICAgICBpZiAoIG1pcG1hcHMubGVuZ3RoID4gMCAmJiBpc1Bvd2VyT2ZUd29J
bWFnZSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIG1pcG1hcHMubGVuZ3RoID4gMCAmJiBzdXBw
b3J0c01pcHMgKSB7CiAKICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9
IG1pcG1hcHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1pcG1hcCA9IG1pcG1hcHNbIGkgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
LnRleEltYWdlMkQoIF9nbC5URVhUVVJFXzJELCBpLCBnbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlw
ZSwgbWlwbWFwICk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS50ZXhJbWFnZTJEKCAz
NTUzLCBpLCBnbEludGVybmFsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXAgKTsKIAog
ICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTIwNzEwLDE2ICsyMTU4MywxNiBAQAogCiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgICAgICBzdGF0ZS50ZXhJbWFn
ZTJEKCBfZ2wuVEVYVFVSRV8yRCwgMCwgZ2xGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIGltYWdl
ICk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnRleEltYWdlMkQoIDM1NTMsIDAsIGdsSW50
ZXJuYWxGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIGltYWdlICk7CiAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVQcm9wZXJ0aWVzLl9fbWF4TWlwTGV2ZWwgPSAwOwogCiAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggdGV4dHVyZU5lZWRzR2Vu
ZXJhdGVNaXBtYXBzKCB0ZXh0dXJlLCBpc1Bvd2VyT2ZUd29JbWFnZSApICkgeworICAgICAgICAg
ICAgaWYgKCB0ZXh0dXJlTmVlZHNHZW5lcmF0ZU1pcG1hcHMoIHRleHR1cmUsIHN1cHBvcnRzTWlw
cyApICkgewogCi0gICAgICAgICAgICAgICAgZ2VuZXJhdGVNaXBtYXAoIF9nbC5URVhUVVJFXzJE
LCB0ZXh0dXJlLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0ICk7CisgICAgICAgICAgICAgICAg
Z2VuZXJhdGVNaXBtYXAoIDM1NTMsIHRleHR1cmUsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQg
KTsKIAogICAgICAgICAgICAgfQogCkBAIC0yMDczNiwzNiArMjE2MDksNzMgQEAKIAogICAgICAg
ICAgICAgdmFyIGdsRm9ybWF0ID0gdXRpbHMuY29udmVydCggcmVuZGVyVGFyZ2V0LnRleHR1cmUu
Zm9ybWF0ICk7CiAgICAgICAgICAgICB2YXIgZ2xUeXBlID0gdXRpbHMuY29udmVydCggcmVuZGVy
VGFyZ2V0LnRleHR1cmUudHlwZSApOwotICAgICAgICAgICAgc3RhdGUudGV4SW1hZ2UyRCggdGV4
dHVyZVRhcmdldCwgMCwgZ2xGb3JtYXQsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0
LmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbnVsbCApOwotICAgICAgICAgICAgX2dsLmJp
bmRGcmFtZWJ1ZmZlciggX2dsLkZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZlciApOwotICAgICAgICAg
ICAgX2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKCBfZ2wuRlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQs
IHRleHR1cmVUYXJnZXQsIHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQudGV4dHVyZSApLl9f
d2ViZ2xUZXh0dXJlLCAwICk7Ci0gICAgICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKCBfZ2wu
RlJBTUVCVUZGRVIsIG51bGwgKTsKKyAgICAgICAgICAgIHZhciBnbEludGVybmFsRm9ybWF0ID0g
Z2V0SW50ZXJuYWxGb3JtYXQoIGdsRm9ybWF0LCBnbFR5cGUgKTsKKyAgICAgICAgICAgIHN0YXRl
LnRleEltYWdlMkQoIHRleHR1cmVUYXJnZXQsIDAsIGdsSW50ZXJuYWxGb3JtYXQsIHJlbmRlclRh
cmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbnVs
bCApOworICAgICAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZlciggMzYxNjAsIGZyYW1lYnVmZmVy
ICk7CisgICAgICAgICAgICBfZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoIDM2MTYwLCBhdHRhY2ht
ZW50LCB0ZXh0dXJlVGFyZ2V0LCBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0LnRleHR1cmUg
KS5fX3dlYmdsVGV4dHVyZSwgMCApOworICAgICAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZlcigg
MzYxNjAsIG51bGwgKTsKIAogICAgICAgICB9CiAKICAgICAgICAgLy8gU2V0dXAgc3RvcmFnZSBm
b3IgaW50ZXJuYWwgZGVwdGgvc3RlbmNpbCBidWZmZXJzIGFuZCBiaW5kIHRvIGNvcnJlY3QgZnJh
bWVidWZmZXIKLSAgICAgICAgZnVuY3Rpb24gc2V0dXBSZW5kZXJCdWZmZXJTdG9yYWdlKCByZW5k
ZXJidWZmZXIsIHJlbmRlclRhcmdldCApIHsKKyAgICAgICAgZnVuY3Rpb24gc2V0dXBSZW5kZXJC
dWZmZXJTdG9yYWdlKCByZW5kZXJidWZmZXIsIHJlbmRlclRhcmdldCwgaXNNdWx0aXNhbXBsZSAp
IHsKIAotICAgICAgICAgICAgX2dsLmJpbmRSZW5kZXJidWZmZXIoIF9nbC5SRU5ERVJCVUZGRVIs
IHJlbmRlcmJ1ZmZlciApOworICAgICAgICAgICAgX2dsLmJpbmRSZW5kZXJidWZmZXIoIDM2MTYx
LCByZW5kZXJidWZmZXIgKTsKIAogICAgICAgICAgICAgaWYgKCByZW5kZXJUYXJnZXQuZGVwdGhC
dWZmZXIgJiYgISByZW5kZXJUYXJnZXQuc3RlbmNpbEJ1ZmZlciApIHsKIAotICAgICAgICAgICAg
ICAgIF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlKCBfZ2wuUkVOREVSQlVGRkVSLCBfZ2wuREVQVEhf
Q09NUE9ORU5UMTYsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCApOwot
ICAgICAgICAgICAgICAgIF9nbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciggX2dsLkZSQU1FQlVG
RkVSLCBfZ2wuREVQVEhfQVRUQUNITUVOVCwgX2dsLlJFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVy
ICk7CisgICAgICAgICAgICAgICAgaWYgKCBpc011bHRpc2FtcGxlICkgeworCisgICAgICAgICAg
ICAgICAgICAgIHZhciBzYW1wbGVzID0gZ2V0UmVuZGVyVGFyZ2V0U2FtcGxlcyggcmVuZGVyVGFy
Z2V0ICk7CisKKyAgICAgICAgICAgICAgICAgICAgX2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZSggMzYxNjEsIHNhbXBsZXMsIDMzMTg5LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRl
clRhcmdldC5oZWlnaHQgKTsKKworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgX2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoIDM2MTYxLCAzMzE4OSwgcmVuZGVy
VGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0ICk7CisKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBfZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoIDM2MTYwLCAz
NjA5NiwgMzYxNjEsIHJlbmRlcmJ1ZmZlciApOwogCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCBy
ZW5kZXJUYXJnZXQuZGVwdGhCdWZmZXIgJiYgcmVuZGVyVGFyZ2V0LnN0ZW5jaWxCdWZmZXIgKSB7
CiAKLSAgICAgICAgICAgICAgICBfZ2wucmVuZGVyYnVmZmVyU3RvcmFnZSggX2dsLlJFTkRFUkJV
RkZFUiwgX2dsLkRFUFRIX1NURU5DSUwsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0
LmhlaWdodCApOwotICAgICAgICAgICAgICAgIF9nbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigg
X2dsLkZSQU1FQlVGRkVSLCBfZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBfZ2wuUkVOREVS
QlVGRkVSLCByZW5kZXJidWZmZXIgKTsKKyAgICAgICAgICAgICAgICBpZiAoIGlzTXVsdGlzYW1w
bGUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgdmFyIHNhbXBsZXMgPSBnZXRSZW5kZXJUYXJn
ZXRTYW1wbGVzKCByZW5kZXJUYXJnZXQgKTsKKworICAgICAgICAgICAgICAgICAgICBfZ2wucmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKCAzNjE2MSwgc2FtcGxlcywgMzUwNTYsIHJlbmRl
clRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCApOworCisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKworICAgICAgICAgICAgICAgICAgICBfZ2wucmVuZGVyYnVmZmVyU3RvcmFnZSgg
MzYxNjEsIDM0MDQxLCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQgKTsK
KworICAgICAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICAgICAgX2dsLmZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKCAzNjE2MCwgMzMzMDYsIDM2MTYxLCByZW5kZXJidWZmZXIgKTsKIAogICAg
ICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBz
dXBwb3J0ICFkZXB0aCAhc3RlbmNpbAotICAgICAgICAgICAgICAgIF9nbC5yZW5kZXJidWZmZXJT
dG9yYWdlKCBfZ2wuUkVOREVSQlVGRkVSLCBfZ2wuUkdCQTQsIHJlbmRlclRhcmdldC53aWR0aCwg
cmVuZGVyVGFyZ2V0LmhlaWdodCApOworICAgICAgICAgICAgICAgIHZhciBnbEZvcm1hdCA9IHV0
aWxzLmNvbnZlcnQoIHJlbmRlclRhcmdldC50ZXh0dXJlLmZvcm1hdCApOworICAgICAgICAgICAg
ICAgIHZhciBnbFR5cGUgPSB1dGlscy5jb252ZXJ0KCByZW5kZXJUYXJnZXQudGV4dHVyZS50eXBl
ICk7CisgICAgICAgICAgICAgICAgdmFyIGdsSW50ZXJuYWxGb3JtYXQgPSBnZXRJbnRlcm5hbEZv
cm1hdCggZ2xGb3JtYXQsIGdsVHlwZSApOworCisgICAgICAgICAgICAgICAgaWYgKCBpc011bHRp
c2FtcGxlICkgeworCisgICAgICAgICAgICAgICAgICAgIHZhciBzYW1wbGVzID0gZ2V0UmVuZGVy
VGFyZ2V0U2FtcGxlcyggcmVuZGVyVGFyZ2V0ICk7CisKKyAgICAgICAgICAgICAgICAgICAgX2ds
LnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSggMzYxNjEsIHNhbXBsZXMsIGdsSW50ZXJu
YWxGb3JtYXQsIHJlbmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCApOworCisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgICAgICBfZ2wucmVuZGVy
YnVmZmVyU3RvcmFnZSggMzYxNjEsIGdsSW50ZXJuYWxGb3JtYXQsIHJlbmRlclRhcmdldC53aWR0
aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCApOworCisgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIF9nbC5iaW5kUmVuZGVyYnVmZmVyKCBfZ2wuUkVOREVSQlVG
RkVSLCBudWxsICk7CisgICAgICAgICAgICBfZ2wuYmluZFJlbmRlcmJ1ZmZlciggMzYxNjEsIG51
bGwgKTsKIAogICAgICAgICB9CiAKQEAgLTIwNzc1LDcgKzIxNjg1LDcgQEAKICAgICAgICAgICAg
IHZhciBpc0N1YmUgPSAoIHJlbmRlclRhcmdldCAmJiByZW5kZXJUYXJnZXQuaXNXZWJHTFJlbmRl
clRhcmdldEN1YmUgKTsKICAgICAgICAgICAgIGlmICggaXNDdWJlICkgdGhyb3cgbmV3IEVycm9y
KCAnRGVwdGggVGV4dHVyZSB3aXRoIGN1YmUgcmVuZGVyIHRhcmdldHMgaXMgbm90IHN1cHBvcnRl
ZCcgKTsKIAotICAgICAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZlciggX2dsLkZSQU1FQlVGRkVS
LCBmcmFtZWJ1ZmZlciApOworICAgICAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZlciggMzYxNjAs
IGZyYW1lYnVmZmVyICk7CiAKICAgICAgICAgICAgIGlmICggISAoIHJlbmRlclRhcmdldC5kZXB0
aFRleHR1cmUgJiYgcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZS5pc0RlcHRoVGV4dHVyZSApICkg
ewogCkBAIC0yMDgwMCwxMSArMjE3MTAsMTEgQEAKIAogICAgICAgICAgICAgaWYgKCByZW5kZXJU
YXJnZXQuZGVwdGhUZXh0dXJlLmZvcm1hdCA9PT0gRGVwdGhGb3JtYXQgKSB7CiAKLSAgICAgICAg
ICAgICAgICBfZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoIF9nbC5GUkFNRUJVRkZFUiwgX2dsLkRF
UFRIX0FUVEFDSE1FTlQsIF9nbC5URVhUVVJFXzJELCB3ZWJnbERlcHRoVGV4dHVyZSwgMCApOwor
ICAgICAgICAgICAgICAgIF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRCggMzYxNjAsIDM2MDk2LCAz
NTUzLCB3ZWJnbERlcHRoVGV4dHVyZSwgMCApOwogCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCBy
ZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLmZvcm1hdCA9PT0gRGVwdGhTdGVuY2lsRm9ybWF0ICkg
ewogCi0gICAgICAgICAgICAgICAgX2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKCBfZ2wuRlJBTUVC
VUZGRVIsIF9nbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIF9nbC5URVhUVVJFXzJELCB3ZWJn
bERlcHRoVGV4dHVyZSwgMCApOworICAgICAgICAgICAgICAgIF9nbC5mcmFtZWJ1ZmZlclRleHR1
cmUyRCggMzYxNjAsIDMzMzA2LCAzNTUzLCB3ZWJnbERlcHRoVGV4dHVyZSwgMCApOwogCiAgICAg
ICAgICAgICB9IGVsc2UgewogCkBAIC0yMDgzNSw3ICsyMTc0NSw3IEBACiAKICAgICAgICAgICAg
ICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgNjsgaSArKyApIHsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZlciggX2dsLkZSQU1FQlVGRkVSLCByZW5kZXJU
YXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlclsgaSBdICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKCAzNjE2MCwgcmVuZGVyVGFyZ2V0UHJvcGVy
dGllcy5fX3dlYmdsRnJhbWVidWZmZXJbIGkgXSApOwogICAgICAgICAgICAgICAgICAgICAgICAg
cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXJbIGkgXSA9IF9nbC5jcmVh
dGVSZW5kZXJidWZmZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwUmVuZGVyQnVm
ZmVyU3RvcmFnZSggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXJbIGkg
XSwgcmVuZGVyVGFyZ2V0ICk7CiAKQEAgLTIwODQzLDcgKzIxNzUzLDcgQEAKIAogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZl
ciggX2dsLkZSQU1FQlVGRkVSLCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1
ZmZlciApOworICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKCAzNjE2MCwg
cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXIgKTsKICAgICAgICAgICAg
ICAgICAgICAgcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXIgPSBfZ2wu
Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIHNldHVwUmVuZGVyQnVm
ZmVyU3RvcmFnZSggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXIsIHJl
bmRlclRhcmdldCApOwogCkBAIC0yMDg1MSw3ICsyMTc2MSw3IEBACiAKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZlciggX2dsLkZSQU1FQlVGRkVSLCBudWxs
ICk7CisgICAgICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKCAzNjE2MCwgbnVsbCApOwogCiAg
ICAgICAgIH0KIApAQCAtMjA4NjgsNyArMjE3NzgsOCBAQAogICAgICAgICAgICAgaW5mby5tZW1v
cnkudGV4dHVyZXMgKys7CiAKICAgICAgICAgICAgIHZhciBpc0N1YmUgPSAoIHJlbmRlclRhcmdl
dC5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZSA9PT0gdHJ1ZSApOwotICAgICAgICAgICAgdmFyIGlz
VGFyZ2V0UG93ZXJPZlR3byA9IGlzUG93ZXJPZlR3byggcmVuZGVyVGFyZ2V0ICk7CisgICAgICAg
ICAgICB2YXIgaXNNdWx0aXNhbXBsZSA9ICggcmVuZGVyVGFyZ2V0LmlzV2ViR0xNdWx0aXNhbXBs
ZVJlbmRlclRhcmdldCA9PT0gdHJ1ZSApOworICAgICAgICAgICAgdmFyIHN1cHBvcnRzTWlwcyA9
IGlzUG93ZXJPZlR3byggcmVuZGVyVGFyZ2V0ICkgfHwgY2FwYWJpbGl0aWVzLmlzV2ViR0wyOwog
CiAgICAgICAgICAgICAvLyBTZXR1cCBmcmFtZWJ1ZmZlcgogCkBAIC0yMDg4Niw0MiArMjE3OTcs
NzggQEAKIAogICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZy
YW1lYnVmZmVyID0gX2dsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7CiAKKyAgICAgICAgICAgICAgICBp
ZiAoIGlzTXVsdGlzYW1wbGUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjYXBhYmls
aXRpZXMuaXNXZWJHTDIgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclRhcmdl
dFByb3BlcnRpZXMuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyID0gX2dsLmNyZWF0ZUZy
YW1lYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXRQcm9wZXJ0
aWVzLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciA9IF9nbC5jcmVhdGVSZW5kZXJidWZmZXIoKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRSZW5kZXJidWZmZXIoIDM2MTYxLCBy
ZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciApOworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGdsRm9ybWF0ID0gdXRpbHMuY29udmVydCggcmVuZGVyVGFy
Z2V0LnRleHR1cmUuZm9ybWF0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2xUeXBl
ID0gdXRpbHMuY29udmVydCggcmVuZGVyVGFyZ2V0LnRleHR1cmUudHlwZSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGdsSW50ZXJuYWxGb3JtYXQgPSBnZXRJbnRlcm5hbEZvcm1hdCgg
Z2xGb3JtYXQsIGdsVHlwZSApOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNhbXBsZXMg
PSBnZXRSZW5kZXJUYXJnZXRTYW1wbGVzKCByZW5kZXJUYXJnZXQgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoIDM2MTYxLCBzYW1w
bGVzLCBnbEludGVybmFsRm9ybWF0LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5o
ZWlnaHQgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZlcigg
MzYxNjAsIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVm
ZmVyICk7CisgICAgICAgICAgICAgICAgICAgICAgICBfZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoIDM2MTYwLCAzNjA2NCwgMzYxNjEsIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbENv
bG9yUmVuZGVyYnVmZmVyICk7CisgICAgICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZFJlbmRl
cmJ1ZmZlciggMzYxNjEsIG51bGwgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBy
ZW5kZXJUYXJnZXQuZGVwdGhCdWZmZXIgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlciA9IF9nbC5j
cmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cFJl
bmRlckJ1ZmZlclN0b3JhZ2UoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbERlcHRoUmVu
ZGVyYnVmZmVyLCByZW5kZXJUYXJnZXQsIHRydWUgKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKCAzNjE2
MCwgbnVsbCApOworCisKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xN
dWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLicgKTsK
KworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgLy8gU2V0dXAgY29sb3IgYnVmZmVyCiAKICAgICAgICAgICAg
IGlmICggaXNDdWJlICkgewogCi0gICAgICAgICAgICAgICAgc3RhdGUuYmluZFRleHR1cmUoIF9n
bC5URVhUVVJFX0NVQkVfTUFQLCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSApOwot
ICAgICAgICAgICAgICAgIHNldFRleHR1cmVQYXJhbWV0ZXJzKCBfZ2wuVEVYVFVSRV9DVUJFX01B
UCwgcmVuZGVyVGFyZ2V0LnRleHR1cmUsIGlzVGFyZ2V0UG93ZXJPZlR3byApOworICAgICAgICAg
ICAgICAgIHN0YXRlLmJpbmRUZXh0dXJlKCAzNDA2NywgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJn
bFRleHR1cmUgKTsKKyAgICAgICAgICAgICAgICBzZXRUZXh0dXJlUGFyYW1ldGVycyggMzQwNjcs
IHJlbmRlclRhcmdldC50ZXh0dXJlLCBzdXBwb3J0c01pcHMgKTsKIAogICAgICAgICAgICAgICAg
IGZvciAoIHZhciBpID0gMDsgaSA8IDY7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
c2V0dXBGcmFtZUJ1ZmZlclRleHR1cmUoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZy
YW1lYnVmZmVyWyBpIF0sIHJlbmRlclRhcmdldCwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwLCBfZ2wu
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSApOworICAgICAgICAgICAgICAgICAgICBz
ZXR1cEZyYW1lQnVmZmVyVGV4dHVyZSggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJh
bWVidWZmZXJbIGkgXSwgcmVuZGVyVGFyZ2V0LCAzNjA2NCwgMzQwNjkgKyBpICk7CiAKICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIHRleHR1cmVOZWVkc0dlbmVyYXRl
TWlwbWFwcyggcmVuZGVyVGFyZ2V0LnRleHR1cmUsIGlzVGFyZ2V0UG93ZXJPZlR3byApICkgewor
ICAgICAgICAgICAgICAgIGlmICggdGV4dHVyZU5lZWRzR2VuZXJhdGVNaXBtYXBzKCByZW5kZXJU
YXJnZXQudGV4dHVyZSwgc3VwcG9ydHNNaXBzICkgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
Z2VuZXJhdGVNaXBtYXAoIF9nbC5URVhUVVJFX0NVQkVfTUFQLCByZW5kZXJUYXJnZXQudGV4dHVy
ZSwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0ICk7CisgICAgICAgICAg
ICAgICAgICAgIGdlbmVyYXRlTWlwbWFwKCAzNDA2NywgcmVuZGVyVGFyZ2V0LnRleHR1cmUsIHJl
bmRlclRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCApOwogCiAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgc3RhdGUuYmluZFRleHR1cmUoIF9nbC5URVhUVVJFX0NV
QkVfTUFQLCBudWxsICk7CisgICAgICAgICAgICAgICAgc3RhdGUuYmluZFRleHR1cmUoIDM0MDY3
LCBudWxsICk7CiAKICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICBzdGF0
ZS5iaW5kVGV4dHVyZSggX2dsLlRFWFRVUkVfMkQsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xU
ZXh0dXJlICk7Ci0gICAgICAgICAgICAgICAgc2V0VGV4dHVyZVBhcmFtZXRlcnMoIF9nbC5URVhU
VVJFXzJELCByZW5kZXJUYXJnZXQudGV4dHVyZSwgaXNUYXJnZXRQb3dlck9mVHdvICk7Ci0gICAg
ICAgICAgICAgICAgc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmUoIHJlbmRlclRhcmdldFByb3BlcnRp
ZXMuX193ZWJnbEZyYW1lYnVmZmVyLCByZW5kZXJUYXJnZXQsIF9nbC5DT0xPUl9BVFRBQ0hNRU5U
MCwgX2dsLlRFWFRVUkVfMkQgKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5iaW5kVGV4dHVyZSgg
MzU1MywgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgKTsKKyAgICAgICAgICAgICAg
ICBzZXRUZXh0dXJlUGFyYW1ldGVycyggMzU1MywgcmVuZGVyVGFyZ2V0LnRleHR1cmUsIHN1cHBv
cnRzTWlwcyApOworICAgICAgICAgICAgICAgIHNldHVwRnJhbWVCdWZmZXJUZXh0dXJlKCByZW5k
ZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciwgcmVuZGVyVGFyZ2V0LCAzNjA2
NCwgMzU1MyApOwogCi0gICAgICAgICAgICAgICAgaWYgKCB0ZXh0dXJlTmVlZHNHZW5lcmF0ZU1p
cG1hcHMoIHJlbmRlclRhcmdldC50ZXh0dXJlLCBpc1RhcmdldFBvd2VyT2ZUd28gKSApIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIHRleHR1cmVOZWVkc0dlbmVyYXRlTWlwbWFwcyggcmVuZGVyVGFy
Z2V0LnRleHR1cmUsIHN1cHBvcnRzTWlwcyApICkgewogCi0gICAgICAgICAgICAgICAgICAgIGdl
bmVyYXRlTWlwbWFwKCBfZ2wuVEVYVFVSRV8yRCwgcmVuZGVyVGFyZ2V0LnRleHR1cmUsIHJlbmRl
clRhcmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCApOworICAgICAgICAgICAgICAgICAg
ICBnZW5lcmF0ZU1pcG1hcCggMzU1MywgcmVuZGVyVGFyZ2V0LnRleHR1cmUsIHJlbmRlclRhcmdl
dC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCApOwogCiAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgc3RhdGUuYmluZFRleHR1cmUoIF9nbC5URVhUVVJFXzJELCBudWxsICk7
CisgICAgICAgICAgICAgICAgc3RhdGUuYmluZFRleHR1cmUoIDM1NTMsIG51bGwgKTsKIAogICAg
ICAgICAgICAgfQogCkBAIC0yMDkzOCwxMSArMjE4ODUsMTEgQEAKICAgICAgICAgZnVuY3Rpb24g
dXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKCByZW5kZXJUYXJnZXQgKSB7CiAKICAgICAgICAgICAg
IHZhciB0ZXh0dXJlID0gcmVuZGVyVGFyZ2V0LnRleHR1cmU7Ci0gICAgICAgICAgICB2YXIgaXNU
YXJnZXRQb3dlck9mVHdvID0gaXNQb3dlck9mVHdvKCByZW5kZXJUYXJnZXQgKTsKKyAgICAgICAg
ICAgIHZhciBzdXBwb3J0c01pcHMgPSBpc1Bvd2VyT2ZUd28oIHJlbmRlclRhcmdldCApIHx8IGNh
cGFiaWxpdGllcy5pc1dlYkdMMjsKIAotICAgICAgICAgICAgaWYgKCB0ZXh0dXJlTmVlZHNHZW5l
cmF0ZU1pcG1hcHMoIHRleHR1cmUsIGlzVGFyZ2V0UG93ZXJPZlR3byApICkgeworICAgICAgICAg
ICAgaWYgKCB0ZXh0dXJlTmVlZHNHZW5lcmF0ZU1pcG1hcHMoIHRleHR1cmUsIHN1cHBvcnRzTWlw
cyApICkgewogCi0gICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlbmRlclRhcmdldC5pc1dl
YkdMUmVuZGVyVGFyZ2V0Q3ViZSA/IF9nbC5URVhUVVJFX0NVQkVfTUFQIDogX2dsLlRFWFRVUkVf
MkQ7CisgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlbmRlclRhcmdldC5pc1dlYkdMUmVu
ZGVyVGFyZ2V0Q3ViZSA/IDM0MDY3IDogMzU1MzsKICAgICAgICAgICAgICAgICB2YXIgd2ViZ2xU
ZXh0dXJlID0gcHJvcGVydGllcy5nZXQoIHRleHR1cmUgKS5fX3dlYmdsVGV4dHVyZTsKIAogICAg
ICAgICAgICAgICAgIHN0YXRlLmJpbmRUZXh0dXJlKCB0YXJnZXQsIHdlYmdsVGV4dHVyZSApOwpA
QCAtMjA5NTMsNiArMjE5MDAsNDMgQEAKIAogICAgICAgICB9CiAKKyAgICAgICAgZnVuY3Rpb24g
dXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQoIHJlbmRlclRhcmdldCApIHsKKworICAgICAg
ICAgICAgaWYgKCByZW5kZXJUYXJnZXQuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0ICkg
eworCisgICAgICAgICAgICAgICAgaWYgKCBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHJlbmRlclRhcmdldFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVz
LmdldCggcmVuZGVyVGFyZ2V0ICk7CisKKyAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRGcmFt
ZWJ1ZmZlciggMzYwMDgsIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbE11bHRpc2FtcGxl
ZEZyYW1lYnVmZmVyICk7CisgICAgICAgICAgICAgICAgICAgIF9nbC5iaW5kRnJhbWVidWZmZXIo
IDM2MDA5LCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciApOworCisg
ICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHJlbmRlclRhcmdldC53aWR0aDsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IHJlbmRlclRhcmdldC5oZWlnaHQ7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBtYXNrID0gMTYzODQ7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCByZW5kZXJUYXJnZXQuZGVwdGhCdWZmZXIgKSBtYXNrIHw9IDI1NjsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCByZW5kZXJUYXJnZXQuc3RlbmNpbEJ1ZmZlciApIG1hc2sgfD0gMTAyNDsKKwor
ICAgICAgICAgICAgICAgICAgICBfZ2wuYmxpdEZyYW1lYnVmZmVyKCAwLCAwLCB3aWR0aCwgaGVp
Z2h0LCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBtYXNrLCA5NzI4ICk7CisKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldl
YkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNl
ZCB3aXRoIFdlYkdMMi4nICk7CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0K
KworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZ2V0UmVuZGVyVGFyZ2V0U2FtcGxlcygg
cmVuZGVyVGFyZ2V0ICkgeworCisgICAgICAgICAgICByZXR1cm4gKCBjYXBhYmlsaXRpZXMuaXNX
ZWJHTDIgJiYgcmVuZGVyVGFyZ2V0LmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCApID8K
KyAgICAgICAgICAgICAgICBNYXRoLm1pbiggY2FwYWJpbGl0aWVzLm1heFNhbXBsZXMsIHJlbmRl
clRhcmdldC5zYW1wbGVzICkgOiAwOworCisgICAgICAgIH0KKwogICAgICAgICBmdW5jdGlvbiB1
cGRhdGVWaWRlb1RleHR1cmUoIHRleHR1cmUgKSB7CiAKICAgICAgICAgICAgIHZhciBpZCA9IHRl
eHR1cmUuaWQ7CkBAIC0yMDk2OSwxMSArMjE5NTMsODAgQEAKIAogICAgICAgICB9CiAKKyAgICAg
ICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKworICAgICAgICB2YXIgd2FybmVkVGV4dHVy
ZTJEID0gZmFsc2U7CisgICAgICAgIHZhciB3YXJuZWRUZXh0dXJlQ3ViZSA9IGZhbHNlOworCisg
ICAgICAgIGZ1bmN0aW9uIHNhZmVTZXRUZXh0dXJlMkQoIHRleHR1cmUsIHNsb3QgKSB7CisKKyAg
ICAgICAgICAgIGlmICggdGV4dHVyZSAmJiB0ZXh0dXJlLmlzV2ViR0xSZW5kZXJUYXJnZXQgKSB7
CisKKyAgICAgICAgICAgICAgICBpZiAoIHdhcm5lZFRleHR1cmUyRCA9PT0gZmFsc2UgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAiVEhSRUUuV2ViR0xUZXh0dXJlcy5z
YWZlU2V0VGV4dHVyZTJEOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVz
ZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIgKTsKKyAgICAgICAgICAgICAgICAg
ICAgd2FybmVkVGV4dHVyZTJEID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIHRleHR1cmUgPSB0ZXh0dXJlLnRleHR1cmU7CisKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc2V0VGV4dHVyZTJEKCB0ZXh0dXJlLCBzbG90ICk7CisKKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIHNhZmVTZXRUZXh0dXJlQ3ViZSggdGV4dHVyZSwgc2xvdCApIHsK
KworICAgICAgICAgICAgaWYgKCB0ZXh0dXJlICYmIHRleHR1cmUuaXNXZWJHTFJlbmRlclRhcmdl
dEN1YmUgKSB7CisKKyAgICAgICAgICAgICAgICBpZiAoIHdhcm5lZFRleHR1cmVDdWJlID09PSBm
YWxzZSApIHsKKworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICJUSFJFRS5XZWJH
TFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlQ3ViZTogZG9uJ3QgdXNlIGN1YmUgcmVuZGVyIHRhcmdl
dHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIgKTsK
KyAgICAgICAgICAgICAgICAgICAgd2FybmVkVGV4dHVyZUN1YmUgPSB0cnVlOworCisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IHRleHR1cmUudGV4dHVyZTsK
KworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBjdXJyZW50bHkgcmVseWluZyBvbiB0
aGUgZmFjdCB0aGF0IFdlYkdMUmVuZGVyVGFyZ2V0Q3ViZS50ZXh0dXJlIGlzIGEgVGV4dHVyZSBh
bmQgTk9UIGEgQ3ViZVRleHR1cmUKKyAgICAgICAgICAgIC8vIFRPRE86IHVuaWZ5IHRoZXNlIGNv
ZGUgcGF0aHMKKyAgICAgICAgICAgIGlmICggKCB0ZXh0dXJlICYmIHRleHR1cmUuaXNDdWJlVGV4
dHVyZSApIHx8CisgICAgICAgICAgICAgICAgKCBBcnJheS5pc0FycmF5KCB0ZXh0dXJlLmltYWdl
ICkgJiYgdGV4dHVyZS5pbWFnZS5sZW5ndGggPT09IDYgKSApIHsKKworICAgICAgICAgICAgICAg
IC8vIENvbXByZXNzZWRUZXh0dXJlIGNhbiBoYXZlIEFycmF5IGluIGltYWdlIDovCisKKyAgICAg
ICAgICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIGFsb25lIHNob3VsZCB0YWtlIGNhcmUgb2YgY3Vi
ZSB0ZXh0dXJlcworICAgICAgICAgICAgICAgIHNldFRleHR1cmVDdWJlKCB0ZXh0dXJlLCBzbG90
ICk7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAvLyBhc3N1bWVk
OiB0ZXh0dXJlIHByb3BlcnR5IG9mIFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0Q3ViZQorICAgICAg
ICAgICAgICAgIHNldFRleHR1cmVDdWJlRHluYW1pYyggdGV4dHVyZSwgc2xvdCApOworCisgICAg
ICAgICAgICB9CisKKyAgICAgICAgfQorCisgICAgICAgIC8vCisKKyAgICAgICAgdGhpcy5hbGxv
Y2F0ZVRleHR1cmVVbml0ID0gYWxsb2NhdGVUZXh0dXJlVW5pdDsKKyAgICAgICAgdGhpcy5yZXNl
dFRleHR1cmVVbml0cyA9IHJlc2V0VGV4dHVyZVVuaXRzOworCiAgICAgICAgIHRoaXMuc2V0VGV4
dHVyZTJEID0gc2V0VGV4dHVyZTJEOworICAgICAgICB0aGlzLnNldFRleHR1cmUyREFycmF5ID0g
c2V0VGV4dHVyZTJEQXJyYXk7CisgICAgICAgIHRoaXMuc2V0VGV4dHVyZTNEID0gc2V0VGV4dHVy
ZTNEOwogICAgICAgICB0aGlzLnNldFRleHR1cmVDdWJlID0gc2V0VGV4dHVyZUN1YmU7CiAgICAg
ICAgIHRoaXMuc2V0VGV4dHVyZUN1YmVEeW5hbWljID0gc2V0VGV4dHVyZUN1YmVEeW5hbWljOwog
ICAgICAgICB0aGlzLnNldHVwUmVuZGVyVGFyZ2V0ID0gc2V0dXBSZW5kZXJUYXJnZXQ7CiAgICAg
ICAgIHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwID0gdXBkYXRlUmVuZGVyVGFyZ2V0TWlw
bWFwOworICAgICAgICB0aGlzLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0ID0gdXBkYXRl
TXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ7CisKKyAgICAgICAgdGhpcy5zYWZlU2V0VGV4dHVyZTJE
ID0gc2FmZVNldFRleHR1cmUyRDsKKyAgICAgICAgdGhpcy5zYWZlU2V0VGV4dHVyZUN1YmUgPSBz
YWZlU2V0VGV4dHVyZUN1YmU7CiAKICAgICB9CiAKQEAgLTIwOTgxLDY4ICsyMjAzNCw3MSBAQAog
ICAgICAqIEBhdXRob3IgdGhlc3BpdGUgLyBodHRwOi8vd3d3LnR3aXR0ZXIuY29tL3RoZXNwaXRl
CiAgICAgICovCiAKLSAgICBmdW5jdGlvbiBXZWJHTFV0aWxzKCBnbCwgZXh0ZW5zaW9ucyApIHsK
KyAgICBmdW5jdGlvbiBXZWJHTFV0aWxzKCBnbCwgZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzICkg
ewogCiAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnQoIHAgKSB7CiAKICAgICAgICAgICAgIHZhciBl
eHRlbnNpb247CiAKLSAgICAgICAgICAgIGlmICggcCA9PT0gUmVwZWF0V3JhcHBpbmcgKSByZXR1
cm4gZ2wuUkVQRUFUOwotICAgICAgICAgICAgaWYgKCBwID09PSBDbGFtcFRvRWRnZVdyYXBwaW5n
ICkgcmV0dXJuIGdsLkNMQU1QX1RPX0VER0U7Ci0gICAgICAgICAgICBpZiAoIHAgPT09IE1pcnJv
cmVkUmVwZWF0V3JhcHBpbmcgKSByZXR1cm4gZ2wuTUlSUk9SRURfUkVQRUFUOworICAgICAgICAg
ICAgaWYgKCBwID09PSBSZXBlYXRXcmFwcGluZyApIHJldHVybiAxMDQ5NzsKKyAgICAgICAgICAg
IGlmICggcCA9PT0gQ2xhbXBUb0VkZ2VXcmFwcGluZyApIHJldHVybiAzMzA3MTsKKyAgICAgICAg
ICAgIGlmICggcCA9PT0gTWlycm9yZWRSZXBlYXRXcmFwcGluZyApIHJldHVybiAzMzY0ODsKIAot
ICAgICAgICAgICAgaWYgKCBwID09PSBOZWFyZXN0RmlsdGVyICkgcmV0dXJuIGdsLk5FQVJFU1Q7
Ci0gICAgICAgICAgICBpZiAoIHAgPT09IE5lYXJlc3RNaXBNYXBOZWFyZXN0RmlsdGVyICkgcmV0
dXJuIGdsLk5FQVJFU1RfTUlQTUFQX05FQVJFU1Q7Ci0gICAgICAgICAgICBpZiAoIHAgPT09IE5l
YXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXIgKSByZXR1cm4gZ2wuTkVBUkVTVF9NSVBNQVBfTElORUFS
OworICAgICAgICAgICAgaWYgKCBwID09PSBOZWFyZXN0RmlsdGVyICkgcmV0dXJuIDk3Mjg7Cisg
ICAgICAgICAgICBpZiAoIHAgPT09IE5lYXJlc3RNaXBNYXBOZWFyZXN0RmlsdGVyICkgcmV0dXJu
IDk5ODQ7CisgICAgICAgICAgICBpZiAoIHAgPT09IE5lYXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXIg
KSByZXR1cm4gOTk4NjsKIAotICAgICAgICAgICAgaWYgKCBwID09PSBMaW5lYXJGaWx0ZXIgKSBy
ZXR1cm4gZ2wuTElORUFSOwotICAgICAgICAgICAgaWYgKCBwID09PSBMaW5lYXJNaXBNYXBOZWFy
ZXN0RmlsdGVyICkgcmV0dXJuIGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVDsKLSAgICAgICAgICAg
IGlmICggcCA9PT0gTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyICkgcmV0dXJuIGdsLkxJTkVBUl9N
SVBNQVBfTElORUFSOworICAgICAgICAgICAgaWYgKCBwID09PSBMaW5lYXJGaWx0ZXIgKSByZXR1
cm4gOTcyOTsKKyAgICAgICAgICAgIGlmICggcCA9PT0gTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRl
ciApIHJldHVybiA5OTg1OworICAgICAgICAgICAgaWYgKCBwID09PSBMaW5lYXJNaXBNYXBMaW5l
YXJGaWx0ZXIgKSByZXR1cm4gOTk4NzsKIAotICAgICAgICAgICAgaWYgKCBwID09PSBVbnNpZ25l
ZEJ5dGVUeXBlICkgcmV0dXJuIGdsLlVOU0lHTkVEX0JZVEU7Ci0gICAgICAgICAgICBpZiAoIHAg
PT09IFVuc2lnbmVkU2hvcnQ0NDQ0VHlwZSApIHJldHVybiBnbC5VTlNJR05FRF9TSE9SVF80XzRf
NF80OwotICAgICAgICAgICAgaWYgKCBwID09PSBVbnNpZ25lZFNob3J0NTU1MVR5cGUgKSByZXR1
cm4gZ2wuVU5TSUdORURfU0hPUlRfNV81XzVfMTsKLSAgICAgICAgICAgIGlmICggcCA9PT0gVW5z
aWduZWRTaG9ydDU2NVR5cGUgKSByZXR1cm4gZ2wuVU5TSUdORURfU0hPUlRfNV82XzU7CisgICAg
ICAgICAgICBpZiAoIHAgPT09IFVuc2lnbmVkQnl0ZVR5cGUgKSByZXR1cm4gNTEyMTsKKyAgICAg
ICAgICAgIGlmICggcCA9PT0gVW5zaWduZWRTaG9ydDQ0NDRUeXBlICkgcmV0dXJuIDMyODE5Owor
ICAgICAgICAgICAgaWYgKCBwID09PSBVbnNpZ25lZFNob3J0NTU1MVR5cGUgKSByZXR1cm4gMzI4
MjA7CisgICAgICAgICAgICBpZiAoIHAgPT09IFVuc2lnbmVkU2hvcnQ1NjVUeXBlICkgcmV0dXJu
IDMzNjM1OwogCi0gICAgICAgICAgICBpZiAoIHAgPT09IEJ5dGVUeXBlICkgcmV0dXJuIGdsLkJZ
VEU7Ci0gICAgICAgICAgICBpZiAoIHAgPT09IFNob3J0VHlwZSApIHJldHVybiBnbC5TSE9SVDsK
LSAgICAgICAgICAgIGlmICggcCA9PT0gVW5zaWduZWRTaG9ydFR5cGUgKSByZXR1cm4gZ2wuVU5T
SUdORURfU0hPUlQ7Ci0gICAgICAgICAgICBpZiAoIHAgPT09IEludFR5cGUgKSByZXR1cm4gZ2wu
SU5UOwotICAgICAgICAgICAgaWYgKCBwID09PSBVbnNpZ25lZEludFR5cGUgKSByZXR1cm4gZ2wu
VU5TSUdORURfSU5UOwotICAgICAgICAgICAgaWYgKCBwID09PSBGbG9hdFR5cGUgKSByZXR1cm4g
Z2wuRkxPQVQ7CisgICAgICAgICAgICBpZiAoIHAgPT09IEJ5dGVUeXBlICkgcmV0dXJuIDUxMjA7
CisgICAgICAgICAgICBpZiAoIHAgPT09IFNob3J0VHlwZSApIHJldHVybiA1MTIyOworICAgICAg
ICAgICAgaWYgKCBwID09PSBVbnNpZ25lZFNob3J0VHlwZSApIHJldHVybiA1MTIzOworICAgICAg
ICAgICAgaWYgKCBwID09PSBJbnRUeXBlICkgcmV0dXJuIDUxMjQ7CisgICAgICAgICAgICBpZiAo
IHAgPT09IFVuc2lnbmVkSW50VHlwZSApIHJldHVybiA1MTI1OworICAgICAgICAgICAgaWYgKCBw
ID09PSBGbG9hdFR5cGUgKSByZXR1cm4gNTEyNjsKIAogICAgICAgICAgICAgaWYgKCBwID09PSBI
YWxmRmxvYXRUeXBlICkgewogCisgICAgICAgICAgICAgICAgaWYgKCBjYXBhYmlsaXRpZXMuaXNX
ZWJHTDIgKSByZXR1cm4gNTEzMTsKKwogICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9IGV4dGVu
c2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKTsKIAogICAgICAgICAgICAgICAg
IGlmICggZXh0ZW5zaW9uICE9PSBudWxsICkgcmV0dXJuIGV4dGVuc2lvbi5IQUxGX0ZMT0FUX09F
UzsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIHAgPT09IEFscGhhRm9ybWF0
ICkgcmV0dXJuIGdsLkFMUEhBOwotICAgICAgICAgICAgaWYgKCBwID09PSBSR0JGb3JtYXQgKSBy
ZXR1cm4gZ2wuUkdCOwotICAgICAgICAgICAgaWYgKCBwID09PSBSR0JBRm9ybWF0ICkgcmV0dXJu
IGdsLlJHQkE7Ci0gICAgICAgICAgICBpZiAoIHAgPT09IEx1bWluYW5jZUZvcm1hdCApIHJldHVy
biBnbC5MVU1JTkFOQ0U7Ci0gICAgICAgICAgICBpZiAoIHAgPT09IEx1bWluYW5jZUFscGhhRm9y
bWF0ICkgcmV0dXJuIGdsLkxVTUlOQU5DRV9BTFBIQTsKLSAgICAgICAgICAgIGlmICggcCA9PT0g
RGVwdGhGb3JtYXQgKSByZXR1cm4gZ2wuREVQVEhfQ09NUE9ORU5UOwotICAgICAgICAgICAgaWYg
KCBwID09PSBEZXB0aFN0ZW5jaWxGb3JtYXQgKSByZXR1cm4gZ2wuREVQVEhfU1RFTkNJTDsKKyAg
ICAgICAgICAgIGlmICggcCA9PT0gQWxwaGFGb3JtYXQgKSByZXR1cm4gNjQwNjsKKyAgICAgICAg
ICAgIGlmICggcCA9PT0gUkdCRm9ybWF0ICkgcmV0dXJuIDY0MDc7CisgICAgICAgICAgICBpZiAo
IHAgPT09IFJHQkFGb3JtYXQgKSByZXR1cm4gNjQwODsKKyAgICAgICAgICAgIGlmICggcCA9PT0g
THVtaW5hbmNlRm9ybWF0ICkgcmV0dXJuIDY0MDk7CisgICAgICAgICAgICBpZiAoIHAgPT09IEx1
bWluYW5jZUFscGhhRm9ybWF0ICkgcmV0dXJuIDY0MTA7CisgICAgICAgICAgICBpZiAoIHAgPT09
IERlcHRoRm9ybWF0ICkgcmV0dXJuIDY0MDI7CisgICAgICAgICAgICBpZiAoIHAgPT09IERlcHRo
U3RlbmNpbEZvcm1hdCApIHJldHVybiAzNDA0MTsKKyAgICAgICAgICAgIGlmICggcCA9PT0gUmVk
Rm9ybWF0ICkgcmV0dXJuIDY0MDM7CiAKLSAgICAgICAgICAgIGlmICggcCA9PT0gQWRkRXF1YXRp
b24gKSByZXR1cm4gZ2wuRlVOQ19BREQ7Ci0gICAgICAgICAgICBpZiAoIHAgPT09IFN1YnRyYWN0
RXF1YXRpb24gKSByZXR1cm4gZ2wuRlVOQ19TVUJUUkFDVDsKLSAgICAgICAgICAgIGlmICggcCA9
PT0gUmV2ZXJzZVN1YnRyYWN0RXF1YXRpb24gKSByZXR1cm4gZ2wuRlVOQ19SRVZFUlNFX1NVQlRS
QUNUOworICAgICAgICAgICAgaWYgKCBwID09PSBBZGRFcXVhdGlvbiApIHJldHVybiAzMjc3NDsK
KyAgICAgICAgICAgIGlmICggcCA9PT0gU3VidHJhY3RFcXVhdGlvbiApIHJldHVybiAzMjc3ODsK
KyAgICAgICAgICAgIGlmICggcCA9PT0gUmV2ZXJzZVN1YnRyYWN0RXF1YXRpb24gKSByZXR1cm4g
MzI3Nzk7CiAKLSAgICAgICAgICAgIGlmICggcCA9PT0gWmVyb0ZhY3RvciApIHJldHVybiBnbC5a
RVJPOwotICAgICAgICAgICAgaWYgKCBwID09PSBPbmVGYWN0b3IgKSByZXR1cm4gZ2wuT05FOwot
ICAgICAgICAgICAgaWYgKCBwID09PSBTcmNDb2xvckZhY3RvciApIHJldHVybiBnbC5TUkNfQ09M
T1I7Ci0gICAgICAgICAgICBpZiAoIHAgPT09IE9uZU1pbnVzU3JjQ29sb3JGYWN0b3IgKSByZXR1
cm4gZ2wuT05FX01JTlVTX1NSQ19DT0xPUjsKLSAgICAgICAgICAgIGlmICggcCA9PT0gU3JjQWxw
aGFGYWN0b3IgKSByZXR1cm4gZ2wuU1JDX0FMUEhBOwotICAgICAgICAgICAgaWYgKCBwID09PSBP
bmVNaW51c1NyY0FscGhhRmFjdG9yICkgcmV0dXJuIGdsLk9ORV9NSU5VU19TUkNfQUxQSEE7Ci0g
ICAgICAgICAgICBpZiAoIHAgPT09IERzdEFscGhhRmFjdG9yICkgcmV0dXJuIGdsLkRTVF9BTFBI
QTsKLSAgICAgICAgICAgIGlmICggcCA9PT0gT25lTWludXNEc3RBbHBoYUZhY3RvciApIHJldHVy
biBnbC5PTkVfTUlOVVNfRFNUX0FMUEhBOworICAgICAgICAgICAgaWYgKCBwID09PSBaZXJvRmFj
dG9yICkgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAoIHAgPT09IE9uZUZhY3RvciApIHJldHVy
biAxOworICAgICAgICAgICAgaWYgKCBwID09PSBTcmNDb2xvckZhY3RvciApIHJldHVybiA3Njg7
CisgICAgICAgICAgICBpZiAoIHAgPT09IE9uZU1pbnVzU3JjQ29sb3JGYWN0b3IgKSByZXR1cm4g
NzY5OworICAgICAgICAgICAgaWYgKCBwID09PSBTcmNBbHBoYUZhY3RvciApIHJldHVybiA3NzA7
CisgICAgICAgICAgICBpZiAoIHAgPT09IE9uZU1pbnVzU3JjQWxwaGFGYWN0b3IgKSByZXR1cm4g
NzcxOworICAgICAgICAgICAgaWYgKCBwID09PSBEc3RBbHBoYUZhY3RvciApIHJldHVybiA3NzI7
CisgICAgICAgICAgICBpZiAoIHAgPT09IE9uZU1pbnVzRHN0QWxwaGFGYWN0b3IgKSByZXR1cm4g
NzczOwogCi0gICAgICAgICAgICBpZiAoIHAgPT09IERzdENvbG9yRmFjdG9yICkgcmV0dXJuIGds
LkRTVF9DT0xPUjsKLSAgICAgICAgICAgIGlmICggcCA9PT0gT25lTWludXNEc3RDb2xvckZhY3Rv
ciApIHJldHVybiBnbC5PTkVfTUlOVVNfRFNUX0NPTE9SOwotICAgICAgICAgICAgaWYgKCBwID09
PSBTcmNBbHBoYVNhdHVyYXRlRmFjdG9yICkgcmV0dXJuIGdsLlNSQ19BTFBIQV9TQVRVUkFURTsK
KyAgICAgICAgICAgIGlmICggcCA9PT0gRHN0Q29sb3JGYWN0b3IgKSByZXR1cm4gNzc0OworICAg
ICAgICAgICAgaWYgKCBwID09PSBPbmVNaW51c0RzdENvbG9yRmFjdG9yICkgcmV0dXJuIDc3NTsK
KyAgICAgICAgICAgIGlmICggcCA9PT0gU3JjQWxwaGFTYXR1cmF0ZUZhY3RvciApIHJldHVybiA3
NzY7CiAKICAgICAgICAgICAgIGlmICggcCA9PT0gUkdCX1MzVENfRFhUMV9Gb3JtYXQgfHwgcCA9
PT0gUkdCQV9TM1RDX0RYVDFfRm9ybWF0IHx8CiAgICAgICAgICAgICAgICAgcCA9PT0gUkdCQV9T
M1RDX0RYVDNfRm9ybWF0IHx8IHAgPT09IFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdCApIHsKQEAgLTIx
MTAyLDYgKzIyMTU4LDEzIEBACiAKICAgICAgICAgICAgIGlmICggcCA9PT0gTWluRXF1YXRpb24g
fHwgcCA9PT0gTWF4RXF1YXRpb24gKSB7CiAKKyAgICAgICAgICAgICAgICBpZiAoIGNhcGFiaWxp
dGllcy5pc1dlYkdMMiApIHsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIHAgPT09IE1pbkVx
dWF0aW9uICkgcmV0dXJuIDMyNzc1OworICAgICAgICAgICAgICAgICAgICBpZiAoIHAgPT09IE1h
eEVxdWF0aW9uICkgcmV0dXJuIDMyNzc2OworCisgICAgICAgICAgICAgICAgfQorCiAgICAgICAg
ICAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoICdFWFRfYmxlbmRfbWlubWF4JyAp
OwogCiAgICAgICAgICAgICAgICAgaWYgKCBleHRlbnNpb24gIT09IG51bGwgKSB7CkBAIC0yMTEx
NSw2ICsyMjE3OCw4IEBACiAKICAgICAgICAgICAgIGlmICggcCA9PT0gVW5zaWduZWRJbnQyNDhU
eXBlICkgewogCisgICAgICAgICAgICAgICAgaWYgKCBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgKSBy
ZXR1cm4gMzQwNDI7CisKICAgICAgICAgICAgICAgICBleHRlbnNpb24gPSBleHRlbnNpb25zLmdl
dCggJ1dFQkdMX2RlcHRoX3RleHR1cmUnICk7CiAKICAgICAgICAgICAgICAgICBpZiAoIGV4dGVu
c2lvbiAhPT0gbnVsbCApIHJldHVybiBleHRlbnNpb24uVU5TSUdORURfSU5UXzI0XzhfV0VCR0w7
CkBAIC0yMTE1MSwyNjcgKzIyMjE2LDk0IEBACiAKICAgICAvKioKICAgICAgKiBAYXV0aG9yIG1y
ZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqIEBhdXRob3IgZ3JlZ2dtYW4gLyBodHRw
Oi8vZ2FtZXMuZ3JlZ2dtYW4uY29tLwotICAgICAqIEBhdXRob3Igeno4NSAvIGh0dHA6Ly93d3cu
bGFiNGdhbWVzLm5ldC96ejg1L2Jsb2cKLSAgICAgKiBAYXV0aG9yIHRzY2h3CiAgICAgICovCiAK
LSAgICBmdW5jdGlvbiBQZXJzcGVjdGl2ZUNhbWVyYSggZm92LCBhc3BlY3QsIG5lYXIsIGZhciAp
IHsKLQotICAgICAgICBDYW1lcmEuY2FsbCggdGhpcyApOwotCi0gICAgICAgIHRoaXMudHlwZSA9
ICdQZXJzcGVjdGl2ZUNhbWVyYSc7Ci0KLSAgICAgICAgdGhpcy5mb3YgPSBmb3YgIT09IHVuZGVm
aW5lZCA/IGZvdiA6IDUwOwotICAgICAgICB0aGlzLnpvb20gPSAxOwotCi0gICAgICAgIHRoaXMu
bmVhciA9IG5lYXIgIT09IHVuZGVmaW5lZCA/IG5lYXIgOiAwLjE7Ci0gICAgICAgIHRoaXMuZmFy
ID0gZmFyICE9PSB1bmRlZmluZWQgPyBmYXIgOiAyMDAwOwotICAgICAgICB0aGlzLmZvY3VzID0g
MTA7Ci0KLSAgICAgICAgdGhpcy5hc3BlY3QgPSBhc3BlY3QgIT09IHVuZGVmaW5lZCA/IGFzcGVj
dCA6IDE7Ci0gICAgICAgIHRoaXMudmlldyA9IG51bGw7CisgICAgZnVuY3Rpb24gQXJyYXlDYW1l
cmEoIGFycmF5ICkgewogCi0gICAgICAgIHRoaXMuZmlsbUdhdWdlID0gMzU7ICAgIC8vIHdpZHRo
IG9mIHRoZSBmaWxtIChkZWZhdWx0IGluIG1pbGxpbWV0ZXJzKQotICAgICAgICB0aGlzLmZpbG1P
ZmZzZXQgPSAwOyAgICAvLyBob3Jpem9udGFsIGZpbG0gb2Zmc2V0IChzYW1lIHVuaXQgYXMgZ2F1
Z2UpCisgICAgICAgIFBlcnNwZWN0aXZlQ2FtZXJhLmNhbGwoIHRoaXMgKTsKIAotICAgICAgICB0
aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTsKKyAgICAgICAgdGhpcy5jYW1lcmFzID0gYXJy
YXkgfHwgW107CiAKICAgICB9CiAKLSAgICBQZXJzcGVjdGl2ZUNhbWVyYS5wcm90b3R5cGUgPSBP
YmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBDYW1lcmEucHJvdG90eXBlICksIHsKLQotICAg
ICAgICBjb25zdHJ1Y3RvcjogUGVyc3BlY3RpdmVDYW1lcmEsCi0KLSAgICAgICAgaXNQZXJzcGVj
dGl2ZUNhbWVyYTogdHJ1ZSwKLQotICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHNvdXJjZSwgcmVj
dXJzaXZlICkgewotCi0gICAgICAgICAgICBDYW1lcmEucHJvdG90eXBlLmNvcHkuY2FsbCggdGhp
cywgc291cmNlLCByZWN1cnNpdmUgKTsKLQotICAgICAgICAgICAgdGhpcy5mb3YgPSBzb3VyY2Uu
Zm92OwotICAgICAgICAgICAgdGhpcy56b29tID0gc291cmNlLnpvb207Ci0KLSAgICAgICAgICAg
IHRoaXMubmVhciA9IHNvdXJjZS5uZWFyOwotICAgICAgICAgICAgdGhpcy5mYXIgPSBzb3VyY2Uu
ZmFyOwotICAgICAgICAgICAgdGhpcy5mb2N1cyA9IHNvdXJjZS5mb2N1czsKLQotICAgICAgICAg
ICAgdGhpcy5hc3BlY3QgPSBzb3VyY2UuYXNwZWN0OwotICAgICAgICAgICAgdGhpcy52aWV3ID0g
c291cmNlLnZpZXcgPT09IG51bGwgPyBudWxsIDogT2JqZWN0LmFzc2lnbigge30sIHNvdXJjZS52
aWV3ICk7Ci0KLSAgICAgICAgICAgIHRoaXMuZmlsbUdhdWdlID0gc291cmNlLmZpbG1HYXVnZTsK
LSAgICAgICAgICAgIHRoaXMuZmlsbU9mZnNldCA9IHNvdXJjZS5maWxtT2Zmc2V0OwotCi0gICAg
ICAgICAgICByZXR1cm4gdGhpczsKLQotICAgICAgICB9LAotCi0gICAgICAgIC8qKgotICAgICAg
ICAgKiBTZXRzIHRoZSBGT1YgYnkgZm9jYWwgbGVuZ3RoIGluIHJlc3BlY3QgdG8gdGhlIGN1cnJl
bnQgLmZpbG1HYXVnZS4KLSAgICAgICAgICoKLSAgICAgICAgICogVGhlIGRlZmF1bHQgZmlsbSBn
YXVnZSBpcyAzNSwgc28gdGhhdCB0aGUgZm9jYWwgbGVuZ3RoIGNhbiBiZSBzcGVjaWZpZWQgZm9y
Ci0gICAgICAgICAqIGEgMzVtbSAoZnVsbCBmcmFtZSkgY2FtZXJhLgotICAgICAgICAgKgotICAg
ICAgICAgKiBWYWx1ZXMgZm9yIGZvY2FsIGxlbmd0aCBhbmQgZmlsbSBnYXVnZSBtdXN0IGhhdmUg
dGhlIHNhbWUgdW5pdC4KLSAgICAgICAgICovCi0gICAgICAgIHNldEZvY2FsTGVuZ3RoOiBmdW5j
dGlvbiAoIGZvY2FsTGVuZ3RoICkgewotCi0gICAgICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy5i
b2JhdGtpbnMuY29tL3Bob3RvZ3JhcGh5L3RlY2huaWNhbC9maWVsZF9vZl92aWV3Lmh0bWwKLSAg
ICAgICAgICAgIHZhciB2RXh0ZW50U2xvcGUgPSAwLjUgKiB0aGlzLmdldEZpbG1IZWlnaHQoKSAv
IGZvY2FsTGVuZ3RoOwotCi0gICAgICAgICAgICB0aGlzLmZvdiA9IF9NYXRoLlJBRDJERUcgKiAy
ICogTWF0aC5hdGFuKCB2RXh0ZW50U2xvcGUgKTsKLSAgICAgICAgICAgIHRoaXMudXBkYXRlUHJv
amVjdGlvbk1hdHJpeCgpOwotCi0gICAgICAgIH0sCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAq
IENhbGN1bGF0ZXMgdGhlIGZvY2FsIGxlbmd0aCBmcm9tIHRoZSBjdXJyZW50IC5mb3YgYW5kIC5m
aWxtR2F1Z2UuCi0gICAgICAgICAqLwotICAgICAgICBnZXRGb2NhbExlbmd0aDogZnVuY3Rpb24g
KCkgewotCi0gICAgICAgICAgICB2YXIgdkV4dGVudFNsb3BlID0gTWF0aC50YW4oIF9NYXRoLkRF
RzJSQUQgKiAwLjUgKiB0aGlzLmZvdiApOwotCi0gICAgICAgICAgICByZXR1cm4gMC41ICogdGhp
cy5nZXRGaWxtSGVpZ2h0KCkgLyB2RXh0ZW50U2xvcGU7Ci0KLSAgICAgICAgfSwKLQotICAgICAg
ICBnZXRFZmZlY3RpdmVGT1Y6IGZ1bmN0aW9uICgpIHsKLQotICAgICAgICAgICAgcmV0dXJuIF9N
YXRoLlJBRDJERUcgKiAyICogTWF0aC5hdGFuKAotICAgICAgICAgICAgICAgIE1hdGgudGFuKCBf
TWF0aC5ERUcyUkFEICogMC41ICogdGhpcy5mb3YgKSAvIHRoaXMuem9vbSApOwotCi0gICAgICAg
IH0sCi0KLSAgICAgICAgZ2V0RmlsbVdpZHRoOiBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAg
IC8vIGZpbG0gbm90IGNvbXBsZXRlbHkgY292ZXJlZCBpbiBwb3J0cmFpdCBmb3JtYXQgKGFzcGVj
dCA8IDEpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5maWxtR2F1Z2UgKiBNYXRoLm1pbiggdGhp
cy5hc3BlY3QsIDEgKTsKLQotICAgICAgICB9LAotCi0gICAgICAgIGdldEZpbG1IZWlnaHQ6IGZ1
bmN0aW9uICgpIHsKLQotICAgICAgICAgICAgLy8gZmlsbSBub3QgY29tcGxldGVseSBjb3ZlcmVk
IGluIGxhbmRzY2FwZSBmb3JtYXQgKGFzcGVjdCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gdGhp
cy5maWxtR2F1Z2UgLyBNYXRoLm1heCggdGhpcy5hc3BlY3QsIDEgKTsKLQotICAgICAgICB9LAot
Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIGFuIG9mZnNldCBpbiBhIGxhcmdlciBmcnVz
dHVtLiBUaGlzIGlzIHVzZWZ1bCBmb3IgbXVsdGktd2luZG93IG9yCi0gICAgICAgICAqIG11bHRp
LW1vbml0b3IvbXVsdGktbWFjaGluZSBzZXR1cHMuCi0gICAgICAgICAqCi0gICAgICAgICAqIEZv
ciBleGFtcGxlLCBpZiB5b3UgaGF2ZSAzeDIgbW9uaXRvcnMgYW5kIGVhY2ggbW9uaXRvciBpcyAx
OTIweDEwODAgYW5kCi0gICAgICAgICAqIHRoZSBtb25pdG9ycyBhcmUgaW4gZ3JpZCBsaWtlIHRo
aXMKLSAgICAgICAgICoKLSAgICAgICAgICogICArLS0tKy0tLSstLS0rCi0gICAgICAgICAqICAg
fCBBIHwgQiB8IEMgfAotICAgICAgICAgKiAgICstLS0rLS0tKy0tLSsKLSAgICAgICAgICogICB8
IEQgfCBFIHwgRiB8Ci0gICAgICAgICAqICAgKy0tLSstLS0rLS0tKwotICAgICAgICAgKgotICAg
ICAgICAgKiB0aGVuIGZvciBlYWNoIG1vbml0b3IgeW91IHdvdWxkIGNhbGwgaXQgbGlrZSB0aGlz
Ci0gICAgICAgICAqCi0gICAgICAgICAqICAgdmFyIHcgPSAxOTIwOwotICAgICAgICAgKiAgIHZh
ciBoID0gMTA4MDsKLSAgICAgICAgICogICB2YXIgZnVsbFdpZHRoID0gdyAqIDM7Ci0gICAgICAg
ICAqICAgdmFyIGZ1bGxIZWlnaHQgPSBoICogMjsKLSAgICAgICAgICoKLSAgICAgICAgICogICAt
LUEtLQotICAgICAgICAgKiAgIGNhbWVyYS5zZXRPZmZzZXQoIGZ1bGxXaWR0aCwgZnVsbEhlaWdo
dCwgdyAqIDAsIGggKiAwLCB3LCBoICk7Ci0gICAgICAgICAqICAgLS1CLS0KLSAgICAgICAgICog
ICBjYW1lcmEuc2V0T2Zmc2V0KCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHcgKiAxLCBoICogMCwg
dywgaCApOwotICAgICAgICAgKiAgIC0tQy0tCi0gICAgICAgICAqICAgY2FtZXJhLnNldE9mZnNl
dCggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB3ICogMiwgaCAqIDAsIHcsIGggKTsKLSAgICAgICAg
ICogICAtLUQtLQotICAgICAgICAgKiAgIGNhbWVyYS5zZXRPZmZzZXQoIGZ1bGxXaWR0aCwgZnVs
bEhlaWdodCwgdyAqIDAsIGggKiAxLCB3LCBoICk7Ci0gICAgICAgICAqICAgLS1FLS0KLSAgICAg
ICAgICogICBjYW1lcmEuc2V0T2Zmc2V0KCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHcgKiAxLCBo
ICogMSwgdywgaCApOwotICAgICAgICAgKiAgIC0tRi0tCi0gICAgICAgICAqICAgY2FtZXJhLnNl
dE9mZnNldCggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB3ICogMiwgaCAqIDEsIHcsIGggKTsKLSAg
ICAgICAgICoKLSAgICAgICAgICogICBOb3RlIHRoZXJlIGlzIG5vIHJlYXNvbiBtb25pdG9ycyBo
YXZlIHRvIGJlIHRoZSBzYW1lIHNpemUgb3IgaW4gYSBncmlkLgotICAgICAgICAgKi8KLSAgICAg
ICAgc2V0Vmlld09mZnNldDogZnVuY3Rpb24gKCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHgsIHks
IHdpZHRoLCBoZWlnaHQgKSB7Ci0KLSAgICAgICAgICAgIHRoaXMuYXNwZWN0ID0gZnVsbFdpZHRo
IC8gZnVsbEhlaWdodDsKLQotICAgICAgICAgICAgaWYgKCB0aGlzLnZpZXcgPT09IG51bGwgKSB7
Ci0KLSAgICAgICAgICAgICAgICB0aGlzLnZpZXcgPSB7Ci0gICAgICAgICAgICAgICAgICAgIGVu
YWJsZWQ6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgIGZ1bGxXaWR0aDogMSwKLSAgICAgICAg
ICAgICAgICAgICAgZnVsbEhlaWdodDogMSwKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WDog
MCwKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WTogMCwKLSAgICAgICAgICAgICAgICAgICAg
d2lkdGg6IDEsCi0gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMQotICAgICAgICAgICAgICAg
IH07Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGhpcy52aWV3LmVuYWJsZWQgPSB0
cnVlOwotICAgICAgICAgICAgdGhpcy52aWV3LmZ1bGxXaWR0aCA9IGZ1bGxXaWR0aDsKLSAgICAg
ICAgICAgIHRoaXMudmlldy5mdWxsSGVpZ2h0ID0gZnVsbEhlaWdodDsKLSAgICAgICAgICAgIHRo
aXMudmlldy5vZmZzZXRYID0geDsKLSAgICAgICAgICAgIHRoaXMudmlldy5vZmZzZXRZID0geTsK
LSAgICAgICAgICAgIHRoaXMudmlldy53aWR0aCA9IHdpZHRoOwotICAgICAgICAgICAgdGhpcy52
aWV3LmhlaWdodCA9IGhlaWdodDsKLQotICAgICAgICAgICAgdGhpcy51cGRhdGVQcm9qZWN0aW9u
TWF0cml4KCk7Ci0KLSAgICAgICAgfSwKLQotICAgICAgICBjbGVhclZpZXdPZmZzZXQ6IGZ1bmN0
aW9uICgpIHsKLQotICAgICAgICAgICAgaWYgKCB0aGlzLnZpZXcgIT09IG51bGwgKSB7Ci0KLSAg
ICAgICAgICAgICAgICB0aGlzLnZpZXcuZW5hYmxlZCA9IGZhbHNlOwotCi0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpOwotCi0gICAgICAg
IH0sCi0KLSAgICAgICAgdXBkYXRlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkgewotCi0g
ICAgICAgICAgICB2YXIgbmVhciA9IHRoaXMubmVhciwKLSAgICAgICAgICAgICAgICB0b3AgPSBu
ZWFyICogTWF0aC50YW4oCi0gICAgICAgICAgICAgICAgICAgIF9NYXRoLkRFRzJSQUQgKiAwLjUg
KiB0aGlzLmZvdiApIC8gdGhpcy56b29tLAotICAgICAgICAgICAgICAgIGhlaWdodCA9IDIgKiB0
b3AsCi0gICAgICAgICAgICAgICAgd2lkdGggPSB0aGlzLmFzcGVjdCAqIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICBsZWZ0ID0gLSAwLjUgKiB3aWR0aCwKLSAgICAgICAgICAgICAgICB2aWV3ID0g
dGhpcy52aWV3OwotCi0gICAgICAgICAgICBpZiAoIHRoaXMudmlldyAhPT0gbnVsbCAmJiB0aGlz
LnZpZXcuZW5hYmxlZCApIHsKLQotICAgICAgICAgICAgICAgIHZhciBmdWxsV2lkdGggPSB2aWV3
LmZ1bGxXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgZnVsbEhlaWdodCA9IHZpZXcuZnVsbEhl
aWdodDsKLQotICAgICAgICAgICAgICAgIGxlZnQgKz0gdmlldy5vZmZzZXRYICogd2lkdGggLyBm
dWxsV2lkdGg7Ci0gICAgICAgICAgICAgICAgdG9wIC09IHZpZXcub2Zmc2V0WSAqIGhlaWdodCAv
IGZ1bGxIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgd2lkdGggKj0gdmlldy53aWR0aCAvIGZ1bGxX
aWR0aDsKLSAgICAgICAgICAgICAgICBoZWlnaHQgKj0gdmlldy5oZWlnaHQgLyBmdWxsSGVpZ2h0
OwotCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBza2V3ID0gdGhpcy5maWxtT2Zm
c2V0OwotICAgICAgICAgICAgaWYgKCBza2V3ICE9PSAwICkgbGVmdCArPSBuZWFyICogc2tldyAv
IHRoaXMuZ2V0RmlsbVdpZHRoKCk7Ci0KLSAgICAgICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJp
eC5tYWtlUGVyc3BlY3RpdmUoIGxlZnQsIGxlZnQgKyB3aWR0aCwgdG9wLCB0b3AgLSBoZWlnaHQs
IG5lYXIsIHRoaXMuZmFyICk7CisgICAgQXJyYXlDYW1lcmEucHJvdG90eXBlID0gT2JqZWN0LmFz
c2lnbiggT2JqZWN0LmNyZWF0ZSggUGVyc3BlY3RpdmVDYW1lcmEucHJvdG90eXBlICksIHsKIAot
ICAgICAgICB9LAorICAgICAgICBjb25zdHJ1Y3RvcjogQXJyYXlDYW1lcmEsCiAKLSAgICAgICAg
dG9KU09OOiBmdW5jdGlvbiAoIG1ldGEgKSB7CisgICAgICAgIGlzQXJyYXlDYW1lcmE6IHRydWUK
IAotICAgICAgICAgICAgdmFyIGRhdGEgPSBPYmplY3QzRC5wcm90b3R5cGUudG9KU09OLmNhbGwo
IHRoaXMsIG1ldGEgKTsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgIGRhdGEub2JqZWN0LmZvdiA9
IHRoaXMuZm92OwotICAgICAgICAgICAgZGF0YS5vYmplY3Quem9vbSA9IHRoaXMuem9vbTsKKyAg
ICAvKioKKyAgICAgKiBAYXV0aG9yIGpzYW50ZWxsIC8gaHR0cHM6Ly93d3cuanNhbnRlbGwuY29t
LworICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICovCiAK
LSAgICAgICAgICAgIGRhdGEub2JqZWN0Lm5lYXIgPSB0aGlzLm5lYXI7Ci0gICAgICAgICAgICBk
YXRhLm9iamVjdC5mYXIgPSB0aGlzLmZhcjsKLSAgICAgICAgICAgIGRhdGEub2JqZWN0LmZvY3Vz
ID0gdGhpcy5mb2N1czsKKyAgICB2YXIgY2FtZXJhTFBvcyA9IG5ldyBWZWN0b3IzKCk7CisgICAg
dmFyIGNhbWVyYVJQb3MgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICBkYXRhLm9iamVj
dC5hc3BlY3QgPSB0aGlzLmFzcGVjdDsKKyAgICAvKioKKyAgICAgKiBBc3N1bWVzIDIgY2FtZXJh
cyB0aGF0IGFyZSBwYXJhbGxlbCBhbmQgc2hhcmUgYW4gWC1heGlzLCBhbmQgdGhhdAorICAgICAq
IHRoZSBjYW1lcmFzJyBwcm9qZWN0aW9uIGFuZCB3b3JsZCBtYXRyaWNlcyBoYXZlIGFscmVhZHkg
YmVlbiBzZXQuCisgICAgICogQW5kIHRoYXQgbmVhciBhbmQgZmFyIHBsYW5lcyBhcmUgaWRlbnRp
Y2FsIGZvciBib3RoIGNhbWVyYXMuCisgICAgICogVmlzdWFsaXphdGlvbiBvZiB0aGlzIHRlY2hu
aXF1ZTogaHR0cHM6Ly9jb21wdXRlcmdyYXBoaWNzLnN0YWNrZXhjaGFuZ2UuY29tL2EvNDc2NQor
ICAgICAqLworICAgIGZ1bmN0aW9uIHNldFByb2plY3Rpb25Gcm9tVW5pb24oIGNhbWVyYSwgY2Ft
ZXJhTCwgY2FtZXJhUiApIHsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLnZpZXcgIT09IG51bGwg
KSBkYXRhLm9iamVjdC52aWV3ID0gT2JqZWN0LmFzc2lnbigge30sIHRoaXMudmlldyApOworICAg
ICAgICBjYW1lcmFMUG9zLnNldEZyb21NYXRyaXhQb3NpdGlvbiggY2FtZXJhTC5tYXRyaXhXb3Js
ZCApOworICAgICAgICBjYW1lcmFSUG9zLnNldEZyb21NYXRyaXhQb3NpdGlvbiggY2FtZXJhUi5t
YXRyaXhXb3JsZCApOwogCi0gICAgICAgICAgICBkYXRhLm9iamVjdC5maWxtR2F1Z2UgPSB0aGlz
LmZpbG1HYXVnZTsKLSAgICAgICAgICAgIGRhdGEub2JqZWN0LmZpbG1PZmZzZXQgPSB0aGlzLmZp
bG1PZmZzZXQ7CisgICAgICAgIHZhciBpcGQgPSBjYW1lcmFMUG9zLmRpc3RhbmNlVG8oIGNhbWVy
YVJQb3MgKTsKIAotICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgIHZhciBwcm9qTCA9
IGNhbWVyYUwucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50czsKKyAgICAgICAgdmFyIHByb2pSID0g
Y2FtZXJhUi5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzOwogCi0gICAgICAgIH0KKyAgICAgICAg
Ly8gVlIgc3lzdGVtcyB3aWxsIGhhdmUgaWRlbnRpY2FsIGZhciBhbmQgbmVhciBwbGFuZXMsIGFu
ZAorICAgICAgICAvLyBtb3N0IGxpa2VseSBpZGVudGljYWwgdG9wIGFuZCBib3R0b20gZnJ1c3R1
bSBleHRlbnRzLgorICAgICAgICAvLyBVc2UgdGhlIGxlZnQgY2FtZXJhIGZvciB0aGVzZSB2YWx1
ZXMuCisgICAgICAgIHZhciBuZWFyID0gcHJvakxbIDE0IF0gLyAoIHByb2pMWyAxMCBdIC0gMSAp
OworICAgICAgICB2YXIgZmFyID0gcHJvakxbIDE0IF0gLyAoIHByb2pMWyAxMCBdICsgMSApOwor
ICAgICAgICB2YXIgdG9wRm92ID0gKCBwcm9qTFsgOSBdICsgMSApIC8gcHJvakxbIDUgXTsKKyAg
ICAgICAgdmFyIGJvdHRvbUZvdiA9ICggcHJvakxbIDkgXSAtIDEgKSAvIHByb2pMWyA1IF07CiAK
LSAgICB9ICk7CisgICAgICAgIHZhciBsZWZ0Rm92ID0gKCBwcm9qTFsgOCBdIC0gMSApIC8gcHJv
akxbIDAgXTsKKyAgICAgICAgdmFyIHJpZ2h0Rm92ID0gKCBwcm9qUlsgOCBdICsgMSApIC8gcHJv
alJbIDAgXTsKKyAgICAgICAgdmFyIGxlZnQgPSBuZWFyICogbGVmdEZvdjsKKyAgICAgICAgdmFy
IHJpZ2h0ID0gbmVhciAqIHJpZ2h0Rm92OwogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBtcmRv
b2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKi8KKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRo
ZSBuZXcgY2FtZXJhJ3MgcG9zaXRpb24gb2Zmc2V0IGZyb20gdGhlCisgICAgICAgIC8vIGxlZnQg
Y2FtZXJhLiB4T2Zmc2V0IHNob3VsZCBiZSByb3VnaGx5IGhhbGYgYGlwZGAuCisgICAgICAgIHZh
ciB6T2Zmc2V0ID0gaXBkIC8gKCAtIGxlZnRGb3YgKyByaWdodEZvdiApOworICAgICAgICB2YXIg
eE9mZnNldCA9IHpPZmZzZXQgKiAtIGxlZnRGb3Y7CiAKLSAgICBmdW5jdGlvbiBBcnJheUNhbWVy
YSggYXJyYXkgKSB7CisgICAgICAgIC8vIFRPRE86IEJldHRlciB3YXkgdG8gYXBwbHkgdGhpcyBv
ZmZzZXQ/CisgICAgICAgIGNhbWVyYUwubWF0cml4V29ybGQuZGVjb21wb3NlKCBjYW1lcmEucG9z
aXRpb24sIGNhbWVyYS5xdWF0ZXJuaW9uLCBjYW1lcmEuc2NhbGUgKTsKKyAgICAgICAgY2FtZXJh
LnRyYW5zbGF0ZVgoIHhPZmZzZXQgKTsKKyAgICAgICAgY2FtZXJhLnRyYW5zbGF0ZVooIHpPZmZz
ZXQgKTsKKyAgICAgICAgY2FtZXJhLm1hdHJpeFdvcmxkLmNvbXBvc2UoIGNhbWVyYS5wb3NpdGlv
biwgY2FtZXJhLnF1YXRlcm5pb24sIGNhbWVyYS5zY2FsZSApOworICAgICAgICBjYW1lcmEubWF0
cml4V29ybGRJbnZlcnNlLmdldEludmVyc2UoIGNhbWVyYS5tYXRyaXhXb3JsZCApOwogCi0gICAg
ICAgIFBlcnNwZWN0aXZlQ2FtZXJhLmNhbGwoIHRoaXMgKTsKKyAgICAgICAgLy8gRmluZCB0aGUg
dW5pb24gb2YgdGhlIGZydXN0dW0gdmFsdWVzIG9mIHRoZSBjYW1lcmFzIGFuZCBzY2FsZQorICAg
ICAgICAvLyB0aGUgdmFsdWVzIHNvIHRoYXQgdGhlIG5lYXIgcGxhbmUncyBwb3NpdGlvbiBkb2Vz
IG5vdCBjaGFuZ2UgaW4gd29ybGQgc3BhY2UsCisgICAgICAgIC8vIGFsdGhvdWdoIG11c3Qgbm93
IGJlIHJlbGF0aXZlIHRvIHRoZSBuZXcgdW5pb24gY2FtZXJhLgorICAgICAgICB2YXIgbmVhcjIg
PSBuZWFyICsgek9mZnNldDsKKyAgICAgICAgdmFyIGZhcjIgPSBmYXIgKyB6T2Zmc2V0OworICAg
ICAgICB2YXIgbGVmdDIgPSBsZWZ0IC0geE9mZnNldDsKKyAgICAgICAgdmFyIHJpZ2h0MiA9IHJp
Z2h0ICsgKCBpcGQgLSB4T2Zmc2V0ICk7CisgICAgICAgIHZhciB0b3AyID0gdG9wRm92ICogZmFy
IC8gZmFyMiAqIG5lYXIyOworICAgICAgICB2YXIgYm90dG9tMiA9IGJvdHRvbUZvdiAqIGZhciAv
IGZhcjIgKiBuZWFyMjsKIAotICAgICAgICB0aGlzLmNhbWVyYXMgPSBhcnJheSB8fCBbXTsKKyAg
ICAgICAgY2FtZXJhLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKCBsZWZ0Miwgcmln
aHQyLCB0b3AyLCBib3R0b20yLCBuZWFyMiwgZmFyMiApOwogCiAgICAgfQogCi0gICAgQXJyYXlD
YW1lcmEucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggUGVyc3BlY3Rp
dmVDYW1lcmEucHJvdG90eXBlICksIHsKLQotICAgICAgICBjb25zdHJ1Y3RvcjogQXJyYXlDYW1l
cmEsCi0KLSAgICAgICAgaXNBcnJheUNhbWVyYTogdHJ1ZQotCi0gICAgfSApOwotCiAgICAgLyoq
CiAgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KICAgICAgKi8KIAog
ICAgIGZ1bmN0aW9uIFdlYlZSTWFuYWdlciggcmVuZGVyZXIgKSB7CiAKKyAgICAgICAgdmFyIHJl
bmRlcldpZHRoLCByZW5kZXJIZWlnaHQ7CiAgICAgICAgIHZhciBzY29wZSA9IHRoaXM7CiAKICAg
ICAgICAgdmFyIGRldmljZSA9IG51bGw7CkBAIC0yMTQyMyw2ICsyMjMxNSwxMCBAQAogICAgICAg
ICB2YXIgc3RhbmRpbmdNYXRyaXggPSBuZXcgTWF0cml4NCgpOwogICAgICAgICB2YXIgc3RhbmRp
bmdNYXRyaXhJbnZlcnNlID0gbmV3IE1hdHJpeDQoKTsKIAorICAgICAgICB2YXIgZnJhbWVidWZm
ZXJTY2FsZUZhY3RvciA9IDEuMDsKKworICAgICAgICB2YXIgcmVmZXJlbmNlU3BhY2VUeXBlID0g
J2xvY2FsLWZsb29yJzsKKwogICAgICAgICBpZiAoIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmlu
ZWQnICYmICdWUkZyYW1lRGF0YScgaW4gd2luZG93ICkgewogCiAgICAgICAgICAgICBmcmFtZURh
dGEgPSBuZXcgd2luZG93LlZSRnJhbWVEYXRhKCk7CkBAIC0yMTQzNSwxMSArMjIzMzEsMTEgQEAK
ICAgICAgICAgdmFyIHRlbXBQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7CiAKICAgICAgICAgdmFy
IGNhbWVyYUwgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKTsKLSAgICAgICAgY2FtZXJhTC5ib3Vu
ZHMgPSBuZXcgVmVjdG9yNCggMC4wLCAwLjAsIDAuNSwgMS4wICk7CisgICAgICAgIGNhbWVyYUwu
dmlld3BvcnQgPSBuZXcgVmVjdG9yNCgpOwogICAgICAgICBjYW1lcmFMLmxheWVycy5lbmFibGUo
IDEgKTsKIAogICAgICAgICB2YXIgY2FtZXJhUiA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpOwot
ICAgICAgICBjYW1lcmFSLmJvdW5kcyA9IG5ldyBWZWN0b3I0KCAwLjUsIDAuMCwgMC41LCAxLjAg
KTsKKyAgICAgICAgY2FtZXJhUi52aWV3cG9ydCA9IG5ldyBWZWN0b3I0KCk7CiAgICAgICAgIGNh
bWVyYVIubGF5ZXJzLmVuYWJsZSggMiApOwogCiAgICAgICAgIHZhciBjYW1lcmFWUiA9IG5ldyBB
cnJheUNhbWVyYSggWyBjYW1lcmFMLCBjYW1lcmFSIF0gKTsKQEAgLTIxNDU0LDM2ICsyMjM1MCw0
NyBAQAogCiAgICAgICAgIH0KIAotICAgICAgICB2YXIgY3VycmVudFNpemUsIGN1cnJlbnRQaXhl
bFJhdGlvOworICAgICAgICB2YXIgY3VycmVudFNpemUgPSBuZXcgVmVjdG9yMigpLCBjdXJyZW50
UGl4ZWxSYXRpbzsKIAogICAgICAgICBmdW5jdGlvbiBvblZSRGlzcGxheVByZXNlbnRDaGFuZ2Uo
KSB7CiAKICAgICAgICAgICAgIGlmICggaXNQcmVzZW50aW5nKCkgKSB7CiAKICAgICAgICAgICAg
ICAgICB2YXIgZXllUGFyYW1ldGVycyA9IGRldmljZS5nZXRFeWVQYXJhbWV0ZXJzKCAnbGVmdCcg
KTsKLSAgICAgICAgICAgICAgICB2YXIgcmVuZGVyV2lkdGggPSBleWVQYXJhbWV0ZXJzLnJlbmRl
cldpZHRoOwotICAgICAgICAgICAgICAgIHZhciByZW5kZXJIZWlnaHQgPSBleWVQYXJhbWV0ZXJz
LnJlbmRlckhlaWdodDsKKyAgICAgICAgICAgICAgICByZW5kZXJXaWR0aCA9IDIgKiBleWVQYXJh
bWV0ZXJzLnJlbmRlcldpZHRoICogZnJhbWVidWZmZXJTY2FsZUZhY3RvcjsKKyAgICAgICAgICAg
ICAgICByZW5kZXJIZWlnaHQgPSBleWVQYXJhbWV0ZXJzLnJlbmRlckhlaWdodCAqIGZyYW1lYnVm
ZmVyU2NhbGVGYWN0b3I7CiAKICAgICAgICAgICAgICAgICBjdXJyZW50UGl4ZWxSYXRpbyA9IHJl
bmRlcmVyLmdldFBpeGVsUmF0aW8oKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50U2l6ZSA9IHJl
bmRlcmVyLmdldFNpemUoKTsKKyAgICAgICAgICAgICAgICByZW5kZXJlci5nZXRTaXplKCBjdXJy
ZW50U2l6ZSApOworCisgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0RHJhd2luZ0J1ZmZlclNp
emUoIHJlbmRlcldpZHRoLCByZW5kZXJIZWlnaHQsIDEgKTsKIAotICAgICAgICAgICAgICAgIHJl
bmRlcmVyLnNldERyYXdpbmdCdWZmZXJTaXplKCByZW5kZXJXaWR0aCAqIDIsIHJlbmRlckhlaWdo
dCwgMSApOworICAgICAgICAgICAgICAgIGNhbWVyYUwudmlld3BvcnQuc2V0KCAwLCAwLCByZW5k
ZXJXaWR0aCAvIDIsIHJlbmRlckhlaWdodCApOworICAgICAgICAgICAgICAgIGNhbWVyYVIudmll
d3BvcnQuc2V0KCByZW5kZXJXaWR0aCAvIDIsIDAsIHJlbmRlcldpZHRoIC8gMiwgcmVuZGVySGVp
Z2h0ICk7CiAKICAgICAgICAgICAgICAgICBhbmltYXRpb24uc3RhcnQoKTsKIAotICAgICAgICAg
ICAgfSBlbHNlIGlmICggc2NvcGUuZW5hYmxlZCApIHsKKyAgICAgICAgICAgICAgICBzY29wZS5k
aXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdzZXNzaW9uc3RhcnQnIH0gKTsKIAotICAgICAgICAgICAg
ICAgIHJlbmRlcmVyLnNldERyYXdpbmdCdWZmZXJTaXplKCBjdXJyZW50U2l6ZS53aWR0aCwgY3Vy
cmVudFNpemUuaGVpZ2h0LCBjdXJyZW50UGl4ZWxSYXRpbyApOworICAgICAgICAgICAgfSBlbHNl
IHsKKworICAgICAgICAgICAgICAgIGlmICggc2NvcGUuZW5hYmxlZCApIHsKKworICAgICAgICAg
ICAgICAgICAgICByZW5kZXJlci5zZXREcmF3aW5nQnVmZmVyU2l6ZSggY3VycmVudFNpemUud2lk
dGgsIGN1cnJlbnRTaXplLmhlaWdodCwgY3VycmVudFBpeGVsUmF0aW8gKTsKKworICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGFuaW1hdGlvbi5zdG9wKCk7CiAKKyAgICAgICAg
ICAgICAgICBzY29wZS5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdzZXNzaW9uZW5kJyB9ICk7CisK
ICAgICAgICAgICAgIH0KIAogICAgICAgICB9CiAKICAgICAgICAgLy8KIAotICAgICAgICB2YXIg
aXNUcmlnZ2VyUHJlc3NlZCA9IGZhbHNlOworICAgICAgICB2YXIgdHJpZ2dlcnMgPSBbXTsKIAog
ICAgICAgICBmdW5jdGlvbiBmaW5kR2FtZXBhZCggaWQgKSB7CiAKQEAgLTIxNDk2LDYgKzIyNDAz
LDcgQEAKICAgICAgICAgICAgICAgICBpZiAoIGdhbWVwYWQgJiYgKCBnYW1lcGFkLmlkID09PSAn
RGF5ZHJlYW0gQ29udHJvbGxlcicgfHwKICAgICAgICAgICAgICAgICAgICAgZ2FtZXBhZC5pZCA9
PT0gJ0dlYXIgVlIgQ29udHJvbGxlcicgfHwgZ2FtZXBhZC5pZCA9PT0gJ09jdWx1cyBHbyBDb250
cm9sbGVyJyB8fAogICAgICAgICAgICAgICAgICAgICBnYW1lcGFkLmlkID09PSAnT3BlblZSIEdh
bWVwYWQnIHx8IGdhbWVwYWQuaWQuc3RhcnRzV2l0aCggJ09jdWx1cyBUb3VjaCcgKSB8fAorICAg
ICAgICAgICAgICAgICAgICBnYW1lcGFkLmlkLnN0YXJ0c1dpdGgoICdIVEMgVml2ZSBGb2N1cycg
KSB8fAogICAgICAgICAgICAgICAgICAgICBnYW1lcGFkLmlkLnN0YXJ0c1dpdGgoICdTcGF0aWFs
IENvbnRyb2xsZXInICkgKSApIHsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoIGogPT09IGlk
ICkgcmV0dXJuIGdhbWVwYWQ7CkBAIC0yMTUyMCw3ICsyMjQyOCw3IEBACiAKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBnYW1lcGFkLnBvc2UgPT09IG51bGwgKSByZXR1cm47CiAKLSAgICAgICAg
ICAgICAgICAgICAgLy8gIFBvc2UKKyAgICAgICAgICAgICAgICAgICAgLy8gUG9zZQogCiAgICAg
ICAgICAgICAgICAgICAgIHZhciBwb3NlID0gZ2FtZXBhZC5wb3NlOwogCkBAIC0yMTUzNCwxNSAr
MjI0NDIsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5tYXRyaXhXb3JsZE5l
ZWRzVXBkYXRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci52aXNpYmxl
ID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgICAgICAvLyAgVHJpZ2dlcgorICAgICAgICAgICAg
ICAgICAgICAvLyBUcmlnZ2VyCiAKICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1dHRvbklkID0g
Z2FtZXBhZC5pZCA9PT0gJ0RheWRyZWFtIENvbnRyb2xsZXInID8gMCA6IDE7CiAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCBpc1RyaWdnZXJQcmVzc2VkICE9PSBnYW1lcGFkLmJ1dHRvbnNbIGJ1
dHRvbklkIF0ucHJlc3NlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0cmlnZ2Vyc1sg
aSBdID09PSB1bmRlZmluZWQgKSB0cmlnZ2Vyc1sgaSBdID0gZmFsc2U7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlzVHJpZ2dlclByZXNzZWQgPSBnYW1lcGFkLmJ1dHRvbnNbIGJ1dHRvbklk
IF0ucHJlc3NlZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0cmlnZ2Vyc1sgaSBdICE9PSBn
YW1lcGFkLmJ1dHRvbnNbIGJ1dHRvbklkIF0ucHJlc3NlZCApIHsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBpc1RyaWdnZXJQcmVzc2VkICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdHJpZ2dlcnNbIGkgXSA9IGdhbWVwYWQuYnV0dG9uc1sgYnV0dG9uSWQgXS5wcmVzc2VkOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRyaWdnZXJzWyBpIF0gPT09IHRydWUgKSB7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmRpc3BhdGNoRXZlbnQo
IHsgdHlwZTogJ3NlbGVjdHN0YXJ0JyB9ICk7CiAKQEAgLTIxNTY1LDEwICsyMjQ3NSwxOSBAQAog
CiAgICAgICAgIH0KIAorICAgICAgICBmdW5jdGlvbiB1cGRhdGVWaWV3cG9ydEZyb21Cb3VuZHMo
IHZpZXdwb3J0LCBib3VuZHMgKSB7CisKKyAgICAgICAgICAgIGlmICggYm91bmRzICE9PSBudWxs
ICYmIGJvdW5kcy5sZW5ndGggPT09IDQgKSB7CisKKyAgICAgICAgICAgICAgICB2aWV3cG9ydC5z
ZXQoIGJvdW5kc1sgMCBdICogcmVuZGVyV2lkdGgsIGJvdW5kc1sgMSBdICogcmVuZGVySGVpZ2h0
LCBib3VuZHNbIDIgXSAqIHJlbmRlcldpZHRoLCBib3VuZHNbIDMgXSAqIHJlbmRlckhlaWdodCAp
OworCisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCiAgICAgICAgIC8vCiAKICAgICAgICAg
dGhpcy5lbmFibGVkID0gZmFsc2U7Ci0gICAgICAgIHRoaXMudXNlckhlaWdodCA9IDEuNjsKIAog
ICAgICAgICB0aGlzLmdldENvbnRyb2xsZXIgPSBmdW5jdGlvbiAoIGlkICkgewogCkBAIC0yMTYw
Miw2ICsyMjUyMSwxOCBAQAogCiAgICAgICAgIH07CiAKKyAgICAgICAgdGhpcy5zZXRGcmFtZWJ1
ZmZlclNjYWxlRmFjdG9yID0gZnVuY3Rpb24gKCB2YWx1ZSApIHsKKworICAgICAgICAgICAgZnJh
bWVidWZmZXJTY2FsZUZhY3RvciA9IHZhbHVlOworCisgICAgICAgIH07CisKKyAgICAgICAgdGhp
cy5zZXRSZWZlcmVuY2VTcGFjZVR5cGUgPSBmdW5jdGlvbiAoIHZhbHVlICkgeworCisgICAgICAg
ICAgICByZWZlcmVuY2VTcGFjZVR5cGUgPSB2YWx1ZTsKKworICAgICAgICB9OworCiAgICAgICAg
IHRoaXMuc2V0UG9zZVRhcmdldCA9IGZ1bmN0aW9uICggb2JqZWN0ICkgewogCiAgICAgICAgICAg
ICBpZiAoIG9iamVjdCAhPT0gdW5kZWZpbmVkICkgcG9zZVRhcmdldCA9IG9iamVjdDsKQEAgLTIx
NjEwLDkgKzIyNTQxLDEzIEBACiAKICAgICAgICAgdGhpcy5nZXRDYW1lcmEgPSBmdW5jdGlvbiAo
IGNhbWVyYSApIHsKIAotICAgICAgICAgICAgaWYgKCBkZXZpY2UgPT09IG51bGwgKSB7CisgICAg
ICAgICAgICB2YXIgdXNlckhlaWdodCA9IHJlZmVyZW5jZVNwYWNlVHlwZSA9PT0gJ2xvY2FsLWZs
b29yJyA/IDEuNiA6IDA7CisKKyAgICAgICAgICAgIGlmICggaXNQcmVzZW50aW5nKCkgPT09IGZh
bHNlICkgeworCisgICAgICAgICAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldCggMCwgdXNlckhl
aWdodCwgMCApOworICAgICAgICAgICAgICAgIGNhbWVyYS5yb3RhdGlvbi5zZXQoIDAsIDAsIDAg
KTsKIAotICAgICAgICAgICAgICAgIGNhbWVyYS5wb3NpdGlvbi5zZXQoIDAsIHNjb3BlLnVzZXJI
ZWlnaHQsIDAgKTsKICAgICAgICAgICAgICAgICByZXR1cm4gY2FtZXJhOwogCiAgICAgICAgICAg
ICB9CkBAIC0yMTYyNCwxNSArMjI1NTksMTkgQEAKIAogICAgICAgICAgICAgLy8KIAotICAgICAg
ICAgICAgdmFyIHN0YWdlUGFyYW1ldGVycyA9IGRldmljZS5zdGFnZVBhcmFtZXRlcnM7CisgICAg
ICAgICAgICBpZiAoIHJlZmVyZW5jZVNwYWNlVHlwZSA9PT0gJ2xvY2FsLWZsb29yJyApIHsKIAot
ICAgICAgICAgICAgaWYgKCBzdGFnZVBhcmFtZXRlcnMgKSB7CisgICAgICAgICAgICAgICAgdmFy
IHN0YWdlUGFyYW1ldGVycyA9IGRldmljZS5zdGFnZVBhcmFtZXRlcnM7CiAKLSAgICAgICAgICAg
ICAgICBzdGFuZGluZ01hdHJpeC5mcm9tQXJyYXkoIHN0YWdlUGFyYW1ldGVycy5zaXR0aW5nVG9T
dGFuZGluZ1RyYW5zZm9ybSApOworICAgICAgICAgICAgICAgIGlmICggc3RhZ2VQYXJhbWV0ZXJz
ICkgewogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdGFuZGlu
Z01hdHJpeC5mcm9tQXJyYXkoIHN0YWdlUGFyYW1ldGVycy5zaXR0aW5nVG9TdGFuZGluZ1RyYW5z
Zm9ybSApOworCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgIHN0
YW5kaW5nTWF0cml4Lm1ha2VUcmFuc2xhdGlvbiggMCwgc2NvcGUudXNlckhlaWdodCwgMCApOwor
ICAgICAgICAgICAgICAgICAgICBzdGFuZGluZ01hdHJpeC5tYWtlVHJhbnNsYXRpb24oIDAsIHVz
ZXJIZWlnaHQsIDAgKTsKKworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgfQogCkBA
IC0yMTY2Miw4ICsyMjYwMSw2IEBACiAKICAgICAgICAgICAgIHBvc2VPYmplY3QudXBkYXRlTWF0
cml4V29ybGQoKTsKIAotICAgICAgICAgICAgaWYgKCBkZXZpY2UuaXNQcmVzZW50aW5nID09PSBm
YWxzZSApIHJldHVybiBjYW1lcmE7Ci0KICAgICAgICAgICAgIC8vCiAKICAgICAgICAgICAgIGNh
bWVyYUwubmVhciA9IGNhbWVyYS5uZWFyOwpAQCAtMjE2NzIsOSArMjI2MDksNiBAQAogICAgICAg
ICAgICAgY2FtZXJhTC5mYXIgPSBjYW1lcmEuZmFyOwogICAgICAgICAgICAgY2FtZXJhUi5mYXIg
PSBjYW1lcmEuZmFyOwogCi0gICAgICAgICAgICBjYW1lcmFWUi5tYXRyaXhXb3JsZC5jb3B5KCBj
YW1lcmEubWF0cml4V29ybGQgKTsKLSAgICAgICAgICAgIGNhbWVyYVZSLm1hdHJpeFdvcmxkSW52
ZXJzZS5jb3B5KCBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlICk7Ci0KICAgICAgICAgICAgIGNh
bWVyYUwubWF0cml4V29ybGRJbnZlcnNlLmZyb21BcnJheSggZnJhbWVEYXRhLmxlZnRWaWV3TWF0
cml4ICk7CiAgICAgICAgICAgICBjYW1lcmFSLm1hdHJpeFdvcmxkSW52ZXJzZS5mcm9tQXJyYXko
IGZyYW1lRGF0YS5yaWdodFZpZXdNYXRyaXggKTsKIApAQCAtMjE2ODIsOCArMjI2MTYsMTIgQEAK
IAogICAgICAgICAgICAgc3RhbmRpbmdNYXRyaXhJbnZlcnNlLmdldEludmVyc2UoIHN0YW5kaW5n
TWF0cml4ICk7CiAKLSAgICAgICAgICAgIGNhbWVyYUwubWF0cml4V29ybGRJbnZlcnNlLm11bHRp
cGx5KCBzdGFuZGluZ01hdHJpeEludmVyc2UgKTsKLSAgICAgICAgICAgIGNhbWVyYVIubWF0cml4
V29ybGRJbnZlcnNlLm11bHRpcGx5KCBzdGFuZGluZ01hdHJpeEludmVyc2UgKTsKKyAgICAgICAg
ICAgIGlmICggcmVmZXJlbmNlU3BhY2VUeXBlID09PSAnbG9jYWwtZmxvb3InICkgeworCisgICAg
ICAgICAgICAgICAgY2FtZXJhTC5tYXRyaXhXb3JsZEludmVyc2UubXVsdGlwbHkoIHN0YW5kaW5n
TWF0cml4SW52ZXJzZSApOworICAgICAgICAgICAgICAgIGNhbWVyYVIubWF0cml4V29ybGRJbnZl
cnNlLm11bHRpcGx5KCBzdGFuZGluZ01hdHJpeEludmVyc2UgKTsKKworICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICB2YXIgcGFyZW50ID0gcG9zZU9iamVjdC5wYXJlbnQ7CiAKQEAgLTIxNzA0
LDEwICsyMjY0Miw3IEBACiAgICAgICAgICAgICBjYW1lcmFMLnByb2plY3Rpb25NYXRyaXguZnJv
bUFycmF5KCBmcmFtZURhdGEubGVmdFByb2plY3Rpb25NYXRyaXggKTsKICAgICAgICAgICAgIGNh
bWVyYVIucHJvamVjdGlvbk1hdHJpeC5mcm9tQXJyYXkoIGZyYW1lRGF0YS5yaWdodFByb2plY3Rp
b25NYXRyaXggKTsKIAotICAgICAgICAgICAgLy8gSEFDSyAobXJkb29iKQotICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9naXRodWIuY29tL3czYy93ZWJ2ci9pc3N1ZXMvMjAzCi0KLSAgICAgICAgICAg
IGNhbWVyYVZSLnByb2plY3Rpb25NYXRyaXguY29weSggY2FtZXJhTC5wcm9qZWN0aW9uTWF0cml4
ICk7CisgICAgICAgICAgICBzZXRQcm9qZWN0aW9uRnJvbVVuaW9uKCBjYW1lcmFWUiwgY2FtZXJh
TCwgY2FtZXJhUiApOwogCiAgICAgICAgICAgICAvLwogCkBAIC0yMTcxNywxNyArMjI2NTIsOCBA
QAogCiAgICAgICAgICAgICAgICAgdmFyIGxheWVyID0gbGF5ZXJzWyAwIF07CiAKLSAgICAgICAg
ICAgICAgICBpZiAoIGxheWVyLmxlZnRCb3VuZHMgIT09IG51bGwgJiYgbGF5ZXIubGVmdEJvdW5k
cy5sZW5ndGggPT09IDQgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FtZXJhTC5ib3VuZHMu
ZnJvbUFycmF5KCBsYXllci5sZWZ0Qm91bmRzICk7Ci0KLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoIGxheWVyLnJpZ2h0Qm91bmRzICE9PSBudWxsICYmIGxheWVyLnJp
Z2h0Qm91bmRzLmxlbmd0aCA9PT0gNCApIHsKLQotICAgICAgICAgICAgICAgICAgICBjYW1lcmFS
LmJvdW5kcy5mcm9tQXJyYXkoIGxheWVyLnJpZ2h0Qm91bmRzICk7Ci0KLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdXBkYXRlVmlld3BvcnRGcm9tQm91bmRzKCBjYW1lcmFMLnZp
ZXdwb3J0LCBsYXllci5sZWZ0Qm91bmRzICk7CisgICAgICAgICAgICAgICAgdXBkYXRlVmlld3Bv
cnRGcm9tQm91bmRzKCBjYW1lcmFSLnZpZXdwb3J0LCBsYXllci5yaWdodEJvdW5kcyApOwogCiAg
ICAgICAgICAgICB9CiAKQEAgLTIxNzUzLDYgKzIyNjc5LDggQEAKIAogICAgICAgICAgICAgYW5p
bWF0aW9uLnNldEFuaW1hdGlvbkxvb3AoIGNhbGxiYWNrICk7CiAKKyAgICAgICAgICAgIGlmICgg
aXNQcmVzZW50aW5nKCkgKSBhbmltYXRpb24uc3RhcnQoKTsKKwogICAgICAgICB9OwogCiAgICAg
ICAgIHRoaXMuc3VibWl0RnJhbWUgPSBmdW5jdGlvbiAoKSB7CkBAIC0yMTc3MSwyMCArMjI2OTks
MzIgQEAKIAogICAgICAgICB9OwogCisgICAgICAgIC8vIERFUFJFQ0FURUQKKworICAgICAgICB0
aGlzLnNldEZyYW1lT2ZSZWZlcmVuY2VUeXBlID0gZnVuY3Rpb24gKCkgeworCisgICAgICAgICAg
ICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJWUk1hbmFnZXI6IHNldEZyYW1lT2ZSZWZlcmVuY2VU
eXBlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4nICk7CisKKyAgICAgICAgfTsKKwogICAgIH0KIAor
ICAgIE9iamVjdC5hc3NpZ24oIFdlYlZSTWFuYWdlci5wcm90b3R5cGUsIEV2ZW50RGlzcGF0Y2hl
ci5wcm90b3R5cGUgKTsKKwogICAgIC8qKgogICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDov
L21yZG9vYi5jb20vCiAgICAgICovCiAKICAgICBmdW5jdGlvbiBXZWJYUk1hbmFnZXIoIHJlbmRl
cmVyICkgewogCisgICAgICAgIHZhciBzY29wZSA9IHRoaXM7CisKICAgICAgICAgdmFyIGdsID0g
cmVuZGVyZXIuY29udGV4dDsKIAotICAgICAgICB2YXIgZGV2aWNlID0gbnVsbDsKICAgICAgICAg
dmFyIHNlc3Npb24gPSBudWxsOwogCi0gICAgICAgIHZhciBmcmFtZU9mUmVmID0gbnVsbDsKKyAg
ICAgICAgdmFyIHJlZmVyZW5jZVNwYWNlID0gbnVsbDsKKyAgICAgICAgdmFyIHJlZmVyZW5jZVNw
YWNlVHlwZSA9ICdsb2NhbC1mbG9vcic7CiAKICAgICAgICAgdmFyIHBvc2UgPSBudWxsOwogCkBA
IC0yMTc5Myw4ICsyMjczMyw3IEBACiAKICAgICAgICAgZnVuY3Rpb24gaXNQcmVzZW50aW5nKCkg
ewogCi0gICAgICAgICAgICByZXR1cm4gc2Vzc2lvbiAhPT0gbnVsbCAmJiBmcmFtZU9mUmVmICE9
PSBudWxsOwotCisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbiAhPT0gbnVsbCAmJiByZWZlcmVu
Y2VTcGFjZSAhPT0gbnVsbDsKIAogICAgICAgICB9CiAKQEAgLTIxODM0LDM3ICsyMjc3Myw2MCBA
QAogCiAgICAgICAgIH07CiAKLSAgICAgICAgdGhpcy5nZXREZXZpY2UgPSBmdW5jdGlvbiAoKSB7
Ci0KLSAgICAgICAgICAgIHJldHVybiBkZXZpY2U7Ci0KLSAgICAgICAgfTsKLQotICAgICAgICB0
aGlzLnNldERldmljZSA9IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAgICAgIC8vCiAKLSAgICAg
ICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIGRldmljZSA9IHZhbHVlOworICAgICAg
ICBmdW5jdGlvbiBvblNlc3Npb25FdmVudCggZXZlbnQgKSB7CiAKLSAgICAgICAgICAgIGdsLnNl
dENvbXBhdGlibGVYUkRldmljZSggdmFsdWUgKTsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0g
MDsgaSA8IGNvbnRyb2xsZXJzLmxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICB9OworICAgICAg
ICAgICAgICAgIGlmICggaW5wdXRTb3VyY2VzWyBpIF0gPT09IGV2ZW50LmlucHV0U291cmNlICkg
ewogCi0gICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJzWyBpIF0uZGlz
cGF0Y2hFdmVudCggeyB0eXBlOiBldmVudC50eXBlIH0gKTsKIAotICAgICAgICBmdW5jdGlvbiBv
blNlc3Npb25FdmVudCggZXZlbnQgKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICB2YXIgY29udHJvbGxlciA9IGNvbnRyb2xsZXJzWyBpbnB1dFNvdXJjZXMuaW5kZXhPZiggZXZl
bnQuaW5wdXRTb3VyY2UgKSBdOwotICAgICAgICAgICAgaWYgKCBjb250cm9sbGVyICkgY29udHJv
bGxlci5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6IGV2ZW50LnR5cGUgfSApOworICAgICAgICAgICAg
fQogCiAgICAgICAgIH0KIAogICAgICAgICBmdW5jdGlvbiBvblNlc3Npb25FbmQoKSB7CiAKICAg
ICAgICAgICAgIHJlbmRlcmVyLnNldEZyYW1lYnVmZmVyKCBudWxsICk7CisgICAgICAgICAgICBy
ZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoIHJlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpICk7IC8v
IEhhY2sgIzE1ODMwCiAgICAgICAgICAgICBhbmltYXRpb24uc3RvcCgpOwogCisgICAgICAgICAg
ICBzY29wZS5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdzZXNzaW9uZW5kJyB9ICk7CisKICAgICAg
ICAgfQogCi0gICAgICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1bmN0aW9uICggdmFsdWUsIG9wdGlv
bnMgKSB7CisgICAgICAgIGZ1bmN0aW9uIG9uUmVxdWVzdFJlZmVyZW5jZVNwYWNlKCB2YWx1ZSAp
IHsKKworICAgICAgICAgICAgcmVmZXJlbmNlU3BhY2UgPSB2YWx1ZTsKKworICAgICAgICAgICAg
YW5pbWF0aW9uLnNldENvbnRleHQoIHNlc3Npb24gKTsKKyAgICAgICAgICAgIGFuaW1hdGlvbi5z
dGFydCgpOworCisgICAgICAgICAgICBzY29wZS5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdzZXNz
aW9uc3RhcnQnIH0gKTsKKworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5zZXRGcmFtZWJ1ZmZl
clNjYWxlRmFjdG9yID0gZnVuY3Rpb24gKCB2YWx1ZSApIHsKKworICAgICAgICB9OworCisgICAg
ICAgIHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlID0gZnVuY3Rpb24gKCB2YWx1ZSApIHsKKwor
ICAgICAgICAgICAgcmVmZXJlbmNlU3BhY2VUeXBlID0gdmFsdWU7CisKKyAgICAgICAgfTsKKwor
ICAgICAgICB0aGlzLmdldFNlc3Npb24gPSBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIHJl
dHVybiBzZXNzaW9uOworCisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5zZXRTZXNzaW9uID0g
ZnVuY3Rpb24gKCB2YWx1ZSApIHsKIAogICAgICAgICAgICAgc2Vzc2lvbiA9IHZhbHVlOwogCkBA
IC0yMTg3NSwyNyArMjI4MzcsMjYgQEAKICAgICAgICAgICAgICAgICBzZXNzaW9uLmFkZEV2ZW50
TGlzdGVuZXIoICdzZWxlY3RlbmQnLCBvblNlc3Npb25FdmVudCApOwogICAgICAgICAgICAgICAg
IHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lciggJ2VuZCcsIG9uU2Vzc2lvbkVuZCApOwogCi0gICAg
ICAgICAgICAgICAgc2Vzc2lvbi5iYXNlTGF5ZXIgPSBuZXcgWFJXZWJHTExheWVyKCBzZXNzaW9u
LCBnbCApOwotICAgICAgICAgICAgICAgIHNlc3Npb24ucmVxdWVzdEZyYW1lT2ZSZWZlcmVuY2Uo
IG9wdGlvbnMuZnJhbWVPZlJlZmVyZW5jZVR5cGUgKS50aGVuKCBmdW5jdGlvbiAoIHZhbHVlICkg
ewotCi0gICAgICAgICAgICAgICAgICAgIGZyYW1lT2ZSZWYgPSB2YWx1ZTsKKyAgICAgICAgICAg
ICAgICBzZXNzaW9uLnVwZGF0ZVJlbmRlclN0YXRlKCB7IGJhc2VMYXllcjogbmV3IFhSV2ViR0xM
YXllciggc2Vzc2lvbiwgZ2wgKSB9ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIu
c2V0RnJhbWVidWZmZXIoIHNlc3Npb24uYmFzZUxheWVyLmZyYW1lYnVmZmVyICk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgYW5pbWF0aW9uLnNldENvbnRleHQoIHNlc3Npb24gKTsKLSAgICAgICAg
ICAgICAgICAgICAgYW5pbWF0aW9uLnN0YXJ0KCk7Ci0KLSAgICAgICAgICAgICAgICB9ICk7Cisg
ICAgICAgICAgICAgICAgc2Vzc2lvbi5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UoIHJlZmVyZW5jZVNw
YWNlVHlwZSApLnRoZW4oIG9uUmVxdWVzdFJlZmVyZW5jZVNwYWNlICk7CiAKICAgICAgICAgICAg
ICAgICAvLwogCi0gICAgICAgICAgICAgICAgaW5wdXRTb3VyY2VzID0gc2Vzc2lvbi5nZXRJbnB1
dFNvdXJjZXMoKTsKKyAgICAgICAgICAgICAgICBpbnB1dFNvdXJjZXMgPSBzZXNzaW9uLmlucHV0
U291cmNlczsKIAogICAgICAgICAgICAgICAgIHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lciggJ2lu
cHV0c291cmNlc2NoYW5nZScsIGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgICAgICBp
bnB1dFNvdXJjZXMgPSBzZXNzaW9uLmdldElucHV0U291cmNlcygpOworICAgICAgICAgICAgICAg
ICAgICBpbnB1dFNvdXJjZXMgPSBzZXNzaW9uLmlucHV0U291cmNlczsKICAgICAgICAgICAgICAg
ICAgICAgY29uc29sZS5sb2coIGlucHV0U291cmNlcyApOwogCisgICAgICAgICAgICAgICAgICAg
IGZvciAoIHZhciBpID0gMDsgaSA8IGNvbnRyb2xsZXJzLmxlbmd0aDsgaSArKyApIHsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBjb250cm9sbGVyc1sgaSBdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci51c2VyRGF0YS5pbnB1dFNvdXJjZSA9
IGlucHV0U291cmNlc1sgaSBdOworCisgICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgICAgIH0gKTsKIAogICAgICAgICAgICAgfQpAQCAtMjE5MjUsOCArMjI4ODYsNiBAQAogICAg
ICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBjYW1lcmEucGFyZW50OwogICAgICAgICAgICAgICAg
IHZhciBjYW1lcmFzID0gY2FtZXJhVlIuY2FtZXJhczsKIAotICAgICAgICAgICAgICAgIC8vIGFw
cGx5IGNhbWVyYS5wYXJlbnQgdG8gY2FtZXJhVlIKLQogICAgICAgICAgICAgICAgIHVwZGF0ZUNh
bWVyYSggY2FtZXJhVlIsIHBhcmVudCApOwogCiAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkg
PSAwOyBpIDwgY2FtZXJhcy5sZW5ndGg7IGkgKysgKSB7CkBAIC0yMTk0Nyw2ICsyMjkwNiw4IEBA
CiAKICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICBzZXRQcm9qZWN0aW9uRnJv
bVVuaW9uKCBjYW1lcmFWUiwgY2FtZXJhTCwgY2FtZXJhUiApOworCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGNhbWVyYVZSOwogCiAgICAgICAgICAgICB9CkBAIC0yMTk2MywxOCArMjI5MjQsMjAg
QEAKIAogICAgICAgICBmdW5jdGlvbiBvbkFuaW1hdGlvbkZyYW1lKCB0aW1lLCBmcmFtZSApIHsK
IAotICAgICAgICAgICAgcG9zZSA9IGZyYW1lLmdldERldmljZVBvc2UoIGZyYW1lT2ZSZWYgKTsK
KyAgICAgICAgICAgIHBvc2UgPSBmcmFtZS5nZXRWaWV3ZXJQb3NlKCByZWZlcmVuY2VTcGFjZSAp
OwogCiAgICAgICAgICAgICBpZiAoIHBvc2UgIT09IG51bGwgKSB7CiAKLSAgICAgICAgICAgICAg
ICB2YXIgbGF5ZXIgPSBzZXNzaW9uLmJhc2VMYXllcjsKLSAgICAgICAgICAgICAgICB2YXIgdmll
d3MgPSBmcmFtZS52aWV3czsKKyAgICAgICAgICAgICAgICB2YXIgdmlld3MgPSBwb3NlLnZpZXdz
OworICAgICAgICAgICAgICAgIHZhciBiYXNlTGF5ZXIgPSBzZXNzaW9uLnJlbmRlclN0YXRlLmJh
c2VMYXllcjsKKworICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldEZyYW1lYnVmZmVyKCBiYXNl
TGF5ZXIuZnJhbWVidWZmZXIgKTsKIAogICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsg
aSA8IHZpZXdzLmxlbmd0aDsgaSArKyApIHsKIAogICAgICAgICAgICAgICAgICAgICB2YXIgdmll
dyA9IHZpZXdzWyBpIF07Ci0gICAgICAgICAgICAgICAgICAgIHZhciB2aWV3cG9ydCA9IGxheWVy
LmdldFZpZXdwb3J0KCB2aWV3ICk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB2aWV3TWF0cml4
ID0gcG9zZS5nZXRWaWV3TWF0cml4KCB2aWV3ICk7CisgICAgICAgICAgICAgICAgICAgIHZhciB2
aWV3cG9ydCA9IGJhc2VMYXllci5nZXRWaWV3cG9ydCggdmlldyApOworICAgICAgICAgICAgICAg
ICAgICB2YXIgdmlld01hdHJpeCA9IHZpZXcudHJhbnNmb3JtLmludmVyc2UubWF0cml4OwogCiAg
ICAgICAgICAgICAgICAgICAgIHZhciBjYW1lcmEgPSBjYW1lcmFWUi5jYW1lcmFzWyBpIF07CiAg
ICAgICAgICAgICAgICAgICAgIGNhbWVyYS5tYXRyaXguZnJvbUFycmF5KCB2aWV3TWF0cml4ICku
Z2V0SW52ZXJzZSggY2FtZXJhLm1hdHJpeCApOwpAQCAtMjE5ODUsMTEgKzIyOTQ4LDYgQEAKIAog
ICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhVlIubWF0cml4LmNvcHkoIGNhbWVyYS5tYXRy
aXggKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFDSyAobXJkb29iKQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3czYy93ZWJ2ci9pc3N1ZXMv
MjAzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYVZSLnByb2plY3Rpb25NYXRyaXgu
Y29weSggY2FtZXJhLnByb2plY3Rpb25NYXRyaXggKTsKLQogICAgICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICB9CkBAIC0yMjAwNiwxMSArMjI5NjQsMTEgQEAKIAogICAgICAg
ICAgICAgICAgIGlmICggaW5wdXRTb3VyY2UgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFy
IGlucHV0UG9zZSA9IGZyYW1lLmdldElucHV0UG9zZSggaW5wdXRTb3VyY2UsIGZyYW1lT2ZSZWYg
KTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0UG9zZSA9IGZyYW1lLmdldFBvc2UoIGlu
cHV0U291cmNlLnRhcmdldFJheVNwYWNlLCByZWZlcmVuY2VTcGFjZSApOwogCiAgICAgICAgICAg
ICAgICAgICAgIGlmICggaW5wdXRQb3NlICE9PSBudWxsICkgewogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb250cm9sbGVyLm1hdHJpeC5lbGVtZW50cyA9IGlucHV0UG9zZS5wb2ludGVyTWF0
cml4OworICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5tYXRyaXguZnJvbUFycmF5
KCBpbnB1dFBvc2UudHJhbnNmb3JtLm1hdHJpeCApOwogICAgICAgICAgICAgICAgICAgICAgICAg
Y29udHJvbGxlci5tYXRyaXguZGVjb21wb3NlKCBjb250cm9sbGVyLnBvc2l0aW9uLCBjb250cm9s
bGVyLnJvdGF0aW9uLCBjb250cm9sbGVyLnNjYWxlICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250cm9sbGVyLnZpc2libGUgPSB0cnVlOwogCkBAIC0yMjA0NCw3ICsyMzAwMiwyNSBAQAog
ICAgICAgICB0aGlzLmdldFN0YW5kaW5nTWF0cml4ID0gZnVuY3Rpb24gKCkgewogCiAgICAgICAg
ICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJYUk1hbmFnZXI6IGdldFN0YW5kaW5nTWF0cml4
KCkgaXMgbm8gbG9uZ2VyIG5lZWRlZC4nICk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFRIUkVF
Lk1hdHJpeDQoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTWF0cml4NCgpOworCisgICAgICAg
IH07CisKKyAgICAgICAgdGhpcy5nZXREZXZpY2UgPSBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAg
ICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYlhSTWFuYWdlcjogZ2V0RGV2aWNlKCkgaGFzIGJl
ZW4gZGVwcmVjYXRlZC4nICk7CisKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnNldERldmlj
ZSA9IGZ1bmN0aW9uICgpIHsKKworICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2Vi
WFJNYW5hZ2VyOiBzZXREZXZpY2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLicgKTsKKworICAgICAg
ICB9OworCisgICAgICAgIHRoaXMuc2V0RnJhbWVPZlJlZmVyZW5jZVR5cGUgPSBmdW5jdGlvbiAo
KSB7CisKKyAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYlhSTWFuYWdlcjogc2V0
RnJhbWVPZlJlZmVyZW5jZVR5cGUoKSBoYXMgYmVlbiBkZXByZWNhdGVkLicgKTsKIAogICAgICAg
ICB9OwogCkBAIC0yMjA1Miw2ICsyMzAyOCw4IEBACiAKICAgICB9CiAKKyAgICBPYmplY3QuYXNz
aWduKCBXZWJYUk1hbmFnZXIucHJvdG90eXBlLCBFdmVudERpc3BhdGNoZXIucHJvdG90eXBlICk7
CisKICAgICAvKioKICAgICAgKiBAYXV0aG9yIHN1cGVyZWdnYmVydCAvIGh0dHA6Ly93d3cucGF1
bGJydW50LmNvLnVrLwogICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20v
CkBAIC0yMjA3NSw3ICsyMzA1Myw4IEBACiAgICAgICAgICAgICBfYW50aWFsaWFzID0gcGFyYW1l
dGVycy5hbnRpYWxpYXMgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMuYW50aWFsaWFzIDogZmFs
c2UsCiAgICAgICAgICAgICBfcHJlbXVsdGlwbGllZEFscGhhID0gcGFyYW1ldGVycy5wcmVtdWx0
aXBsaWVkQWxwaGEgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMucHJlbXVsdGlwbGllZEFscGhh
IDogdHJ1ZSwKICAgICAgICAgICAgIF9wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBwYXJhbWV0ZXJz
LnByZXNlcnZlRHJhd2luZ0J1ZmZlciAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5wcmVzZXJ2
ZURyYXdpbmdCdWZmZXIgOiBmYWxzZSwKLSAgICAgICAgICAgIF9wb3dlclByZWZlcmVuY2UgPSBw
YXJhbWV0ZXJzLnBvd2VyUHJlZmVyZW5jZSAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5wb3dl
clByZWZlcmVuY2UgOiAnZGVmYXVsdCc7CisgICAgICAgICAgICBfcG93ZXJQcmVmZXJlbmNlID0g
cGFyYW1ldGVycy5wb3dlclByZWZlcmVuY2UgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMucG93
ZXJQcmVmZXJlbmNlIDogJ2RlZmF1bHQnLAorICAgICAgICAgICAgX2ZhaWxJZk1ham9yUGVyZm9y
bWFuY2VDYXZlYXQgPSBwYXJhbWV0ZXJzLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQgIT09
IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCA6IGZh
bHNlOwogCiAgICAgICAgIHZhciBjdXJyZW50UmVuZGVyTGlzdCA9IG51bGw7CiAgICAgICAgIHZh
ciBjdXJyZW50UmVuZGVyU3RhdGUgPSBudWxsOwpAQCAtMjIwODUsNiArMjMwNjQsMTYgQEAKICAg
ICAgICAgdGhpcy5kb21FbGVtZW50ID0gX2NhbnZhczsKICAgICAgICAgdGhpcy5jb250ZXh0ID0g
bnVsbDsKIAorICAgICAgICAvLyBEZWJ1ZyBjb25maWd1cmF0aW9uIGNvbnRhaW5lcgorICAgICAg
ICB0aGlzLmRlYnVnID0geworCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIEVuYWJs
ZXMgZXJyb3IgY2hlY2tpbmcgYW5kIHJlcG9ydGluZyB3aGVuIHNoYWRlciBwcm9ncmFtcyBhcmUg
YmVpbmcgY29tcGlsZWQKKyAgICAgICAgICAgICAqIEB0eXBlIHtib29sZWFufQorICAgICAgICAg
ICAgICovCisgICAgICAgICAgICBjaGVja1NoYWRlckVycm9yczogdHJ1ZQorICAgICAgICB9Owor
CiAgICAgICAgIC8vIGNsZWFyaW5nCiAKICAgICAgICAgdGhpcy5hdXRvQ2xlYXIgPSB0cnVlOwpA
QCAtMjIxMzIsMTAgKzIzMTIxLDE5IEBACiAKICAgICAgICAgICAgIF9mcmFtZWJ1ZmZlciA9IG51
bGwsCiAKKyAgICAgICAgICAgIF9jdXJyZW50QWN0aXZlQ3ViZUZhY2UgPSAwLAorICAgICAgICAg
ICAgX2N1cnJlbnRBY3RpdmVNaXBtYXBMZXZlbCA9IDAsCiAgICAgICAgICAgICBfY3VycmVudFJl
bmRlclRhcmdldCA9IG51bGwsCiAgICAgICAgICAgICBfY3VycmVudEZyYW1lYnVmZmVyID0gbnVs
bCwKICAgICAgICAgICAgIF9jdXJyZW50TWF0ZXJpYWxJZCA9IC0gMSwKLSAgICAgICAgICAgIF9j
dXJyZW50R2VvbWV0cnlQcm9ncmFtID0gJycsCisKKyAgICAgICAgICAgIC8vIGdlb21ldHJ5IGFu
ZCBwcm9ncmFtIGNhY2hpbmcKKworICAgICAgICAgICAgX2N1cnJlbnRHZW9tZXRyeVByb2dyYW0g
PSB7CisgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IG51bGwsCisgICAgICAgICAgICAgICAgcHJv
Z3JhbTogbnVsbCwKKyAgICAgICAgICAgICAgICB3aXJlZnJhbWU6IGZhbHNlCisgICAgICAgICAg
ICB9LAogCiAgICAgICAgICAgICBfY3VycmVudENhbWVyYSA9IG51bGwsCiAgICAgICAgICAgICBf
Y3VycmVudEFycmF5Q2FtZXJhID0gbnVsbCwKQEAgLTIyMTQ2LDEwICsyMzE0NCw2IEBACiAKICAg
ICAgICAgICAgIC8vCiAKLSAgICAgICAgICAgIF91c2VkVGV4dHVyZVVuaXRzID0gMCwKLQotICAg
ICAgICAgICAgLy8KLQogICAgICAgICAgICAgX3dpZHRoID0gX2NhbnZhcy53aWR0aCwKICAgICAg
ICAgICAgIF9oZWlnaHQgPSBfY2FudmFzLmhlaWdodCwKIApAQCAtMjIxOTQsNyArMjMxODgsOSBA
QAogICAgICAgICAgICAgICAgIGFudGlhbGlhczogX2FudGlhbGlhcywKICAgICAgICAgICAgICAg
ICBwcmVtdWx0aXBsaWVkQWxwaGE6IF9wcmVtdWx0aXBsaWVkQWxwaGEsCiAgICAgICAgICAgICAg
ICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBfcHJlc2VydmVEcmF3aW5nQnVmZmVyLAotICAgICAg
ICAgICAgICAgIHBvd2VyUHJlZmVyZW5jZTogX3Bvd2VyUHJlZmVyZW5jZQorICAgICAgICAgICAg
ICAgIHBvd2VyUHJlZmVyZW5jZTogX3Bvd2VyUHJlZmVyZW5jZSwKKyAgICAgICAgICAgICAgICBm
YWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiBfZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVh
dCwKKyAgICAgICAgICAgICAgICB4ckNvbXBhdGlibGU6IHRydWUKICAgICAgICAgICAgIH07CiAK
ICAgICAgICAgICAgIC8vIGV2ZW50IGxpc3RlbmVycyBtdXN0IGJlIHJlZ2lzdGVyZWQgYmVmb3Jl
IFdlYkdMIGNvbnRleHQgaXMgY3JlYXRlZCwgc2VlICMxMjc1MwpAQCAtMjIyMzMsNiArMjMyMjks
NyBAQAogICAgICAgICB9IGNhdGNoICggZXJyb3IgKSB7CiAKICAgICAgICAgICAgIGNvbnNvbGUu
ZXJyb3IoICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAnICsgZXJyb3IubWVzc2FnZSApOworICAgICAg
ICAgICAgdGhyb3cgZXJyb3I7CiAKICAgICAgICAgfQogCkBAIC0yMjI0MSwyOSArMjMyMzgsMzQg
QEAKICAgICAgICAgdmFyIHByb2dyYW1DYWNoZSwgcmVuZGVyTGlzdHMsIHJlbmRlclN0YXRlczsK
IAogICAgICAgICB2YXIgYmFja2dyb3VuZCwgbW9ycGh0YXJnZXRzLCBidWZmZXJSZW5kZXJlciwg
aW5kZXhlZEJ1ZmZlclJlbmRlcmVyOwotICAgICAgICB2YXIgc3ByaXRlUmVuZGVyZXI7CiAKICAg
ICAgICAgdmFyIHV0aWxzOwogCiAgICAgICAgIGZ1bmN0aW9uIGluaXRHTENvbnRleHQoKSB7CiAK
ICAgICAgICAgICAgIGV4dGVuc2lvbnMgPSBuZXcgV2ViR0xFeHRlbnNpb25zKCBfZ2wgKTsKLSAg
ICAgICAgICAgIGV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfZGVwdGhfdGV4dHVyZScgKTsKLSAgICAg
ICAgICAgIGV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfZmxvYXQnICk7Ci0gICAgICAgICAg
ICBleHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhcicgKTsKLSAgICAgICAg
ICAgIGV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKTsKLSAgICAgICAg
ICAgIGV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXInICk7Ci0g
ICAgICAgICAgICBleHRlbnNpb25zLmdldCggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKTsK
LSAgICAgICAgICAgIGV4dGVuc2lvbnMuZ2V0KCAnT0VTX2VsZW1lbnRfaW5kZXhfdWludCcgKTsK
LSAgICAgICAgICAgIGV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKTsK
LQotICAgICAgICAgICAgdXRpbHMgPSBuZXcgV2ViR0xVdGlscyggX2dsLCBleHRlbnNpb25zICk7
CiAKICAgICAgICAgICAgIGNhcGFiaWxpdGllcyA9IG5ldyBXZWJHTENhcGFiaWxpdGllcyggX2ds
LCBleHRlbnNpb25zLCBwYXJhbWV0ZXJzICk7CiAKLSAgICAgICAgICAgIHN0YXRlID0gbmV3IFdl
YkdMU3RhdGUoIF9nbCwgZXh0ZW5zaW9ucywgdXRpbHMgKTsKLSAgICAgICAgICAgIHN0YXRlLnNj
aXNzb3IoIF9jdXJyZW50U2Npc3Nvci5jb3B5KCBfc2Npc3NvciApLm11bHRpcGx5U2NhbGFyKCBf
cGl4ZWxSYXRpbyApICk7Ci0gICAgICAgICAgICBzdGF0ZS52aWV3cG9ydCggX2N1cnJlbnRWaWV3
cG9ydC5jb3B5KCBfdmlld3BvcnQgKS5tdWx0aXBseVNjYWxhciggX3BpeGVsUmF0aW8gKSApOwor
ICAgICAgICAgICAgaWYgKCAhIGNhcGFiaWxpdGllcy5pc1dlYkdMMiApIHsKKworICAgICAgICAg
ICAgICAgIGV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfZGVwdGhfdGV4dHVyZScgKTsKKyAgICAgICAg
ICAgICAgICBleHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApOworICAgICAgICAg
ICAgICAgIGV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKTsKKyAgICAg
ICAgICAgICAgICBleHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFy
JyApOworICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzJyApOworICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMuZ2V0KCAnT0VTX2VsZW1lbnRf
aW5kZXhfdWludCcgKTsKKyAgICAgICAgICAgICAgICBleHRlbnNpb25zLmdldCggJ0FOR0xFX2lu
c3RhbmNlZF9hcnJheXMnICk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXh0ZW5z
aW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXInICk7CisKKyAgICAgICAgICAgIHV0
aWxzID0gbmV3IFdlYkdMVXRpbHMoIF9nbCwgZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzICk7CisK
KyAgICAgICAgICAgIHN0YXRlID0gbmV3IFdlYkdMU3RhdGUoIF9nbCwgZXh0ZW5zaW9ucywgdXRp
bHMsIGNhcGFiaWxpdGllcyApOworICAgICAgICAgICAgc3RhdGUuc2Npc3NvciggX2N1cnJlbnRT
Y2lzc29yLmNvcHkoIF9zY2lzc29yICkubXVsdGlwbHlTY2FsYXIoIF9waXhlbFJhdGlvICkuZmxv
b3IoKSApOworICAgICAgICAgICAgc3RhdGUudmlld3BvcnQoIF9jdXJyZW50Vmlld3BvcnQuY29w
eSggX3ZpZXdwb3J0ICkubXVsdGlwbHlTY2FsYXIoIF9waXhlbFJhdGlvICkuZmxvb3IoKSApOwog
CiAgICAgICAgICAgICBpbmZvID0gbmV3IFdlYkdMSW5mbyggX2dsICk7CiAgICAgICAgICAgICBw
cm9wZXJ0aWVzID0gbmV3IFdlYkdMUHJvcGVydGllcygpOwpAQCAtMjIyNzgsMTAgKzIzMjgwLDgg
QEAKIAogICAgICAgICAgICAgYmFja2dyb3VuZCA9IG5ldyBXZWJHTEJhY2tncm91bmQoIF90aGlz
LCBzdGF0ZSwgb2JqZWN0cywgX3ByZW11bHRpcGxpZWRBbHBoYSApOwogCi0gICAgICAgICAgICBi
dWZmZXJSZW5kZXJlciA9IG5ldyBXZWJHTEJ1ZmZlclJlbmRlcmVyKCBfZ2wsIGV4dGVuc2lvbnMs
IGluZm8gKTsKLSAgICAgICAgICAgIGluZGV4ZWRCdWZmZXJSZW5kZXJlciA9IG5ldyBXZWJHTElu
ZGV4ZWRCdWZmZXJSZW5kZXJlciggX2dsLCBleHRlbnNpb25zLCBpbmZvICk7Ci0KLSAgICAgICAg
ICAgIHNwcml0ZVJlbmRlcmVyID0gbmV3IFdlYkdMU3ByaXRlUmVuZGVyZXIoIF90aGlzLCBfZ2ws
IHN0YXRlLCB0ZXh0dXJlcywgY2FwYWJpbGl0aWVzICk7CisgICAgICAgICAgICBidWZmZXJSZW5k
ZXJlciA9IG5ldyBXZWJHTEJ1ZmZlclJlbmRlcmVyKCBfZ2wsIGV4dGVuc2lvbnMsIGluZm8sIGNh
cGFiaWxpdGllcyApOworICAgICAgICAgICAgaW5kZXhlZEJ1ZmZlclJlbmRlcmVyID0gbmV3IFdl
YkdMSW5kZXhlZEJ1ZmZlclJlbmRlcmVyKCBfZ2wsIGV4dGVuc2lvbnMsIGluZm8sIGNhcGFiaWxp
dGllcyApOwogCiAgICAgICAgICAgICBpbmZvLnByb2dyYW1zID0gcHJvZ3JhbUNhY2hlLnByb2dy
YW1zOwogCkBAIC0yMjI5OSw3ICsyMzI5OSw3IEBACiAKICAgICAgICAgLy8gdnIKIAotICAgICAg
ICB2YXIgdnIgPSAoICd4cicgaW4gbmF2aWdhdG9yICkgPyBuZXcgV2ViWFJNYW5hZ2VyKCBfdGhp
cyApIDogbmV3IFdlYlZSTWFuYWdlciggX3RoaXMgKTsKKyAgICAgICAgdmFyIHZyID0gKCB0eXBl
b2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAneHInIGluIG5hdmlnYXRvciAmJiAnc3Vw
cG9ydHNTZXNzaW9uJyBpbiBuYXZpZ2F0b3IueHIgKSA/IG5ldyBXZWJYUk1hbmFnZXIoIF90aGlz
ICkgOiBuZXcgV2ViVlJNYW5hZ2VyKCBfdGhpcyApOwogCiAgICAgICAgIHRoaXMudnIgPSB2cjsK
IApAQCAtMjIzNTMsMTIgKzIzMzUzLDE3IEBACiAKICAgICAgICAgfTsKIAotICAgICAgICB0aGlz
LmdldFNpemUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuZ2V0U2l6ZSA9IGZ1bmN0aW9u
ICggdGFyZ2V0ICkgewogCi0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHdp
ZHRoOiBfd2lkdGgsCi0gICAgICAgICAgICAgICAgaGVpZ2h0OiBfaGVpZ2h0Ci0gICAgICAgICAg
ICB9OworICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVmaW5lZCApIHsKKworICAgICAg
ICAgICAgICAgIGNvbnNvbGUud2FybiggJ1dlYkdMUmVuZGVyZXI6IC5nZXRzaXplKCkgbm93IHJl
cXVpcmVzIGEgVmVjdG9yMiBhcyBhbiBhcmd1bWVudCcgKTsKKworICAgICAgICAgICAgICAgIHRh
cmdldCA9IG5ldyBWZWN0b3IyKCk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuIHRhcmdldC5zZXQoIF93aWR0aCwgX2hlaWdodCApOwogCiAgICAgICAgIH07CiAKQEAgLTIy
Mzc0LDggKzIzMzc5LDggQEAKICAgICAgICAgICAgIF93aWR0aCA9IHdpZHRoOwogICAgICAgICAg
ICAgX2hlaWdodCA9IGhlaWdodDsKIAotICAgICAgICAgICAgX2NhbnZhcy53aWR0aCA9IHdpZHRo
ICogX3BpeGVsUmF0aW87Ci0gICAgICAgICAgICBfY2FudmFzLmhlaWdodCA9IGhlaWdodCAqIF9w
aXhlbFJhdGlvOworICAgICAgICAgICAgX2NhbnZhcy53aWR0aCA9IE1hdGguZmxvb3IoIHdpZHRo
ICogX3BpeGVsUmF0aW8gKTsKKyAgICAgICAgICAgIF9jYW52YXMuaGVpZ2h0ID0gTWF0aC5mbG9v
ciggaGVpZ2h0ICogX3BpeGVsUmF0aW8gKTsKIAogICAgICAgICAgICAgaWYgKCB1cGRhdGVTdHls
ZSAhPT0gZmFsc2UgKSB7CiAKQEAgLTIyMzg4LDEyICsyMzM5MywxNyBAQAogCiAgICAgICAgIH07
CiAKLSAgICAgICAgdGhpcy5nZXREcmF3aW5nQnVmZmVyU2l6ZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdGhpcy5nZXREcmF3aW5nQnVmZmVyU2l6ZSA9IGZ1bmN0aW9uICggdGFyZ2V0ICkgewog
Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHdpZHRoOiBfd2lkdGggKiBf
cGl4ZWxSYXRpbywKLSAgICAgICAgICAgICAgICBoZWlnaHQ6IF9oZWlnaHQgKiBfcGl4ZWxSYXRp
bwotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRlZmluZWQg
KSB7CisKKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdXZWJHTFJlbmRlcmVyOiAuZ2V0
ZHJhd2luZ0J1ZmZlclNpemUoKSBub3cgcmVxdWlyZXMgYSBWZWN0b3IyIGFzIGFuIGFyZ3VtZW50
JyApOworCisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjIoKTsKKworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LnNldCggX3dpZHRoICogX3BpeGVs
UmF0aW8sIF9oZWlnaHQgKiBfcGl4ZWxSYXRpbyApLmZsb29yKCk7CiAKICAgICAgICAgfTsKIApA
QCAtMjI0MDQsMzAgKzIzNDE0LDc0IEBACiAKICAgICAgICAgICAgIF9waXhlbFJhdGlvID0gcGl4
ZWxSYXRpbzsKIAotICAgICAgICAgICAgX2NhbnZhcy53aWR0aCA9IHdpZHRoICogcGl4ZWxSYXRp
bzsKLSAgICAgICAgICAgIF9jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0ICogcGl4ZWxSYXRpbzsKKyAg
ICAgICAgICAgIF9jYW52YXMud2lkdGggPSBNYXRoLmZsb29yKCB3aWR0aCAqIHBpeGVsUmF0aW8g
KTsKKyAgICAgICAgICAgIF9jYW52YXMuaGVpZ2h0ID0gTWF0aC5mbG9vciggaGVpZ2h0ICogcGl4
ZWxSYXRpbyApOwogCiAgICAgICAgICAgICB0aGlzLnNldFZpZXdwb3J0KCAwLCAwLCB3aWR0aCwg
aGVpZ2h0ICk7CiAKICAgICAgICAgfTsKIAotICAgICAgICB0aGlzLmdldEN1cnJlbnRWaWV3cG9y
dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQgPSBmdW5j
dGlvbiAoIHRhcmdldCApIHsKKworICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVmaW5l
ZCApIHsKKworICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1dlYkdMUmVuZGVyZXI6IC5n
ZXRDdXJyZW50Vmlld3BvcnQoKSBub3cgcmVxdWlyZXMgYSBWZWN0b3I0IGFzIGFuIGFyZ3VtZW50
JyApOworCisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjQoKTsKIAotICAgICAg
ICAgICAgcmV0dXJuIF9jdXJyZW50Vmlld3BvcnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiB0YXJnZXQuY29weSggX2N1cnJlbnRWaWV3cG9ydCApOworCisgICAgICAgIH07
CisKKyAgICAgICAgdGhpcy5nZXRWaWV3cG9ydCA9IGZ1bmN0aW9uICggdGFyZ2V0ICkgeworCisg
ICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmNvcHkoIF92aWV3cG9ydCApOwogCiAgICAgICAgIH07
CiAKICAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhl
aWdodCApIHsKIAotICAgICAgICAgICAgX3ZpZXdwb3J0LnNldCggeCwgX2hlaWdodCAtIHkgLSBo
ZWlnaHQsIHdpZHRoLCBoZWlnaHQgKTsKLSAgICAgICAgICAgIHN0YXRlLnZpZXdwb3J0KCBfY3Vy
cmVudFZpZXdwb3J0LmNvcHkoIF92aWV3cG9ydCApLm11bHRpcGx5U2NhbGFyKCBfcGl4ZWxSYXRp
byApICk7CisgICAgICAgICAgICBpZiAoIHguaXNWZWN0b3I0ICkgeworCisgICAgICAgICAgICAg
ICAgX3ZpZXdwb3J0LnNldCggeC54LCB4LnksIHgueiwgeC53ICk7CisKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisKKyAgICAgICAgICAgICAgICBfdmlld3BvcnQuc2V0KCB4LCB5LCB3aWR0aCwgaGVp
Z2h0ICk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdGUudmlld3BvcnQoIF9j
dXJyZW50Vmlld3BvcnQuY29weSggX3ZpZXdwb3J0ICkubXVsdGlwbHlTY2FsYXIoIF9waXhlbFJh
dGlvICkuZmxvb3IoKSApOworCisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5nZXRTY2lzc29y
ID0gZnVuY3Rpb24gKCB0YXJnZXQgKSB7CisKKyAgICAgICAgICAgIHJldHVybiB0YXJnZXQuY29w
eSggX3NjaXNzb3IgKTsKIAogICAgICAgICB9OwogCiAgICAgICAgIHRoaXMuc2V0U2Npc3NvciA9
IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCApIHsKIAotICAgICAgICAgICAgX3NjaXNz
b3Iuc2V0KCB4LCBfaGVpZ2h0IC0geSAtIGhlaWdodCwgd2lkdGgsIGhlaWdodCApOwotICAgICAg
ICAgICAgc3RhdGUuc2Npc3NvciggX2N1cnJlbnRTY2lzc29yLmNvcHkoIF9zY2lzc29yICkubXVs
dGlwbHlTY2FsYXIoIF9waXhlbFJhdGlvICkgKTsKKyAgICAgICAgICAgIGlmICggeC5pc1ZlY3Rv
cjQgKSB7CisKKyAgICAgICAgICAgICAgICBfc2Npc3Nvci5zZXQoIHgueCwgeC55LCB4LnosIHgu
dyApOworCisgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgX3NjaXNzb3Iu
c2V0KCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgc3RhdGUuc2Npc3NvciggX2N1cnJlbnRTY2lzc29yLmNvcHkoIF9zY2lzc29yICkubXVsdGlw
bHlTY2FsYXIoIF9waXhlbFJhdGlvICkuZmxvb3IoKSApOworCisgICAgICAgIH07CisKKyAgICAg
ICAgdGhpcy5nZXRTY2lzc29yVGVzdCA9IGZ1bmN0aW9uICgpIHsKKworICAgICAgICAgICAgcmV0
dXJuIF9zY2lzc29yVGVzdDsKIAogICAgICAgICB9OwogCkBAIC0yMjQ2Nyw5ICsyMzUyMSw5IEBA
CiAKICAgICAgICAgICAgIHZhciBiaXRzID0gMDsKIAotICAgICAgICAgICAgaWYgKCBjb2xvciA9
PT0gdW5kZWZpbmVkIHx8IGNvbG9yICkgYml0cyB8PSBfZ2wuQ09MT1JfQlVGRkVSX0JJVDsKLSAg
ICAgICAgICAgIGlmICggZGVwdGggPT09IHVuZGVmaW5lZCB8fCBkZXB0aCApIGJpdHMgfD0gX2ds
LkRFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgICAgICAgICBpZiAoIHN0ZW5jaWwgPT09IHVuZGVmaW5l
ZCB8fCBzdGVuY2lsICkgYml0cyB8PSBfZ2wuU1RFTkNJTF9CVUZGRVJfQklUOworICAgICAgICAg
ICAgaWYgKCBjb2xvciA9PT0gdW5kZWZpbmVkIHx8IGNvbG9yICkgYml0cyB8PSAxNjM4NDsKKyAg
ICAgICAgICAgIGlmICggZGVwdGggPT09IHVuZGVmaW5lZCB8fCBkZXB0aCApIGJpdHMgfD0gMjU2
OworICAgICAgICAgICAgaWYgKCBzdGVuY2lsID09PSB1bmRlZmluZWQgfHwgc3RlbmNpbCApIGJp
dHMgfD0gMTAyNDsKIAogICAgICAgICAgICAgX2dsLmNsZWFyKCBiaXRzICk7CiAKQEAgLTIyNDkz
LDEzICsyMzU0Nyw2IEBACiAKICAgICAgICAgfTsKIAotICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0
ID0gZnVuY3Rpb24gKCByZW5kZXJUYXJnZXQsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCApIHsKLQot
ICAgICAgICAgICAgdGhpcy5zZXRSZW5kZXJUYXJnZXQoIHJlbmRlclRhcmdldCApOwotICAgICAg
ICAgICAgdGhpcy5jbGVhciggY29sb3IsIGRlcHRoLCBzdGVuY2lsICk7Ci0KLSAgICAgICAgfTsK
LQogICAgICAgICAvLwogCiAgICAgICAgIHRoaXMuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKQEAg
LTIyNTc3LDE3ICsyMzYyNCwxNyBAQAogCiAgICAgICAgIC8vIEJ1ZmZlciByZW5kZXJpbmcKIAot
ICAgICAgICBmdW5jdGlvbiByZW5kZXJPYmplY3RJbW1lZGlhdGUoIG9iamVjdCwgcHJvZ3JhbSwg
bWF0ZXJpYWwgKSB7CisgICAgICAgIGZ1bmN0aW9uIHJlbmRlck9iamVjdEltbWVkaWF0ZSggb2Jq
ZWN0LCBwcm9ncmFtICkgewogCiAgICAgICAgICAgICBvYmplY3QucmVuZGVyKCBmdW5jdGlvbiAo
IG9iamVjdCApIHsKIAotICAgICAgICAgICAgICAgIF90aGlzLnJlbmRlckJ1ZmZlckltbWVkaWF0
ZSggb2JqZWN0LCBwcm9ncmFtLCBtYXRlcmlhbCApOworICAgICAgICAgICAgICAgIF90aGlzLnJl
bmRlckJ1ZmZlckltbWVkaWF0ZSggb2JqZWN0LCBwcm9ncmFtICk7CiAKICAgICAgICAgICAgIH0g
KTsKIAogICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5yZW5kZXJCdWZmZXJJbW1lZGlhdGUgPSBm
dW5jdGlvbiAoIG9iamVjdCwgcHJvZ3JhbSwgbWF0ZXJpYWwgKSB7CisgICAgICAgIHRoaXMucmVu
ZGVyQnVmZmVySW1tZWRpYXRlID0gZnVuY3Rpb24gKCBvYmplY3QsIHByb2dyYW0gKSB7CiAKICAg
ICAgICAgICAgIHN0YXRlLmluaXRBdHRyaWJ1dGVzKCk7CiAKQEAgLTIyNjAyLDgwICsyMzY0OSw0
NyBAQAogCiAgICAgICAgICAgICBpZiAoIG9iamVjdC5oYXNQb3NpdGlvbnMgKSB7CiAKLSAgICAg
ICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlciggX2dsLkFSUkFZX0JVRkZFUiwgYnVmZmVycy5wb3Np
dGlvbiApOwotICAgICAgICAgICAgICAgIF9nbC5idWZmZXJEYXRhKCBfZ2wuQVJSQVlfQlVGRkVS
LCBvYmplY3QucG9zaXRpb25BcnJheSwgX2dsLkRZTkFNSUNfRFJBVyApOworICAgICAgICAgICAg
ICAgIF9nbC5iaW5kQnVmZmVyKCAzNDk2MiwgYnVmZmVycy5wb3NpdGlvbiApOworICAgICAgICAg
ICAgICAgIF9nbC5idWZmZXJEYXRhKCAzNDk2Miwgb2JqZWN0LnBvc2l0aW9uQXJyYXksIDM1MDQ4
ICk7CiAKICAgICAgICAgICAgICAgICBzdGF0ZS5lbmFibGVBdHRyaWJ1dGUoIHByb2dyYW1BdHRy
aWJ1dGVzLnBvc2l0aW9uICk7Ci0gICAgICAgICAgICAgICAgX2dsLnZlcnRleEF0dHJpYlBvaW50
ZXIoIHByb2dyYW1BdHRyaWJ1dGVzLnBvc2l0aW9uLCAzLCBfZ2wuRkxPQVQsIGZhbHNlLCAwLCAw
ICk7CisgICAgICAgICAgICAgICAgX2dsLnZlcnRleEF0dHJpYlBvaW50ZXIoIHByb2dyYW1BdHRy
aWJ1dGVzLnBvc2l0aW9uLCAzLCA1MTI2LCBmYWxzZSwgMCwgMCApOwogCiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmICggb2JqZWN0Lmhhc05vcm1hbHMgKSB7CiAKLSAgICAgICAgICAg
ICAgICBfZ2wuYmluZEJ1ZmZlciggX2dsLkFSUkFZX0JVRkZFUiwgYnVmZmVycy5ub3JtYWwgKTsK
LQotICAgICAgICAgICAgICAgIGlmICggISBtYXRlcmlhbC5pc01lc2hQaG9uZ01hdGVyaWFsICYm
Ci0gICAgICAgICAgICAgICAgICAgICEgbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCAm
JgotICAgICAgICAgICAgICAgICAgICAhIG1hdGVyaWFsLmlzTWVzaE5vcm1hbE1hdGVyaWFsICYm
Ci0gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmZsYXRTaGFkaW5nID09PSB0cnVlICkgewot
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IG9iamVjdC5jb3VudCAq
IDM7IGkgPCBsOyBpICs9IDkgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcnJh
eSA9IG9iamVjdC5ub3JtYWxBcnJheTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG54
ID0gKCBhcnJheVsgaSArIDAgXSArIGFycmF5WyBpICsgMyBdICsgYXJyYXlbIGkgKyA2IF0gKSAv
IDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnkgPSAoIGFycmF5WyBpICsgMSBdICsg
YXJyYXlbIGkgKyA0IF0gKyBhcnJheVsgaSArIDcgXSApIC8gMzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBueiA9ICggYXJyYXlbIGkgKyAyIF0gKyBhcnJheVsgaSArIDUgXSArIGFycmF5
WyBpICsgOCBdICkgLyAzOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVsgaSArIDAg
XSA9IG54OwotICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbIGkgKyAxIF0gPSBueTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFycmF5WyBpICsgMiBdID0gbno7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFycmF5WyBpICsgMyBdID0gbng7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhcnJheVsgaSArIDQgXSA9IG55OwotICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbIGkg
KyA1IF0gPSBuejsKLQotICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbIGkgKyA2IF0gPSBu
eDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5WyBpICsgNyBdID0gbnk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhcnJheVsgaSArIDggXSA9IG56OwotCi0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIF9nbC5idWZmZXJE
YXRhKCBfZ2wuQVJSQVlfQlVGRkVSLCBvYmplY3Qubm9ybWFsQXJyYXksIF9nbC5EWU5BTUlDX0RS
QVcgKTsKKyAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlciggMzQ5NjIsIGJ1ZmZlcnMubm9y
bWFsICk7CisgICAgICAgICAgICAgICAgX2dsLmJ1ZmZlckRhdGEoIDM0OTYyLCBvYmplY3Qubm9y
bWFsQXJyYXksIDM1MDQ4ICk7CiAKICAgICAgICAgICAgICAgICBzdGF0ZS5lbmFibGVBdHRyaWJ1
dGUoIHByb2dyYW1BdHRyaWJ1dGVzLm5vcm1hbCApOwotCi0gICAgICAgICAgICAgICAgX2dsLnZl
cnRleEF0dHJpYlBvaW50ZXIoIHByb2dyYW1BdHRyaWJ1dGVzLm5vcm1hbCwgMywgX2dsLkZMT0FU
LCBmYWxzZSwgMCwgMCApOworICAgICAgICAgICAgICAgIF9nbC52ZXJ0ZXhBdHRyaWJQb2ludGVy
KCBwcm9ncmFtQXR0cmlidXRlcy5ub3JtYWwsIDMsIDUxMjYsIGZhbHNlLCAwLCAwICk7CiAKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCBvYmplY3QuaGFzVXZzICYmIG1hdGVyaWFs
Lm1hcCApIHsKKyAgICAgICAgICAgIGlmICggb2JqZWN0Lmhhc1V2cyApIHsKIAotICAgICAgICAg
ICAgICAgIF9nbC5iaW5kQnVmZmVyKCBfZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXJzLnV2ICk7Ci0g
ICAgICAgICAgICAgICAgX2dsLmJ1ZmZlckRhdGEoIF9nbC5BUlJBWV9CVUZGRVIsIG9iamVjdC51
dkFycmF5LCBfZ2wuRFlOQU1JQ19EUkFXICk7CisgICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZm
ZXIoIDM0OTYyLCBidWZmZXJzLnV2ICk7CisgICAgICAgICAgICAgICAgX2dsLmJ1ZmZlckRhdGEo
IDM0OTYyLCBvYmplY3QudXZBcnJheSwgMzUwNDggKTsKIAogICAgICAgICAgICAgICAgIHN0YXRl
LmVuYWJsZUF0dHJpYnV0ZSggcHJvZ3JhbUF0dHJpYnV0ZXMudXYgKTsKLQotICAgICAgICAgICAg
ICAgIF9nbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKCBwcm9ncmFtQXR0cmlidXRlcy51diwgMiwgX2ds
LkZMT0FULCBmYWxzZSwgMCwgMCApOworICAgICAgICAgICAgICAgIF9nbC52ZXJ0ZXhBdHRyaWJQ
b2ludGVyKCBwcm9ncmFtQXR0cmlidXRlcy51diwgMiwgNTEyNiwgZmFsc2UsIDAsIDAgKTsKIAog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIG9iamVjdC5oYXNDb2xvcnMgJiYgbWF0
ZXJpYWwudmVydGV4Q29sb3JzICE9PSBOb0NvbG9ycyApIHsKKyAgICAgICAgICAgIGlmICggb2Jq
ZWN0Lmhhc0NvbG9ycyApIHsKIAotICAgICAgICAgICAgICAgIF9nbC5iaW5kQnVmZmVyKCBfZ2wu
QVJSQVlfQlVGRkVSLCBidWZmZXJzLmNvbG9yICk7Ci0gICAgICAgICAgICAgICAgX2dsLmJ1ZmZl
ckRhdGEoIF9nbC5BUlJBWV9CVUZGRVIsIG9iamVjdC5jb2xvckFycmF5LCBfZ2wuRFlOQU1JQ19E
UkFXICk7CisgICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZmZXIoIDM0OTYyLCBidWZmZXJzLmNv
bG9yICk7CisgICAgICAgICAgICAgICAgX2dsLmJ1ZmZlckRhdGEoIDM0OTYyLCBvYmplY3QuY29s
b3JBcnJheSwgMzUwNDggKTsKIAogICAgICAgICAgICAgICAgIHN0YXRlLmVuYWJsZUF0dHJpYnV0
ZSggcHJvZ3JhbUF0dHJpYnV0ZXMuY29sb3IgKTsKLQotICAgICAgICAgICAgICAgIF9nbC52ZXJ0
ZXhBdHRyaWJQb2ludGVyKCBwcm9ncmFtQXR0cmlidXRlcy5jb2xvciwgMywgX2dsLkZMT0FULCBm
YWxzZSwgMCwgMCApOworICAgICAgICAgICAgICAgIF9nbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKCBw
cm9ncmFtQXR0cmlidXRlcy5jb2xvciwgMywgNTEyNiwgZmFsc2UsIDAsIDAgKTsKIAogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBzdGF0ZS5kaXNhYmxlVW51c2VkQXR0cmlidXRlcygpOwog
Ci0gICAgICAgICAgICBfZ2wuZHJhd0FycmF5cyggX2dsLlRSSUFOR0xFUywgMCwgb2JqZWN0LmNv
dW50ICk7CisgICAgICAgICAgICBfZ2wuZHJhd0FycmF5cyggNCwgMCwgb2JqZWN0LmNvdW50ICk7
CiAKICAgICAgICAgICAgIG9iamVjdC5jb3VudCA9IDA7CiAKQEAgLTIyNjg4LDEzICsyMzcwMiwx
NiBAQAogICAgICAgICAgICAgc3RhdGUuc2V0TWF0ZXJpYWwoIG1hdGVyaWFsLCBmcm9udEZhY2VD
VyApOwogCiAgICAgICAgICAgICB2YXIgcHJvZ3JhbSA9IHNldFByb2dyYW0oIGNhbWVyYSwgZm9n
LCBtYXRlcmlhbCwgb2JqZWN0ICk7Ci0gICAgICAgICAgICB2YXIgZ2VvbWV0cnlQcm9ncmFtID0g
Z2VvbWV0cnkuaWQgKyAnXycgKyBwcm9ncmFtLmlkICsgJ18nICsgKCBtYXRlcmlhbC53aXJlZnJh
bWUgPT09IHRydWUgKTsKIAogICAgICAgICAgICAgdmFyIHVwZGF0ZUJ1ZmZlcnMgPSBmYWxzZTsK
IAotICAgICAgICAgICAgaWYgKCBnZW9tZXRyeVByb2dyYW0gIT09IF9jdXJyZW50R2VvbWV0cnlQ
cm9ncmFtICkgeworICAgICAgICAgICAgaWYgKCBfY3VycmVudEdlb21ldHJ5UHJvZ3JhbS5nZW9t
ZXRyeSAhPT0gZ2VvbWV0cnkuaWQgfHwKKyAgICAgICAgICAgICAgICBfY3VycmVudEdlb21ldHJ5
UHJvZ3JhbS5wcm9ncmFtICE9PSBwcm9ncmFtLmlkIHx8CisgICAgICAgICAgICAgICAgX2N1cnJl
bnRHZW9tZXRyeVByb2dyYW0ud2lyZWZyYW1lICE9PSAoIG1hdGVyaWFsLndpcmVmcmFtZSA9PT0g
dHJ1ZSApICkgewogCi0gICAgICAgICAgICAgICAgX2N1cnJlbnRHZW9tZXRyeVByb2dyYW0gPSBn
ZW9tZXRyeVByb2dyYW07CisgICAgICAgICAgICAgICAgX2N1cnJlbnRHZW9tZXRyeVByb2dyYW0u
Z2VvbWV0cnkgPSBnZW9tZXRyeS5pZDsKKyAgICAgICAgICAgICAgICBfY3VycmVudEdlb21ldHJ5
UHJvZ3JhbS5wcm9ncmFtID0gcHJvZ3JhbS5pZDsKKyAgICAgICAgICAgICAgICBfY3VycmVudEdl
b21ldHJ5UHJvZ3JhbS53aXJlZnJhbWUgPSBtYXRlcmlhbC53aXJlZnJhbWUgPT09IHRydWU7CiAg
ICAgICAgICAgICAgICAgdXBkYXRlQnVmZmVycyA9IHRydWU7CiAKICAgICAgICAgICAgIH0KQEAg
LTIyNzM4LDcgKzIzNzU1LDcgQEAKIAogICAgICAgICAgICAgICAgIGlmICggaW5kZXggIT09IG51
bGwgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZmZXIoIF9nbC5FTEVNRU5U
X0FSUkFZX0JVRkZFUiwgYXR0cmlidXRlLmJ1ZmZlciApOworICAgICAgICAgICAgICAgICAgICBf
Z2wuYmluZEJ1ZmZlciggMzQ5NjMsIGF0dHJpYnV0ZS5idWZmZXIgKTsKIAogICAgICAgICAgICAg
ICAgIH0KIApAQCAtMjI3NzgsMjIgKzIzNzk1LDIyIEBACiAgICAgICAgICAgICAgICAgaWYgKCBt
YXRlcmlhbC53aXJlZnJhbWUgPT09IHRydWUgKSB7CiAKICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUuc2V0TGluZVdpZHRoKCBtYXRlcmlhbC53aXJlZnJhbWVMaW5ld2lkdGggKiBnZXRUYXJnZXRQ
aXhlbFJhdGlvKCkgKTsKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0TW9kZSggX2ds
LkxJTkVTICk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldE1vZGUoIDEgKTsKIAog
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgg
b2JqZWN0LmRyYXdNb2RlICkgewogCiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRyaWFu
Z2xlc0RyYXdNb2RlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldE1v
ZGUoIF9nbC5UUklBTkdMRVMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJl
ci5zZXRNb2RlKCA0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVHJpYW5nbGVTdHJpcERyYXdNb2RlOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldE1vZGUoIF9nbC5UUklBTkdMRV9TVFJJ
UCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldE1vZGUoIDUgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBUcmlhbmdsZUZhbkRyYXdNb2RlOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlbmRlcmVyLnNldE1vZGUoIF9nbC5UUklBTkdMRV9GQU4gKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZW5kZXJlci5zZXRNb2RlKCA2ICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjI4MTEsMjEgKzIz
ODI4LDI1IEBACiAKICAgICAgICAgICAgICAgICBpZiAoIG9iamVjdC5pc0xpbmVTZWdtZW50cyAp
IHsKIAotICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5zZXRNb2RlKCBfZ2wuTElORVMgKTsK
KyAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0TW9kZSggMSApOwogCiAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICggb2JqZWN0LmlzTGluZUxvb3AgKSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgcmVuZGVyZXIuc2V0TW9kZSggX2dsLkxJTkVfTE9PUCApOworICAgICAgICAgICAgICAg
ICAgICByZW5kZXJlci5zZXRNb2RlKCAyICk7CiAKICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
Ci0gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldE1vZGUoIF9nbC5MSU5FX1NUUklQICk7
CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldE1vZGUoIDMgKTsKIAogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgfSBlbHNlIGlmICggb2JqZWN0LmlzUG9pbnRzICkgewog
Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0TW9kZSggX2dsLlBPSU5UUyApOworICAgICAg
ICAgICAgICAgIHJlbmRlcmVyLnNldE1vZGUoIDAgKTsKKworICAgICAgICAgICAgfSBlbHNlIGlm
ICggb2JqZWN0LmlzU3ByaXRlICkgeworCisgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0TW9k
ZSggNCApOwogCiAgICAgICAgICAgICB9CiAKQEAgLTIyODQ3LDcgKzIzODY4LDcgQEAKIAogICAg
ICAgICBmdW5jdGlvbiBzZXR1cFZlcnRleEF0dHJpYnV0ZXMoIG1hdGVyaWFsLCBwcm9ncmFtLCBn
ZW9tZXRyeSApIHsKIAotICAgICAgICAgICAgaWYgKCBnZW9tZXRyeSAmJiBnZW9tZXRyeS5pc0lu
c3RhbmNlZEJ1ZmZlckdlb21ldHJ5ICkgeworICAgICAgICAgICAgaWYgKCBnZW9tZXRyeSAmJiBn
ZW9tZXRyeS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5ICYmICEgY2FwYWJpbGl0aWVzLmlzV2Vi
R0wyICkgewogCiAgICAgICAgICAgICAgICAgaWYgKCBleHRlbnNpb25zLmdldCggJ0FOR0xFX2lu
c3RhbmNlZF9hcnJheXMnICkgPT09IG51bGwgKSB7CiAKQEAgLTIyOTExLDcgKzIzOTMyLDcgQEAK
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9nbC5iaW5kQnVmZmVyKCBfZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlciggMzQ5NjIsIGJ1ZmZlciApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9nbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKCBwcm9n
cmFtQXR0cmlidXRlLCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUgKiBieXRlc1BlckVs
ZW1lbnQsIG9mZnNldCAqIGJ5dGVzUGVyRWxlbWVudCApOwogCiAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewpAQCAtMjI5MzIsNyArMjM5NTMsNyBAQAogCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZm
ZXIoIF9nbC5BUlJBWV9CVUZGRVIsIGJ1ZmZlciApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9nbC5iaW5kQnVmZmVyKCAzNDk2MiwgYnVmZmVyICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX2dsLnZlcnRleEF0dHJpYlBvaW50ZXIoIHByb2dyYW1BdHRyaWJ1dGUsIHNpemUs
IHR5cGUsIG5vcm1hbGl6ZWQsIDAsIDAgKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgfQpA
QCAtMjMwNTAsNyArMjQwNzEsMjMgQEAKIAogICAgICAgICAvLyBSZW5kZXJpbmcKIAotICAgICAg
ICB0aGlzLnJlbmRlciA9IGZ1bmN0aW9uICggc2NlbmUsIGNhbWVyYSwgcmVuZGVyVGFyZ2V0LCBm
b3JjZUNsZWFyICkgeworICAgICAgICB0aGlzLnJlbmRlciA9IGZ1bmN0aW9uICggc2NlbmUsIGNh
bWVyYSApIHsKKworICAgICAgICAgICAgdmFyIHJlbmRlclRhcmdldCwgZm9yY2VDbGVhcjsKKwor
ICAgICAgICAgICAgaWYgKCBhcmd1bWVudHNbIDIgXSAhPT0gdW5kZWZpbmVkICkgeworCisgICAg
ICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXIoKTog
dGhlIHJlbmRlclRhcmdldCBhcmd1bWVudCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnNldFJlbmRl
clRhcmdldCgpIGluc3RlYWQuJyApOworICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldCA9IGFy
Z3VtZW50c1sgMiBdOworCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggYXJndW1l
bnRzWyAzIF0gIT09IHVuZGVmaW5lZCApIHsKKworICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fy
biggJ1RIUkVFLldlYkdMUmVuZGVyZXIucmVuZGVyKCk6IHRoZSBmb3JjZUNsZWFyIGFyZ3VtZW50
IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuY2xlYXIoKSBpbnN0ZWFkLicgKTsKKyAgICAgICAgICAg
ICAgICBmb3JjZUNsZWFyID0gYXJndW1lbnRzWyAzIF07CisKKyAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgaWYgKCAhICggY2FtZXJhICYmIGNhbWVyYS5pc0NhbWVyYSApICkgewogCkBAIC0y
MzA2Myw3ICsyNDEwMCw5IEBACiAKICAgICAgICAgICAgIC8vIHJlc2V0IGNhY2hpbmcgZm9yIHRo
aXMgZnJhbWUKIAotICAgICAgICAgICAgX2N1cnJlbnRHZW9tZXRyeVByb2dyYW0gPSAnJzsKKyAg
ICAgICAgICAgIF9jdXJyZW50R2VvbWV0cnlQcm9ncmFtLmdlb21ldHJ5ID0gbnVsbDsKKyAgICAg
ICAgICAgIF9jdXJyZW50R2VvbWV0cnlQcm9ncmFtLnByb2dyYW0gPSBudWxsOworICAgICAgICAg
ICAgX2N1cnJlbnRHZW9tZXRyeVByb2dyYW0ud2lyZWZyYW1lID0gZmFsc2U7CiAgICAgICAgICAg
ICBfY3VycmVudE1hdGVyaWFsSWQgPSAtIDE7CiAgICAgICAgICAgICBfY3VycmVudENhbWVyYSA9
IG51bGw7CiAKQEAgLTIzMDg2LDcgKzI0MTI1LDcgQEAKICAgICAgICAgICAgIGN1cnJlbnRSZW5k
ZXJTdGF0ZSA9IHJlbmRlclN0YXRlcy5nZXQoIHNjZW5lLCBjYW1lcmEgKTsKICAgICAgICAgICAg
IGN1cnJlbnRSZW5kZXJTdGF0ZS5pbml0KCk7CiAKLSAgICAgICAgICAgIHNjZW5lLm9uQmVmb3Jl
UmVuZGVyKCBfdGhpcywgc2NlbmUsIGNhbWVyYSwgcmVuZGVyVGFyZ2V0ICk7CisgICAgICAgICAg
ICBzY2VuZS5vbkJlZm9yZVJlbmRlciggX3RoaXMsIHNjZW5lLCBjYW1lcmEsIHJlbmRlclRhcmdl
dCB8fCBfY3VycmVudFJlbmRlclRhcmdldCApOwogCiAgICAgICAgICAgICBfcHJvalNjcmVlbk1h
dHJpeC5tdWx0aXBseU1hdHJpY2VzKCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeCwgY2FtZXJhLm1h
dHJpeFdvcmxkSW52ZXJzZSApOwogICAgICAgICAgICAgX2ZydXN0dW0uc2V0RnJvbU1hdHJpeCgg
X3Byb2pTY3JlZW5NYXRyaXggKTsKQEAgLTIzMDk3LDcgKzI0MTM2LDcgQEAKICAgICAgICAgICAg
IGN1cnJlbnRSZW5kZXJMaXN0ID0gcmVuZGVyTGlzdHMuZ2V0KCBzY2VuZSwgY2FtZXJhICk7CiAg
ICAgICAgICAgICBjdXJyZW50UmVuZGVyTGlzdC5pbml0KCk7CiAKLSAgICAgICAgICAgIHByb2pl
Y3RPYmplY3QoIHNjZW5lLCBjYW1lcmEsIF90aGlzLnNvcnRPYmplY3RzICk7CisgICAgICAgICAg
ICBwcm9qZWN0T2JqZWN0KCBzY2VuZSwgY2FtZXJhLCAwLCBfdGhpcy5zb3J0T2JqZWN0cyApOwog
CiAgICAgICAgICAgICBpZiAoIF90aGlzLnNvcnRPYmplY3RzID09PSB0cnVlICkgewogCkBAIC0y
MzEyMSwxNCArMjQxNjAsMTIgQEAKIAogICAgICAgICAgICAgaWYgKCB0aGlzLmluZm8uYXV0b1Jl
c2V0ICkgdGhpcy5pbmZvLnJlc2V0KCk7CiAKLSAgICAgICAgICAgIGlmICggcmVuZGVyVGFyZ2V0
ID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICBpZiAoIHJlbmRlclRhcmdldCAhPT0gdW5k
ZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0ID0gbnVsbDsKKyAgICAg
ICAgICAgICAgICB0aGlzLnNldFJlbmRlclRhcmdldCggcmVuZGVyVGFyZ2V0ICk7CiAKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgdGhpcy5zZXRSZW5kZXJUYXJnZXQoIHJlbmRlclRhcmdl
dCApOwotCiAgICAgICAgICAgICAvLwogCiAgICAgICAgICAgICBiYWNrZ3JvdW5kLnJlbmRlcigg
Y3VycmVudFJlbmRlckxpc3QsIHNjZW5lLCBjYW1lcmEsIGZvcmNlQ2xlYXIgKTsKQEAgLTIzMTU3
LDE3ICsyNDE5NCwyMSBAQAogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIGN1c3Rv
bSByZW5kZXJlcnMKKyAgICAgICAgICAgIC8vCisKKyAgICAgICAgICAgIHNjZW5lLm9uQWZ0ZXJS
ZW5kZXIoIF90aGlzLCBzY2VuZSwgY2FtZXJhICk7CisKKyAgICAgICAgICAgIC8vCiAKLSAgICAg
ICAgICAgIHZhciBzcHJpdGVzQXJyYXkgPSBjdXJyZW50UmVuZGVyU3RhdGUuc3RhdGUuc3ByaXRl
c0FycmF5OworICAgICAgICAgICAgaWYgKCBfY3VycmVudFJlbmRlclRhcmdldCAhPT0gbnVsbCAp
IHsKIAotICAgICAgICAgICAgc3ByaXRlUmVuZGVyZXIucmVuZGVyKCBzcHJpdGVzQXJyYXksIHNj
ZW5lLCBjYW1lcmEgKTsKKyAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBtaXBtYXAgaWYgd2Un
cmUgdXNpbmcgYW55IGtpbmQgb2YgbWlwbWFwIGZpbHRlcmluZwogCi0gICAgICAgICAgICAvLyBH
ZW5lcmF0ZSBtaXBtYXAgaWYgd2UncmUgdXNpbmcgYW55IGtpbmQgb2YgbWlwbWFwIGZpbHRlcmlu
ZworICAgICAgICAgICAgICAgIHRleHR1cmVzLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcCggX2N1
cnJlbnRSZW5kZXJUYXJnZXQgKTsKIAotICAgICAgICAgICAgaWYgKCByZW5kZXJUYXJnZXQgKSB7
CisgICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSBtdWx0aXNhbXBsZSByZW5kZXJidWZmZXJzIHRv
IGEgc2luZ2xlLXNhbXBsZSB0ZXh0dXJlIGlmIG5lY2Vzc2FyeQogCi0gICAgICAgICAgICAgICAg
dGV4dHVyZXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKCByZW5kZXJUYXJnZXQgKTsKKyAgICAg
ICAgICAgICAgICB0ZXh0dXJlcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldCggX2N1cnJl
bnRSZW5kZXJUYXJnZXQgKTsKIAogICAgICAgICAgICAgfQogCkBAIC0yMzE3OSw4ICsyNDIyMCw2
IEBACiAKICAgICAgICAgICAgIHN0YXRlLnNldFBvbHlnb25PZmZzZXQoIGZhbHNlICk7CiAKLSAg
ICAgICAgICAgIHNjZW5lLm9uQWZ0ZXJSZW5kZXIoIF90aGlzLCBzY2VuZSwgY2FtZXJhICk7Ci0K
ICAgICAgICAgICAgIGlmICggdnIuZW5hYmxlZCApIHsKIAogICAgICAgICAgICAgICAgIHZyLnN1
Ym1pdEZyYW1lKCk7CkBAIC0yMzE5NCw3MCArMjQyMzMsMjMgQEAKIAogICAgICAgICB9OwogCi0g
ICAgICAgIC8qCi0gICAgICAgIC8vIFRPRE8gRHVwbGljYXRlZCBjb2RlIChGcnVzdHVtKQotCi0g
ICAgICAgIHZhciBfc3BoZXJlID0gbmV3IFNwaGVyZSgpOwotCi0gICAgICAgIGZ1bmN0aW9uIGlz
T2JqZWN0Vmlld2FibGUoIG9iamVjdCApIHsKLQotICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0g
b2JqZWN0Lmdlb21ldHJ5OwotCi0gICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmJvdW5kaW5nU3Bo
ZXJlID09PSBudWxsICkKLSAgICAgICAgICAgICAgICBnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdT
cGhlcmUoKTsKLQotICAgICAgICAgICAgX3NwaGVyZS5jb3B5KCBnZW9tZXRyeS5ib3VuZGluZ1Nw
aGVyZSApLgotICAgICAgICAgICAgYXBwbHlNYXRyaXg0KCBvYmplY3QubWF0cml4V29ybGQgKTsK
LQotICAgICAgICAgICAgcmV0dXJuIGlzU3BoZXJlVmlld2FibGUoIF9zcGhlcmUgKTsKLQotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gaXNTcHJpdGVWaWV3YWJsZSggc3ByaXRlICkgewot
Ci0gICAgICAgICAgICBfc3BoZXJlLmNlbnRlci5zZXQoIDAsIDAsIDAgKTsKLSAgICAgICAgICAg
IF9zcGhlcmUucmFkaXVzID0gMC43MDcxMDY3ODExODY1NDc2OwotICAgICAgICAgICAgX3NwaGVy
ZS5hcHBseU1hdHJpeDQoIHNwcml0ZS5tYXRyaXhXb3JsZCApOwotCi0gICAgICAgICAgICByZXR1
cm4gaXNTcGhlcmVWaWV3YWJsZSggX3NwaGVyZSApOwotCi0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiBpc1NwaGVyZVZpZXdhYmxlKCBzcGhlcmUgKSB7Ci0KLSAgICAgICAgICAgIGlmICgg
ISBfZnJ1c3R1bS5pbnRlcnNlY3RzU3BoZXJlKCBzcGhlcmUgKSApIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICAgICAgdmFyIG51bVBsYW5lcyA9IF9jbGlwcGluZy5udW1QbGFuZXM7Ci0KLSAgICAg
ICAgICAgIGlmICggbnVtUGxhbmVzID09PSAwICkgcmV0dXJuIHRydWU7CisgICAgICAgIGZ1bmN0
aW9uIHByb2plY3RPYmplY3QoIG9iamVjdCwgY2FtZXJhLCBncm91cE9yZGVyLCBzb3J0T2JqZWN0
cyApIHsKIAotICAgICAgICAgICAgdmFyIHBsYW5lcyA9IF90aGlzLmNsaXBwaW5nUGxhbmVzLAot
Ci0gICAgICAgICAgICAgICAgY2VudGVyID0gc3BoZXJlLmNlbnRlciwKLSAgICAgICAgICAgICAg
ICBuZWdSYWQgPSAtIHNwaGVyZS5yYWRpdXMsCi0gICAgICAgICAgICAgICAgaSA9IDA7Ci0KLSAg
ICAgICAgICAgIGRvIHsKLQotICAgICAgICAgICAgICAgIC8vIG91dCB3aGVuIGRlZXBlciB0aGFu
IHJhZGl1cyBpbiB0aGUgbmVnYXRpdmUgaGFsZnNwYWNlCi0gICAgICAgICAgICAgICAgaWYgKCBw
bGFuZXNbIGkgXS5kaXN0YW5jZVRvUG9pbnQoIGNlbnRlciApIDwgbmVnUmFkICkgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgICAgICB9IHdoaWxlICggKysgaSAhPT0gbnVtUGxhbmVzICk7CisgICAg
ICAgICAgICBpZiAoIG9iamVjdC52aXNpYmxlID09PSBmYWxzZSApIHJldHVybjsKIAotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB2YXIgdmlzaWJsZSA9IG9iamVjdC5sYXll
cnMudGVzdCggY2FtZXJhLmxheWVycyApOwogCi0gICAgICAgIH0KLSAgICAgICAgKi8KKyAgICAg
ICAgICAgIGlmICggdmlzaWJsZSApIHsKIAotICAgICAgICBmdW5jdGlvbiBwcm9qZWN0T2JqZWN0
KCBvYmplY3QsIGNhbWVyYSwgc29ydE9iamVjdHMgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBv
YmplY3QuaXNHcm91cCApIHsKIAotICAgICAgICAgICAgaWYgKCBvYmplY3QudmlzaWJsZSA9PT0g
ZmFsc2UgKSByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGdyb3VwT3JkZXIgPSBvYmplY3Qu
cmVuZGVyT3JkZXI7CiAKLSAgICAgICAgICAgIHZhciB2aXNpYmxlID0gb2JqZWN0LmxheWVycy50
ZXN0KCBjYW1lcmEubGF5ZXJzICk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggb2JqZWN0
LmlzTE9EICkgewogCi0gICAgICAgICAgICBpZiAoIHZpc2libGUgKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICggb2JqZWN0LmF1dG9VcGRhdGUgPT09IHRydWUgKSBvYmplY3QudXBkYXRlKCBj
YW1lcmEgKTsKIAotICAgICAgICAgICAgICAgIGlmICggb2JqZWN0LmlzTGlnaHQgKSB7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICggb2JqZWN0LmlzTGlnaHQgKSB7CiAKICAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFJlbmRlclN0YXRlLnB1c2hMaWdodCggb2JqZWN0ICk7CiAKQEAgLTIz
MjcxLDcgKzI0MjYzLDIxIEBACiAKICAgICAgICAgICAgICAgICAgICAgaWYgKCAhIG9iamVjdC5m
cnVzdHVtQ3VsbGVkIHx8IF9mcnVzdHVtLmludGVyc2VjdHNTcHJpdGUoIG9iamVjdCApICkgewog
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVuZGVyU3RhdGUucHVzaFNwcml0ZSgg
b2JqZWN0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNvcnRPYmplY3RzICkgewor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0
aW9uKCBvYmplY3QubWF0cml4V29ybGQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuYXBwbHlNYXRyaXg0KCBfcHJvalNjcmVlbk1hdHJpeCApOworCisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IG9iamVj
dHMudXBkYXRlKCBvYmplY3QgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRlcmlh
bCA9IG9iamVjdC5tYXRlcmlhbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRl
cmlhbC52aXNpYmxlICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJl
bmRlckxpc3QucHVzaCggb2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwT3JkZXIsIF92
ZWN0b3IzLnosIG51bGwgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgICAgIH0KIApAQCAtMjMyODQsNyArMjQyOTAsNyBAQAogCiAgICAgICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVuZGVyTGlzdC5wdXNoKCBv
YmplY3QsIG51bGwsIG9iamVjdC5tYXRlcmlhbCwgX3ZlY3RvcjMueiwgbnVsbCApOworICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50UmVuZGVyTGlzdC5wdXNoKCBvYmplY3QsIG51bGwsIG9iamVj
dC5tYXRlcmlhbCwgZ3JvdXBPcmRlciwgX3ZlY3RvcjMueiwgbnVsbCApOwogCiAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICggb2JqZWN0LmlzTWVzaCB8fCBvYmplY3QuaXNMaW5lIHx8IG9iamVj
dC5pc1BvaW50cyApIHsKIApAQCAtMjMzMTcsNyArMjQzMjMsNyBAQAogCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZ3JvdXBNYXRlcmlhbCAmJiBncm91cE1hdGVyaWFsLnZp
c2libGUgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRS
ZW5kZXJMaXN0LnB1c2goIG9iamVjdCwgZ2VvbWV0cnksIGdyb3VwTWF0ZXJpYWwsIF92ZWN0b3Iz
LnosIGdyb3VwICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50
UmVuZGVyTGlzdC5wdXNoKCBvYmplY3QsIGdlb21ldHJ5LCBncm91cE1hdGVyaWFsLCBncm91cE9y
ZGVyLCBfdmVjdG9yMy56LCBncm91cCApOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KIApAQCAtMjMzMjUsNyArMjQzMzEsNyBAQAogCiAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCBtYXRlcmlhbC52aXNpYmxlICkgewogCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFJlbmRlckxpc3QucHVzaCggb2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJp
YWwsIF92ZWN0b3IzLnosIG51bGwgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50UmVuZGVyTGlzdC5wdXNoKCBvYmplY3QsIGdlb21ldHJ5LCBtYXRlcmlhbCwgZ3JvdXBPcmRl
ciwgX3ZlY3RvcjMueiwgbnVsbCApOwogCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKQEAg
LTIzMzM5LDcgKzI0MzQ1LDcgQEAKIAogICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0g
Y2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgIHByb2pl
Y3RPYmplY3QoIGNoaWxkcmVuWyBpIF0sIGNhbWVyYSwgc29ydE9iamVjdHMgKTsKKyAgICAgICAg
ICAgICAgICBwcm9qZWN0T2JqZWN0KCBjaGlsZHJlblsgaSBdLCBjYW1lcmEsIGdyb3VwT3JkZXIs
IHNvcnRPYmplY3RzICk7CiAKICAgICAgICAgICAgIH0KIApAQCAtMjMzNjgsMjIgKzI0Mzc0LDkg
QEAKIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvYmplY3QubGF5ZXJzLnRlc3QoIGNh
bWVyYTIubGF5ZXJzICkgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICd2
aWV3cG9ydCcgaW4gY2FtZXJhMiApIHsgLy8gWFIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS52aWV3cG9ydCggX2N1cnJlbnRWaWV3cG9ydC5jb3B5KCBjYW1lcmEyLnZpZXdwb3J0
ICkgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS52aWV3cG9ydCgg
X2N1cnJlbnRWaWV3cG9ydC5jb3B5KCBjYW1lcmEyLnZpZXdwb3J0ICkgKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGJvdW5kcyA9IGNhbWVyYTIuYm91bmRzOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciB4ID0gYm91bmRzLnggKiBfd2lkdGg7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciB5ID0gYm91bmRzLnkgKiBfaGVpZ2h0OwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBib3VuZHMueiAqIF93aWR0aDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGJvdW5kcy53ICogX2hlaWdo
dDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS52aWV3cG9ydCggX2N1
cnJlbnRWaWV3cG9ydC5zZXQoIHgsIHksIHdpZHRoLCBoZWlnaHQgKS5tdWx0aXBseVNjYWxhcigg
X3BpeGVsUmF0aW8gKSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJTdGF0ZS5zZXR1cExpZ2h0cyggY2Ft
ZXJhMiApOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyT2JqZWN0KCBvYmpl
Y3QsIHNjZW5lLCBjYW1lcmEyLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwICk7CiAKQEAgLTIz
NDEzLDE1ICsyNDQwNiwxNSBAQAogCiAgICAgICAgICAgICBpZiAoIG9iamVjdC5pc0ltbWVkaWF0
ZVJlbmRlck9iamVjdCApIHsKIAotICAgICAgICAgICAgICAgIHZhciBmcm9udEZhY2VDVyA9ICgg
b2JqZWN0LmlzTWVzaCAmJiBvYmplY3QubWF0cml4V29ybGQuZGV0ZXJtaW5hbnQoKSA8IDAgKTsK
LQotICAgICAgICAgICAgICAgIHN0YXRlLnNldE1hdGVyaWFsKCBtYXRlcmlhbCwgZnJvbnRGYWNl
Q1cgKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRNYXRlcmlhbCggbWF0ZXJpYWwgKTsKIAog
ICAgICAgICAgICAgICAgIHZhciBwcm9ncmFtID0gc2V0UHJvZ3JhbSggY2FtZXJhLCBzY2VuZS5m
b2csIG1hdGVyaWFsLCBvYmplY3QgKTsKIAotICAgICAgICAgICAgICAgIF9jdXJyZW50R2VvbWV0
cnlQcm9ncmFtID0gJyc7CisgICAgICAgICAgICAgICAgX2N1cnJlbnRHZW9tZXRyeVByb2dyYW0u
Z2VvbWV0cnkgPSBudWxsOworICAgICAgICAgICAgICAgIF9jdXJyZW50R2VvbWV0cnlQcm9ncmFt
LnByb2dyYW0gPSBudWxsOworICAgICAgICAgICAgICAgIF9jdXJyZW50R2VvbWV0cnlQcm9ncmFt
LndpcmVmcmFtZSA9IGZhbHNlOwogCi0gICAgICAgICAgICAgICAgcmVuZGVyT2JqZWN0SW1tZWRp
YXRlKCBvYmplY3QsIHByb2dyYW0sIG1hdGVyaWFsICk7CisgICAgICAgICAgICAgICAgcmVuZGVy
T2JqZWN0SW1tZWRpYXRlKCBvYmplY3QsIHByb2dyYW0gKTsKIAogICAgICAgICAgICAgfSBlbHNl
IHsKIApAQCAtMjM0NDEsNiArMjQ0MzQsOCBAQAogICAgICAgICAgICAgdmFyIGxpZ2h0cyA9IGN1
cnJlbnRSZW5kZXJTdGF0ZS5zdGF0ZS5saWdodHM7CiAgICAgICAgICAgICB2YXIgc2hhZG93c0Fy
cmF5ID0gY3VycmVudFJlbmRlclN0YXRlLnN0YXRlLnNoYWRvd3NBcnJheTsKIAorICAgICAgICAg
ICAgdmFyIGxpZ2h0c1N0YXRlVmVyc2lvbiA9IGxpZ2h0cy5zdGF0ZS52ZXJzaW9uOworCiAgICAg
ICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHByb2dyYW1DYWNoZS5nZXRQYXJhbWV0ZXJzKAogICAg
ICAgICAgICAgICAgIG1hdGVyaWFsLCBsaWdodHMuc3RhdGUsIHNoYWRvd3NBcnJheSwgZm9nLCBf
Y2xpcHBpbmcubnVtUGxhbmVzLCBfY2xpcHBpbmcubnVtSW50ZXJzZWN0aW9uLCBvYmplY3QgKTsK
IApAQCAtMjM0NTksOSArMjQ0NTQsMTAgQEAKICAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkIGds
c2wgb3IgcGFyYW1ldGVycwogICAgICAgICAgICAgICAgIHJlbGVhc2VNYXRlcmlhbFByb2dyYW1S
ZWZlcmVuY2UoIG1hdGVyaWFsICk7CiAKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGVyaWFs
UHJvcGVydGllcy5saWdodHNIYXNoICE9PSBsaWdodHMuc3RhdGUuaGFzaCApIHsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIG1hdGVyaWFsUHJvcGVydGllcy5saWdodHNTdGF0ZVZlcnNpb24gIT09
IGxpZ2h0c1N0YXRlVmVyc2lvbiApIHsKKworICAgICAgICAgICAgICAgIG1hdGVyaWFsUHJvcGVy
dGllcy5saWdodHNTdGF0ZVZlcnNpb24gPSBsaWdodHNTdGF0ZVZlcnNpb247CiAKLSAgICAgICAg
ICAgICAgICBwcm9wZXJ0aWVzLnVwZGF0ZSggbWF0ZXJpYWwsICdsaWdodHNIYXNoJywgbGlnaHRz
LnN0YXRlLmhhc2ggKTsKICAgICAgICAgICAgICAgICBwcm9ncmFtQ2hhbmdlID0gZmFsc2U7CiAK
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHBhcmFtZXRlcnMuc2hhZGVySUQgIT09IHVuZGVmaW5l
ZCApIHsKQEAgLTIzNDg0LDcgKzI0NDgwLDcgQEAKIAogICAgICAgICAgICAgICAgICAgICBtYXRl
cmlhbFByb3BlcnRpZXMuc2hhZGVyID0gewogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTog
bWF0ZXJpYWwudHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zOiBVbmlmb3Jt
c1V0aWxzLmNsb25lKCBzaGFkZXIudW5pZm9ybXMgKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVuaWZvcm1zOiBjbG9uZVVuaWZvcm1zKCBzaGFkZXIudW5pZm9ybXMgKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIHZlcnRleFNoYWRlcjogc2hhZGVyLnZlcnRleFNoYWRlciwKICAgICAgICAg
ICAgICAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiBzaGFkZXIuZnJhZ21lbnRTaGFkZXIKICAg
ICAgICAgICAgICAgICAgICAgfTsKQEAgLTIzNTAyLDYgKzI0NDk4LDkgQEAKIAogICAgICAgICAg
ICAgICAgIG1hdGVyaWFsLm9uQmVmb3JlQ29tcGlsZSggbWF0ZXJpYWxQcm9wZXJ0aWVzLnNoYWRl
ciwgX3RoaXMgKTsKIAorICAgICAgICAgICAgICAgIC8vIENvbXB1dGluZyBjb2RlIGFnYWluIGFz
IG9uQmVmb3JlQ29tcGlsZSBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBzaGFkZXJzCisgICAgICAgICAg
ICAgICAgY29kZSA9IHByb2dyYW1DYWNoZS5nZXRQcm9ncmFtQ29kZSggbWF0ZXJpYWwsIHBhcmFt
ZXRlcnMgKTsKKwogICAgICAgICAgICAgICAgIHByb2dyYW0gPSBwcm9ncmFtQ2FjaGUuYWNxdWly
ZVByb2dyYW0oIG1hdGVyaWFsLCBtYXRlcmlhbFByb3BlcnRpZXMuc2hhZGVyLCBwYXJhbWV0ZXJz
LCBjb2RlICk7CiAKICAgICAgICAgICAgICAgICBtYXRlcmlhbFByb3BlcnRpZXMucHJvZ3JhbSA9
IHByb2dyYW07CkBAIC0yMzU1OSwxMyArMjQ1NTgsMTQgQEAKIAogICAgICAgICAgICAgLy8gc3Rv
cmUgdGhlIGxpZ2h0IHNldHVwIGl0IHdhcyBjcmVhdGVkIGZvcgogCi0gICAgICAgICAgICBtYXRl
cmlhbFByb3BlcnRpZXMubGlnaHRzSGFzaCA9IGxpZ2h0cy5zdGF0ZS5oYXNoOworICAgICAgICAg
ICAgbWF0ZXJpYWxQcm9wZXJ0aWVzLmxpZ2h0c1N0YXRlVmVyc2lvbiA9IGxpZ2h0c1N0YXRlVmVy
c2lvbjsKIAogICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5saWdodHMgKSB7CiAKICAgICAgICAg
ICAgICAgICAvLyB3aXJlIHVwIHRoZSBtYXRlcmlhbCB0byB0aGlzIHJlbmRlcmVyJ3MgbGlnaHRp
bmcgc3RhdGUKIAogICAgICAgICAgICAgICAgIHVuaWZvcm1zLmFtYmllbnRMaWdodENvbG9yLnZh
bHVlID0gbGlnaHRzLnN0YXRlLmFtYmllbnQ7CisgICAgICAgICAgICAgICAgdW5pZm9ybXMubGln
aHRQcm9iZS52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5wcm9iZTsKICAgICAgICAgICAgICAgICB1bmlm
b3Jtcy5kaXJlY3Rpb25hbExpZ2h0cy52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5kaXJlY3Rpb25hbDsK
ICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5zcG90TGlnaHRzLnZhbHVlID0gbGlnaHRzLnN0YXRl
LnNwb3Q7CiAgICAgICAgICAgICAgICAgdW5pZm9ybXMucmVjdEFyZWFMaWdodHMudmFsdWUgPSBs
aWdodHMuc3RhdGUucmVjdEFyZWE7CkBAIC0yMzU5Miw3ICsyNDU5Miw3IEBACiAKICAgICAgICAg
ZnVuY3Rpb24gc2V0UHJvZ3JhbSggY2FtZXJhLCBmb2csIG1hdGVyaWFsLCBvYmplY3QgKSB7CiAK
LSAgICAgICAgICAgIF91c2VkVGV4dHVyZVVuaXRzID0gMDsKKyAgICAgICAgICAgIHRleHR1cmVz
LnJlc2V0VGV4dHVyZVVuaXRzKCk7CiAKICAgICAgICAgICAgIHZhciBtYXRlcmlhbFByb3BlcnRp
ZXMgPSBwcm9wZXJ0aWVzLmdldCggbWF0ZXJpYWwgKTsKICAgICAgICAgICAgIHZhciBsaWdodHMg
PSBjdXJyZW50UmVuZGVyU3RhdGUuc3RhdGUubGlnaHRzOwpAQCAtMjM2MjYsNyArMjQ2MjYsNyBA
QAogCiAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTsKIAot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGVyaWFsLmxpZ2h0cyAmJiBtYXRlcmlhbFBy
b3BlcnRpZXMubGlnaHRzSGFzaCAhPT0gbGlnaHRzLnN0YXRlLmhhc2ggKSB7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICggbWF0ZXJpYWwubGlnaHRzICYmIG1hdGVyaWFsUHJvcGVydGllcy5s
aWdodHNTdGF0ZVZlcnNpb24gIT09IGxpZ2h0cy5zdGF0ZS52ZXJzaW9uICkgewogCiAgICAgICAg
ICAgICAgICAgICAgIG1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTsKIApAQCAtMjM2NzEsNyAr
MjQ2NzEsNyBAQAogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggcmVmcmVzaFBy
b2dyYW0gfHwgY2FtZXJhICE9PSBfY3VycmVudENhbWVyYSApIHsKKyAgICAgICAgICAgIGlmICgg
cmVmcmVzaFByb2dyYW0gfHwgX2N1cnJlbnRDYW1lcmEgIT09IGNhbWVyYSApIHsKIAogICAgICAg
ICAgICAgICAgIHBfdW5pZm9ybXMuc2V0VmFsdWUoIF9nbCwgJ3Byb2plY3Rpb25NYXRyaXgnLCBj
YW1lcmEucHJvamVjdGlvbk1hdHJpeCApOwogCkBAIC0yMzY4MiwxMSArMjQ2ODIsOSBAQAogCiAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gQXZvaWQgdW5uZWVkZWQgdW5p
Zm9ybSB1cGRhdGVzIHBlciBBcnJheUNhbWVyYSdzIHN1Yi1jYW1lcmEKLQotICAgICAgICAgICAg
ICAgIGlmICggX2N1cnJlbnRDYW1lcmEgIT09ICggX2N1cnJlbnRBcnJheUNhbWVyYSB8fCBjYW1l
cmEgKSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIF9jdXJyZW50Q2FtZXJhICE9PSBjYW1lcmEg
KSB7CiAKLSAgICAgICAgICAgICAgICAgICAgX2N1cnJlbnRDYW1lcmEgPSAoIF9jdXJyZW50QXJy
YXlDYW1lcmEgfHwgY2FtZXJhICk7CisgICAgICAgICAgICAgICAgICAgIF9jdXJyZW50Q2FtZXJh
ID0gY2FtZXJhOwogCiAgICAgICAgICAgICAgICAgICAgIC8vIGxpZ2h0aW5nIHVuaWZvcm1zIGRl
cGVuZCBvbiB0aGUgY2FtZXJhIHNvIGVuZm9yY2UgYW4gdXBkYXRlCiAgICAgICAgICAgICAgICAg
ICAgIC8vIG5vdywgaW4gY2FzZSB0aGlzIG1hdGVyaWFsIHN1cHBvcnRzIGxpZ2h0cyAtIG9yIGxh
dGVyLCB3aGVuCkBAIC0yMzc3Miw3ICsyNDc3MCw3IEBACiAKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgcF91bmlmb3Jtcy5zZXRWYWx1ZSggX2ds
LCAnYm9uZVRleHR1cmUnLCBza2VsZXRvbi5ib25lVGV4dHVyZSApOworICAgICAgICAgICAgICAg
ICAgICAgICAgcF91bmlmb3Jtcy5zZXRWYWx1ZSggX2dsLCAnYm9uZVRleHR1cmUnLCBza2VsZXRv
bi5ib25lVGV4dHVyZSwgdGV4dHVyZXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHBfdW5p
Zm9ybXMuc2V0VmFsdWUoIF9nbCwgJ2JvbmVUZXh0dXJlU2l6ZScsIHNrZWxldG9uLmJvbmVUZXh0
dXJlU2l6ZSApOwogCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yMzg1MCw2ICsy
NDg0OCwxMiBAQAogCiAgICAgICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIG1hdGVyaWFsLmlzTWVzaE1hdGNhcE1hdGVyaWFsICkgeworCisgICAgICAgICAg
ICAgICAgICAgIHJlZnJlc2hVbmlmb3Jtc0NvbW1vbiggbV91bmlmb3JtcywgbWF0ZXJpYWwgKTsK
KworICAgICAgICAgICAgICAgICAgICByZWZyZXNoVW5pZm9ybXNNYXRjYXAoIG1fdW5pZm9ybXMs
IG1hdGVyaWFsICk7CisKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc01l
c2hEZXB0aE1hdGVyaWFsICkgewogCiAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hVbmlmb3Jt
c0NvbW1vbiggbV91bmlmb3JtcywgbWF0ZXJpYWwgKTsKQEAgLTIzODc5LDkgKzI0ODgzLDEzIEBA
CiAKICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFVuaWZvcm1zUG9pbnRzKCBtX3VuaWZvcm1z
LCBtYXRlcmlhbCApOwogCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0ZXJpYWwuaXNT
cHJpdGVNYXRlcmlhbCApIHsKKworICAgICAgICAgICAgICAgICAgICByZWZyZXNoVW5pZm9ybXNT
cHJpdGVzKCBtX3VuaWZvcm1zLCBtYXRlcmlhbCApOworCiAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICggbWF0ZXJpYWwuaXNTaGFkb3dNYXRlcmlhbCApIHsKIAotICAgICAgICAgICAgICAgICAg
ICBtX3VuaWZvcm1zLmNvbG9yLnZhbHVlID0gbWF0ZXJpYWwuY29sb3I7CisgICAgICAgICAgICAg
ICAgICAgIG1fdW5pZm9ybXMuY29sb3IudmFsdWUuY29weSggbWF0ZXJpYWwuY29sb3IgKTsKICAg
ICAgICAgICAgICAgICAgICAgbV91bmlmb3Jtcy5vcGFjaXR5LnZhbHVlID0gbWF0ZXJpYWwub3Bh
Y2l0eTsKIAogICAgICAgICAgICAgICAgIH0KQEAgLTIzODkyLDE3ICsyNDkwMCwyMyBAQAogICAg
ICAgICAgICAgICAgIGlmICggbV91bmlmb3Jtcy5sdGNfMSAhPT0gdW5kZWZpbmVkICkgbV91bmlm
b3Jtcy5sdGNfMS52YWx1ZSA9IFVuaWZvcm1zTGliLkxUQ18xOwogICAgICAgICAgICAgICAgIGlm
ICggbV91bmlmb3Jtcy5sdGNfMiAhPT0gdW5kZWZpbmVkICkgbV91bmlmb3Jtcy5sdGNfMi52YWx1
ZSA9IFVuaWZvcm1zTGliLkxUQ18yOwogCi0gICAgICAgICAgICAgICAgV2ViR0xVbmlmb3Jtcy51
cGxvYWQoIF9nbCwgbWF0ZXJpYWxQcm9wZXJ0aWVzLnVuaWZvcm1zTGlzdCwgbV91bmlmb3Jtcywg
X3RoaXMgKTsKKyAgICAgICAgICAgICAgICBXZWJHTFVuaWZvcm1zLnVwbG9hZCggX2dsLCBtYXRl
cmlhbFByb3BlcnRpZXMudW5pZm9ybXNMaXN0LCBtX3VuaWZvcm1zLCB0ZXh0dXJlcyApOwogCiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICggbWF0ZXJpYWwuaXNTaGFkZXJNYXRlcmlh
bCAmJiBtYXRlcmlhbC51bmlmb3Jtc05lZWRVcGRhdGUgPT09IHRydWUgKSB7CiAKLSAgICAgICAg
ICAgICAgICBXZWJHTFVuaWZvcm1zLnVwbG9hZCggX2dsLCBtYXRlcmlhbFByb3BlcnRpZXMudW5p
Zm9ybXNMaXN0LCBtX3VuaWZvcm1zLCBfdGhpcyApOworICAgICAgICAgICAgICAgIFdlYkdMVW5p
Zm9ybXMudXBsb2FkKCBfZ2wsIG1hdGVyaWFsUHJvcGVydGllcy51bmlmb3Jtc0xpc3QsIG1fdW5p
Zm9ybXMsIHRleHR1cmVzICk7CiAgICAgICAgICAgICAgICAgbWF0ZXJpYWwudW5pZm9ybXNOZWVk
VXBkYXRlID0gZmFsc2U7CiAKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKCBtYXRl
cmlhbC5pc1Nwcml0ZU1hdGVyaWFsICkgeworCisgICAgICAgICAgICAgICAgcF91bmlmb3Jtcy5z
ZXRWYWx1ZSggX2dsLCAnY2VudGVyJywgb2JqZWN0LmNlbnRlciApOworCisgICAgICAgICAgICB9
CisKICAgICAgICAgICAgIC8vIGNvbW1vbiBtYXRyaWNlcwogCiAgICAgICAgICAgICBwX3VuaWZv
cm1zLnNldFZhbHVlKCBfZ2wsICdtb2RlbFZpZXdNYXRyaXgnLCBvYmplY3QubW9kZWxWaWV3TWF0
cml4ICk7CkBAIC0yMzkyMSw3ICsyNDkzNSw3IEBACiAKICAgICAgICAgICAgIGlmICggbWF0ZXJp
YWwuY29sb3IgKSB7CiAKLSAgICAgICAgICAgICAgICB1bmlmb3Jtcy5kaWZmdXNlLnZhbHVlID0g
bWF0ZXJpYWwuY29sb3I7CisgICAgICAgICAgICAgICAgdW5pZm9ybXMuZGlmZnVzZS52YWx1ZS5j
b3B5KCBtYXRlcmlhbC5jb2xvciApOwogCiAgICAgICAgICAgICB9CiAKQEAgLTIzOTU3LDcgKzI0
OTcxLDcgQEAKICAgICAgICAgICAgICAgICAvLyAgV2ViR0xSZW5kZXJUYXJnZXRDdWJlIHdpbGwg
YmUgZmxpcHBlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKICAgICAgICAgICAgICAgICAv
LyAgV2ViR0xSZW5kZXJUYXJnZXRDdWJlLnRleHR1cmUgd2lsbCBiZSBmbGlwcGVkIGJlY2F1c2Ug
aXQncyBhIFRleHR1cmUgYW5kIE5PVCBhIEN1YmVUZXh0dXJlCiAgICAgICAgICAgICAgICAgLy8g
dGhpcyBjaGVjayBtdXN0IGJlIGhhbmRsZWQgZGlmZmVyZW50bHksIG9yIHJlbW92ZWQgZW50aXJl
bHksIGlmIFdlYkdMUmVuZGVyVGFyZ2V0Q3ViZSB1c2VzIGEgQ3ViZVRleHR1cmUgaW4gdGhlIGZ1
dHVyZQotICAgICAgICAgICAgICAgIHVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWUgPSAoICEgKCBt
YXRlcmlhbC5lbnZNYXAgJiYgbWF0ZXJpYWwuZW52TWFwLmlzQ3ViZVRleHR1cmUgKSApID8gMSA6
IC0gMTsKKyAgICAgICAgICAgICAgICB1bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlID0gbWF0ZXJp
YWwuZW52TWFwLmlzQ3ViZVRleHR1cmUgPyAtIDEgOiAxOwogCiAgICAgICAgICAgICAgICAgdW5p
Zm9ybXMucmVmbGVjdGl2aXR5LnZhbHVlID0gbWF0ZXJpYWwucmVmbGVjdGl2aXR5OwogICAgICAg
ICAgICAgICAgIHVuaWZvcm1zLnJlZnJhY3Rpb25SYXRpby52YWx1ZSA9IG1hdGVyaWFsLnJlZnJh
Y3Rpb25SYXRpbzsKQEAgLTI0MDUxLDcgKzI1MDY1LDcgQEAKIAogICAgICAgICBmdW5jdGlvbiBy
ZWZyZXNoVW5pZm9ybXNMaW5lKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7CiAKLSAgICAgICAgICAg
IHVuaWZvcm1zLmRpZmZ1c2UudmFsdWUgPSBtYXRlcmlhbC5jb2xvcjsKKyAgICAgICAgICAgIHVu
aWZvcm1zLmRpZmZ1c2UudmFsdWUuY29weSggbWF0ZXJpYWwuY29sb3IgKTsKICAgICAgICAgICAg
IHVuaWZvcm1zLm9wYWNpdHkudmFsdWUgPSBtYXRlcmlhbC5vcGFjaXR5OwogCiAgICAgICAgIH0K
QEAgLTI0MDY2LDcgKzI1MDgwLDcgQEAKIAogICAgICAgICBmdW5jdGlvbiByZWZyZXNoVW5pZm9y
bXNQb2ludHMoIHVuaWZvcm1zLCBtYXRlcmlhbCApIHsKIAotICAgICAgICAgICAgdW5pZm9ybXMu
ZGlmZnVzZS52YWx1ZSA9IG1hdGVyaWFsLmNvbG9yOworICAgICAgICAgICAgdW5pZm9ybXMuZGlm
ZnVzZS52YWx1ZS5jb3B5KCBtYXRlcmlhbC5jb2xvciApOwogICAgICAgICAgICAgdW5pZm9ybXMu
b3BhY2l0eS52YWx1ZSA9IG1hdGVyaWFsLm9wYWNpdHk7CiAgICAgICAgICAgICB1bmlmb3Jtcy5z
aXplLnZhbHVlID0gbWF0ZXJpYWwuc2l6ZSAqIF9waXhlbFJhdGlvOwogICAgICAgICAgICAgdW5p
Zm9ybXMuc2NhbGUudmFsdWUgPSBfaGVpZ2h0ICogMC41OwpAQCAtMjQwODcsOSArMjUxMDEsMzAg
QEAKIAogICAgICAgICB9CiAKKyAgICAgICAgZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zU3ByaXRl
cyggdW5pZm9ybXMsIG1hdGVyaWFsICkgeworCisgICAgICAgICAgICB1bmlmb3Jtcy5kaWZmdXNl
LnZhbHVlLmNvcHkoIG1hdGVyaWFsLmNvbG9yICk7CisgICAgICAgICAgICB1bmlmb3Jtcy5vcGFj
aXR5LnZhbHVlID0gbWF0ZXJpYWwub3BhY2l0eTsKKyAgICAgICAgICAgIHVuaWZvcm1zLnJvdGF0
aW9uLnZhbHVlID0gbWF0ZXJpYWwucm90YXRpb247CisgICAgICAgICAgICB1bmlmb3Jtcy5tYXAu
dmFsdWUgPSBtYXRlcmlhbC5tYXA7CisKKyAgICAgICAgICAgIGlmICggbWF0ZXJpYWwubWFwICE9
PSBudWxsICkgeworCisgICAgICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5tYXAubWF0cml4QXV0
b1VwZGF0ZSA9PT0gdHJ1ZSApIHsKKworICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5tYXAu
dXBkYXRlTWF0cml4KCk7CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB1
bmlmb3Jtcy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KCBtYXRlcmlhbC5tYXAubWF0cml4ICk7CisK
KyAgICAgICAgICAgIH0KKworICAgICAgICB9CisKICAgICAgICAgZnVuY3Rpb24gcmVmcmVzaFVu
aWZvcm1zRm9nKCB1bmlmb3JtcywgZm9nICkgewogCi0gICAgICAgICAgICB1bmlmb3Jtcy5mb2dD
b2xvci52YWx1ZSA9IGZvZy5jb2xvcjsKKyAgICAgICAgICAgIHVuaWZvcm1zLmZvZ0NvbG9yLnZh
bHVlLmNvcHkoIGZvZy5jb2xvciApOwogCiAgICAgICAgICAgICBpZiAoIGZvZy5pc0ZvZyApIHsK
IApAQCAtMjQxMTYsNyArMjUxNTEsNyBAQAogCiAgICAgICAgIGZ1bmN0aW9uIHJlZnJlc2hVbmlm
b3Jtc1Bob25nKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7CiAKLSAgICAgICAgICAgIHVuaWZvcm1z
LnNwZWN1bGFyLnZhbHVlID0gbWF0ZXJpYWwuc3BlY3VsYXI7CisgICAgICAgICAgICB1bmlmb3Jt
cy5zcGVjdWxhci52YWx1ZS5jb3B5KCBtYXRlcmlhbC5zcGVjdWxhciApOwogICAgICAgICAgICAg
dW5pZm9ybXMuc2hpbmluZXNzLnZhbHVlID0gTWF0aC5tYXgoIG1hdGVyaWFsLnNoaW5pbmVzcywg
MWUtNCApOyAvLyB0byBwcmV2ZW50IHBvdyggMC4wLCAwLjAgKQogCiAgICAgICAgICAgICBpZiAo
IG1hdGVyaWFsLmVtaXNzaXZlTWFwICkgewpAQCAtMjQyMzAsNiArMjUyNjUsNDAgQEAKIAogICAg
ICAgICB9CiAKKyAgICAgICAgZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zTWF0Y2FwKCB1bmlmb3Jt
cywgbWF0ZXJpYWwgKSB7CisKKyAgICAgICAgICAgIGlmICggbWF0ZXJpYWwubWF0Y2FwICkgewor
CisgICAgICAgICAgICAgICAgdW5pZm9ybXMubWF0Y2FwLnZhbHVlID0gbWF0ZXJpYWwubWF0Y2Fw
OworCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggbWF0ZXJpYWwuYnVtcE1hcCAp
IHsKKworICAgICAgICAgICAgICAgIHVuaWZvcm1zLmJ1bXBNYXAudmFsdWUgPSBtYXRlcmlhbC5i
dW1wTWFwOworICAgICAgICAgICAgICAgIHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSA9IG1hdGVy
aWFsLmJ1bXBTY2FsZTsKKyAgICAgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLnNpZGUgPT09IEJh
Y2tTaWRlICkgdW5pZm9ybXMuYnVtcFNjYWxlLnZhbHVlICo9IC0gMTsKKworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLm5vcm1hbE1hcCApIHsKKworICAgICAgICAg
ICAgICAgIHVuaWZvcm1zLm5vcm1hbE1hcC52YWx1ZSA9IG1hdGVyaWFsLm5vcm1hbE1hcDsKKyAg
ICAgICAgICAgICAgICB1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KCBtYXRlcmlhbC5u
b3JtYWxTY2FsZSApOworICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWwuc2lkZSA9PT0gQmFj
a1NpZGUgKSB1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKTsKKworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCApIHsKKwor
ICAgICAgICAgICAgICAgIHVuaWZvcm1zLmRpc3BsYWNlbWVudE1hcC52YWx1ZSA9IG1hdGVyaWFs
LmRpc3BsYWNlbWVudE1hcDsKKyAgICAgICAgICAgICAgICB1bmlmb3Jtcy5kaXNwbGFjZW1lbnRT
Y2FsZS52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlOworICAgICAgICAgICAgICAg
IHVuaWZvcm1zLmRpc3BsYWNlbWVudEJpYXMudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRC
aWFzOworCisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCiAgICAgICAgIGZ1bmN0aW9uIHJl
ZnJlc2hVbmlmb3Jtc0RlcHRoKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7CiAKICAgICAgICAgICAg
IGlmICggbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwICkgewpAQCAtMjQyOTEsNiArMjUzNjAsNyBA
QAogICAgICAgICBmdW5jdGlvbiBtYXJrVW5pZm9ybXNMaWdodHNOZWVkc1VwZGF0ZSggdW5pZm9y
bXMsIHZhbHVlICkgewogCiAgICAgICAgICAgICB1bmlmb3Jtcy5hbWJpZW50TGlnaHRDb2xvci5u
ZWVkc1VwZGF0ZSA9IHZhbHVlOworICAgICAgICAgICAgdW5pZm9ybXMubGlnaHRQcm9iZS5uZWVk
c1VwZGF0ZSA9IHZhbHVlOwogCiAgICAgICAgICAgICB1bmlmb3Jtcy5kaXJlY3Rpb25hbExpZ2h0
cy5uZWVkc1VwZGF0ZSA9IHZhbHVlOwogICAgICAgICAgICAgdW5pZm9ybXMucG9pbnRMaWdodHMu
bmVlZHNVcGRhdGUgPSB2YWx1ZTsKQEAgLTI0MzAwLDExOSArMjUzNzAsMjQgQEAKIAogICAgICAg
ICB9CiAKLSAgICAgICAgLy8gVGV4dHVyZXMKLQotICAgICAgICBmdW5jdGlvbiBhbGxvY1RleHR1
cmVVbml0KCkgewotCi0gICAgICAgICAgICB2YXIgdGV4dHVyZVVuaXQgPSBfdXNlZFRleHR1cmVV
bml0czsKLQotICAgICAgICAgICAgaWYgKCB0ZXh0dXJlVW5pdCA+PSBjYXBhYmlsaXRpZXMubWF4
VGV4dHVyZXMgKSB7Ci0KLSAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJH
TFJlbmRlcmVyOiBUcnlpbmcgdG8gdXNlICcgKyB0ZXh0dXJlVW5pdCArICcgdGV4dHVyZSB1bml0
cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICcgKyBjYXBhYmlsaXRpZXMubWF4VGV4dHVy
ZXMgKTsKLQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBfdXNlZFRleHR1cmVVbml0cyAr
PSAxOwotCi0gICAgICAgICAgICByZXR1cm4gdGV4dHVyZVVuaXQ7Ci0KLSAgICAgICAgfQotCi0g
ICAgICAgIHRoaXMuYWxsb2NUZXh0dXJlVW5pdCA9IGFsbG9jVGV4dHVyZVVuaXQ7Ci0KLSAgICAg
ICAgLy8gdGhpcy5zZXRUZXh0dXJlMkQgPSBzZXRUZXh0dXJlMkQ7Ci0gICAgICAgIHRoaXMuc2V0
VGV4dHVyZTJEID0gKCBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAgIHZhciB3YXJuZWQgPSBm
YWxzZTsKLQotICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6IHBlZWwgdGV4
dHVyZS50ZXh0dXJlCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gc2V0VGV4dHVyZTJEKCB0
ZXh0dXJlLCBzbG90ICkgewotCi0gICAgICAgICAgICAgICAgaWYgKCB0ZXh0dXJlICYmIHRleHR1
cmUuaXNXZWJHTFJlbmRlclRhcmdldCApIHsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoICEg
d2FybmVkICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICJUSFJF
RS5XZWJHTFJlbmRlcmVyLnNldFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFz
IHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB3YXJuZWQgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4dHVyZS50ZXh0dXJlOwotCi0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGV4dHVyZXMuc2V0VGV4dHVyZTJE
KCB0ZXh0dXJlLCBzbG90ICk7Ci0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgfSgpICk7Ci0K
LSAgICAgICAgdGhpcy5zZXRUZXh0dXJlID0gKCBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAg
IHZhciB3YXJuZWQgPSBmYWxzZTsKLQotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFRl
eHR1cmUoIHRleHR1cmUsIHNsb3QgKSB7Ci0KLSAgICAgICAgICAgICAgICBpZiAoICEgd2FybmVk
ICkgewotCi0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggIlRIUkVFLldlYkdMUmVu
ZGVyZXI6IC5zZXRUZXh0dXJlIGlzIGRlcHJlY2F0ZWQsIHVzZSBzZXRUZXh0dXJlMkQgaW5zdGVh
ZC4iICk7Ci0gICAgICAgICAgICAgICAgICAgIHdhcm5lZCA9IHRydWU7Ci0KLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlcy5zZXRUZXh0dXJlMkQoIHRleHR1cmUs
IHNsb3QgKTsKLQotICAgICAgICAgICAgfTsKLQotICAgICAgICB9KCkgKTsKLQotICAgICAgICB0
aGlzLnNldFRleHR1cmVDdWJlID0gKCBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAgIHZhciB3
YXJuZWQgPSBmYWxzZTsKLQotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFRleHR1cmVD
dWJlKCB0ZXh0dXJlLCBzbG90ICkgewotCi0gICAgICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNv
bXBhdGliaWxpdHk6IHBlZWwgdGV4dHVyZS50ZXh0dXJlCi0gICAgICAgICAgICAgICAgaWYgKCB0
ZXh0dXJlICYmIHRleHR1cmUuaXNXZWJHTFJlbmRlclRhcmdldEN1YmUgKSB7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhIHdhcm5lZCApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc29sZS53YXJuKCAiVEhSRUUuV2ViR0xSZW5kZXJlci5zZXRUZXh0dXJlQ3ViZTogZG9uJ3Qg
dXNlIGN1YmUgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBw
cm9wZXJ0eSBpbnN0ZWFkLiIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5lZCA9IHRy
dWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHRleHR1
cmUgPSB0ZXh0dXJlLnRleHR1cmU7Ci0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAvLyBjdXJyZW50bHkgcmVseWluZyBvbiB0aGUgZmFjdCB0aGF0IFdlYkdMUmVuZGVyVGFy
Z2V0Q3ViZS50ZXh0dXJlIGlzIGEgVGV4dHVyZSBhbmQgTk9UIGEgQ3ViZVRleHR1cmUKLSAgICAg
ICAgICAgICAgICAvLyBUT0RPOiB1bmlmeSB0aGVzZSBjb2RlIHBhdGhzCi0gICAgICAgICAgICAg
ICAgaWYgKCAoIHRleHR1cmUgJiYgdGV4dHVyZS5pc0N1YmVUZXh0dXJlICkgfHwKLSAgICAgICAg
ICAgICAgICAgICAgKCBBcnJheS5pc0FycmF5KCB0ZXh0dXJlLmltYWdlICkgJiYgdGV4dHVyZS5p
bWFnZS5sZW5ndGggPT09IDYgKSApIHsKLQotICAgICAgICAgICAgICAgICAgICAvLyBDb21wcmVz
c2VkVGV4dHVyZSBjYW4gaGF2ZSBBcnJheSBpbiBpbWFnZSA6LwotCi0gICAgICAgICAgICAgICAg
ICAgIC8vIHRoaXMgZnVuY3Rpb24gYWxvbmUgc2hvdWxkIHRha2UgY2FyZSBvZiBjdWJlIHRleHR1
cmVzCi0gICAgICAgICAgICAgICAgICAgIHRleHR1cmVzLnNldFRleHR1cmVDdWJlKCB0ZXh0dXJl
LCBzbG90ICk7Ci0KLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAvLworICAgICAg
ICB0aGlzLnNldEZyYW1lYnVmZmVyID0gZnVuY3Rpb24gKCB2YWx1ZSApIHsKIAotICAgICAgICAg
ICAgICAgICAgICAvLyBhc3N1bWVkOiB0ZXh0dXJlIHByb3BlcnR5IG9mIFRIUkVFLldlYkdMUmVu
ZGVyVGFyZ2V0Q3ViZQorICAgICAgICAgICAgaWYgKCBfZnJhbWVidWZmZXIgIT09IHZhbHVlICkg
X2dsLmJpbmRGcmFtZWJ1ZmZlciggMzYxNjAsIHZhbHVlICk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZXMuc2V0VGV4dHVyZUN1YmVEeW5hbWljKCB0ZXh0dXJlLCBzbG90ICk7CisgICAg
ICAgICAgICBfZnJhbWVidWZmZXIgPSB2YWx1ZTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgfTsKIAotICAgICAgICAgICAgfTsKKyAgICAgICAgdGhpcy5nZXRBY3RpdmVDdWJlRmFjZSA9
IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICB9KCkgKTsKKyAgICAgICAgICAgIHJldHVybiBfY3Vy
cmVudEFjdGl2ZUN1YmVGYWNlOwogCi0gICAgICAgIC8vCisgICAgICAgIH07CiAKLSAgICAgICAg
dGhpcy5zZXRGcmFtZWJ1ZmZlciA9IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAgICAgIHRoaXMu
Z2V0QWN0aXZlTWlwTWFwTGV2ZWwgPSBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIF9mcmFt
ZWJ1ZmZlciA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIF9jdXJyZW50QWN0aXZlTWlwbWFw
TGV2ZWw7CiAKICAgICAgICAgfTsKIApAQCAtMjQ0MjIsOSArMjUzOTcsMTEgQEAKIAogICAgICAg
ICB9OwogCi0gICAgICAgIHRoaXMuc2V0UmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKCByZW5kZXJU
YXJnZXQgKSB7CisgICAgICAgIHRoaXMuc2V0UmVuZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKCByZW5k
ZXJUYXJnZXQsIGFjdGl2ZUN1YmVGYWNlLCBhY3RpdmVNaXBNYXBMZXZlbCApIHsKIAogICAgICAg
ICAgICAgX2N1cnJlbnRSZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7CisgICAgICAgICAgICBf
Y3VycmVudEFjdGl2ZUN1YmVGYWNlID0gYWN0aXZlQ3ViZUZhY2U7CisgICAgICAgICAgICBfY3Vy
cmVudEFjdGl2ZU1pcG1hcExldmVsID0gYWN0aXZlTWlwTWFwTGV2ZWw7CiAKICAgICAgICAgICAg
IGlmICggcmVuZGVyVGFyZ2V0ICYmIHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQgKS5fX3dl
YmdsRnJhbWVidWZmZXIgPT09IHVuZGVmaW5lZCApIHsKIApAQCAtMjQ0NDEsOSArMjU0MTgsMTMg
QEAKIAogICAgICAgICAgICAgICAgIGlmICggcmVuZGVyVGFyZ2V0LmlzV2ViR0xSZW5kZXJUYXJn
ZXRDdWJlICkgewogCi0gICAgICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gX193ZWJnbEZy
YW1lYnVmZmVyWyByZW5kZXJUYXJnZXQuYWN0aXZlQ3ViZUZhY2UgXTsKKyAgICAgICAgICAgICAg
ICAgICAgZnJhbWVidWZmZXIgPSBfX3dlYmdsRnJhbWVidWZmZXJbIGFjdGl2ZUN1YmVGYWNlIHx8
IDAgXTsKICAgICAgICAgICAgICAgICAgICAgaXNDdWJlID0gdHJ1ZTsKIAorICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIHJlbmRlclRhcmdldC5pc1dlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJn
ZXQgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBwcm9wZXJ0aWVzLmdl
dCggcmVuZGVyVGFyZ2V0ICkuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyOworCiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKIAogICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9
IF9fd2ViZ2xGcmFtZWJ1ZmZlcjsKQEAgLTI0NDU2LDE1ICsyNTQzNywxNSBAQAogCiAgICAgICAg
ICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgX2N1cnJlbnRWaWV3cG9ydC5jb3B5KCBf
dmlld3BvcnQgKS5tdWx0aXBseVNjYWxhciggX3BpeGVsUmF0aW8gKTsKLSAgICAgICAgICAgICAg
ICBfY3VycmVudFNjaXNzb3IuY29weSggX3NjaXNzb3IgKS5tdWx0aXBseVNjYWxhciggX3BpeGVs
UmF0aW8gKTsKKyAgICAgICAgICAgICAgICBfY3VycmVudFZpZXdwb3J0LmNvcHkoIF92aWV3cG9y
dCApLm11bHRpcGx5U2NhbGFyKCBfcGl4ZWxSYXRpbyApLmZsb29yKCk7CisgICAgICAgICAgICAg
ICAgX2N1cnJlbnRTY2lzc29yLmNvcHkoIF9zY2lzc29yICkubXVsdGlwbHlTY2FsYXIoIF9waXhl
bFJhdGlvICkuZmxvb3IoKTsKICAgICAgICAgICAgICAgICBfY3VycmVudFNjaXNzb3JUZXN0ID0g
X3NjaXNzb3JUZXN0OwogCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICggX2N1cnJl
bnRGcmFtZWJ1ZmZlciAhPT0gZnJhbWVidWZmZXIgKSB7CiAKLSAgICAgICAgICAgICAgICBfZ2wu
YmluZEZyYW1lYnVmZmVyKCBfZ2wuRlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyICk7CisgICAgICAg
ICAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZlciggMzYxNjAsIGZyYW1lYnVmZmVyICk7CiAgICAg
ICAgICAgICAgICAgX2N1cnJlbnRGcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwogCiAgICAgICAg
ICAgICB9CkBAIC0yNDQ3NiwxMyArMjU0NTcsMTMgQEAKICAgICAgICAgICAgIGlmICggaXNDdWJl
ICkgewogCiAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmVQcm9wZXJ0aWVzID0gcHJvcGVydGll
cy5nZXQoIHJlbmRlclRhcmdldC50ZXh0dXJlICk7Ci0gICAgICAgICAgICAgICAgX2dsLmZyYW1l
YnVmZmVyVGV4dHVyZTJEKCBfZ2wuRlJBTUVCVUZGRVIsIF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCwg
X2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIHJlbmRlclRhcmdldC5hY3RpdmVDdWJl
RmFjZSwgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUsIHJlbmRlclRhcmdldC5hY3Rp
dmVNaXBNYXBMZXZlbCApOworICAgICAgICAgICAgICAgIF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUy
RCggMzYxNjAsIDM2MDY0LCAzNDA2OSArICggYWN0aXZlQ3ViZUZhY2UgfHwgMCApLCB0ZXh0dXJl
UHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSwgYWN0aXZlTWlwTWFwTGV2ZWwgfHwgMCApOwogCiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgfTsKIAotICAgICAgICB0aGlzLnJlYWRSZW5kZXJUYXJn
ZXRQaXhlbHMgPSBmdW5jdGlvbiAoIHJlbmRlclRhcmdldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwg
YnVmZmVyICkgeworICAgICAgICB0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHMgPSBmdW5jdGlv
biAoIHJlbmRlclRhcmdldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYnVmZmVyLCBhY3RpdmVDdWJl
RmFjZUluZGV4ICkgewogCiAgICAgICAgICAgICBpZiAoICEgKCByZW5kZXJUYXJnZXQgJiYgcmVu
ZGVyVGFyZ2V0LmlzV2ViR0xSZW5kZXJUYXJnZXQgKSApIHsKIApAQCAtMjQ0OTMsMTMgKzI1NDc0
LDE5IEBACiAKICAgICAgICAgICAgIHZhciBmcmFtZWJ1ZmZlciA9IHByb3BlcnRpZXMuZ2V0KCBy
ZW5kZXJUYXJnZXQgKS5fX3dlYmdsRnJhbWVidWZmZXI7CiAKKyAgICAgICAgICAgIGlmICggcmVu
ZGVyVGFyZ2V0LmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlICYmIGFjdGl2ZUN1YmVGYWNlSW5kZXgg
IT09IHVuZGVmaW5lZCApIHsKKworICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gZnJhbWVi
dWZmZXJbIGFjdGl2ZUN1YmVGYWNlSW5kZXggXTsKKworICAgICAgICAgICAgfQorCiAgICAgICAg
ICAgICBpZiAoIGZyYW1lYnVmZmVyICkgewogCiAgICAgICAgICAgICAgICAgdmFyIHJlc3RvcmUg
PSBmYWxzZTsKIAogICAgICAgICAgICAgICAgIGlmICggZnJhbWVidWZmZXIgIT09IF9jdXJyZW50
RnJhbWVidWZmZXIgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZl
ciggX2dsLkZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZlciApOworICAgICAgICAgICAgICAgICAgICBf
Z2wuYmluZEZyYW1lYnVmZmVyKCAzNjE2MCwgZnJhbWVidWZmZXIgKTsKIAogICAgICAgICAgICAg
ICAgICAgICByZXN0b3JlID0gdHJ1ZTsKIApAQCAtMjQ1MTEsMjMgKzI1NDk4LDIzIEBACiAgICAg
ICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlRm9ybWF0ID0gdGV4dHVyZS5mb3JtYXQ7CiAgICAg
ICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlVHlwZSA9IHRleHR1cmUudHlwZTsKIAotICAgICAg
ICAgICAgICAgICAgICBpZiAoIHRleHR1cmVGb3JtYXQgIT09IFJHQkFGb3JtYXQgJiYgdXRpbHMu
Y29udmVydCggdGV4dHVyZUZvcm1hdCApICE9PSBfZ2wuZ2V0UGFyYW1ldGVyKCBfZ2wuSU1QTEVN
RU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCB0ZXh0dXJlRm9ybWF0ICE9PSBSR0JBRm9ybWF0ICYmIHV0aWxzLmNvbnZlcnQoIHRleHR1cmVG
b3JtYXQgKSAhPT0gX2dsLmdldFBhcmFtZXRlciggMzU3MzkgKSApIHsKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRl
clRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0
aW9uIGRlZmluZWQgZm9ybWF0LicgKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB0ZXh0
dXJlVHlwZSAhPT0gVW5zaWduZWRCeXRlVHlwZSAmJiB1dGlscy5jb252ZXJ0KCB0ZXh0dXJlVHlw
ZSApICE9PSBfZ2wuZ2V0UGFyYW1ldGVyKCBfZ2wuSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9U
WVBFICkgJiYgLy8gSUUxMSwgRWRnZSBhbmQgQ2hyb21lIE1hYyA8IDUyICgjOTUxMykKLSAgICAg
ICAgICAgICAgICAgICAgICAgICEgKCB0ZXh0dXJlVHlwZSA9PT0gRmxvYXRUeXBlICYmICggZXh0
ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKSB8fCBleHRlbnNpb25zLmdldCggJ1dF
QkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCcgKSApICkgJiYgLy8gQ2hyb21lIE1hYyA+PSA1MiBhbmQg
RmlyZWZveAotICAgICAgICAgICAgICAgICAgICAgICAgISAoIHRleHR1cmVUeXBlID09PSBIYWxm
RmxvYXRUeXBlICYmIGV4dGVuc2lvbnMuZ2V0KCAnRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0
JyApICkgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggdGV4dHVyZVR5cGUgIT09IFVuc2ln
bmVkQnl0ZVR5cGUgJiYgdXRpbHMuY29udmVydCggdGV4dHVyZVR5cGUgKSAhPT0gX2dsLmdldFBh
cmFtZXRlciggMzU3MzggKSAmJiAvLyBJRTExLCBFZGdlIGFuZCBDaHJvbWUgTWFjIDwgNTIgKCM5
NTEzKQorICAgICAgICAgICAgICAgICAgICAgICAgISAoIHRleHR1cmVUeXBlID09PSBGbG9hdFR5
cGUgJiYgKCBjYXBhYmlsaXRpZXMuaXNXZWJHTDIgfHwgZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4
dHVyZV9mbG9hdCcgKSB8fCBleHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbG9yX2J1ZmZlcl9mbG9h
dCcgKSApICkgJiYgLy8gQ2hyb21lIE1hYyA+PSA1MiBhbmQgRmlyZWZveAorICAgICAgICAgICAg
ICAgICAgICAgICAgISAoIHRleHR1cmVUeXBlID09PSBIYWxmRmxvYXRUeXBlICYmICggY2FwYWJp
bGl0aWVzLmlzV2ViR0wyID8gZXh0ZW5zaW9ucy5nZXQoICdFWFRfY29sb3JfYnVmZmVyX2Zsb2F0
JyApIDogZXh0ZW5zaW9ucy5nZXQoICdFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQnICkgKSAp
ICkgewogCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuV2Vi
R0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGlu
IFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLicgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCBfZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyggX2ds
LkZSQU1FQlVGRkVSICkgPT09IF9nbC5GUkFNRUJVRkZFUl9DT01QTEVURSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCBfZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyggMzYxNjAgKSA9PT0g
MzYwNTMgKSB7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgaWYg
c3RhdGVtZW50IGVuc3VyZXMgdmFsaWQgcmVhZCByZXF1ZXN0cyAobm8gb3V0LW9mLWJvdW5kcyBw
aXhlbHMsIHNlZSAjODYwNCkKIApAQCAtMjQ1NDcsNyArMjU1MzQsNyBAQAogCiAgICAgICAgICAg
ICAgICAgICAgIGlmICggcmVzdG9yZSApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgX2ds
LmJpbmRGcmFtZWJ1ZmZlciggX2dsLkZSQU1FQlVGRkVSLCBfY3VycmVudEZyYW1lYnVmZmVyICk7
CisgICAgICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKCAzNjE2MCwgX2N1
cnJlbnRGcmFtZWJ1ZmZlciApOwogCiAgICAgICAgICAgICAgICAgICAgIH0KIApAQCAtMjQ1NjMs
OSArMjU1NTAsOSBAQAogICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRleHR1cmUuaW1hZ2UuaGVp
Z2h0OwogICAgICAgICAgICAgdmFyIGdsRm9ybWF0ID0gdXRpbHMuY29udmVydCggdGV4dHVyZS5m
b3JtYXQgKTsKIAotICAgICAgICAgICAgdGhpcy5zZXRUZXh0dXJlMkQoIHRleHR1cmUsIDAgKTsK
KyAgICAgICAgICAgIHRleHR1cmVzLnNldFRleHR1cmUyRCggdGV4dHVyZSwgMCApOwogCi0gICAg
ICAgICAgICBfZ2wuY29weVRleEltYWdlMkQoIF9nbC5URVhUVVJFXzJELCBsZXZlbCB8fCAwLCBn
bEZvcm1hdCwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgd2lkdGgsIGhlaWdodCwgMCApOworICAg
ICAgICAgICAgX2dsLmNvcHlUZXhJbWFnZTJEKCAzNTUzLCBsZXZlbCB8fCAwLCBnbEZvcm1hdCwg
cG9zaXRpb24ueCwgcG9zaXRpb24ueSwgd2lkdGgsIGhlaWdodCwgMCApOwogCiAgICAgICAgIH07
CiAKQEAgLTI0NTc2LDIwICsyNTU2MywyNiBAQAogICAgICAgICAgICAgdmFyIGdsRm9ybWF0ID0g
dXRpbHMuY29udmVydCggZHN0VGV4dHVyZS5mb3JtYXQgKTsKICAgICAgICAgICAgIHZhciBnbFR5
cGUgPSB1dGlscy5jb252ZXJ0KCBkc3RUZXh0dXJlLnR5cGUgKTsKIAotICAgICAgICAgICAgdGhp
cy5zZXRUZXh0dXJlMkQoIGRzdFRleHR1cmUsIDAgKTsKKyAgICAgICAgICAgIHRleHR1cmVzLnNl
dFRleHR1cmUyRCggZHN0VGV4dHVyZSwgMCApOwogCiAgICAgICAgICAgICBpZiAoIHNyY1RleHR1
cmUuaXNEYXRhVGV4dHVyZSApIHsKIAotICAgICAgICAgICAgICAgIF9nbC50ZXhTdWJJbWFnZTJE
KCBfZ2wuVEVYVFVSRV8yRCwgbGV2ZWwgfHwgMCwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgd2lk
dGgsIGhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgc3JjVGV4dHVyZS5pbWFnZS5kYXRhICk7Cisg
ICAgICAgICAgICAgICAgX2dsLnRleFN1YkltYWdlMkQoIDM1NTMsIGxldmVsIHx8IDAsIHBvc2l0
aW9uLngsIHBvc2l0aW9uLnksIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIHNyY1Rl
eHR1cmUuaW1hZ2UuZGF0YSApOwogCiAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAg
ICAgICAgX2dsLnRleFN1YkltYWdlMkQoIF9nbC5URVhUVVJFXzJELCBsZXZlbCB8fCAwLCBwb3Np
dGlvbi54LCBwb3NpdGlvbi55LCBnbEZvcm1hdCwgZ2xUeXBlLCBzcmNUZXh0dXJlLmltYWdlICk7
CisgICAgICAgICAgICAgICAgX2dsLnRleFN1YkltYWdlMkQoIDM1NTMsIGxldmVsIHx8IDAsIHBv
c2l0aW9uLngsIHBvc2l0aW9uLnksIGdsRm9ybWF0LCBnbFR5cGUsIHNyY1RleHR1cmUuaW1hZ2Ug
KTsKIAogICAgICAgICAgICAgfQogCiAgICAgICAgIH07CiAKKyAgICAgICAgaWYgKCB0eXBlb2Yg
X19USFJFRV9ERVZUT09MU19fICE9PSAndW5kZWZpbmVkJyApIHsKKworICAgICAgICAgICAgX19U
SFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggJ29ic2VydmUn
LCB7IGRldGFpbDogdGhpcyB9ICkgKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZgor
CisgICAgICAgIH0KKwogICAgIH0KIAogICAgIC8qKgpAQCAtMjQ2MDYsMjMgKzI1NTk5LDI3IEBA
CiAKICAgICB9CiAKLSAgICBGb2dFeHAyLnByb3RvdHlwZS5pc0ZvZ0V4cDIgPSB0cnVlOworICAg
IE9iamVjdC5hc3NpZ24oIEZvZ0V4cDIucHJvdG90eXBlLCB7CiAKLSAgICBGb2dFeHAyLnByb3Rv
dHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaXNGb2dFeHAyOiB0cnVlLAogCi0g
ICAgICAgIHJldHVybiBuZXcgRm9nRXhwMiggdGhpcy5jb2xvciwgdGhpcy5kZW5zaXR5ICk7Cisg
ICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CiAKLSAgICB9OworICAgICAgICAgICAgcmV0dXJu
IG5ldyBGb2dFeHAyKCB0aGlzLmNvbG9yLCB0aGlzLmRlbnNpdHkgKTsKIAotICAgIEZvZ0V4cDIu
cHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICggLyogbWV0YSAqLyApIHsKKyAgICAgICAgfSwK
IAotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgdHlwZTogJ0ZvZ0V4cDInLAotICAgICAg
ICAgICAgY29sb3I6IHRoaXMuY29sb3IuZ2V0SGV4KCksCi0gICAgICAgICAgICBkZW5zaXR5OiB0
aGlzLmRlbnNpdHkKLSAgICAgICAgfTsKKyAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoIC8qIG1l
dGEgKi8gKSB7CiAKLSAgICB9OworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg
ICB0eXBlOiAnRm9nRXhwMicsCisgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMuY29sb3IuZ2V0
SGV4KCksCisgICAgICAgICAgICAgICAgZGVuc2l0eTogdGhpcy5kZW5zaXR5CisgICAgICAgICAg
ICB9OworCisgICAgICAgIH0KKworICAgIH0gKTsKIAogICAgIC8qKgogICAgICAqIEBhdXRob3Ig
bXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCkBAIC0yNDY0MCw3MCArMjU2MzcsMjY4IEBACiAK
ICAgICB9CiAKLSAgICBGb2cucHJvdG90eXBlLmlzRm9nID0gdHJ1ZTsKKyAgICBPYmplY3QuYXNz
aWduKCBGb2cucHJvdG90eXBlLCB7CiAKLSAgICBGb2cucHJvdG90eXBlLmNsb25lID0gZnVuY3Rp
b24gKCkgeworICAgICAgICBpc0ZvZzogdHJ1ZSwKIAotICAgICAgICByZXR1cm4gbmV3IEZvZygg
dGhpcy5jb2xvciwgdGhpcy5uZWFyLCB0aGlzLmZhciApOworICAgICAgICBjbG9uZTogZnVuY3Rp
b24gKCkgewogCi0gICAgfTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRm9nKCB0aGlzLmNvbG9y
LCB0aGlzLm5lYXIsIHRoaXMuZmFyICk7CiAKLSAgICBGb2cucHJvdG90eXBlLnRvSlNPTiA9IGZ1
bmN0aW9uICggLyogbWV0YSAqLyApIHsKKyAgICAgICAgfSwKIAotICAgICAgICByZXR1cm4gewot
ICAgICAgICAgICAgdHlwZTogJ0ZvZycsCi0gICAgICAgICAgICBjb2xvcjogdGhpcy5jb2xvci5n
ZXRIZXgoKSwKLSAgICAgICAgICAgIG5lYXI6IHRoaXMubmVhciwKLSAgICAgICAgICAgIGZhcjog
dGhpcy5mYXIKLSAgICAgICAgfTsKKyAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoIC8qIG1ldGEg
Ki8gKSB7CiAKLSAgICB9OworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiAnRm9nJywKKyAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5jb2xvci5nZXRIZXgoKSwK
KyAgICAgICAgICAgICAgICBuZWFyOiB0aGlzLm5lYXIsCisgICAgICAgICAgICAgICAgZmFyOiB0
aGlzLmZhcgorICAgICAgICAgICAgfTsKKworICAgICAgICB9CisKKyAgICB9ICk7CiAKICAgICAv
KioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqIEBh
dXRob3IgYmVuYWFkYW1zIC8gaHR0cHM6Ly90d2l0dGVyLmNvbS9iZW5fYV9hZGFtcwogICAgICAq
LwogCi0gICAgZnVuY3Rpb24gU2NlbmUoKSB7CisgICAgZnVuY3Rpb24gSW50ZXJsZWF2ZWRCdWZm
ZXIoIGFycmF5LCBzdHJpZGUgKSB7CiAKLSAgICAgICAgT2JqZWN0M0QuY2FsbCggdGhpcyApOwor
ICAgICAgICB0aGlzLmFycmF5ID0gYXJyYXk7CisgICAgICAgIHRoaXMuc3RyaWRlID0gc3RyaWRl
OworICAgICAgICB0aGlzLmNvdW50ID0gYXJyYXkgIT09IHVuZGVmaW5lZCA/IGFycmF5Lmxlbmd0
aCAvIHN0cmlkZSA6IDA7CiAKLSAgICAgICAgdGhpcy50eXBlID0gJ1NjZW5lJzsKKyAgICAgICAg
dGhpcy5keW5hbWljID0gZmFsc2U7CisgICAgICAgIHRoaXMudXBkYXRlUmFuZ2UgPSB7IG9mZnNl
dDogMCwgY291bnQ6IC0gMSB9OwogCi0gICAgICAgIHRoaXMuYmFja2dyb3VuZCA9IG51bGw7Ci0g
ICAgICAgIHRoaXMuZm9nID0gbnVsbDsKLSAgICAgICAgdGhpcy5vdmVycmlkZU1hdGVyaWFsID0g
bnVsbDsKKyAgICAgICAgdGhpcy52ZXJzaW9uID0gMDsKIAotICAgICAgICB0aGlzLmF1dG9VcGRh
dGUgPSB0cnVlOyAvLyBjaGVja2VkIGJ5IHRoZSByZW5kZXJlcgorICAgIH0KKworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eSggSW50ZXJsZWF2ZWRCdWZmZXIucHJvdG90eXBlLCAnbmVlZHNVcGRh
dGUnLCB7CisKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoIHZhbHVlICkgeworCisgICAgICAgICAg
ICBpZiAoIHZhbHVlID09PSB0cnVlICkgdGhpcy52ZXJzaW9uICsrOworCisgICAgICAgIH0KKwor
ICAgIH0gKTsKKworICAgIE9iamVjdC5hc3NpZ24oIEludGVybGVhdmVkQnVmZmVyLnByb3RvdHlw
ZSwgeworCisgICAgICAgIGlzSW50ZXJsZWF2ZWRCdWZmZXI6IHRydWUsCisKKyAgICAgICAgb25V
cGxvYWRDYWxsYmFjazogZnVuY3Rpb24gKCkge30sCisKKyAgICAgICAgc2V0QXJyYXk6IGZ1bmN0
aW9uICggYXJyYXkgKSB7CisKKyAgICAgICAgICAgIGlmICggQXJyYXkuaXNBcnJheSggYXJyYXkg
KSApIHsKKworICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoICdUSFJFRS5CdWZm
ZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LicgKTsKKworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB0aGlzLmNvdW50ID0gYXJyYXkgIT09IHVuZGVmaW5lZCA/
IGFycmF5Lmxlbmd0aCAvIHRoaXMuc3RyaWRlIDogMDsKKyAgICAgICAgICAgIHRoaXMuYXJyYXkg
PSBhcnJheTsKKworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAgICAgfSwKKworICAg
ICAgICBzZXREeW5hbWljOiBmdW5jdGlvbiAoIHZhbHVlICkgeworCisgICAgICAgICAgICB0aGlz
LmR5bmFtaWMgPSB2YWx1ZTsKKworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAgICAg
fSwKKworICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHNvdXJjZSApIHsKKworICAgICAgICAgICAg
dGhpcy5hcnJheSA9IG5ldyBzb3VyY2UuYXJyYXkuY29uc3RydWN0b3IoIHNvdXJjZS5hcnJheSAp
OworICAgICAgICAgICAgdGhpcy5jb3VudCA9IHNvdXJjZS5jb3VudDsKKyAgICAgICAgICAgIHRo
aXMuc3RyaWRlID0gc291cmNlLnN0cmlkZTsKKyAgICAgICAgICAgIHRoaXMuZHluYW1pYyA9IHNv
dXJjZS5keW5hbWljOworCisgICAgICAgICAgICByZXR1cm4gdGhpczsKKworICAgICAgICB9LAor
CisgICAgICAgIGNvcHlBdDogZnVuY3Rpb24gKCBpbmRleDEsIGF0dHJpYnV0ZSwgaW5kZXgyICkg
eworCisgICAgICAgICAgICBpbmRleDEgKj0gdGhpcy5zdHJpZGU7CisgICAgICAgICAgICBpbmRl
eDIgKj0gYXR0cmlidXRlLnN0cmlkZTsKKworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBs
ID0gdGhpcy5zdHJpZGU7IGkgPCBsOyBpICsrICkgeworCisgICAgICAgICAgICAgICAgdGhpcy5h
cnJheVsgaW5kZXgxICsgaSBdID0gYXR0cmlidXRlLmFycmF5WyBpbmRleDIgKyBpIF07CisKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAgICAgfSwKKwor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICggdmFsdWUsIG9mZnNldCApIHsKKworICAgICAgICAgICAg
aWYgKCBvZmZzZXQgPT09IHVuZGVmaW5lZCApIG9mZnNldCA9IDA7CisKKyAgICAgICAgICAgIHRo
aXMuYXJyYXkuc2V0KCB2YWx1ZSwgb2Zmc2V0ICk7CisKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OworCisgICAgICAgIH0sCisKKyAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKKworICAgICAg
ICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApOworCisgICAg
ICAgIH0sCisKKyAgICAgICAgb25VcGxvYWQ6IGZ1bmN0aW9uICggY2FsbGJhY2sgKSB7CisKKyAg
ICAgICAgICAgIHRoaXMub25VcGxvYWRDYWxsYmFjayA9IGNhbGxiYWNrOworCisgICAgICAgICAg
ICByZXR1cm4gdGhpczsKKworICAgICAgICB9CisKKyAgICB9ICk7CisKKyAgICAvKioKKyAgICAg
KiBAYXV0aG9yIGJlbmFhZGFtcyAvIGh0dHBzOi8vdHdpdHRlci5jb20vYmVuX2FfYWRhbXMKKyAg
ICAgKi8KKworICAgIGZ1bmN0aW9uIEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKCBpbnRlcmxl
YXZlZEJ1ZmZlciwgaXRlbVNpemUsIG9mZnNldCwgbm9ybWFsaXplZCApIHsKKworICAgICAgICB0
aGlzLmRhdGEgPSBpbnRlcmxlYXZlZEJ1ZmZlcjsKKyAgICAgICAgdGhpcy5pdGVtU2l6ZSA9IGl0
ZW1TaXplOworICAgICAgICB0aGlzLm9mZnNldCA9IG9mZnNldDsKKworICAgICAgICB0aGlzLm5v
cm1hbGl6ZWQgPSBub3JtYWxpemVkID09PSB0cnVlOwogCiAgICAgfQogCi0gICAgU2NlbmUucHJv
dG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggT2JqZWN0M0QucHJvdG90eXBl
ICksIHsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyggSW50ZXJsZWF2ZWRCdWZmZXJBdHRy
aWJ1dGUucHJvdG90eXBlLCB7CiAKLSAgICAgICAgY29uc3RydWN0b3I6IFNjZW5lLAorICAgICAg
ICBjb3VudDogewogCi0gICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlLCByZWN1cnNpdmUg
KSB7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgT2JqZWN0
M0QucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlLCByZWN1cnNpdmUgKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmNvdW50OwogCi0gICAgICAgICAgICBpZiAoIHNv
dXJjZS5iYWNrZ3JvdW5kICE9PSBudWxsICkgdGhpcy5iYWNrZ3JvdW5kID0gc291cmNlLmJhY2tn
cm91bmQuY2xvbmUoKTsKLSAgICAgICAgICAgIGlmICggc291cmNlLmZvZyAhPT0gbnVsbCApIHRo
aXMuZm9nID0gc291cmNlLmZvZy5jbG9uZSgpOwotICAgICAgICAgICAgaWYgKCBzb3VyY2Uub3Zl
cnJpZGVNYXRlcmlhbCAhPT0gbnVsbCApIHRoaXMub3ZlcnJpZGVNYXRlcmlhbCA9IHNvdXJjZS5v
dmVycmlkZU1hdGVyaWFsLmNsb25lKCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHRo
aXMuYXV0b1VwZGF0ZSA9IHNvdXJjZS5hdXRvVXBkYXRlOwotICAgICAgICAgICAgdGhpcy5tYXRy
aXhBdXRvVXBkYXRlID0gc291cmNlLm1hdHJpeEF1dG9VcGRhdGU7CisgICAgICAgIH0sCisKKyAg
ICAgICAgYXJyYXk6IHsKKworICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmFycmF5OworCisgICAgICAgICAgICB9CisKKyAg
ICAgICAgfQorCisgICAgfSApOworCisgICAgT2JqZWN0LmFzc2lnbiggSW50ZXJsZWF2ZWRCdWZm
ZXJBdHRyaWJ1dGUucHJvdG90eXBlLCB7CisKKyAgICAgICAgaXNJbnRlcmxlYXZlZEJ1ZmZlckF0
dHJpYnV0ZTogdHJ1ZSwKKworICAgICAgICBzZXRYOiBmdW5jdGlvbiAoIGluZGV4LCB4ICkgewor
CisgICAgICAgICAgICB0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICogdGhpcy5kYXRhLnN0cmlkZSAr
IHRoaXMub2Zmc2V0IF0gPSB4OwogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAg
ICB9LAogCi0gICAgICAgIHRvSlNPTjogZnVuY3Rpb24gKCBtZXRhICkgeworICAgICAgICBzZXRZ
OiBmdW5jdGlvbiAoIGluZGV4LCB5ICkgewogCi0gICAgICAgICAgICB2YXIgZGF0YSA9IE9iamVj
dDNELnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcywgbWV0YSApOworICAgICAgICAgICAgdGhp
cy5kYXRhLmFycmF5WyBpbmRleCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldCArIDEg
XSA9IHk7CiAKLSAgICAgICAgICAgIGlmICggdGhpcy5iYWNrZ3JvdW5kICE9PSBudWxsICkgZGF0
YS5vYmplY3QuYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZC50b0pTT04oIG1ldGEgKTsKLSAg
ICAgICAgICAgIGlmICggdGhpcy5mb2cgIT09IG51bGwgKSBkYXRhLm9iamVjdC5mb2cgPSB0aGlz
LmZvZy50b0pTT04oKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICBy
ZXR1cm4gZGF0YTsKKyAgICAgICAgfSwKKworICAgICAgICBzZXRaOiBmdW5jdGlvbiAoIGluZGV4
LCB6ICkgeworCisgICAgICAgICAgICB0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICogdGhpcy5kYXRh
LnN0cmlkZSArIHRoaXMub2Zmc2V0ICsgMiBdID0gejsKKworICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisKKyAgICAgICAgfSwKKworICAgICAgICBzZXRXOiBmdW5jdGlvbiAoIGluZGV4LCB3ICkg
eworCisgICAgICAgICAgICB0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICogdGhpcy5kYXRhLnN0cmlk
ZSArIHRoaXMub2Zmc2V0ICsgMyBdID0gdzsKKworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisK
KyAgICAgICAgfSwKKworICAgICAgICBnZXRYOiBmdW5jdGlvbiAoIGluZGV4ICkgeworCisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmFycmF5WyBpbmRleCAqIHRoaXMuZGF0YS5zdHJpZGUg
KyB0aGlzLm9mZnNldCBdOworCisgICAgICAgIH0sCisKKyAgICAgICAgZ2V0WTogZnVuY3Rpb24g
KCBpbmRleCApIHsKKworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5hcnJheVsgaW5kZXgg
KiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQgKyAxIF07CisKKyAgICAgICAgfSwKKwor
ICAgICAgICBnZXRaOiBmdW5jdGlvbiAoIGluZGV4ICkgeworCisgICAgICAgICAgICByZXR1cm4g
dGhpcy5kYXRhLmFycmF5WyBpbmRleCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldCAr
IDIgXTsKKworICAgICAgICB9LAorCisgICAgICAgIGdldFc6IGZ1bmN0aW9uICggaW5kZXggKSB7
CisKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICogdGhpcy5kYXRh
LnN0cmlkZSArIHRoaXMub2Zmc2V0ICsgMyBdOworCisgICAgICAgIH0sCisKKyAgICAgICAgc2V0
WFk6IGZ1bmN0aW9uICggaW5kZXgsIHgsIHkgKSB7CisKKyAgICAgICAgICAgIGluZGV4ID0gaW5k
ZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQ7CisKKyAgICAgICAgICAgIHRoaXMu
ZGF0YS5hcnJheVsgaW5kZXggKyAwIF0gPSB4OworICAgICAgICAgICAgdGhpcy5kYXRhLmFycmF5
WyBpbmRleCArIDEgXSA9IHk7CisKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworCisgICAgICAg
IH0sCisKKyAgICAgICAgc2V0WFlaOiBmdW5jdGlvbiAoIGluZGV4LCB4LCB5LCB6ICkgeworCisg
ICAgICAgICAgICBpbmRleCA9IGluZGV4ICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0
OworCisgICAgICAgICAgICB0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICsgMCBdID0geDsKKyAgICAg
ICAgICAgIHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKyAxIF0gPSB5OworICAgICAgICAgICAgdGhp
cy5kYXRhLmFycmF5WyBpbmRleCArIDIgXSA9IHo7CisKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OworCisgICAgICAgIH0sCisKKyAgICAgICAgc2V0WFlaVzogZnVuY3Rpb24gKCBpbmRleCwgeCwg
eSwgeiwgdyApIHsKKworICAgICAgICAgICAgaW5kZXggPSBpbmRleCAqIHRoaXMuZGF0YS5zdHJp
ZGUgKyB0aGlzLm9mZnNldDsKKworICAgICAgICAgICAgdGhpcy5kYXRhLmFycmF5WyBpbmRleCAr
IDAgXSA9IHg7CisgICAgICAgICAgICB0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICsgMSBdID0geTsK
KyAgICAgICAgICAgIHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKyAyIF0gPSB6OworICAgICAgICAg
ICAgdGhpcy5kYXRhLmFycmF5WyBpbmRleCArIDMgXSA9IHc7CisKKyAgICAgICAgICAgIHJldHVy
biB0aGlzOwogCiAgICAgICAgIH0KIApAQCAtMjQ3MTQsMTEgKzI1OTA5LDkgQEAKICAgICAgKgog
ICAgICAqIHBhcmFtZXRlcnMgPSB7CiAgICAgICogIGNvbG9yOiA8aGV4PiwKLSAgICAgKiAgb3Bh
Y2l0eTogPGZsb2F0PiwKICAgICAgKiAgbWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiAp
LAotICAgICAqCi0gICAgICogIHV2T2Zmc2V0OiBuZXcgVEhSRUUuVmVjdG9yMigpLAotICAgICAq
ICB1dlNjYWxlOiBuZXcgVEhSRUUuVmVjdG9yMigpCisgICAgICogIHJvdGF0aW9uOiA8ZmxvYXQ+
LAorICAgICAqICBzaXplQXR0ZW51YXRpb246IDxib29sPgogICAgICAqIH0KICAgICAgKi8KIApA
QCAtMjQ3MzMsOCArMjU5MjYsMTAgQEAKIAogICAgICAgICB0aGlzLnJvdGF0aW9uID0gMDsKIAot
ICAgICAgICB0aGlzLmZvZyA9IGZhbHNlOworICAgICAgICB0aGlzLnNpemVBdHRlbnVhdGlvbiA9
IHRydWU7CisKICAgICAgICAgdGhpcy5saWdodHMgPSBmYWxzZTsKKyAgICAgICAgdGhpcy50cmFu
c3BhcmVudCA9IHRydWU7CiAKICAgICAgICAgdGhpcy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMgKTsK
IApAQCAtMjQ3NTMsNiArMjU5NDgsOCBAQAogCiAgICAgICAgIHRoaXMucm90YXRpb24gPSBzb3Vy
Y2Uucm90YXRpb247CiAKKyAgICAgICAgdGhpcy5zaXplQXR0ZW51YXRpb24gPSBzb3VyY2Uuc2l6
ZUF0dGVudWF0aW9uOworCiAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgfTsKQEAgLTI0NzYy
LDEyICsyNTk1OSwzNCBAQAogICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJl
ZHF1YWxpYS5jb20vCiAgICAgICovCiAKKyAgICB2YXIgZ2VvbWV0cnk7CisKICAgICBmdW5jdGlv
biBTcHJpdGUoIG1hdGVyaWFsICkgewogCiAgICAgICAgIE9iamVjdDNELmNhbGwoIHRoaXMgKTsK
IAogICAgICAgICB0aGlzLnR5cGUgPSAnU3ByaXRlJzsKIAorICAgICAgICBpZiAoIGdlb21ldHJ5
ID09PSB1bmRlZmluZWQgKSB7CisKKyAgICAgICAgICAgIGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdl
b21ldHJ5KCk7CisKKyAgICAgICAgICAgIHZhciBmbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFy
cmF5KCBbCisgICAgICAgICAgICAgICAgLSAwLjUsIC0gMC41LCAwLCAwLCAwLAorICAgICAgICAg
ICAgICAgIDAuNSwgLSAwLjUsIDAsIDEsIDAsCisgICAgICAgICAgICAgICAgMC41LCAwLjUsIDAs
IDEsIDEsCisgICAgICAgICAgICAgICAgLSAwLjUsIDAuNSwgMCwgMCwgMQorICAgICAgICAgICAg
XSApOworCisgICAgICAgICAgICB2YXIgaW50ZXJsZWF2ZWRCdWZmZXIgPSBuZXcgSW50ZXJsZWF2
ZWRCdWZmZXIoIGZsb2F0MzJBcnJheSwgNSApOworCisgICAgICAgICAgICBnZW9tZXRyeS5zZXRJ
bmRleCggWyAwLCAxLCAyLCAgIDAsIDIsIDMgXSApOworICAgICAgICAgICAgZ2VvbWV0cnkuYWRk
QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUoIGlu
dGVybGVhdmVkQnVmZmVyLCAzLCAwLCBmYWxzZSApICk7CisgICAgICAgICAgICBnZW9tZXRyeS5h
ZGRBdHRyaWJ1dGUoICd1dicsIG5ldyBJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSggaW50ZXJs
ZWF2ZWRCdWZmZXIsIDIsIDMsIGZhbHNlICkgKTsKKworICAgICAgICB9CisKKyAgICAgICAgdGhp
cy5nZW9tZXRyeSA9IGdlb21ldHJ5OwogICAgICAgICB0aGlzLm1hdGVyaWFsID0gKCBtYXRlcmlh
bCAhPT0gdW5kZWZpbmVkICkgPyBtYXRlcmlhbCA6IG5ldyBTcHJpdGVNYXRlcmlhbCgpOwogCiAg
ICAgICAgIHRoaXMuY2VudGVyID0gbmV3IFZlY3RvcjIoIDAuNSwgMC41ICk7CkBAIC0yNDc5NCw2
ICsyNjAxMywxMCBAQAogICAgICAgICAgICAgdmFyIHZCID0gbmV3IFZlY3RvcjMoKTsKICAgICAg
ICAgICAgIHZhciB2QyA9IG5ldyBWZWN0b3IzKCk7CiAKKyAgICAgICAgICAgIHZhciB1dkEgPSBu
ZXcgVmVjdG9yMigpOworICAgICAgICAgICAgdmFyIHV2QiA9IG5ldyBWZWN0b3IyKCk7CisgICAg
ICAgICAgICB2YXIgdXZDID0gbmV3IFZlY3RvcjIoKTsKKwogICAgICAgICAgICAgZnVuY3Rpb24g
dHJhbnNmb3JtVmVydGV4KCB2ZXJ0ZXhQb3NpdGlvbiwgbXZQb3NpdGlvbiwgY2VudGVyLCBzY2Fs
ZSwgc2luLCBjb3MgKSB7CiAKICAgICAgICAgICAgICAgICAvLyBjb21wdXRlIHBvc2l0aW9uIGlu
IGNhbWVyYSBzcGFjZQpAQCAtMjQ4MjQsOSArMjYwNDcsMTggQEAKICAgICAgICAgICAgIHJldHVy
biBmdW5jdGlvbiByYXljYXN0KCByYXljYXN0ZXIsIGludGVyc2VjdHMgKSB7CiAKICAgICAgICAg
ICAgICAgICB3b3JsZFNjYWxlLnNldEZyb21NYXRyaXhTY2FsZSggdGhpcy5tYXRyaXhXb3JsZCAp
OwotICAgICAgICAgICAgICAgIHZpZXdXb3JsZE1hdHJpeC5nZXRJbnZlcnNlKCB0aGlzLm1vZGVs
Vmlld01hdHJpeCApLnByZW11bHRpcGx5KCB0aGlzLm1hdHJpeFdvcmxkICk7CisKKyAgICAgICAg
ICAgICAgICB2aWV3V29ybGRNYXRyaXguY29weSggcmF5Y2FzdGVyLl9jYW1lcmEubWF0cml4V29y
bGQgKTsKKyAgICAgICAgICAgICAgICB0aGlzLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJp
Y2VzKCByYXljYXN0ZXIuX2NhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UsIHRoaXMubWF0cml4V29y
bGQgKTsKKwogICAgICAgICAgICAgICAgIG12UG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9u
KCB0aGlzLm1vZGVsVmlld01hdHJpeCApOwogCisgICAgICAgICAgICAgICAgaWYgKCByYXljYXN0
ZXIuX2NhbWVyYS5pc1BlcnNwZWN0aXZlQ2FtZXJhICYmIHRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVu
dWF0aW9uID09PSBmYWxzZSApIHsKKworICAgICAgICAgICAgICAgICAgICB3b3JsZFNjYWxlLm11
bHRpcGx5U2NhbGFyKCAtIG12UG9zaXRpb24ueiApOworCisgICAgICAgICAgICAgICAgfQorCiAg
ICAgICAgICAgICAgICAgdmFyIHJvdGF0aW9uID0gdGhpcy5tYXRlcmlhbC5yb3RhdGlvbjsKICAg
ICAgICAgICAgICAgICB2YXIgc2luLCBjb3M7CiAgICAgICAgICAgICAgICAgaWYgKCByb3RhdGlv
biAhPT0gMCApIHsKQEAgLTI0ODQyLDYgKzI2MDc0LDEwIEBACiAgICAgICAgICAgICAgICAgdHJh
bnNmb3JtVmVydGV4KCB2Qi5zZXQoIDAuNSwgLSAwLjUsIDAgKSwgbXZQb3NpdGlvbiwgY2VudGVy
LCB3b3JsZFNjYWxlLCBzaW4sIGNvcyApOwogICAgICAgICAgICAgICAgIHRyYW5zZm9ybVZlcnRl
eCggdkMuc2V0KCAwLjUsIDAuNSwgMCApLCBtdlBvc2l0aW9uLCBjZW50ZXIsIHdvcmxkU2NhbGUs
IHNpbiwgY29zICk7CiAKKyAgICAgICAgICAgICAgICB1dkEuc2V0KCAwLCAwICk7CisgICAgICAg
ICAgICAgICAgdXZCLnNldCggMSwgMCApOworICAgICAgICAgICAgICAgIHV2Qy5zZXQoIDEsIDEg
KTsKKwogICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZpcnN0IHRyaWFuZ2xlCiAgICAgICAgICAg
ICAgICAgdmFyIGludGVyc2VjdCA9IHJheWNhc3Rlci5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoIHZB
LCB2QiwgdkMsIGZhbHNlLCBpbnRlcnNlY3RQb2ludCApOwogCkBAIC0yNDg0OSw2ICsyNjA4NSw4
IEBACiAKICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgc2Vjb25kIHRyaWFuZ2xlCiAgICAg
ICAgICAgICAgICAgICAgIHRyYW5zZm9ybVZlcnRleCggdkIuc2V0KCAtIDAuNSwgMC41LCAwICks
IG12UG9zaXRpb24sIGNlbnRlciwgd29ybGRTY2FsZSwgc2luLCBjb3MgKTsKKyAgICAgICAgICAg
ICAgICAgICAgdXZCLnNldCggMCwgMSApOworCiAgICAgICAgICAgICAgICAgICAgIGludGVyc2Vj
dCA9IHJheWNhc3Rlci5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoIHZBLCB2QywgdkIsIGZhbHNlLCBp
bnRlcnNlY3RQb2ludCApOwogICAgICAgICAgICAgICAgICAgICBpZiAoIGludGVyc2VjdCA9PT0g
bnVsbCApIHsKIApAQCAtMjQ4NjYsNiArMjYxMDQsNyBAQAogCiAgICAgICAgICAgICAgICAgICAg
IGRpc3RhbmNlOiBkaXN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgcG9pbnQ6IGludGVyc2Vj
dFBvaW50LmNsb25lKCksCisgICAgICAgICAgICAgICAgICAgIHV2OiBUcmlhbmdsZS5nZXRVVigg
aW50ZXJzZWN0UG9pbnQsIHZBLCB2QiwgdkMsIHV2QSwgdXZCLCB1dkMsIG5ldyBWZWN0b3IyKCkg
KSwKICAgICAgICAgICAgICAgICAgICAgZmFjZTogbnVsbCwKICAgICAgICAgICAgICAgICAgICAg
b2JqZWN0OiB0aGlzCiAKQEAgLTI0OTEzLDEyICsyNjE1MiwxNiBAQAogICAgICAgICAgICAgfQog
ICAgICAgICB9ICk7CiAKKyAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gdHJ1ZTsKKwogICAgIH0K
IAogICAgIExPRC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBPYmpl
Y3QzRC5wcm90b3R5cGUgKSwgewogCiAgICAgICAgIGNvbnN0cnVjdG9yOiBMT0QsCiAKKyAgICAg
ICAgaXNMT0Q6IHRydWUsCisKICAgICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UgKSB7CiAK
ICAgICAgICAgICAgIE9iamVjdDNELnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSwg
ZmFsc2UgKTsKQEAgLTI0OTU5LDYgKzI2MjAyLDggQEAKIAogICAgICAgICAgICAgdGhpcy5hZGQo
IG9iamVjdCApOwogCisgICAgICAgICAgICByZXR1cm4gdGhpczsKKwogICAgICAgICB9LAogCiAg
ICAgICAgIGdldE9iamVjdEZvckRpc3RhbmNlOiBmdW5jdGlvbiAoIGRpc3RhbmNlICkgewpAQCAt
MjUwNjUsNiArMjYzMTAsMTIwIEBACiAKICAgICB9ICk7CiAKKyAgICAvKioKKyAgICAgKiBAYXV0
aG9yIG1pa2FlbCBlbXRpbmdlciAvIGh0dHA6Ly9nb21vLnNlLworICAgICAqIEBhdXRob3IgYWx0
ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCisgICAgICogQGF1dGhvciBpa2VyciAv
IGh0dHA6Ly92ZXJvbGQuY29tCisgICAgICovCisKKyAgICBmdW5jdGlvbiBTa2lubmVkTWVzaCgg
Z2VvbWV0cnksIG1hdGVyaWFsICkgeworCisgICAgICAgIGlmICggZ2VvbWV0cnkgJiYgZ2VvbWV0
cnkuaXNHZW9tZXRyeSApIHsKKworICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLlNr
aW5uZWRNZXNoIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1
ZmZlckdlb21ldHJ5IGluc3RlYWQuJyApOworCisgICAgICAgIH0KKworICAgICAgICBNZXNoLmNh
bGwoIHRoaXMsIGdlb21ldHJ5LCBtYXRlcmlhbCApOworCisgICAgICAgIHRoaXMudHlwZSA9ICdT
a2lubmVkTWVzaCc7CisKKyAgICAgICAgdGhpcy5iaW5kTW9kZSA9ICdhdHRhY2hlZCc7CisgICAg
ICAgIHRoaXMuYmluZE1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7CisgICAgICAgIHRoaXMuYmluZE1h
dHJpeEludmVyc2UgPSBuZXcgTWF0cml4NCgpOworCisgICAgfQorCisgICAgU2tpbm5lZE1lc2gu
cHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUg
KSwgeworCisgICAgICAgIGNvbnN0cnVjdG9yOiBTa2lubmVkTWVzaCwKKworICAgICAgICBpc1Nr
aW5uZWRNZXNoOiB0cnVlLAorCisgICAgICAgIGJpbmQ6IGZ1bmN0aW9uICggc2tlbGV0b24sIGJp
bmRNYXRyaXggKSB7CisKKyAgICAgICAgICAgIHRoaXMuc2tlbGV0b24gPSBza2VsZXRvbjsKKwor
ICAgICAgICAgICAgaWYgKCBiaW5kTWF0cml4ID09PSB1bmRlZmluZWQgKSB7CisKKyAgICAgICAg
ICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCB0cnVlICk7CisKKyAgICAgICAgICAgICAg
ICB0aGlzLnNrZWxldG9uLmNhbGN1bGF0ZUludmVyc2VzKCk7CisKKyAgICAgICAgICAgICAgICBi
aW5kTWF0cml4ID0gdGhpcy5tYXRyaXhXb3JsZDsKKworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICB0aGlzLmJpbmRNYXRyaXguY29weSggYmluZE1hdHJpeCApOworICAgICAgICAgICAgdGhp
cy5iaW5kTWF0cml4SW52ZXJzZS5nZXRJbnZlcnNlKCBiaW5kTWF0cml4ICk7CisKKyAgICAgICAg
fSwKKworICAgICAgICBwb3NlOiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIHRoaXMuc2tl
bGV0b24ucG9zZSgpOworCisgICAgICAgIH0sCisKKyAgICAgICAgbm9ybWFsaXplU2tpbldlaWdo
dHM6IGZ1bmN0aW9uICgpIHsKKworICAgICAgICAgICAgdmFyIHZlY3RvciA9IG5ldyBWZWN0b3I0
KCk7CisKKyAgICAgICAgICAgIHZhciBza2luV2VpZ2h0ID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1
dGVzLnNraW5XZWlnaHQ7CisKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHNraW5X
ZWlnaHQuY291bnQ7IGkgPCBsOyBpICsrICkgeworCisgICAgICAgICAgICAgICAgdmVjdG9yLngg
PSBza2luV2VpZ2h0LmdldFgoIGkgKTsKKyAgICAgICAgICAgICAgICB2ZWN0b3IueSA9IHNraW5X
ZWlnaHQuZ2V0WSggaSApOworICAgICAgICAgICAgICAgIHZlY3Rvci56ID0gc2tpbldlaWdodC5n
ZXRaKCBpICk7CisgICAgICAgICAgICAgICAgdmVjdG9yLncgPSBza2luV2VpZ2h0LmdldFcoIGkg
KTsKKworICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IDEuMCAvIHZlY3Rvci5tYW5oYXR0YW5M
ZW5ndGgoKTsKKworICAgICAgICAgICAgICAgIGlmICggc2NhbGUgIT09IEluZmluaXR5ICkgewor
CisgICAgICAgICAgICAgICAgICAgIHZlY3Rvci5tdWx0aXBseVNjYWxhciggc2NhbGUgKTsKKwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yLnNl
dCggMSwgMCwgMCwgMCApOyAvLyBkbyBzb21ldGhpbmcgcmVhc29uYWJsZQorCisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgc2tpbldlaWdodC5zZXRYWVpXKCBpLCB2ZWN0b3Iu
eCwgdmVjdG9yLnksIHZlY3Rvci56LCB2ZWN0b3IudyApOworCisgICAgICAgICAgICB9CisKKyAg
ICAgICAgfSwKKworICAgICAgICB1cGRhdGVNYXRyaXhXb3JsZDogZnVuY3Rpb24gKCBmb3JjZSAp
IHsKKworICAgICAgICAgICAgTWVzaC5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCgg
dGhpcywgZm9yY2UgKTsKKworICAgICAgICAgICAgaWYgKCB0aGlzLmJpbmRNb2RlID09PSAnYXR0
YWNoZWQnICkgeworCisgICAgICAgICAgICAgICAgdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5nZXRJ
bnZlcnNlKCB0aGlzLm1hdHJpeFdvcmxkICk7CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHRo
aXMuYmluZE1vZGUgPT09ICdkZXRhY2hlZCcgKSB7CisKKyAgICAgICAgICAgICAgICB0aGlzLmJp
bmRNYXRyaXhJbnZlcnNlLmdldEludmVyc2UoIHRoaXMuYmluZE1hdHJpeCApOworCisgICAgICAg
ICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuU2tp
bm5lZE1lc2g6IFVucmVjb2duaXplZCBiaW5kTW9kZTogJyArIHRoaXMuYmluZE1vZGUgKTsKKwor
ICAgICAgICAgICAgfQorCisgICAgICAgIH0sCisKKyAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgp
IHsKKworICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCB0aGlzLmdlb21l
dHJ5LCB0aGlzLm1hdGVyaWFsICkuY29weSggdGhpcyApOworCisgICAgICAgIH0KKworICAgIH0g
KTsKKwogICAgIC8qKgogICAgICAqIEBhdXRob3IgbWlrYWVsIGVtdGluZ2VyIC8gaHR0cDovL2dv
bW8uc2UvCiAgICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNv
bS8KQEAgLTI1MjYyLDMzNCArMjY2MjEsMTMyIEBACiAgICAgfSApOwogCiAgICAgLyoqCi0gICAg
ICogQGF1dGhvciBtaWthZWwgZW10aW5nZXIgLyBodHRwOi8vZ29tby5zZS8KKyAgICAgKiBAYXV0
aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwogICAgICAqIEBhdXRob3IgYWx0ZXJlZHEg
LyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICogQGF1dGhvciBpa2VyciAvIGh0dHA6
Ly92ZXJvbGQuY29tCisgICAgICoKKyAgICAgKiBwYXJhbWV0ZXJzID0geworICAgICAqICBjb2xv
cjogPGhleD4sCisgICAgICogIG9wYWNpdHk6IDxmbG9hdD4sCisgICAgICoKKyAgICAgKiAgbGlu
ZXdpZHRoOiA8ZmxvYXQ+LAorICAgICAqICBsaW5lY2FwOiAicm91bmQiLAorICAgICAqICBsaW5l
am9pbjogInJvdW5kIgorICAgICAqIH0KICAgICAgKi8KIAotICAgIGZ1bmN0aW9uIFNraW5uZWRN
ZXNoKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKSB7CisgICAgZnVuY3Rpb24gTGluZUJhc2ljTWF0ZXJp
YWwoIHBhcmFtZXRlcnMgKSB7CiAKLSAgICAgICAgTWVzaC5jYWxsKCB0aGlzLCBnZW9tZXRyeSwg
bWF0ZXJpYWwgKTsKKyAgICAgICAgTWF0ZXJpYWwuY2FsbCggdGhpcyApOwogCi0gICAgICAgIHRo
aXMudHlwZSA9ICdTa2lubmVkTWVzaCc7CisgICAgICAgIHRoaXMudHlwZSA9ICdMaW5lQmFzaWNN
YXRlcmlhbCc7CiAKLSAgICAgICAgdGhpcy5iaW5kTW9kZSA9ICdhdHRhY2hlZCc7Ci0gICAgICAg
IHRoaXMuYmluZE1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7Ci0gICAgICAgIHRoaXMuYmluZE1hdHJp
eEludmVyc2UgPSBuZXcgTWF0cml4NCgpOworICAgICAgICB0aGlzLmNvbG9yID0gbmV3IENvbG9y
KCAweGZmZmZmZiApOwogCi0gICAgICAgIHZhciBib25lcyA9IHRoaXMuaW5pdEJvbmVzKCk7Ci0g
ICAgICAgIHZhciBza2VsZXRvbiA9IG5ldyBTa2VsZXRvbiggYm9uZXMgKTsKKyAgICAgICAgdGhp
cy5saW5ld2lkdGggPSAxOworICAgICAgICB0aGlzLmxpbmVjYXAgPSAncm91bmQnOworICAgICAg
ICB0aGlzLmxpbmVqb2luID0gJ3JvdW5kJzsKIAotICAgICAgICB0aGlzLmJpbmQoIHNrZWxldG9u
LCB0aGlzLm1hdHJpeFdvcmxkICk7CisgICAgICAgIHRoaXMubGlnaHRzID0gZmFsc2U7CiAKLSAg
ICAgICAgdGhpcy5ub3JtYWxpemVTa2luV2VpZ2h0cygpOworICAgICAgICB0aGlzLnNldFZhbHVl
cyggcGFyYW1ldGVycyApOwogCiAgICAgfQogCi0gICAgU2tpbm5lZE1lc2gucHJvdG90eXBlID0g
T2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKSwgeworICAgIExp
bmVCYXNpY01hdGVyaWFsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1hdGVyaWFsLnByb3Rv
dHlwZSApOworICAgIExpbmVCYXNpY01hdGVyaWFsLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExp
bmVCYXNpY01hdGVyaWFsOwogCi0gICAgICAgIGNvbnN0cnVjdG9yOiBTa2lubmVkTWVzaCwKKyAg
ICBMaW5lQmFzaWNNYXRlcmlhbC5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbCA9IHRydWU7
CiAKLSAgICAgICAgaXNTa2lubmVkTWVzaDogdHJ1ZSwKKyAgICBMaW5lQmFzaWNNYXRlcmlhbC5w
cm90b3R5cGUuY29weSA9IGZ1bmN0aW9uICggc291cmNlICkgewogCi0gICAgICAgIGluaXRCb25l
czogZnVuY3Rpb24gKCkgeworICAgICAgICBNYXRlcmlhbC5wcm90b3R5cGUuY29weS5jYWxsKCB0
aGlzLCBzb3VyY2UgKTsKIAotICAgICAgICAgICAgdmFyIGJvbmVzID0gW10sIGJvbmUsIGdib25l
OwotICAgICAgICAgICAgdmFyIGksIGlsOworICAgICAgICB0aGlzLmNvbG9yLmNvcHkoIHNvdXJj
ZS5jb2xvciApOwogCi0gICAgICAgICAgICBpZiAoIHRoaXMuZ2VvbWV0cnkgJiYgdGhpcy5nZW9t
ZXRyeS5ib25lcyAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICB0aGlzLmxpbmV3aWR0aCA9IHNv
dXJjZS5saW5ld2lkdGg7CisgICAgICAgIHRoaXMubGluZWNhcCA9IHNvdXJjZS5saW5lY2FwOwor
ICAgICAgICB0aGlzLmxpbmVqb2luID0gc291cmNlLmxpbmVqb2luOwogCi0gICAgICAgICAgICAg
ICAgLy8gZmlyc3QsIGNyZWF0ZSBhcnJheSBvZiAnQm9uZScgb2JqZWN0cyBmcm9tIGdlb21ldHJ5
IGRhdGEKKyAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCBpID0g
MCwgaWwgPSB0aGlzLmdlb21ldHJ5LmJvbmVzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworICAg
IH07CiAKLSAgICAgICAgICAgICAgICAgICAgZ2JvbmUgPSB0aGlzLmdlb21ldHJ5LmJvbmVzWyBp
IF07CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8K
KyAgICAgKi8KIAotICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgbmV3ICdCb25lJyBvYmpl
Y3QKKyAgICBmdW5jdGlvbiBMaW5lKCBnZW9tZXRyeSwgbWF0ZXJpYWwsIG1vZGUgKSB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgYm9uZSA9IG5ldyBCb25lKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGJvbmVzLnB1c2goIGJvbmUgKTsKKyAgICAgICAgaWYgKCBtb2RlID09PSAxICkgewogCi0gICAg
ICAgICAgICAgICAgICAgIC8vIGFwcGx5IHZhbHVlcworICAgICAgICAgICAgY29uc29sZS5lcnJv
ciggJ1RIUkVFLkxpbmU6IHBhcmFtZXRlciBUSFJFRS5MaW5lUGllY2VzIG5vIGxvbmdlciBzdXBw
b3J0ZWQuIFVzZSBUSFJFRS5MaW5lU2VnbWVudHMgaW5zdGVhZC4nICk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgYm9uZS5uYW1lID0gZ2JvbmUubmFtZTsKLSAgICAgICAgICAgICAgICAgICAgYm9u
ZS5wb3NpdGlvbi5mcm9tQXJyYXkoIGdib25lLnBvcyApOwotICAgICAgICAgICAgICAgICAgICBi
b25lLnF1YXRlcm5pb24uZnJvbUFycmF5KCBnYm9uZS5yb3RxICk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICggZ2JvbmUuc2NsICE9PSB1bmRlZmluZWQgKSBib25lLnNjYWxlLmZyb21BcnJheSgg
Z2JvbmUuc2NsICk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgT2Jq
ZWN0M0QuY2FsbCggdGhpcyApOwogCi0gICAgICAgICAgICAgICAgLy8gc2Vjb25kLCBjcmVhdGUg
Ym9uZSBoaWVyYXJjaHkKKyAgICAgICAgdGhpcy50eXBlID0gJ0xpbmUnOwogCi0gICAgICAgICAg
ICAgICAgZm9yICggaSA9IDAsIGlsID0gdGhpcy5nZW9tZXRyeS5ib25lcy5sZW5ndGg7IGkgPCBp
bDsgaSArKyApIHsKKyAgICAgICAgdGhpcy5nZW9tZXRyeSA9IGdlb21ldHJ5ICE9PSB1bmRlZmlu
ZWQgPyBnZW9tZXRyeSA6IG5ldyBCdWZmZXJHZW9tZXRyeSgpOworICAgICAgICB0aGlzLm1hdGVy
aWFsID0gbWF0ZXJpYWwgIT09IHVuZGVmaW5lZCA/IG1hdGVyaWFsIDogbmV3IExpbmVCYXNpY01h
dGVyaWFsKCB7IGNvbG9yOiBNYXRoLnJhbmRvbSgpICogMHhmZmZmZmYgfSApOwogCi0gICAgICAg
ICAgICAgICAgICAgIGdib25lID0gdGhpcy5nZW9tZXRyeS5ib25lc1sgaSBdOworICAgIH0KIAot
ICAgICAgICAgICAgICAgICAgICBpZiAoICggZ2JvbmUucGFyZW50ICE9PSAtIDEgKSAmJiAoIGdi
b25lLnBhcmVudCAhPT0gbnVsbCApICYmICggYm9uZXNbIGdib25lLnBhcmVudCBdICE9PSB1bmRl
ZmluZWQgKSApIHsKKyAgICBMaW5lLnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5j
cmVhdGUoIE9iamVjdDNELnByb3RvdHlwZSApLCB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHN1YnNlcXVlbnQgYm9uZXMgaW4gdGhlIGhpZXJhcmNoeQorICAgICAgICBjb25zdHJ1Y3Rv
cjogTGluZSwKIAotICAgICAgICAgICAgICAgICAgICAgICAgYm9uZXNbIGdib25lLnBhcmVudCBd
LmFkZCggYm9uZXNbIGkgXSApOworICAgICAgICBpc0xpbmU6IHRydWUsCiAKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29tcHV0ZUxpbmVEaXN0YW5jZXM6ICggZnVuY3Rp
b24gKCkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0b3Btb3N0IGJvbmUsIGltbWVk
aWF0ZSBjaGlsZCBvZiB0aGUgc2tpbm5lZCBtZXNoCisgICAgICAgICAgICB2YXIgc3RhcnQgPSBu
ZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBWZWN0b3IzKCk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkKCBib25lc1sgaSBdICk7CisgICAgICAgICAg
ICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7
CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5pc0J1
ZmZlckdlb21ldHJ5ICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8v
IHdlIGFzc3VtZSBub24taW5kZXhlZCBnZW9tZXRyeQogCi0gICAgICAgICAgICAvLyBub3cgdGhl
IGJvbmVzIGFyZSBwYXJ0IG9mIHRoZSBzY2VuZSBncmFwaCBhbmQgY2hpbGRyZW4gb2YgdGhlIHNr
aW5uZWQgbWVzaC4KLSAgICAgICAgICAgIC8vIGxldCdzIHVwZGF0ZSB0aGUgY29ycmVzcG9uZGlu
ZyBtYXRyaWNlcworICAgICAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmluZGV4ID09PSBu
dWxsICkgewogCi0gICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCB0cnVlICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb25BdHRyaWJ1dGUgPSBnZW9tZXRyeS5h
dHRyaWJ1dGVzLnBvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVEaXN0
YW5jZXMgPSBbIDAgXTsKIAotICAgICAgICAgICAgcmV0dXJuIGJvbmVzOworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICggdmFyIGkgPSAxLCBsID0gcG9zaXRpb25BdHRyaWJ1dGUuY291bnQ7
IGkgPCBsOyBpICsrICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhcnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRyaWJ1dGUsIGkgLSAxICk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLmZyb21CdWZmZXJBdHRyaWJ1dGUoIHBv
c2l0aW9uQXR0cmlidXRlLCBpICk7CiAKLSAgICAgICAgYmluZDogZnVuY3Rpb24gKCBza2VsZXRv
biwgYmluZE1hdHJpeCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lRGlzdGFu
Y2VzWyBpIF0gPSBsaW5lRGlzdGFuY2VzWyBpIC0gMSBdOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmVEaXN0YW5jZXNbIGkgXSArPSBzdGFydC5kaXN0YW5jZVRvKCBlbmQgKTsKIAot
ICAgICAgICAgICAgdGhpcy5za2VsZXRvbiA9IHNrZWxldG9uOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIGJpbmRNYXRyaXggPT09IHVuZGVmaW5lZCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmFkZEF0dHJpYnV0ZSggJ2xpbmVEaXN0
YW5jZScsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBsaW5lRGlzdGFuY2VzLCAxICkgKTsK
IAotICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0cml4V29ybGQoIHRydWUgKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgIHRoaXMuc2tlbGV0b24u
Y2FsY3VsYXRlSW52ZXJzZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fy
biggJ1RIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBw
b3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LicgKTsKIAotICAgICAgICAg
ICAgICAgIGJpbmRNYXRyaXggPSB0aGlzLm1hdHJpeFdvcmxkOworICAgICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBnZW9tZXRy
eS5pc0dlb21ldHJ5ICkgewogCi0gICAgICAgICAgICB0aGlzLmJpbmRNYXRyaXguY29weSggYmlu
ZE1hdHJpeCApOwotICAgICAgICAgICAgdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5nZXRJbnZlcnNl
KCBiaW5kTWF0cml4ICk7CisgICAgICAgICAgICAgICAgICAgIHZhciB2ZXJ0aWNlcyA9IGdlb21l
dHJ5LnZlcnRpY2VzOworICAgICAgICAgICAgICAgICAgICB2YXIgbGluZURpc3RhbmNlcyA9IGdl
b21ldHJ5LmxpbmVEaXN0YW5jZXM7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAg
bGluZURpc3RhbmNlc1sgMCBdID0gMDsKIAotICAgICAgICBwb3NlOiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMSwgbCA9IHZlcnRpY2VzLmxlbmd0aDsg
aSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgIHRoaXMuc2tlbGV0b24ucG9zZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbGluZURpc3RhbmNlc1sgaSBdID0gbGluZURpc3RhbmNlc1sg
aSAtIDEgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVEaXN0YW5jZXNbIGkgXSArPSB2
ZXJ0aWNlc1sgaSAtIDEgXS5kaXN0YW5jZVRvKCB2ZXJ0aWNlc1sgaSBdICk7CiAKLSAgICAgICAg
fSwKLQotICAgICAgICBub3JtYWxpemVTa2luV2VpZ2h0czogZnVuY3Rpb24gKCkgewotCi0gICAg
ICAgICAgICB2YXIgc2NhbGUsIGk7Ci0KLSAgICAgICAgICAgIGlmICggdGhpcy5nZW9tZXRyeSAm
JiB0aGlzLmdlb21ldHJ5LmlzR2VvbWV0cnkgKSB7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCBp
ID0gMDsgaSA8IHRoaXMuZ2VvbWV0cnkuc2tpbldlaWdodHMubGVuZ3RoOyBpICsrICkgewotCi0g
ICAgICAgICAgICAgICAgICAgIHZhciBzdyA9IHRoaXMuZ2VvbWV0cnkuc2tpbldlaWdodHNbIGkg
XTsKLQotICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IDEuMCAvIHN3Lm1hbmhhdHRhbkxlbmd0
aCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICggc2NhbGUgIT09IEluZmluaXR5ICkgewot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdy5tdWx0aXBseVNjYWxhciggc2NhbGUgKTsKLQot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBz
dy5zZXQoIDEsIDAsIDAsIDAgKTsgLy8gZG8gc29tZXRoaW5nIHJlYXNvbmFibGUKLQotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIHRoaXMuZ2VvbWV0cnkgJiYgdGhpcy5nZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5ICkg
ewotCi0gICAgICAgICAgICAgICAgdmFyIHZlYyA9IG5ldyBWZWN0b3I0KCk7Ci0KLSAgICAgICAg
ICAgICAgICB2YXIgc2tpbldlaWdodCA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5za2luV2Vp
Z2h0OwotCi0gICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBza2luV2VpZ2h0LmNvdW50
OyBpICsrICkgewotCi0gICAgICAgICAgICAgICAgICAgIHZlYy54ID0gc2tpbldlaWdodC5nZXRY
KCBpICk7Ci0gICAgICAgICAgICAgICAgICAgIHZlYy55ID0gc2tpbldlaWdodC5nZXRZKCBpICk7
Ci0gICAgICAgICAgICAgICAgICAgIHZlYy56ID0gc2tpbldlaWdodC5nZXRaKCBpICk7Ci0gICAg
ICAgICAgICAgICAgICAgIHZlYy53ID0gc2tpbldlaWdodC5nZXRXKCBpICk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgc2NhbGUgPSAxLjAgLyB2ZWMubWFuaGF0dGFuTGVuZ3RoKCk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCBzY2FsZSAhPT0gSW5maW5pdHkgKSB7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZlYy5tdWx0aXBseVNjYWxhciggc2NhbGUgKTsKLQotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAgICAgICAgICAgICAgICB2ZWMuc2V0KCAxLCAw
LCAwLCAwICk7IC8vIGRvIHNvbWV0aGluZyByZWFzb25hYmxlCi0KLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHNraW5XZWlnaHQuc2V0WFlaVyggaSwgdmVjLngs
IHZlYy55LCB2ZWMueiwgdmVjLncgKTsKLQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgfQotCi0gICAgICAgIH0sCi0KLSAgICAgICAgdXBkYXRlTWF0cml4V29ybGQ6IGZ1bmN0aW9u
ICggZm9yY2UgKSB7Ci0KLSAgICAgICAgICAgIE1lc2gucHJvdG90eXBlLnVwZGF0ZU1hdHJpeFdv
cmxkLmNhbGwoIHRoaXMsIGZvcmNlICk7Ci0KLSAgICAgICAgICAgIGlmICggdGhpcy5iaW5kTW9k
ZSA9PT0gJ2F0dGFjaGVkJyApIHsKLQotICAgICAgICAgICAgICAgIHRoaXMuYmluZE1hdHJpeElu
dmVyc2UuZ2V0SW52ZXJzZSggdGhpcy5tYXRyaXhXb3JsZCApOwotCi0gICAgICAgICAgICB9IGVs
c2UgaWYgKCB0aGlzLmJpbmRNb2RlID09PSAnZGV0YWNoZWQnICkgewotCi0gICAgICAgICAgICAg
ICAgdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5nZXRJbnZlcnNlKCB0aGlzLmJpbmRNYXRyaXggKTsK
LQotICAgICAgICAgICAgfSBlbHNlIHsKLQotICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybigg
J1RIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICcgKyB0aGlzLmJpbmRN
b2RlICk7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICB9LAotCi0gICAgICAgIGNsb25lOiBm
dW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcigg
dGhpcy5nZW9tZXRyeSwgdGhpcy5tYXRlcmlhbCApLmNvcHkoIHRoaXMgKTsKLQotICAgICAgICB9
Ci0KLSAgICB9ICk7Ci0KLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9t
cmRvb2IuY29tLwotICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxp
YS5jb20vCi0gICAgICoKLSAgICAgKiBwYXJhbWV0ZXJzID0gewotICAgICAqICBjb2xvcjogPGhl
eD4sCi0gICAgICogIG9wYWNpdHk6IDxmbG9hdD4sCi0gICAgICoKLSAgICAgKiAgbGluZXdpZHRo
OiA8ZmxvYXQ+LAotICAgICAqICBsaW5lY2FwOiAicm91bmQiLAotICAgICAqICBsaW5lam9pbjog
InJvdW5kIgotICAgICAqIH0KLSAgICAgKi8KLQotICAgIGZ1bmN0aW9uIExpbmVCYXNpY01hdGVy
aWFsKCBwYXJhbWV0ZXJzICkgewotCi0gICAgICAgIE1hdGVyaWFsLmNhbGwoIHRoaXMgKTsKLQot
ICAgICAgICB0aGlzLnR5cGUgPSAnTGluZUJhc2ljTWF0ZXJpYWwnOwotCi0gICAgICAgIHRoaXMu
Y29sb3IgPSBuZXcgQ29sb3IoIDB4ZmZmZmZmICk7Ci0KLSAgICAgICAgdGhpcy5saW5ld2lkdGgg
PSAxOwotICAgICAgICB0aGlzLmxpbmVjYXAgPSAncm91bmQnOwotICAgICAgICB0aGlzLmxpbmVq
b2luID0gJ3JvdW5kJzsKLQotICAgICAgICB0aGlzLmxpZ2h0cyA9IGZhbHNlOwotCi0gICAgICAg
IHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7Ci0KLSAgICB9Ci0KLSAgICBMaW5lQmFzaWNN
YXRlcmlhbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNYXRlcmlhbC5wcm90b3R5cGUgKTsK
LSAgICBMaW5lQmFzaWNNYXRlcmlhbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMaW5lQmFzaWNN
YXRlcmlhbDsKLQotICAgIExpbmVCYXNpY01hdGVyaWFsLnByb3RvdHlwZS5pc0xpbmVCYXNpY01h
dGVyaWFsID0gdHJ1ZTsKLQotICAgIExpbmVCYXNpY01hdGVyaWFsLnByb3RvdHlwZS5jb3B5ID0g
ZnVuY3Rpb24gKCBzb3VyY2UgKSB7Ci0KLSAgICAgICAgTWF0ZXJpYWwucHJvdG90eXBlLmNvcHku
Y2FsbCggdGhpcywgc291cmNlICk7Ci0KLSAgICAgICAgdGhpcy5jb2xvci5jb3B5KCBzb3VyY2Uu
Y29sb3IgKTsKLQotICAgICAgICB0aGlzLmxpbmV3aWR0aCA9IHNvdXJjZS5saW5ld2lkdGg7Ci0g
ICAgICAgIHRoaXMubGluZWNhcCA9IHNvdXJjZS5saW5lY2FwOwotICAgICAgICB0aGlzLmxpbmVq
b2luID0gc291cmNlLmxpbmVqb2luOwotCi0gICAgICAgIHJldHVybiB0aGlzOwotCi0gICAgfTsK
LQotICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0g
ICAgICovCi0KLSAgICBmdW5jdGlvbiBMaW5lKCBnZW9tZXRyeSwgbWF0ZXJpYWwsIG1vZGUgKSB7
Ci0KLSAgICAgICAgaWYgKCBtb2RlID09PSAxICkgewotCi0gICAgICAgICAgICBjb25zb2xlLndh
cm4oICdUSFJFRS5MaW5lOiBwYXJhbWV0ZXIgVEhSRUUuTGluZVBpZWNlcyBubyBsb25nZXIgc3Vw
cG9ydGVkLiBDcmVhdGVkIFRIUkVFLkxpbmVTZWdtZW50cyBpbnN0ZWFkLicgKTsKLSAgICAgICAg
ICAgIHJldHVybiBuZXcgTGluZVNlZ21lbnRzKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTsKLQotICAg
ICAgICB9Ci0KLSAgICAgICAgT2JqZWN0M0QuY2FsbCggdGhpcyApOwotCi0gICAgICAgIHRoaXMu
dHlwZSA9ICdMaW5lJzsKLQotICAgICAgICB0aGlzLmdlb21ldHJ5ID0gZ2VvbWV0cnkgIT09IHVu
ZGVmaW5lZCA/IGdlb21ldHJ5IDogbmV3IEJ1ZmZlckdlb21ldHJ5KCk7Ci0gICAgICAgIHRoaXMu
bWF0ZXJpYWwgPSBtYXRlcmlhbCAhPT0gdW5kZWZpbmVkID8gbWF0ZXJpYWwgOiBuZXcgTGluZUJh
c2ljTWF0ZXJpYWwoIHsgY29sb3I6IE1hdGgucmFuZG9tKCkgKiAweGZmZmZmZiB9ICk7Ci0KLSAg
ICB9Ci0KLSAgICBMaW5lLnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUo
IE9iamVjdDNELnByb3RvdHlwZSApLCB7Ci0KLSAgICAgICAgY29uc3RydWN0b3I6IExpbmUsCi0K
LSAgICAgICAgaXNMaW5lOiB0cnVlLAotCi0gICAgICAgIGNvbXB1dGVMaW5lRGlzdGFuY2VzOiAo
IGZ1bmN0aW9uICgpIHsKLQotICAgICAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IFZlY3RvcjMoKTsK
LSAgICAgICAgICAgIHZhciBlbmQgPSBuZXcgVmVjdG9yMygpOwotCi0gICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb24gY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSB7Ci0KLSAgICAgICAgICAgICAgICB2
YXIgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5OwotCi0gICAgICAgICAgICAgICAgaWYgKCBnZW9t
ZXRyeS5pc0J1ZmZlckdlb21ldHJ5ICkgewotCi0gICAgICAgICAgICAgICAgICAgIC8vIHdlIGFz
c3VtZSBub24taW5kZXhlZCBnZW9tZXRyeQotCi0gICAgICAgICAgICAgICAgICAgIGlmICggZ2Vv
bWV0cnkuaW5kZXggPT09IG51bGwgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBw
b3NpdGlvbkF0dHJpYnV0ZSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgbGluZURpc3RhbmNlcyA9IFsgMCBdOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDEsIGwgPSBwb3NpdGlvbkF0dHJpYnV0ZS5jb3Vu
dDsgaSA8IGw7IGkgKysgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydC5m
cm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbkF0dHJpYnV0ZSwgaSAtIDEgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbmQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRy
aWJ1dGUsIGkgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVEaXN0YW5jZXNb
IGkgXSA9IGxpbmVEaXN0YW5jZXNbIGkgLSAxIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGluZURpc3RhbmNlc1sgaSBdICs9IHN0YXJ0LmRpc3RhbmNlVG8oIGVuZCApOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5
LmFkZEF0dHJpYnV0ZSggJ2xpbmVEaXN0YW5jZScsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRl
KCBsaW5lRGlzdGFuY2VzLCAxICkgKTsKLQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5MaW5lLmNvbXB1
dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5k
ZXhlZCBCdWZmZXJHZW9tZXRyeS4nICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICggZ2VvbWV0cnkuaXNHZW9tZXRyeSApIHsKLQotICAgICAg
ICAgICAgICAgICAgICB2YXIgdmVydGljZXMgPSBnZW9tZXRyeS52ZXJ0aWNlczsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIGxpbmVEaXN0YW5jZXMgPSBnZW9tZXRyeS5saW5lRGlzdGFuY2VzOwot
Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVEaXN0YW5jZXNbIDAgXSA9IDA7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgZm9yICggdmFyIGkgPSAxLCBsID0gdmVydGljZXMubGVuZ3RoOyBpIDwgbDsg
aSArKyApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZURpc3RhbmNlc1sgaSBdID0g
bGluZURpc3RhbmNlc1sgaSAtIDEgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVEaXN0
YW5jZXNbIGkgXSArPSB2ZXJ0aWNlc1sgaSAtIDEgXS5kaXN0YW5jZVRvKCB2ZXJ0aWNlc1sgaSBd
ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgICAgICB9CiAKQEAgLTI1NjA4LDcgKzI2NzY1LDYgQEAKICAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbiByYXljYXN0KCByYXljYXN0ZXIsIGludGVyc2VjdHMgKSB7CiAKICAgICAg
ICAgICAgICAgICB2YXIgcHJlY2lzaW9uID0gcmF5Y2FzdGVyLmxpbmVQcmVjaXNpb247Ci0gICAg
ICAgICAgICAgICAgdmFyIHByZWNpc2lvblNxID0gcHJlY2lzaW9uICogcHJlY2lzaW9uOwogCiAg
ICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTsKICAgICAgICAgICAg
ICAgICB2YXIgbWF0cml4V29ybGQgPSB0aGlzLm1hdHJpeFdvcmxkOwpAQCAtMjU2MTksNiArMjY3
NzUsNyBAQAogCiAgICAgICAgICAgICAgICAgc3BoZXJlLmNvcHkoIGdlb21ldHJ5LmJvdW5kaW5n
U3BoZXJlICk7CiAgICAgICAgICAgICAgICAgc3BoZXJlLmFwcGx5TWF0cml4NCggbWF0cml4V29y
bGQgKTsKKyAgICAgICAgICAgICAgICBzcGhlcmUucmFkaXVzICs9IHByZWNpc2lvbjsKIAogICAg
ICAgICAgICAgICAgIGlmICggcmF5Y2FzdGVyLnJheS5pbnRlcnNlY3RzU3BoZXJlKCBzcGhlcmUg
KSA9PT0gZmFsc2UgKSByZXR1cm47CiAKQEAgLTI1NjI3LDYgKzI2Nzg0LDkgQEAKICAgICAgICAg
ICAgICAgICBpbnZlcnNlTWF0cml4LmdldEludmVyc2UoIG1hdHJpeFdvcmxkICk7CiAgICAgICAg
ICAgICAgICAgcmF5LmNvcHkoIHJheWNhc3Rlci5yYXkgKS5hcHBseU1hdHJpeDQoIGludmVyc2VN
YXRyaXggKTsKIAorICAgICAgICAgICAgICAgIHZhciBsb2NhbFByZWNpc2lvbiA9IHByZWNpc2lv
biAvICggKCB0aGlzLnNjYWxlLnggKyB0aGlzLnNjYWxlLnkgKyB0aGlzLnNjYWxlLnogKSAvIDMg
KTsKKyAgICAgICAgICAgICAgICB2YXIgbG9jYWxQcmVjaXNpb25TcSA9IGxvY2FsUHJlY2lzaW9u
ICogbG9jYWxQcmVjaXNpb247CisKICAgICAgICAgICAgICAgICB2YXIgdlN0YXJ0ID0gbmV3IFZl
Y3RvcjMoKTsKICAgICAgICAgICAgICAgICB2YXIgdkVuZCA9IG5ldyBWZWN0b3IzKCk7CiAgICAg
ICAgICAgICAgICAgdmFyIGludGVyU2VnbWVudCA9IG5ldyBWZWN0b3IzKCk7CkBAIC0yNTY1Myw3
ICsyNjgxMyw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzdFNxID0g
cmF5LmRpc3RhbmNlU3FUb1NlZ21lbnQoIHZTdGFydCwgdkVuZCwgaW50ZXJSYXksIGludGVyU2Vn
bWVudCApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkaXN0U3EgPiBwcmVj
aXNpb25TcSApIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGlz
dFNxID4gbG9jYWxQcmVjaXNpb25TcSApIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50ZXJSYXkuYXBwbHlNYXRyaXg0KCB0aGlzLm1hdHJpeFdvcmxkICk7IC8vTW92
ZSBiYWNrIHRvIHdvcmxkIHNwYWNlIGZvciBkaXN0YW5jZSBjYWxjdWxhdGlvbgogCkBAIC0yNTY4
NSw3ICsyNjg0NSw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzdFNx
ID0gcmF5LmRpc3RhbmNlU3FUb1NlZ21lbnQoIHZTdGFydCwgdkVuZCwgaW50ZXJSYXksIGludGVy
U2VnbWVudCApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkaXN0U3EgPiBw
cmVjaXNpb25TcSApIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZGlzdFNxID4gbG9jYWxQcmVjaXNpb25TcSApIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50ZXJSYXkuYXBwbHlNYXRyaXg0KCB0aGlzLm1hdHJpeFdvcmxkICk7IC8v
TW92ZSBiYWNrIHRvIHdvcmxkIHNwYWNlIGZvciBkaXN0YW5jZSBjYWxjdWxhdGlvbgogCkBAIC0y
NTcxOSw3ICsyNjg3OSw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXN0U3Eg
PSByYXkuZGlzdGFuY2VTcVRvU2VnbWVudCggdmVydGljZXNbIGkgXSwgdmVydGljZXNbIGkgKyAx
IF0sIGludGVyUmF5LCBpbnRlclNlZ21lbnQgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBkaXN0U3EgPiBwcmVjaXNpb25TcSApIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBkaXN0U3EgPiBsb2NhbFByZWNpc2lvblNxICkgY29udGludWU7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGludGVyUmF5LmFwcGx5TWF0cml4NCggdGhpcy5tYXRyaXhXb3Js
ZCApOyAvL01vdmUgYmFjayB0byB3b3JsZCBzcGFjZSBmb3IgZGlzdGFuY2UgY2FsY3VsYXRpb24K
IApAQCAtMjU5MjcsNiArMjcwODcsOCBAQAogICAgICAgICB0aGlzLmdlb21ldHJ5ID0gZ2VvbWV0
cnkgIT09IHVuZGVmaW5lZCA/IGdlb21ldHJ5IDogbmV3IEJ1ZmZlckdlb21ldHJ5KCk7CiAgICAg
ICAgIHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbCAhPT0gdW5kZWZpbmVkID8gbWF0ZXJpYWwgOiBu
ZXcgUG9pbnRzTWF0ZXJpYWwoIHsgY29sb3I6IE1hdGgucmFuZG9tKCkgKiAweGZmZmZmZiB9ICk7
CiAKKyAgICAgICAgdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKTsKKwogICAgIH0KIAogICAgIFBv
aW50cy5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBPYmplY3QzRC5w
cm90b3R5cGUgKSwgewpAQCAtMjYwNDQsNiArMjcyMDYsMzggQEAKIAogICAgICAgICB9KCkgKSwK
IAorICAgICAgICB1cGRhdGVNb3JwaFRhcmdldHM6IGZ1bmN0aW9uICgpIHsKKworICAgICAgICAg
ICAgdmFyIGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTsKKyAgICAgICAgICAgIHZhciBtLCBtbCwg
bmFtZTsKKworICAgICAgICAgICAgdmFyIG1vcnBoQXR0cmlidXRlcyA9IGdlb21ldHJ5Lm1vcnBo
QXR0cmlidXRlczsKKyAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoIG1vcnBoQXR0
cmlidXRlcyApOworCisgICAgICAgICAgICBpZiAoIGtleXMubGVuZ3RoID4gMCApIHsKKworICAg
ICAgICAgICAgICAgIHZhciBtb3JwaEF0dHJpYnV0ZSA9IG1vcnBoQXR0cmlidXRlc1sga2V5c1sg
MCBdIF07CisKKyAgICAgICAgICAgICAgICBpZiAoIG1vcnBoQXR0cmlidXRlICE9PSB1bmRlZmlu
ZWQgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMg
PSBbXTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnkgPSB7
fTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKCBtID0gMCwgbWwgPSBtb3JwaEF0dHJpYnV0
ZS5sZW5ndGg7IG0gPCBtbDsgbSArKyApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZSA9IG1vcnBoQXR0cmlidXRlWyBtIF0ubmFtZSB8fCBTdHJpbmcoIG0gKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCggMCApOworICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbIG5hbWUgXSA9
IG07CisKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB9CisKKyAgICAgICAgfSwKKwogICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkgewog
CiAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRoaXMuZ2VvbWV0cnks
IHRoaXMubWF0ZXJpYWwgKS5jb3B5KCB0aGlzICk7CkBAIC0yNjA2MCw2ICsyNzI1NCwxMSBAQAog
CiAgICAgICAgIFRleHR1cmUuY2FsbCggdGhpcywgdmlkZW8sIG1hcHBpbmcsIHdyYXBTLCB3cmFw
VCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSApOwogCisg
ICAgICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0ICE9PSB1bmRlZmluZWQgPyBmb3JtYXQgOiBSR0JG
b3JtYXQ7CisKKyAgICAgICAgdGhpcy5taW5GaWx0ZXIgPSBtaW5GaWx0ZXIgIT09IHVuZGVmaW5l
ZCA/IG1pbkZpbHRlciA6IExpbmVhckZpbHRlcjsKKyAgICAgICAgdGhpcy5tYWdGaWx0ZXIgPSBt
YWdGaWx0ZXIgIT09IHVuZGVmaW5lZCA/IG1hZ0ZpbHRlciA6IExpbmVhckZpbHRlcjsKKwogICAg
ICAgICB0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlOwogCiAgICAgfQpAQCAtMjYxMTIsNiAr
MjczMTEsMjIgQEAKIAogICAgIENvbXByZXNzZWRUZXh0dXJlLnByb3RvdHlwZS5pc0NvbXByZXNz
ZWRUZXh0dXJlID0gdHJ1ZTsKIAorICAgIC8qKgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0
cDovL21yZG9vYi5jb20vCisgICAgICovCisKKyAgICBmdW5jdGlvbiBDYW52YXNUZXh0dXJlKCBj
YW52YXMsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1h
dCwgdHlwZSwgYW5pc290cm9weSApIHsKKworICAgICAgICBUZXh0dXJlLmNhbGwoIHRoaXMsIGNh
bnZhcywgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdGaWx0ZXIsIG1pbkZpbHRlciwgZm9ybWF0
LCB0eXBlLCBhbmlzb3Ryb3B5ICk7CisKKyAgICAgICAgdGhpcy5uZWVkc1VwZGF0ZSA9IHRydWU7
CisKKyAgICB9CisKKyAgICBDYW52YXNUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUo
IFRleHR1cmUucHJvdG90eXBlICk7CisgICAgQ2FudmFzVGV4dHVyZS5wcm90b3R5cGUuY29uc3Ry
dWN0b3IgPSBDYW52YXNUZXh0dXJlOworICAgIENhbnZhc1RleHR1cmUucHJvdG90eXBlLmlzQ2Fu
dmFzVGV4dHVyZSA9IHRydWU7CisKICAgICAvKioKICAgICAgKiBAYXV0aG9yIE1hdHQgRGVzTGF1
cmllcnMgLyBAbWF0dGRlc2wKICAgICAgKiBAYXV0aG9yIGF0aXggLyBhcnRodXJzaWxiZXIuZGUK
QEAgLTI3MjcyLDYgKzI4NDg3LDE2IEBACiAgICAgVHViZUJ1ZmZlckdlb21ldHJ5LnByb3RvdHlw
ZSA9IE9iamVjdC5jcmVhdGUoIEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSApOwogICAgIFR1YmVC
dWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUdWJlQnVmZmVyR2VvbWV0cnk7
CiAKKyAgICBUdWJlQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgp
IHsKKworICAgICAgICB2YXIgZGF0YSA9IEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS50b0pTT04u
Y2FsbCggdGhpcyApOworCisgICAgICAgIGRhdGEucGF0aCA9IHRoaXMucGFyYW1ldGVycy5wYXRo
LnRvSlNPTigpOworCisgICAgICAgIHJldHVybiBkYXRhOworCisgICAgfTsKKwogICAgIC8qKgog
ICAgICAqIEBhdXRob3Igb29zbW94aWVjb2RlCiAgICAgICogQGF1dGhvciBNdWdlbjg3IC8gaHR0
cHM6Ly9naXRodWIuY29tL011Z2VuODcKQEAgLTI3NTk2LDcgKzI4ODIxLDcgQEAKIAogICAgIC8q
KgogICAgICAqIEBhdXRob3IgTXVnZW44NyAvIGh0dHBzOi8vZ2l0aHViLmNvbS9NdWdlbjg3Ci0g
ICAgICogUG9ydCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvZWFyY3V0ICh2Mi4xLjIp
CisgICAgICogUG9ydCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvZWFyY3V0ICh2Mi4x
LjUpCiAgICAgICovCiAKICAgICB2YXIgRWFyY3V0ID0gewpAQCAtMjc2MTAsMTQgKzI4ODM1LDEz
IEBACiAgICAgICAgICAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdCggZGF0YSwgMCwgb3V0
ZXJMZW4sIGRpbSwgdHJ1ZSApLAogICAgICAgICAgICAgICAgIHRyaWFuZ2xlcyA9IFtdOwogCi0g
ICAgICAgICAgICBpZiAoICEgb3V0ZXJOb2RlICkgcmV0dXJuIHRyaWFuZ2xlczsKKyAgICAgICAg
ICAgIGlmICggISBvdXRlck5vZGUgfHwgb3V0ZXJOb2RlLm5leHQgPT09IG91dGVyTm9kZS5wcmV2
ICkgcmV0dXJuIHRyaWFuZ2xlczsKIAogICAgICAgICAgICAgdmFyIG1pblgsIG1pblksIG1heFgs
IG1heFksIHgsIHksIGludlNpemU7CiAKICAgICAgICAgICAgIGlmICggaGFzSG9sZXMgKSBvdXRl
ck5vZGUgPSBlbGltaW5hdGVIb2xlcyggZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGlt
ICk7CiAKICAgICAgICAgICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2Un
bGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveAot
CiAgICAgICAgICAgICBpZiAoIGRhdGEubGVuZ3RoID4gODAgKiBkaW0gKSB7CiAKICAgICAgICAg
ICAgICAgICBtaW5YID0gbWF4WCA9IGRhdGFbIDAgXTsKQEAgLTI3NjM1LDcgKzI4ODU5LDYgQEAK
ICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBtaW5YLCBtaW5ZIGFuZCBp
bnZTaXplIGFyZSBsYXRlciB1c2VkIHRvIHRyYW5zZm9ybSBjb29yZHMgaW50byBpbnRlZ2VycyBm
b3Igei1vcmRlciBjYWxjdWxhdGlvbgotCiAgICAgICAgICAgICAgICAgaW52U2l6ZSA9IE1hdGgu
bWF4KCBtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkgKTsKICAgICAgICAgICAgICAgICBpbnZTaXpl
ID0gaW52U2l6ZSAhPT0gMCA/IDEgLyBpbnZTaXplIDogMDsKIApAQCAtMjc2NTAsNyArMjg4NzMs
NiBAQAogICAgIH07CiAKICAgICAvLyBjcmVhdGUgYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxp
c3QgZnJvbSBwb2x5Z29uIHBvaW50cyBpbiB0aGUgc3BlY2lmaWVkIHdpbmRpbmcgb3JkZXIKLQog
ICAgIGZ1bmN0aW9uIGxpbmtlZExpc3QoIGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgY2xvY2t3aXNl
ICkgewogCiAgICAgICAgIHZhciBpLCBsYXN0OwpAQCAtMjc2NzcsMTQgKzI4ODk5LDEzIEBACiAg
ICAgfQogCiAgICAgLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHMKLQog
ICAgIGZ1bmN0aW9uIGZpbHRlclBvaW50cyggc3RhcnQsIGVuZCApIHsKIAogICAgICAgICBpZiAo
ICEgc3RhcnQgKSByZXR1cm4gc3RhcnQ7CiAgICAgICAgIGlmICggISBlbmQgKSBlbmQgPSBzdGFy
dDsKIAotICAgICAgICB2YXIgcCA9IHN0YXJ0LCBhZ2FpbjsKLQorICAgICAgICB2YXIgcCA9IHN0
YXJ0LAorICAgICAgICAgICAgYWdhaW47CiAgICAgICAgIGRvIHsKIAogICAgICAgICAgICAgYWdh
aW4gPSBmYWxzZTsKQEAgLTI3NzA5LDE5ICsyODkzMCwxNyBAQAogICAgIH0KIAogICAgIC8vIG1h
aW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBh
cyBhIGxpbmtlZCBsaXN0KQotCiAgICAgZnVuY3Rpb24gZWFyY3V0TGlua2VkKCBlYXIsIHRyaWFu
Z2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplLCBwYXNzICkgewogCiAgICAgICAgIGlmICgg
ISBlYXIgKSByZXR1cm47CiAKICAgICAgICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4g
ei1vcmRlcgotCiAgICAgICAgIGlmICggISBwYXNzICYmIGludlNpemUgKSBpbmRleEN1cnZlKCBl
YXIsIG1pblgsIG1pblksIGludlNpemUgKTsKIAotICAgICAgICB2YXIgc3RvcCA9IGVhciwgcHJl
diwgbmV4dDsKKyAgICAgICAgdmFyIHN0b3AgPSBlYXIsCisgICAgICAgICAgICBwcmV2LCBuZXh0
OwogCiAgICAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5
IG9uZQotCiAgICAgICAgIHdoaWxlICggZWFyLnByZXYgIT09IGVhci5uZXh0ICkgewogCiAgICAg
ICAgICAgICBwcmV2ID0gZWFyLnByZXY7CkBAIC0yNzczNiw3ICsyODk1NSw3IEBACiAKICAgICAg
ICAgICAgICAgICByZW1vdmVOb2RlKCBlYXIgKTsKIAotICAgICAgICAgICAgICAgIC8vIHNraXBw
aW5nIHRoZSBuZXh0IHZlcnRpY2UgbGVhZHMgdG8gbGVzcyBzbGl2ZXIgdHJpYW5nbGVzCisgICAg
ICAgICAgICAgICAgLy8gc2tpcHBpbmcgdGhlIG5leHQgdmVydGV4IGxlYWRzIHRvIGxlc3Mgc2xp
dmVyIHRyaWFuZ2xlcwogICAgICAgICAgICAgICAgIGVhciA9IG5leHQubmV4dDsKICAgICAgICAg
ICAgICAgICBzdG9wID0gbmV4dC5uZXh0OwogCkBAIC0yNzc0NywxMSArMjg5NjYsOSBAQAogICAg
ICAgICAgICAgZWFyID0gbmV4dDsKIAogICAgICAgICAgICAgLy8gaWYgd2UgbG9vcGVkIHRocm91
Z2ggdGhlIHdob2xlIHJlbWFpbmluZyBwb2x5Z29uIGFuZCBjYW4ndCBmaW5kIGFueSBtb3JlIGVh
cnMKLQogICAgICAgICAgICAgaWYgKCBlYXIgPT09IHN0b3AgKSB7CiAKICAgICAgICAgICAgICAg
ICAvLyB0cnkgZmlsdGVyaW5nIHBvaW50cyBhbmQgc2xpY2luZyBhZ2FpbgotCiAgICAgICAgICAg
ICAgICAgaWYgKCAhIHBhc3MgKSB7CiAKICAgICAgICAgICAgICAgICAgICAgZWFyY3V0TGlua2Vk
KCBmaWx0ZXJQb2ludHMoIGVhciApLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6
ZSwgMSApOwpAQCAtMjc3NjMsNyArMjg5ODAsNyBAQAogICAgICAgICAgICAgICAgICAgICBlYXIg
PSBjdXJlTG9jYWxJbnRlcnNlY3Rpb25zKCBlYXIsIHRyaWFuZ2xlcywgZGltICk7CiAgICAgICAg
ICAgICAgICAgICAgIGVhcmN1dExpbmtlZCggZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWlu
WSwgaW52U2l6ZSwgMiApOwogCi0gICAgICAgICAgICAgICAgLy8gYXMgYSBsYXN0IHJlc29ydCwg
dHJ5IHNwbGl0dGluZyB0aGUgcmVtYWluaW5nIHBvbHlnb24gaW50byB0d28KKyAgICAgICAgICAg
ICAgICAgICAgLy8gYXMgYSBsYXN0IHJlc29ydCwgdHJ5IHNwbGl0dGluZyB0aGUgcmVtYWluaW5n
IHBvbHlnb24gaW50byB0d28KIAogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHBhc3MgPT09
IDIgKSB7CiAKQEAgLTI3NzgwLDcgKzI4OTk3LDYgQEAKICAgICB9CiAKICAgICAvLyBjaGVjayB3
aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9k
ZXMKLQogICAgIGZ1bmN0aW9uIGlzRWFyKCBlYXIgKSB7CiAKICAgICAgICAgdmFyIGEgPSBlYXIu
cHJldiwKQEAgLTI3Nzk0LDEyICsyOTAxMCw4IEBACiAKICAgICAgICAgd2hpbGUgKCBwICE9PSBl
YXIucHJldiApIHsKIAotICAgICAgICAgICAgaWYgKCBwb2ludEluVHJpYW5nbGUoIGEueCwgYS55
LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55ICkgJiYgYXJlYSggcC5wcmV2LCBwLCBwLm5l
eHQgKSA+PSAwICkgewotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
ICAgICB9Ci0KKyAgICAgICAgICAgIGlmICggcG9pbnRJblRyaWFuZ2xlKCBhLngsIGEueSwgYi54
LCBiLnksIGMueCwgYy55LCBwLngsIHAueSApICYmCisgICAgICAgICAgICAgICAgYXJlYSggcC5w
cmV2LCBwLCBwLm5leHQgKSA+PSAwICkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgcCA9IHAu
bmV4dDsKIAogICAgICAgICB9CkBAIC0yNzgxNyw1NyArMjkwMjksNjUgQEAKICAgICAgICAgaWYg
KCBhcmVhKCBhLCBiLCBjICkgPj0gMCApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBi
ZSBhbiBlYXIKIAogICAgICAgICAvLyB0cmlhbmdsZSBiYm94OyBtaW4gJiBtYXggYXJlIGNhbGN1
bGF0ZWQgbGlrZSB0aGlzIGZvciBzcGVlZAotCiAgICAgICAgIHZhciBtaW5UWCA9IGEueCA8IGIu
eCA/ICggYS54IDwgYy54ID8gYS54IDogYy54ICkgOiAoIGIueCA8IGMueCA/IGIueCA6IGMueCAp
LAogICAgICAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoIGEueSA8IGMueSA/IGEueSA6IGMu
eSApIDogKCBiLnkgPCBjLnkgPyBiLnkgOiBjLnkgKSwKICAgICAgICAgICAgIG1heFRYID0gYS54
ID4gYi54ID8gKCBhLnggPiBjLnggPyBhLnggOiBjLnggKSA6ICggYi54ID4gYy54ID8gYi54IDog
Yy54ICksCiAgICAgICAgICAgICBtYXhUWSA9IGEueSA+IGIueSA/ICggYS55ID4gYy55ID8gYS55
IDogYy55ICkgOiAoIGIueSA+IGMueSA/IGIueSA6IGMueSApOwogCiAgICAgICAgIC8vIHotb3Jk
ZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7Ci0KICAgICAgICAgdmFyIG1p
blogPSB6T3JkZXIoIG1pblRYLCBtaW5UWSwgbWluWCwgbWluWSwgaW52U2l6ZSApLAogICAgICAg
ICAgICAgbWF4WiA9IHpPcmRlciggbWF4VFgsIG1heFRZLCBtaW5YLCBtaW5ZLCBpbnZTaXplICk7
CiAKLSAgICAgICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUg
aW4gaW5jcmVhc2luZyB6LW9yZGVyCisgICAgICAgIHZhciBwID0gZWFyLnByZXZaLAorICAgICAg
ICAgICAgbiA9IGVhci5uZXh0WjsKIAotICAgICAgICB2YXIgcCA9IGVhci5uZXh0WjsKLQotICAg
ICAgICB3aGlsZSAoIHAgJiYgcC56IDw9IG1heFogKSB7CisgICAgICAgIC8vIGxvb2sgZm9yIHBv
aW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIGluIGJvdGggZGlyZWN0aW9ucworICAgICAgICB3aGls
ZSAoIHAgJiYgcC56ID49IG1pblogJiYgbiAmJiBuLnogPD0gbWF4WiApIHsKIAogICAgICAgICAg
ICAgaWYgKCBwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJgotICAgICAgICAgICAg
ICAgICAgICBwb2ludEluVHJpYW5nbGUoIGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAu
eCwgcC55ICkgJiYKLSAgICAgICAgICAgICAgICAgICAgYXJlYSggcC5wcmV2LCBwLCBwLm5leHQg
KSA+PSAwICkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcCA9IHAubmV4dFo7Ci0KLSAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZSggYS54LCBhLnksIGIueCwgYi55
LCBjLngsIGMueSwgcC54LCBwLnkgKSAmJgorICAgICAgICAgICAgICAgIGFyZWEoIHAucHJldiwg
cCwgcC5uZXh0ICkgPj0gMCApIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHAgPSBwLnByZXZa
OwogCi0gICAgICAgIC8vIHRoZW4gbG9vayBmb3IgcG9pbnRzIGluIGRlY3JlYXNpbmcgei1vcmRl
cgorICAgICAgICAgICAgaWYgKCBuICE9PSBlYXIucHJldiAmJiBuICE9PSBlYXIubmV4dCAmJgor
ICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZSggYS54LCBhLnksIGIueCwgYi55LCBjLngs
IGMueSwgbi54LCBuLnkgKSAmJgorICAgICAgICAgICAgICAgIGFyZWEoIG4ucHJldiwgbiwgbi5u
ZXh0ICkgPj0gMCApIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG4gPSBuLm5leHRaOwogCi0g
ICAgICAgIHAgPSBlYXIucHJldlo7CisgICAgICAgIH0KIAorICAgICAgICAvLyBsb29rIGZvciBy
ZW1haW5pbmcgcG9pbnRzIGluIGRlY3JlYXNpbmcgei1vcmRlcgogICAgICAgICB3aGlsZSAoIHAg
JiYgcC56ID49IG1pblogKSB7CiAKICAgICAgICAgICAgIGlmICggcCAhPT0gZWFyLnByZXYgJiYg
cCAhPT0gZWFyLm5leHQgJiYKLSAgICAgICAgICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKCBh
LngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSApICYmCi0gICAgICAgICAgICAg
ICAgICAgIGFyZWEoIHAucHJldiwgcCwgcC5uZXh0ICkgPj0gMCApIHJldHVybiBmYWxzZTsKLQor
ICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZSggYS54LCBhLnksIGIueCwgYi55LCBjLngs
IGMueSwgcC54LCBwLnkgKSAmJgorICAgICAgICAgICAgICAgIGFyZWEoIHAucHJldiwgcCwgcC5u
ZXh0ICkgPj0gMCApIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHAgPSBwLnByZXZaOwogCiAg
ICAgICAgIH0KIAorICAgICAgICAvLyBsb29rIGZvciByZW1haW5pbmcgcG9pbnRzIGluIGluY3Jl
YXNpbmcgei1vcmRlcgorICAgICAgICB3aGlsZSAoIG4gJiYgbi56IDw9IG1heFogKSB7CisKKyAg
ICAgICAgICAgIGlmICggbiAhPT0gZWFyLnByZXYgJiYgbiAhPT0gZWFyLm5leHQgJiYKKyAgICAg
ICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoIGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnks
IG4ueCwgbi55ICkgJiYKKyAgICAgICAgICAgICAgICBhcmVhKCBuLnByZXYsIG4sIG4ubmV4dCAp
ID49IDAgKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBuID0gbi5uZXh0WjsKKworICAgICAg
ICB9CisKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICB9CiAKICAgICAvLyBnbyB0aHJvdWdo
IGFsbCBwb2x5Z29uIG5vZGVzIGFuZCBjdXJlIHNtYWxsIGxvY2FsIHNlbGYtaW50ZXJzZWN0aW9u
cwotCiAgICAgZnVuY3Rpb24gY3VyZUxvY2FsSW50ZXJzZWN0aW9ucyggc3RhcnQsIHRyaWFuZ2xl
cywgZGltICkgewogCiAgICAgICAgIHZhciBwID0gc3RhcnQ7Ci0KICAgICAgICAgZG8gewogCi0g
ICAgICAgICAgICB2YXIgYSA9IHAucHJldiwgYiA9IHAubmV4dC5uZXh0OworICAgICAgICAgICAg
dmFyIGEgPSBwLnByZXYsCisgICAgICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0OwogCiAgICAg
ICAgICAgICBpZiAoICEgZXF1YWxzKCBhLCBiICkgJiYgaW50ZXJzZWN0cyggYSwgcCwgcC5uZXh0
LCBiICkgJiYgbG9jYWxseUluc2lkZSggYSwgYiApICYmIGxvY2FsbHlJbnNpZGUoIGIsIGEgKSAp
IHsKIApAQCAtMjc4NzYsNyArMjkwOTYsNiBAQAogICAgICAgICAgICAgICAgIHRyaWFuZ2xlcy5w
dXNoKCBiLmkgLyBkaW0gKTsKIAogICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0d28gbm9kZXMg
aW52b2x2ZWQKLQogICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoIHAgKTsKICAgICAgICAgICAg
ICAgICByZW1vdmVOb2RlKCBwLm5leHQgKTsKIApAQCAtMjc4OTMsMzIgKzI5MTEyLDI1IEBACiAg
ICAgfQogCiAgICAgLy8gdHJ5IHNwbGl0dGluZyBwb2x5Z29uIGludG8gdHdvIGFuZCB0cmlhbmd1
bGF0ZSB0aGVtIGluZGVwZW5kZW50bHkKLQogICAgIGZ1bmN0aW9uIHNwbGl0RWFyY3V0KCBzdGFy
dCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUgKSB7CiAKICAgICAgICAgLy8g
bG9vayBmb3IgYSB2YWxpZCBkaWFnb25hbCB0aGF0IGRpdmlkZXMgdGhlIHBvbHlnb24gaW50byB0
d28KLQogICAgICAgICB2YXIgYSA9IHN0YXJ0OwotCiAgICAgICAgIGRvIHsKIAogICAgICAgICAg
ICAgdmFyIGIgPSBhLm5leHQubmV4dDsKLQogICAgICAgICAgICAgd2hpbGUgKCBiICE9PSBhLnBy
ZXYgKSB7CiAKICAgICAgICAgICAgICAgICBpZiAoIGEuaSAhPT0gYi5pICYmIGlzVmFsaWREaWFn
b25hbCggYSwgYiApICkgewogCiAgICAgICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBwb2x5
Z29uIGluIHR3byBieSB0aGUgZGlhZ29uYWwKLQogICAgICAgICAgICAgICAgICAgICB2YXIgYyA9
IHNwbGl0UG9seWdvbiggYSwgYiApOwogCiAgICAgICAgICAgICAgICAgICAgIC8vIGZpbHRlciBj
b2xpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzCi0KICAgICAgICAgICAgICAgICAgICAgYSA9
IGZpbHRlclBvaW50cyggYSwgYS5uZXh0ICk7CiAgICAgICAgICAgICAgICAgICAgIGMgPSBmaWx0
ZXJQb2ludHMoIGMsIGMubmV4dCApOwogCiAgICAgICAgICAgICAgICAgICAgIC8vIHJ1biBlYXJj
dXQgb24gZWFjaCBoYWxmCi0KICAgICAgICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKCBhLCB0
cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSApOwogICAgICAgICAgICAgICAgICAg
ICBlYXJjdXRMaW5rZWQoIGMsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplICk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTI3OTM2LDEwICsyOTE0OCwxMCBAQAog
ICAgIH0KIAogICAgIC8vIGxpbmsgZXZlcnkgaG9sZSBpbnRvIHRoZSBvdXRlciBsb29wLCBwcm9k
dWNpbmcgYSBzaW5nbGUtcmluZyBwb2x5Z29uIHdpdGhvdXQgaG9sZXMKLQogICAgIGZ1bmN0aW9u
IGVsaW1pbmF0ZUhvbGVzKCBkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0gKSB7CiAK
LSAgICAgICAgdmFyIHF1ZXVlID0gW10sIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDsKKyAgICAg
ICAgdmFyIHF1ZXVlID0gW10sCisgICAgICAgICAgICBpLCBsZW4sIHN0YXJ0LCBlbmQsIGxpc3Q7
CiAKICAgICAgICAgZm9yICggaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxl
bjsgaSArKyApIHsKIApAQCAtMjc5NTQsNyArMjkxNjYsNiBAQAogICAgICAgICBxdWV1ZS5zb3J0
KCBjb21wYXJlWCApOwogCiAgICAgICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJp
Z2h0Ci0KICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkgKysgKSB7CiAK
ICAgICAgICAgICAgIGVsaW1pbmF0ZUhvbGUoIHF1ZXVlWyBpIF0sIG91dGVyTm9kZSApOwpAQCAt
Mjc5NzMsMTUgKzI5MTg0LDEyIEBACiAgICAgfQogCiAgICAgLy8gZmluZCBhIGJyaWRnZSBiZXR3
ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFu
ZCBsaW5rIGl0Ci0KICAgICBmdW5jdGlvbiBlbGltaW5hdGVIb2xlKCBob2xlLCBvdXRlck5vZGUg
KSB7CiAKICAgICAgICAgb3V0ZXJOb2RlID0gZmluZEhvbGVCcmlkZ2UoIGhvbGUsIG91dGVyTm9k
ZSApOwotCiAgICAgICAgIGlmICggb3V0ZXJOb2RlICkgewogCiAgICAgICAgICAgICB2YXIgYiA9
IHNwbGl0UG9seWdvbiggb3V0ZXJOb2RlLCBob2xlICk7Ci0KICAgICAgICAgICAgIGZpbHRlclBv
aW50cyggYiwgYi5uZXh0ICk7CiAKICAgICAgICAgfQpAQCAtMjc5ODksNyArMjkxOTcsNiBAQAog
ICAgIH0KIAogICAgIC8vIERhdmlkIEViZXJseSdzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJy
aWRnZSBiZXR3ZWVuIGhvbGUgYW5kIG91dGVyIHBvbHlnb24KLQogICAgIGZ1bmN0aW9uIGZpbmRI
b2xlQnJpZGdlKCBob2xlLCBvdXRlck5vZGUgKSB7CiAKICAgICAgICAgdmFyIHAgPSBvdXRlck5v
ZGUsCkBAIC0yODAwMCwxNyArMjkyMDcsMTQgQEAKIAogICAgICAgICAvLyBmaW5kIGEgc2VnbWVu
dCBpbnRlcnNlY3RlZCBieSBhIHJheSBmcm9tIHRoZSBob2xlJ3MgbGVmdG1vc3QgcG9pbnQgdG8g
dGhlIGxlZnQ7CiAgICAgICAgIC8vIHNlZ21lbnQncyBlbmRwb2ludCB3aXRoIGxlc3NlciB4IHdp
bGwgYmUgcG90ZW50aWFsIGNvbm5lY3Rpb24gcG9pbnQKLQogICAgICAgICBkbyB7CiAKICAgICAg
ICAgICAgIGlmICggaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55ICYmIHAubmV4dC55ICE9PSBw
LnkgKSB7CiAKICAgICAgICAgICAgICAgICB2YXIgeCA9IHAueCArICggaHkgLSBwLnkgKSAqICgg
cC5uZXh0LnggLSBwLnggKSAvICggcC5uZXh0LnkgLSBwLnkgKTsKLQogICAgICAgICAgICAgICAg
IGlmICggeCA8PSBoeCAmJiB4ID4gcXggKSB7CiAKICAgICAgICAgICAgICAgICAgICAgcXggPSB4
OwotCiAgICAgICAgICAgICAgICAgICAgIGlmICggeCA9PT0gaHggKSB7CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggaHkgPT09IHAueSApIHJldHVybiBwOwpAQCAtMjgwNDcsNyArMjky
NTEsNyBAQAogICAgICAgICB3aGlsZSAoIHAgIT09IHN0b3AgKSB7CiAKICAgICAgICAgICAgIGlm
ICggaHggPj0gcC54ICYmIHAueCA+PSBteCAmJiBoeCAhPT0gcC54ICYmCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKCBoeSA8IG15ID8gaHggOiBxeCwgaHksIG14
LCBteSwgaHkgPCBteSA/IHF4IDogaHgsIGh5LCBwLngsIHAueSApICkgeworICAgICAgICAgICAg
ICAgICAgICBwb2ludEluVHJpYW5nbGUoIGh5IDwgbXkgPyBoeCA6IHF4LCBoeSwgbXgsIG15LCBo
eSA8IG15ID8gcXggOiBoeCwgaHksIHAueCwgcC55ICkgKSB7CiAKICAgICAgICAgICAgICAgICB0
YW4gPSBNYXRoLmFicyggaHkgLSBwLnkgKSAvICggaHggLSBwLnggKTsgLy8gdGFuZ2VudGlhbAog
CkBAIC0yODA2OSwxMSArMjkyNzMsOSBAQAogICAgIH0KIAogICAgIC8vIGludGVybGluayBwb2x5
Z29uIG5vZGVzIGluIHotb3JkZXIKLQogICAgIGZ1bmN0aW9uIGluZGV4Q3VydmUoIHN0YXJ0LCBt
aW5YLCBtaW5ZLCBpbnZTaXplICkgewogCiAgICAgICAgIHZhciBwID0gc3RhcnQ7Ci0KICAgICAg
ICAgZG8gewogCiAgICAgICAgICAgICBpZiAoIHAueiA9PT0gbnVsbCApIHAueiA9IHpPcmRlcigg
cC54LCBwLnksIG1pblgsIG1pblksIGludlNpemUgKTsKQEAgLTI4MDkyLDEwICsyOTI5NCwxMCBA
QAogCiAgICAgLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0
aG0KICAgICAvLyBodHRwOi8vd3d3LmNoaWFyay5ncmVlbmVuZC5vcmcudWsvfnNndGF0aGFtL2Fs
Z29yaXRobXMvbGlzdHNvcnQuaHRtbAotCiAgICAgZnVuY3Rpb24gc29ydExpbmtlZCggbGlzdCAp
IHsKIAotICAgICAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNp
emUsIGluU2l6ZSA9IDE7CisgICAgICAgIHZhciBpLCBwLCBxLCBlLCB0YWlsLCBudW1NZXJnZXMs
IHBTaXplLCBxU2l6ZSwKKyAgICAgICAgICAgIGluU2l6ZSA9IDE7CiAKICAgICAgICAgZG8gewog
CkBAIC0yODEwOSw3ICsyOTMxMSw2IEBACiAgICAgICAgICAgICAgICAgbnVtTWVyZ2VzICsrOwog
ICAgICAgICAgICAgICAgIHEgPSBwOwogICAgICAgICAgICAgICAgIHBTaXplID0gMDsKLQogICAg
ICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgaW5TaXplOyBpICsrICkgewogCiAgICAgICAg
ICAgICAgICAgICAgIHBTaXplICsrOwpAQCAtMjgxNTgsMTEgKzI5MzU5LDkgQEAKICAgICB9CiAK
ICAgICAvLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBpbnZlcnNlIG9mIHRo
ZSBsb25nZXIgc2lkZSBvZiBkYXRhIGJib3gKLQogICAgIGZ1bmN0aW9uIHpPcmRlciggeCwgeSwg
bWluWCwgbWluWSwgaW52U2l6ZSApIHsKIAogICAgICAgICAvLyBjb29yZHMgYXJlIHRyYW5zZm9y
bWVkIGludG8gbm9uLW5lZ2F0aXZlIDE1LWJpdCBpbnRlZ2VyIHJhbmdlCi0KICAgICAgICAgeCA9
IDMyNzY3ICogKCB4IC0gbWluWCApICogaW52U2l6ZTsKICAgICAgICAgeSA9IDMyNzY3ICogKCB5
IC0gbWluWSApICogaW52U2l6ZTsKIApAQCAtMjgxODEsMTQgKzI5MzgwLDEzIEBACiAgICAgfQog
CiAgICAgLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZwotCiAgICAg
ZnVuY3Rpb24gZ2V0TGVmdG1vc3QoIHN0YXJ0ICkgewogCi0gICAgICAgIHZhciBwID0gc3RhcnQs
IGxlZnRtb3N0ID0gc3RhcnQ7Ci0KKyAgICAgICAgdmFyIHAgPSBzdGFydCwKKyAgICAgICAgICAg
IGxlZnRtb3N0ID0gc3RhcnQ7CiAgICAgICAgIGRvIHsKIAotICAgICAgICAgICAgaWYgKCBwLngg
PCBsZWZ0bW9zdC54ICkgbGVmdG1vc3QgPSBwOworICAgICAgICAgICAgaWYgKCBwLnggPCBsZWZ0
bW9zdC54IHx8ICggcC54ID09PSBsZWZ0bW9zdC54ICYmIHAueSA8IGxlZnRtb3N0LnkgKSApIGxl
ZnRtb3N0ID0gcDsKICAgICAgICAgICAgIHAgPSBwLm5leHQ7CiAKICAgICAgICAgfSB3aGlsZSAo
IHAgIT09IHN0YXJ0ICk7CkBAIC0yODE5OCwyNiArMjkzOTYsMjMgQEAKICAgICB9CiAKICAgICAv
LyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlCi0KICAgICBm
dW5jdGlvbiBwb2ludEluVHJpYW5nbGUoIGF4LCBheSwgYngsIGJ5LCBjeCwgY3ksIHB4LCBweSAp
IHsKIAogICAgICAgICByZXR1cm4gKCBjeCAtIHB4ICkgKiAoIGF5IC0gcHkgKSAtICggYXggLSBw
eCApICogKCBjeSAtIHB5ICkgPj0gMCAmJgotICAgICAgICAgKCBheCAtIHB4ICkgKiAoIGJ5IC0g
cHkgKSAtICggYnggLSBweCApICogKCBheSAtIHB5ICkgPj0gMCAmJgotICAgICAgICAgKCBieCAt
IHB4ICkgKiAoIGN5IC0gcHkgKSAtICggY3ggLSBweCApICogKCBieSAtIHB5ICkgPj0gMDsKKyAg
ICAgICAgICAgICAgICggYXggLSBweCApICogKCBieSAtIHB5ICkgLSAoIGJ4IC0gcHggKSAqICgg
YXkgLSBweSApID49IDAgJiYKKyAgICAgICAgICAgICAgICggYnggLSBweCApICogKCBjeSAtIHB5
ICkgLSAoIGN4IC0gcHggKSAqICggYnkgLSBweSApID49IDA7CiAKICAgICB9CiAKICAgICAvLyBj
aGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxp
ZXMgaW4gcG9seWdvbiBpbnRlcmlvcikKLQogICAgIGZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbCgg
YSwgYiApIHsKIAogICAgICAgICByZXR1cm4gYS5uZXh0LmkgIT09IGIuaSAmJiBhLnByZXYuaSAh
PT0gYi5pICYmICEgaW50ZXJzZWN0c1BvbHlnb24oIGEsIGIgKSAmJgotICAgICAgICAgICAgbG9j
YWxseUluc2lkZSggYSwgYiApICYmIGxvY2FsbHlJbnNpZGUoIGIsIGEgKSAmJiBtaWRkbGVJbnNp
ZGUoIGEsIGIgKTsKKyAgICAgICAgICAgICAgIGxvY2FsbHlJbnNpZGUoIGEsIGIgKSAmJiBsb2Nh
bGx5SW5zaWRlKCBiLCBhICkgJiYgbWlkZGxlSW5zaWRlKCBhLCBiICk7CiAKICAgICB9CiAKICAg
ICAvLyBzaWduZWQgYXJlYSBvZiBhIHRyaWFuZ2xlCi0KICAgICBmdW5jdGlvbiBhcmVhKCBwLCBx
LCByICkgewogCiAgICAgICAgIHJldHVybiAoIHEueSAtIHAueSApICogKCByLnggLSBxLnggKSAt
ICggcS54IC0gcC54ICkgKiAoIHIueSAtIHEueSApOwpAQCAtMjgyMjUsNyArMjk0MjAsNiBAQAog
ICAgIH0KIAogICAgIC8vIGNoZWNrIGlmIHR3byBwb2ludHMgYXJlIGVxdWFsCi0KICAgICBmdW5j
dGlvbiBlcXVhbHMoIHAxLCBwMiApIHsKIAogICAgICAgICByZXR1cm4gcDEueCA9PT0gcDIueCAm
JiBwMS55ID09PSBwMi55OwpAQCAtMjgyMzMsMzIgKzI5NDI3LDIzIEBACiAgICAgfQogCiAgICAg
Ly8gY2hlY2sgaWYgdHdvIHNlZ21lbnRzIGludGVyc2VjdAotCiAgICAgZnVuY3Rpb24gaW50ZXJz
ZWN0cyggcDEsIHExLCBwMiwgcTIgKSB7CiAKLSAgICAgICAgaWYgKCAoIGVxdWFscyggcDEsIHEx
ICkgJiYgZXF1YWxzKCBwMiwgcTIgKSApIHx8Ci0gICAgICAgICAgICAgICAgKCBlcXVhbHMoIHAx
LCBxMiApICYmIGVxdWFscyggcDIsIHExICkgKSApIHJldHVybiB0cnVlOwotCisgICAgICAgIGlm
ICggKCBlcXVhbHMoIHAxLCBwMiApICYmIGVxdWFscyggcTEsIHEyICkgKSB8fAorICAgICAgICAg
ICAgKCBlcXVhbHMoIHAxLCBxMiApICYmIGVxdWFscyggcDIsIHExICkgKSApIHJldHVybiB0cnVl
OwogICAgICAgICByZXR1cm4gYXJlYSggcDEsIHExLCBwMiApID4gMCAhPT0gYXJlYSggcDEsIHEx
LCBxMiApID4gMCAmJgotICAgICAgICAgICAgICAgICAgICAgYXJlYSggcDIsIHEyLCBwMSApID4g
MCAhPT0gYXJlYSggcDIsIHEyLCBxMSApID4gMDsKKyAgICAgICAgICAgICAgIGFyZWEoIHAyLCBx
MiwgcDEgKSA+IDAgIT09IGFyZWEoIHAyLCBxMiwgcTEgKSA+IDA7CiAKICAgICB9CiAKICAgICAv
LyBjaGVjayBpZiBhIHBvbHlnb24gZGlhZ29uYWwgaW50ZXJzZWN0cyBhbnkgcG9seWdvbiBzZWdt
ZW50cwotCiAgICAgZnVuY3Rpb24gaW50ZXJzZWN0c1BvbHlnb24oIGEsIGIgKSB7CiAKICAgICAg
ICAgdmFyIHAgPSBhOwotCiAgICAgICAgIGRvIHsKIAogICAgICAgICAgICAgaWYgKCBwLmkgIT09
IGEuaSAmJiBwLm5leHQuaSAhPT0gYS5pICYmIHAuaSAhPT0gYi5pICYmIHAubmV4dC5pICE9PSBi
LmkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3RzKCBwLCBwLm5leHQs
IGEsIGIgKSApIHsKLQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAg
ICB9Ci0KKyAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0cyggcCwgcC5uZXh0LCBhLCBiICkg
KSByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIHAgPSBwLm5leHQ7CiAKICAgICAgICAgfSB3aGls
ZSAoIHAgIT09IGEgKTsKQEAgLTI4MjY4LDcgKzI5NDUzLDYgQEAKICAgICB9CiAKICAgICAvLyBj
aGVjayBpZiBhIHBvbHlnb24gZGlhZ29uYWwgaXMgbG9jYWxseSBpbnNpZGUgdGhlIHBvbHlnb24K
LQogICAgIGZ1bmN0aW9uIGxvY2FsbHlJbnNpZGUoIGEsIGIgKSB7CiAKICAgICAgICAgcmV0dXJu
IGFyZWEoIGEucHJldiwgYSwgYS5uZXh0ICkgPCAwID8KQEAgLTI4Mjc4LDIzICsyOTQ2MiwxNyBA
QAogICAgIH0KIAogICAgIC8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29u
IGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvbgotCiAgICAgZnVuY3Rpb24gbWlkZGxlSW5z
aWRlKCBhLCBiICkgewogCiAgICAgICAgIHZhciBwID0gYSwKICAgICAgICAgICAgIGluc2lkZSA9
IGZhbHNlLAogICAgICAgICAgICAgcHggPSAoIGEueCArIGIueCApIC8gMiwKICAgICAgICAgICAg
IHB5ID0gKCBhLnkgKyBiLnkgKSAvIDI7Ci0KICAgICAgICAgZG8gewogCiAgICAgICAgICAgICBp
ZiAoICggKCBwLnkgPiBweSApICE9PSAoIHAubmV4dC55ID4gcHkgKSApICYmIHAubmV4dC55ICE9
PSBwLnkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHB4IDwgKCBwLm5leHQueCAt
IHAueCApICogKCBweSAtIHAueSApIC8gKCBwLm5leHQueSAtIHAueSApICsgcC54ICkgKSB7Ci0K
KyAgICAgICAgICAgICAgICAgICAgKCBweCA8ICggcC5uZXh0LnggLSBwLnggKSAqICggcHkgLSBw
LnkgKSAvICggcC5uZXh0LnkgLSBwLnkgKSArIHAueCApICkKICAgICAgICAgICAgICAgICBpbnNp
ZGUgPSAhIGluc2lkZTsKLQotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBwID0gcC5uZXh0
OwogCiAgICAgICAgIH0gd2hpbGUgKCBwICE9PSBhICk7CkBAIC0yODMwNSw3ICsyOTQ4Myw2IEBA
CiAKICAgICAvLyBsaW5rIHR3byBwb2x5Z29uIHZlcnRpY2VzIHdpdGggYSBicmlkZ2U7IGlmIHRo
ZSB2ZXJ0aWNlcyBiZWxvbmcgdG8gdGhlIHNhbWUgcmluZywgaXQgc3BsaXRzIHBvbHlnb24gaW50
byB0d287CiAgICAgLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3Ro
ZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nCi0KICAgICBmdW5j
dGlvbiBzcGxpdFBvbHlnb24oIGEsIGIgKSB7CiAKICAgICAgICAgdmFyIGEyID0gbmV3IE5vZGUo
IGEuaSwgYS54LCBhLnkgKSwKQEAgLTI4MzMwLDcgKzI5NTA3LDYgQEAKICAgICB9CiAKICAgICAv
LyBjcmVhdGUgYSBub2RlIGFuZCBvcHRpb25hbGx5IGxpbmsgaXQgd2l0aCBwcmV2aW91cyBvbmUg
KGluIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0KQotCiAgICAgZnVuY3Rpb24gaW5zZXJ0
Tm9kZSggaSwgeCwgeSwgbGFzdCApIHsKIAogICAgICAgICB2YXIgcCA9IG5ldyBOb2RlKCBpLCB4
LCB5ICk7CkBAIC0yODM2NSwxNCArMjk1NDEsMTQgQEAKIAogICAgIGZ1bmN0aW9uIE5vZGUoIGks
IHgsIHkgKSB7CiAKLSAgICAgICAgLy8gdmVydGljZSBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJh
eQorICAgICAgICAvLyB2ZXJ0ZXggaW5kZXggaW4gY29vcmRpbmF0ZXMgYXJyYXkKICAgICAgICAg
dGhpcy5pID0gaTsKIAogICAgICAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXMKICAgICAgICAgdGhp
cy54ID0geDsKICAgICAgICAgdGhpcy55ID0geTsKIAotICAgICAgICAvLyBwcmV2aW91cyBhbmQg
bmV4dCB2ZXJ0aWNlIG5vZGVzIGluIGEgcG9seWdvbiByaW5nCisgICAgICAgIC8vIHByZXZpb3Vz
IGFuZCBuZXh0IHZlcnRleCBub2RlcyBpbiBhIHBvbHlnb24gcmluZwogICAgICAgICB0aGlzLnBy
ZXYgPSBudWxsOwogICAgICAgICB0aGlzLm5leHQgPSBudWxsOwogCkBAIC0yODM5MSw3ICsyOTU2
Nyw2IEBACiAgICAgZnVuY3Rpb24gc2lnbmVkQXJlYSggZGF0YSwgc3RhcnQsIGVuZCwgZGltICkg
ewogCiAgICAgICAgIHZhciBzdW0gPSAwOwotCiAgICAgICAgIGZvciAoIHZhciBpID0gc3RhcnQs
IGogPSBlbmQgLSBkaW07IGkgPCBlbmQ7IGkgKz0gZGltICkgewogCiAgICAgICAgICAgICBzdW0g
Kz0gKCBkYXRhWyBqIF0gLSBkYXRhWyBpIF0gKSAqICggZGF0YVsgaSArIDEgXSArIGRhdGFbIGog
KyAxIF0gKTsKQEAgLTI4NTA5LDcgKzI5Njg0LDggQEAKICAgICAgKgogICAgICAqICBiZXZlbEVu
YWJsZWQ6IDxib29sPiwgLy8gdHVybiBvbiBiZXZlbAogICAgICAqICBiZXZlbFRoaWNrbmVzczog
PGZsb2F0PiwgLy8gaG93IGRlZXAgaW50byB0aGUgb3JpZ2luYWwgc2hhcGUgYmV2ZWwgZ29lcwot
ICAgICAqICBiZXZlbFNpemU6IDxmbG9hdD4sIC8vIGhvdyBmYXIgZnJvbSBzaGFwZSBvdXRsaW5l
IGlzIGJldmVsCisgICAgICogIGJldmVsU2l6ZTogPGZsb2F0PiwgLy8gaG93IGZhciBmcm9tIHNo
YXBlIG91dGxpbmUgKGluY2x1ZGluZyBiZXZlbE9mZnNldCkgaXMgYmV2ZWwKKyAgICAgKiAgYmV2
ZWxPZmZzZXQ6IDxmbG9hdD4sIC8vIGhvdyBmYXIgZnJvbSBzaGFwZSBvdXRsaW5lIGRvZXMgYmV2
ZWwgc3RhcnQKICAgICAgKiAgYmV2ZWxTZWdtZW50czogPGludD4sIC8vIG51bWJlciBvZiBiZXZl
bCBsYXllcnMKICAgICAgKgogICAgICAqICBleHRydWRlUGF0aDogPFRIUkVFLkN1cnZlPiAvLyBj
dXJ2ZSB0byBleHRydWRlIHNoYXBlIGFsb25nCkBAIC0yODYwMCw2ICsyOTc3Niw3IEBACiAgICAg
ICAgICAgICB2YXIgYmV2ZWxFbmFibGVkID0gb3B0aW9ucy5iZXZlbEVuYWJsZWQgIT09IHVuZGVm
aW5lZCA/IG9wdGlvbnMuYmV2ZWxFbmFibGVkIDogdHJ1ZTsKICAgICAgICAgICAgIHZhciBiZXZl
bFRoaWNrbmVzcyA9IG9wdGlvbnMuYmV2ZWxUaGlja25lc3MgIT09IHVuZGVmaW5lZCA/IG9wdGlv
bnMuYmV2ZWxUaGlja25lc3MgOiA2OwogICAgICAgICAgICAgdmFyIGJldmVsU2l6ZSA9IG9wdGlv
bnMuYmV2ZWxTaXplICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmJldmVsU2l6ZSA6IGJldmVsVGhp
Y2tuZXNzIC0gMjsKKyAgICAgICAgICAgIHZhciBiZXZlbE9mZnNldCA9IG9wdGlvbnMuYmV2ZWxP
ZmZzZXQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYmV2ZWxPZmZzZXQgOiAwOwogICAgICAgICAg
ICAgdmFyIGJldmVsU2VnbWVudHMgPSBvcHRpb25zLmJldmVsU2VnbWVudHMgIT09IHVuZGVmaW5l
ZCA/IG9wdGlvbnMuYmV2ZWxTZWdtZW50cyA6IDM7CiAKICAgICAgICAgICAgIHZhciBleHRydWRl
UGF0aCA9IG9wdGlvbnMuZXh0cnVkZVBhdGg7CkBAIC0yODY0OCw2ICsyOTgyNSw3IEBACiAgICAg
ICAgICAgICAgICAgYmV2ZWxTZWdtZW50cyA9IDA7CiAgICAgICAgICAgICAgICAgYmV2ZWxUaGlj
a25lc3MgPSAwOwogICAgICAgICAgICAgICAgIGJldmVsU2l6ZSA9IDA7CisgICAgICAgICAgICAg
ICAgYmV2ZWxPZmZzZXQgPSAwOwogCiAgICAgICAgICAgICB9CiAKQEAgLTI4ODg0LDcgKzMwMDYy
LDcgQEAKIAogICAgICAgICAgICAgICAgIHQgPSBiIC8gYmV2ZWxTZWdtZW50czsKICAgICAgICAg
ICAgICAgICB6ID0gYmV2ZWxUaGlja25lc3MgKiBNYXRoLmNvcyggdCAqIE1hdGguUEkgLyAyICk7
Ci0gICAgICAgICAgICAgICAgYnMgPSBiZXZlbFNpemUgKiBNYXRoLnNpbiggdCAqIE1hdGguUEkg
LyAyICk7CisgICAgICAgICAgICAgICAgYnMgPSBiZXZlbFNpemUgKiBNYXRoLnNpbiggdCAqIE1h
dGguUEkgLyAyICkgKyBiZXZlbE9mZnNldDsKIAogICAgICAgICAgICAgICAgIC8vIGNvbnRyYWN0
IHNoYXBlCiAKQEAgLTI4OTE1LDcgKzMwMDkzLDcgQEAKIAogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBicyA9IGJldmVsU2l6ZTsKKyAgICAgICAgICAgIGJzID0gYmV2ZWxTaXplICsgYmV2
ZWxPZmZzZXQ7CiAKICAgICAgICAgICAgIC8vIEJhY2sgZmFjaW5nIHZlcnRpY2VzCiAKQEAgLTI4
OTgyLDcgKzMwMTYwLDcgQEAKIAogICAgICAgICAgICAgICAgIHQgPSBiIC8gYmV2ZWxTZWdtZW50
czsKICAgICAgICAgICAgICAgICB6ID0gYmV2ZWxUaGlja25lc3MgKiBNYXRoLmNvcyggdCAqIE1h
dGguUEkgLyAyICk7Ci0gICAgICAgICAgICAgICAgYnMgPSBiZXZlbFNpemUgKiBNYXRoLnNpbigg
dCAqIE1hdGguUEkgLyAyICk7CisgICAgICAgICAgICAgICAgYnMgPSBiZXZlbFNpemUgKiBNYXRo
LnNpbiggdCAqIE1hdGguUEkgLyAyICkgKyBiZXZlbE9mZnNldDsKIAogICAgICAgICAgICAgICAg
IC8vIGNvbnRyYWN0IHNoYXBlCiAKQEAgLTI5MzM0LDcgKzMwNTEyLDggQEAKICAgICAgKgogICAg
ICAqICBiZXZlbEVuYWJsZWQ6IDxib29sPiwgLy8gdHVybiBvbiBiZXZlbAogICAgICAqICBiZXZl
bFRoaWNrbmVzczogPGZsb2F0PiwgLy8gaG93IGRlZXAgaW50byB0ZXh0IGJldmVsIGdvZXMKLSAg
ICAgKiAgYmV2ZWxTaXplOiA8ZmxvYXQ+IC8vIGhvdyBmYXIgZnJvbSB0ZXh0IG91dGxpbmUgaXMg
YmV2ZWwKKyAgICAgKiAgYmV2ZWxTaXplOiA8ZmxvYXQ+LCAvLyBob3cgZmFyIGZyb20gdGV4dCBv
dXRsaW5lIChpbmNsdWRpbmcgYmV2ZWxPZmZzZXQpIGlzIGJldmVsCisgICAgICogIGJldmVsT2Zm
c2V0OiA8ZmxvYXQ+IC8vIGhvdyBmYXIgZnJvbSB0ZXh0IG91dGxpbmUgZG9lcyBiZXZlbCBzdGFy
dAogICAgICAqIH0KICAgICAgKi8KIApAQCAtMjk0NTYsNyArMzA2MzUsNyBAQAogICAgICAgICB0
aGV0YVN0YXJ0ID0gdGhldGFTdGFydCAhPT0gdW5kZWZpbmVkID8gdGhldGFTdGFydCA6IDA7CiAg
ICAgICAgIHRoZXRhTGVuZ3RoID0gdGhldGFMZW5ndGggIT09IHVuZGVmaW5lZCA/IHRoZXRhTGVu
Z3RoIDogTWF0aC5QSTsKIAotICAgICAgICB2YXIgdGhldGFFbmQgPSB0aGV0YVN0YXJ0ICsgdGhl
dGFMZW5ndGg7CisgICAgICAgIHZhciB0aGV0YUVuZCA9IE1hdGgubWluKCB0aGV0YVN0YXJ0ICsg
dGhldGFMZW5ndGgsIE1hdGguUEkgKTsKIAogICAgICAgICB2YXIgaXgsIGl5OwogCkBAIC0yOTQ4
MSw2ICszMDY2MCwyMCBAQAogCiAgICAgICAgICAgICB2YXIgdiA9IGl5IC8gaGVpZ2h0U2VnbWVu
dHM7CiAKKyAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgdGhlIHBvbGVzCisKKyAgICAg
ICAgICAgIHZhciB1T2Zmc2V0ID0gMDsKKworICAgICAgICAgICAgaWYgKCBpeSA9PSAwICYmIHRo
ZXRhU3RhcnQgPT0gMCApIHsKKworICAgICAgICAgICAgICAgIHVPZmZzZXQgPSAwLjUgLyB3aWR0
aFNlZ21lbnRzOworCisgICAgICAgICAgICB9IGVsc2UgaWYgKCBpeSA9PSBoZWlnaHRTZWdtZW50
cyAmJiB0aGV0YUVuZCA9PSBNYXRoLlBJICkgeworCisgICAgICAgICAgICAgICAgdU9mZnNldCA9
IC0gMC41IC8gd2lkdGhTZWdtZW50czsKKworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBm
b3IgKCBpeCA9IDA7IGl4IDw9IHdpZHRoU2VnbWVudHM7IGl4ICsrICkgewogCiAgICAgICAgICAg
ICAgICAgdmFyIHUgPSBpeCAvIHdpZHRoU2VnbWVudHM7CkBAIC0yOTQ5NSwxMiArMzA2ODgsMTIg
QEAKIAogICAgICAgICAgICAgICAgIC8vIG5vcm1hbAogCi0gICAgICAgICAgICAgICAgbm9ybWFs
LnNldCggdmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueiApLm5vcm1hbGl6ZSgpOworICAgICAg
ICAgICAgICAgIG5vcm1hbC5jb3B5KCB2ZXJ0ZXggKS5ub3JtYWxpemUoKTsKICAgICAgICAgICAg
ICAgICBub3JtYWxzLnB1c2goIG5vcm1hbC54LCBub3JtYWwueSwgbm9ybWFsLnogKTsKIAogICAg
ICAgICAgICAgICAgIC8vIHV2CiAKLSAgICAgICAgICAgICAgICB1dnMucHVzaCggdSwgMSAtIHYg
KTsKKyAgICAgICAgICAgICAgICB1dnMucHVzaCggdSArIHVPZmZzZXQsIDEgLSB2ICk7CiAKICAg
ICAgICAgICAgICAgICB2ZXJ0aWNlc1Jvdy5wdXNoKCBpbmRleCArKyApOwogCkBAIC0yOTY4NSw3
ICszMDg3OCw2IEBACiAgICAgUmluZ0J1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3Rv
ciA9IFJpbmdCdWZmZXJHZW9tZXRyeTsKIAogICAgIC8qKgotICAgICAqIEBhdXRob3IgYXN0cm9k
dWQgLyBodHRwOi8vYXN0cm9kdWQuaXNncmVhdC5vcmcvCiAgICAgICogQGF1dGhvciB6ejg1IC8g
aHR0cHM6Ly9naXRodWIuY29tL3p6ODUKICAgICAgKiBAYXV0aG9yIGJob3VzdG9uIC8gaHR0cDov
L2NsYXJhLmlvCiAgICAgICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29tL011
Z2VuODcKQEAgLTI5OTgwLDE3ICszMTE3MiwxNSBAQAogCiAgICAgICAgICAgICAgICAgc2hhcGVW
ZXJ0aWNlcyA9IHNoYXBlVmVydGljZXMucmV2ZXJzZSgpOwogCi0gICAgICAgICAgICAgICAgLy8g
YWxzbyBjaGVjayBpZiBob2xlcyBhcmUgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbgotCi0gICAg
ICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBzaGFwZUhvbGVzLmxlbmd0aDsgaSA8IGw7IGkg
KysgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgc2hhcGVIb2xlID0g
c2hhcGVIb2xlc1sgaSBdOworICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBzaGFwZUhvbGVz
Lmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBTaGFw
ZVV0aWxzLmlzQ2xvY2tXaXNlKCBzaGFwZUhvbGUgKSA9PT0gdHJ1ZSApIHsKKyAgICAgICAgICAg
ICAgICBzaGFwZUhvbGUgPSBzaGFwZUhvbGVzWyBpIF07CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNoYXBlSG9sZXNbIGkgXSA9IHNoYXBlSG9sZS5yZXZlcnNlKCk7CisgICAgICAgICAgICAg
ICAgaWYgKCBTaGFwZVV0aWxzLmlzQ2xvY2tXaXNlKCBzaGFwZUhvbGUgKSA9PT0gdHJ1ZSApIHsK
IAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHNoYXBlSG9sZXNb
IGkgXSA9IHNoYXBlSG9sZS5yZXZlcnNlKCk7CiAKICAgICAgICAgICAgICAgICB9CiAKQEAgLTMw
OTMyLDYgKzMyMTIyLDggQEAKICAgICAgKgogICAgICAqIHBhcmFtZXRlcnMgPSB7CiAgICAgICog
IHJlZmxlY3Rpdml0eTogPGZsb2F0PgorICAgICAqICBjbGVhckNvYXQ6IDxmbG9hdD4KKyAgICAg
KiAgY2xlYXJDb2F0Um91Z2huZXNzOiA8ZmxvYXQ+CiAgICAgICogfQogICAgICAqLwogCkBAIC0z
MTM4Nyw2ICszMjU3OSwxMTEgQEAKIAogICAgIH07CiAKKyAgICAvKioKKyAgICAgKiBAYXV0aG9y
IFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExhbmdsZXkKKyAgICAgKgorICAg
ICAqIHBhcmFtZXRlcnMgPSB7CisgICAgICogIGNvbG9yOiA8aGV4PiwKKyAgICAgKiAgb3BhY2l0
eTogPGZsb2F0PiwKKyAgICAgKgorICAgICAqICBtYXRjYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8
SW1hZ2U+ICksCisgICAgICoKKyAgICAgKiAgbWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdl
PiApLAorICAgICAqCisgICAgICogIGJ1bXBNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+
ICksCisgICAgICogIGJ1bXBTY2FsZTogPGZsb2F0PiwKKyAgICAgKgorICAgICAqICBub3JtYWxN
YXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCisgICAgICogIG5vcm1hbE1hcFR5cGU6
IFRIUkVFLlRhbmdlbnRTcGFjZU5vcm1hbE1hcCwKKyAgICAgKiAgbm9ybWFsU2NhbGU6IDxWZWN0
b3IyPiwKKyAgICAgKgorICAgICAqICBkaXNwbGFjZW1lbnRNYXA6IG5ldyBUSFJFRS5UZXh0dXJl
KCA8SW1hZ2U+ICksCisgICAgICogIGRpc3BsYWNlbWVudFNjYWxlOiA8ZmxvYXQ+LAorICAgICAq
ICBkaXNwbGFjZW1lbnRCaWFzOiA8ZmxvYXQ+LAorICAgICAqCisgICAgICogIGFscGhhTWFwOiBu
ZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLAorICAgICAqCisgICAgICogIHNraW5uaW5nOiA8
Ym9vbD4sCisgICAgICogIG1vcnBoVGFyZ2V0czogPGJvb2w+LAorICAgICAqICBtb3JwaE5vcm1h
bHM6IDxib29sPgorICAgICAqIH0KKyAgICAgKi8KKworICAgIGZ1bmN0aW9uIE1lc2hNYXRjYXBN
YXRlcmlhbCggcGFyYW1ldGVycyApIHsKKworICAgICAgICBNYXRlcmlhbC5jYWxsKCB0aGlzICk7
CisKKyAgICAgICAgdGhpcy5kZWZpbmVzID0geyAnTUFUQ0FQJzogJycgfTsKKworICAgICAgICB0
aGlzLnR5cGUgPSAnTWVzaE1hdGNhcE1hdGVyaWFsJzsKKworICAgICAgICB0aGlzLmNvbG9yID0g
bmV3IENvbG9yKCAweGZmZmZmZiApOyAvLyBkaWZmdXNlCisKKyAgICAgICAgdGhpcy5tYXRjYXAg
PSBudWxsOworCisgICAgICAgIHRoaXMubWFwID0gbnVsbDsKKworICAgICAgICB0aGlzLmJ1bXBN
YXAgPSBudWxsOworICAgICAgICB0aGlzLmJ1bXBTY2FsZSA9IDE7CisKKyAgICAgICAgdGhpcy5u
b3JtYWxNYXAgPSBudWxsOworICAgICAgICB0aGlzLm5vcm1hbE1hcFR5cGUgPSBUYW5nZW50U3Bh
Y2VOb3JtYWxNYXA7CisgICAgICAgIHRoaXMubm9ybWFsU2NhbGUgPSBuZXcgVmVjdG9yMiggMSwg
MSApOworCisgICAgICAgIHRoaXMuZGlzcGxhY2VtZW50TWFwID0gbnVsbDsKKyAgICAgICAgdGhp
cy5kaXNwbGFjZW1lbnRTY2FsZSA9IDE7CisgICAgICAgIHRoaXMuZGlzcGxhY2VtZW50QmlhcyA9
IDA7CisKKyAgICAgICAgdGhpcy5hbHBoYU1hcCA9IG51bGw7CisKKyAgICAgICAgdGhpcy5za2lu
bmluZyA9IGZhbHNlOworICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0cyA9IGZhbHNlOworICAgICAg
ICB0aGlzLm1vcnBoTm9ybWFscyA9IGZhbHNlOworCisgICAgICAgIHRoaXMubGlnaHRzID0gZmFs
c2U7CisKKyAgICAgICAgdGhpcy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMgKTsKKworICAgIH0KKwor
ICAgIE1lc2hNYXRjYXBNYXRlcmlhbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNYXRlcmlh
bC5wcm90b3R5cGUgKTsKKyAgICBNZXNoTWF0Y2FwTWF0ZXJpYWwucHJvdG90eXBlLmNvbnN0cnVj
dG9yID0gTWVzaE1hdGNhcE1hdGVyaWFsOworCisgICAgTWVzaE1hdGNhcE1hdGVyaWFsLnByb3Rv
dHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbCA9IHRydWU7CisKKyAgICBNZXNoTWF0Y2FwTWF0ZXJp
YWwucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoIHNvdXJjZSApIHsKKworICAgICAgICBNYXRl
cmlhbC5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKKworICAgICAgICB0aGlz
LmRlZmluZXMgPSB7ICdNQVRDQVAnOiAnJyB9OworCisgICAgICAgIHRoaXMuY29sb3IuY29weSgg
c291cmNlLmNvbG9yICk7CisKKyAgICAgICAgdGhpcy5tYXRjYXAgPSBzb3VyY2UubWF0Y2FwOwor
CisgICAgICAgIHRoaXMubWFwID0gc291cmNlLm1hcDsKKworICAgICAgICB0aGlzLmJ1bXBNYXAg
PSBzb3VyY2UuYnVtcE1hcDsKKyAgICAgICAgdGhpcy5idW1wU2NhbGUgPSBzb3VyY2UuYnVtcFNj
YWxlOworCisgICAgICAgIHRoaXMubm9ybWFsTWFwID0gc291cmNlLm5vcm1hbE1hcDsKKyAgICAg
ICAgdGhpcy5ub3JtYWxNYXBUeXBlID0gc291cmNlLm5vcm1hbE1hcFR5cGU7CisgICAgICAgIHRo
aXMubm9ybWFsU2NhbGUuY29weSggc291cmNlLm5vcm1hbFNjYWxlICk7CisKKyAgICAgICAgdGhp
cy5kaXNwbGFjZW1lbnRNYXAgPSBzb3VyY2UuZGlzcGxhY2VtZW50TWFwOworICAgICAgICB0aGlz
LmRpc3BsYWNlbWVudFNjYWxlID0gc291cmNlLmRpc3BsYWNlbWVudFNjYWxlOworICAgICAgICB0
aGlzLmRpc3BsYWNlbWVudEJpYXMgPSBzb3VyY2UuZGlzcGxhY2VtZW50QmlhczsKKworICAgICAg
ICB0aGlzLmFscGhhTWFwID0gc291cmNlLmFscGhhTWFwOworCisgICAgICAgIHRoaXMuc2tpbm5p
bmcgPSBzb3VyY2Uuc2tpbm5pbmc7CisgICAgICAgIHRoaXMubW9ycGhUYXJnZXRzID0gc291cmNl
Lm1vcnBoVGFyZ2V0czsKKyAgICAgICAgdGhpcy5tb3JwaE5vcm1hbHMgPSBzb3VyY2UubW9ycGhO
b3JtYWxzOworCisgICAgICAgIHJldHVybiB0aGlzOworCisgICAgfTsKKwogICAgIC8qKgogICAg
ICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCiAgICAgICoK
QEAgLTMxNDUwLDI2MTMgKzMyNzQ3LDI2MTggQEAKICAgICAgICAgTWVzaERlcHRoTWF0ZXJpYWw6
IE1lc2hEZXB0aE1hdGVyaWFsLAogICAgICAgICBNZXNoRGlzdGFuY2VNYXRlcmlhbDogTWVzaERp
c3RhbmNlTWF0ZXJpYWwsCiAgICAgICAgIE1lc2hCYXNpY01hdGVyaWFsOiBNZXNoQmFzaWNNYXRl
cmlhbCwKKyAgICAgICAgTWVzaE1hdGNhcE1hdGVyaWFsOiBNZXNoTWF0Y2FwTWF0ZXJpYWwsCiAg
ICAgICAgIExpbmVEYXNoZWRNYXRlcmlhbDogTGluZURhc2hlZE1hdGVyaWFsLAogICAgICAgICBM
aW5lQmFzaWNNYXRlcmlhbDogTGluZUJhc2ljTWF0ZXJpYWwsCiAgICAgICAgIE1hdGVyaWFsOiBN
YXRlcmlhbAogICAgIH0pOwogCiAgICAgLyoqCi0gICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRw
Oi8vbXJkb29iLmNvbS8KKyAgICAgKiBAYXV0aG9yIHRzY2h3CisgICAgICogQGF1dGhvciBCZW4g
SG91c3RvbiAvIGh0dHA6Ly9jbGFyYS5pby8KKyAgICAgKiBAYXV0aG9yIERhdmlkIFNhcm5vIC8g
aHR0cDovL2xpZ2h0aGF1cy51cy8KICAgICAgKi8KIAotICAgIHZhciBDYWNoZSA9IHsKLQotICAg
ICAgICBlbmFibGVkOiBmYWxzZSwKKyAgICB2YXIgQW5pbWF0aW9uVXRpbHMgPSB7CiAKLSAgICAg
ICAgZmlsZXM6IHt9LAorICAgICAgICAvLyBzYW1lIGFzIEFycmF5LnByb3RvdHlwZS5zbGljZSwg
YnV0IGFsc28gd29ya3Mgb24gdHlwZWQgYXJyYXlzCisgICAgICAgIGFycmF5U2xpY2U6IGZ1bmN0
aW9uICggYXJyYXksIGZyb20sIHRvICkgewogCi0gICAgICAgIGFkZDogZnVuY3Rpb24gKCBrZXks
IGZpbGUgKSB7CisgICAgICAgICAgICBpZiAoIEFuaW1hdGlvblV0aWxzLmlzVHlwZWRBcnJheSgg
YXJyYXkgKSApIHsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLmVuYWJsZWQgPT09IGZhbHNlICkg
cmV0dXJuOworICAgICAgICAgICAgICAgIC8vIGluIGlvczkgYXJyYXkuc3ViYXJyYXkoZnJvbSwg
dW5kZWZpbmVkKSB3aWxsIHJldHVybiBlbXB0eSBhcnJheQorICAgICAgICAgICAgICAgIC8vIGJ1
dCBhcnJheS5zdWJhcnJheShmcm9tKSBvciBhcnJheS5zdWJhcnJheShmcm9tLCBsZW4pIGlzIGNv
cnJlY3QKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGFycmF5LmNvbnN0cnVjdG9yKCBhcnJh
eS5zdWJhcnJheSggZnJvbSwgdG8gIT09IHVuZGVmaW5lZCA/IHRvIDogYXJyYXkubGVuZ3RoICkg
KTsKIAotICAgICAgICAgICAgLy8gY29uc29sZS5sb2coICdUSFJFRS5DYWNoZScsICdBZGRpbmcg
a2V5OicsIGtleSApOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLmZpbGVzWyBr
ZXkgXSA9IGZpbGU7CisgICAgICAgICAgICByZXR1cm4gYXJyYXkuc2xpY2UoIGZyb20sIHRvICk7
CiAKICAgICAgICAgfSwKIAotICAgICAgICBnZXQ6IGZ1bmN0aW9uICgga2V5ICkgeworICAgICAg
ICAvLyBjb252ZXJ0cyBhbiBhcnJheSB0byBhIHNwZWNpZmljIHR5cGUKKyAgICAgICAgY29udmVy
dEFycmF5OiBmdW5jdGlvbiAoIGFycmF5LCB0eXBlLCBmb3JjZUNsb25lICkgewogCi0gICAgICAg
ICAgICBpZiAoIHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UgKSByZXR1cm47CisgICAgICAgICAgICBp
ZiAoICEgYXJyYXkgfHwgLy8gbGV0ICd1bmRlZmluZWQnIGFuZCAnbnVsbCcgcGFzcworICAgICAg
ICAgICAgICAgICEgZm9yY2VDbG9uZSAmJiBhcnJheS5jb25zdHJ1Y3RvciA9PT0gdHlwZSApIHJl
dHVybiBhcnJheTsKIAotICAgICAgICAgICAgLy8gY29uc29sZS5sb2coICdUSFJFRS5DYWNoZScs
ICdDaGVja2luZyBrZXk6Jywga2V5ICk7CisgICAgICAgICAgICBpZiAoIHR5cGVvZiB0eXBlLkJZ
VEVTX1BFUl9FTEVNRU5UID09PSAnbnVtYmVyJyApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZmlsZXNbIGtleSBdOworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdHlwZSggYXJyYXkg
KTsgLy8gY3JlYXRlIHR5cGVkIGFycmF5CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBhcnJheSApOyAvLyBjcmVhdGUgQXJy
YXkKIAogICAgICAgICB9LAogCi0gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gKCBrZXkgKSB7Cisg
ICAgICAgIGlzVHlwZWRBcnJheTogZnVuY3Rpb24gKCBvYmplY3QgKSB7CiAKLSAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLmZpbGVzWyBrZXkgXTsKKyAgICAgICAgICAgIHJldHVybiBBcnJheUJ1ZmZl
ci5pc1ZpZXcoIG9iamVjdCApICYmCisgICAgICAgICAgICAgICAgISAoIG9iamVjdCBpbnN0YW5j
ZW9mIERhdGFWaWV3ICk7CiAKICAgICAgICAgfSwKIAotICAgICAgICBjbGVhcjogZnVuY3Rpb24g
KCkgeworICAgICAgICAvLyByZXR1cm5zIGFuIGFycmF5IGJ5IHdoaWNoIHRpbWVzIGFuZCB2YWx1
ZXMgY2FuIGJlIHNvcnRlZAorICAgICAgICBnZXRLZXlmcmFtZU9yZGVyOiBmdW5jdGlvbiAoIHRp
bWVzICkgewogCi0gICAgICAgICAgICB0aGlzLmZpbGVzID0ge307CisgICAgICAgICAgICBmdW5j
dGlvbiBjb21wYXJlVGltZSggaSwgaiApIHsKIAotICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRpbWVzWyBpIF0gLSB0aW1lc1sgaiBdOwogCi0gICAgfTsKKyAgICAgICAgICAgIH0K
IAotICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0g
ICAgICovCisgICAgICAgICAgICB2YXIgbiA9IHRpbWVzLmxlbmd0aDsKKyAgICAgICAgICAgIHZh
ciByZXN1bHQgPSBuZXcgQXJyYXkoIG4gKTsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsg
aSAhPT0gbjsgKysgaSApIHJlc3VsdFsgaSBdID0gaTsKIAotICAgIGZ1bmN0aW9uIExvYWRpbmdN
YW5hZ2VyKCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7CisgICAgICAgICAgICByZXN1
bHQuc29ydCggY29tcGFyZVRpbWUgKTsKIAotICAgICAgICB2YXIgc2NvcGUgPSB0aGlzOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgICAgICB2YXIgaXNMb2FkaW5nID0gZmFsc2U7
Ci0gICAgICAgIHZhciBpdGVtc0xvYWRlZCA9IDA7Ci0gICAgICAgIHZhciBpdGVtc1RvdGFsID0g
MDsKLSAgICAgICAgdmFyIHVybE1vZGlmaWVyID0gdW5kZWZpbmVkOworICAgICAgICB9LAogCi0g
ICAgICAgIHRoaXMub25TdGFydCA9IHVuZGVmaW5lZDsKLSAgICAgICAgdGhpcy5vbkxvYWQgPSBv
bkxvYWQ7Ci0gICAgICAgIHRoaXMub25Qcm9ncmVzcyA9IG9uUHJvZ3Jlc3M7Ci0gICAgICAgIHRo
aXMub25FcnJvciA9IG9uRXJyb3I7CisgICAgICAgIC8vIHVzZXMgdGhlIGFycmF5IHByZXZpb3Vz
bHkgcmV0dXJuZWQgYnkgJ2dldEtleWZyYW1lT3JkZXInIHRvIHNvcnQgZGF0YQorICAgICAgICBz
b3J0ZWRBcnJheTogZnVuY3Rpb24gKCB2YWx1ZXMsIHN0cmlkZSwgb3JkZXIgKSB7CiAKLSAgICAg
ICAgdGhpcy5pdGVtU3RhcnQgPSBmdW5jdGlvbiAoIHVybCApIHsKKyAgICAgICAgICAgIHZhciBu
VmFsdWVzID0gdmFsdWVzLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgdmFs
dWVzLmNvbnN0cnVjdG9yKCBuVmFsdWVzICk7CiAKLSAgICAgICAgICAgIGl0ZW1zVG90YWwgKys7
CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGRzdE9mZnNldCA9IDA7IGRzdE9mZnNldCAh
PT0gblZhbHVlczsgKysgaSApIHsKIAotICAgICAgICAgICAgaWYgKCBpc0xvYWRpbmcgPT09IGZh
bHNlICkgeworICAgICAgICAgICAgICAgIHZhciBzcmNPZmZzZXQgPSBvcmRlclsgaSBdICogc3Ry
aWRlOwogCi0gICAgICAgICAgICAgICAgaWYgKCBzY29wZS5vblN0YXJ0ICE9PSB1bmRlZmluZWQg
KSB7CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGogPSAwOyBqICE9PSBzdHJpZGU7ICsrIGog
KSB7CiAKLSAgICAgICAgICAgICAgICAgICAgc2NvcGUub25TdGFydCggdXJsLCBpdGVtc0xvYWRl
ZCwgaXRlbXNUb3RhbCApOworICAgICAgICAgICAgICAgICAgICByZXN1bHRbIGRzdE9mZnNldCAr
KyBdID0gdmFsdWVzWyBzcmNPZmZzZXQgKyBqIF07CiAKICAgICAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaXNMb2FkaW5nID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAKLSAgICAgICAgfTsKKyAgICAgICAgfSwKIAotICAgICAgICB0aGlz
Lml0ZW1FbmQgPSBmdW5jdGlvbiAoIHVybCApIHsKKyAgICAgICAgLy8gZnVuY3Rpb24gZm9yIHBh
cnNpbmcgQU9TIGtleWZyYW1lIGZvcm1hdHMKKyAgICAgICAgZmxhdHRlbkpTT046IGZ1bmN0aW9u
ICgganNvbktleXMsIHRpbWVzLCB2YWx1ZXMsIHZhbHVlUHJvcGVydHlOYW1lICkgewogCi0gICAg
ICAgICAgICBpdGVtc0xvYWRlZCArKzsKKyAgICAgICAgICAgIHZhciBpID0gMSwga2V5ID0ganNv
bktleXNbIDAgXTsKIAotICAgICAgICAgICAgaWYgKCBzY29wZS5vblByb2dyZXNzICE9PSB1bmRl
ZmluZWQgKSB7CisgICAgICAgICAgICB3aGlsZSAoIGtleSAhPT0gdW5kZWZpbmVkICYmIGtleVsg
dmFsdWVQcm9wZXJ0eU5hbWUgXSA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAg
c2NvcGUub25Qcm9ncmVzcyggdXJsLCBpdGVtc0xvYWRlZCwgaXRlbXNUb3RhbCApOworICAgICAg
ICAgICAgICAgIGtleSA9IGpzb25LZXlzWyBpICsrIF07CiAKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgaWYgKCBpdGVtc0xvYWRlZCA9PT0gaXRlbXNUb3RhbCApIHsKKyAgICAgICAgICAg
IGlmICgga2V5ID09PSB1bmRlZmluZWQgKSByZXR1cm47IC8vIG5vIGRhdGEKIAotICAgICAgICAg
ICAgICAgIGlzTG9hZGluZyA9IGZhbHNlOworICAgICAgICAgICAgdmFyIHZhbHVlID0ga2V5WyB2
YWx1ZVByb3BlcnR5TmFtZSBdOworICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVk
ICkgcmV0dXJuOyAvLyBubyBkYXRhCiAKLSAgICAgICAgICAgICAgICBpZiAoIHNjb3BlLm9uTG9h
ZCAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgaWYgKCBBcnJheS5pc0FycmF5KCB2YWx1
ZSApICkgewogCi0gICAgICAgICAgICAgICAgICAgIHNjb3BlLm9uTG9hZCgpOworICAgICAgICAg
ICAgICAgIGRvIHsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSBrZXlbIHZhbHVlUHJvcGVydHlOYW1lIF07CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lcy5wdXNoKCBrZXkudGltZSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWVzLnB1c2guYXBwbHkoIHZhbHVlcywgdmFsdWUgKTsgLy8gcHVz
aCBhbGwgZWxlbWVudHMKIAotICAgICAgICB0aGlzLml0ZW1FcnJvciA9IGZ1bmN0aW9uICggdXJs
ICkgeworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggc2NvcGUub25F
cnJvciAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICBrZXkgPSBqc29uS2V5
c1sgaSArKyBdOwogCi0gICAgICAgICAgICAgICAgc2NvcGUub25FcnJvciggdXJsICk7CisgICAg
ICAgICAgICAgICAgfSB3aGlsZSAoIGtleSAhPT0gdW5kZWZpbmVkICk7CiAKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHZhbHVlLnRvQXJyYXkgIT09IHVuZGVmaW5lZCAp
IHsKIAotICAgICAgICB9OworICAgICAgICAgICAgICAgIC8vIC4uLmFzc3VtZSBUSFJFRS5NYXRo
LWlzaAogCi0gICAgICAgIHRoaXMucmVzb2x2ZVVSTCA9IGZ1bmN0aW9uICggdXJsICkgeworICAg
ICAgICAgICAgICAgIGRvIHsKIAotICAgICAgICAgICAgaWYgKCB1cmxNb2RpZmllciApIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWUgPSBrZXlbIHZhbHVlUHJvcGVydHlOYW1lIF07CiAKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdXJsTW9kaWZpZXIoIHVybCApOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRpbWVzLnB1c2goIGtleS50aW1lICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZS50b0FycmF5KCB2YWx1ZXMsIHZhbHVlcy5sZW5ndGggKTsKIAotICAg
ICAgICAgICAgcmV0dXJuIHVybDsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIH07
CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGpzb25LZXlzWyBpICsrIF07CiAKLSAgICAgICAg
dGhpcy5zZXRVUkxNb2RpZmllciA9IGZ1bmN0aW9uICggdHJhbnNmb3JtICkgeworICAgICAgICAg
ICAgICAgIH0gd2hpbGUgKCBrZXkgIT09IHVuZGVmaW5lZCApOwogCi0gICAgICAgICAgICB1cmxN
b2RpZmllciA9IHRyYW5zZm9ybTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAg
ICAgfSBlbHNlIHsKIAotICAgICAgICB9OworICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBw
dXNoIGFzLWlzCiAKLSAgICB9CisgICAgICAgICAgICAgICAgZG8gewogCi0gICAgdmFyIERlZmF1
bHRMb2FkaW5nTWFuYWdlciA9IG5ldyBMb2FkaW5nTWFuYWdlcigpOworICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IGtleVsgdmFsdWVQcm9wZXJ0eU5hbWUgXTsKIAotICAgIC8qKgotICAgICAq
IEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAgICovCisgICAgICAgICAg
ICAgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKIAotICAgIHZhciBsb2FkaW5n
ID0ge307CisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcy5wdXNoKCBrZXkudGltZSApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goIHZhbHVlICk7CiAKLSAgICBmdW5j
dGlvbiBGaWxlTG9hZGVyKCBtYW5hZ2VyICkgeworICAgICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgdGhpcy5tYW5hZ2VyID0gKCBtYW5hZ2VyICE9PSB1bmRlZmluZWQgKSA/IG1hbmFnZXIg
OiBEZWZhdWx0TG9hZGluZ01hbmFnZXI7CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGpzb25L
ZXlzWyBpICsrIF07CiAKLSAgICB9CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoIGtleSAhPT0g
dW5kZWZpbmVkICk7CiAKLSAgICBPYmplY3QuYXNzaWduKCBGaWxlTG9hZGVyLnByb3RvdHlwZSwg
eworICAgICAgICAgICAgfQogCi0gICAgICAgIGxvYWQ6IGZ1bmN0aW9uICggdXJsLCBvbkxvYWQs
IG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7CisgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCB1
cmwgPT09IHVuZGVmaW5lZCApIHVybCA9ICcnOworICAgIH07CiAKLSAgICAgICAgICAgIGlmICgg
dGhpcy5wYXRoICE9PSB1bmRlZmluZWQgKSB1cmwgPSB0aGlzLnBhdGggKyB1cmw7CisgICAgLyoq
CisgICAgICogQWJzdHJhY3QgYmFzZSBjbGFzcyBvZiBpbnRlcnBvbGFudHMgb3ZlciBwYXJhbWV0
cmljIHNhbXBsZXMuCisgICAgICoKKyAgICAgKiBUaGUgcGFyYW1ldGVyIGRvbWFpbiBpcyBvbmUg
ZGltZW5zaW9uYWwsIHR5cGljYWxseSB0aGUgdGltZSBvciBhIHBhdGgKKyAgICAgKiBhbG9uZyBh
IGN1cnZlIGRlZmluZWQgYnkgdGhlIGRhdGEuCisgICAgICoKKyAgICAgKiBUaGUgc2FtcGxlIHZh
bHVlcyBjYW4gaGF2ZSBhbnkgZGltZW5zaW9uYWxpdHkgYW5kIGRlcml2ZWQgY2xhc3NlcyBtYXkK
KyAgICAgKiBhcHBseSBzcGVjaWFsIGludGVycHJldGF0aW9ucyB0byB0aGUgZGF0YS4KKyAgICAg
KgorICAgICAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgdGhlIGludGVydmFsIHNlZWsgaW4gYSBUZW1w
bGF0ZSBNZXRob2QsIGRlZmVycmluZworICAgICAqIHRoZSBhY3R1YWwgaW50ZXJwb2xhdGlvbiB0
byBkZXJpdmVkIGNsYXNzZXMuCisgICAgICoKKyAgICAgKiBUaW1lIGNvbXBsZXhpdHkgaXMgTygx
KSBmb3IgbGluZWFyIGFjY2VzcyBjcm9zc2luZyBhdCBtb3N0IHR3byBwb2ludHMKKyAgICAgKiBh
bmQgTyhsb2cgTikgZm9yIHJhbmRvbSBhY2Nlc3MsIHdoZXJlIE4gaXMgdGhlIG51bWJlciBvZiBw
b3NpdGlvbnMuCisgICAgICoKKyAgICAgKiBSZWZlcmVuY2VzOgorICAgICAqCisgICAgICogICAg
ICBodHRwOi8vd3d3Lm9vZGVzaWduLmNvbS90ZW1wbGF0ZS1tZXRob2QtcGF0dGVybi5odG1sCisg
ICAgICoKKyAgICAgKiBAYXV0aG9yIHRzY2h3CisgICAgICovCiAKLSAgICAgICAgICAgIHVybCA9
IHRoaXMubWFuYWdlci5yZXNvbHZlVVJMKCB1cmwgKTsKKyAgICBmdW5jdGlvbiBJbnRlcnBvbGFu
dCggcGFyYW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNpemUsIHJlc3VsdEJ1
ZmZlciApIHsKIAotICAgICAgICAgICAgdmFyIHNjb3BlID0gdGhpczsKKyAgICAgICAgdGhpcy5w
YXJhbWV0ZXJQb3NpdGlvbnMgPSBwYXJhbWV0ZXJQb3NpdGlvbnM7CisgICAgICAgIHRoaXMuX2Nh
Y2hlZEluZGV4ID0gMDsKIAotICAgICAgICAgICAgdmFyIGNhY2hlZCA9IENhY2hlLmdldCggdXJs
ICk7CisgICAgICAgIHRoaXMucmVzdWx0QnVmZmVyID0gcmVzdWx0QnVmZmVyICE9PSB1bmRlZmlu
ZWQgPworICAgICAgICAgICAgcmVzdWx0QnVmZmVyIDogbmV3IHNhbXBsZVZhbHVlcy5jb25zdHJ1
Y3Rvciggc2FtcGxlU2l6ZSApOworICAgICAgICB0aGlzLnNhbXBsZVZhbHVlcyA9IHNhbXBsZVZh
bHVlczsKKyAgICAgICAgdGhpcy52YWx1ZVNpemUgPSBzYW1wbGVTaXplOwogCi0gICAgICAgICAg
ICBpZiAoIGNhY2hlZCAhPT0gdW5kZWZpbmVkICkgeworICAgIH0KIAotICAgICAgICAgICAgICAg
IHNjb3BlLm1hbmFnZXIuaXRlbVN0YXJ0KCB1cmwgKTsKKyAgICBPYmplY3QuYXNzaWduKCBJbnRl
cnBvbGFudC5wcm90b3R5cGUsIHsKIAotICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoIGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgZXZhbHVhdGU6IGZ1bmN0aW9uICggdCApIHsKIAotICAgICAgICAg
ICAgICAgICAgICBpZiAoIG9uTG9hZCApIG9uTG9hZCggY2FjaGVkICk7CisgICAgICAgICAgICB2
YXIgcHAgPSB0aGlzLnBhcmFtZXRlclBvc2l0aW9ucywKKyAgICAgICAgICAgICAgICBpMSA9IHRo
aXMuX2NhY2hlZEluZGV4LAogCi0gICAgICAgICAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIuaXRl
bUVuZCggdXJsICk7CisgICAgICAgICAgICAgICAgdDEgPSBwcFsgaTEgXSwKKyAgICAgICAgICAg
ICAgICB0MCA9IHBwWyBpMSAtIDEgXTsKIAotICAgICAgICAgICAgICAgIH0sIDAgKTsKKyAgICAg
ICAgICAgIHZhbGlkYXRlX2ludGVydmFsOiB7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gY2Fj
aGVkOworICAgICAgICAgICAgICAgIHNlZWs6IHsKIAotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB2YXIgcmlnaHQ7CiAKLSAgICAgICAgICAgIC8vIENoZWNrIGlmIHJlcXVlc3Qg
aXMgZHVwbGljYXRlCisgICAgICAgICAgICAgICAgICAgIGxpbmVhcl9zY2FuOiB7CiAKLSAgICAg
ICAgICAgIGlmICggbG9hZGluZ1sgdXJsIF0gIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vLSBTZWUgaHR0cDovL2pzcGVyZi5jb20vY29tcGFyaXNvbi10by11bmRl
ZmluZWQvMworICAgICAgICAgICAgICAgICAgICAgICAgLy8tIHNsb3dlciBjb2RlOgorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8tCisgICAgICAgICAgICAgICAgICAgICAgICAvLy0gICAgICAg
ICAgICAgICAgIGlmICggdCA+PSB0MSB8fCB0MSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yd2FyZF9zY2FuOiBpZiAoICEgKCB0IDwgdDEgKSApIHsKIAotICAg
ICAgICAgICAgICAgIGxvYWRpbmdbIHVybCBdLnB1c2goIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKCB2YXIgZ2l2ZVVwQXQgPSBpMSArIDI7IDsgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgb25Mb2FkOiBvbkxvYWQsCi0gICAgICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3M6
IG9uUHJvZ3Jlc3MsCi0gICAgICAgICAgICAgICAgICAgIG9uRXJyb3I6IG9uRXJyb3IKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0MSA9PT0gdW5kZWZpbmVkICkgewogCi0g
ICAgICAgICAgICAgICAgfSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB0IDwgdDAgKSBicmVhayBmb3J3YXJkX3NjYW47CiAKLSAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZnRlciBlbmQKIAot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTEgPSBw
cC5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNo
ZWRJbmRleCA9IGkxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuYWZ0ZXJFbmRfKCBpMSAtIDEsIHQsIHQwICk7CiAKLSAgICAgICAgICAgIC8vIENoZWNr
IGZvciBkYXRhOiBVUkkKLSAgICAgICAgICAgIHZhciBkYXRhVXJpUmVnZXggPSAvXmRhdGE6KC4q
PykoO2Jhc2U2NCk/LCguKikkLzsKLSAgICAgICAgICAgIHZhciBkYXRhVXJpUmVnZXhSZXN1bHQg
PSB1cmwubWF0Y2goIGRhdGFVcmlSZWdleCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIC8vIFNhZmFyaSBjYW4gbm90IGhhbmRsZSBEYXRhIFVSSXMg
dGhyb3VnaCBYTUxIdHRwUmVxdWVzdCBzbyBwcm9jZXNzIG1hbnVhbGx5Ci0gICAgICAgICAgICBp
ZiAoIGRhdGFVcmlSZWdleFJlc3VsdCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBpMSA9PT0gZ2l2ZVVwQXQgKSBicmVhazsgLy8gdGhpcyBsb29wCiAKLSAgICAgICAg
ICAgICAgICB2YXIgbWltZVR5cGUgPSBkYXRhVXJpUmVnZXhSZXN1bHRbIDEgXTsKLSAgICAgICAg
ICAgICAgICB2YXIgaXNCYXNlNjQgPSAhISBkYXRhVXJpUmVnZXhSZXN1bHRbIDIgXTsKLSAgICAg
ICAgICAgICAgICB2YXIgZGF0YSA9IGRhdGFVcmlSZWdleFJlc3VsdFsgMyBdOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0MCA9IHQxOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0MSA9IHBwWyArKyBpMSBdOwogCi0gICAgICAgICAgICAgICAgZGF0YSA9IHdpbmRv
dy5kZWNvZGVVUklDb21wb25lbnQoIGRhdGEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB0IDwgdDEgKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGlzQmFzZTY0ICkg
ZGF0YSA9IHdpbmRvdy5hdG9iKCBkYXRhICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB3ZSBoYXZlIGFycml2ZWQgYXQgdGhlIHNvdWdodCBpbnRlcnZhbAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgc2VlazsKIAotICAgICAgICAgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgICAgICB2YXIgcmVzcG9uc2U7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25z
ZVR5cGUgPSAoIHRoaXMucmVzcG9uc2VUeXBlIHx8ICcnICkudG9Mb3dlckNhc2UoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgg
cmVzcG9uc2VUeXBlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXBhcmUg
YmluYXJ5IHNlYXJjaCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgaW5kZXgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByaWdodCA9IHBwLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhayBsaW5lYXJfc2NhbjsKIAotICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnYXJyYXlidWZmZXInOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYmxvYic6Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KCBkYXRhLmxlbmd0aCApOworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8tIHNsb3dlciBjb2RlOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8tICAg
ICAgICAgICAgICAgICBpZiAoIHQgPCB0MCB8fCB0MCA9PT0gdW5kZWZpbmVkICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhICggdCA+PSB0MCApICkgewogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKysgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9vcGluZz8KIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2aWV3WyBpIF0gPSBkYXRhLmNoYXJDb2RlQXQoIGkgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdDFnbG9iYWwgPSBwcFsgMSBdOwogCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggdCA8IHQxZ2xvYmFsICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBy
ZXNwb25zZVR5cGUgPT09ICdibG9iJyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaTEgPSAyOyAvLyArIDEsIHVzaW5nIHRoZSBzY2FuIGZvciB0aGUgZGV0YWlscworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0MCA9IHQxZ2xvYmFsOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gbmV3IEJsb2IoIFsgdmlldy5idWZmZXIgXSwg
eyB0eXBlOiBtaW1lVHlwZSB9ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBsaW5lYXIgcmV2ZXJzZSBzY2FuCiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzcG9uc2UgPSB2aWV3LmJ1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCB2YXIgZ2l2ZVVwQXQgPSBpMSAtIDI7IDsgKSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdDAg
PT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIHN0YXJ0CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RvY3VtZW50JzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZEluZGV4ID0gMDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZVN0YXJ0XyggMCwgdCwgdDEg
KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgRE9NUGFy
c2VyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBwYXJzZXIucGFy
c2VGcm9tU3RyaW5nKCBkYXRhLCBtaW1lVHlwZSApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpMSA9PT0gZ2l2ZVVwQXQgKSBicmVhazsgLy8g
dGhpcyBsb29wCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2pzb24nOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHQwOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0MCA9IHBwWyAtLSBpMSAtIDEgXTsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3BvbnNlID0gSlNPTi5wYXJzZSggZGF0YSApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHQgPj0gdDAgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGhh
dmUgYXJyaXZlZCBhdCB0aGUgc291Z2h0IGludGVydmFsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhayBzZWVrOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OiAvLyAndGV4dCcgb3Igb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgYmluYXJ5IHNlYXJj
aCBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBpbmRleAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJpZ2h0ID0gaTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTEgPSAwOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxpbmVhcl9zY2FuOwogCi0gICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
ICAgICAvLyBXYWl0IGZvciBuZXh0IGJyb3dzZXIgdGljayBsaWtlIHN0YW5kYXJkIFhNTEh0dHBS
ZXF1ZXN0IGV2ZW50IGRpc3BhdGNoaW5nIGRvZXMKLSAgICAgICAgICAgICAgICAgICAgd2luZG93
LnNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRo
ZSBpbnRlcnZhbCBpcyB2YWxpZAogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9uTG9h
ZCApIG9uTG9hZCggcmVzcG9uc2UgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHZh
bGlkYXRlX2ludGVydmFsOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2Vy
Lml0ZW1FbmQoIHVybCApOworICAgICAgICAgICAgICAgICAgICB9IC8vIGxpbmVhciBzY2FuCiAK
LSAgICAgICAgICAgICAgICAgICAgfSwgMCApOworICAgICAgICAgICAgICAgICAgICAvLyBiaW5h
cnkgc2VhcmNoCiAKLSAgICAgICAgICAgICAgICB9IGNhdGNoICggZXJyb3IgKSB7CisgICAgICAg
ICAgICAgICAgICAgIHdoaWxlICggaTEgPCByaWdodCApIHsKIAotICAgICAgICAgICAgICAgICAg
ICAvLyBXYWl0IGZvciBuZXh0IGJyb3dzZXIgdGljayBsaWtlIHN0YW5kYXJkIFhNTEh0dHBSZXF1
ZXN0IGV2ZW50IGRpc3BhdGNoaW5nIGRvZXMKLSAgICAgICAgICAgICAgICAgICAgd2luZG93LnNl
dFRpbWVvdXQoIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaWQg
PSAoIGkxICsgcmlnaHQgKSA+Pj4gMTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBv
bkVycm9yICkgb25FcnJvciggZXJyb3IgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dCA8IHBwWyBtaWQgXSApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubWFuYWdl
ci5pdGVtRW5kKCB1cmwgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIu
aXRlbUVycm9yKCB1cmwgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCA9IG1p
ZDsKIAotICAgICAgICAgICAgICAgICAgICB9LCAwICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGkxID0gbWlkICsgMTsKIAotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpc2UgYXJyYXkgZm9yIGR1
cGxpY2F0ZSByZXF1ZXN0cworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBsb2FkaW5nWyB1cmwgXSA9IFtdOworICAgICAgICAgICAgICAgICAgICB0MSA9IHBwWyBpMSBd
OworICAgICAgICAgICAgICAgICAgICB0MCA9IHBwWyBpMSAtIDEgXTsKIAotICAgICAgICAgICAg
ICAgIGxvYWRpbmdbIHVybCBdLnB1c2goIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sg
Ym91bmRhcnkgY2FzZXMsIGFnYWluCiAKLSAgICAgICAgICAgICAgICAgICAgb25Mb2FkOiBvbkxv
YWQsCi0gICAgICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3M6IG9uUHJvZ3Jlc3MsCi0gICAgICAg
ICAgICAgICAgICAgIG9uRXJyb3I6IG9uRXJyb3IKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0
MCA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgfSApOworICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fY2FjaGVkSW5kZXggPSAwOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuYmVmb3JlU3RhcnRfKCAwLCB0LCB0MSApOwogCi0gICAgICAgICAgICAg
ICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgcmVxdWVzdC5vcGVuKCAnR0VUJywgdXJsLCB0cnVlICk7
CisgICAgICAgICAgICAgICAgICAgIGlmICggdDEgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAg
ICAgICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lciggJ2xvYWQnLCBmdW5jdGlvbiAoIGV2
ZW50ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaTEgPSBwcC5sZW5ndGg7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRJbmRleCA9IGkxOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuYWZ0ZXJFbmRfKCBpMSAtIDEsIHQwLCB0ICk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTsKKyAgICAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIENhY2hlLmFkZCggdXJsLCByZXNwb25z
ZSApOworICAgICAgICAgICAgICAgIH0gLy8gc2VlawogCi0gICAgICAgICAgICAgICAgICAgIHZh
ciBjYWxsYmFja3MgPSBsb2FkaW5nWyB1cmwgXTsKKyAgICAgICAgICAgICAgICB0aGlzLl9jYWNo
ZWRJbmRleCA9IGkxOwogCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2FkaW5nWyB1cmwg
XTsKKyAgICAgICAgICAgICAgICB0aGlzLmludGVydmFsQ2hhbmdlZF8oIGkxLCB0MCwgdDEgKTsK
IAotICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMuc3RhdHVzID09PSAyMDAgfHwgdGhpcy5z
dGF0dXMgPT09IDAgKSB7CisgICAgICAgICAgICB9IC8vIHZhbGlkYXRlX2ludGVydmFsCiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFNvbWUgYnJvd3NlcnMgcmV0dXJuIEhUVFAgU3RhdHVz
IDAgd2hlbiB1c2luZyBub24taHR0cCBwcm90b2NvbAotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZS5nLiAnZmlsZTovLycgb3IgJ2RhdGE6Ly8nLiBIYW5kbGUgYXMgc3VjY2Vzcy4KKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLmludGVycG9sYXRlXyggaTEsIHQwLCB0LCB0MSApOwogCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMuc3RhdHVzID09PSAwICkgY29uc29sZS53YXJu
KCAnVEhSRUUuRmlsZUxvYWRlcjogSFRUUCBTdGF0dXMgMCByZWNlaXZlZC4nICk7CisgICAgICAg
IH0sCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBjYWxs
YmFja3MubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CisgICAgICAgIHNldHRpbmdzOiBudWxsLCAv
LyBvcHRpb25hbCwgc3ViY2xhc3Mtc3BlY2lmaWMgc2V0dGluZ3Mgc3RydWN0dXJlCisgICAgICAg
IC8vIE5vdGU6IFRoZSBpbmRpcmVjdGlvbiBhbGxvd3MgY2VudHJhbCBjb250cm9sIG9mIG1hbnkg
aW50ZXJwb2xhbnRzLgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNr
ID0gY2FsbGJhY2tzWyBpIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxs
YmFjay5vbkxvYWQgKSBjYWxsYmFjay5vbkxvYWQoIHJlc3BvbnNlICk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubWFuYWdlci5p
dGVtRW5kKCB1cmwgKTsKKyAgICAgICAgLy8gLS0tIFByb3RlY3RlZCBpbnRlcmZhY2UKIAotICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICBEZWZhdWx0U2V0dGluZ3NfOiB7fSwK
IAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IGNhbGxiYWNr
cy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAgICAgICAgZ2V0U2V0dGluZ3NfOiBmdW5jdGlv
biAoKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBjYWxs
YmFja3NbIGkgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrLm9u
RXJyb3IgKSBjYWxsYmFjay5vbkVycm9yKCBldmVudCApOworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuc2V0dGluZ3MgfHwgdGhpcy5EZWZhdWx0U2V0dGluZ3NfOwogCi0gICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1h
bmFnZXIuaXRlbUVuZCggdXJsICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5tYW5h
Z2VyLml0ZW1FcnJvciggdXJsICk7CisgICAgICAgIGNvcHlTYW1wbGVWYWx1ZV86IGZ1bmN0aW9u
ICggaW5kZXggKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gY29w
aWVzIGEgc2FtcGxlIHZhbHVlIHRvIHRoZSByZXN1bHQgYnVmZmVyCiAKLSAgICAgICAgICAgICAg
ICB9LCBmYWxzZSApOworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMucmVzdWx0QnVmZmVy
LAorICAgICAgICAgICAgICAgIHZhbHVlcyA9IHRoaXMuc2FtcGxlVmFsdWVzLAorICAgICAgICAg
ICAgICAgIHN0cmlkZSA9IHRoaXMudmFsdWVTaXplLAorICAgICAgICAgICAgICAgIG9mZnNldCA9
IGluZGV4ICogc3RyaWRlOwogCi0gICAgICAgICAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3Rl
bmVyKCAncHJvZ3Jlc3MnLCBmdW5jdGlvbiAoIGV2ZW50ICkgeworICAgICAgICAgICAgZm9yICgg
dmFyIGkgPSAwOyBpICE9PSBzdHJpZGU7ICsrIGkgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
dmFyIGNhbGxiYWNrcyA9IGxvYWRpbmdbIHVybCBdOworICAgICAgICAgICAgICAgIHJlc3VsdFsg
aSBdID0gdmFsdWVzWyBvZmZzZXQgKyBpIF07CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yICgg
dmFyIGkgPSAwLCBpbCA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gY2FsbGJh
Y2tzWyBpIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrLm9uUHJvZ3Jl
c3MgKSBjYWxsYmFjay5vblByb2dyZXNzKCBldmVudCApOworICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCiAKLSAgICAgICAgICAg
ICAgICB9LCBmYWxzZSApOworICAgICAgICAvLyBUZW1wbGF0ZSBtZXRob2RzIGZvciBkZXJpdmVk
IGNsYXNzZXM6CiAKLSAgICAgICAgICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoICdl
cnJvcicsIGZ1bmN0aW9uICggZXZlbnQgKSB7CisgICAgICAgIGludGVycG9sYXRlXzogZnVuY3Rp
b24gKCAvKiBpMSwgdDAsIHQsIHQxICovICkgewogCi0gICAgICAgICAgICAgICAgICAgIHZhciBj
YWxsYmFja3MgPSBsb2FkaW5nWyB1cmwgXTsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigg
J2NhbGwgdG8gYWJzdHJhY3QgbWV0aG9kJyApOworICAgICAgICAgICAgLy8gaW1wbGVtZW50YXRp
b25zIHNoYWxsIHJldHVybiB0aGlzLnJlc3VsdEJ1ZmZlcgogCi0gICAgICAgICAgICAgICAgICAg
IGRlbGV0ZSBsb2FkaW5nWyB1cmwgXTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgICAg
ICBmb3IgKCB2YXIgaSA9IDAsIGlsID0gY2FsbGJhY2tzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkg
eworICAgICAgICBpbnRlcnZhbENoYW5nZWRfOiBmdW5jdGlvbiAoIC8qIGkxLCB0MCwgdDEgKi8g
KSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGNhbGxiYWNrc1sg
aSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5vbkVycm9yICkgY2Fs
bGJhY2sub25FcnJvciggZXZlbnQgKTsKKyAgICAgICAgICAgIC8vIGVtcHR5CiAKLSAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgc2NvcGUubWFu
YWdlci5pdGVtRW5kKCB1cmwgKTsKLSAgICAgICAgICAgICAgICAgICAgc2NvcGUubWFuYWdlci5p
dGVtRXJyb3IoIHVybCApOworICAgIH0gKTsKIAotICAgICAgICAgICAgICAgIH0sIGZhbHNlICk7
CisgICAgLy8hXCBERUNMQVJFIEFMSUFTIEFGVEVSIGFzc2lnbiBwcm90b3R5cGUgIQorICAgIE9i
amVjdC5hc3NpZ24oIEludGVycG9sYW50LnByb3RvdHlwZSwgewogCi0gICAgICAgICAgICAgICAg
aWYgKCB0aGlzLnJlc3BvbnNlVHlwZSAhPT0gdW5kZWZpbmVkICkgcmVxdWVzdC5yZXNwb25zZVR5
cGUgPSB0aGlzLnJlc3BvbnNlVHlwZTsKLSAgICAgICAgICAgICAgICBpZiAoIHRoaXMud2l0aENy
ZWRlbnRpYWxzICE9PSB1bmRlZmluZWQgKSByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9IHRoaXMu
d2l0aENyZWRlbnRpYWxzOworICAgICAgICAvLyggMCwgdCwgdDAgKSwgcmV0dXJucyB0aGlzLnJl
c3VsdEJ1ZmZlcgorICAgICAgICBiZWZvcmVTdGFydF86IEludGVycG9sYW50LnByb3RvdHlwZS5j
b3B5U2FtcGxlVmFsdWVfLAogCi0gICAgICAgICAgICAgICAgaWYgKCByZXF1ZXN0Lm92ZXJyaWRl
TWltZVR5cGUgKSByZXF1ZXN0Lm92ZXJyaWRlTWltZVR5cGUoIHRoaXMubWltZVR5cGUgIT09IHVu
ZGVmaW5lZCA/IHRoaXMubWltZVR5cGUgOiAndGV4dC9wbGFpbicgKTsKKyAgICAgICAgLy8oIE4t
MSwgdE4tMSwgdCApLCByZXR1cm5zIHRoaXMucmVzdWx0QnVmZmVyCisgICAgICAgIGFmdGVyRW5k
XzogSW50ZXJwb2xhbnQucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV8sCiAKLSAgICAgICAgICAg
ICAgICBmb3IgKCB2YXIgaGVhZGVyIGluIHRoaXMucmVxdWVzdEhlYWRlciApIHsKKyAgICB9ICk7
CiAKLSAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKCBoZWFkZXIs
IHRoaXMucmVxdWVzdEhlYWRlclsgaGVhZGVyIF0gKTsKKyAgICAvKioKKyAgICAgKiBGYXN0IGFu
ZCBzaW1wbGUgY3ViaWMgc3BsaW5lIGludGVycG9sYW50LgorICAgICAqCisgICAgICogSXQgd2Fz
IGRlcml2ZWQgZnJvbSBhIEhlcm1pdGlhbiBjb25zdHJ1Y3Rpb24gc2V0dGluZyB0aGUgZmlyc3Qg
ZGVyaXZhdGl2ZQorICAgICAqIGF0IGVhY2ggc2FtcGxlIHBvc2l0aW9uIHRvIHRoZSBsaW5lYXIg
c2xvcGUgYmV0d2VlbiBuZWlnaGJvcmluZyBwb3NpdGlvbnMKKyAgICAgKiBvdmVyIHRoZWlyIHBh
cmFtZXRlciBpbnRlcnZhbC4KKyAgICAgKgorICAgICAqIEBhdXRob3IgdHNjaHcKKyAgICAgKi8K
IAotICAgICAgICAgICAgICAgIH0KKyAgICBmdW5jdGlvbiBDdWJpY0ludGVycG9sYW50KCBwYXJh
bWV0ZXJQb3NpdGlvbnMsIHNhbXBsZVZhbHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyICkg
ewogCi0gICAgICAgICAgICAgICAgcmVxdWVzdC5zZW5kKCBudWxsICk7CisgICAgICAgIEludGVy
cG9sYW50LmNhbGwoIHRoaXMsIHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1w
bGVTaXplLCByZXN1bHRCdWZmZXIgKTsKIAotICAgICAgICAgICAgfQorICAgICAgICB0aGlzLl93
ZWlnaHRQcmV2ID0gLSAwOworICAgICAgICB0aGlzLl9vZmZzZXRQcmV2ID0gLSAwOworICAgICAg
ICB0aGlzLl93ZWlnaHROZXh0ID0gLSAwOworICAgICAgICB0aGlzLl9vZmZzZXROZXh0ID0gLSAw
OwogCi0gICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1TdGFydCggdXJsICk7CisgICAgfQog
Ci0gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDsKKyAgICBDdWJpY0ludGVycG9sYW50LnByb3Rv
dHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIEludGVycG9sYW50LnByb3RvdHlw
ZSApLCB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgY29uc3RydWN0b3I6IEN1YmljSW50ZXJwb2xh
bnQsCiAKLSAgICAgICAgc2V0UGF0aDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKyAgICAgICAgRGVm
YXVsdFNldHRpbmdzXzogewogCi0gICAgICAgICAgICB0aGlzLnBhdGggPSB2YWx1ZTsKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgZW5kaW5nU3RhcnQ6IFplcm9DdXJ2YXR1
cmVFbmRpbmcsCisgICAgICAgICAgICBlbmRpbmdFbmQ6IFplcm9DdXJ2YXR1cmVFbmRpbmcKIAog
ICAgICAgICB9LAogCi0gICAgICAgIHNldFJlc3BvbnNlVHlwZTogZnVuY3Rpb24gKCB2YWx1ZSAp
IHsKKyAgICAgICAgaW50ZXJ2YWxDaGFuZ2VkXzogZnVuY3Rpb24gKCBpMSwgdDAsIHQxICkgewog
Ci0gICAgICAgICAgICB0aGlzLnJlc3BvbnNlVHlwZSA9IHZhbHVlOwotICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgICAgICAgICB2YXIgcHAgPSB0aGlzLnBhcmFtZXRlclBvc2l0aW9ucywK
KyAgICAgICAgICAgICAgICBpUHJldiA9IGkxIC0gMiwKKyAgICAgICAgICAgICAgICBpTmV4dCA9
IGkxICsgMSwKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIHRQcmV2ID0gcHBbIGlQcmV2
IF0sCisgICAgICAgICAgICAgICAgdE5leHQgPSBwcFsgaU5leHQgXTsKIAotICAgICAgICBzZXRX
aXRoQ3JlZGVudGlhbHM6IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAgICAgICAgICBpZiAoIHRQ
cmV2ID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgIHRoaXMud2l0aENyZWRlbnRpYWxz
ID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKCB0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0ICkgewogCi0gICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgWmVyb1Nsb3BlRW5kaW5nOgogCi0gICAgICAgIHNldE1p
bWVUeXBlOiBmdW5jdGlvbiAoIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ZicodDApID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgaVByZXYgPSBpMTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRQcmV2ID0gMiAqIHQwIC0gdDE7CiAKLSAgICAgICAgICAgIHRoaXMu
bWltZVR5cGUgPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBXcmFwQXJvdW5kRW5kaW5nOgogCi0gICAgICAgIHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9u
ICggdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgdGhlIG90aGVyIGVu
ZCBvZiB0aGUgY3VydmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlQcmV2ID0gcHAubGVuZ3Ro
IC0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRQcmV2ID0gdDAgKyBwcFsgaVByZXYgXSAt
IHBwWyBpUHJldiArIDEgXTsKIAotICAgICAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVyID0gdmFs
dWU7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogLy8gWmVyb0N1
cnZhdHVyZUVuZGluZwogCi0gICAgfSApOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZicn
KHQwKSA9IDAgYS5rLmEuIE5hdHVyYWwgU3BsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICBp
UHJldiA9IGkxOworICAgICAgICAgICAgICAgICAgICAgICAgdFByZXYgPSB0MTsKIAotICAgIC8q
KgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAgICoKLSAg
ICAgKiBBYnN0cmFjdCBCYXNlIGNsYXNzIHRvIGJsb2NrIGJhc2VkIHRleHR1cmVzIGxvYWRlciAo
ZGRzLCBwdnIsIC4uLikKLSAgICAgKi8KKyAgICAgICAgICAgICAgICB9CiAKLSAgICBmdW5jdGlv
biBDb21wcmVzc2VkVGV4dHVyZUxvYWRlciggbWFuYWdlciApIHsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICB0aGlzLm1hbmFnZXIgPSAoIG1hbmFnZXIgIT09IHVuZGVmaW5lZCApID8gbWFuYWdl
ciA6IERlZmF1bHRMb2FkaW5nTWFuYWdlcjsKKyAgICAgICAgICAgIGlmICggdE5leHQgPT09IHVu
ZGVmaW5lZCApIHsKIAotICAgICAgICAvLyBvdmVycmlkZSBpbiBzdWIgY2xhc3NlcwotICAgICAg
ICB0aGlzLl9wYXJzZXIgPSBudWxsOworICAgICAgICAgICAgICAgIHN3aXRjaCAoIHRoaXMuZ2V0
U2V0dGluZ3NfKCkuZW5kaW5nRW5kICkgewogCi0gICAgfQorICAgICAgICAgICAgICAgICAgICBj
YXNlIFplcm9TbG9wZUVuZGluZzoKIAotICAgIE9iamVjdC5hc3NpZ24oIENvbXByZXNzZWRUZXh0
dXJlTG9hZGVyLnByb3RvdHlwZSwgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZicodE4p
ID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgaU5leHQgPSBpMTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHROZXh0ID0gMiAqIHQxIC0gdDA7CiAKLSAgICAgICAgbG9hZDogZnVuY3Rpb24g
KCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICB2YXIgc2NvcGUgPSB0aGlzOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIFdyYXBBcm91bmRFbmRpbmc6CiAKLSAgICAgICAgICAgIHZhciBpbWFn
ZXMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgb3RoZXIgZW5kIG9m
IHRoZSBjdXJ2ZQorICAgICAgICAgICAgICAgICAgICAgICAgaU5leHQgPSAxOworICAgICAgICAg
ICAgICAgICAgICAgICAgdE5leHQgPSB0MSArIHBwWyAxIF0gLSBwcFsgMCBdOwogCi0gICAgICAg
ICAgICB2YXIgdGV4dHVyZSA9IG5ldyBDb21wcmVzc2VkVGV4dHVyZSgpOwotICAgICAgICAgICAg
dGV4dHVyZS5pbWFnZSA9IGltYWdlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgICAgICAgICB2YXIgbG9hZGVyID0gbmV3IEZpbGVMb2FkZXIoIHRoaXMubWFuYWdlciAp
OwotICAgICAgICAgICAgbG9hZGVyLnNldFBhdGgoIHRoaXMucGF0aCApOwotICAgICAgICAgICAg
bG9hZGVyLnNldFJlc3BvbnNlVHlwZSggJ2FycmF5YnVmZmVyJyApOworICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OiAvLyBaZXJvQ3VydmF0dXJlRW5kaW5nCiAKLSAgICAgICAgICAgIGZ1bmN0
aW9uIGxvYWRUZXh0dXJlKCBpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZicnKHRO
KSA9IDAsIGEuay5hLiBOYXR1cmFsIFNwbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgaU5l
eHQgPSBpMSAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICB0TmV4dCA9IHQwOwogCi0gICAg
ICAgICAgICAgICAgbG9hZGVyLmxvYWQoIHVybFsgaSBdLCBmdW5jdGlvbiAoIGJ1ZmZlciApIHsK
KyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIHRleERhdGFzID0g
c2NvcGUuX3BhcnNlciggYnVmZmVyLCB0cnVlICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgaW1hZ2VzWyBpIF0gPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aWR0
aDogdGV4RGF0YXMud2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHRleERh
dGFzLmhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogdGV4RGF0YXMuZm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgbWlwbWFwczogdGV4RGF0YXMubWlwbWFwcwot
ICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgdmFyIGhhbGZEdCA9ICggdDEgLSB0
MCApICogMC41LAorICAgICAgICAgICAgICAgIHN0cmlkZSA9IHRoaXMudmFsdWVTaXplOwogCi0g
ICAgICAgICAgICAgICAgICAgIGxvYWRlZCArPSAxOworICAgICAgICAgICAgdGhpcy5fd2VpZ2h0
UHJldiA9IGhhbGZEdCAvICggdDAgLSB0UHJldiApOworICAgICAgICAgICAgdGhpcy5fd2VpZ2h0
TmV4dCA9IGhhbGZEdCAvICggdE5leHQgLSB0MSApOworICAgICAgICAgICAgdGhpcy5fb2Zmc2V0
UHJldiA9IGlQcmV2ICogc3RyaWRlOworICAgICAgICAgICAgdGhpcy5fb2Zmc2V0TmV4dCA9IGlO
ZXh0ICogc3RyaWRlOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICggbG9hZGVkID09PSA2ICkg
eworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRleERhdGFzLm1p
cG1hcENvdW50ID09PSAxICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLm1p
bkZpbHRlciA9IExpbmVhckZpbHRlcjsKKyAgICAgICAgaW50ZXJwb2xhdGVfOiBmdW5jdGlvbiAo
IGkxLCB0MCwgdCwgdDEgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZm9y
bWF0ID0gdGV4RGF0YXMuZm9ybWF0OwotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5u
ZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5yZXN1bHRC
dWZmZXIsCisgICAgICAgICAgICAgICAgdmFsdWVzID0gdGhpcy5zYW1wbGVWYWx1ZXMsCisgICAg
ICAgICAgICAgICAgc3RyaWRlID0gdGhpcy52YWx1ZVNpemUsCiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggb25Mb2FkICkgb25Mb2FkKCB0ZXh0dXJlICk7CisgICAgICAgICAgICAgICAg
bzEgPSBpMSAqIHN0cmlkZSwgICAgICAgbzAgPSBvMSAtIHN0cmlkZSwKKyAgICAgICAgICAgICAg
ICBvUCA9IHRoaXMuX29mZnNldFByZXYsICBvTiA9IHRoaXMuX29mZnNldE5leHQsCisgICAgICAg
ICAgICAgICAgd1AgPSB0aGlzLl93ZWlnaHRQcmV2LCAgd04gPSB0aGlzLl93ZWlnaHROZXh0LAog
Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwID0gKCB0IC0gdDAgKSAv
ICggdDEgLSB0MCApLAorICAgICAgICAgICAgICAgIHBwID0gcCAqIHAsCisgICAgICAgICAgICAg
ICAgcHBwID0gcHAgKiBwOwogCi0gICAgICAgICAgICAgICAgfSwgb25Qcm9ncmVzcywgb25FcnJv
ciApOworICAgICAgICAgICAgLy8gZXZhbHVhdGUgcG9seW5vbWlhbHMKIAotICAgICAgICAgICAg
fQorICAgICAgICAgICAgdmFyIHNQID0gLSB3UCAqIHBwcCArIDIgKiB3UCAqIHBwIC0gd1AgKiBw
OworICAgICAgICAgICAgdmFyIHMwID0gKCAxICsgd1AgKSAqIHBwcCArICggLSAxLjUgLSAyICog
d1AgKSAqIHBwICsgKCAtIDAuNSArIHdQICkgKiBwICsgMTsKKyAgICAgICAgICAgIHZhciBzMSA9
ICggLSAxIC0gd04gKSAqIHBwcCArICggMS41ICsgd04gKSAqIHBwICsgMC41ICogcDsKKyAgICAg
ICAgICAgIHZhciBzTiA9IHdOICogcHBwIC0gd04gKiBwcDsKIAotICAgICAgICAgICAgaWYgKCBB
cnJheS5pc0FycmF5KCB1cmwgKSApIHsKKyAgICAgICAgICAgIC8vIGNvbWJpbmUgZGF0YSBsaW5l
YXJseQogCi0gICAgICAgICAgICAgICAgdmFyIGxvYWRlZCA9IDA7CisgICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IDA7IGkgIT09IHN0cmlkZTsgKysgaSApIHsKIAotICAgICAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMCwgaWwgPSB1cmwubGVuZ3RoOyBpIDwgaWw7ICsrIGkgKSB7CisgICAgICAg
ICAgICAgICAgcmVzdWx0WyBpIF0gPQorICAgICAgICAgICAgICAgICAgICAgICAgc1AgKiB2YWx1
ZXNbIG9QICsgaSBdICsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMwICogdmFsdWVzWyBvMCAr
IGkgXSArCisgICAgICAgICAgICAgICAgICAgICAgICBzMSAqIHZhbHVlc1sgbzEgKyBpIF0gKwor
ICAgICAgICAgICAgICAgICAgICAgICAgc04gKiB2YWx1ZXNbIG9OICsgaSBdOwogCi0gICAgICAg
ICAgICAgICAgICAgIGxvYWRUZXh0dXJlKCBpICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBjb21wcmVzc2VkIGN1YmVtYXAg
dGV4dHVyZSBzdG9yZWQgaW4gYSBzaW5nbGUgRERTIGZpbGUKKyAgICB9ICk7CiAKLSAgICAgICAg
ICAgICAgICBsb2FkZXIubG9hZCggdXJsLCBmdW5jdGlvbiAoIGJ1ZmZlciApIHsKKyAgICAvKioK
KyAgICAgKiBAYXV0aG9yIHRzY2h3CisgICAgICovCiAKLSAgICAgICAgICAgICAgICAgICAgdmFy
IHRleERhdGFzID0gc2NvcGUuX3BhcnNlciggYnVmZmVyLCB0cnVlICk7CisgICAgZnVuY3Rpb24g
TGluZWFySW50ZXJwb2xhbnQoIHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1w
bGVTaXplLCByZXN1bHRCdWZmZXIgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB0ZXhE
YXRhcy5pc0N1YmVtYXAgKSB7CisgICAgICAgIEludGVycG9sYW50LmNhbGwoIHRoaXMsIHBhcmFt
ZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIgKTsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZhY2VzID0gdGV4RGF0YXMubWlwbWFwcy5s
ZW5ndGggLyB0ZXhEYXRhcy5taXBtYXBDb3VudDsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIHZhciBmID0gMDsgZiA8IGZhY2VzOyBmICsrICkgeworICAgIExpbmVhcklu
dGVycG9sYW50LnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIEludGVy
cG9sYW50LnByb3RvdHlwZSApLCB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFn
ZXNbIGYgXSA9IHsgbWlwbWFwczogW10gfTsKKyAgICAgICAgY29uc3RydWN0b3I6IExpbmVhcklu
dGVycG9sYW50LAogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
OyBpIDwgdGV4RGF0YXMubWlwbWFwQ291bnQ7IGkgKysgKSB7CisgICAgICAgIGludGVycG9sYXRl
XzogZnVuY3Rpb24gKCBpMSwgdDAsIHQsIHQxICkgewogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGltYWdlc1sgZiBdLm1pcG1hcHMucHVzaCggdGV4RGF0YXMubWlwbWFwc1sgZiAq
IHRleERhdGFzLm1pcG1hcENvdW50ICsgaSBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGltYWdlc1sgZiBdLmZvcm1hdCA9IHRleERhdGFzLmZvcm1hdDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzWyBmIF0ud2lkdGggPSB0ZXhEYXRhcy53aWR0aDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzWyBmIF0uaGVpZ2h0ID0gdGV4
RGF0YXMuaGVpZ2h0OworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMucmVzdWx0QnVmZmVy
LAorICAgICAgICAgICAgICAgIHZhbHVlcyA9IHRoaXMuc2FtcGxlVmFsdWVzLAorICAgICAgICAg
ICAgICAgIHN0cmlkZSA9IHRoaXMudmFsdWVTaXplLAogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIG9mZnNldDEgPSBpMSAqIHN0cmlkZSwKKyAgICAgICAg
ICAgICAgICBvZmZzZXQwID0gb2Zmc2V0MSAtIHN0cmlkZSwKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHdlaWdodDEgPSAoIHQgLSB0MCApIC8gKCB0MSAtIHQw
ICksCisgICAgICAgICAgICAgICAgd2VpZ2h0MCA9IDEgLSB3ZWlnaHQxOwogCi0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgIT09IHN0
cmlkZTsgKysgaSApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5pbWFnZS53
aWR0aCA9IHRleERhdGFzLndpZHRoOwotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5p
bWFnZS5oZWlnaHQgPSB0ZXhEYXRhcy5oZWlnaHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlLm1pcG1hcHMgPSB0ZXhEYXRhcy5taXBtYXBzOworICAgICAgICAgICAgICAgIHJlc3Vs
dFsgaSBdID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1sgb2Zmc2V0MCArIGkgXSAq
IHdlaWdodDAgKworICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzWyBvZmZzZXQxICsgaSBd
ICogd2VpZ2h0MTsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCB0ZXhEYXRhcy5taXBtYXBDb3VudCA9PT0gMSApIHsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmUubWluRmlsdGVyID0gTGluZWFyRmlsdGVyOworICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICAgICAgfQorICAgIH0gKTsKIAotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmZvcm1hdCA9
IHRleERhdGFzLmZvcm1hdDsKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5uZWVkc1VwZGF0
ZSA9IHRydWU7CisgICAgLyoqCisgICAgICoKKyAgICAgKiBJbnRlcnBvbGFudCB0aGF0IGV2YWx1
YXRlcyB0byB0aGUgc2FtcGxlIHZhbHVlIGF0IHRoZSBwb3NpdGlvbiBwcmVjZWVkaW5nCisgICAg
ICogdGhlIHBhcmFtZXRlci4KKyAgICAgKgorICAgICAqIEBhdXRob3IgdHNjaHcKKyAgICAgKi8K
IAotICAgICAgICAgICAgICAgICAgICBpZiAoIG9uTG9hZCApIG9uTG9hZCggdGV4dHVyZSApOwor
ICAgIGZ1bmN0aW9uIERpc2NyZXRlSW50ZXJwb2xhbnQoIHBhcmFtZXRlclBvc2l0aW9ucywgc2Ft
cGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIgKSB7CiAKLSAgICAgICAgICAgICAg
ICB9LCBvblByb2dyZXNzLCBvbkVycm9yICk7CisgICAgICAgIEludGVycG9sYW50LmNhbGwoIHRo
aXMsIHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRC
dWZmZXIgKTsKIAotICAgICAgICAgICAgfQorICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHRl
eHR1cmU7CisgICAgRGlzY3JldGVJbnRlcnBvbGFudC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWdu
KCBPYmplY3QuY3JlYXRlKCBJbnRlcnBvbGFudC5wcm90b3R5cGUgKSwgewogCi0gICAgICAgIH0s
CisgICAgICAgIGNvbnN0cnVjdG9yOiBEaXNjcmV0ZUludGVycG9sYW50LAogCi0gICAgICAgIHNl
dFBhdGg6IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAgICAgIGludGVycG9sYXRlXzogZnVuY3Rp
b24gKCBpMSAvKiwgdDAsIHQsIHQxICovICkgewogCi0gICAgICAgICAgICB0aGlzLnBhdGggPSB2
YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
Y29weVNhbXBsZVZhbHVlXyggaTEgLSAxICk7CiAKICAgICAgICAgfQogCiAgICAgfSApOwogCiAg
ICAgLyoqCi0gICAgICogQGF1dGhvciBOaWtvcyBNLiAvIGh0dHBzOi8vZ2l0aHViLmNvbS9mb28x
MjMvCiAgICAgICoKLSAgICAgKiBBYnN0cmFjdCBCYXNlIGNsYXNzIHRvIGxvYWQgZ2VuZXJpYyBi
aW5hcnkgdGV4dHVyZXMgZm9ybWF0cyAocmdiZSwgaGRyLCAuLi4pCisgICAgICogQSB0aW1lZCBz
ZXF1ZW5jZSBvZiBrZXlmcmFtZXMgZm9yIGEgc3BlY2lmaWMgcHJvcGVydHkuCisgICAgICoKKyAg
ICAgKgorICAgICAqIEBhdXRob3IgQmVuIEhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW8vCisgICAg
ICogQGF1dGhvciBEYXZpZCBTYXJubyAvIGh0dHA6Ly9saWdodGhhdXMudXMvCisgICAgICogQGF1
dGhvciB0c2NodwogICAgICAqLwogCi0gICAgZnVuY3Rpb24gRGF0YVRleHR1cmVMb2FkZXIoIG1h
bmFnZXIgKSB7Ci0KLSAgICAgICAgdGhpcy5tYW5hZ2VyID0gKCBtYW5hZ2VyICE9PSB1bmRlZmlu
ZWQgKSA/IG1hbmFnZXIgOiBEZWZhdWx0TG9hZGluZ01hbmFnZXI7CisgICAgZnVuY3Rpb24gS2V5
ZnJhbWVUcmFjayggbmFtZSwgdGltZXMsIHZhbHVlcywgaW50ZXJwb2xhdGlvbiApIHsKIAotICAg
ICAgICAvLyBvdmVycmlkZSBpbiBzdWIgY2xhc3NlcwotICAgICAgICB0aGlzLl9wYXJzZXIgPSBu
dWxsOworICAgICAgICBpZiAoIG5hbWUgPT09IHVuZGVmaW5lZCApIHRocm93IG5ldyBFcnJvcigg
J1RIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkJyApOworICAgICAg
ICBpZiAoIHRpbWVzID09PSB1bmRlZmluZWQgfHwgdGltZXMubGVuZ3RoID09PSAwICkgdGhyb3cg
bmV3IEVycm9yKCAnVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5h
bWVkICcgKyBuYW1lICk7CiAKLSAgICB9CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAKLSAg
ICBPYmplY3QuYXNzaWduKCBEYXRhVGV4dHVyZUxvYWRlci5wcm90b3R5cGUsIHsKKyAgICAgICAg
dGhpcy50aW1lcyA9IEFuaW1hdGlvblV0aWxzLmNvbnZlcnRBcnJheSggdGltZXMsIHRoaXMuVGlt
ZUJ1ZmZlclR5cGUgKTsKKyAgICAgICAgdGhpcy52YWx1ZXMgPSBBbmltYXRpb25VdGlscy5jb252
ZXJ0QXJyYXkoIHZhbHVlcywgdGhpcy5WYWx1ZUJ1ZmZlclR5cGUgKTsKIAotICAgICAgICBsb2Fk
OiBmdW5jdGlvbiAoIHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yICkgeworICAgICAg
ICB0aGlzLnNldEludGVycG9sYXRpb24oIGludGVycG9sYXRpb24gfHwgdGhpcy5EZWZhdWx0SW50
ZXJwb2xhdGlvbiApOwogCi0gICAgICAgICAgICB2YXIgc2NvcGUgPSB0aGlzOworICAgIH0KIAot
ICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgRGF0YVRleHR1cmUoKTsKKyAgICAvLyBTdGF0
aWMgbWV0aG9kcwogCi0gICAgICAgICAgICB2YXIgbG9hZGVyID0gbmV3IEZpbGVMb2FkZXIoIHRo
aXMubWFuYWdlciApOwotICAgICAgICAgICAgbG9hZGVyLnNldFJlc3BvbnNlVHlwZSggJ2FycmF5
YnVmZmVyJyApOworICAgIE9iamVjdC5hc3NpZ24oIEtleWZyYW1lVHJhY2ssIHsKIAotICAgICAg
ICAgICAgbG9hZGVyLmxvYWQoIHVybCwgZnVuY3Rpb24gKCBidWZmZXIgKSB7CisgICAgICAgIC8v
IFNlcmlhbGl6YXRpb24gKGluIHN0YXRpYyBjb250ZXh0LCBiZWNhdXNlIG9mIGNvbnN0cnVjdG9y
IGludm9jYXRpb24KKyAgICAgICAgLy8gYW5kIGF1dG9tYXRpYyBpbnZvY2F0aW9uIG9mIC50b0pT
T04pOgogCi0gICAgICAgICAgICAgICAgdmFyIHRleERhdGEgPSBzY29wZS5fcGFyc2VyKCBidWZm
ZXIgKTsKKyAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoIHRyYWNrICkgewogCi0gICAgICAgICAg
ICAgICAgaWYgKCAhIHRleERhdGEgKSByZXR1cm47CisgICAgICAgICAgICB2YXIgdHJhY2tUeXBl
ID0gdHJhY2suY29uc3RydWN0b3I7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHVuZGVmaW5lZCAh
PT0gdGV4RGF0YS5pbWFnZSApIHsKKyAgICAgICAgICAgIHZhciBqc29uOwogCi0gICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUuaW1hZ2UgPSB0ZXhEYXRhLmltYWdlOworICAgICAgICAgICAgLy8g
ZGVyaXZlZCBjbGFzc2VzIGNhbiBkZWZpbmUgYSBzdGF0aWMgdG9KU09OIG1ldGhvZAorICAgICAg
ICAgICAgaWYgKCB0cmFja1R5cGUudG9KU09OICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCB1bmRlZmluZWQgIT09IHRleERhdGEuZGF0YSApIHsKKyAgICAg
ICAgICAgICAgICBqc29uID0gdHJhY2tUeXBlLnRvSlNPTiggdHJhY2sgKTsKIAotICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLmltYWdlLndpZHRoID0gdGV4RGF0YS53aWR0aDsKLSAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS5pbWFnZS5oZWlnaHQgPSB0ZXhEYXRhLmhlaWdodDsKLSAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZS5pbWFnZS5kYXRhID0gdGV4RGF0YS5kYXRhOworICAgICAg
ICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBi
eSBkZWZhdWx0LCB3ZSBhc3N1bWUgdGhlIGRhdGEgY2FuIGJlIHNlcmlhbGl6ZWQgYXMtaXMKKyAg
ICAgICAgICAgICAgICBqc29uID0gewogCi0gICAgICAgICAgICAgICAgdGV4dHVyZS53cmFwUyA9
IHVuZGVmaW5lZCAhPT0gdGV4RGF0YS53cmFwUyA/IHRleERhdGEud3JhcFMgOiBDbGFtcFRvRWRn
ZVdyYXBwaW5nOwotICAgICAgICAgICAgICAgIHRleHR1cmUud3JhcFQgPSB1bmRlZmluZWQgIT09
IHRleERhdGEud3JhcFQgPyB0ZXhEYXRhLndyYXBUIDogQ2xhbXBUb0VkZ2VXcmFwcGluZzsKKyAg
ICAgICAgICAgICAgICAgICAgJ25hbWUnOiB0cmFjay5uYW1lLAorICAgICAgICAgICAgICAgICAg
ICAndGltZXMnOiBBbmltYXRpb25VdGlscy5jb252ZXJ0QXJyYXkoIHRyYWNrLnRpbWVzLCBBcnJh
eSApLAorICAgICAgICAgICAgICAgICAgICAndmFsdWVzJzogQW5pbWF0aW9uVXRpbHMuY29udmVy
dEFycmF5KCB0cmFjay52YWx1ZXMsIEFycmF5ICkKIAotICAgICAgICAgICAgICAgIHRleHR1cmUu
bWFnRmlsdGVyID0gdW5kZWZpbmVkICE9PSB0ZXhEYXRhLm1hZ0ZpbHRlciA/IHRleERhdGEubWFn
RmlsdGVyIDogTGluZWFyRmlsdGVyOwotICAgICAgICAgICAgICAgIHRleHR1cmUubWluRmlsdGVy
ID0gdW5kZWZpbmVkICE9PSB0ZXhEYXRhLm1pbkZpbHRlciA/IHRleERhdGEubWluRmlsdGVyIDog
TGluZWFyTWlwTWFwTGluZWFyRmlsdGVyOworICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlLmFuaXNvdHJvcHkgPSB1bmRlZmluZWQgIT09IHRleERhdGEuYW5pc290
cm9weSA/IHRleERhdGEuYW5pc290cm9weSA6IDE7CisgICAgICAgICAgICAgICAgdmFyIGludGVy
cG9sYXRpb24gPSB0cmFjay5nZXRJbnRlcnBvbGF0aW9uKCk7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoIHVuZGVmaW5lZCAhPT0gdGV4RGF0YS5mb3JtYXQgKSB7CisgICAgICAgICAgICAgICAgaWYg
KCBpbnRlcnBvbGF0aW9uICE9PSB0cmFjay5EZWZhdWx0SW50ZXJwb2xhdGlvbiApIHsKIAotICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLmZvcm1hdCA9IHRleERhdGEuZm9ybWF0OworICAgICAg
ICAgICAgICAgICAgICBqc29uLmludGVycG9sYXRpb24gPSBpbnRlcnBvbGF0aW9uOwogCiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICggdW5kZWZpbmVkICE9PSB0ZXhEYXRh
LnR5cGUgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS50eXBlID0gdGV4RGF0YS50
eXBlOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAganNv
bi50eXBlID0gdHJhY2suVmFsdWVUeXBlTmFtZTsgLy8gbWFuZGF0b3J5CiAKLSAgICAgICAgICAg
ICAgICBpZiAoIHVuZGVmaW5lZCAhPT0gdGV4RGF0YS5taXBtYXBzICkgeworICAgICAgICAgICAg
cmV0dXJuIGpzb247CiAKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5taXBtYXBzID0gdGV4
RGF0YS5taXBtYXBzOworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB9CisgICAgfSApOwog
Ci0gICAgICAgICAgICAgICAgaWYgKCAxID09PSB0ZXhEYXRhLm1pcG1hcENvdW50ICkgeworICAg
IE9iamVjdC5hc3NpZ24oIEtleWZyYW1lVHJhY2sucHJvdG90eXBlLCB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS5taW5GaWx0ZXIgPSBMaW5lYXJGaWx0ZXI7CisgICAgICAgIGNvbnN0
cnVjdG9yOiBLZXlmcmFtZVRyYWNrLAogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICBUaW1l
QnVmZmVyVHlwZTogRmxvYXQzMkFycmF5LAogCi0gICAgICAgICAgICAgICAgdGV4dHVyZS5uZWVk
c1VwZGF0ZSA9IHRydWU7CisgICAgICAgIFZhbHVlQnVmZmVyVHlwZTogRmxvYXQzMkFycmF5LAog
Ci0gICAgICAgICAgICAgICAgaWYgKCBvbkxvYWQgKSBvbkxvYWQoIHRleHR1cmUsIHRleERhdGEg
KTsKKyAgICAgICAgRGVmYXVsdEludGVycG9sYXRpb246IEludGVycG9sYXRlTGluZWFyLAogCi0g
ICAgICAgICAgICB9LCBvblByb2dyZXNzLCBvbkVycm9yICk7CisgICAgICAgIEludGVycG9sYW50
RmFjdG9yeU1ldGhvZERpc2NyZXRlOiBmdW5jdGlvbiAoIHJlc3VsdCApIHsKIAorICAgICAgICAg
ICAgcmV0dXJuIG5ldyBEaXNjcmV0ZUludGVycG9sYW50KCB0aGlzLnRpbWVzLCB0aGlzLnZhbHVl
cywgdGhpcy5nZXRWYWx1ZVNpemUoKSwgcmVzdWx0ICk7CiAKLSAgICAgICAgICAgIHJldHVybiB0
ZXh0dXJlOworICAgICAgICB9LAogCi0gICAgICAgIH0KKyAgICAgICAgSW50ZXJwb2xhbnRGYWN0
b3J5TWV0aG9kTGluZWFyOiBmdW5jdGlvbiAoIHJlc3VsdCApIHsKIAotICAgIH0gKTsKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgTGluZWFySW50ZXJwb2xhbnQoIHRoaXMudGltZXMsIHRoaXMudmFs
dWVzLCB0aGlzLmdldFZhbHVlU2l6ZSgpLCByZXN1bHQgKTsKIAotICAgIC8qKgotICAgICAqIEBh
dXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAgICovCisgICAgICAgIH0sCiAK
KyAgICAgICAgSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOiBmdW5jdGlvbiAoIHJlc3Vs
dCApIHsKIAotICAgIGZ1bmN0aW9uIEltYWdlTG9hZGVyKCBtYW5hZ2VyICkgeworICAgICAgICAg
ICAgcmV0dXJuIG5ldyBDdWJpY0ludGVycG9sYW50KCB0aGlzLnRpbWVzLCB0aGlzLnZhbHVlcywg
dGhpcy5nZXRWYWx1ZVNpemUoKSwgcmVzdWx0ICk7CiAKLSAgICAgICAgdGhpcy5tYW5hZ2VyID0g
KCBtYW5hZ2VyICE9PSB1bmRlZmluZWQgKSA/IG1hbmFnZXIgOiBEZWZhdWx0TG9hZGluZ01hbmFn
ZXI7CisgICAgICAgIH0sCiAKLSAgICB9CisgICAgICAgIHNldEludGVycG9sYXRpb246IGZ1bmN0
aW9uICggaW50ZXJwb2xhdGlvbiApIHsKIAotICAgIE9iamVjdC5hc3NpZ24oIEltYWdlTG9hZGVy
LnByb3RvdHlwZSwgeworICAgICAgICAgICAgdmFyIGZhY3RvcnlNZXRob2Q7CiAKLSAgICAgICAg
Y3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLAorICAgICAgICAgICAgc3dpdGNoICggaW50ZXJwb2xh
dGlvbiApIHsKIAotICAgICAgICBsb2FkOiBmdW5jdGlvbiAoIHVybCwgb25Mb2FkLCBvblByb2dy
ZXNzLCBvbkVycm9yICkgeworICAgICAgICAgICAgICAgIGNhc2UgSW50ZXJwb2xhdGVEaXNjcmV0
ZToKIAotICAgICAgICAgICAgaWYgKCB1cmwgPT09IHVuZGVmaW5lZCApIHVybCA9ICcnOworICAg
ICAgICAgICAgICAgICAgICBmYWN0b3J5TWV0aG9kID0gdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlN
ZXRob2REaXNjcmV0ZTsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLnBhdGggIT09IHVuZGVmaW5l
ZCApIHVybCA9IHRoaXMucGF0aCArIHVybDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgICAgIHVybCA9IHRoaXMubWFuYWdlci5yZXNvbHZlVVJMKCB1cmwgKTsKKyAgICAg
ICAgICAgICAgICBjYXNlIEludGVycG9sYXRlTGluZWFyOgogCi0gICAgICAgICAgICB2YXIgc2Nv
cGUgPSB0aGlzOworICAgICAgICAgICAgICAgICAgICBmYWN0b3J5TWV0aG9kID0gdGhpcy5JbnRl
cnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7CiAKLSAgICAgICAgICAgIHZhciBjYWNoZWQgPSBD
YWNoZS5nZXQoIHVybCApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAg
ICAgaWYgKCBjYWNoZWQgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICBjYXNlIElu
dGVycG9sYXRlU21vb3RoOgogCi0gICAgICAgICAgICAgICAgc2NvcGUubWFuYWdlci5pdGVtU3Rh
cnQoIHVybCApOworICAgICAgICAgICAgICAgICAgICBmYWN0b3J5TWV0aG9kID0gdGhpcy5JbnRl
cnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg7CiAKLSAgICAgICAgICAgICAgICBzZXRUaW1lb3V0
KCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAg
ICAgICAgICAgIGlmICggb25Mb2FkICkgb25Mb2FkKCBjYWNoZWQgKTsKKyAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApOworICAg
ICAgICAgICAgaWYgKCBmYWN0b3J5TWV0aG9kID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAg
ICAgICAgICB9LCAwICk7CisgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSAidW5zdXBwb3J0
ZWQgaW50ZXJwb2xhdGlvbiBmb3IgIiArCisgICAgICAgICAgICAgICAgICAgIHRoaXMuVmFsdWVU
eXBlTmFtZSArICIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIiArIHRoaXMubmFtZTsKIAotICAgICAg
ICAgICAgICAgIHJldHVybiBjYWNoZWQ7CisgICAgICAgICAgICAgICAgaWYgKCB0aGlzLmNyZWF0
ZUludGVycG9sYW50ID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgLy8gZmFsbCBiYWNrIHRvIGRlZmF1bHQsIHVubGVzcyB0aGUgZGVmYXVsdCBp
dHNlbGYgaXMgbWVzc2VkIHVwCisgICAgICAgICAgICAgICAgICAgIGlmICggaW50ZXJwb2xhdGlv
biAhPT0gdGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbiApIHsKIAotICAgICAgICAgICAgdmFyIGlt
YWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94
aHRtbCcsICdpbWcnICk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEludGVycG9s
YXRpb24oIHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24gKTsKIAotICAgICAgICAgICAgZnVuY3Rp
b24gb25JbWFnZUxvYWQoKSB7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAg
ICAgICAgICAgICBpbWFnZS5yZW1vdmVFdmVudExpc3RlbmVyKCAnbG9hZCcsIG9uSW1hZ2VMb2Fk
LCBmYWxzZSApOwotICAgICAgICAgICAgICAgIGltYWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdl
cnJvcicsIG9uSW1hZ2VFcnJvciwgZmFsc2UgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvciggbWVzc2FnZSApOyAvLyBmYXRhbCwgaW4gdGhpcyBjYXNlCiAKLSAgICAg
ICAgICAgICAgICBDYWNoZS5hZGQoIHVybCwgdGhpcyApOworICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBpZiAoIG9uTG9hZCApIG9uTG9hZCggdGhpcyApOworICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIuaXRlbUVuZCggdXJs
ICk7CisgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuS2V5ZnJhbWVUcmFjazon
LCBtZXNzYWdlICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgZnVuY3Rpb24gb25JbWFnZUVycm9yKCBldmVudCApIHsKKyAgICAg
ICAgICAgIHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQgPSBmYWN0b3J5TWV0aG9kOwogCi0gICAgICAg
ICAgICAgICAgaW1hZ2UucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2xvYWQnLCBvbkltYWdlTG9hZCwg
ZmFsc2UgKTsKLSAgICAgICAgICAgICAgICBpbWFnZS5yZW1vdmVFdmVudExpc3RlbmVyKCAnZXJy
b3InLCBvbkltYWdlRXJyb3IsIGZhbHNlICk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAot
ICAgICAgICAgICAgICAgIGlmICggb25FcnJvciApIG9uRXJyb3IoIGV2ZW50ICk7CisgICAgICAg
IH0sCiAKLSAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApOwotICAg
ICAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIuaXRlbUVycm9yKCB1cmwgKTsKKyAgICAgICAgZ2V0
SW50ZXJwb2xhdGlvbjogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBzd2l0Y2ggKCB0aGlzLmNyZWF0ZUludGVycG9sYW50ICkgewogCi0gICAgICAgICAgICBpbWFn
ZS5hZGRFdmVudExpc3RlbmVyKCAnbG9hZCcsIG9uSW1hZ2VMb2FkLCBmYWxzZSApOwotICAgICAg
ICAgICAgaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lciggJ2Vycm9yJywgb25JbWFnZUVycm9yLCBmYWxz
ZSApOworICAgICAgICAgICAgICAgIGNhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RE
aXNjcmV0ZToKIAotICAgICAgICAgICAgaWYgKCB1cmwuc3Vic3RyKCAwLCA1ICkgIT09ICdkYXRh
OicgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnRlcnBvbGF0ZURpc2NyZXRlOwog
Ci0gICAgICAgICAgICAgICAgaWYgKCB0aGlzLmNyb3NzT3JpZ2luICE9PSB1bmRlZmluZWQgKSBp
bWFnZS5jcm9zc09yaWdpbiA9IHRoaXMuY3Jvc3NPcmlnaW47CisgICAgICAgICAgICAgICAgY2Fz
ZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjoKIAotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW50ZXJwb2xhdGVMaW5lYXI7CiAKLSAgICAgICAg
ICAgIHNjb3BlLm1hbmFnZXIuaXRlbVN0YXJ0KCB1cmwgKTsKKyAgICAgICAgICAgICAgICBjYXNl
IHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOgogCi0gICAgICAgICAgICBpbWFn
ZS5zcmMgPSB1cmw7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnRlcnBvbGF0ZVNtb290
aDsKIAotICAgICAgICAgICAgcmV0dXJuIGltYWdlOworICAgICAgICAgICAgfQogCiAgICAgICAg
IH0sCiAKLSAgICAgICAgc2V0Q3Jvc3NPcmlnaW46IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAg
ICAgIGdldFZhbHVlU2l6ZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICB0aGlzLmNyb3Nz
T3JpZ2luID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLnZhbHVlcy5sZW5ndGggLyB0aGlzLnRpbWVzLmxlbmd0aDsKIAogICAgICAgICB9
LAogCi0gICAgICAgIHNldFBhdGg6IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAgICAgIC8vIG1v
dmUgYWxsIGtleWZyYW1lcyBlaXRoZXIgZm9yd2FyZHMgb3IgYmFja3dhcmRzIGluIHRpbWUKKyAg
ICAgICAgc2hpZnQ6IGZ1bmN0aW9uICggdGltZU9mZnNldCApIHsKIAotICAgICAgICAgICAgdGhp
cy5wYXRoID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIGlm
ICggdGltZU9mZnNldCAhPT0gMC4wICkgewogCi0gICAgICAgIH0KKyAgICAgICAgICAgICAgICB2
YXIgdGltZXMgPSB0aGlzLnRpbWVzOwogCi0gICAgfSApOworICAgICAgICAgICAgICAgIGZvciAo
IHZhciBpID0gMCwgbiA9IHRpbWVzLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHsKIAotICAgIC8q
KgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAgICovCisg
ICAgICAgICAgICAgICAgICAgIHRpbWVzWyBpIF0gKz0gdGltZU9mZnNldDsKIAorICAgICAgICAg
ICAgICAgIH0KIAotICAgIGZ1bmN0aW9uIEN1YmVUZXh0dXJlTG9hZGVyKCBtYW5hZ2VyICkgewor
ICAgICAgICAgICAgfQogCi0gICAgICAgIHRoaXMubWFuYWdlciA9ICggbWFuYWdlciAhPT0gdW5k
ZWZpbmVkICkgPyBtYW5hZ2VyIDogRGVmYXVsdExvYWRpbmdNYW5hZ2VyOworICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKLSAgICB9CisgICAgICAgIH0sCiAKLSAgICBPYmplY3QuYXNzaWduKCBD
dWJlVGV4dHVyZUxvYWRlci5wcm90b3R5cGUsIHsKKyAgICAgICAgLy8gc2NhbGUgYWxsIGtleWZy
YW1lIHRpbWVzIGJ5IGEgZmFjdG9yICh1c2VmdWwgZm9yIGZyYW1lIDwtPiBzZWNvbmRzIGNvbnZl
cnNpb25zKQorICAgICAgICBzY2FsZTogZnVuY3Rpb24gKCB0aW1lU2NhbGUgKSB7CiAKLSAgICAg
ICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLAorICAgICAgICAgICAgaWYgKCB0aW1lU2NhbGUg
IT09IDEuMCApIHsKIAotICAgICAgICBsb2FkOiBmdW5jdGlvbiAoIHVybHMsIG9uTG9hZCwgb25Q
cm9ncmVzcywgb25FcnJvciApIHsKKyAgICAgICAgICAgICAgICB2YXIgdGltZXMgPSB0aGlzLnRp
bWVzOwogCi0gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBDdWJlVGV4dHVyZSgpOworICAg
ICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbiA9IHRpbWVzLmxlbmd0aDsgaSAhPT0gbjsg
KysgaSApIHsKIAotICAgICAgICAgICAgdmFyIGxvYWRlciA9IG5ldyBJbWFnZUxvYWRlciggdGhp
cy5tYW5hZ2VyICk7Ci0gICAgICAgICAgICBsb2FkZXIuc2V0Q3Jvc3NPcmlnaW4oIHRoaXMuY3Jv
c3NPcmlnaW4gKTsKLSAgICAgICAgICAgIGxvYWRlci5zZXRQYXRoKCB0aGlzLnBhdGggKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGltZXNbIGkgXSAqPSB0aW1lU2NhbGU7CiAKLSAgICAgICAgICAg
IHZhciBsb2FkZWQgPSAwOwotCi0gICAgICAgICAgICBmdW5jdGlvbiBsb2FkVGV4dHVyZSggaSAp
IHsKLQotICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkKCB1cmxzWyBpIF0sIGZ1bmN0aW9uICgg
aW1hZ2UgKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHRleHR1
cmUuaW1hZ2VzWyBpIF0gPSBpbWFnZTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
ICAgICBsb2FkZWQgKys7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAg
ICAgICAgICBpZiAoIGxvYWRlZCA9PT0gNiApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgICAgIC8vIHJlbW92
ZXMga2V5ZnJhbWVzIGJlZm9yZSBhbmQgYWZ0ZXIgYW5pbWF0aW9uIHdpdGhvdXQgY2hhbmdpbmcg
YW55IHZhbHVlcyB3aXRoaW4gdGhlIHJhbmdlIFtzdGFydFRpbWUsIGVuZFRpbWVdLgorICAgICAg
ICAvLyBJTVBPUlRBTlQ6IFdlIGRvIG5vdCBzaGlmdCBhcm91bmQga2V5cyB0byB0aGUgc3RhcnQg
b2YgdGhlIHRyYWNrIHRpbWUsIGJlY2F1c2UgZm9yIGludGVycG9sYXRlZCBrZXlzIHRoaXMgd2ls
bCBjaGFuZ2UgdGhlaXIgdmFsdWVzCisgICAgICAgIHRyaW06IGZ1bmN0aW9uICggc3RhcnRUaW1l
LCBlbmRUaW1lICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9uTG9hZCApIG9u
TG9hZCggdGV4dHVyZSApOworICAgICAgICAgICAgdmFyIHRpbWVzID0gdGhpcy50aW1lcywKKyAg
ICAgICAgICAgICAgICBuS2V5cyA9IHRpbWVzLmxlbmd0aCwKKyAgICAgICAgICAgICAgICBmcm9t
ID0gMCwKKyAgICAgICAgICAgICAgICB0byA9IG5LZXlzIC0gMTsKIAotICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB3aGlsZSAoIGZyb20gIT09IG5LZXlzICYmIHRpbWVzWyBmcm9t
IF0gPCBzdGFydFRpbWUgKSB7CiAKLSAgICAgICAgICAgICAgICB9LCB1bmRlZmluZWQsIG9uRXJy
b3IgKTsKKyAgICAgICAgICAgICAgICArKyBmcm9tOwogCiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IHVybHMubGVuZ3RoOyArKyBpICkgeworICAgICAg
ICAgICAgd2hpbGUgKCB0byAhPT0gLSAxICYmIHRpbWVzWyB0byBdID4gZW5kVGltZSApIHsKIAot
ICAgICAgICAgICAgICAgIGxvYWRUZXh0dXJlKCBpICk7CisgICAgICAgICAgICAgICAgLS0gdG87
CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7Ci0KLSAgICAg
ICAgfSwKKyAgICAgICAgICAgICsrIHRvOyAvLyBpbmNsdXNpdmUgLT4gZXhjbHVzaXZlIGJvdW5k
CiAKLSAgICAgICAgc2V0Q3Jvc3NPcmlnaW46IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAgICAg
ICAgICBpZiAoIGZyb20gIT09IDAgfHwgdG8gIT09IG5LZXlzICkgewogCi0gICAgICAgICAgICB0
aGlzLmNyb3NzT3JpZ2luID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgICAgICAgICAvLyBlbXB0eSB0cmFja3MgYXJlIGZvcmJpZGRlbiwgc28ga2VlcCBhdCBsZWFz
dCBvbmUga2V5ZnJhbWUKKyAgICAgICAgICAgICAgICBpZiAoIGZyb20gPj0gdG8gKSB0byA9IE1h
dGgubWF4KCB0bywgMSApLCBmcm9tID0gdG8gLSAxOwogCi0gICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgdmFyIHN0cmlkZSA9IHRoaXMuZ2V0VmFsdWVTaXplKCk7CisgICAgICAgICAgICAgICAg
dGhpcy50aW1lcyA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UoIHRpbWVzLCBmcm9tLCB0byAp
OworICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGlj
ZSggdGhpcy52YWx1ZXMsIGZyb20gKiBzdHJpZGUsIHRvICogc3RyaWRlICk7CiAKLSAgICAgICAg
c2V0UGF0aDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgdGhpcy5wYXRoID0gdmFsdWU7CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAg
ICB9Ci0KLSAgICB9ICk7Ci0KLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6
Ly9tcmRvb2IuY29tLwotICAgICAqLworICAgICAgICB9LAogCisgICAgICAgIC8vIGVuc3VyZSB3
ZSBkbyBub3QgZ2V0IGEgR2FyYmFnZUluR2FyYmFnZU91dCBzaXR1YXRpb24sIG1ha2Ugc3VyZSB0
cmFja3MgYXJlIGF0IGxlYXN0IG1pbmltYWxseSB2aWFibGUKKyAgICAgICAgdmFsaWRhdGU6IGZ1
bmN0aW9uICgpIHsKIAotICAgIGZ1bmN0aW9uIFRleHR1cmVMb2FkZXIoIG1hbmFnZXIgKSB7Cisg
ICAgICAgICAgICB2YXIgdmFsaWQgPSB0cnVlOwogCi0gICAgICAgIHRoaXMubWFuYWdlciA9ICgg
bWFuYWdlciAhPT0gdW5kZWZpbmVkICkgPyBtYW5hZ2VyIDogRGVmYXVsdExvYWRpbmdNYW5hZ2Vy
OworICAgICAgICAgICAgdmFyIHZhbHVlU2l6ZSA9IHRoaXMuZ2V0VmFsdWVTaXplKCk7CisgICAg
ICAgICAgICBpZiAoIHZhbHVlU2l6ZSAtIE1hdGguZmxvb3IoIHZhbHVlU2l6ZSApICE9PSAwICkg
ewogCi0gICAgfQorICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5LZXlmcmFt
ZVRyYWNrOiBJbnZhbGlkIHZhbHVlIHNpemUgaW4gdHJhY2suJywgdGhpcyApOworICAgICAgICAg
ICAgICAgIHZhbGlkID0gZmFsc2U7CiAKLSAgICBPYmplY3QuYXNzaWduKCBUZXh0dXJlTG9hZGVy
LnByb3RvdHlwZSwgeworICAgICAgICAgICAgfQogCi0gICAgICAgIGNyb3NzT3JpZ2luOiAnYW5v
bnltb3VzJywKKyAgICAgICAgICAgIHZhciB0aW1lcyA9IHRoaXMudGltZXMsCisgICAgICAgICAg
ICAgICAgdmFsdWVzID0gdGhpcy52YWx1ZXMsCiAKLSAgICAgICAgbG9hZDogZnVuY3Rpb24gKCB1
cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHsKKyAgICAgICAgICAgICAgICBuS2V5
cyA9IHRpbWVzLmxlbmd0aDsKIAotICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVy
ZSgpOworICAgICAgICAgICAgaWYgKCBuS2V5cyA9PT0gMCApIHsKIAotICAgICAgICAgICAgdmFy
IGxvYWRlciA9IG5ldyBJbWFnZUxvYWRlciggdGhpcy5tYW5hZ2VyICk7Ci0gICAgICAgICAgICBs
b2FkZXIuc2V0Q3Jvc3NPcmlnaW4oIHRoaXMuY3Jvc3NPcmlnaW4gKTsKLSAgICAgICAgICAgIGxv
YWRlci5zZXRQYXRoKCB0aGlzLnBhdGggKTsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9y
KCAnVEhSRUUuS2V5ZnJhbWVUcmFjazogVHJhY2sgaXMgZW1wdHkuJywgdGhpcyApOworICAgICAg
ICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAKLSAgICAgICAgICAgIGxvYWRlci5sb2FkKCB1cmws
IGZ1bmN0aW9uICggaW1hZ2UgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0
ZXh0dXJlLmltYWdlID0gaW1hZ2U7CisgICAgICAgICAgICB2YXIgcHJldlRpbWUgPSBudWxsOwog
Ci0gICAgICAgICAgICAgICAgLy8gSlBFR3MgY2FuJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBz
byBtZW1vcnkgY2FuIGJlIHNhdmVkIGJ5IHN0b3JpbmcgdGhlbSBhcyBSR0IuCi0gICAgICAgICAg
ICAgICAgdmFyIGlzSlBFRyA9IHVybC5zZWFyY2goIC9cLihqcGd8anBlZykkLyApID4gMCB8fCB1
cmwuc2VhcmNoKCAvXmRhdGFcOmltYWdlXC9qcGVnLyApID09PSAwOworICAgICAgICAgICAgZm9y
ICggdmFyIGkgPSAwOyBpICE9PSBuS2V5czsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgIHRl
eHR1cmUuZm9ybWF0ID0gaXNKUEVHID8gUkdCRm9ybWF0IDogUkdCQUZvcm1hdDsKLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB2YXIg
Y3VyclRpbWUgPSB0aW1lc1sgaSBdOwogCi0gICAgICAgICAgICAgICAgaWYgKCBvbkxvYWQgIT09
IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjdXJyVGltZSA9PT0g
J251bWJlcicgJiYgaXNOYU4oIGN1cnJUaW1lICkgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
b25Mb2FkKCB0ZXh0dXJlICk7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdU
SFJFRS5LZXlmcmFtZVRyYWNrOiBUaW1lIGlzIG5vdCBhIHZhbGlkIG51bWJlci4nLCB0aGlzLCBp
LCBjdXJyVGltZSApOworICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
fSwgb25Qcm9ncmVzcywgb25FcnJvciApOworICAgICAgICAgICAgICAgIGlmICggcHJldlRpbWUg
IT09IG51bGwgJiYgcHJldlRpbWUgPiBjdXJyVGltZSApIHsKIAotICAgICAgICAgICAgcmV0dXJu
IHRleHR1cmU7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5LZXlm
cmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4nLCB0aGlzLCBpLCBjdXJyVGltZSwgcHJldlRp
bWUgKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
c2V0Q3Jvc3NPcmlnaW46IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgcHJl
dlRpbWUgPSBjdXJyVGltZTsKIAotICAgICAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHZhbHVl
OwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgfSwK
KyAgICAgICAgICAgIGlmICggdmFsdWVzICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgc2V0
UGF0aDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIEFuaW1hdGlv
blV0aWxzLmlzVHlwZWRBcnJheSggdmFsdWVzICkgKSB7CiAKLSAgICAgICAgICAgIHRoaXMucGF0
aCA9IHZhbHVlOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAg
IGZvciAoIHZhciBpID0gMCwgbiA9IHZhbHVlcy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7CiAK
LSAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdmFsdWVzWyBp
IF07CiAKLSAgICB9ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzTmFOKCB2YWx1
ZSApICkgewogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciB6ejg1IC8gaHR0cDovL3d3dy5sYWI0
Z2FtZXMubmV0L3p6ODUvYmxvZwotICAgICAqIEV4dGVuc2libGUgY3VydmUgb2JqZWN0Ci0gICAg
ICoKLSAgICAgKiBTb21lIGNvbW1vbiBvZiBjdXJ2ZSBtZXRob2RzOgotICAgICAqIC5nZXRQb2lu
dCggdCwgb3B0aW9uYWxUYXJnZXQgKSwgLmdldFRhbmdlbnQoIHQgKQotICAgICAqIC5nZXRQb2lu
dEF0KCB1LCBvcHRpb25hbFRhcmdldCApLCAuZ2V0VGFuZ2VudEF0KCB1ICkKLSAgICAgKiAuZ2V0
UG9pbnRzKCksIC5nZXRTcGFjZWRQb2ludHMoKQotICAgICAqIC5nZXRMZW5ndGgoKQotICAgICAq
IC51cGRhdGVBcmNMZW5ndGhzKCkKLSAgICAgKgotICAgICAqIFRoaXMgZm9sbG93aW5nIGN1cnZl
cyBpbmhlcml0IGZyb20gVEhSRUUuQ3VydmU6Ci0gICAgICoKLSAgICAgKiAtLSAyRCBjdXJ2ZXMg
LS0KLSAgICAgKiBUSFJFRS5BcmNDdXJ2ZQotICAgICAqIFRIUkVFLkN1YmljQmV6aWVyQ3VydmUK
LSAgICAgKiBUSFJFRS5FbGxpcHNlQ3VydmUKLSAgICAgKiBUSFJFRS5MaW5lQ3VydmUKLSAgICAg
KiBUSFJFRS5RdWFkcmF0aWNCZXppZXJDdXJ2ZQotICAgICAqIFRIUkVFLlNwbGluZUN1cnZlCi0g
ICAgICoKLSAgICAgKiAtLSAzRCBjdXJ2ZXMgLS0KLSAgICAgKiBUSFJFRS5DYXRtdWxsUm9tQ3Vy
dmUzCi0gICAgICogVEhSRUUuQ3ViaWNCZXppZXJDdXJ2ZTMKLSAgICAgKiBUSFJFRS5MaW5lQ3Vy
dmUzCi0gICAgICogVEhSRUUuUXVhZHJhdGljQmV6aWVyQ3VydmUzCi0gICAgICoKLSAgICAgKiBB
IHNlcmllcyBvZiBjdXJ2ZXMgY2FuIGJlIHJlcHJlc2VudGVkIGFzIGEgVEhSRUUuQ3VydmVQYXRo
LgotICAgICAqCi0gICAgICoqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUu
ZXJyb3IoICdUSFJFRS5LZXlmcmFtZVRyYWNrOiBWYWx1ZSBpcyBub3QgYSB2YWxpZCBudW1iZXIu
JywgdGhpcywgaSwgdmFsdWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ci0gICAgICogIEFic3RyYWN0IEN1cnZlIGJhc2UgY2xhc3MKLSAgICAgKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAKLSAgICBmdW5jdGlvbiBDdXJ2ZSgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgIHRoaXMudHlwZSA9ICdDdXJ2ZSc7CisgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zID0gMjAwOworICAgICAgICAg
ICAgfQogCi0gICAgfQorICAgICAgICAgICAgcmV0dXJuIHZhbGlkOwogCi0gICAgT2JqZWN0LmFz
c2lnbiggQ3VydmUucHJvdG90eXBlLCB7CisgICAgICAgIH0sCiAKLSAgICAgICAgLy8gVmlydHVh
bCBiYXNlIGNsYXNzIG1ldGhvZCB0byBvdmVyd3JpdGUgYW5kIGltcGxlbWVudCBpbiBzdWJjbGFz
c2VzCi0gICAgICAgIC8vICAtIHQgWzAgLi4gMV0KKyAgICAgICAgLy8gcmVtb3ZlcyBlcXVpdmFs
ZW50IHNlcXVlbnRpYWwga2V5cyBhcyBjb21tb24gaW4gbW9ycGggdGFyZ2V0IHNlcXVlbmNlcwor
ICAgICAgICAvLyAoMCwwLDAsMCwxLDEsMSwwLDAsMCwwLDAsMCwwKSAtLT4gKDAsMCwxLDEsMCww
KQorICAgICAgICBvcHRpbWl6ZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgIGdldFBvaW50OiBm
dW5jdGlvbiAoIC8qIHQsIG9wdGlvbmFsVGFyZ2V0ICovICkgeworICAgICAgICAgICAgdmFyIHRp
bWVzID0gdGhpcy50aW1lcywKKyAgICAgICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLnZhbHVlcywK
KyAgICAgICAgICAgICAgICBzdHJpZGUgPSB0aGlzLmdldFZhbHVlU2l6ZSgpLAogCi0gICAgICAg
ICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5DdXJ2ZTogLmdldFBvaW50KCkgbm90IGltcGxlbWVu
dGVkLicgKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIHNtb290
aEludGVycG9sYXRpb24gPSB0aGlzLmdldEludGVycG9sYXRpb24oKSA9PT0gSW50ZXJwb2xhdGVT
bW9vdGgsCiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB3cml0ZUluZGV4ID0gMSwKKyAg
ICAgICAgICAgICAgICBsYXN0SW5kZXggPSB0aW1lcy5sZW5ndGggLSAxOwogCi0gICAgICAgIC8v
IEdldCBwb2ludCBhdCByZWxhdGl2ZSBwb3NpdGlvbiBpbiBjdXJ2ZSBhY2NvcmRpbmcgdG8gYXJj
IGxlbmd0aAotICAgICAgICAvLyAtIHUgWzAgLi4gMV0KKyAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gMTsgaSA8IGxhc3RJbmRleDsgKysgaSApIHsKIAotICAgICAgICBnZXRQb2ludEF0OiBmdW5j
dGlvbiAoIHUsIG9wdGlvbmFsVGFyZ2V0ICkgeworICAgICAgICAgICAgICAgIHZhciBrZWVwID0g
ZmFsc2U7CiAKLSAgICAgICAgICAgIHZhciB0ID0gdGhpcy5nZXRVdG9UbWFwcGluZyggdSApOwot
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9pbnQoIHQsIG9wdGlvbmFsVGFyZ2V0ICk7Cisg
ICAgICAgICAgICAgICAgdmFyIHRpbWUgPSB0aW1lc1sgaSBdOworICAgICAgICAgICAgICAgIHZh
ciB0aW1lTmV4dCA9IHRpbWVzWyBpICsgMSBdOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgLy8gcmVtb3ZlIGFkamFjZW50IGtleWZyYW1lcyBzY2hlZHVsZWQgYXQgdGhlIHNhbWUgdGlt
ZQogCi0gICAgICAgIC8vIEdldCBzZXF1ZW5jZSBvZiBwb2ludHMgdXNpbmcgZ2V0UG9pbnQoIHQg
KQorICAgICAgICAgICAgICAgIGlmICggdGltZSAhPT0gdGltZU5leHQgJiYgKCBpICE9PSAxIHx8
IHRpbWUgIT09IHRpbWVbIDAgXSApICkgewogCi0gICAgICAgIGdldFBvaW50czogZnVuY3Rpb24g
KCBkaXZpc2lvbnMgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggISBzbW9vdGhJbnRlcnBv
bGF0aW9uICkgewogCi0gICAgICAgICAgICBpZiAoIGRpdmlzaW9ucyA9PT0gdW5kZWZpbmVkICkg
ZGl2aXNpb25zID0gNTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB1bm5lY2Vz
c2FyeSBrZXlmcmFtZXMgc2FtZSBhcyB0aGVpciBuZWlnaGJvcnMKIAotICAgICAgICAgICAgdmFy
IHBvaW50cyA9IFtdOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IGkgKiBz
dHJpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0UCA9IG9mZnNldCAtIHN0
cmlkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXROID0gb2Zmc2V0ICsgc3Ry
aWRlOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgZCA9IDA7IGQgPD0gZGl2aXNpb25zOyBkICsr
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGogPSAwOyBqICE9PSBzdHJp
ZGU7ICsrIGogKSB7CiAKLSAgICAgICAgICAgICAgICBwb2ludHMucHVzaCggdGhpcy5nZXRQb2lu
dCggZCAvIGRpdmlzaW9ucyApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZh
bHVlID0gdmFsdWVzWyBvZmZzZXQgKyBqIF07CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICE9PSB2YWx1ZXNbIG9mZnNldFAgKyBqIF0gfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09IHZhbHVlc1sgb2Zmc2V0
TiArIGogXSApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHBvaW50czsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga2VlcCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgIC8vIEdldCBzZXF1ZW5jZSBvZiBwb2ludHMgdXNpbmcgZ2V0UG9pbnRBdCgg
dSApCisgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgZ2V0U3BhY2VkUG9pbnRz
OiBmdW5jdGlvbiAoIGRpdmlzaW9ucyApIHsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
IAotICAgICAgICAgICAgaWYgKCBkaXZpc2lvbnMgPT09IHVuZGVmaW5lZCApIGRpdmlzaW9ucyA9
IDU7CisgICAgICAgICAgICAgICAgICAgICAgICBrZWVwID0gdHJ1ZTsKIAotICAgICAgICAgICAg
dmFyIHBvaW50cyA9IFtdOworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZv
ciAoIHZhciBkID0gMDsgZCA8PSBkaXZpc2lvbnM7IGQgKysgKSB7CisgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goIHRoaXMuZ2V0UG9pbnRBdCggZCAvIGRp
dmlzaW9ucyApICk7CisgICAgICAgICAgICAgICAgLy8gaW4tcGxhY2UgY29tcGFjdGlvbgogCi0g
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCBrZWVwICkgewogCi0gICAgICAgICAg
ICByZXR1cm4gcG9pbnRzOworICAgICAgICAgICAgICAgICAgICBpZiAoIGkgIT09IHdyaXRlSW5k
ZXggKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzWyB3cml0
ZUluZGV4IF0gPSB0aW1lc1sgaSBdOwogCi0gICAgICAgIC8vIEdldCB0b3RhbCBjdXJ2ZSBhcmMg
bGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZE9mZnNldCA9IGkgKiBzdHJp
ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVPZmZzZXQgPSB3cml0ZUluZGV4
ICogc3RyaWRlOwogCi0gICAgICAgIGdldExlbmd0aDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggdmFyIGogPSAwOyBqICE9PSBzdHJpZGU7ICsrIGogKSB7CiAK
LSAgICAgICAgICAgIHZhciBsZW5ndGhzID0gdGhpcy5nZXRMZW5ndGhzKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gbGVuZ3Roc1sgbGVuZ3Rocy5sZW5ndGggLSAxIF07CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWVzWyB3cml0ZU9mZnNldCArIGogXSA9IHZhbHVlc1sgcmVhZE9mZnNl
dCArIGogXTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgIC8vIEdldCBsaXN0IG9mIGN1bXVsYXRpdmUgc2VnbWVudCBsZW5ndGhzCisgICAgICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICBnZXRMZW5ndGhzOiBmdW5jdGlvbiAoIGRpdmlzaW9ucyAp
IHsKKyAgICAgICAgICAgICAgICAgICAgKysgd3JpdGVJbmRleDsKIAotICAgICAgICAgICAgaWYg
KCBkaXZpc2lvbnMgPT09IHVuZGVmaW5lZCApIGRpdmlzaW9ucyA9IHRoaXMuYXJjTGVuZ3RoRGl2
aXNpb25zOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCB0aGlzLmNhY2hl
QXJjTGVuZ3RocyAmJgotICAgICAgICAgICAgICAgICggdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVu
Z3RoID09PSBkaXZpc2lvbnMgKyAxICkgJiYKLSAgICAgICAgICAgICAgICAhIHRoaXMubmVlZHNV
cGRhdGUgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5j
YWNoZUFyY0xlbmd0aHM7CisgICAgICAgICAgICAvLyBmbHVzaCBsYXN0IGtleWZyYW1lIChjb21w
YWN0aW9uIGxvb2tzIGFoZWFkKQogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIGxh
c3RJbmRleCA+IDAgKSB7CiAKLSAgICAgICAgICAgIHRoaXMubmVlZHNVcGRhdGUgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICB0aW1lc1sgd3JpdGVJbmRleCBdID0gdGltZXNbIGxhc3RJbmRleCBd
OwogCi0gICAgICAgICAgICB2YXIgY2FjaGUgPSBbXTsKLSAgICAgICAgICAgIHZhciBjdXJyZW50
LCBsYXN0ID0gdGhpcy5nZXRQb2ludCggMCApOwotICAgICAgICAgICAgdmFyIHAsIHN1bSA9IDA7
CisgICAgICAgICAgICAgICAgZm9yICggdmFyIHJlYWRPZmZzZXQgPSBsYXN0SW5kZXggKiBzdHJp
ZGUsIHdyaXRlT2Zmc2V0ID0gd3JpdGVJbmRleCAqIHN0cmlkZSwgaiA9IDA7IGogIT09IHN0cmlk
ZTsgKysgaiApIHsKIAotICAgICAgICAgICAgY2FjaGUucHVzaCggMCApOworICAgICAgICAgICAg
ICAgICAgICB2YWx1ZXNbIHdyaXRlT2Zmc2V0ICsgaiBdID0gdmFsdWVzWyByZWFkT2Zmc2V0ICsg
aiBdOwogCi0gICAgICAgICAgICBmb3IgKCBwID0gMTsgcCA8PSBkaXZpc2lvbnM7IHAgKysgKSB7
CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgY3VycmVudCA9IHRoaXMuZ2V0
UG9pbnQoIHAgLyBkaXZpc2lvbnMgKTsKLSAgICAgICAgICAgICAgICBzdW0gKz0gY3VycmVudC5k
aXN0YW5jZVRvKCBsYXN0ICk7Ci0gICAgICAgICAgICAgICAgY2FjaGUucHVzaCggc3VtICk7Ci0g
ICAgICAgICAgICAgICAgbGFzdCA9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgKysgd3JpdGVJ
bmRleDsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLmNhY2hlQXJjTGVuZ3Ro
cyA9IGNhY2hlOwotCi0gICAgICAgICAgICByZXR1cm4gY2FjaGU7IC8vIHsgc3VtczogY2FjaGUs
IHN1bTogc3VtIH07IFN1bSBpcyBpbiB0aGUgbGFzdCBlbGVtZW50LgorICAgICAgICAgICAgaWYg
KCB3cml0ZUluZGV4ICE9PSB0aW1lcy5sZW5ndGggKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICB0aGlzLnRpbWVzID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSggdGltZXMsIDAs
IHdyaXRlSW5kZXggKTsKKyAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IEFuaW1hdGlvblV0
aWxzLmFycmF5U2xpY2UoIHZhbHVlcywgMCwgd3JpdGVJbmRleCAqIHN0cmlkZSApOwogCi0gICAg
ICAgIHVwZGF0ZUFyY0xlbmd0aHM6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgdGhpcy5uZWVkc1VwZGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICB0aGlzLmdldExl
bmd0aHMoKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAg
ICAgLy8gR2l2ZW4gdSAoIDAgLi4gMSApLCBnZXQgYSB0IHRvIGZpbmQgcC4gVGhpcyBnaXZlcyB5
b3UgcG9pbnRzIHdoaWNoIGFyZSBlcXVpZGlzdGFudAotCi0gICAgICAgIGdldFV0b1RtYXBwaW5n
OiBmdW5jdGlvbiAoIHUsIGRpc3RhbmNlICkgeworICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkg
ewogCi0gICAgICAgICAgICB2YXIgYXJjTGVuZ3RocyA9IHRoaXMuZ2V0TGVuZ3RocygpOworICAg
ICAgICAgICAgdmFyIHRpbWVzID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSggdGhpcy50aW1l
cywgMCApOworICAgICAgICAgICAgdmFyIHZhbHVlcyA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xp
Y2UoIHRoaXMudmFsdWVzLCAwICk7CiAKLSAgICAgICAgICAgIHZhciBpID0gMCwgaWwgPSBhcmNM
ZW5ndGhzLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBUeXBlZEtleWZyYW1lVHJhY2sgPSB0aGlz
LmNvbnN0cnVjdG9yOworICAgICAgICAgICAgdmFyIHRyYWNrID0gbmV3IFR5cGVkS2V5ZnJhbWVU
cmFjayggdGhpcy5uYW1lLCB0aW1lcywgdmFsdWVzICk7CiAKLSAgICAgICAgICAgIHZhciB0YXJn
ZXRBcmNMZW5ndGg7IC8vIFRoZSB0YXJnZXRlZCB1IGRpc3RhbmNlIHZhbHVlIHRvIGdldAorICAg
ICAgICAgICAgLy8gSW50ZXJwb2xhbnQgYXJndW1lbnQgdG8gY29uc3RydWN0b3IgaXMgbm90IHNh
dmVkLCBzbyBjb3B5IHRoZSBmYWN0b3J5IG1ldGhvZCBkaXJlY3RseS4KKyAgICAgICAgICAgIHRy
YWNrLmNyZWF0ZUludGVycG9sYW50ID0gdGhpcy5jcmVhdGVJbnRlcnBvbGFudDsKIAotICAgICAg
ICAgICAgaWYgKCBkaXN0YW5jZSApIHsKKyAgICAgICAgICAgIHJldHVybiB0cmFjazsKIAotICAg
ICAgICAgICAgICAgIHRhcmdldEFyY0xlbmd0aCA9IGRpc3RhbmNlOworICAgICAgICB9CiAKLSAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgfSApOwogCi0gICAgICAgICAgICAgICAgdGFyZ2V0QXJj
TGVuZ3RoID0gdSAqIGFyY0xlbmd0aHNbIGlsIC0gMSBdOworICAgIC8qKgorICAgICAqCisgICAg
ICogQSBUcmFjayBvZiBCb29sZWFuIGtleWZyYW1lIHZhbHVlcy4KKyAgICAgKgorICAgICAqCisg
ICAgICogQGF1dGhvciBCZW4gSG91c3RvbiAvIGh0dHA6Ly9jbGFyYS5pby8KKyAgICAgKiBAYXV0
aG9yIERhdmlkIFNhcm5vIC8gaHR0cDovL2xpZ2h0aGF1cy51cy8KKyAgICAgKiBAYXV0aG9yIHRz
Y2h3CisgICAgICovCiAKLSAgICAgICAgICAgIH0KKyAgICBmdW5jdGlvbiBCb29sZWFuS2V5ZnJh
bWVUcmFjayggbmFtZSwgdGltZXMsIHZhbHVlcyApIHsKIAotICAgICAgICAgICAgLy8gYmluYXJ5
IHNlYXJjaCBmb3IgdGhlIGluZGV4IHdpdGggbGFyZ2VzdCB2YWx1ZSBzbWFsbGVyIHRoYW4gdGFy
Z2V0IHUgZGlzdGFuY2UKKyAgICAgICAgS2V5ZnJhbWVUcmFjay5jYWxsKCB0aGlzLCBuYW1lLCB0
aW1lcywgdmFsdWVzICk7CiAKLSAgICAgICAgICAgIHZhciBsb3cgPSAwLCBoaWdoID0gaWwgLSAx
LCBjb21wYXJpc29uOworICAgIH0KIAotICAgICAgICAgICAgd2hpbGUgKCBsb3cgPD0gaGlnaCAp
IHsKKyAgICBCb29sZWFuS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBP
YmplY3QuY3JlYXRlKCBLZXlmcmFtZVRyYWNrLnByb3RvdHlwZSApLCB7CiAKLSAgICAgICAgICAg
ICAgICBpID0gTWF0aC5mbG9vciggbG93ICsgKCBoaWdoIC0gbG93ICkgLyAyICk7IC8vIGxlc3Mg
bGlrZWx5IHRvIG92ZXJmbG93LCB0aG91Z2ggcHJvYmFibHkgbm90IGlzc3VlIGhlcmUsIEpTIGRv
ZXNuJ3QgcmVhbGx5IGhhdmUgaW50ZWdlcnMsIGFsbCBudW1iZXJzIGFyZSBmbG9hdHMKKyAgICAg
ICAgY29uc3RydWN0b3I6IEJvb2xlYW5LZXlmcmFtZVRyYWNrLAogCi0gICAgICAgICAgICAgICAg
Y29tcGFyaXNvbiA9IGFyY0xlbmd0aHNbIGkgXSAtIHRhcmdldEFyY0xlbmd0aDsKKyAgICAgICAg
VmFsdWVUeXBlTmFtZTogJ2Jvb2wnLAorICAgICAgICBWYWx1ZUJ1ZmZlclR5cGU6IEFycmF5LAog
Ci0gICAgICAgICAgICAgICAgaWYgKCBjb21wYXJpc29uIDwgMCApIHsKKyAgICAgICAgRGVmYXVs
dEludGVycG9sYXRpb246IEludGVycG9sYXRlRGlzY3JldGUsCiAKLSAgICAgICAgICAgICAgICAg
ICAgbG93ID0gaSArIDE7CisgICAgICAgIEludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjog
dW5kZWZpbmVkLAorICAgICAgICBJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg6IHVuZGVm
aW5lZAogCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY29tcGFyaXNvbiA+IDAgKSB7Cisg
ICAgICAgIC8vIE5vdGU6IEFjdHVhbGx5IHRoaXMgdHJhY2sgY291bGQgaGF2ZSBhIG9wdGltaXpl
ZCAvIGNvbXByZXNzZWQKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgdmFs
dWUgYW5kIGEgY3VzdG9tIGludGVycG9sYW50IHRoYXQKKyAgICAgICAgLy8gY29tcHV0ZXMgImZp
cnN0VmFsdWUgXiBpc09kZCggaW5kZXggKSIuCiAKLSAgICAgICAgICAgICAgICAgICAgaGlnaCA9
IGkgLSAxOworICAgIH0gKTsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgLyoqCisg
ICAgICoKKyAgICAgKiBBIFRyYWNrIG9mIGtleWZyYW1lIHZhbHVlcyB0aGF0IHJlcHJlc2VudCBj
b2xvci4KKyAgICAgKgorICAgICAqCisgICAgICogQGF1dGhvciBCZW4gSG91c3RvbiAvIGh0dHA6
Ly9jbGFyYS5pby8KKyAgICAgKiBAYXV0aG9yIERhdmlkIFNhcm5vIC8gaHR0cDovL2xpZ2h0aGF1
cy51cy8KKyAgICAgKiBAYXV0aG9yIHRzY2h3CisgICAgICovCiAKLSAgICAgICAgICAgICAgICAg
ICAgaGlnaCA9IGk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgIGZ1bmN0aW9uIENv
bG9yS2V5ZnJhbWVUcmFjayggbmFtZSwgdGltZXMsIHZhbHVlcywgaW50ZXJwb2xhdGlvbiApIHsK
IAotICAgICAgICAgICAgICAgICAgICAvLyBET05FCisgICAgICAgIEtleWZyYW1lVHJhY2suY2Fs
bCggdGhpcywgbmFtZSwgdGltZXMsIHZhbHVlcywgaW50ZXJwb2xhdGlvbiApOwogCi0gICAgICAg
ICAgICAgICAgfQorICAgIH0KIAotICAgICAgICAgICAgfQorICAgIENvbG9yS2V5ZnJhbWVUcmFj
ay5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBLZXlmcmFtZVRyYWNr
LnByb3RvdHlwZSApLCB7CiAKLSAgICAgICAgICAgIGkgPSBoaWdoOworICAgICAgICBjb25zdHJ1
Y3RvcjogQ29sb3JLZXlmcmFtZVRyYWNrLAogCi0gICAgICAgICAgICBpZiAoIGFyY0xlbmd0aHNb
IGkgXSA9PT0gdGFyZ2V0QXJjTGVuZ3RoICkgeworICAgICAgICBWYWx1ZVR5cGVOYW1lOiAnY29s
b3InCiAKLSAgICAgICAgICAgICAgICByZXR1cm4gaSAvICggaWwgLSAxICk7CisgICAgICAgIC8v
IFZhbHVlQnVmZmVyVHlwZSBpcyBpbmhlcml0ZWQKIAotICAgICAgICAgICAgfQorICAgICAgICAv
LyBEZWZhdWx0SW50ZXJwb2xhdGlvbiBpcyBpbmhlcml0ZWQKIAotICAgICAgICAgICAgLy8gd2Ug
Y291bGQgZ2V0IGZpbmVyIGdyYWluIGF0IGxlbmd0aHMsIG9yIHVzZSBzaW1wbGUgaW50ZXJwb2xh
dGlvbiBiZXR3ZWVuIHR3byBwb2ludHMKKyAgICAgICAgLy8gTm90ZTogVmVyeSBiYXNpYyBpbXBs
ZW1lbnRhdGlvbiBhbmQgbm90aGluZyBzcGVjaWFsIHlldC4KKyAgICAgICAgLy8gSG93ZXZlciwg
dGhpcyBpcyB0aGUgcGxhY2UgZm9yIGNvbG9yIHNwYWNlIHBhcmFtZXRlcml6YXRpb24uCiAKLSAg
ICAgICAgICAgIHZhciBsZW5ndGhCZWZvcmUgPSBhcmNMZW5ndGhzWyBpIF07Ci0gICAgICAgICAg
ICB2YXIgbGVuZ3RoQWZ0ZXIgPSBhcmNMZW5ndGhzWyBpICsgMSBdOworICAgIH0gKTsKIAotICAg
ICAgICAgICAgdmFyIHNlZ21lbnRMZW5ndGggPSBsZW5ndGhBZnRlciAtIGxlbmd0aEJlZm9yZTsK
KyAgICAvKioKKyAgICAgKgorICAgICAqIEEgVHJhY2sgb2YgbnVtZXJpYyBrZXlmcmFtZSB2YWx1
ZXMuCisgICAgICoKKyAgICAgKiBAYXV0aG9yIEJlbiBIb3VzdG9uIC8gaHR0cDovL2NsYXJhLmlv
LworICAgICAqIEBhdXRob3IgRGF2aWQgU2Fybm8gLyBodHRwOi8vbGlnaHRoYXVzLnVzLworICAg
ICAqIEBhdXRob3IgdHNjaHcKKyAgICAgKi8KIAotICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHdo
ZXJlIHdlIGFyZSBiZXR3ZWVuIHRoZSAnYmVmb3JlJyBhbmQgJ2FmdGVyJyBwb2ludHMKKyAgICBm
dW5jdGlvbiBOdW1iZXJLZXlmcmFtZVRyYWNrKCBuYW1lLCB0aW1lcywgdmFsdWVzLCBpbnRlcnBv
bGF0aW9uICkgewogCi0gICAgICAgICAgICB2YXIgc2VnbWVudEZyYWN0aW9uID0gKCB0YXJnZXRB
cmNMZW5ndGggLSBsZW5ndGhCZWZvcmUgKSAvIHNlZ21lbnRMZW5ndGg7CisgICAgICAgIEtleWZy
YW1lVHJhY2suY2FsbCggdGhpcywgbmFtZSwgdGltZXMsIHZhbHVlcywgaW50ZXJwb2xhdGlvbiAp
OwogCi0gICAgICAgICAgICAvLyBhZGQgdGhhdCBmcmFjdGlvbmFsIGFtb3VudCB0byB0CisgICAg
fQogCi0gICAgICAgICAgICB2YXIgdCA9ICggaSArIHNlZ21lbnRGcmFjdGlvbiApIC8gKCBpbCAt
IDEgKTsKKyAgICBOdW1iZXJLZXlmcmFtZVRyYWNrLnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24o
IE9iamVjdC5jcmVhdGUoIEtleWZyYW1lVHJhY2sucHJvdG90eXBlICksIHsKIAotICAgICAgICAg
ICAgcmV0dXJuIHQ7CisgICAgICAgIGNvbnN0cnVjdG9yOiBOdW1iZXJLZXlmcmFtZVRyYWNrLAog
Ci0gICAgICAgIH0sCisgICAgICAgIFZhbHVlVHlwZU5hbWU6ICdudW1iZXInCiAKLSAgICAgICAg
Ly8gUmV0dXJucyBhIHVuaXQgdmVjdG9yIHRhbmdlbnQgYXQgdAotICAgICAgICAvLyBJbiBjYXNl
IGFueSBzdWIgY3VydmUgZG9lcyBub3QgaW1wbGVtZW50IGl0cyB0YW5nZW50IGRlcml2YXRpb24s
Ci0gICAgICAgIC8vIDIgcG9pbnRzIGEgc21hbGwgZGVsdGEgYXBhcnQgd2lsbCBiZSB1c2VkIHRv
IGZpbmQgaXRzIGdyYWRpZW50Ci0gICAgICAgIC8vIHdoaWNoIHNlZW1zIHRvIGdpdmUgYSByZWFz
b25hYmxlIGFwcHJveGltYXRpb24KKyAgICAgICAgLy8gVmFsdWVCdWZmZXJUeXBlIGlzIGluaGVy
aXRlZAogCi0gICAgICAgIGdldFRhbmdlbnQ6IGZ1bmN0aW9uICggdCApIHsKKyAgICAgICAgLy8g
RGVmYXVsdEludGVycG9sYXRpb24gaXMgaW5oZXJpdGVkCiAKLSAgICAgICAgICAgIHZhciBkZWx0
YSA9IDAuMDAwMTsKLSAgICAgICAgICAgIHZhciB0MSA9IHQgLSBkZWx0YTsKLSAgICAgICAgICAg
IHZhciB0MiA9IHQgKyBkZWx0YTsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgIC8vIENhcHBpbmcg
aW4gY2FzZSBvZiBkYW5nZXIKKyAgICAvKioKKyAgICAgKiBTcGhlcmljYWwgbGluZWFyIHVuaXQg
cXVhdGVybmlvbiBpbnRlcnBvbGFudC4KKyAgICAgKgorICAgICAqIEBhdXRob3IgdHNjaHcKKyAg
ICAgKi8KIAotICAgICAgICAgICAgaWYgKCB0MSA8IDAgKSB0MSA9IDA7Ci0gICAgICAgICAgICBp
ZiAoIHQyID4gMSApIHQyID0gMTsKKyAgICBmdW5jdGlvbiBRdWF0ZXJuaW9uTGluZWFySW50ZXJw
b2xhbnQoIHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1
bHRCdWZmZXIgKSB7CiAKLSAgICAgICAgICAgIHZhciBwdDEgPSB0aGlzLmdldFBvaW50KCB0MSAp
OwotICAgICAgICAgICAgdmFyIHB0MiA9IHRoaXMuZ2V0UG9pbnQoIHQyICk7CisgICAgICAgIElu
dGVycG9sYW50LmNhbGwoIHRoaXMsIHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBz
YW1wbGVTaXplLCByZXN1bHRCdWZmZXIgKTsKIAotICAgICAgICAgICAgdmFyIHZlYyA9IHB0Mi5j
bG9uZSgpLnN1YiggcHQxICk7Ci0gICAgICAgICAgICByZXR1cm4gdmVjLm5vcm1hbGl6ZSgpOwor
ICAgIH0KIAotICAgICAgICB9LAorICAgIFF1YXRlcm5pb25MaW5lYXJJbnRlcnBvbGFudC5wcm90
b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBJbnRlcnBvbGFudC5wcm90b3R5
cGUgKSwgewogCi0gICAgICAgIGdldFRhbmdlbnRBdDogZnVuY3Rpb24gKCB1ICkgeworICAgICAg
ICBjb25zdHJ1Y3RvcjogUXVhdGVybmlvbkxpbmVhckludGVycG9sYW50LAogCi0gICAgICAgICAg
ICB2YXIgdCA9IHRoaXMuZ2V0VXRvVG1hcHBpbmcoIHUgKTsKLSAgICAgICAgICAgIHJldHVybiB0
aGlzLmdldFRhbmdlbnQoIHQgKTsKKyAgICAgICAgaW50ZXJwb2xhdGVfOiBmdW5jdGlvbiAoIGkx
LCB0MCwgdCwgdDEgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSB0
aGlzLnJlc3VsdEJ1ZmZlciwKKyAgICAgICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLnNhbXBsZVZh
bHVlcywKKyAgICAgICAgICAgICAgICBzdHJpZGUgPSB0aGlzLnZhbHVlU2l6ZSwKIAotICAgICAg
ICBjb21wdXRlRnJlbmV0RnJhbWVzOiBmdW5jdGlvbiAoIHNlZ21lbnRzLCBjbG9zZWQgKSB7Cisg
ICAgICAgICAgICAgICAgb2Zmc2V0ID0gaTEgKiBzdHJpZGUsCiAKLSAgICAgICAgICAgIC8vIHNl
ZSBodHRwOi8vd3d3LmNzLmluZGlhbmEuZWR1L3B1Yi90ZWNocmVwb3J0cy9UUjQyNS5wZGYKKyAg
ICAgICAgICAgICAgICBhbHBoYSA9ICggdCAtIHQwICkgLyAoIHQxIC0gdDAgKTsKIAotICAgICAg
ICAgICAgdmFyIG5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICBmb3IgKCB2YXIg
ZW5kID0gb2Zmc2V0ICsgc3RyaWRlOyBvZmZzZXQgIT09IGVuZDsgb2Zmc2V0ICs9IDQgKSB7CiAK
LSAgICAgICAgICAgIHZhciB0YW5nZW50cyA9IFtdOwotICAgICAgICAgICAgdmFyIG5vcm1hbHMg
PSBbXTsKLSAgICAgICAgICAgIHZhciBiaW5vcm1hbHMgPSBbXTsKKyAgICAgICAgICAgICAgICBR
dWF0ZXJuaW9uLnNsZXJwRmxhdCggcmVzdWx0LCAwLCB2YWx1ZXMsIG9mZnNldCAtIHN0cmlkZSwg
dmFsdWVzLCBvZmZzZXQsIGFscGhhICk7CiAKLSAgICAgICAgICAgIHZhciB2ZWMgPSBuZXcgVmVj
dG9yMygpOwotICAgICAgICAgICAgdmFyIG1hdCA9IG5ldyBNYXRyaXg0KCk7CisgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHZhciBpLCB1LCB0aGV0YTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAKLSAgICAgICAgICAgIC8vIGNvbXB1dGUgdGhlIHRhbmdlbnQgdmVjdG9ycyBmb3Ig
ZWFjaCBzZWdtZW50IG9uIHRoZSBjdXJ2ZQorICAgICAgICB9CiAKLSAgICAgICAgICAgIGZvciAo
IGkgPSAwOyBpIDw9IHNlZ21lbnRzOyBpICsrICkgeworICAgIH0gKTsKIAotICAgICAgICAgICAg
ICAgIHUgPSBpIC8gc2VnbWVudHM7CisgICAgLyoqCisgICAgICoKKyAgICAgKiBBIFRyYWNrIG9m
IHF1YXRlcm5pb24ga2V5ZnJhbWUgdmFsdWVzLgorICAgICAqCisgICAgICogQGF1dGhvciBCZW4g
SG91c3RvbiAvIGh0dHA6Ly9jbGFyYS5pby8KKyAgICAgKiBAYXV0aG9yIERhdmlkIFNhcm5vIC8g
aHR0cDovL2xpZ2h0aGF1cy51cy8KKyAgICAgKiBAYXV0aG9yIHRzY2h3CisgICAgICovCiAKLSAg
ICAgICAgICAgICAgICB0YW5nZW50c1sgaSBdID0gdGhpcy5nZXRUYW5nZW50QXQoIHUgKTsKLSAg
ICAgICAgICAgICAgICB0YW5nZW50c1sgaSBdLm5vcm1hbGl6ZSgpOworICAgIGZ1bmN0aW9uIFF1
YXRlcm5pb25LZXlmcmFtZVRyYWNrKCBuYW1lLCB0aW1lcywgdmFsdWVzLCBpbnRlcnBvbGF0aW9u
ICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgIEtleWZyYW1lVHJhY2suY2FsbCggdGhpcywg
bmFtZSwgdGltZXMsIHZhbHVlcywgaW50ZXJwb2xhdGlvbiApOwogCi0gICAgICAgICAgICAvLyBz
ZWxlY3QgYW4gaW5pdGlhbCBub3JtYWwgdmVjdG9yIHBlcnBlbmRpY3VsYXIgdG8gdGhlIGZpcnN0
IHRhbmdlbnQgdmVjdG9yLAotICAgICAgICAgICAgLy8gYW5kIGluIHRoZSBkaXJlY3Rpb24gb2Yg
dGhlIG1pbmltdW0gdGFuZ2VudCB4eXogY29tcG9uZW50CisgICAgfQogCi0gICAgICAgICAgICBu
b3JtYWxzWyAwIF0gPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgYmlub3JtYWxzWyAwIF0g
PSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgdmFyIG1pbiA9IE51bWJlci5NQVhfVkFMVUU7
Ci0gICAgICAgICAgICB2YXIgdHggPSBNYXRoLmFicyggdGFuZ2VudHNbIDAgXS54ICk7Ci0gICAg
ICAgICAgICB2YXIgdHkgPSBNYXRoLmFicyggdGFuZ2VudHNbIDAgXS55ICk7Ci0gICAgICAgICAg
ICB2YXIgdHogPSBNYXRoLmFicyggdGFuZ2VudHNbIDAgXS56ICk7CisgICAgUXVhdGVybmlvbktl
eWZyYW1lVHJhY2sucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggS2V5
ZnJhbWVUcmFjay5wcm90b3R5cGUgKSwgewogCi0gICAgICAgICAgICBpZiAoIHR4IDw9IG1pbiAp
IHsKKyAgICAgICAgY29uc3RydWN0b3I6IFF1YXRlcm5pb25LZXlmcmFtZVRyYWNrLAogCi0gICAg
ICAgICAgICAgICAgbWluID0gdHg7Ci0gICAgICAgICAgICAgICAgbm9ybWFsLnNldCggMSwgMCwg
MCApOworICAgICAgICBWYWx1ZVR5cGVOYW1lOiAncXVhdGVybmlvbicsCiAKLSAgICAgICAgICAg
IH0KKyAgICAgICAgLy8gVmFsdWVCdWZmZXJUeXBlIGlzIGluaGVyaXRlZAogCi0gICAgICAgICAg
ICBpZiAoIHR5IDw9IG1pbiApIHsKKyAgICAgICAgRGVmYXVsdEludGVycG9sYXRpb246IEludGVy
cG9sYXRlTGluZWFyLAogCi0gICAgICAgICAgICAgICAgbWluID0gdHk7Ci0gICAgICAgICAgICAg
ICAgbm9ybWFsLnNldCggMCwgMSwgMCApOworICAgICAgICBJbnRlcnBvbGFudEZhY3RvcnlNZXRo
b2RMaW5lYXI6IGZ1bmN0aW9uICggcmVzdWx0ICkgewogCi0gICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gbmV3IFF1YXRlcm5pb25MaW5lYXJJbnRlcnBvbGFudCggdGhpcy50aW1lcywg
dGhpcy52YWx1ZXMsIHRoaXMuZ2V0VmFsdWVTaXplKCksIHJlc3VsdCApOwogCi0gICAgICAgICAg
ICBpZiAoIHR6IDw9IG1pbiApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIG5vcm1h
bC5zZXQoIDAsIDAsIDEgKTsKKyAgICAgICAgSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3Ro
OiB1bmRlZmluZWQgLy8gbm90IHlldCBpbXBsZW1lbnRlZAogCi0gICAgICAgICAgICB9CisgICAg
fSApOwogCi0gICAgICAgICAgICB2ZWMuY3Jvc3NWZWN0b3JzKCB0YW5nZW50c1sgMCBdLCBub3Jt
YWwgKS5ub3JtYWxpemUoKTsKKyAgICAvKioKKyAgICAgKgorICAgICAqIEEgVHJhY2sgdGhhdCBp
bnRlcnBvbGF0ZXMgU3RyaW5ncworICAgICAqCisgICAgICoKKyAgICAgKiBAYXV0aG9yIEJlbiBI
b3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvLworICAgICAqIEBhdXRob3IgRGF2aWQgU2Fybm8gLyBo
dHRwOi8vbGlnaHRoYXVzLnVzLworICAgICAqIEBhdXRob3IgdHNjaHcKKyAgICAgKi8KIAotICAg
ICAgICAgICAgbm9ybWFsc1sgMCBdLmNyb3NzVmVjdG9ycyggdGFuZ2VudHNbIDAgXSwgdmVjICk7
Ci0gICAgICAgICAgICBiaW5vcm1hbHNbIDAgXS5jcm9zc1ZlY3RvcnMoIHRhbmdlbnRzWyAwIF0s
IG5vcm1hbHNbIDAgXSApOworICAgIGZ1bmN0aW9uIFN0cmluZ0tleWZyYW1lVHJhY2soIG5hbWUs
IHRpbWVzLCB2YWx1ZXMsIGludGVycG9sYXRpb24gKSB7CiAKKyAgICAgICAgS2V5ZnJhbWVUcmFj
ay5jYWxsKCB0aGlzLCBuYW1lLCB0aW1lcywgdmFsdWVzLCBpbnRlcnBvbGF0aW9uICk7CiAKLSAg
ICAgICAgICAgIC8vIGNvbXB1dGUgdGhlIHNsb3dseS12YXJ5aW5nIG5vcm1hbCBhbmQgYmlub3Jt
YWwgdmVjdG9ycyBmb3IgZWFjaCBzZWdtZW50IG9uIHRoZSBjdXJ2ZQorICAgIH0KIAotICAgICAg
ICAgICAgZm9yICggaSA9IDE7IGkgPD0gc2VnbWVudHM7IGkgKysgKSB7CisgICAgU3RyaW5nS2V5
ZnJhbWVUcmFjay5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBLZXlm
cmFtZVRyYWNrLnByb3RvdHlwZSApLCB7CiAKLSAgICAgICAgICAgICAgICBub3JtYWxzWyBpIF0g
PSBub3JtYWxzWyBpIC0gMSBdLmNsb25lKCk7CisgICAgICAgIGNvbnN0cnVjdG9yOiBTdHJpbmdL
ZXlmcmFtZVRyYWNrLAogCi0gICAgICAgICAgICAgICAgYmlub3JtYWxzWyBpIF0gPSBiaW5vcm1h
bHNbIGkgLSAxIF0uY2xvbmUoKTsKKyAgICAgICAgVmFsdWVUeXBlTmFtZTogJ3N0cmluZycsCisg
ICAgICAgIFZhbHVlQnVmZmVyVHlwZTogQXJyYXksCiAKLSAgICAgICAgICAgICAgICB2ZWMuY3Jv
c3NWZWN0b3JzKCB0YW5nZW50c1sgaSAtIDEgXSwgdGFuZ2VudHNbIGkgXSApOworICAgICAgICBE
ZWZhdWx0SW50ZXJwb2xhdGlvbjogSW50ZXJwb2xhdGVEaXNjcmV0ZSwKIAotICAgICAgICAgICAg
ICAgIGlmICggdmVjLmxlbmd0aCgpID4gTnVtYmVyLkVQU0lMT04gKSB7CisgICAgICAgIEludGVy
cG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjogdW5kZWZpbmVkLAogCi0gICAgICAgICAgICAgICAg
ICAgIHZlYy5ub3JtYWxpemUoKTsKKyAgICAgICAgSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21v
b3RoOiB1bmRlZmluZWQKIAotICAgICAgICAgICAgICAgICAgICB0aGV0YSA9IE1hdGguYWNvcygg
X01hdGguY2xhbXAoIHRhbmdlbnRzWyBpIC0gMSBdLmRvdCggdGFuZ2VudHNbIGkgXSApLCAtIDEs
IDEgKSApOyAvLyBjbGFtcCBmb3IgZmxvYXRpbmcgcHQgZXJyb3JzCisgICAgfSApOwogCi0gICAg
ICAgICAgICAgICAgICAgIG5vcm1hbHNbIGkgXS5hcHBseU1hdHJpeDQoIG1hdC5tYWtlUm90YXRp
b25BeGlzKCB2ZWMsIHRoZXRhICkgKTsKKyAgICAvKioKKyAgICAgKgorICAgICAqIEEgVHJhY2sg
b2YgdmVjdG9yZWQga2V5ZnJhbWUgdmFsdWVzLgorICAgICAqCisgICAgICoKKyAgICAgKiBAYXV0
aG9yIEJlbiBIb3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvLworICAgICAqIEBhdXRob3IgRGF2aWQg
U2Fybm8gLyBodHRwOi8vbGlnaHRoYXVzLnVzLworICAgICAqIEBhdXRob3IgdHNjaHcKKyAgICAg
Ki8KIAotICAgICAgICAgICAgICAgIH0KKyAgICBmdW5jdGlvbiBWZWN0b3JLZXlmcmFtZVRyYWNr
KCBuYW1lLCB0aW1lcywgdmFsdWVzLCBpbnRlcnBvbGF0aW9uICkgewogCi0gICAgICAgICAgICAg
ICAgYmlub3JtYWxzWyBpIF0uY3Jvc3NWZWN0b3JzKCB0YW5nZW50c1sgaSBdLCBub3JtYWxzWyBp
IF0gKTsKKyAgICAgICAgS2V5ZnJhbWVUcmFjay5jYWxsKCB0aGlzLCBuYW1lLCB0aW1lcywgdmFs
dWVzLCBpbnRlcnBvbGF0aW9uICk7CiAKLSAgICAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAg
ICAgIC8vIGlmIHRoZSBjdXJ2ZSBpcyBjbG9zZWQsIHBvc3Rwcm9jZXNzIHRoZSB2ZWN0b3JzIHNv
IHRoZSBmaXJzdCBhbmQgbGFzdCBub3JtYWwgdmVjdG9ycyBhcmUgdGhlIHNhbWUKKyAgICBWZWN0
b3JLZXlmcmFtZVRyYWNrLnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUo
IEtleWZyYW1lVHJhY2sucHJvdG90eXBlICksIHsKIAotICAgICAgICAgICAgaWYgKCBjbG9zZWQg
PT09IHRydWUgKSB7CisgICAgICAgIGNvbnN0cnVjdG9yOiBWZWN0b3JLZXlmcmFtZVRyYWNrLAog
Ci0gICAgICAgICAgICAgICAgdGhldGEgPSBNYXRoLmFjb3MoIF9NYXRoLmNsYW1wKCBub3JtYWxz
WyAwIF0uZG90KCBub3JtYWxzWyBzZWdtZW50cyBdICksIC0gMSwgMSApICk7Ci0gICAgICAgICAg
ICAgICAgdGhldGEgLz0gc2VnbWVudHM7CisgICAgICAgIFZhbHVlVHlwZU5hbWU6ICd2ZWN0b3In
CiAKLSAgICAgICAgICAgICAgICBpZiAoIHRhbmdlbnRzWyAwIF0uZG90KCB2ZWMuY3Jvc3NWZWN0
b3JzKCBub3JtYWxzWyAwIF0sIG5vcm1hbHNbIHNlZ21lbnRzIF0gKSApID4gMCApIHsKKyAgICAg
ICAgLy8gVmFsdWVCdWZmZXJUeXBlIGlzIGluaGVyaXRlZAogCi0gICAgICAgICAgICAgICAgICAg
IHRoZXRhID0gLSB0aGV0YTsKKyAgICAgICAgLy8gRGVmYXVsdEludGVycG9sYXRpb24gaXMgaW5o
ZXJpdGVkCiAKLSAgICAgICAgICAgICAgICB9CisgICAgfSApOwogCi0gICAgICAgICAgICAgICAg
Zm9yICggaSA9IDE7IGkgPD0gc2VnbWVudHM7IGkgKysgKSB7CisgICAgLyoqCisgICAgICoKKyAg
ICAgKiBSZXVzYWJsZSBzZXQgb2YgVHJhY2tzIHRoYXQgcmVwcmVzZW50IGFuIGFuaW1hdGlvbi4K
KyAgICAgKgorICAgICAqIEBhdXRob3IgQmVuIEhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW8vCisg
ICAgICogQGF1dGhvciBEYXZpZCBTYXJubyAvIGh0dHA6Ly9saWdodGhhdXMudXMvCisgICAgICov
CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gdHdpc3QgYSBsaXR0bGUuLi4KLSAgICAgICAgICAg
ICAgICAgICAgbm9ybWFsc1sgaSBdLmFwcGx5TWF0cml4NCggbWF0Lm1ha2VSb3RhdGlvbkF4aXMo
IHRhbmdlbnRzWyBpIF0sIHRoZXRhICogaSApICk7Ci0gICAgICAgICAgICAgICAgICAgIGJpbm9y
bWFsc1sgaSBdLmNyb3NzVmVjdG9ycyggdGFuZ2VudHNbIGkgXSwgbm9ybWFsc1sgaSBdICk7Cisg
ICAgZnVuY3Rpb24gQW5pbWF0aW9uQ2xpcCggbmFtZSwgZHVyYXRpb24sIHRyYWNrcyApIHsKIAot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgdGhp
cy50cmFja3MgPSB0cmFja3M7CisgICAgICAgIHRoaXMuZHVyYXRpb24gPSAoIGR1cmF0aW9uICE9
PSB1bmRlZmluZWQgKSA/IGR1cmF0aW9uIDogLSAxOwogCi0gICAgICAgICAgICB9CisgICAgICAg
IHRoaXMudXVpZCA9IF9NYXRoLmdlbmVyYXRlVVVJRCgpOwogCi0gICAgICAgICAgICByZXR1cm4g
ewotICAgICAgICAgICAgICAgIHRhbmdlbnRzOiB0YW5nZW50cywKLSAgICAgICAgICAgICAgICBu
b3JtYWxzOiBub3JtYWxzLAotICAgICAgICAgICAgICAgIGJpbm9ybWFsczogYmlub3JtYWxzCi0g
ICAgICAgICAgICB9OworICAgICAgICAvLyB0aGlzIG1lYW5zIGl0IHNob3VsZCBmaWd1cmUgb3V0
IGl0cyBkdXJhdGlvbiBieSBzY2FubmluZyB0aGUgdHJhY2tzCisgICAgICAgIGlmICggdGhpcy5k
dXJhdGlvbiA8IDAgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIHRoaXMucmVzZXREdXJh
dGlvbigpOwogCi0gICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIH0KIAotICAg
ICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApOworICAg
IH0KIAotICAgICAgICB9LAorICAgIGZ1bmN0aW9uIGdldFRyYWNrVHlwZUZvclZhbHVlVHlwZU5h
bWUoIHR5cGVOYW1lICkgewogCi0gICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkgewor
ICAgICAgICBzd2l0Y2ggKCB0eXBlTmFtZS50b0xvd2VyQ2FzZSgpICkgewogCi0gICAgICAgICAg
ICB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucyA9IHNvdXJjZS5hcmNMZW5ndGhEaXZpc2lvbnM7Cisg
ICAgICAgICAgICBjYXNlICdzY2FsYXInOgorICAgICAgICAgICAgY2FzZSAnZG91YmxlJzoKKyAg
ICAgICAgICAgIGNhc2UgJ2Zsb2F0JzoKKyAgICAgICAgICAgIGNhc2UgJ251bWJlcic6CisgICAg
ICAgICAgICBjYXNlICdpbnRlZ2VyJzoKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIE51bWJlcktleWZyYW1lVHJhY2s7CiAKLSAgICAgICAgfSwKKyAg
ICAgICAgICAgIGNhc2UgJ3ZlY3Rvcic6CisgICAgICAgICAgICBjYXNlICd2ZWN0b3IyJzoKKyAg
ICAgICAgICAgIGNhc2UgJ3ZlY3RvcjMnOgorICAgICAgICAgICAgY2FzZSAndmVjdG9yNCc6CiAK
LSAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFZl
Y3RvcktleWZyYW1lVHJhY2s7CiAKLSAgICAgICAgICAgIHZhciBkYXRhID0gewotICAgICAgICAg
ICAgICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnNpb246IDQuNSwKLSAg
ICAgICAgICAgICAgICAgICAgdHlwZTogJ0N1cnZlJywKLSAgICAgICAgICAgICAgICAgICAgZ2Vu
ZXJhdG9yOiAnQ3VydmUudG9KU09OJwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07
CisgICAgICAgICAgICBjYXNlICdjb2xvcic6CiAKLSAgICAgICAgICAgIGRhdGEuYXJjTGVuZ3Ro
RGl2aXNpb25zID0gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM7Ci0gICAgICAgICAgICBkYXRhLnR5
cGUgPSB0aGlzLnR5cGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIENvbG9yS2V5ZnJhbWVUcmFj
azsKIAotICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICBjYXNlICdxdWF0ZXJu
aW9uJzoKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIHJldHVybiBRdWF0ZXJuaW9uS2V5
ZnJhbWVUcmFjazsKIAotICAgICAgICBmcm9tSlNPTjogZnVuY3Rpb24gKCBqc29uICkgeworICAg
ICAgICAgICAgY2FzZSAnYm9vbCc6CisgICAgICAgICAgICBjYXNlICdib29sZWFuJzoKIAotICAg
ICAgICAgICAgdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMgPSBqc29uLmFyY0xlbmd0aERpdmlzaW9u
czsKKyAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbktleWZyYW1lVHJhY2s7CiAKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzoKKworICAgICAg
ICAgICAgICAgIHJldHVybiBTdHJpbmdLZXlmcmFtZVRyYWNrOwogCiAgICAgICAgIH0KIAotICAg
IH0gKTsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCAnVEhSRUUuS2V5ZnJhbWVUcmFjazogVW5z
dXBwb3J0ZWQgdHlwZU5hbWU6ICcgKyB0eXBlTmFtZSApOwogCi0gICAgZnVuY3Rpb24gRWxsaXBz
ZUN1cnZlKCBhWCwgYVksIHhSYWRpdXMsIHlSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUs
IGFDbG9ja3dpc2UsIGFSb3RhdGlvbiApIHsKKyAgICB9CiAKLSAgICAgICAgQ3VydmUuY2FsbCgg
dGhpcyApOworICAgIGZ1bmN0aW9uIHBhcnNlS2V5ZnJhbWVUcmFjaygganNvbiApIHsKIAotICAg
ICAgICB0aGlzLnR5cGUgPSAnRWxsaXBzZUN1cnZlJzsKKyAgICAgICAgaWYgKCBqc29uLnR5cGUg
PT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICB0aGlzLmFYID0gYVggfHwgMDsKLSAgICAgICAg
dGhpcy5hWSA9IGFZIHx8IDA7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoICdUSFJFRS5L
ZXlmcmFtZVRyYWNrOiB0cmFjayB0eXBlIHVuZGVmaW5lZCwgY2FuIG5vdCBwYXJzZScgKTsKIAot
ICAgICAgICB0aGlzLnhSYWRpdXMgPSB4UmFkaXVzIHx8IDE7Ci0gICAgICAgIHRoaXMueVJhZGl1
cyA9IHlSYWRpdXMgfHwgMTsKKyAgICAgICAgfQogCi0gICAgICAgIHRoaXMuYVN0YXJ0QW5nbGUg
PSBhU3RhcnRBbmdsZSB8fCAwOwotICAgICAgICB0aGlzLmFFbmRBbmdsZSA9IGFFbmRBbmdsZSB8
fCAyICogTWF0aC5QSTsKKyAgICAgICAgdmFyIHRyYWNrVHlwZSA9IGdldFRyYWNrVHlwZUZvclZh
bHVlVHlwZU5hbWUoIGpzb24udHlwZSApOwogCi0gICAgICAgIHRoaXMuYUNsb2Nrd2lzZSA9IGFD
bG9ja3dpc2UgfHwgZmFsc2U7CisgICAgICAgIGlmICgganNvbi50aW1lcyA9PT0gdW5kZWZpbmVk
ICkgewogCi0gICAgICAgIHRoaXMuYVJvdGF0aW9uID0gYVJvdGF0aW9uIHx8IDA7CisgICAgICAg
ICAgICB2YXIgdGltZXMgPSBbXSwgdmFsdWVzID0gW107CiAKLSAgICB9CisgICAgICAgICAgICBB
bmltYXRpb25VdGlscy5mbGF0dGVuSlNPTigganNvbi5rZXlzLCB0aW1lcywgdmFsdWVzLCAndmFs
dWUnICk7CiAKLSAgICBFbGxpcHNlQ3VydmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQ3Vy
dmUucHJvdG90eXBlICk7Ci0gICAgRWxsaXBzZUN1cnZlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9
IEVsbGlwc2VDdXJ2ZTsKKyAgICAgICAgICAgIGpzb24udGltZXMgPSB0aW1lczsKKyAgICAgICAg
ICAgIGpzb24udmFsdWVzID0gdmFsdWVzOwogCi0gICAgRWxsaXBzZUN1cnZlLnByb3RvdHlwZS5p
c0VsbGlwc2VDdXJ2ZSA9IHRydWU7CisgICAgICAgIH0KIAotICAgIEVsbGlwc2VDdXJ2ZS5wcm90
b3R5cGUuZ2V0UG9pbnQgPSBmdW5jdGlvbiAoIHQsIG9wdGlvbmFsVGFyZ2V0ICkgeworICAgICAg
ICAvLyBkZXJpdmVkIGNsYXNzZXMgY2FuIGRlZmluZSBhIHN0YXRpYyBwYXJzZSBtZXRob2QKKyAg
ICAgICAgaWYgKCB0cmFja1R5cGUucGFyc2UgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICB2
YXIgcG9pbnQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcgVmVjdG9yMigpOworICAgICAgICAgICAg
cmV0dXJuIHRyYWNrVHlwZS5wYXJzZSgganNvbiApOwogCi0gICAgICAgIHZhciB0d29QaSA9IE1h
dGguUEkgKiAyOwotICAgICAgICB2YXIgZGVsdGFBbmdsZSA9IHRoaXMuYUVuZEFuZ2xlIC0gdGhp
cy5hU3RhcnRBbmdsZTsKLSAgICAgICAgdmFyIHNhbWVQb2ludHMgPSBNYXRoLmFicyggZGVsdGFB
bmdsZSApIDwgTnVtYmVyLkVQU0lMT047CisgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgLy8g
ZW5zdXJlcyB0aGF0IGRlbHRhQW5nbGUgaXMgMCAuLiAyIFBJCi0gICAgICAgIHdoaWxlICggZGVs
dGFBbmdsZSA8IDAgKSBkZWx0YUFuZ2xlICs9IHR3b1BpOwotICAgICAgICB3aGlsZSAoIGRlbHRh
QW5nbGUgPiB0d29QaSApIGRlbHRhQW5nbGUgLT0gdHdvUGk7CisgICAgICAgICAgICAvLyBieSBk
ZWZhdWx0LCB3ZSBhc3N1bWUgYSBjb25zdHJ1Y3RvciBjb21wYXRpYmxlIHdpdGggdGhlIGJhc2UK
KyAgICAgICAgICAgIHJldHVybiBuZXcgdHJhY2tUeXBlKCBqc29uLm5hbWUsIGpzb24udGltZXMs
IGpzb24udmFsdWVzLCBqc29uLmludGVycG9sYXRpb24gKTsKIAotICAgICAgICBpZiAoIGRlbHRh
QW5nbGUgPCBOdW1iZXIuRVBTSUxPTiApIHsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
IHNhbWVQb2ludHMgKSB7CisgICAgfQogCi0gICAgICAgICAgICAgICAgZGVsdGFBbmdsZSA9IDA7
CisgICAgT2JqZWN0LmFzc2lnbiggQW5pbWF0aW9uQ2xpcCwgewogCi0gICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICBwYXJzZTogZnVuY3Rpb24gKCBqc29uICkgewogCi0gICAgICAgICAgICAg
ICAgZGVsdGFBbmdsZSA9IHR3b1BpOworICAgICAgICAgICAgdmFyIHRyYWNrcyA9IFtdLAorICAg
ICAgICAgICAgICAgIGpzb25UcmFja3MgPSBqc29uLnRyYWNrcywKKyAgICAgICAgICAgICAgICBm
cmFtZVRpbWUgPSAxLjAgLyAoIGpzb24uZnBzIHx8IDEuMCApOwogCi0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIG4gPSBqc29uVHJhY2tzLmxlbmd0aDsgaSAhPT0g
bjsgKysgaSApIHsKIAotICAgICAgICB9CisgICAgICAgICAgICAgICAgdHJhY2tzLnB1c2goIHBh
cnNlS2V5ZnJhbWVUcmFjaygganNvblRyYWNrc1sgaSBdICkuc2NhbGUoIGZyYW1lVGltZSApICk7
CiAKLSAgICAgICAgaWYgKCB0aGlzLmFDbG9ja3dpc2UgPT09IHRydWUgJiYgISBzYW1lUG9pbnRz
ICkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIGRlbHRhQW5nbGUgPT09IHR3
b1BpICkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBBbmltYXRpb25DbGlwKCBqc29uLm5hbWUs
IGpzb24uZHVyYXRpb24sIHRyYWNrcyApOwogCi0gICAgICAgICAgICAgICAgZGVsdGFBbmdsZSA9
IC0gdHdvUGk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIHRv
SlNPTjogZnVuY3Rpb24gKCBjbGlwICkgewogCi0gICAgICAgICAgICAgICAgZGVsdGFBbmdsZSA9
IGRlbHRhQW5nbGUgLSB0d29QaTsKKyAgICAgICAgICAgIHZhciB0cmFja3MgPSBbXSwKKyAgICAg
ICAgICAgICAgICBjbGlwVHJhY2tzID0gY2xpcC50cmFja3M7CiAKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHZhciBqc29uID0gewogCi0gICAgICAgIH0KKyAgICAgICAgICAgICAgICAnbmFt
ZSc6IGNsaXAubmFtZSwKKyAgICAgICAgICAgICAgICAnZHVyYXRpb24nOiBjbGlwLmR1cmF0aW9u
LAorICAgICAgICAgICAgICAgICd0cmFja3MnOiB0cmFja3MsCisgICAgICAgICAgICAgICAgJ3V1
aWQnOiBjbGlwLnV1aWQKIAotICAgICAgICB2YXIgYW5nbGUgPSB0aGlzLmFTdGFydEFuZ2xlICsg
dCAqIGRlbHRhQW5nbGU7Ci0gICAgICAgIHZhciB4ID0gdGhpcy5hWCArIHRoaXMueFJhZGl1cyAq
IE1hdGguY29zKCBhbmdsZSApOwotICAgICAgICB2YXIgeSA9IHRoaXMuYVkgKyB0aGlzLnlSYWRp
dXMgKiBNYXRoLnNpbiggYW5nbGUgKTsKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgaWYgKCB0
aGlzLmFSb3RhdGlvbiAhPT0gMCApIHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbiA9
IGNsaXBUcmFja3MubGVuZ3RoOyBpICE9PSBuOyArKyBpICkgewogCi0gICAgICAgICAgICB2YXIg
Y29zID0gTWF0aC5jb3MoIHRoaXMuYVJvdGF0aW9uICk7Ci0gICAgICAgICAgICB2YXIgc2luID0g
TWF0aC5zaW4oIHRoaXMuYVJvdGF0aW9uICk7CisgICAgICAgICAgICAgICAgdHJhY2tzLnB1c2go
IEtleWZyYW1lVHJhY2sudG9KU09OKCBjbGlwVHJhY2tzWyBpIF0gKSApOwogCi0gICAgICAgICAg
ICB2YXIgdHggPSB4IC0gdGhpcy5hWDsKLSAgICAgICAgICAgIHZhciB0eSA9IHkgLSB0aGlzLmFZ
OworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBSb3RhdGUgdGhlIHBvaW50IGFib3V0
IHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2UuCi0gICAgICAgICAgICB4ID0gdHggKiBjb3MgLSB0
eSAqIHNpbiArIHRoaXMuYVg7Ci0gICAgICAgICAgICB5ID0gdHggKiBzaW4gKyB0eSAqIGNvcyAr
IHRoaXMuYVk7CisgICAgICAgICAgICByZXR1cm4ganNvbjsKIAotICAgICAgICB9CisgICAgICAg
IH0sCiAKLSAgICAgICAgcmV0dXJuIHBvaW50LnNldCggeCwgeSApOworICAgICAgICBDcmVhdGVG
cm9tTW9ycGhUYXJnZXRTZXF1ZW5jZTogZnVuY3Rpb24gKCBuYW1lLCBtb3JwaFRhcmdldFNlcXVl
bmNlLCBmcHMsIG5vTG9vcCApIHsKIAotICAgIH07CisgICAgICAgICAgICB2YXIgbnVtTW9ycGhU
YXJnZXRzID0gbW9ycGhUYXJnZXRTZXF1ZW5jZS5sZW5ndGg7CisgICAgICAgICAgICB2YXIgdHJh
Y2tzID0gW107CiAKLSAgICBFbGxpcHNlQ3VydmUucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAo
IHNvdXJjZSApIHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IG51bU1vcnBoVGFy
Z2V0czsgaSArKyApIHsKIAotICAgICAgICBDdXJ2ZS5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlz
LCBzb3VyY2UgKTsKKyAgICAgICAgICAgICAgICB2YXIgdGltZXMgPSBbXTsKKyAgICAgICAgICAg
ICAgICB2YXIgdmFsdWVzID0gW107CiAKLSAgICAgICAgdGhpcy5hWCA9IHNvdXJjZS5hWDsKLSAg
ICAgICAgdGhpcy5hWSA9IHNvdXJjZS5hWTsKKyAgICAgICAgICAgICAgICB0aW1lcy5wdXNoKAor
ICAgICAgICAgICAgICAgICAgICAoIGkgKyBudW1Nb3JwaFRhcmdldHMgLSAxICkgJSBudW1Nb3Jw
aFRhcmdldHMsCisgICAgICAgICAgICAgICAgICAgIGksCisgICAgICAgICAgICAgICAgICAgICgg
aSArIDEgKSAlIG51bU1vcnBoVGFyZ2V0cyApOwogCi0gICAgICAgIHRoaXMueFJhZGl1cyA9IHNv
dXJjZS54UmFkaXVzOwotICAgICAgICB0aGlzLnlSYWRpdXMgPSBzb3VyY2UueVJhZGl1czsKKyAg
ICAgICAgICAgICAgICB2YWx1ZXMucHVzaCggMCwgMSwgMCApOwogCi0gICAgICAgIHRoaXMuYVN0
YXJ0QW5nbGUgPSBzb3VyY2UuYVN0YXJ0QW5nbGU7Ci0gICAgICAgIHRoaXMuYUVuZEFuZ2xlID0g
c291cmNlLmFFbmRBbmdsZTsKKyAgICAgICAgICAgICAgICB2YXIgb3JkZXIgPSBBbmltYXRpb25V
dGlscy5nZXRLZXlmcmFtZU9yZGVyKCB0aW1lcyApOworICAgICAgICAgICAgICAgIHRpbWVzID0g
QW5pbWF0aW9uVXRpbHMuc29ydGVkQXJyYXkoIHRpbWVzLCAxLCBvcmRlciApOworICAgICAgICAg
ICAgICAgIHZhbHVlcyA9IEFuaW1hdGlvblV0aWxzLnNvcnRlZEFycmF5KCB2YWx1ZXMsIDEsIG9y
ZGVyICk7CiAKLSAgICAgICAgdGhpcy5hQ2xvY2t3aXNlID0gc291cmNlLmFDbG9ja3dpc2U7Cisg
ICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBrZXkgYXQgdGhlIGZpcnN0IGZyYW1lLCBk
dXBsaWNhdGUgaXQgYXMgdGhlCisgICAgICAgICAgICAgICAgLy8gbGFzdCBmcmFtZSBhcyB3ZWxs
IGZvciBwZXJmZWN0IGxvb3AuCisgICAgICAgICAgICAgICAgaWYgKCAhIG5vTG9vcCAmJiB0aW1l
c1sgMCBdID09PSAwICkgewogCi0gICAgICAgIHRoaXMuYVJvdGF0aW9uID0gc291cmNlLmFSb3Rh
dGlvbjsKKyAgICAgICAgICAgICAgICAgICAgdGltZXMucHVzaCggbnVtTW9ycGhUYXJnZXRzICk7
CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKCB2YWx1ZXNbIDAgXSApOwogCi0gICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0KIAotICAgIH07CisgICAgICAgICAg
ICAgICAgdHJhY2tzLnB1c2goCisgICAgICAgICAgICAgICAgICAgIG5ldyBOdW1iZXJLZXlmcmFt
ZVRyYWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgJy5tb3JwaFRhcmdldEluZmx1ZW5jZXNb
JyArIG1vcnBoVGFyZ2V0U2VxdWVuY2VbIGkgXS5uYW1lICsgJ10nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGltZXMsIHZhbHVlcworICAgICAgICAgICAgICAgICAgICApLnNjYWxlKCAxLjAg
LyBmcHMgKSApOwogCisgICAgICAgICAgICB9CiAKLSAgICBFbGxpcHNlQ3VydmUucHJvdG90eXBl
LnRvSlNPTiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQW5pbWF0aW9u
Q2xpcCggbmFtZSwgLSAxLCB0cmFja3MgKTsKIAotICAgICAgICB2YXIgZGF0YSA9IEN1cnZlLnBy
b3RvdHlwZS50b0pTT04uY2FsbCggdGhpcyApOworICAgICAgICB9LAogCi0gICAgICAgIGRhdGEu
YVggPSB0aGlzLmFYOwotICAgICAgICBkYXRhLmFZID0gdGhpcy5hWTsKKyAgICAgICAgZmluZEJ5
TmFtZTogZnVuY3Rpb24gKCBvYmplY3RPckNsaXBBcnJheSwgbmFtZSApIHsKIAotICAgICAgICBk
YXRhLnhSYWRpdXMgPSB0aGlzLnhSYWRpdXM7Ci0gICAgICAgIGRhdGEueVJhZGl1cyA9IHRoaXMu
eVJhZGl1czsKKyAgICAgICAgICAgIHZhciBjbGlwQXJyYXkgPSBvYmplY3RPckNsaXBBcnJheTsK
IAotICAgICAgICBkYXRhLmFTdGFydEFuZ2xlID0gdGhpcy5hU3RhcnRBbmdsZTsKLSAgICAgICAg
ZGF0YS5hRW5kQW5nbGUgPSB0aGlzLmFFbmRBbmdsZTsKKyAgICAgICAgICAgIGlmICggISBBcnJh
eS5pc0FycmF5KCBvYmplY3RPckNsaXBBcnJheSApICkgewogCi0gICAgICAgIGRhdGEuYUNsb2Nr
d2lzZSA9IHRoaXMuYUNsb2Nrd2lzZTsKKyAgICAgICAgICAgICAgICB2YXIgbyA9IG9iamVjdE9y
Q2xpcEFycmF5OworICAgICAgICAgICAgICAgIGNsaXBBcnJheSA9IG8uZ2VvbWV0cnkgJiYgby5n
ZW9tZXRyeS5hbmltYXRpb25zIHx8IG8uYW5pbWF0aW9uczsKIAotICAgICAgICBkYXRhLmFSb3Rh
dGlvbiA9IHRoaXMuYVJvdGF0aW9uOworICAgICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBk
YXRhOworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgY2xpcEFycmF5Lmxlbmd0aDsg
aSArKyApIHsKIAotICAgIH07CisgICAgICAgICAgICAgICAgaWYgKCBjbGlwQXJyYXlbIGkgXS5u
YW1lID09PSBuYW1lICkgewogCi0gICAgRWxsaXBzZUN1cnZlLnByb3RvdHlwZS5mcm9tSlNPTiA9
IGZ1bmN0aW9uICgganNvbiApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsaXBBcnJh
eVsgaSBdOwogCi0gICAgICAgIEN1cnZlLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKCB0aGlzLCBq
c29uICk7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuYVggPSBqc29uLmFYOwot
ICAgICAgICB0aGlzLmFZID0ganNvbi5hWTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICB0aGlz
LnhSYWRpdXMgPSBqc29uLnhSYWRpdXM7Ci0gICAgICAgIHRoaXMueVJhZGl1cyA9IGpzb24ueVJh
ZGl1czsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwogCi0gICAgICAgIHRoaXMuYVN0YXJ0QW5n
bGUgPSBqc29uLmFTdGFydEFuZ2xlOwotICAgICAgICB0aGlzLmFFbmRBbmdsZSA9IGpzb24uYUVu
ZEFuZ2xlOworICAgICAgICB9LAogCi0gICAgICAgIHRoaXMuYUNsb2Nrd2lzZSA9IGpzb24uYUNs
b2Nrd2lzZTsKKyAgICAgICAgQ3JlYXRlQ2xpcHNGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZXM6IGZ1
bmN0aW9uICggbW9ycGhUYXJnZXRzLCBmcHMsIG5vTG9vcCApIHsKIAotICAgICAgICB0aGlzLmFS
b3RhdGlvbiA9IGpzb24uYVJvdGF0aW9uOworICAgICAgICAgICAgdmFyIGFuaW1hdGlvblRvTW9y
cGhUYXJnZXRzID0ge307CiAKLSAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAvLyB0
ZXN0ZWQgd2l0aCBodHRwczovL3JlZ2V4MTAxLmNvbS8gb24gdHJpY2sgc2VxdWVuY2VzCisgICAg
ICAgICAgICAvLyBzdWNoIGZsYW1pbmdvX2ZseUFfMDAzLCBmbGFtaW5nb19ydW4xXzAwMywgY3Jk
ZWF0aDAwNTkKKyAgICAgICAgICAgIHZhciBwYXR0ZXJuID0gL14oW1x3LV0qPykoW1xkXSspJC87
CiAKLSAgICB9OworICAgICAgICAgICAgLy8gc29ydCBtb3JwaCB0YXJnZXQgbmFtZXMgaW50byBh
bmltYXRpb24gZ3JvdXBzIGJhc2VkCisgICAgICAgICAgICAvLyBwYXR0ZXJucyBsaWtlIFdhbGtf
MDAxLCBXYWxrXzAwMiwgUnVuXzAwMSwgUnVuXzAwMgorICAgICAgICAgICAgZm9yICggdmFyIGkg
PSAwLCBpbCA9IG1vcnBoVGFyZ2V0cy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKIAotICAgIGZ1
bmN0aW9uIEFyY0N1cnZlKCBhWCwgYVksIGFSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUs
IGFDbG9ja3dpc2UgKSB7CisgICAgICAgICAgICAgICAgdmFyIG1vcnBoVGFyZ2V0ID0gbW9ycGhU
YXJnZXRzWyBpIF07CisgICAgICAgICAgICAgICAgdmFyIHBhcnRzID0gbW9ycGhUYXJnZXQubmFt
ZS5tYXRjaCggcGF0dGVybiApOwogCi0gICAgICAgIEVsbGlwc2VDdXJ2ZS5jYWxsKCB0aGlzLCBh
WCwgYVksIGFSYWRpdXMsIGFSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dp
c2UgKTsKKyAgICAgICAgICAgICAgICBpZiAoIHBhcnRzICYmIHBhcnRzLmxlbmd0aCA+IDEgKSB7
CiAKLSAgICAgICAgdGhpcy50eXBlID0gJ0FyY0N1cnZlJzsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIG5hbWUgPSBwYXJ0c1sgMSBdOwogCi0gICAgfQorICAgICAgICAgICAgICAgICAgICB2YXIg
YW5pbWF0aW9uTW9ycGhUYXJnZXRzID0gYW5pbWF0aW9uVG9Nb3JwaFRhcmdldHNbIG5hbWUgXTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCAhIGFuaW1hdGlvbk1vcnBoVGFyZ2V0cyApIHsKIAot
ICAgIEFyY0N1cnZlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEVsbGlwc2VDdXJ2ZS5wcm90
b3R5cGUgKTsKLSAgICBBcmNDdXJ2ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBcmNDdXJ2ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblRvTW9ycGhUYXJnZXRzWyBuYW1lIF0g
PSBhbmltYXRpb25Nb3JwaFRhcmdldHMgPSBbXTsKIAotICAgIEFyY0N1cnZlLnByb3RvdHlwZS5p
c0FyY0N1cnZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgLyoqCi0gICAg
ICogQGF1dGhvciB6ejg1IGh0dHBzOi8vZ2l0aHViLmNvbS96ejg1Ci0gICAgICoKLSAgICAgKiBD
ZW50cmlwZXRhbCBDYXRtdWxsUm9tIEN1cnZlIC0gd2hpY2ggaXMgdXNlZnVsIGZvciBhdm9pZGlu
ZwotICAgICAqIGN1c3BzIGFuZCBzZWxmLWludGVyc2VjdGlvbnMgaW4gbm9uLXVuaWZvcm0gY2F0
bXVsbCByb20gY3VydmVzLgotICAgICAqIGh0dHA6Ly93d3cuY2VteXVrc2VsLmNvbS9yZXNlYXJj
aC9jYXRtdWxscm9tX3BhcmFtL2NhdG11bGxyb20ucGRmCi0gICAgICoKLSAgICAgKiBjdXJ2ZS50
eXBlIGFjY2VwdHMgY2VudHJpcGV0YWwoZGVmYXVsdCksIGNob3JkYWwgYW5kIGNhdG11bGxyb20K
LSAgICAgKiBjdXJ2ZS50ZW5zaW9uIGlzIHVzZWQgZm9yIGNhdG11bGxyb20gd2hpY2ggZGVmYXVs
dHMgdG8gMC41Ci0gICAgICovCisgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbk1vcnBoVGFy
Z2V0cy5wdXNoKCBtb3JwaFRhcmdldCApOwogCisgICAgICAgICAgICAgICAgfQogCi0gICAgLyoK
LSAgICBCYXNlZCBvbiBhbiBvcHRpbWl6ZWQgYysrIHNvbHV0aW9uIGluCi0gICAgIC0gaHR0cDov
L3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy85NDg5NzM2L2NhdG11bGwtcm9tLWN1cnZlLXdp
dGgtbm8tY3VzcHMtYW5kLW5vLXNlbGYtaW50ZXJzZWN0aW9ucy8KLSAgICAgLSBodHRwOi8vaWRl
b25lLmNvbS9Ob0ViVk0KKyAgICAgICAgICAgIH0KIAotICAgIFRoaXMgQ3ViaWNQb2x5IGNsYXNz
IGNvdWxkIGJlIHVzZWQgZm9yIHJldXNpbmcgc29tZSB2YXJpYWJsZXMgYW5kIGNhbGN1bGF0aW9u
cywKLSAgICBidXQgZm9yIHRocmVlLmpzIGN1cnZlIHVzZSwgaXQgY291bGQgYmUgcG9zc2libGUg
aW5saW5lZCBhbmQgZmxhdHRlbiBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwKLSAgICB3aGlj
aCBjYW4gYmUgcGxhY2VkIGluIEN1cnZlVXRpbHMuCi0gICAgKi8KKyAgICAgICAgICAgIHZhciBj
bGlwcyA9IFtdOwogCi0gICAgZnVuY3Rpb24gQ3ViaWNQb2x5KCkgeworICAgICAgICAgICAgZm9y
ICggdmFyIG5hbWUgaW4gYW5pbWF0aW9uVG9Nb3JwaFRhcmdldHMgKSB7CiAKLSAgICAgICAgdmFy
IGMwID0gMCwgYzEgPSAwLCBjMiA9IDAsIGMzID0gMDsKKyAgICAgICAgICAgICAgICBjbGlwcy5w
dXNoKCBBbmltYXRpb25DbGlwLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKCBuYW1lLCBh
bmltYXRpb25Ub01vcnBoVGFyZ2V0c1sgbmFtZSBdLCBmcHMsIG5vTG9vcCApICk7CiAKLSAgICAg
ICAgLyoKLSAgICAgICAgICogQ29tcHV0ZSBjb2VmZmljaWVudHMgZm9yIGEgY3ViaWMgcG9seW5v
bWlhbAotICAgICAgICAgKiAgIHAocykgPSBjMCArIGMxKnMgKyBjMipzXjIgKyBjMypzXjMKLSAg
ICAgICAgICogc3VjaCB0aGF0Ci0gICAgICAgICAqICAgcCgwKSA9IHgwLCBwKDEpID0geDEKLSAg
ICAgICAgICogIGFuZAotICAgICAgICAgKiAgIHAnKDApID0gdDAsIHAnKDEpID0gdDEuCi0gICAg
ICAgICAqLwotICAgICAgICBmdW5jdGlvbiBpbml0KCB4MCwgeDEsIHQwLCB0MSApIHsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgYzAgPSB4MDsKLSAgICAgICAgICAgIGMxID0gdDA7Ci0g
ICAgICAgICAgICBjMiA9IC0gMyAqIHgwICsgMyAqIHgxIC0gMiAqIHQwIC0gdDE7Ci0gICAgICAg
ICAgICBjMyA9IDIgKiB4MCAtIDIgKiB4MSArIHQwICsgdDE7CisgICAgICAgICAgICByZXR1cm4g
Y2xpcHM7CiAKLSAgICAgICAgfQorICAgICAgICB9LAogCi0gICAgICAgIHJldHVybiB7CisgICAg
ICAgIC8vIHBhcnNlIHRoZSBhbmltYXRpb24uaGllcmFyY2h5IGZvcm1hdAorICAgICAgICBwYXJz
ZUFuaW1hdGlvbjogZnVuY3Rpb24gKCBhbmltYXRpb24sIGJvbmVzICkgewogCi0gICAgICAgICAg
ICBpbml0Q2F0bXVsbFJvbTogZnVuY3Rpb24gKCB4MCwgeDEsIHgyLCB4MywgdGVuc2lvbiApIHsK
KyAgICAgICAgICAgIGlmICggISBhbmltYXRpb24gKSB7CiAKLSAgICAgICAgICAgICAgICBpbml0
KCB4MSwgeDIsIHRlbnNpb24gKiAoIHgyIC0geDAgKSwgdGVuc2lvbiAqICggeDMgLSB4MSApICk7
CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLkFuaW1hdGlvbkNsaXA6IE5v
IGFuaW1hdGlvbiBpbiBKU09OTG9hZGVyIGRhdGEuJyApOworICAgICAgICAgICAgICAgIHJldHVy
biBudWxsOwogCi0gICAgICAgICAgICB9LAorICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
bml0Tm9udW5pZm9ybUNhdG11bGxSb206IGZ1bmN0aW9uICggeDAsIHgxLCB4MiwgeDMsIGR0MCwg
ZHQxLCBkdDIgKSB7CisgICAgICAgICAgICB2YXIgYWRkTm9uZW1wdHlUcmFjayA9IGZ1bmN0aW9u
ICggdHJhY2tUeXBlLCB0cmFja05hbWUsIGFuaW1hdGlvbktleXMsIHByb3BlcnR5TmFtZSwgZGVz
dFRyYWNrcyApIHsKIAotICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgdGFuZ2VudHMgd2hlbiBw
YXJhbWV0ZXJpemVkIGluIFt0MSx0Ml0KLSAgICAgICAgICAgICAgICB2YXIgdDEgPSAoIHgxIC0g
eDAgKSAvIGR0MCAtICggeDIgLSB4MCApIC8gKCBkdDAgKyBkdDEgKSArICggeDIgLSB4MSApIC8g
ZHQxOwotICAgICAgICAgICAgICAgIHZhciB0MiA9ICggeDIgLSB4MSApIC8gZHQxIC0gKCB4MyAt
IHgxICkgLyAoIGR0MSArIGR0MiApICsgKCB4MyAtIHgyICkgLyBkdDI7CisgICAgICAgICAgICAg
ICAgLy8gb25seSByZXR1cm4gdHJhY2sgaWYgdGhlcmUgYXJlIGFjdHVhbGx5IGtleXMuCisgICAg
ICAgICAgICAgICAgaWYgKCBhbmltYXRpb25LZXlzLmxlbmd0aCAhPT0gMCApIHsKIAotICAgICAg
ICAgICAgICAgIC8vIHJlc2NhbGUgdGFuZ2VudHMgZm9yIHBhcmFtZXRyaXphdGlvbiBpbiBbMCwx
XQotICAgICAgICAgICAgICAgIHQxICo9IGR0MTsKLSAgICAgICAgICAgICAgICB0MiAqPSBkdDE7
CisgICAgICAgICAgICAgICAgICAgIHZhciB0aW1lcyA9IFtdOworICAgICAgICAgICAgICAgICAg
ICB2YXIgdmFsdWVzID0gW107CiAKLSAgICAgICAgICAgICAgICBpbml0KCB4MSwgeDIsIHQxLCB0
MiApOworICAgICAgICAgICAgICAgICAgICBBbmltYXRpb25VdGlscy5mbGF0dGVuSlNPTiggYW5p
bWF0aW9uS2V5cywgdGltZXMsIHZhbHVlcywgcHJvcGVydHlOYW1lICk7CiAKLSAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAgICAgICAgIC8vIGVtcHR5IGtleXMgYXJlIGZpbHRlcmVkIG91dCwg
c28gY2hlY2sgYWdhaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0aW1lcy5sZW5ndGggIT09
IDAgKSB7CiAKLSAgICAgICAgICAgIGNhbGM6IGZ1bmN0aW9uICggdCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RUcmFja3MucHVzaCggbmV3IHRyYWNrVHlwZSggdHJhY2tOYW1lLCB0
aW1lcywgdmFsdWVzICkgKTsKIAotICAgICAgICAgICAgICAgIHZhciB0MiA9IHQgKiB0OwotICAg
ICAgICAgICAgICAgIHZhciB0MyA9IHQyICogdDsKLSAgICAgICAgICAgICAgICByZXR1cm4gYzAg
KyBjMSAqIHQgKyBjMiAqIHQyICsgYzMgKiB0MzsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIH07CisgICAgICAgICAg
ICB9OwogCi0gICAgfQorICAgICAgICAgICAgdmFyIHRyYWNrcyA9IFtdOwogCi0gICAgLy8KKyAg
ICAgICAgICAgIHZhciBjbGlwTmFtZSA9IGFuaW1hdGlvbi5uYW1lIHx8ICdkZWZhdWx0JzsKKyAg
ICAgICAgICAgIC8vIGF1dG9tYXRpYyBsZW5ndGggZGV0ZXJtaW5hdGlvbiBpbiBBbmltYXRpb25D
bGlwLgorICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gYW5pbWF0aW9uLmxlbmd0aCB8fCAtIDE7
CisgICAgICAgICAgICB2YXIgZnBzID0gYW5pbWF0aW9uLmZwcyB8fCAzMDsKIAotICAgIHZhciB0
bXAgPSBuZXcgVmVjdG9yMygpOwotICAgIHZhciBweCA9IG5ldyBDdWJpY1BvbHkoKSwgcHkgPSBu
ZXcgQ3ViaWNQb2x5KCksIHB6ID0gbmV3IEN1YmljUG9seSgpOworICAgICAgICAgICAgdmFyIGhp
ZXJhcmNoeVRyYWNrcyA9IGFuaW1hdGlvbi5oaWVyYXJjaHkgfHwgW107CiAKLSAgICBmdW5jdGlv
biBDYXRtdWxsUm9tQ3VydmUzKCBwb2ludHMsIGNsb3NlZCwgY3VydmVUeXBlLCB0ZW5zaW9uICkg
eworICAgICAgICAgICAgZm9yICggdmFyIGggPSAwOyBoIDwgaGllcmFyY2h5VHJhY2tzLmxlbmd0
aDsgaCArKyApIHsKIAotICAgICAgICBDdXJ2ZS5jYWxsKCB0aGlzICk7CisgICAgICAgICAgICAg
ICAgdmFyIGFuaW1hdGlvbktleXMgPSBoaWVyYXJjaHlUcmFja3NbIGggXS5rZXlzOwogCi0gICAg
ICAgIHRoaXMudHlwZSA9ICdDYXRtdWxsUm9tQ3VydmUzJzsKKyAgICAgICAgICAgICAgICAvLyBz
a2lwIGVtcHR5IHRyYWNrcworICAgICAgICAgICAgICAgIGlmICggISBhbmltYXRpb25LZXlzIHx8
IGFuaW1hdGlvbktleXMubGVuZ3RoID09PSAwICkgY29udGludWU7CiAKLSAgICAgICAgdGhpcy5w
b2ludHMgPSBwb2ludHMgfHwgW107Ci0gICAgICAgIHRoaXMuY2xvc2VkID0gY2xvc2VkIHx8IGZh
bHNlOwotICAgICAgICB0aGlzLmN1cnZlVHlwZSA9IGN1cnZlVHlwZSB8fCAnY2VudHJpcGV0YWwn
OwotICAgICAgICB0aGlzLnRlbnNpb24gPSB0ZW5zaW9uIHx8IDAuNTsKKyAgICAgICAgICAgICAg
ICAvLyBwcm9jZXNzIG1vcnBoIHRhcmdldHMKKyAgICAgICAgICAgICAgICBpZiAoIGFuaW1hdGlv
bktleXNbIDAgXS5tb3JwaFRhcmdldHMgKSB7CiAKLSAgICB9CisgICAgICAgICAgICAgICAgICAg
IC8vIGZpZ3VyZSBvdXQgYWxsIG1vcnBoIHRhcmdldHMgdXNlZCBpbiB0aGlzIHRyYWNrCisgICAg
ICAgICAgICAgICAgICAgIHZhciBtb3JwaFRhcmdldE5hbWVzID0ge307CiAKLSAgICBDYXRtdWxs
Um9tQ3VydmUzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEN1cnZlLnByb3RvdHlwZSApOwot
ICAgIENhdG11bGxSb21DdXJ2ZTMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2F0bXVsbFJvbUN1
cnZlMzsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGsgPSAwOyBrIDwgYW5pbWF0aW9u
S2V5cy5sZW5ndGg7IGsgKysgKSB7CiAKLSAgICBDYXRtdWxsUm9tQ3VydmUzLnByb3RvdHlwZS5p
c0NhdG11bGxSb21DdXJ2ZTMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBh
bmltYXRpb25LZXlzWyBrIF0ubW9ycGhUYXJnZXRzICkgewogCi0gICAgQ2F0bXVsbFJvbUN1cnZl
My5wcm90b3R5cGUuZ2V0UG9pbnQgPSBmdW5jdGlvbiAoIHQsIG9wdGlvbmFsVGFyZ2V0ICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBtID0gMDsgbSA8IGFuaW1hdGlv
bktleXNbIGsgXS5tb3JwaFRhcmdldHMubGVuZ3RoOyBtICsrICkgewogCi0gICAgICAgIHZhciBw
b2ludCA9IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0TmFtZXNbIGFuaW1hdGlvbktleXNbIGsgXS5tb3Jw
aFRhcmdldHNbIG0gXSBdID0gLSAxOwogCi0gICAgICAgIHZhciBwb2ludHMgPSB0aGlzLnBvaW50
czsKLSAgICAgICAgdmFyIGwgPSBwb2ludHMubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICB2YXIgcCA9ICggbCAtICggdGhpcy5jbG9zZWQgPyAwIDogMSAp
ICkgKiB0OwotICAgICAgICB2YXIgaW50UG9pbnQgPSBNYXRoLmZsb29yKCBwICk7Ci0gICAgICAg
IHZhciB3ZWlnaHQgPSBwIC0gaW50UG9pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgaWYgKCB0aGlzLmNsb3NlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpbnRQb2ludCArPSBpbnRQb2ludCA+IDAgPyAwIDogKCBNYXRoLmZsb29yKCBN
YXRoLmFicyggaW50UG9pbnQgKSAvIGwgKSArIDEgKSAqIGw7CisgICAgICAgICAgICAgICAgICAg
IC8vIGNyZWF0ZSBhIHRyYWNrIGZvciBlYWNoIG1vcnBoIHRhcmdldCB3aXRoIGFsbCB6ZXJvCisg
ICAgICAgICAgICAgICAgICAgIC8vIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBleGNlcHQgZm9yIHRo
ZSBrZXlzIGluIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBtb3JwaFRhcmdldCBp
cyBuYW1lZC4KKyAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIG1vcnBoVGFyZ2V0TmFtZSBp
biBtb3JwaFRhcmdldE5hbWVzICkgewogCi0gICAgICAgIH0gZWxzZSBpZiAoIHdlaWdodCA9PT0g
MCAmJiBpbnRQb2ludCA9PT0gbCAtIDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
dGltZXMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbXTsKIAot
ICAgICAgICAgICAgaW50UG9pbnQgPSBsIC0gMjsKLSAgICAgICAgICAgIHdlaWdodCA9IDE7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgbSA9IDA7IG0gIT09IGFuaW1hdGlvbktl
eXNbIGsgXS5tb3JwaFRhcmdldHMubGVuZ3RoOyArKyBtICkgewogCi0gICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW5pbWF0aW9uS2V5ID0gYW5pbWF0aW9uS2V5c1sg
ayBdOwogCi0gICAgICAgIHZhciBwMCwgcDEsIHAyLCBwMzsgLy8gNCBwb2ludHMKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lcy5wdXNoKCBhbmltYXRpb25LZXkudGltZSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKCAoIGFuaW1hdGlvbktleS5tb3Jw
aFRhcmdldCA9PT0gbW9ycGhUYXJnZXROYW1lICkgPyAxIDogMCApOwogCi0gICAgICAgIGlmICgg
dGhpcy5jbG9zZWQgfHwgaW50UG9pbnQgPiAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBwMCA9IHBvaW50c1sgKCBpbnRQb2ludCAtIDEgKSAlIGwgXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRyYWNrcy5wdXNoKCBuZXcgTnVtYmVyS2V5ZnJhbWVUcmFj
ayggJy5tb3JwaFRhcmdldEluZmx1ZW5jZVsnICsgbW9ycGhUYXJnZXROYW1lICsgJ10nLCB0aW1l
cywgdmFsdWVzICkgKTsKIAotICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIC8vIGV4dHJhcG9sYXRlIGZpcnN0IHBvaW50Ci0gICAgICAgICAgICB0
bXAuc3ViVmVjdG9ycyggcG9pbnRzWyAwIF0sIHBvaW50c1sgMSBdICkuYWRkKCBwb2ludHNbIDAg
XSApOwotICAgICAgICAgICAgcDAgPSB0bXA7CisgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9u
ID0gbW9ycGhUYXJnZXROYW1lcy5sZW5ndGggKiAoIGZwcyB8fCAxLjAgKTsKIAotICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICBwMSA9IHBvaW50c1sgaW50UG9p
bnQgJSBsIF07Ci0gICAgICAgIHAyID0gcG9pbnRzWyAoIGludFBvaW50ICsgMSApICUgbCBdOwor
ICAgICAgICAgICAgICAgICAgICAvLyAuLi5hc3N1bWUgc2tlbGV0YWwgYW5pbWF0aW9uCiAKLSAg
ICAgICAgaWYgKCB0aGlzLmNsb3NlZCB8fCBpbnRQb2ludCArIDIgPCBsICkgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgYm9uZU5hbWUgPSAnLmJvbmVzWycgKyBib25lc1sgaCBdLm5hbWUgKyAn
XSc7CiAKLSAgICAgICAgICAgIHAzID0gcG9pbnRzWyAoIGludFBvaW50ICsgMiApICUgbCBdOwor
ICAgICAgICAgICAgICAgICAgICBhZGROb25lbXB0eVRyYWNrKAorICAgICAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yS2V5ZnJhbWVUcmFjaywgYm9uZU5hbWUgKyAnLnBvc2l0aW9uJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbktleXMsICdwb3MnLCB0cmFja3MgKTsKIAotICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhZGROb25lbXB0eVRyYWNrKAorICAg
ICAgICAgICAgICAgICAgICAgICAgUXVhdGVybmlvbktleWZyYW1lVHJhY2ssIGJvbmVOYW1lICsg
Jy5xdWF0ZXJuaW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbktleXMsICdy
b3QnLCB0cmFja3MgKTsKIAotICAgICAgICAgICAgLy8gZXh0cmFwb2xhdGUgbGFzdCBwb2ludAot
ICAgICAgICAgICAgdG1wLnN1YlZlY3RvcnMoIHBvaW50c1sgbCAtIDEgXSwgcG9pbnRzWyBsIC0g
MiBdICkuYWRkKCBwb2ludHNbIGwgLSAxIF0gKTsKLSAgICAgICAgICAgIHAzID0gdG1wOworICAg
ICAgICAgICAgICAgICAgICBhZGROb25lbXB0eVRyYWNrKAorICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yS2V5ZnJhbWVUcmFjaywgYm9uZU5hbWUgKyAnLnNjYWxlJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFuaW1hdGlvbktleXMsICdzY2wnLCB0cmFja3MgKTsKIAotICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIGlmICggdGhpcy5jdXJ2ZVR5cGUgPT09ICdj
ZW50cmlwZXRhbCcgfHwgdGhpcy5jdXJ2ZVR5cGUgPT09ICdjaG9yZGFsJyApIHsKKyAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgLy8gaW5pdCBDZW50cmlwZXRhbCAvIENob3JkYWwgQ2F0bXVs
bC1Sb20KLSAgICAgICAgICAgIHZhciBwb3cgPSB0aGlzLmN1cnZlVHlwZSA9PT0gJ2Nob3JkYWwn
ID8gMC41IDogMC4yNTsKLSAgICAgICAgICAgIHZhciBkdDAgPSBNYXRoLnBvdyggcDAuZGlzdGFu
Y2VUb1NxdWFyZWQoIHAxICksIHBvdyApOwotICAgICAgICAgICAgdmFyIGR0MSA9IE1hdGgucG93
KCBwMS5kaXN0YW5jZVRvU3F1YXJlZCggcDIgKSwgcG93ICk7Ci0gICAgICAgICAgICB2YXIgZHQy
ID0gTWF0aC5wb3coIHAyLmRpc3RhbmNlVG9TcXVhcmVkKCBwMyApLCBwb3cgKTsKKyAgICAgICAg
ICAgIGlmICggdHJhY2tzLmxlbmd0aCA9PT0gMCApIHsKIAotICAgICAgICAgICAgLy8gc2FmZXR5
IGNoZWNrIGZvciByZXBlYXRlZCBwb2ludHMKLSAgICAgICAgICAgIGlmICggZHQxIDwgMWUtNCAp
IGR0MSA9IDEuMDsKLSAgICAgICAgICAgIGlmICggZHQwIDwgMWUtNCApIGR0MCA9IGR0MTsKLSAg
ICAgICAgICAgIGlmICggZHQyIDwgMWUtNCApIGR0MiA9IGR0MTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKIAotICAgICAgICAgICAgcHguaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKCBw
MC54LCBwMS54LCBwMi54LCBwMy54LCBkdDAsIGR0MSwgZHQyICk7Ci0gICAgICAgICAgICBweS5p
bml0Tm9udW5pZm9ybUNhdG11bGxSb20oIHAwLnksIHAxLnksIHAyLnksIHAzLnksIGR0MCwgZHQx
LCBkdDIgKTsKLSAgICAgICAgICAgIHB6LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbSggcDAueiwg
cDEueiwgcDIueiwgcDMueiwgZHQwLCBkdDEsIGR0MiApOworICAgICAgICAgICAgfQogCi0gICAg
ICAgIH0gZWxzZSBpZiAoIHRoaXMuY3VydmVUeXBlID09PSAnY2F0bXVsbHJvbScgKSB7CisgICAg
ICAgICAgICB2YXIgY2xpcCA9IG5ldyBBbmltYXRpb25DbGlwKCBjbGlwTmFtZSwgZHVyYXRpb24s
IHRyYWNrcyApOwogCi0gICAgICAgICAgICBweC5pbml0Q2F0bXVsbFJvbSggcDAueCwgcDEueCwg
cDIueCwgcDMueCwgdGhpcy50ZW5zaW9uICk7Ci0gICAgICAgICAgICBweS5pbml0Q2F0bXVsbFJv
bSggcDAueSwgcDEueSwgcDIueSwgcDMueSwgdGhpcy50ZW5zaW9uICk7Ci0gICAgICAgICAgICBw
ei5pbml0Q2F0bXVsbFJvbSggcDAueiwgcDEueiwgcDIueiwgcDMueiwgdGhpcy50ZW5zaW9uICk7
CisgICAgICAgICAgICByZXR1cm4gY2xpcDsKIAogICAgICAgICB9CiAKLSAgICAgICAgcG9pbnQu
c2V0KAotICAgICAgICAgICAgcHguY2FsYyggd2VpZ2h0ICksCi0gICAgICAgICAgICBweS5jYWxj
KCB3ZWlnaHQgKSwKLSAgICAgICAgICAgIHB6LmNhbGMoIHdlaWdodCApCi0gICAgICAgICk7Cisg
ICAgfSApOwogCi0gICAgICAgIHJldHVybiBwb2ludDsKKyAgICBPYmplY3QuYXNzaWduKCBBbmlt
YXRpb25DbGlwLnByb3RvdHlwZSwgewogCi0gICAgfTsKKyAgICAgICAgcmVzZXREdXJhdGlvbjog
ZnVuY3Rpb24gKCkgewogCi0gICAgQ2F0bXVsbFJvbUN1cnZlMy5wcm90b3R5cGUuY29weSA9IGZ1
bmN0aW9uICggc291cmNlICkgeworICAgICAgICAgICAgdmFyIHRyYWNrcyA9IHRoaXMudHJhY2tz
LCBkdXJhdGlvbiA9IDA7CiAKLSAgICAgICAgQ3VydmUucHJvdG90eXBlLmNvcHkuY2FsbCggdGhp
cywgc291cmNlICk7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIG4gPSB0cmFja3MubGVu
Z3RoOyBpICE9PSBuOyArKyBpICkgewogCi0gICAgICAgIHRoaXMucG9pbnRzID0gW107CisgICAg
ICAgICAgICAgICAgdmFyIHRyYWNrID0gdGhpcy50cmFja3NbIGkgXTsKIAotICAgICAgICBmb3Ig
KCB2YXIgaSA9IDAsIGwgPSBzb3VyY2UucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7Cisg
ICAgICAgICAgICAgICAgZHVyYXRpb24gPSBNYXRoLm1heCggZHVyYXRpb24sIHRyYWNrLnRpbWVz
WyB0cmFjay50aW1lcy5sZW5ndGggLSAxIF0gKTsKIAotICAgICAgICAgICAgdmFyIHBvaW50ID0g
c291cmNlLnBvaW50c1sgaSBdOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLnBv
aW50cy5wdXNoKCBwb2ludC5jbG9uZSgpICk7CisgICAgICAgICAgICB0aGlzLmR1cmF0aW9uID0g
ZHVyYXRpb247CiAKLSAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAg
ICAgdGhpcy5jbG9zZWQgPSBzb3VyY2UuY2xvc2VkOwotICAgICAgICB0aGlzLmN1cnZlVHlwZSA9
IHNvdXJjZS5jdXJ2ZVR5cGU7Ci0gICAgICAgIHRoaXMudGVuc2lvbiA9IHNvdXJjZS50ZW5zaW9u
OworICAgICAgICB9LAogCi0gICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB0cmltOiBmdW5j
dGlvbiAoKSB7CiAKLSAgICB9OworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgdGhp
cy50cmFja3MubGVuZ3RoOyBpICsrICkgewogCi0gICAgQ2F0bXVsbFJvbUN1cnZlMy5wcm90b3R5
cGUudG9KU09OID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHRoaXMudHJhY2tzWyBp
IF0udHJpbSggMCwgdGhpcy5kdXJhdGlvbiApOwogCi0gICAgICAgIHZhciBkYXRhID0gQ3VydmUu
cHJvdG90eXBlLnRvSlNPTi5jYWxsKCB0aGlzICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ZGF0YS5wb2ludHMgPSBbXTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIGZv
ciAoIHZhciBpID0gMCwgbCA9IHRoaXMucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7Cisg
ICAgICAgIH0sCiAKLSAgICAgICAgICAgIHZhciBwb2ludCA9IHRoaXMucG9pbnRzWyBpIF07Ci0g
ICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKCBwb2ludC50b0FycmF5KCkgKTsKKyAgICAgICAg
dmFsaWRhdGU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICB9CisgICAgICAgICAgICB2YXIgdmFs
aWQgPSB0cnVlOwogCi0gICAgICAgIGRhdGEuY2xvc2VkID0gdGhpcy5jbG9zZWQ7Ci0gICAgICAg
IGRhdGEuY3VydmVUeXBlID0gdGhpcy5jdXJ2ZVR5cGU7Ci0gICAgICAgIGRhdGEudGVuc2lvbiA9
IHRoaXMudGVuc2lvbjsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IHRoaXMudHJh
Y2tzLmxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAg
ICAgICB2YWxpZCA9IHZhbGlkICYmIHRoaXMudHJhY2tzWyBpIF0udmFsaWRhdGUoKTsKIAotICAg
IH07CisgICAgICAgICAgICB9CiAKLSAgICBDYXRtdWxsUm9tQ3VydmUzLnByb3RvdHlwZS5mcm9t
SlNPTiA9IGZ1bmN0aW9uICgganNvbiApIHsKKyAgICAgICAgICAgIHJldHVybiB2YWxpZDsKIAot
ICAgICAgICBDdXJ2ZS5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCggdGhpcywganNvbiApOworICAg
ICAgICB9LAogCi0gICAgICAgIHRoaXMucG9pbnRzID0gW107CisgICAgICAgIG9wdGltaXplOiBm
dW5jdGlvbiAoKSB7CiAKLSAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0ganNvbi5wb2ludHMu
bGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8
IHRoaXMudHJhY2tzLmxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICAgICAgdmFyIHBvaW50ID0g
anNvbi5wb2ludHNbIGkgXTsKLSAgICAgICAgICAgIHRoaXMucG9pbnRzLnB1c2goIG5ldyBWZWN0
b3IzKCkuZnJvbUFycmF5KCBwb2ludCApICk7CisgICAgICAgICAgICAgICAgdGhpcy50cmFja3Nb
IGkgXS5vcHRpbWl6ZSgpOwogCi0gICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgICAgICB0
aGlzLmNsb3NlZCA9IGpzb24uY2xvc2VkOwotICAgICAgICB0aGlzLmN1cnZlVHlwZSA9IGpzb24u
Y3VydmVUeXBlOwotICAgICAgICB0aGlzLnRlbnNpb24gPSBqc29uLnRlbnNpb247CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKIAot
ICAgIH07CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIHp6ODUgLyBodHRwOi8vd3d3LmxhYjRn
YW1lcy5uZXQveno4NS9ibG9nCi0gICAgICoKLSAgICAgKiBCZXppZXIgQ3VydmVzIGZvcm11bGFz
IG9idGFpbmVkIGZyb20KLSAgICAgKiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0LDqXpp
ZXJfY3VydmUKLSAgICAgKi8KKyAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKIAotICAgIGZ1
bmN0aW9uIENhdG11bGxSb20oIHQsIHAwLCBwMSwgcDIsIHAzICkgeworICAgICAgICAgICAgdmFy
IHRyYWNrcyA9IFtdOwogCi0gICAgICAgIHZhciB2MCA9ICggcDIgLSBwMCApICogMC41OwotICAg
ICAgICB2YXIgdjEgPSAoIHAzIC0gcDEgKSAqIDAuNTsKLSAgICAgICAgdmFyIHQyID0gdCAqIHQ7
Ci0gICAgICAgIHZhciB0MyA9IHQgKiB0MjsKLSAgICAgICAgcmV0dXJuICggMiAqIHAxIC0gMiAq
IHAyICsgdjAgKyB2MSApICogdDMgKyAoIC0gMyAqIHAxICsgMyAqIHAyIC0gMiAqIHYwIC0gdjEg
KSAqIHQyICsgdjAgKiB0ICsgcDE7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCB0
aGlzLnRyYWNrcy5sZW5ndGg7IGkgKysgKSB7CiAKLSAgICB9CisgICAgICAgICAgICAgICAgdHJh
Y2tzLnB1c2goIHRoaXMudHJhY2tzWyBpIF0uY2xvbmUoKSApOwogCi0gICAgLy8KKyAgICAgICAg
ICAgIH0KIAotICAgIGZ1bmN0aW9uIFF1YWRyYXRpY0JlemllclAwKCB0LCBwICkgeworICAgICAg
ICAgICAgcmV0dXJuIG5ldyBBbmltYXRpb25DbGlwKCB0aGlzLm5hbWUsIHRoaXMuZHVyYXRpb24s
IHRyYWNrcyApOwogCi0gICAgICAgIHZhciBrID0gMSAtIHQ7Ci0gICAgICAgIHJldHVybiBrICog
ayAqIHA7CisgICAgICAgIH0KIAotICAgIH0KKyAgICB9ICk7CiAKLSAgICBmdW5jdGlvbiBRdWFk
cmF0aWNCZXppZXJQMSggdCwgcCApIHsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAv
IGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqLwogCi0gICAgICAgIHJldHVybiAyICogKCAxIC0g
dCApICogdCAqIHA7CisgICAgdmFyIENhY2hlID0gewogCi0gICAgfQorICAgICAgICBlbmFibGVk
OiBmYWxzZSwKIAotICAgIGZ1bmN0aW9uIFF1YWRyYXRpY0JlemllclAyKCB0LCBwICkgeworICAg
ICAgICBmaWxlczoge30sCiAKLSAgICAgICAgcmV0dXJuIHQgKiB0ICogcDsKKyAgICAgICAgYWRk
OiBmdW5jdGlvbiAoIGtleSwgZmlsZSApIHsKIAotICAgIH0KKyAgICAgICAgICAgIGlmICggdGhp
cy5lbmFibGVkID09PSBmYWxzZSApIHJldHVybjsKIAotICAgIGZ1bmN0aW9uIFF1YWRyYXRpY0Jl
emllciggdCwgcDAsIHAxLCBwMiApIHsKKyAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCAnVEhS
RUUuQ2FjaGUnLCAnQWRkaW5nIGtleTonLCBrZXkgKTsKIAotICAgICAgICByZXR1cm4gUXVhZHJh
dGljQmV6aWVyUDAoIHQsIHAwICkgKyBRdWFkcmF0aWNCZXppZXJQMSggdCwgcDEgKSArCi0gICAg
ICAgICAgICBRdWFkcmF0aWNCZXppZXJQMiggdCwgcDIgKTsKKyAgICAgICAgICAgIHRoaXMuZmls
ZXNbIGtleSBdID0gZmlsZTsKIAotICAgIH0KKyAgICAgICAgfSwKIAotICAgIC8vCisgICAgICAg
IGdldDogZnVuY3Rpb24gKCBrZXkgKSB7CiAKLSAgICBmdW5jdGlvbiBDdWJpY0JlemllclAwKCB0
LCBwICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLmVuYWJsZWQgPT09IGZhbHNlICkgcmV0dXJu
OwogCi0gICAgICAgIHZhciBrID0gMSAtIHQ7Ci0gICAgICAgIHJldHVybiBrICogayAqIGsgKiBw
OworICAgICAgICAgICAgLy8gY29uc29sZS5sb2coICdUSFJFRS5DYWNoZScsICdDaGVja2luZyBr
ZXk6Jywga2V5ICk7CiAKLSAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maWxlc1sga2V5
IF07CiAKLSAgICBmdW5jdGlvbiBDdWJpY0JlemllclAxKCB0LCBwICkgeworICAgICAgICB9LAog
Ci0gICAgICAgIHZhciBrID0gMSAtIHQ7Ci0gICAgICAgIHJldHVybiAzICogayAqIGsgKiB0ICog
cDsKKyAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiAoIGtleSApIHsKIAotICAgIH0KKyAgICAgICAg
ICAgIGRlbGV0ZSB0aGlzLmZpbGVzWyBrZXkgXTsKIAotICAgIGZ1bmN0aW9uIEN1YmljQmV6aWVy
UDIoIHQsIHAgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgcmV0dXJuIDMgKiAoIDEgLSB0ICkg
KiB0ICogdCAqIHA7CisgICAgICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7CiAKLSAgICB9CisgICAg
ICAgICAgICB0aGlzLmZpbGVzID0ge307CiAKLSAgICBmdW5jdGlvbiBDdWJpY0JlemllclAzKCB0
LCBwICkgeworICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHQgKiB0ICogdCAqIHA7CisgICAg
fTsKIAotICAgIH0KKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRv
b2IuY29tLworICAgICAqLwogCi0gICAgZnVuY3Rpb24gQ3ViaWNCZXppZXIoIHQsIHAwLCBwMSwg
cDIsIHAzICkgeworICAgIGZ1bmN0aW9uIExvYWRpbmdNYW5hZ2VyKCBvbkxvYWQsIG9uUHJvZ3Jl
c3MsIG9uRXJyb3IgKSB7CiAKLSAgICAgICAgcmV0dXJuIEN1YmljQmV6aWVyUDAoIHQsIHAwICkg
KyBDdWJpY0JlemllclAxKCB0LCBwMSApICsgQ3ViaWNCZXppZXJQMiggdCwgcDIgKSArCi0gICAg
ICAgICAgICBDdWJpY0JlemllclAzKCB0LCBwMyApOworICAgICAgICB2YXIgc2NvcGUgPSB0aGlz
OwogCi0gICAgfQorICAgICAgICB2YXIgaXNMb2FkaW5nID0gZmFsc2U7CisgICAgICAgIHZhciBp
dGVtc0xvYWRlZCA9IDA7CisgICAgICAgIHZhciBpdGVtc1RvdGFsID0gMDsKKyAgICAgICAgdmFy
IHVybE1vZGlmaWVyID0gdW5kZWZpbmVkOwogCi0gICAgZnVuY3Rpb24gQ3ViaWNCZXppZXJDdXJ2
ZSggdjAsIHYxLCB2MiwgdjMgKSB7CisgICAgICAgIC8vIFJlZmVyIHRvICM1Njg5IGZvciB0aGUg
cmVhc29uIHdoeSB3ZSBkb24ndCBzZXQgLm9uU3RhcnQKKyAgICAgICAgLy8gaW4gdGhlIGNvbnN0
cnVjdG9yCiAKLSAgICAgICAgQ3VydmUuY2FsbCggdGhpcyApOworICAgICAgICB0aGlzLm9uU3Rh
cnQgPSB1bmRlZmluZWQ7CisgICAgICAgIHRoaXMub25Mb2FkID0gb25Mb2FkOworICAgICAgICB0
aGlzLm9uUHJvZ3Jlc3MgPSBvblByb2dyZXNzOworICAgICAgICB0aGlzLm9uRXJyb3IgPSBvbkVy
cm9yOwogCi0gICAgICAgIHRoaXMudHlwZSA9ICdDdWJpY0JlemllckN1cnZlJzsKKyAgICAgICAg
dGhpcy5pdGVtU3RhcnQgPSBmdW5jdGlvbiAoIHVybCApIHsKIAotICAgICAgICB0aGlzLnYwID0g
djAgfHwgbmV3IFZlY3RvcjIoKTsKLSAgICAgICAgdGhpcy52MSA9IHYxIHx8IG5ldyBWZWN0b3Iy
KCk7Ci0gICAgICAgIHRoaXMudjIgPSB2MiB8fCBuZXcgVmVjdG9yMigpOwotICAgICAgICB0aGlz
LnYzID0gdjMgfHwgbmV3IFZlY3RvcjIoKTsKKyAgICAgICAgICAgIGl0ZW1zVG90YWwgKys7CiAK
LSAgICB9CisgICAgICAgICAgICBpZiAoIGlzTG9hZGluZyA9PT0gZmFsc2UgKSB7CiAKLSAgICBD
dWJpY0JlemllckN1cnZlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEN1cnZlLnByb3RvdHlw
ZSApOwotICAgIEN1YmljQmV6aWVyQ3VydmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3ViaWNC
ZXppZXJDdXJ2ZTsKKyAgICAgICAgICAgICAgICBpZiAoIHNjb3BlLm9uU3RhcnQgIT09IHVuZGVm
aW5lZCApIHsKIAotICAgIEN1YmljQmV6aWVyQ3VydmUucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJD
dXJ2ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHNjb3BlLm9uU3RhcnQoIHVybCwgaXRl
bXNMb2FkZWQsIGl0ZW1zVG90YWwgKTsKIAotICAgIEN1YmljQmV6aWVyQ3VydmUucHJvdG90eXBl
LmdldFBvaW50ID0gZnVuY3Rpb24gKCB0LCBvcHRpb25hbFRhcmdldCApIHsKKyAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgdmFyIHBvaW50ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3IFZlY3Rv
cjIoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICB2YXIgdjAgPSB0aGlzLnYwLCB2MSA9IHRo
aXMudjEsIHYyID0gdGhpcy52MiwgdjMgPSB0aGlzLnYzOworICAgICAgICAgICAgaXNMb2FkaW5n
ID0gdHJ1ZTsKIAotICAgICAgICBwb2ludC5zZXQoCi0gICAgICAgICAgICBDdWJpY0Jlemllcigg
dCwgdjAueCwgdjEueCwgdjIueCwgdjMueCApLAotICAgICAgICAgICAgQ3ViaWNCZXppZXIoIHQs
IHYwLnksIHYxLnksIHYyLnksIHYzLnkgKQotICAgICAgICApOworICAgICAgICB9OwogCi0gICAg
ICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgdGhpcy5pdGVtRW5kID0gZnVuY3Rpb24gKCB1cmwg
KSB7CiAKLSAgICB9OworICAgICAgICAgICAgaXRlbXNMb2FkZWQgKys7CiAKLSAgICBDdWJpY0Jl
emllckN1cnZlLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisgICAgICAg
ICAgICBpZiAoIHNjb3BlLm9uUHJvZ3Jlc3MgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICBD
dXJ2ZS5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKKyAgICAgICAgICAgICAg
ICBzY29wZS5vblByb2dyZXNzKCB1cmwsIGl0ZW1zTG9hZGVkLCBpdGVtc1RvdGFsICk7CiAKLSAg
ICAgICAgdGhpcy52MC5jb3B5KCBzb3VyY2UudjAgKTsKLSAgICAgICAgdGhpcy52MS5jb3B5KCBz
b3VyY2UudjEgKTsKLSAgICAgICAgdGhpcy52Mi5jb3B5KCBzb3VyY2UudjIgKTsKLSAgICAgICAg
dGhpcy52My5jb3B5KCBzb3VyY2UudjMgKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgIGlmICggaXRlbXNMb2FkZWQgPT09IGl0ZW1zVG90YWwgKSB7
CiAKLSAgICB9OworICAgICAgICAgICAgICAgIGlzTG9hZGluZyA9IGZhbHNlOwogCi0gICAgQ3Vi
aWNCZXppZXJDdXJ2ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgICAgIGlmICggc2NvcGUub25Mb2FkICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgdmFy
IGRhdGEgPSBDdXJ2ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoIHRoaXMgKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2NvcGUub25Mb2FkKCk7CiAKLSAgICAgICAgZGF0YS52MCA9IHRoaXMudjAudG9B
cnJheSgpOwotICAgICAgICBkYXRhLnYxID0gdGhpcy52MS50b0FycmF5KCk7Ci0gICAgICAgIGRh
dGEudjIgPSB0aGlzLnYyLnRvQXJyYXkoKTsKLSAgICAgICAgZGF0YS52MyA9IHRoaXMudjMudG9B
cnJheSgpOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAg
ICAgICAgIH0KIAotICAgIH07CisgICAgICAgIH07CiAKLSAgICBDdWJpY0JlemllckN1cnZlLnBy
b3RvdHlwZS5mcm9tSlNPTiA9IGZ1bmN0aW9uICgganNvbiApIHsKKyAgICAgICAgdGhpcy5pdGVt
RXJyb3IgPSBmdW5jdGlvbiAoIHVybCApIHsKIAotICAgICAgICBDdXJ2ZS5wcm90b3R5cGUuZnJv
bUpTT04uY2FsbCggdGhpcywganNvbiApOworICAgICAgICAgICAgaWYgKCBzY29wZS5vbkVycm9y
ICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgdGhpcy52MC5mcm9tQXJyYXkoIGpzb24udjAg
KTsKLSAgICAgICAgdGhpcy52MS5mcm9tQXJyYXkoIGpzb24udjEgKTsKLSAgICAgICAgdGhpcy52
Mi5mcm9tQXJyYXkoIGpzb24udjIgKTsKLSAgICAgICAgdGhpcy52My5mcm9tQXJyYXkoIGpzb24u
djMgKTsKKyAgICAgICAgICAgICAgICBzY29wZS5vbkVycm9yKCB1cmwgKTsKIAotICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KIAotICAgIH07CisgICAgICAgIH07CiAKLSAgICBm
dW5jdGlvbiBDdWJpY0JlemllckN1cnZlMyggdjAsIHYxLCB2MiwgdjMgKSB7CisgICAgICAgIHRo
aXMucmVzb2x2ZVVSTCA9IGZ1bmN0aW9uICggdXJsICkgewogCi0gICAgICAgIEN1cnZlLmNhbGwo
IHRoaXMgKTsKKyAgICAgICAgICAgIGlmICggdXJsTW9kaWZpZXIgKSB7CiAKLSAgICAgICAgdGhp
cy50eXBlID0gJ0N1YmljQmV6aWVyQ3VydmUzJzsKKyAgICAgICAgICAgICAgICByZXR1cm4gdXJs
TW9kaWZpZXIoIHVybCApOwogCi0gICAgICAgIHRoaXMudjAgPSB2MCB8fCBuZXcgVmVjdG9yMygp
OwotICAgICAgICB0aGlzLnYxID0gdjEgfHwgbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgdGhpcy52
MiA9IHYyIHx8IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgIHRoaXMudjMgPSB2MyB8fCBuZXcgVmVj
dG9yMygpOworICAgICAgICAgICAgfQogCi0gICAgfQorICAgICAgICAgICAgcmV0dXJuIHVybDsK
IAotICAgIEN1YmljQmV6aWVyQ3VydmUzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEN1cnZl
LnByb3RvdHlwZSApOwotICAgIEN1YmljQmV6aWVyQ3VydmUzLnByb3RvdHlwZS5jb25zdHJ1Y3Rv
ciA9IEN1YmljQmV6aWVyQ3VydmUzOworICAgICAgICB9OwogCi0gICAgQ3ViaWNCZXppZXJDdXJ2
ZTMucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZTMgPSB0cnVlOworICAgICAgICB0aGlzLnNl
dFVSTE1vZGlmaWVyID0gZnVuY3Rpb24gKCB0cmFuc2Zvcm0gKSB7CiAKLSAgICBDdWJpY0Jlemll
ckN1cnZlMy5wcm90b3R5cGUuZ2V0UG9pbnQgPSBmdW5jdGlvbiAoIHQsIG9wdGlvbmFsVGFyZ2V0
ICkgeworICAgICAgICAgICAgdXJsTW9kaWZpZXIgPSB0cmFuc2Zvcm07CisgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKIAotICAgICAgICB2YXIgcG9pbnQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcg
VmVjdG9yMygpOworICAgICAgICB9OwogCi0gICAgICAgIHZhciB2MCA9IHRoaXMudjAsIHYxID0g
dGhpcy52MSwgdjIgPSB0aGlzLnYyLCB2MyA9IHRoaXMudjM7CisgICAgfQogCi0gICAgICAgIHBv
aW50LnNldCgKLSAgICAgICAgICAgIEN1YmljQmV6aWVyKCB0LCB2MC54LCB2MS54LCB2Mi54LCB2
My54ICksCi0gICAgICAgICAgICBDdWJpY0JlemllciggdCwgdjAueSwgdjEueSwgdjIueSwgdjMu
eSApLAotICAgICAgICAgICAgQ3ViaWNCZXppZXIoIHQsIHYwLnosIHYxLnosIHYyLnosIHYzLnog
KQotICAgICAgICApOworICAgIHZhciBEZWZhdWx0TG9hZGluZ01hbmFnZXIgPSBuZXcgTG9hZGlu
Z01hbmFnZXIoKTsKIAotICAgICAgICByZXR1cm4gcG9pbnQ7CisgICAgLyoqCisgICAgICogQGF1
dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKi8KIAotICAgIH07CisgICAg
dmFyIGxvYWRpbmcgPSB7fTsKIAotICAgIEN1YmljQmV6aWVyQ3VydmUzLnByb3RvdHlwZS5jb3B5
ID0gZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisgICAgZnVuY3Rpb24gRmlsZUxvYWRlciggbWFuYWdl
ciApIHsKIAotICAgICAgICBDdXJ2ZS5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2Ug
KTsKKyAgICAgICAgdGhpcy5tYW5hZ2VyID0gKCBtYW5hZ2VyICE9PSB1bmRlZmluZWQgKSA/IG1h
bmFnZXIgOiBEZWZhdWx0TG9hZGluZ01hbmFnZXI7CiAKLSAgICAgICAgdGhpcy52MC5jb3B5KCBz
b3VyY2UudjAgKTsKLSAgICAgICAgdGhpcy52MS5jb3B5KCBzb3VyY2UudjEgKTsKLSAgICAgICAg
dGhpcy52Mi5jb3B5KCBzb3VyY2UudjIgKTsKLSAgICAgICAgdGhpcy52My5jb3B5KCBzb3VyY2Uu
djMgKTsKKyAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgT2JqZWN0LmFzc2lnbigg
RmlsZUxvYWRlci5wcm90b3R5cGUsIHsKIAotICAgIH07CisgICAgICAgIGxvYWQ6IGZ1bmN0aW9u
ICggdXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7CiAKLSAgICBDdWJpY0Jlemll
ckN1cnZlMy5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYg
KCB1cmwgPT09IHVuZGVmaW5lZCApIHVybCA9ICcnOwogCi0gICAgICAgIHZhciBkYXRhID0gQ3Vy
dmUucHJvdG90eXBlLnRvSlNPTi5jYWxsKCB0aGlzICk7CisgICAgICAgICAgICBpZiAoIHRoaXMu
cGF0aCAhPT0gdW5kZWZpbmVkICkgdXJsID0gdGhpcy5wYXRoICsgdXJsOwogCi0gICAgICAgIGRh
dGEudjAgPSB0aGlzLnYwLnRvQXJyYXkoKTsKLSAgICAgICAgZGF0YS52MSA9IHRoaXMudjEudG9B
cnJheSgpOwotICAgICAgICBkYXRhLnYyID0gdGhpcy52Mi50b0FycmF5KCk7Ci0gICAgICAgIGRh
dGEudjMgPSB0aGlzLnYzLnRvQXJyYXkoKTsKKyAgICAgICAgICAgIHVybCA9IHRoaXMubWFuYWdl
ci5yZXNvbHZlVVJMKCB1cmwgKTsKIAotICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAg
IHZhciBzY29wZSA9IHRoaXM7CiAKLSAgICB9OworICAgICAgICAgICAgdmFyIGNhY2hlZCA9IENh
Y2hlLmdldCggdXJsICk7CiAKLSAgICBDdWJpY0JlemllckN1cnZlMy5wcm90b3R5cGUuZnJvbUpT
T04gPSBmdW5jdGlvbiAoIGpzb24gKSB7CisgICAgICAgICAgICBpZiAoIGNhY2hlZCAhPT0gdW5k
ZWZpbmVkICkgewogCi0gICAgICAgIEN1cnZlLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKCB0aGlz
LCBqc29uICk7CisgICAgICAgICAgICAgICAgc2NvcGUubWFuYWdlci5pdGVtU3RhcnQoIHVybCAp
OwogCi0gICAgICAgIHRoaXMudjAuZnJvbUFycmF5KCBqc29uLnYwICk7Ci0gICAgICAgIHRoaXMu
djEuZnJvbUFycmF5KCBqc29uLnYxICk7Ci0gICAgICAgIHRoaXMudjIuZnJvbUFycmF5KCBqc29u
LnYyICk7Ci0gICAgICAgIHRoaXMudjMuZnJvbUFycmF5KCBqc29uLnYzICk7CisgICAgICAgICAg
ICAgICAgc2V0VGltZW91dCggZnVuY3Rpb24gKCkgewogCi0gICAgICAgIHJldHVybiB0aGlzOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIG9uTG9hZCApIG9uTG9hZCggY2FjaGVkICk7CiAKLSAg
ICB9OworICAgICAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApOwog
Ci0gICAgZnVuY3Rpb24gTGluZUN1cnZlKCB2MSwgdjIgKSB7CisgICAgICAgICAgICAgICAgfSwg
MCApOwogCi0gICAgICAgIEN1cnZlLmNhbGwoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gY2FjaGVkOwogCi0gICAgICAgIHRoaXMudHlwZSA9ICdMaW5lQ3VydmUnOworICAgICAgICAg
ICAgfQogCi0gICAgICAgIHRoaXMudjEgPSB2MSB8fCBuZXcgVmVjdG9yMigpOwotICAgICAgICB0
aGlzLnYyID0gdjIgfHwgbmV3IFZlY3RvcjIoKTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHJl
cXVlc3QgaXMgZHVwbGljYXRlCiAKLSAgICB9CisgICAgICAgICAgICBpZiAoIGxvYWRpbmdbIHVy
bCBdICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICBMaW5lQ3VydmUucHJvdG90eXBlID0gT2JqZWN0
LmNyZWF0ZSggQ3VydmUucHJvdG90eXBlICk7Ci0gICAgTGluZUN1cnZlLnByb3RvdHlwZS5jb25z
dHJ1Y3RvciA9IExpbmVDdXJ2ZTsKKyAgICAgICAgICAgICAgICBsb2FkaW5nWyB1cmwgXS5wdXNo
KCB7CiAKLSAgICBMaW5lQ3VydmUucHJvdG90eXBlLmlzTGluZUN1cnZlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgb25Mb2FkOiBvbkxvYWQsCisgICAgICAgICAgICAgICAgICAgIG9uUHJv
Z3Jlc3M6IG9uUHJvZ3Jlc3MsCisgICAgICAgICAgICAgICAgICAgIG9uRXJyb3I6IG9uRXJyb3IK
IAotICAgIExpbmVDdXJ2ZS5wcm90b3R5cGUuZ2V0UG9pbnQgPSBmdW5jdGlvbiAoIHQsIG9wdGlv
bmFsVGFyZ2V0ICkgeworICAgICAgICAgICAgICAgIH0gKTsKIAotICAgICAgICB2YXIgcG9pbnQg
PSBvcHRpb25hbFRhcmdldCB8fCBuZXcgVmVjdG9yMigpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICBpZiAoIHQgPT09IDEgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIHBvaW50LmNvcHkoIHRoaXMudjIgKTsKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciBkYXRh
OiBVUkkKKyAgICAgICAgICAgIHZhciBkYXRhVXJpUmVnZXggPSAvXmRhdGE6KC4qPykoO2Jhc2U2
NCk/LCguKikkLzsKKyAgICAgICAgICAgIHZhciBkYXRhVXJpUmVnZXhSZXN1bHQgPSB1cmwubWF0
Y2goIGRhdGFVcmlSZWdleCApOwogCi0gICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBT
YWZhcmkgY2FuIG5vdCBoYW5kbGUgRGF0YSBVUklzIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Qgc28g
cHJvY2VzcyBtYW51YWxseQorICAgICAgICAgICAgaWYgKCBkYXRhVXJpUmVnZXhSZXN1bHQgKSB7
CiAKLSAgICAgICAgICAgIHBvaW50LmNvcHkoIHRoaXMudjIgKS5zdWIoIHRoaXMudjEgKTsKLSAg
ICAgICAgICAgIHBvaW50Lm11bHRpcGx5U2NhbGFyKCB0ICkuYWRkKCB0aGlzLnYxICk7CisgICAg
ICAgICAgICAgICAgdmFyIG1pbWVUeXBlID0gZGF0YVVyaVJlZ2V4UmVzdWx0WyAxIF07CisgICAg
ICAgICAgICAgICAgdmFyIGlzQmFzZTY0ID0gISEgZGF0YVVyaVJlZ2V4UmVzdWx0WyAyIF07Cisg
ICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBkYXRhVXJpUmVnZXhSZXN1bHRbIDMgXTsKIAotICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZGF0YSA9IGRlY29kZVVSSUNvbXBvbmVudCggZGF0YSAp
OwogCi0gICAgICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgICAgICAgICBpZiAoIGlzQmFzZTY0
ICkgZGF0YSA9IGF0b2IoIGRhdGEgKTsKIAotICAgIH07CisgICAgICAgICAgICAgICAgdHJ5IHsK
IAotICAgIC8vIExpbmUgY3VydmUgaXMgbGluZWFyLCBzbyB3ZSBjYW4gb3ZlcndyaXRlIGRlZmF1
bHQgZ2V0UG9pbnRBdAorICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2U7CisgICAgICAg
ICAgICAgICAgICAgIHZhciByZXNwb25zZVR5cGUgPSAoIHRoaXMucmVzcG9uc2VUeXBlIHx8ICcn
ICkudG9Mb3dlckNhc2UoKTsKIAotICAgIExpbmVDdXJ2ZS5wcm90b3R5cGUuZ2V0UG9pbnRBdCA9
IGZ1bmN0aW9uICggdSwgb3B0aW9uYWxUYXJnZXQgKSB7CisgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoIHJlc3BvbnNlVHlwZSApIHsKIAotICAgICAgICByZXR1cm4gdGhpcy5nZXRQb2ludCgg
dSwgb3B0aW9uYWxUYXJnZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FycmF5
YnVmZmVyJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Jsb2InOgogCi0gICAgfTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KCBk
YXRhLmxlbmd0aCApOwogCi0gICAgTGluZUN1cnZlLnByb3RvdHlwZS5nZXRUYW5nZW50ID0gZnVu
Y3Rpb24gKCAvKiB0ICovICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZh
ciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICsrICkgewogCi0gICAgICAgIHZhciB0YW5nZW50
ID0gdGhpcy52Mi5jbG9uZSgpLnN1YiggdGhpcy52MSApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2aWV3WyBpIF0gPSBkYXRhLmNoYXJDb2RlQXQoIGkgKTsKIAotICAgICAgICBy
ZXR1cm4gdGFuZ2VudC5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2VUeXBl
ID09PSAnYmxvYicgKSB7CiAKLSAgICBMaW5lQ3VydmUucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlv
biAoIHNvdXJjZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Ug
PSBuZXcgQmxvYiggWyB2aWV3LmJ1ZmZlciBdLCB7IHR5cGU6IG1pbWVUeXBlIH0gKTsKIAotICAg
ICAgICBDdXJ2ZS5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgIHRoaXMudjEuY29weSggc291
cmNlLnYxICk7Ci0gICAgICAgIHRoaXMudjIuY29weSggc291cmNlLnYyICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gdmlldy5idWZmZXI7CiAKLSAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgfTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgIExpbmVDdXJ2ZS5wcm90b3R5
cGUudG9KU09OID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
ZG9jdW1lbnQnOgogCi0gICAgICAgIHZhciBkYXRhID0gQ3VydmUucHJvdG90eXBlLnRvSlNPTi5j
YWxsKCB0aGlzICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5l
dyBET01QYXJzZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHBh
cnNlci5wYXJzZUZyb21TdHJpbmcoIGRhdGEsIG1pbWVUeXBlICk7CiAKLSAgICAgICAgZGF0YS52
MSA9IHRoaXMudjEudG9BcnJheSgpOwotICAgICAgICBkYXRhLnYyID0gdGhpcy52Mi50b0FycmF5
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgcmV0dXJu
IGRhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29uJzoKIAotICAgIH07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBKU09OLnBhcnNlKCBkYXRhICk7
CiAKLSAgICBMaW5lQ3VydmUucHJvdG90eXBlLmZyb21KU09OID0gZnVuY3Rpb24gKCBqc29uICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIEN1cnZlLnBy
b3RvdHlwZS5mcm9tSlNPTi5jYWxsKCB0aGlzLCBqc29uICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OiAvLyAndGV4dCcgb3Igb3RoZXIKIAotICAgICAgICB0aGlzLnYxLmZyb21B
cnJheSgganNvbi52MSApOwotICAgICAgICB0aGlzLnYyLmZyb21BcnJheSgganNvbi52MiApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gZGF0YTsKIAotICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgIH07
CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgIGZ1bmN0aW9uIExpbmVDdXJ2ZTMoIHYxLCB2
MiApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgbmV4dCBicm93c2VyIHRpY2sg
bGlrZSBzdGFuZGFyZCBYTUxIdHRwUmVxdWVzdCBldmVudCBkaXNwYXRjaGluZyBkb2VzCisgICAg
ICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHsKIAotICAgICAgICBDdXJ2
ZS5jYWxsKCB0aGlzICk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9uTG9hZCApIG9u
TG9hZCggcmVzcG9uc2UgKTsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnTGluZUN1cnZlMyc7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApOwogCi0g
ICAgICAgIHRoaXMudjEgPSB2MSB8fCBuZXcgVmVjdG9yMygpOwotICAgICAgICB0aGlzLnYyID0g
djIgfHwgbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgICAgICAgICAgfSwgMCApOwogCi0gICAg
fQorICAgICAgICAgICAgICAgIH0gY2F0Y2ggKCBlcnJvciApIHsKIAotICAgIExpbmVDdXJ2ZTMu
cHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQ3VydmUucHJvdG90eXBlICk7Ci0gICAgTGluZUN1
cnZlMy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMaW5lQ3VydmUzOworICAgICAgICAgICAgICAg
ICAgICAvLyBXYWl0IGZvciBuZXh0IGJyb3dzZXIgdGljayBsaWtlIHN0YW5kYXJkIFhNTEh0dHBS
ZXF1ZXN0IGV2ZW50IGRpc3BhdGNoaW5nIGRvZXMKKyAgICAgICAgICAgICAgICAgICAgc2V0VGlt
ZW91dCggZnVuY3Rpb24gKCkgewogCi0gICAgTGluZUN1cnZlMy5wcm90b3R5cGUuaXNMaW5lQ3Vy
dmUzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb25FcnJvciApIG9uRXJy
b3IoIGVycm9yICk7CiAKLSAgICBMaW5lQ3VydmUzLnByb3RvdHlwZS5nZXRQb2ludCA9IGZ1bmN0
aW9uICggdCwgb3B0aW9uYWxUYXJnZXQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzY29w
ZS5tYW5hZ2VyLml0ZW1FcnJvciggdXJsICk7CisgICAgICAgICAgICAgICAgICAgICAgICBzY29w
ZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApOwogCi0gICAgICAgIHZhciBwb2ludCA9IG9wdGlvbmFs
VGFyZ2V0IHx8IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICAgICAgICAgIH0sIDAgKTsKIAot
ICAgICAgICBpZiAoIHQgPT09IDEgKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBwb2ludC5jb3B5KCB0aGlzLnYyICk7CisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGlzZSBhcnJheSBmb3IgZHVwbGlj
YXRlIHJlcXVlc3RzCiAKLSAgICAgICAgICAgIHBvaW50LmNvcHkoIHRoaXMudjIgKS5zdWIoIHRo
aXMudjEgKTsKLSAgICAgICAgICAgIHBvaW50Lm11bHRpcGx5U2NhbGFyKCB0ICkuYWRkKCB0aGlz
LnYxICk7CisgICAgICAgICAgICAgICAgbG9hZGluZ1sgdXJsIF0gPSBbXTsKIAotICAgICAgICB9
CisgICAgICAgICAgICAgICAgbG9hZGluZ1sgdXJsIF0ucHVzaCggewogCi0gICAgICAgIHJldHVy
biBwb2ludDsKKyAgICAgICAgICAgICAgICAgICAgb25Mb2FkOiBvbkxvYWQsCisgICAgICAgICAg
ICAgICAgICAgIG9uUHJvZ3Jlc3M6IG9uUHJvZ3Jlc3MsCisgICAgICAgICAgICAgICAgICAgIG9u
RXJyb3I6IG9uRXJyb3IKIAotICAgIH07CisgICAgICAgICAgICAgICAgfSApOwogCi0gICAgLy8g
TGluZSBjdXJ2ZSBpcyBsaW5lYXIsIHNvIHdlIGNhbiBvdmVyd3JpdGUgZGVmYXVsdCBnZXRQb2lu
dEF0CisgICAgICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsK
IAotICAgIExpbmVDdXJ2ZTMucHJvdG90eXBlLmdldFBvaW50QXQgPSBmdW5jdGlvbiAoIHUsIG9w
dGlvbmFsVGFyZ2V0ICkgeworICAgICAgICAgICAgICAgIHJlcXVlc3Qub3BlbiggJ0dFVCcsIHVy
bCwgdHJ1ZSApOwogCi0gICAgICAgIHJldHVybiB0aGlzLmdldFBvaW50KCB1LCBvcHRpb25hbFRh
cmdldCApOworICAgICAgICAgICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lciggJ2xvYWQn
LCBmdW5jdGlvbiAoIGV2ZW50ICkgewogCi0gICAgfTsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTsKIAotICAgIExpbmVDdXJ2ZTMucHJvdG90eXBlLmNv
cHkgPSBmdW5jdGlvbiAoIHNvdXJjZSApIHsKKyAgICAgICAgICAgICAgICAgICAgQ2FjaGUuYWRk
KCB1cmwsIHJlc3BvbnNlICk7CiAKLSAgICAgICAgQ3VydmUucHJvdG90eXBlLmNvcHkuY2FsbCgg
dGhpcywgc291cmNlICk7CisgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFja3MgPSBsb2Fk
aW5nWyB1cmwgXTsKIAotICAgICAgICB0aGlzLnYxLmNvcHkoIHNvdXJjZS52MSApOwotICAgICAg
ICB0aGlzLnYyLmNvcHkoIHNvdXJjZS52MiApOworICAgICAgICAgICAgICAgICAgICBkZWxldGUg
bG9hZGluZ1sgdXJsIF07CiAKLSAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAg
ICAgIGlmICggdGhpcy5zdGF0dXMgPT09IDIwMCB8fCB0aGlzLnN0YXR1cyA9PT0gMCApIHsKIAot
ICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTb21lIGJyb3dzZXJzIHJldHVybiBI
VFRQIFN0YXR1cyAwIHdoZW4gdXNpbmcgbm9uLWh0dHAgcHJvdG9jb2wKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGUuZy4gJ2ZpbGU6Ly8nIG9yICdkYXRhOi8vJy4gSGFuZGxlIGFzIHN1Y2Nl
c3MuCiAKLSAgICBMaW5lQ3VydmUzLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMuc3RhdHVzID09PSAwICkgY29uc29sZS53
YXJuKCAnVEhSRUUuRmlsZUxvYWRlcjogSFRUUCBTdGF0dXMgMCByZWNlaXZlZC4nICk7CiAKLSAg
ICAgICAgdmFyIGRhdGEgPSBDdXJ2ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoIHRoaXMgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBjYWxsYmFja3MubGVu
Z3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAgICAgZGF0YS52MSA9IHRoaXMudjEudG9BcnJh
eSgpOwotICAgICAgICBkYXRhLnYyID0gdGhpcy52Mi50b0FycmF5KCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gY2FsbGJhY2tzWyBpIF07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5vbkxvYWQgKSBjYWxsYmFjay5vbkxvYWQo
IHJlc3BvbnNlICk7CiAKLSAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAKLSAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubWFuYWdlci5p
dGVtRW5kKCB1cmwgKTsKIAotICAgIExpbmVDdXJ2ZTMucHJvdG90eXBlLmZyb21KU09OID0gZnVu
Y3Rpb24gKCBqc29uICkgeworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAg
IEN1cnZlLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKCB0aGlzLCBqc29uICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGlsID0gY2FsbGJhY2tzLmxlbmd0aDsgaSA8
IGlsOyBpICsrICkgewogCi0gICAgICAgIHRoaXMudjEuZnJvbUFycmF5KCBqc29uLnYxICk7Ci0g
ICAgICAgIHRoaXMudjIuZnJvbUFycmF5KCBqc29uLnYyICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGNhbGxiYWNrID0gY2FsbGJhY2tzWyBpIF07CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5vbkVycm9yICkgY2FsbGJhY2sub25FcnJvciggZXZl
bnQgKTsKIAotICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
IAotICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FcnJv
ciggdXJsICk7CisgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FbmQo
IHVybCApOwogCi0gICAgZnVuY3Rpb24gUXVhZHJhdGljQmV6aWVyQ3VydmUoIHYwLCB2MSwgdjIg
KSB7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBDdXJ2ZS5jYWxsKCB0aGlzICk7
CisgICAgICAgICAgICAgICAgfSwgZmFsc2UgKTsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnUXVh
ZHJhdGljQmV6aWVyQ3VydmUnOworICAgICAgICAgICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0
ZW5lciggJ3Byb2dyZXNzJywgZnVuY3Rpb24gKCBldmVudCApIHsKIAotICAgICAgICB0aGlzLnYw
ID0gdjAgfHwgbmV3IFZlY3RvcjIoKTsKLSAgICAgICAgdGhpcy52MSA9IHYxIHx8IG5ldyBWZWN0
b3IyKCk7Ci0gICAgICAgIHRoaXMudjIgPSB2MiB8fCBuZXcgVmVjdG9yMigpOworICAgICAgICAg
ICAgICAgICAgICB2YXIgY2FsbGJhY2tzID0gbG9hZGluZ1sgdXJsIF07CiAKLSAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBjYWxsYmFja3MubGVuZ3RoOyBp
IDwgaWw7IGkgKysgKSB7CiAKLSAgICBRdWFkcmF0aWNCZXppZXJDdXJ2ZS5wcm90b3R5cGUgPSBP
YmplY3QuY3JlYXRlKCBDdXJ2ZS5wcm90b3R5cGUgKTsKLSAgICBRdWFkcmF0aWNCZXppZXJDdXJ2
ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBRdWFkcmF0aWNCZXppZXJDdXJ2ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGNhbGxiYWNrc1sgaSBdOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5vblByb2dyZXNzICkgY2FsbGJhY2sub25Qcm9n
cmVzcyggZXZlbnQgKTsKIAotICAgIFF1YWRyYXRpY0JlemllckN1cnZlLnByb3RvdHlwZS5pc1F1
YWRyYXRpY0JlemllckN1cnZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAg
UXVhZHJhdGljQmV6aWVyQ3VydmUucHJvdG90eXBlLmdldFBvaW50ID0gZnVuY3Rpb24gKCB0LCBv
cHRpb25hbFRhcmdldCApIHsKKyAgICAgICAgICAgICAgICB9LCBmYWxzZSApOwogCi0gICAgICAg
IHZhciBwb2ludCA9IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBWZWN0b3IyKCk7CisgICAgICAgICAg
ICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCAnZXJyb3InLCBmdW5jdGlvbiAoIGV2ZW50
ICkgewogCi0gICAgICAgIHZhciB2MCA9IHRoaXMudjAsIHYxID0gdGhpcy52MSwgdjIgPSB0aGlz
LnYyOworICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2tzID0gbG9hZGluZ1sgdXJsIF07
CiAKLSAgICAgICAgcG9pbnQuc2V0KAotICAgICAgICAgICAgUXVhZHJhdGljQmV6aWVyKCB0LCB2
MC54LCB2MS54LCB2Mi54ICksCi0gICAgICAgICAgICBRdWFkcmF0aWNCZXppZXIoIHQsIHYwLnks
IHYxLnksIHYyLnkgKQotICAgICAgICApOworICAgICAgICAgICAgICAgICAgICBkZWxldGUgbG9h
ZGluZ1sgdXJsIF07CiAKLSAgICAgICAgcmV0dXJuIHBvaW50OworICAgICAgICAgICAgICAgICAg
ICBmb3IgKCB2YXIgaSA9IDAsIGlsID0gY2FsbGJhY2tzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkg
ewogCi0gICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGNhbGxi
YWNrc1sgaSBdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5vbkVycm9y
ICkgY2FsbGJhY2sub25FcnJvciggZXZlbnQgKTsKIAotICAgIFF1YWRyYXRpY0JlemllckN1cnZl
LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICBDdXJ2ZS5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2Ug
KTsKKyAgICAgICAgICAgICAgICAgICAgc2NvcGUubWFuYWdlci5pdGVtRXJyb3IoIHVybCApOwor
ICAgICAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApOwogCi0gICAg
ICAgIHRoaXMudjAuY29weSggc291cmNlLnYwICk7Ci0gICAgICAgIHRoaXMudjEuY29weSggc291
cmNlLnYxICk7Ci0gICAgICAgIHRoaXMudjIuY29weSggc291cmNlLnYyICk7CisgICAgICAgICAg
ICAgICAgfSwgZmFsc2UgKTsKIAotICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAg
ICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoICdhYm9ydCcsIGZ1bmN0aW9uICggZXZlbnQgKSB7
CiAKLSAgICB9OworICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2tzID0gbG9hZGluZ1sg
dXJsIF07CiAKLSAgICBRdWFkcmF0aWNCZXppZXJDdXJ2ZS5wcm90b3R5cGUudG9KU09OID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBkZWxldGUgbG9hZGluZ1sgdXJsIF07CiAK
LSAgICAgICAgdmFyIGRhdGEgPSBDdXJ2ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoIHRoaXMgKTsK
KyAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IGNhbGxiYWNrcy5sZW5n
dGg7IGkgPCBpbDsgaSArKyApIHsKIAotICAgICAgICBkYXRhLnYwID0gdGhpcy52MC50b0FycmF5
KCk7Ci0gICAgICAgIGRhdGEudjEgPSB0aGlzLnYxLnRvQXJyYXkoKTsKLSAgICAgICAgZGF0YS52
MiA9IHRoaXMudjIudG9BcnJheSgpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbGxi
YWNrID0gY2FsbGJhY2tzWyBpIF07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxi
YWNrLm9uRXJyb3IgKSBjYWxsYmFjay5vbkVycm9yKCBldmVudCApOwogCi0gICAgICAgIHJldHVy
biBkYXRhOworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICB9OworICAgICAgICAgICAgICAg
ICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FcnJvciggdXJsICk7CisgICAgICAgICAgICAgICAgICAg
IHNjb3BlLm1hbmFnZXIuaXRlbUVuZCggdXJsICk7CiAKLSAgICBRdWFkcmF0aWNCZXppZXJDdXJ2
ZS5wcm90b3R5cGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoIGpzb24gKSB7CisgICAgICAgICAgICAg
ICAgfSwgZmFsc2UgKTsKIAotICAgICAgICBDdXJ2ZS5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCgg
dGhpcywganNvbiApOworICAgICAgICAgICAgICAgIGlmICggdGhpcy5yZXNwb25zZVR5cGUgIT09
IHVuZGVmaW5lZCApIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gdGhpcy5yZXNwb25zZVR5cGU7Cisg
ICAgICAgICAgICAgICAgaWYgKCB0aGlzLndpdGhDcmVkZW50aWFscyAhPT0gdW5kZWZpbmVkICkg
cmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSB0aGlzLndpdGhDcmVkZW50aWFsczsKIAotICAgICAg
ICB0aGlzLnYwLmZyb21BcnJheSgganNvbi52MCApOwotICAgICAgICB0aGlzLnYxLmZyb21BcnJh
eSgganNvbi52MSApOwotICAgICAgICB0aGlzLnYyLmZyb21BcnJheSgganNvbi52MiApOworICAg
ICAgICAgICAgICAgIGlmICggcmVxdWVzdC5vdmVycmlkZU1pbWVUeXBlICkgcmVxdWVzdC5vdmVy
cmlkZU1pbWVUeXBlKCB0aGlzLm1pbWVUeXBlICE9PSB1bmRlZmluZWQgPyB0aGlzLm1pbWVUeXBl
IDogJ3RleHQvcGxhaW4nICk7CiAKLSAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAg
ICAgZm9yICggdmFyIGhlYWRlciBpbiB0aGlzLnJlcXVlc3RIZWFkZXIgKSB7CiAKLSAgICB9Owor
ICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoIGhlYWRlciwgdGhp
cy5yZXF1ZXN0SGVhZGVyWyBoZWFkZXIgXSApOwogCi0gICAgZnVuY3Rpb24gUXVhZHJhdGljQmV6
aWVyQ3VydmUzKCB2MCwgdjEsIHYyICkgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBD
dXJ2ZS5jYWxsKCB0aGlzICk7CisgICAgICAgICAgICAgICAgcmVxdWVzdC5zZW5kKCBudWxsICk7
CiAKLSAgICAgICAgdGhpcy50eXBlID0gJ1F1YWRyYXRpY0JlemllckN1cnZlMyc7CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgdGhpcy52MCA9IHYwIHx8IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAg
IHRoaXMudjEgPSB2MSB8fCBuZXcgVmVjdG9yMygpOwotICAgICAgICB0aGlzLnYyID0gdjIgfHwg
bmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIuaXRlbVN0YXJ0KCB1cmwg
KTsKIAotICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXF1ZXN0OwogCi0gICAgUXVhZHJhdGlj
QmV6aWVyQ3VydmUzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEN1cnZlLnByb3RvdHlwZSAp
OwotICAgIFF1YWRyYXRpY0JlemllckN1cnZlMy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBRdWFk
cmF0aWNCZXppZXJDdXJ2ZTM7CisgICAgICAgIH0sCiAKLSAgICBRdWFkcmF0aWNCZXppZXJDdXJ2
ZTMucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzID0gdHJ1ZTsKKyAgICAgICAgc2V0
UGF0aDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKIAotICAgIFF1YWRyYXRpY0JlemllckN1cnZlMy5w
cm90b3R5cGUuZ2V0UG9pbnQgPSBmdW5jdGlvbiAoIHQsIG9wdGlvbmFsVGFyZ2V0ICkgeworICAg
ICAgICAgICAgdGhpcy5wYXRoID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAot
ICAgICAgICB2YXIgcG9pbnQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcgVmVjdG9yMygpOworICAg
ICAgICB9LAogCi0gICAgICAgIHZhciB2MCA9IHRoaXMudjAsIHYxID0gdGhpcy52MSwgdjIgPSB0
aGlzLnYyOworICAgICAgICBzZXRSZXNwb25zZVR5cGU6IGZ1bmN0aW9uICggdmFsdWUgKSB7CiAK
LSAgICAgICAgcG9pbnQuc2V0KAotICAgICAgICAgICAgUXVhZHJhdGljQmV6aWVyKCB0LCB2MC54
LCB2MS54LCB2Mi54ICksCi0gICAgICAgICAgICBRdWFkcmF0aWNCZXppZXIoIHQsIHYwLnksIHYx
LnksIHYyLnkgKSwKLSAgICAgICAgICAgIFF1YWRyYXRpY0JlemllciggdCwgdjAueiwgdjEueiwg
djIueiApCi0gICAgICAgICk7CisgICAgICAgICAgICB0aGlzLnJlc3BvbnNlVHlwZSA9IHZhbHVl
OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgcmV0dXJuIHBvaW50OworICAg
ICAgICB9LAogCi0gICAgfTsKKyAgICAgICAgc2V0V2l0aENyZWRlbnRpYWxzOiBmdW5jdGlvbiAo
IHZhbHVlICkgewogCi0gICAgUXVhZHJhdGljQmV6aWVyQ3VydmUzLnByb3RvdHlwZS5jb3B5ID0g
ZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisgICAgICAgICAgICB0aGlzLndpdGhDcmVkZW50aWFscyA9
IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgQ3VydmUucHJvdG90
eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CisgICAgICAgIH0sCiAKLSAgICAgICAgdGhp
cy52MC5jb3B5KCBzb3VyY2UudjAgKTsKLSAgICAgICAgdGhpcy52MS5jb3B5KCBzb3VyY2UudjEg
KTsKLSAgICAgICAgdGhpcy52Mi5jb3B5KCBzb3VyY2UudjIgKTsKKyAgICAgICAgc2V0TWltZVR5
cGU6IGZ1bmN0aW9uICggdmFsdWUgKSB7CiAKLSAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
ICAgICB0aGlzLm1pbWVUeXBlID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAot
ICAgIH07CisgICAgICAgIH0sCiAKLSAgICBRdWFkcmF0aWNCZXppZXJDdXJ2ZTMucHJvdG90eXBl
LnRvSlNPTiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rp
b24gKCB2YWx1ZSApIHsKIAotICAgICAgICB2YXIgZGF0YSA9IEN1cnZlLnByb3RvdHlwZS50b0pT
T04uY2FsbCggdGhpcyApOworICAgICAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVyID0gdmFsdWU7
CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICBkYXRhLnYwID0gdGhpcy52MC50
b0FycmF5KCk7Ci0gICAgICAgIGRhdGEudjEgPSB0aGlzLnYxLnRvQXJyYXkoKTsKLSAgICAgICAg
ZGF0YS52MiA9IHRoaXMudjIudG9BcnJheSgpOworICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJu
IGRhdGE7CisgICAgfSApOwogCi0gICAgfTsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIGJob3Vz
dG9uIC8gaHR0cDovL2NsYXJhLmlvLworICAgICAqLwogCi0gICAgUXVhZHJhdGljQmV6aWVyQ3Vy
dmUzLnByb3RvdHlwZS5mcm9tSlNPTiA9IGZ1bmN0aW9uICgganNvbiApIHsKKyAgICBmdW5jdGlv
biBBbmltYXRpb25Mb2FkZXIoIG1hbmFnZXIgKSB7CiAKLSAgICAgICAgQ3VydmUucHJvdG90eXBl
LmZyb21KU09OLmNhbGwoIHRoaXMsIGpzb24gKTsKKyAgICAgICAgdGhpcy5tYW5hZ2VyID0gKCBt
YW5hZ2VyICE9PSB1bmRlZmluZWQgKSA/IG1hbmFnZXIgOiBEZWZhdWx0TG9hZGluZ01hbmFnZXI7
CiAKLSAgICAgICAgdGhpcy52MC5mcm9tQXJyYXkoIGpzb24udjAgKTsKLSAgICAgICAgdGhpcy52
MS5mcm9tQXJyYXkoIGpzb24udjEgKTsKLSAgICAgICAgdGhpcy52Mi5mcm9tQXJyYXkoIGpzb24u
djIgKTsKKyAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgT2JqZWN0LmFzc2lnbigg
QW5pbWF0aW9uTG9hZGVyLnByb3RvdHlwZSwgewogCi0gICAgfTsKKyAgICAgICAgbG9hZDogZnVu
Y3Rpb24gKCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHsKIAotICAgIGZ1bmN0
aW9uIFNwbGluZUN1cnZlKCBwb2ludHMgLyogYXJyYXkgb2YgVmVjdG9yMiAqLyApIHsKKyAgICAg
ICAgICAgIHZhciBzY29wZSA9IHRoaXM7CiAKLSAgICAgICAgQ3VydmUuY2FsbCggdGhpcyApOwor
ICAgICAgICAgICAgdmFyIGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKCBzY29wZS5tYW5hZ2VyICk7
CisgICAgICAgICAgICBsb2FkZXIuc2V0UGF0aCggc2NvcGUucGF0aCApOworICAgICAgICAgICAg
bG9hZGVyLmxvYWQoIHVybCwgZnVuY3Rpb24gKCB0ZXh0ICkgewogCi0gICAgICAgIHRoaXMudHlw
ZSA9ICdTcGxpbmVDdXJ2ZSc7CisgICAgICAgICAgICAgICAgb25Mb2FkKCBzY29wZS5wYXJzZSgg
SlNPTi5wYXJzZSggdGV4dCApICkgKTsKIAotICAgICAgICB0aGlzLnBvaW50cyA9IHBvaW50cyB8
fCBbXTsKKyAgICAgICAgICAgIH0sIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKTsKIAotICAgIH0KKyAg
ICAgICAgfSwKIAotICAgIFNwbGluZUN1cnZlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEN1
cnZlLnByb3RvdHlwZSApOwotICAgIFNwbGluZUN1cnZlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9
IFNwbGluZUN1cnZlOworICAgICAgICBwYXJzZTogZnVuY3Rpb24gKCBqc29uICkgewogCi0gICAg
U3BsaW5lQ3VydmUucHJvdG90eXBlLmlzU3BsaW5lQ3VydmUgPSB0cnVlOworICAgICAgICAgICAg
dmFyIGFuaW1hdGlvbnMgPSBbXTsKIAotICAgIFNwbGluZUN1cnZlLnByb3RvdHlwZS5nZXRQb2lu
dCA9IGZ1bmN0aW9uICggdCwgb3B0aW9uYWxUYXJnZXQgKSB7CisgICAgICAgICAgICBmb3IgKCB2
YXIgaSA9IDA7IGkgPCBqc29uLmxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICB2YXIgcG9pbnQg
PSBvcHRpb25hbFRhcmdldCB8fCBuZXcgVmVjdG9yMigpOworICAgICAgICAgICAgICAgIHZhciBj
bGlwID0gQW5pbWF0aW9uQ2xpcC5wYXJzZSgganNvblsgaSBdICk7CiAKLSAgICAgICAgdmFyIHBv
aW50cyA9IHRoaXMucG9pbnRzOwotICAgICAgICB2YXIgcCA9ICggcG9pbnRzLmxlbmd0aCAtIDEg
KSAqIHQ7CisgICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5wdXNoKCBjbGlwICk7CiAKLSAgICAg
ICAgdmFyIGludFBvaW50ID0gTWF0aC5mbG9vciggcCApOwotICAgICAgICB2YXIgd2VpZ2h0ID0g
cCAtIGludFBvaW50OworICAgICAgICAgICAgfQogCi0gICAgICAgIHZhciBwMCA9IHBvaW50c1sg
aW50UG9pbnQgPT09IDAgPyBpbnRQb2ludCA6IGludFBvaW50IC0gMSBdOwotICAgICAgICB2YXIg
cDEgPSBwb2ludHNbIGludFBvaW50IF07Ci0gICAgICAgIHZhciBwMiA9IHBvaW50c1sgaW50UG9p
bnQgPiBwb2ludHMubGVuZ3RoIC0gMiA/IHBvaW50cy5sZW5ndGggLSAxIDogaW50UG9pbnQgKyAx
IF07Ci0gICAgICAgIHZhciBwMyA9IHBvaW50c1sgaW50UG9pbnQgPiBwb2ludHMubGVuZ3RoIC0g
MyA/IHBvaW50cy5sZW5ndGggLSAxIDogaW50UG9pbnQgKyAyIF07CisgICAgICAgICAgICByZXR1
cm4gYW5pbWF0aW9uczsKIAotICAgICAgICBwb2ludC5zZXQoCi0gICAgICAgICAgICBDYXRtdWxs
Um9tKCB3ZWlnaHQsIHAwLngsIHAxLngsIHAyLngsIHAzLnggKSwKLSAgICAgICAgICAgIENhdG11
bGxSb20oIHdlaWdodCwgcDAueSwgcDEueSwgcDIueSwgcDMueSApCi0gICAgICAgICk7CisgICAg
ICAgIH0sCiAKLSAgICAgICAgcmV0dXJuIHBvaW50OworICAgICAgICBzZXRQYXRoOiBmdW5jdGlv
biAoIHZhbHVlICkgewogCi0gICAgfTsKKyAgICAgICAgICAgIHRoaXMucGF0aCA9IHZhbHVlOwor
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICBTcGxpbmVDdXJ2ZS5wcm90b3R5cGUuY29w
eSA9IGZ1bmN0aW9uICggc291cmNlICkgeworICAgICAgICB9CiAKLSAgICAgICAgQ3VydmUucHJv
dG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CisgICAgfSApOwogCi0gICAgICAgIHRo
aXMucG9pbnRzID0gW107CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8v
bXJkb29iLmNvbS8KKyAgICAgKgorICAgICAqIEFic3RyYWN0IEJhc2UgY2xhc3MgdG8gYmxvY2sg
YmFzZWQgdGV4dHVyZXMgbG9hZGVyIChkZHMsIHB2ciwgLi4uKQorICAgICAqLwogCi0gICAgICAg
IGZvciAoIHZhciBpID0gMCwgbCA9IHNvdXJjZS5wb2ludHMubGVuZ3RoOyBpIDwgbDsgaSArKyAp
IHsKKyAgICBmdW5jdGlvbiBDb21wcmVzc2VkVGV4dHVyZUxvYWRlciggbWFuYWdlciApIHsKIAot
ICAgICAgICAgICAgdmFyIHBvaW50ID0gc291cmNlLnBvaW50c1sgaSBdOworICAgICAgICB0aGlz
Lm1hbmFnZXIgPSAoIG1hbmFnZXIgIT09IHVuZGVmaW5lZCApID8gbWFuYWdlciA6IERlZmF1bHRM
b2FkaW5nTWFuYWdlcjsKIAotICAgICAgICAgICAgdGhpcy5wb2ludHMucHVzaCggcG9pbnQuY2xv
bmUoKSApOworICAgICAgICAvLyBvdmVycmlkZSBpbiBzdWIgY2xhc3NlcworICAgICAgICB0aGlz
Ll9wYXJzZXIgPSBudWxsOwogCi0gICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgT2JqZWN0LmFzc2lnbiggQ29tcHJlc3NlZFRleHR1cmVMb2FkZXIucHJvdG90eXBl
LCB7CiAKLSAgICB9OworICAgICAgICBsb2FkOiBmdW5jdGlvbiAoIHVybCwgb25Mb2FkLCBvblBy
b2dyZXNzLCBvbkVycm9yICkgewogCi0gICAgU3BsaW5lQ3VydmUucHJvdG90eXBlLnRvSlNPTiA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBzY29wZSA9IHRoaXM7CiAKLSAgICAgICAg
dmFyIGRhdGEgPSBDdXJ2ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoIHRoaXMgKTsKKyAgICAgICAg
ICAgIHZhciBpbWFnZXMgPSBbXTsKIAotICAgICAgICBkYXRhLnBvaW50cyA9IFtdOworICAgICAg
ICAgICAgdmFyIHRleHR1cmUgPSBuZXcgQ29tcHJlc3NlZFRleHR1cmUoKTsKKyAgICAgICAgICAg
IHRleHR1cmUuaW1hZ2UgPSBpbWFnZXM7CiAKLSAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0g
dGhpcy5wb2ludHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgICAgIHZhciBsb2Fk
ZXIgPSBuZXcgRmlsZUxvYWRlciggdGhpcy5tYW5hZ2VyICk7CisgICAgICAgICAgICBsb2FkZXIu
c2V0UGF0aCggdGhpcy5wYXRoICk7CisgICAgICAgICAgICBsb2FkZXIuc2V0UmVzcG9uc2VUeXBl
KCAnYXJyYXlidWZmZXInICk7CiAKLSAgICAgICAgICAgIHZhciBwb2ludCA9IHRoaXMucG9pbnRz
WyBpIF07Ci0gICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKCBwb2ludC50b0FycmF5KCkgKTsK
KyAgICAgICAgICAgIGZ1bmN0aW9uIGxvYWRUZXh0dXJlKCBpICkgewogCi0gICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBsb2FkZXIubG9hZCggdXJsWyBpIF0sIGZ1bmN0aW9uICggYnVmZmVyICkg
ewogCi0gICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAgICAgICAgICB2YXIgdGV4RGF0
YXMgPSBzY29wZS5fcGFyc2VyKCBidWZmZXIsIHRydWUgKTsKIAotICAgIH07CisgICAgICAgICAg
ICAgICAgICAgIGltYWdlc1sgaSBdID0geworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6
IHRleERhdGFzLndpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB0ZXhEYXRh
cy5oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IHRleERhdGFzLmZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pcG1hcHM6IHRleERhdGFzLm1pcG1hcHMKKyAg
ICAgICAgICAgICAgICAgICAgfTsKIAotICAgIFNwbGluZUN1cnZlLnByb3RvdHlwZS5mcm9tSlNP
TiA9IGZ1bmN0aW9uICgganNvbiApIHsKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVkICs9IDE7
CiAKLSAgICAgICAgQ3VydmUucHJvdG90eXBlLmZyb21KU09OLmNhbGwoIHRoaXMsIGpzb24gKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCBsb2FkZWQgPT09IDYgKSB7CiAKLSAgICAgICAgdGhp
cy5wb2ludHMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGV4RGF0YXMubWlw
bWFwQ291bnQgPT09IDEgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUubWlu
RmlsdGVyID0gTGluZWFyRmlsdGVyOwogCi0gICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGpz
b24ucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLmZvcm1hdCA9IHRleERhdGFzLmZvcm1hdDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlOwogCi0gICAgICAgICAgICB2YXIgcG9pbnQg
PSBqc29uLnBvaW50c1sgaSBdOwotICAgICAgICAgICAgdGhpcy5wb2ludHMucHVzaCggbmV3IFZl
Y3RvcjIoKS5mcm9tQXJyYXkoIHBvaW50ICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggb25Mb2FkICkgb25Mb2FkKCB0ZXh0dXJlICk7CiAKLSAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfSwgb25Q
cm9ncmVzcywgb25FcnJvciApOwogCi0gICAgfTsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgaWYgKCBBcnJheS5pc0FycmF5KCB1cmwgKSApIHsKIAorICAgICAgICAgICAgICAgIHZhciBs
b2FkZWQgPSAwOwogCi0gICAgdmFyIEN1cnZlcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXpl
KHsKLSAgICAgICAgQXJjQ3VydmU6IEFyY0N1cnZlLAotICAgICAgICBDYXRtdWxsUm9tQ3VydmUz
OiBDYXRtdWxsUm9tQ3VydmUzLAotICAgICAgICBDdWJpY0JlemllckN1cnZlOiBDdWJpY0Jlemll
ckN1cnZlLAotICAgICAgICBDdWJpY0JlemllckN1cnZlMzogQ3ViaWNCZXppZXJDdXJ2ZTMsCi0g
ICAgICAgIEVsbGlwc2VDdXJ2ZTogRWxsaXBzZUN1cnZlLAotICAgICAgICBMaW5lQ3VydmU6IExp
bmVDdXJ2ZSwKLSAgICAgICAgTGluZUN1cnZlMzogTGluZUN1cnZlMywKLSAgICAgICAgUXVhZHJh
dGljQmV6aWVyQ3VydmU6IFF1YWRyYXRpY0JlemllckN1cnZlLAotICAgICAgICBRdWFkcmF0aWNC
ZXppZXJDdXJ2ZTM6IFF1YWRyYXRpY0JlemllckN1cnZlMywKLSAgICAgICAgU3BsaW5lQ3VydmU6
IFNwbGluZUN1cnZlCi0gICAgfSk7CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBp
bCA9IHVybC5sZW5ndGg7IGkgPCBpbDsgKysgaSApIHsKIAotICAgIC8qKgotICAgICAqIEBhdXRo
b3Igeno4NSAvIGh0dHA6Ly93d3cubGFiNGdhbWVzLm5ldC96ejg1L2Jsb2cKLSAgICAgKgotICAg
ICAqKi8KKyAgICAgICAgICAgICAgICAgICAgbG9hZFRleHR1cmUoIGkgKTsKIAotICAgIC8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KgotICAgICAqICBDdXJ2ZWQgUGF0aCAtIGEgY3VydmUgcGF0aCBpcyBzaW1wbHkgYSBhcnJheSBv
ZiBjb25uZWN0ZWQKLSAgICAgKiAgY3VydmVzLCBidXQgcmV0YWlucyB0aGUgYXBpIG9mIGEgY3Vy
dmUKLSAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisgICAgICAgICAgICAgICAgfQogCi0gICAgZnVuY3Rpb24gQ3VydmVQ
YXRoKCkgeworICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICBDdXJ2ZS5jYWxsKCB0aGlz
ICk7CisgICAgICAgICAgICAgICAgLy8gY29tcHJlc3NlZCBjdWJlbWFwIHRleHR1cmUgc3RvcmVk
IGluIGEgc2luZ2xlIEREUyBmaWxlCiAKLSAgICAgICAgdGhpcy50eXBlID0gJ0N1cnZlUGF0aCc7
CisgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWQoIHVybCwgZnVuY3Rpb24gKCBidWZmZXIgKSB7
CiAKLSAgICAgICAgdGhpcy5jdXJ2ZXMgPSBbXTsKLSAgICAgICAgdGhpcy5hdXRvQ2xvc2UgPSBm
YWxzZTsgLy8gQXV0b21hdGljYWxseSBjbG9zZXMgdGhlIHBhdGgKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIHRleERhdGFzID0gc2NvcGUuX3BhcnNlciggYnVmZmVyLCB0cnVlICk7CiAKLSAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmICggdGV4RGF0YXMuaXNDdWJlbWFwICkgewogCi0gICAg
Q3VydmVQYXRoLnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIEN1cnZl
LnByb3RvdHlwZSApLCB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmFjZXMgPSB0ZXhE
YXRhcy5taXBtYXBzLmxlbmd0aCAvIHRleERhdGFzLm1pcG1hcENvdW50OwogCi0gICAgICAgIGNv
bnN0cnVjdG9yOiBDdXJ2ZVBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIg
ZiA9IDA7IGYgPCBmYWNlczsgZiArKyApIHsKIAotICAgICAgICBhZGQ6IGZ1bmN0aW9uICggY3Vy
dmUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzWyBmIF0gPSB7IG1pcG1h
cHM6IFtdIH07CiAKLSAgICAgICAgICAgIHRoaXMuY3VydmVzLnB1c2goIGN1cnZlICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgdGV4RGF0YXMubWlw
bWFwQ291bnQ7IGkgKysgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW1hZ2VzWyBmIF0ubWlwbWFwcy5wdXNoKCB0ZXhEYXRhcy5taXBtYXBzWyBmICog
dGV4RGF0YXMubWlwbWFwQ291bnQgKyBpIF0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW1hZ2VzWyBmIF0uZm9ybWF0ID0gdGV4RGF0YXMuZm9ybWF0OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbWFnZXNbIGYgXS53aWR0aCA9IHRleERhdGFzLndpZHRoOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXNbIGYgXS5oZWlnaHQgPSB0ZXhE
YXRhcy5oZWlnaHQ7CiAKLSAgICAgICAgY2xvc2VQYXRoOiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBBZGQgYSBsaW5lIGN1cnZl
IGlmIHN0YXJ0IGFuZCBlbmQgb2YgbGluZXMgYXJlIG5vdCBjb25uZWN0ZWQKLSAgICAgICAgICAg
IHZhciBzdGFydFBvaW50ID0gdGhpcy5jdXJ2ZXNbIDAgXS5nZXRQb2ludCggMCApOwotICAgICAg
ICAgICAgdmFyIGVuZFBvaW50ID0gdGhpcy5jdXJ2ZXNbIHRoaXMuY3VydmVzLmxlbmd0aCAtIDEg
XS5nZXRQb2ludCggMSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBpZiAoICEgc3RhcnRQb2ludC5lcXVhbHMoIGVuZFBvaW50ICkgKSB7CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICB0aGlzLmN1cnZlcy5wdXNoKCBuZXcg
TGluZUN1cnZlKCBlbmRQb2ludCwgc3RhcnRQb2ludCApICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLmltYWdlLndpZHRoID0gdGV4RGF0YXMud2lkdGg7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLmltYWdlLmhlaWdodCA9IHRleERhdGFzLmhlaWdodDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUubWlwbWFwcyA9IHRleERhdGFzLm1pcG1hcHM7CisK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICggdGV4RGF0
YXMubWlwbWFwQ291bnQgPT09IDEgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmUubWluRmlsdGVyID0gTGluZWFyRmlsdGVyOworCisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmZvcm1hdCA9IHRleERhdGFzLmZvcm1hdDsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCBvbkxvYWQgKSBvbkxvYWQoIHRleHR1cmUgKTsKKworICAgICAgICAg
ICAgICAgIH0sIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKTsKIAogICAgICAgICAgICAgfQogCisgICAg
ICAgICAgICByZXR1cm4gdGV4dHVyZTsKKwogICAgICAgICB9LAogCi0gICAgICAgIC8vIFRvIGdl
dCBhY2N1cmF0ZSBwb2ludCB3aXRoIHJlZmVyZW5jZSB0bwotICAgICAgICAvLyBlbnRpcmUgcGF0
aCBkaXN0YW5jZSBhdCB0aW1lIHQsCi0gICAgICAgIC8vIGZvbGxvd2luZyBoYXMgdG8gYmUgZG9u
ZToKKyAgICAgICAgc2V0UGF0aDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKIAotICAgICAgICAvLyAx
LiBMZW5ndGggb2YgZWFjaCBzdWIgcGF0aCBoYXZlIHRvIGJlIGtub3duCi0gICAgICAgIC8vIDIu
IExvY2F0ZSBhbmQgaWRlbnRpZnkgdHlwZSBvZiBjdXJ2ZQotICAgICAgICAvLyAzLiBHZXQgdCBm
b3IgdGhlIGN1cnZlCi0gICAgICAgIC8vIDQuIFJldHVybiBjdXJ2ZS5nZXRQb2ludEF0KHQnKQor
ICAgICAgICAgICAgdGhpcy5wYXRoID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gdGhpczsK
IAotICAgICAgICBnZXRQb2ludDogZnVuY3Rpb24gKCB0ICkgeworICAgICAgICB9CiAKLSAgICAg
ICAgICAgIHZhciBkID0gdCAqIHRoaXMuZ2V0TGVuZ3RoKCk7Ci0gICAgICAgICAgICB2YXIgY3Vy
dmVMZW5ndGhzID0gdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTsKLSAgICAgICAgICAgIHZhciBpID0g
MDsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgIC8vIFRvIHRoaW5rIGFib3V0IGJvdW5kYXJpZXMg
cG9pbnRzLgorICAgIC8qKgorICAgICAqIEBhdXRob3IgTmlrb3MgTS4gLyBodHRwczovL2dpdGh1
Yi5jb20vZm9vMTIzLworICAgICAqCisgICAgICogQWJzdHJhY3QgQmFzZSBjbGFzcyB0byBsb2Fk
IGdlbmVyaWMgYmluYXJ5IHRleHR1cmVzIGZvcm1hdHMgKHJnYmUsIGhkciwgLi4uKQorICAgICAq
LwogCi0gICAgICAgICAgICB3aGlsZSAoIGkgPCBjdXJ2ZUxlbmd0aHMubGVuZ3RoICkgeworICAg
IGZ1bmN0aW9uIERhdGFUZXh0dXJlTG9hZGVyKCBtYW5hZ2VyICkgewogCi0gICAgICAgICAgICAg
ICAgaWYgKCBjdXJ2ZUxlbmd0aHNbIGkgXSA+PSBkICkgeworICAgICAgICB0aGlzLm1hbmFnZXIg
PSAoIG1hbmFnZXIgIT09IHVuZGVmaW5lZCApID8gbWFuYWdlciA6IERlZmF1bHRMb2FkaW5nTWFu
YWdlcjsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZiA9IGN1cnZlTGVuZ3Roc1sgaSBd
IC0gZDsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnZlID0gdGhpcy5jdXJ2ZXNbIGkgXTsK
KyAgICAgICAgLy8gb3ZlcnJpZGUgaW4gc3ViIGNsYXNzZXMKKyAgICAgICAgdGhpcy5fcGFyc2Vy
ID0gbnVsbDsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgc2VnbWVudExlbmd0aCA9IGN1cnZl
LmdldExlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICB2YXIgdSA9IHNlZ21lbnRMZW5ndGgg
PT09IDAgPyAwIDogMSAtIGRpZmYgLyBzZWdtZW50TGVuZ3RoOworICAgIH0KIAotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY3VydmUuZ2V0UG9pbnRBdCggdSApOworICAgIE9iamVjdC5hc3Np
Z24oIERhdGFUZXh0dXJlTG9hZGVyLnByb3RvdHlwZSwgewogCi0gICAgICAgICAgICAgICAgfQor
ICAgICAgICBsb2FkOiBmdW5jdGlvbiAoIHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9y
ICkgewogCi0gICAgICAgICAgICAgICAgaSArKzsKKyAgICAgICAgICAgIHZhciBzY29wZSA9IHRo
aXM7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IERhdGFU
ZXh0dXJlKCk7CiAKLSAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgdmFyIGxv
YWRlciA9IG5ldyBGaWxlTG9hZGVyKCB0aGlzLm1hbmFnZXIgKTsKKyAgICAgICAgICAgIGxvYWRl
ci5zZXRSZXNwb25zZVR5cGUoICdhcnJheWJ1ZmZlcicgKTsKKyAgICAgICAgICAgIGxvYWRlci5z
ZXRQYXRoKCB0aGlzLnBhdGggKTsKKyAgICAgICAgICAgIGxvYWRlci5sb2FkKCB1cmwsIGZ1bmN0
aW9uICggYnVmZmVyICkgewogCi0gICAgICAgICAgICAvLyBsb29wIHdoZXJlIHN1bSAhPSAwLCBz
dW0gPiBkICwgc3VtKzEgPGQKKyAgICAgICAgICAgICAgICB2YXIgdGV4RGF0YSA9IHNjb3BlLl9w
YXJzZXIoIGJ1ZmZlciApOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgaWYgKCAhIHRl
eERhdGEgKSByZXR1cm47CiAKLSAgICAgICAgLy8gV2UgY2Fubm90IHVzZSB0aGUgZGVmYXVsdCBU
SFJFRS5DdXJ2ZSBnZXRQb2ludCgpIHdpdGggZ2V0TGVuZ3RoKCkgYmVjYXVzZSBpbgotICAgICAg
ICAvLyBUSFJFRS5DdXJ2ZSwgZ2V0TGVuZ3RoKCkgZGVwZW5kcyBvbiBnZXRQb2ludCgpIGJ1dCBp
biBUSFJFRS5DdXJ2ZVBhdGgKLSAgICAgICAgLy8gZ2V0UG9pbnQoKSBkZXBlbmRzIG9uIGdldExl
bmd0aAorICAgICAgICAgICAgICAgIGlmICggdGV4RGF0YS5pbWFnZSAhPT0gdW5kZWZpbmVkICkg
ewogCi0gICAgICAgIGdldExlbmd0aDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLmltYWdlID0gdGV4RGF0YS5pbWFnZTsKIAotICAgICAgICAgICAgdmFyIGxlbnMg
PSB0aGlzLmdldEN1cnZlTGVuZ3RocygpOwotICAgICAgICAgICAgcmV0dXJuIGxlbnNbIGxlbnMu
bGVuZ3RoIC0gMSBdOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHRleERhdGEuZGF0YSAh
PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHRleHR1
cmUuaW1hZ2Uud2lkdGggPSB0ZXhEYXRhLndpZHRoOworICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlLmltYWdlLmhlaWdodCA9IHRleERhdGEuaGVpZ2h0OworICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlLmltYWdlLmRhdGEgPSB0ZXhEYXRhLmRhdGE7CiAKLSAgICAgICAgLy8gY2FjaGVMZW5n
dGhzIG11c3QgYmUgcmVjYWxjdWxhdGVkLgotICAgICAgICB1cGRhdGVBcmNMZW5ndGhzOiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLm5lZWRzVXBk
YXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMuY2FjaGVMZW5ndGhzID0gbnVsbDsKLSAgICAg
ICAgICAgIHRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7CisgICAgICAgICAgICAgICAgdGV4dHVyZS53
cmFwUyA9IHRleERhdGEud3JhcFMgIT09IHVuZGVmaW5lZCA/IHRleERhdGEud3JhcFMgOiBDbGFt
cFRvRWRnZVdyYXBwaW5nOworICAgICAgICAgICAgICAgIHRleHR1cmUud3JhcFQgPSB0ZXhEYXRh
LndyYXBUICE9PSB1bmRlZmluZWQgPyB0ZXhEYXRhLndyYXBUIDogQ2xhbXBUb0VkZ2VXcmFwcGlu
ZzsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIHRleHR1cmUubWFnRmlsdGVyID0gdGV4
RGF0YS5tYWdGaWx0ZXIgIT09IHVuZGVmaW5lZCA/IHRleERhdGEubWFnRmlsdGVyIDogTGluZWFy
RmlsdGVyOworICAgICAgICAgICAgICAgIHRleHR1cmUubWluRmlsdGVyID0gdGV4RGF0YS5taW5G
aWx0ZXIgIT09IHVuZGVmaW5lZCA/IHRleERhdGEubWluRmlsdGVyIDogTGluZWFyTWlwTWFwTGlu
ZWFyRmlsdGVyOwogCi0gICAgICAgIC8vIENvbXB1dGUgbGVuZ3RocyBhbmQgY2FjaGUgdGhlbQot
ICAgICAgICAvLyBXZSBjYW5ub3Qgb3ZlcndyaXRlIGdldExlbmd0aHMoKSBiZWNhdXNlIFV0b1Qg
bWFwcGluZyB1c2VzIGl0LgorICAgICAgICAgICAgICAgIHRleHR1cmUuYW5pc290cm9weSA9IHRl
eERhdGEuYW5pc290cm9weSAhPT0gdW5kZWZpbmVkID8gdGV4RGF0YS5hbmlzb3Ryb3B5IDogMTsK
IAotICAgICAgICBnZXRDdXJ2ZUxlbmd0aHM6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIHRleERhdGEuZm9ybWF0ICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgIC8v
IFdlIHVzZSBjYWNoZSB2YWx1ZXMgaWYgY3VydmVzIGFuZCBjYWNoZSBhcnJheSBhcmUgc2FtZSBs
ZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5mb3JtYXQgPSB0ZXhEYXRhLmZvcm1h
dDsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLmNhY2hlTGVuZ3RocyAmJiB0aGlzLmNhY2hlTGVu
Z3Rocy5sZW5ndGggPT09IHRoaXMuY3VydmVzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCB0ZXhEYXRhLnR5cGUgIT09IHVuZGVmaW5lZCApIHsKIAot
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlTGVuZ3RoczsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZS50eXBlID0gdGV4RGF0YS50eXBlOwogCi0gICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBHZXQgbGVuZ3RoIG9mIHN1Yi1jdXJ2ZQot
ICAgICAgICAgICAgLy8gUHVzaCBzdW1zIGludG8gY2FjaGVkIGFycmF5CisgICAgICAgICAgICAg
ICAgaWYgKCB0ZXhEYXRhLm1pcG1hcHMgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAg
dmFyIGxlbmd0aHMgPSBbXSwgc3VtcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUu
bWlwbWFwcyA9IHRleERhdGEubWlwbWFwczsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
LCBsID0gdGhpcy5jdXJ2ZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBzdW1zICs9IHRoaXMuY3VydmVzWyBpIF0uZ2V0TGVuZ3Ro
KCk7Ci0gICAgICAgICAgICAgICAgbGVuZ3Rocy5wdXNoKCBzdW1zICk7CisgICAgICAgICAgICAg
ICAgaWYgKCB0ZXhEYXRhLm1pcG1hcENvdW50ID09PSAxICkgewogCi0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUubWluRmlsdGVyID0gTGluZWFyRmlsdGVyOwogCi0g
ICAgICAgICAgICB0aGlzLmNhY2hlTGVuZ3RocyA9IGxlbmd0aHM7CisgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICByZXR1cm4gbGVuZ3RoczsKKyAgICAgICAgICAgICAgICB0ZXh0dXJl
Lm5lZWRzVXBkYXRlID0gdHJ1ZTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIGlmICgg
b25Mb2FkICkgb25Mb2FkKCB0ZXh0dXJlLCB0ZXhEYXRhICk7CiAKLSAgICAgICAgZ2V0U3BhY2Vk
UG9pbnRzOiBmdW5jdGlvbiAoIGRpdmlzaW9ucyApIHsKKyAgICAgICAgICAgIH0sIG9uUHJvZ3Jl
c3MsIG9uRXJyb3IgKTsKIAotICAgICAgICAgICAgaWYgKCBkaXZpc2lvbnMgPT09IHVuZGVmaW5l
ZCApIGRpdmlzaW9ucyA9IDQwOwogCi0gICAgICAgICAgICB2YXIgcG9pbnRzID0gW107CisgICAg
ICAgICAgICByZXR1cm4gdGV4dHVyZTsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBp
IDw9IGRpdmlzaW9uczsgaSArKyApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHBv
aW50cy5wdXNoKCB0aGlzLmdldFBvaW50KCBpIC8gZGl2aXNpb25zICkgKTsKKyAgICAgICAgc2V0
UGF0aDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy5wYXRoID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAg
ICAgaWYgKCB0aGlzLmF1dG9DbG9zZSApIHsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
cG9pbnRzLnB1c2goIHBvaW50c1sgMCBdICk7CisgICAgfSApOwogCi0gICAgICAgICAgICB9Cisg
ICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAg
Ki8KIAotICAgICAgICAgICAgcmV0dXJuIHBvaW50czsKIAotICAgICAgICB9LAorICAgIGZ1bmN0
aW9uIEltYWdlTG9hZGVyKCBtYW5hZ2VyICkgewogCi0gICAgICAgIGdldFBvaW50czogZnVuY3Rp
b24gKCBkaXZpc2lvbnMgKSB7CisgICAgICAgIHRoaXMubWFuYWdlciA9ICggbWFuYWdlciAhPT0g
dW5kZWZpbmVkICkgPyBtYW5hZ2VyIDogRGVmYXVsdExvYWRpbmdNYW5hZ2VyOwogCi0gICAgICAg
ICAgICBkaXZpc2lvbnMgPSBkaXZpc2lvbnMgfHwgMTI7CisgICAgfQogCi0gICAgICAgICAgICB2
YXIgcG9pbnRzID0gW10sIGxhc3Q7CisgICAgT2JqZWN0LmFzc2lnbiggSW1hZ2VMb2FkZXIucHJv
dG90eXBlLCB7CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgY3VydmVzID0gdGhpcy5j
dXJ2ZXM7IGkgPCBjdXJ2ZXMubGVuZ3RoOyBpICsrICkgeworICAgICAgICBjcm9zc09yaWdpbjog
J2Fub255bW91cycsCiAKLSAgICAgICAgICAgICAgICB2YXIgY3VydmUgPSBjdXJ2ZXNbIGkgXTsK
LSAgICAgICAgICAgICAgICB2YXIgcmVzb2x1dGlvbiA9ICggY3VydmUgJiYgY3VydmUuaXNFbGxp
cHNlQ3VydmUgKSA/IGRpdmlzaW9ucyAqIDIKLSAgICAgICAgICAgICAgICAgICAgOiAoIGN1cnZl
ICYmICggY3VydmUuaXNMaW5lQ3VydmUgfHwgY3VydmUuaXNMaW5lQ3VydmUzICkgKSA/IDEKLSAg
ICAgICAgICAgICAgICAgICAgICAgIDogKCBjdXJ2ZSAmJiBjdXJ2ZS5pc1NwbGluZUN1cnZlICkg
PyBkaXZpc2lvbnMgKiBjdXJ2ZS5wb2ludHMubGVuZ3RoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBkaXZpc2lvbnM7CisgICAgICAgIGxvYWQ6IGZ1bmN0aW9uICggdXJsLCBvbkxvYWQs
IG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgcHRzID0gY3Vy
dmUuZ2V0UG9pbnRzKCByZXNvbHV0aW9uICk7CisgICAgICAgICAgICBpZiAoIHVybCA9PT0gdW5k
ZWZpbmVkICkgdXJsID0gJyc7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDA7IGog
PCBwdHMubGVuZ3RoOyBqICsrICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLnBhdGggIT09IHVu
ZGVmaW5lZCApIHVybCA9IHRoaXMucGF0aCArIHVybDsKIAotICAgICAgICAgICAgICAgICAgICB2
YXIgcG9pbnQgPSBwdHNbIGogXTsKKyAgICAgICAgICAgIHVybCA9IHRoaXMubWFuYWdlci5yZXNv
bHZlVVJMKCB1cmwgKTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIGxhc3QgJiYgbGFzdC5l
cXVhbHMoIHBvaW50ICkgKSBjb250aW51ZTsgLy8gZW5zdXJlcyBubyBjb25zZWN1dGl2ZSBwb2lu
dHMgYXJlIGR1cGxpY2F0ZXMKKyAgICAgICAgICAgIHZhciBzY29wZSA9IHRoaXM7CiAKLSAgICAg
ICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goIHBvaW50ICk7Ci0gICAgICAgICAgICAgICAgICAg
IGxhc3QgPSBwb2ludDsKKyAgICAgICAgICAgIHZhciBjYWNoZWQgPSBDYWNoZS5nZXQoIHVybCAp
OwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBjYWNoZWQgIT09IHVuZGVm
aW5lZCApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIu
aXRlbVN0YXJ0KCB1cmwgKTsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLmF1dG9DbG9zZSAmJiBw
b2ludHMubGVuZ3RoID4gMSAmJiAhIHBvaW50c1sgcG9pbnRzLmxlbmd0aCAtIDEgXS5lcXVhbHMo
IHBvaW50c1sgMCBdICkgKSB7CisgICAgICAgICAgICAgICAgc2V0VGltZW91dCggZnVuY3Rpb24g
KCkgewogCi0gICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goIHBvaW50c1sgMCBdICk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICggb25Mb2FkICkgb25Mb2FkKCBjYWNoZWQgKTsKIAotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCAp
OwogCi0gICAgICAgICAgICByZXR1cm4gcG9pbnRzOworICAgICAgICAgICAgICAgIH0sIDAgKTsK
IAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7CiAKLSAgICAgICAg
Y29weTogZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IEN1cnZlLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOworICAgICAgICAgICAg
dmFyIGltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCAnaHR0cDovL3d3dy53My5vcmcv
MTk5OS94aHRtbCcsICdpbWcnICk7CiAKLSAgICAgICAgICAgIHRoaXMuY3VydmVzID0gW107Cisg
ICAgICAgICAgICBmdW5jdGlvbiBvbkltYWdlTG9hZCgpIHsKIAotICAgICAgICAgICAgZm9yICgg
dmFyIGkgPSAwLCBsID0gc291cmNlLmN1cnZlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkgeworICAg
ICAgICAgICAgICAgIGltYWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdsb2FkJywgb25JbWFnZUxv
YWQsIGZhbHNlICk7CisgICAgICAgICAgICAgICAgaW1hZ2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigg
J2Vycm9yJywgb25JbWFnZUVycm9yLCBmYWxzZSApOwogCi0gICAgICAgICAgICAgICAgdmFyIGN1
cnZlID0gc291cmNlLmN1cnZlc1sgaSBdOworICAgICAgICAgICAgICAgIENhY2hlLmFkZCggdXJs
LCB0aGlzICk7CiAKLSAgICAgICAgICAgICAgICB0aGlzLmN1cnZlcy5wdXNoKCBjdXJ2ZS5jbG9u
ZSgpICk7CisgICAgICAgICAgICAgICAgaWYgKCBvbkxvYWQgKSBvbkxvYWQoIHRoaXMgKTsKKwor
ICAgICAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIuaXRlbUVuZCggdXJsICk7CiAKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgdGhpcy5hdXRvQ2xvc2UgPSBzb3VyY2UuYXV0b0Nsb3NlOwor
ICAgICAgICAgICAgZnVuY3Rpb24gb25JbWFnZUVycm9yKCBldmVudCApIHsKIAotICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgaW1hZ2UucmVtb3ZlRXZlbnRMaXN0ZW5l
ciggJ2xvYWQnLCBvbkltYWdlTG9hZCwgZmFsc2UgKTsKKyAgICAgICAgICAgICAgICBpbWFnZS5y
ZW1vdmVFdmVudExpc3RlbmVyKCAnZXJyb3InLCBvbkltYWdlRXJyb3IsIGZhbHNlICk7CiAKLSAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICBpZiAoIG9uRXJyb3IgKSBvbkVycm9yKCBldmVudCAp
OwogCi0gICAgICAgIHRvSlNPTjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHNjb3Bl
Lm1hbmFnZXIuaXRlbUVycm9yKCB1cmwgKTsKKyAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2Vy
Lml0ZW1FbmQoIHVybCApOwogCi0gICAgICAgICAgICB2YXIgZGF0YSA9IEN1cnZlLnByb3RvdHlw
ZS50b0pTT04uY2FsbCggdGhpcyApOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBkYXRh
LmF1dG9DbG9zZSA9IHRoaXMuYXV0b0Nsb3NlOwotICAgICAgICAgICAgZGF0YS5jdXJ2ZXMgPSBb
XTsKKyAgICAgICAgICAgIGltYWdlLmFkZEV2ZW50TGlzdGVuZXIoICdsb2FkJywgb25JbWFnZUxv
YWQsIGZhbHNlICk7CisgICAgICAgICAgICBpbWFnZS5hZGRFdmVudExpc3RlbmVyKCAnZXJyb3In
LCBvbkltYWdlRXJyb3IsIGZhbHNlICk7CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwg
bCA9IHRoaXMuY3VydmVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisgICAgICAgICAgICBpZiAo
IHVybC5zdWJzdHIoIDAsIDUgKSAhPT0gJ2RhdGE6JyApIHsKIAotICAgICAgICAgICAgICAgIHZh
ciBjdXJ2ZSA9IHRoaXMuY3VydmVzWyBpIF07Ci0gICAgICAgICAgICAgICAgZGF0YS5jdXJ2ZXMu
cHVzaCggY3VydmUudG9KU09OKCkgKTsKKyAgICAgICAgICAgICAgICBpZiAoIHRoaXMuY3Jvc3NP
cmlnaW4gIT09IHVuZGVmaW5lZCApIGltYWdlLmNyb3NzT3JpZ2luID0gdGhpcy5jcm9zc09yaWdp
bjsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAg
ICAgIHNjb3BlLm1hbmFnZXIuaXRlbVN0YXJ0KCB1cmwgKTsKIAotICAgICAgICB9LAorICAgICAg
ICAgICAgaW1hZ2Uuc3JjID0gdXJsOwogCi0gICAgICAgIGZyb21KU09OOiBmdW5jdGlvbiAoIGpz
b24gKSB7CisgICAgICAgICAgICByZXR1cm4gaW1hZ2U7CiAKLSAgICAgICAgICAgIEN1cnZlLnBy
b3RvdHlwZS5mcm9tSlNPTi5jYWxsKCB0aGlzLCBqc29uICk7CisgICAgICAgIH0sCiAKLSAgICAg
ICAgICAgIHRoaXMuYXV0b0Nsb3NlID0ganNvbi5hdXRvQ2xvc2U7Ci0gICAgICAgICAgICB0aGlz
LmN1cnZlcyA9IFtdOworICAgICAgICBzZXRDcm9zc09yaWdpbjogZnVuY3Rpb24gKCB2YWx1ZSAp
IHsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0ganNvbi5jdXJ2ZXMubGVuZ3Ro
OyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSB2YWx1ZTsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgdmFyIGN1cnZlID0g
anNvbi5jdXJ2ZXNbIGkgXTsKLSAgICAgICAgICAgICAgICB0aGlzLmN1cnZlcy5wdXNoKCBuZXcg
Q3VydmVzWyBjdXJ2ZS50eXBlIF0oKS5mcm9tSlNPTiggY3VydmUgKSApOworICAgICAgICB9LAog
Ci0gICAgICAgICAgICB9CisgICAgICAgIHNldFBhdGg6IGZ1bmN0aW9uICggdmFsdWUgKSB7CiAK
KyAgICAgICAgICAgIHRoaXMucGF0aCA9IHZhbHVlOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAKICAgICAgICAgfQpAQCAtMzQwNjQsMTcyICszNTM2NiwxMzEgQEAKICAgICB9ICk7CiAKICAg
ICAvKioKLSAgICAgKiBAYXV0aG9yIHp6ODUgLyBodHRwOi8vd3d3LmxhYjRnYW1lcy5uZXQveno4
NS9ibG9nCi0gICAgICogQ3JlYXRlcyBmcmVlIGZvcm0gMmQgcGF0aCB1c2luZyBzZXJpZXMgb2Yg
cG9pbnRzLCBsaW5lcyBvciBjdXJ2ZXMuCi0gICAgICoqLworICAgICAqIEBhdXRob3IgbXJkb29i
IC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICovCiAKLSAgICBmdW5jdGlvbiBQYXRoKCBwb2lu
dHMgKSB7CiAKLSAgICAgICAgQ3VydmVQYXRoLmNhbGwoIHRoaXMgKTsKKyAgICBmdW5jdGlvbiBD
dWJlVGV4dHVyZUxvYWRlciggbWFuYWdlciApIHsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnUGF0
aCc7CisgICAgICAgIHRoaXMubWFuYWdlciA9ICggbWFuYWdlciAhPT0gdW5kZWZpbmVkICkgPyBt
YW5hZ2VyIDogRGVmYXVsdExvYWRpbmdNYW5hZ2VyOwogCi0gICAgICAgIHRoaXMuY3VycmVudFBv
aW50ID0gbmV3IFZlY3RvcjIoKTsKKyAgICB9CiAKLSAgICAgICAgaWYgKCBwb2ludHMgKSB7Cisg
ICAgT2JqZWN0LmFzc2lnbiggQ3ViZVRleHR1cmVMb2FkZXIucHJvdG90eXBlLCB7CiAKLSAgICAg
ICAgICAgIHRoaXMuc2V0RnJvbVBvaW50cyggcG9pbnRzICk7CisgICAgICAgIGNyb3NzT3JpZ2lu
OiAnYW5vbnltb3VzJywKIAotICAgICAgICB9CisgICAgICAgIGxvYWQ6IGZ1bmN0aW9uICggdXJs
cywgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yICkgewogCi0gICAgfQorICAgICAgICAgICAg
dmFyIHRleHR1cmUgPSBuZXcgQ3ViZVRleHR1cmUoKTsKIAotICAgIFBhdGgucHJvdG90eXBlID0g
T2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggQ3VydmVQYXRoLnByb3RvdHlwZSApLCB7Cisg
ICAgICAgICAgICB2YXIgbG9hZGVyID0gbmV3IEltYWdlTG9hZGVyKCB0aGlzLm1hbmFnZXIgKTsK
KyAgICAgICAgICAgIGxvYWRlci5zZXRDcm9zc09yaWdpbiggdGhpcy5jcm9zc09yaWdpbiApOwor
ICAgICAgICAgICAgbG9hZGVyLnNldFBhdGgoIHRoaXMucGF0aCApOwogCi0gICAgICAgIGNvbnN0
cnVjdG9yOiBQYXRoLAorICAgICAgICAgICAgdmFyIGxvYWRlZCA9IDA7CiAKLSAgICAgICAgc2V0
RnJvbVBvaW50czogZnVuY3Rpb24gKCBwb2ludHMgKSB7CisgICAgICAgICAgICBmdW5jdGlvbiBs
b2FkVGV4dHVyZSggaSApIHsKIAotICAgICAgICAgICAgdGhpcy5tb3ZlVG8oIHBvaW50c1sgMCBd
LngsIHBvaW50c1sgMCBdLnkgKTsKKyAgICAgICAgICAgICAgICBsb2FkZXIubG9hZCggdXJsc1sg
aSBdLCBmdW5jdGlvbiAoIGltYWdlICkgewogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDEs
IGwgPSBwb2ludHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZS5pbWFnZXNbIGkgXSA9IGltYWdlOwogCi0gICAgICAgICAgICAgICAgdGhpcy5saW5l
VG8oIHBvaW50c1sgaSBdLngsIHBvaW50c1sgaSBdLnkgKTsKKyAgICAgICAgICAgICAgICAgICAg
bG9hZGVkICsrOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICggbG9h
ZGVkID09PSA2ICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTsKIAotICAgICAgICBtb3ZlVG86IGZ1bmN0aW9uICggeCwg
eSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb25Mb2FkICkgb25Mb2FkKCB0ZXh0
dXJlICk7CiAKLSAgICAgICAgICAgIHRoaXMuY3VycmVudFBvaW50LnNldCggeCwgeSApOyAvLyBU
T0RPIGNvbnNpZGVyIHJlZmVyZW5jaW5nIHZlY3RvcnMgaW5zdGVhZCBvZiBjb3B5aW5nPworICAg
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9LCB1bmRl
ZmluZWQsIG9uRXJyb3IgKTsKIAotICAgICAgICBsaW5lVG86IGZ1bmN0aW9uICggeCwgeSApIHsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIGN1cnZlID0gbmV3IExpbmVDdXJ2ZSgg
dGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSwgbmV3IFZlY3RvcjIoIHgsIHkgKSApOwotICAgICAg
ICAgICAgdGhpcy5jdXJ2ZXMucHVzaCggY3VydmUgKTsKLQotICAgICAgICAgICAgdGhpcy5jdXJy
ZW50UG9pbnQuc2V0KCB4LCB5ICk7Ci0KLSAgICAgICAgfSwKLQotICAgICAgICBxdWFkcmF0aWND
dXJ2ZVRvOiBmdW5jdGlvbiAoIGFDUHgsIGFDUHksIGFYLCBhWSApIHsKKyAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMDsgaSA8IHVybHMubGVuZ3RoOyArKyBpICkgewogCi0gICAgICAgICAgICB2
YXIgY3VydmUgPSBuZXcgUXVhZHJhdGljQmV6aWVyQ3VydmUoCi0gICAgICAgICAgICAgICAgdGhp
cy5jdXJyZW50UG9pbnQuY2xvbmUoKSwKLSAgICAgICAgICAgICAgICBuZXcgVmVjdG9yMiggYUNQ
eCwgYUNQeSApLAotICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IyKCBhWCwgYVkgKQotICAgICAg
ICAgICAgKTsKKyAgICAgICAgICAgICAgICBsb2FkVGV4dHVyZSggaSApOwogCi0gICAgICAgICAg
ICB0aGlzLmN1cnZlcy5wdXNoKCBjdXJ2ZSApOworICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICB0aGlzLmN1cnJlbnRQb2ludC5zZXQoIGFYLCBhWSApOworICAgICAgICAgICAgcmV0dXJuIHRl
eHR1cmU7CiAKICAgICAgICAgfSwKIAotICAgICAgICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbiAo
IGFDUDF4LCBhQ1AxeSwgYUNQMngsIGFDUDJ5LCBhWCwgYVkgKSB7Ci0KLSAgICAgICAgICAgIHZh
ciBjdXJ2ZSA9IG5ldyBDdWJpY0JlemllckN1cnZlKAotICAgICAgICAgICAgICAgIHRoaXMuY3Vy
cmVudFBvaW50LmNsb25lKCksCi0gICAgICAgICAgICAgICAgbmV3IFZlY3RvcjIoIGFDUDF4LCBh
Q1AxeSApLAotICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IyKCBhQ1AyeCwgYUNQMnkgKSwKLSAg
ICAgICAgICAgICAgICBuZXcgVmVjdG9yMiggYVgsIGFZICkKLSAgICAgICAgICAgICk7Ci0KLSAg
ICAgICAgICAgIHRoaXMuY3VydmVzLnB1c2goIGN1cnZlICk7CisgICAgICAgIHNldENyb3NzT3Jp
Z2luOiBmdW5jdGlvbiAoIHZhbHVlICkgewogCi0gICAgICAgICAgICB0aGlzLmN1cnJlbnRQb2lu
dC5zZXQoIGFYLCBhWSApOworICAgICAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHZhbHVlOwor
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBzcGxpbmVU
aHJ1OiBmdW5jdGlvbiAoIHB0cyAvKkFycmF5IG9mIFZlY3RvciovICkgewotCi0gICAgICAgICAg
ICB2YXIgbnB0cyA9IFsgdGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSBdLmNvbmNhdCggcHRzICk7
Ci0KLSAgICAgICAgICAgIHZhciBjdXJ2ZSA9IG5ldyBTcGxpbmVDdXJ2ZSggbnB0cyApOwotICAg
ICAgICAgICAgdGhpcy5jdXJ2ZXMucHVzaCggY3VydmUgKTsKKyAgICAgICAgc2V0UGF0aDogZnVu
Y3Rpb24gKCB2YWx1ZSApIHsKIAotICAgICAgICAgICAgdGhpcy5jdXJyZW50UG9pbnQuY29weSgg
cHRzWyBwdHMubGVuZ3RoIC0gMSBdICk7CisgICAgICAgICAgICB0aGlzLnBhdGggPSB2YWx1ZTsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIH0sCisgICAgICAgIH0KIAotICAg
ICAgICBhcmM6IGZ1bmN0aW9uICggYVgsIGFZLCBhUmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFu
Z2xlLCBhQ2xvY2t3aXNlICkgeworICAgIH0gKTsKIAotICAgICAgICAgICAgdmFyIHgwID0gdGhp
cy5jdXJyZW50UG9pbnQueDsKLSAgICAgICAgICAgIHZhciB5MCA9IHRoaXMuY3VycmVudFBvaW50
Lnk7CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8K
KyAgICAgKi8KIAotICAgICAgICAgICAgdGhpcy5hYnNhcmMoIGFYICsgeDAsIGFZICsgeTAsIGFS
YWRpdXMsCi0gICAgICAgICAgICAgICAgYVN0YXJ0QW5nbGUsIGFFbmRBbmdsZSwgYUNsb2Nrd2lz
ZSApOwogCi0gICAgICAgIH0sCisgICAgZnVuY3Rpb24gVGV4dHVyZUxvYWRlciggbWFuYWdlciAp
IHsKIAotICAgICAgICBhYnNhcmM6IGZ1bmN0aW9uICggYVgsIGFZLCBhUmFkaXVzLCBhU3RhcnRB
bmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlICkgeworICAgICAgICB0aGlzLm1hbmFnZXIgPSAo
IG1hbmFnZXIgIT09IHVuZGVmaW5lZCApID8gbWFuYWdlciA6IERlZmF1bHRMb2FkaW5nTWFuYWdl
cjsKIAotICAgICAgICAgICAgdGhpcy5hYnNlbGxpcHNlKCBhWCwgYVksIGFSYWRpdXMsIGFSYWRp
dXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UgKTsKKyAgICB9CiAKLSAgICAg
ICAgfSwKKyAgICBPYmplY3QuYXNzaWduKCBUZXh0dXJlTG9hZGVyLnByb3RvdHlwZSwgewogCi0g
ICAgICAgIGVsbGlwc2U6IGZ1bmN0aW9uICggYVgsIGFZLCB4UmFkaXVzLCB5UmFkaXVzLCBhU3Rh
cnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlLCBhUm90YXRpb24gKSB7CisgICAgICAgIGNy
b3NzT3JpZ2luOiAnYW5vbnltb3VzJywKIAotICAgICAgICAgICAgdmFyIHgwID0gdGhpcy5jdXJy
ZW50UG9pbnQueDsKLSAgICAgICAgICAgIHZhciB5MCA9IHRoaXMuY3VycmVudFBvaW50Lnk7Cisg
ICAgICAgIGxvYWQ6IGZ1bmN0aW9uICggdXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3Ig
KSB7CiAKLSAgICAgICAgICAgIHRoaXMuYWJzZWxsaXBzZSggYVggKyB4MCwgYVkgKyB5MCwgeFJh
ZGl1cywgeVJhZGl1cywgYVN0YXJ0QW5nbGUsIGFFbmRBbmdsZSwgYUNsb2Nrd2lzZSwgYVJvdGF0
aW9uICk7CisgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKCk7CiAKLSAgICAg
ICAgfSwKKyAgICAgICAgICAgIHZhciBsb2FkZXIgPSBuZXcgSW1hZ2VMb2FkZXIoIHRoaXMubWFu
YWdlciApOworICAgICAgICAgICAgbG9hZGVyLnNldENyb3NzT3JpZ2luKCB0aGlzLmNyb3NzT3Jp
Z2luICk7CisgICAgICAgICAgICBsb2FkZXIuc2V0UGF0aCggdGhpcy5wYXRoICk7CiAKLSAgICAg
ICAgYWJzZWxsaXBzZTogZnVuY3Rpb24gKCBhWCwgYVksIHhSYWRpdXMsIHlSYWRpdXMsIGFTdGFy
dEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UsIGFSb3RhdGlvbiApIHsKKyAgICAgICAgICAg
IGxvYWRlci5sb2FkKCB1cmwsIGZ1bmN0aW9uICggaW1hZ2UgKSB7CiAKLSAgICAgICAgICAgIHZh
ciBjdXJ2ZSA9IG5ldyBFbGxpcHNlQ3VydmUoIGFYLCBhWSwgeFJhZGl1cywgeVJhZGl1cywgYVN0
YXJ0QW5nbGUsIGFFbmRBbmdsZSwgYUNsb2Nrd2lzZSwgYVJvdGF0aW9uICk7CisgICAgICAgICAg
ICAgICAgdGV4dHVyZS5pbWFnZSA9IGltYWdlOwogCi0gICAgICAgICAgICBpZiAoIHRoaXMuY3Vy
dmVzLmxlbmd0aCA+IDAgKSB7CisgICAgICAgICAgICAgICAgLy8gSlBFR3MgY2FuJ3QgaGF2ZSBh
biBhbHBoYSBjaGFubmVsLCBzbyBtZW1vcnkgY2FuIGJlIHNhdmVkIGJ5IHN0b3JpbmcgdGhlbSBh
cyBSR0IuCisgICAgICAgICAgICAgICAgdmFyIGlzSlBFRyA9IHVybC5zZWFyY2goIC9cLmpwZT9n
KCR8XD8pL2kgKSA+IDAgfHwgdXJsLnNlYXJjaCggL15kYXRhXDppbWFnZVwvanBlZy8gKSA9PT0g
MDsKIAotICAgICAgICAgICAgICAgIC8vIGlmIGEgcHJldmlvdXMgY3VydmUgaXMgcHJlc2VudCwg
YXR0ZW1wdCB0byBqb2luCi0gICAgICAgICAgICAgICAgdmFyIGZpcnN0UG9pbnQgPSBjdXJ2ZS5n
ZXRQb2ludCggMCApOworICAgICAgICAgICAgICAgIHRleHR1cmUuZm9ybWF0ID0gaXNKUEVHID8g
UkdCRm9ybWF0IDogUkdCQUZvcm1hdDsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLm5lZWRzVXBk
YXRlID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgIGlmICggISBmaXJzdFBvaW50LmVxdWFscygg
dGhpcy5jdXJyZW50UG9pbnQgKSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIG9uTG9hZCAhPT0g
dW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgICAgIHRoaXMubGluZVRvKCBmaXJzdFBv
aW50LngsIGZpcnN0UG9pbnQueSApOworICAgICAgICAgICAgICAgICAgICBvbkxvYWQoIHRleHR1
cmUgKTsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB0aGlzLmN1cnZlcy5wdXNoKCBjdXJ2ZSApOworICAgICAgICAgICAgfSwgb25Qcm9ncmVzcywg
b25FcnJvciApOwogCi0gICAgICAgICAgICB2YXIgbGFzdFBvaW50ID0gY3VydmUuZ2V0UG9pbnQo
IDEgKTsKLSAgICAgICAgICAgIHRoaXMuY3VycmVudFBvaW50LmNvcHkoIGxhc3RQb2ludCApOwor
ICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7CiAKICAgICAgICAgfSwKIAotICAgICAgICBjb3B5
OiBmdW5jdGlvbiAoIHNvdXJjZSApIHsKLQotICAgICAgICAgICAgQ3VydmVQYXRoLnByb3RvdHlw
ZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOwotCi0gICAgICAgICAgICB0aGlzLmN1cnJlbnRQ
b2ludC5jb3B5KCBzb3VyY2UuY3VycmVudFBvaW50ICk7CisgICAgICAgIHNldENyb3NzT3JpZ2lu
OiBmdW5jdGlvbiAoIHZhbHVlICkgewogCisgICAgICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0g
dmFsdWU7CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAg
IHRvSlNPTjogZnVuY3Rpb24gKCkgewotCi0gICAgICAgICAgICB2YXIgZGF0YSA9IEN1cnZlUGF0
aC5wcm90b3R5cGUudG9KU09OLmNhbGwoIHRoaXMgKTsKLQotICAgICAgICAgICAgZGF0YS5jdXJy
ZW50UG9pbnQgPSB0aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCk7Ci0KLSAgICAgICAgICAgIHJl
dHVybiBkYXRhOwotCi0gICAgICAgIH0sCi0KLSAgICAgICAgZnJvbUpTT046IGZ1bmN0aW9uICgg
anNvbiApIHsKLQotICAgICAgICAgICAgQ3VydmVQYXRoLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxs
KCB0aGlzLCBqc29uICk7Ci0KLSAgICAgICAgICAgIHRoaXMuY3VycmVudFBvaW50LmZyb21BcnJh
eSgganNvbi5jdXJyZW50UG9pbnQgKTsKKyAgICAgICAgc2V0UGF0aDogZnVuY3Rpb24gKCB2YWx1
ZSApIHsKIAorICAgICAgICAgICAgdGhpcy5wYXRoID0gdmFsdWU7CiAgICAgICAgICAgICByZXR1
cm4gdGhpczsKIAogICAgICAgICB9CkBAIC0zNDIzOCw0MTYgKzM1NDk5LDQxNiBAQAogCiAgICAg
LyoqCiAgICAgICogQGF1dGhvciB6ejg1IC8gaHR0cDovL3d3dy5sYWI0Z2FtZXMubmV0L3p6ODUv
YmxvZwotICAgICAqIERlZmluZXMgYSAyZCBzaGFwZSBwbGFuZSB1c2luZyBwYXRocy4KKyAgICAg
KiBFeHRlbnNpYmxlIGN1cnZlIG9iamVjdAorICAgICAqCisgICAgICogU29tZSBjb21tb24gb2Yg
Y3VydmUgbWV0aG9kczoKKyAgICAgKiAuZ2V0UG9pbnQoIHQsIG9wdGlvbmFsVGFyZ2V0ICksIC5n
ZXRUYW5nZW50KCB0ICkKKyAgICAgKiAuZ2V0UG9pbnRBdCggdSwgb3B0aW9uYWxUYXJnZXQgKSwg
LmdldFRhbmdlbnRBdCggdSApCisgICAgICogLmdldFBvaW50cygpLCAuZ2V0U3BhY2VkUG9pbnRz
KCkKKyAgICAgKiAuZ2V0TGVuZ3RoKCkKKyAgICAgKiAudXBkYXRlQXJjTGVuZ3RocygpCisgICAg
ICoKKyAgICAgKiBUaGlzIGZvbGxvd2luZyBjdXJ2ZXMgaW5oZXJpdCBmcm9tIFRIUkVFLkN1cnZl
OgorICAgICAqCisgICAgICogLS0gMkQgY3VydmVzIC0tCisgICAgICogVEhSRUUuQXJjQ3VydmUK
KyAgICAgKiBUSFJFRS5DdWJpY0JlemllckN1cnZlCisgICAgICogVEhSRUUuRWxsaXBzZUN1cnZl
CisgICAgICogVEhSRUUuTGluZUN1cnZlCisgICAgICogVEhSRUUuUXVhZHJhdGljQmV6aWVyQ3Vy
dmUKKyAgICAgKiBUSFJFRS5TcGxpbmVDdXJ2ZQorICAgICAqCisgICAgICogLS0gM0QgY3VydmVz
IC0tCisgICAgICogVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMworICAgICAqIFRIUkVFLkN1YmljQmV6
aWVyQ3VydmUzCisgICAgICogVEhSRUUuTGluZUN1cnZlMworICAgICAqIFRIUkVFLlF1YWRyYXRp
Y0JlemllckN1cnZlMworICAgICAqCisgICAgICogQSBzZXJpZXMgb2YgY3VydmVzIGNhbiBiZSBy
ZXByZXNlbnRlZCBhcyBhIFRIUkVFLkN1cnZlUGF0aC4KKyAgICAgKgogICAgICAqKi8KIAotICAg
IC8vIFNURVAgMSBDcmVhdGUgYSBwYXRoLgotICAgIC8vIFNURVAgMiBUdXJuIHBhdGggaW50byBz
aGFwZS4KLSAgICAvLyBTVEVQIDMgRXh0cnVkZUdlb21ldHJ5IHRha2VzIGluIFNoYXBlL1NoYXBl
cwotICAgIC8vIFNURVAgM2EgLSBFeHRyYWN0IHBvaW50cyBmcm9tIGVhY2ggc2hhcGUsIHR1cm4g
dG8gdmVydGljZXMKLSAgICAvLyBTVEVQIDNiIC0gVHJpYW5ndWxhdGUgZWFjaCBzaGFwZSwgYWRk
IGZhY2VzLgotCi0gICAgZnVuY3Rpb24gU2hhcGUoIHBvaW50cyApIHsKLQotICAgICAgICBQYXRo
LmNhbGwoIHRoaXMsIHBvaW50cyApOworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqICBBYnN0cmFjdCBDdXJ2
ZSBiYXNlIGNsYXNzCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwogCi0gICAgICAgIHRoaXMudXVpZCA9IF9NYXRoLmdl
bmVyYXRlVVVJRCgpOworICAgIGZ1bmN0aW9uIEN1cnZlKCkgewogCi0gICAgICAgIHRoaXMudHlw
ZSA9ICdTaGFwZSc7CisgICAgICAgIHRoaXMudHlwZSA9ICdDdXJ2ZSc7CiAKLSAgICAgICAgdGhp
cy5ob2xlcyA9IFtdOworICAgICAgICB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucyA9IDIwMDsKIAog
ICAgIH0KIAotICAgIFNoYXBlLnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVh
dGUoIFBhdGgucHJvdG90eXBlICksIHsKKyAgICBPYmplY3QuYXNzaWduKCBDdXJ2ZS5wcm90b3R5
cGUsIHsKIAotICAgICAgICBjb25zdHJ1Y3RvcjogU2hhcGUsCisgICAgICAgIC8vIFZpcnR1YWwg
YmFzZSBjbGFzcyBtZXRob2QgdG8gb3ZlcndyaXRlIGFuZCBpbXBsZW1lbnQgaW4gc3ViY2xhc3Nl
cworICAgICAgICAvLyAgLSB0IFswIC4uIDFdCiAKLSAgICAgICAgZ2V0UG9pbnRzSG9sZXM6IGZ1
bmN0aW9uICggZGl2aXNpb25zICkgeworICAgICAgICBnZXRQb2ludDogZnVuY3Rpb24gKCAvKiB0
LCBvcHRpb25hbFRhcmdldCAqLyApIHsKIAotICAgICAgICAgICAgdmFyIGhvbGVzUHRzID0gW107
CisgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5DdXJ2ZTogLmdldFBvaW50KCkgbm90
IGltcGxlbWVudGVkLicgKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwogCi0gICAgICAgICAg
ICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmhvbGVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7
CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICBob2xlc1B0c1sgaSBdID0gdGhpcy5ob2xl
c1sgaSBdLmdldFBvaW50cyggZGl2aXNpb25zICk7CisgICAgICAgIC8vIEdldCBwb2ludCBhdCBy
ZWxhdGl2ZSBwb3NpdGlvbiBpbiBjdXJ2ZSBhY2NvcmRpbmcgdG8gYXJjIGxlbmd0aAorICAgICAg
ICAvLyAtIHUgWzAgLi4gMV0KIAotICAgICAgICAgICAgfQorICAgICAgICBnZXRQb2ludEF0OiBm
dW5jdGlvbiAoIHUsIG9wdGlvbmFsVGFyZ2V0ICkgewogCi0gICAgICAgICAgICByZXR1cm4gaG9s
ZXNQdHM7CisgICAgICAgICAgICB2YXIgdCA9IHRoaXMuZ2V0VXRvVG1hcHBpbmcoIHUgKTsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLmdldFBvaW50KCB0LCBvcHRpb25hbFRhcmdldCApOwogCiAg
ICAgICAgIH0sCiAKLSAgICAgICAgLy8gZ2V0IHBvaW50cyBvZiBzaGFwZSBhbmQgaG9sZXMgKGtl
eXBvaW50cyBiYXNlZCBvbiBzZWdtZW50cyBwYXJhbWV0ZXIpCi0KLSAgICAgICAgZXh0cmFjdFBv
aW50czogZnVuY3Rpb24gKCBkaXZpc2lvbnMgKSB7CisgICAgICAgIC8vIEdldCBzZXF1ZW5jZSBv
ZiBwb2ludHMgdXNpbmcgZ2V0UG9pbnQoIHQgKQogCi0gICAgICAgICAgICByZXR1cm4geworICAg
ICAgICBnZXRQb2ludHM6IGZ1bmN0aW9uICggZGl2aXNpb25zICkgewogCi0gICAgICAgICAgICAg
ICAgc2hhcGU6IHRoaXMuZ2V0UG9pbnRzKCBkaXZpc2lvbnMgKSwKLSAgICAgICAgICAgICAgICBo
b2xlczogdGhpcy5nZXRQb2ludHNIb2xlcyggZGl2aXNpb25zICkKKyAgICAgICAgICAgIGlmICgg
ZGl2aXNpb25zID09PSB1bmRlZmluZWQgKSBkaXZpc2lvbnMgPSA1OwogCi0gICAgICAgICAgICB9
OworICAgICAgICAgICAgdmFyIHBvaW50cyA9IFtdOwogCi0gICAgICAgIH0sCisgICAgICAgICAg
ICBmb3IgKCB2YXIgZCA9IDA7IGQgPD0gZGl2aXNpb25zOyBkICsrICkgewogCi0gICAgICAgIGNv
cHk6IGZ1bmN0aW9uICggc291cmNlICkgeworICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKCB0
aGlzLmdldFBvaW50KCBkIC8gZGl2aXNpb25zICkgKTsKIAotICAgICAgICAgICAgUGF0aC5wcm90
b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKKyAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgdGhpcy5ob2xlcyA9IFtdOworICAgICAgICAgICAgcmV0dXJuIHBvaW50czsKIAotICAg
ICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gc291cmNlLmhvbGVzLmxlbmd0aDsgaSA8IGw7
IGkgKysgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB2YXIgaG9sZSA9IHNvdXJj
ZS5ob2xlc1sgaSBdOworICAgICAgICAvLyBHZXQgc2VxdWVuY2Ugb2YgcG9pbnRzIHVzaW5nIGdl
dFBvaW50QXQoIHUgKQogCi0gICAgICAgICAgICAgICAgdGhpcy5ob2xlcy5wdXNoKCBob2xlLmNs
b25lKCkgKTsKKyAgICAgICAgZ2V0U3BhY2VkUG9pbnRzOiBmdW5jdGlvbiAoIGRpdmlzaW9ucyAp
IHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBkaXZpc2lvbnMgPT09IHVuZGVm
aW5lZCApIGRpdmlzaW9ucyA9IDU7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICAgICAgdmFyIHBvaW50cyA9IFtdOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICBmb3IgKCB2
YXIgZCA9IDA7IGQgPD0gZGl2aXNpb25zOyBkICsrICkgewogCi0gICAgICAgIHRvSlNPTjogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKCB0aGlzLmdldFBvaW50QXQo
IGQgLyBkaXZpc2lvbnMgKSApOwogCi0gICAgICAgICAgICB2YXIgZGF0YSA9IFBhdGgucHJvdG90
eXBlLnRvSlNPTi5jYWxsKCB0aGlzICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGRh
dGEudXVpZCA9IHRoaXMudXVpZDsKLSAgICAgICAgICAgIGRhdGEuaG9sZXMgPSBbXTsKKyAgICAg
ICAgICAgIHJldHVybiBwb2ludHM7CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9
IHRoaXMuaG9sZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgfSwKIAotICAgICAg
ICAgICAgICAgIHZhciBob2xlID0gdGhpcy5ob2xlc1sgaSBdOwotICAgICAgICAgICAgICAgIGRh
dGEuaG9sZXMucHVzaCggaG9sZS50b0pTT04oKSApOworICAgICAgICAvLyBHZXQgdG90YWwgY3Vy
dmUgYXJjIGxlbmd0aAogCi0gICAgICAgICAgICB9CisgICAgICAgIGdldExlbmd0aDogZnVuY3Rp
b24gKCkgewogCi0gICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAgIHZhciBsZW5n
dGhzID0gdGhpcy5nZXRMZW5ndGhzKCk7CisgICAgICAgICAgICByZXR1cm4gbGVuZ3Roc1sgbGVu
Z3Rocy5sZW5ndGggLSAxIF07CiAKICAgICAgICAgfSwKIAotICAgICAgICBmcm9tSlNPTjogZnVu
Y3Rpb24gKCBqc29uICkgeworICAgICAgICAvLyBHZXQgbGlzdCBvZiBjdW11bGF0aXZlIHNlZ21l
bnQgbGVuZ3RocwogCi0gICAgICAgICAgICBQYXRoLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKCB0
aGlzLCBqc29uICk7CisgICAgICAgIGdldExlbmd0aHM6IGZ1bmN0aW9uICggZGl2aXNpb25zICkg
ewogCi0gICAgICAgICAgICB0aGlzLnV1aWQgPSBqc29uLnV1aWQ7Ci0gICAgICAgICAgICB0aGlz
LmhvbGVzID0gW107CisgICAgICAgICAgICBpZiAoIGRpdmlzaW9ucyA9PT0gdW5kZWZpbmVkICkg
ZGl2aXNpb25zID0gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM7CiAKLSAgICAgICAgICAgIGZvciAo
IHZhciBpID0gMCwgbCA9IGpzb24uaG9sZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAg
ICAgICAgIGlmICggdGhpcy5jYWNoZUFyY0xlbmd0aHMgJiYKKyAgICAgICAgICAgICAgICAoIHRo
aXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aCA9PT0gZGl2aXNpb25zICsgMSApICYmCisgICAgICAg
ICAgICAgICAgISB0aGlzLm5lZWRzVXBkYXRlICkgewogCi0gICAgICAgICAgICAgICAgdmFyIGhv
bGUgPSBqc29uLmhvbGVzWyBpIF07Ci0gICAgICAgICAgICAgICAgdGhpcy5ob2xlcy5wdXNoKCBu
ZXcgUGF0aCgpLmZyb21KU09OKCBob2xlICkgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5jYWNoZUFyY0xlbmd0aHM7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJu
IHRoaXM7Ci0KLSAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5uZWVkc1VwZGF0ZSA9IGZhbHNl
OwogCi0gICAgfSApOworICAgICAgICAgICAgdmFyIGNhY2hlID0gW107CisgICAgICAgICAgICB2
YXIgY3VycmVudCwgbGFzdCA9IHRoaXMuZ2V0UG9pbnQoIDAgKTsKKyAgICAgICAgICAgIHZhciBw
LCBzdW0gPSAwOwogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJk
b29iLmNvbS8KLSAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEu
Y29tLwotICAgICAqLworICAgICAgICAgICAgY2FjaGUucHVzaCggMCApOwogCi0gICAgZnVuY3Rp
b24gTGlnaHQoIGNvbG9yLCBpbnRlbnNpdHkgKSB7CisgICAgICAgICAgICBmb3IgKCBwID0gMTsg
cCA8PSBkaXZpc2lvbnM7IHAgKysgKSB7CiAKLSAgICAgICAgT2JqZWN0M0QuY2FsbCggdGhpcyAp
OworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0aGlzLmdldFBvaW50KCBwIC8gZGl2aXNpb25z
ICk7CisgICAgICAgICAgICAgICAgc3VtICs9IGN1cnJlbnQuZGlzdGFuY2VUbyggbGFzdCApOwor
ICAgICAgICAgICAgICAgIGNhY2hlLnB1c2goIHN1bSApOworICAgICAgICAgICAgICAgIGxhc3Qg
PSBjdXJyZW50OwogCi0gICAgICAgIHRoaXMudHlwZSA9ICdMaWdodCc7CisgICAgICAgICAgICB9
CiAKLSAgICAgICAgdGhpcy5jb2xvciA9IG5ldyBDb2xvciggY29sb3IgKTsKLSAgICAgICAgdGhp
cy5pbnRlbnNpdHkgPSBpbnRlbnNpdHkgIT09IHVuZGVmaW5lZCA/IGludGVuc2l0eSA6IDE7Cisg
ICAgICAgICAgICB0aGlzLmNhY2hlQXJjTGVuZ3RocyA9IGNhY2hlOwogCi0gICAgICAgIHRoaXMu
cmVjZWl2ZVNoYWRvdyA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIHJldHVybiBjYWNoZTsgLy8g
eyBzdW1zOiBjYWNoZSwgc3VtOiBzdW0gfTsgU3VtIGlzIGluIHRoZSBsYXN0IGVsZW1lbnQuCiAK
LSAgICB9CisgICAgICAgIH0sCiAKLSAgICBMaWdodC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWdu
KCBPYmplY3QuY3JlYXRlKCBPYmplY3QzRC5wcm90b3R5cGUgKSwgeworICAgICAgICB1cGRhdGVB
cmNMZW5ndGhzOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgY29uc3RydWN0b3I6IExpZ2h0LAor
ICAgICAgICAgICAgdGhpcy5uZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgICAgICAgICB0aGlzLmdl
dExlbmd0aHMoKTsKIAotICAgICAgICBpc0xpZ2h0OiB0cnVlLAorICAgICAgICB9LAogCi0gICAg
ICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkgeworICAgICAgICAvLyBHaXZlbiB1ICggMCAu
LiAxICksIGdldCBhIHQgdG8gZmluZCBwLiBUaGlzIGdpdmVzIHlvdSBwb2ludHMgd2hpY2ggYXJl
IGVxdWlkaXN0YW50CiAKLSAgICAgICAgICAgIE9iamVjdDNELnByb3RvdHlwZS5jb3B5LmNhbGwo
IHRoaXMsIHNvdXJjZSApOworICAgICAgICBnZXRVdG9UbWFwcGluZzogZnVuY3Rpb24gKCB1LCBk
aXN0YW5jZSApIHsKIAotICAgICAgICAgICAgdGhpcy5jb2xvci5jb3B5KCBzb3VyY2UuY29sb3Ig
KTsKLSAgICAgICAgICAgIHRoaXMuaW50ZW5zaXR5ID0gc291cmNlLmludGVuc2l0eTsKKyAgICAg
ICAgICAgIHZhciBhcmNMZW5ndGhzID0gdGhpcy5nZXRMZW5ndGhzKCk7CiAKLSAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICAgICAgdmFyIGkgPSAwLCBpbCA9IGFyY0xlbmd0aHMubGVu
Z3RoOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICB2YXIgdGFyZ2V0QXJjTGVuZ3RoOyAvLyBU
aGUgdGFyZ2V0ZWQgdSBkaXN0YW5jZSB2YWx1ZSB0byBnZXQKIAotICAgICAgICB0b0pTT046IGZ1
bmN0aW9uICggbWV0YSApIHsKKyAgICAgICAgICAgIGlmICggZGlzdGFuY2UgKSB7CiAKLSAgICAg
ICAgICAgIHZhciBkYXRhID0gT2JqZWN0M0QucHJvdG90eXBlLnRvSlNPTi5jYWxsKCB0aGlzLCBt
ZXRhICk7CisgICAgICAgICAgICAgICAgdGFyZ2V0QXJjTGVuZ3RoID0gZGlzdGFuY2U7CiAKLSAg
ICAgICAgICAgIGRhdGEub2JqZWN0LmNvbG9yID0gdGhpcy5jb2xvci5nZXRIZXgoKTsKLSAgICAg
ICAgICAgIGRhdGEub2JqZWN0LmludGVuc2l0eSA9IHRoaXMuaW50ZW5zaXR5OworICAgICAgICAg
ICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLmdyb3VuZENvbG9yICE9PSB1bmRl
ZmluZWQgKSBkYXRhLm9iamVjdC5ncm91bmRDb2xvciA9IHRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4
KCk7CisgICAgICAgICAgICAgICAgdGFyZ2V0QXJjTGVuZ3RoID0gdSAqIGFyY0xlbmd0aHNbIGls
IC0gMSBdOwogCi0gICAgICAgICAgICBpZiAoIHRoaXMuZGlzdGFuY2UgIT09IHVuZGVmaW5lZCAp
IGRhdGEub2JqZWN0LmRpc3RhbmNlID0gdGhpcy5kaXN0YW5jZTsKLSAgICAgICAgICAgIGlmICgg
dGhpcy5hbmdsZSAhPT0gdW5kZWZpbmVkICkgZGF0YS5vYmplY3QuYW5nbGUgPSB0aGlzLmFuZ2xl
OwotICAgICAgICAgICAgaWYgKCB0aGlzLmRlY2F5ICE9PSB1bmRlZmluZWQgKSBkYXRhLm9iamVj
dC5kZWNheSA9IHRoaXMuZGVjYXk7Ci0gICAgICAgICAgICBpZiAoIHRoaXMucGVudW1icmEgIT09
IHVuZGVmaW5lZCApIGRhdGEub2JqZWN0LnBlbnVtYnJhID0gdGhpcy5wZW51bWJyYTsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCB0aGlzLnNoYWRvdyAhPT0gdW5kZWZpbmVkICkg
ZGF0YS5vYmplY3Quc2hhZG93ID0gdGhpcy5zaGFkb3cudG9KU09OKCk7CisgICAgICAgICAgICAv
LyBiaW5hcnkgc2VhcmNoIGZvciB0aGUgaW5kZXggd2l0aCBsYXJnZXN0IHZhbHVlIHNtYWxsZXIg
dGhhbiB0YXJnZXQgdSBkaXN0YW5jZQogCi0gICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAg
ICAgICAgIHZhciBsb3cgPSAwLCBoaWdoID0gaWwgLSAxLCBjb21wYXJpc29uOwogCi0gICAgICAg
IH0KKyAgICAgICAgICAgIHdoaWxlICggbG93IDw9IGhpZ2ggKSB7CiAKLSAgICB9ICk7CisgICAg
ICAgICAgICAgICAgaSA9IE1hdGguZmxvb3IoIGxvdyArICggaGlnaCAtIGxvdyApIC8gMiApOyAv
LyBsZXNzIGxpa2VseSB0byBvdmVyZmxvdywgdGhvdWdoIHByb2JhYmx5IG5vdCBpc3N1ZSBoZXJl
LCBKUyBkb2Vzbid0IHJlYWxseSBoYXZlIGludGVnZXJzLCBhbGwgbnVtYmVycyBhcmUgZmxvYXRz
CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFs
aWEuY29tLwotICAgICAqLworICAgICAgICAgICAgICAgIGNvbXBhcmlzb24gPSBhcmNMZW5ndGhz
WyBpIF0gLSB0YXJnZXRBcmNMZW5ndGg7CiAKLSAgICBmdW5jdGlvbiBIZW1pc3BoZXJlTGlnaHQo
IHNreUNvbG9yLCBncm91bmRDb2xvciwgaW50ZW5zaXR5ICkgeworICAgICAgICAgICAgICAgIGlm
ICggY29tcGFyaXNvbiA8IDAgKSB7CiAKLSAgICAgICAgTGlnaHQuY2FsbCggdGhpcywgc2t5Q29s
b3IsIGludGVuc2l0eSApOworICAgICAgICAgICAgICAgICAgICBsb3cgPSBpICsgMTsKIAotICAg
ICAgICB0aGlzLnR5cGUgPSAnSGVtaXNwaGVyZUxpZ2h0JzsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCBjb21wYXJpc29uID4gMCApIHsKIAotICAgICAgICB0aGlzLmNhc3RTaGFkb3cgPSB1
bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAgIGhpZ2ggPSBpIC0gMTsKIAotICAgICAgICB0
aGlzLnBvc2l0aW9uLmNvcHkoIE9iamVjdDNELkRlZmF1bHRVcCApOwotICAgICAgICB0aGlzLnVw
ZGF0ZU1hdHJpeCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgdGhpcy5n
cm91bmRDb2xvciA9IG5ldyBDb2xvciggZ3JvdW5kQ29sb3IgKTsKKyAgICAgICAgICAgICAgICAg
ICAgaGlnaCA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgfQorICAgICAg
ICAgICAgICAgICAgICAvLyBET05FCiAKLSAgICBIZW1pc3BoZXJlTGlnaHQucHJvdG90eXBlID0g
T2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggTGlnaHQucHJvdG90eXBlICksIHsKKyAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgY29uc3RydWN0b3I6IEhlbWlzcGhlcmVMaWdodCwKKyAg
ICAgICAgICAgIH0KIAotICAgICAgICBpc0hlbWlzcGhlcmVMaWdodDogdHJ1ZSwKKyAgICAgICAg
ICAgIGkgPSBoaWdoOwogCi0gICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkgeworICAg
ICAgICAgICAgaWYgKCBhcmNMZW5ndGhzWyBpIF0gPT09IHRhcmdldEFyY0xlbmd0aCApIHsKIAot
ICAgICAgICAgICAgTGlnaHQucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGkgLyAoIGlsIC0gMSApOwogCi0gICAgICAgICAgICB0aGlz
Lmdyb3VuZENvbG9yLmNvcHkoIHNvdXJjZS5ncm91bmRDb2xvciApOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIC8vIHdlIGNvdWxkIGdldCBm
aW5lciBncmFpbiBhdCBsZW5ndGhzLCBvciB1c2Ugc2ltcGxlIGludGVycG9sYXRpb24gYmV0d2Vl
biB0d28gcG9pbnRzCiAKLSAgICAgICAgfQorICAgICAgICAgICAgdmFyIGxlbmd0aEJlZm9yZSA9
IGFyY0xlbmd0aHNbIGkgXTsKKyAgICAgICAgICAgIHZhciBsZW5ndGhBZnRlciA9IGFyY0xlbmd0
aHNbIGkgKyAxIF07CiAKLSAgICB9ICk7CisgICAgICAgICAgICB2YXIgc2VnbWVudExlbmd0aCA9
IGxlbmd0aEFmdGVyIC0gbGVuZ3RoQmVmb3JlOwogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBt
cmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKi8KKyAgICAgICAgICAgIC8vIGRldGVy
bWluZSB3aGVyZSB3ZSBhcmUgYmV0d2VlbiB0aGUgJ2JlZm9yZScgYW5kICdhZnRlcicgcG9pbnRz
CiAKLSAgICBmdW5jdGlvbiBMaWdodFNoYWRvdyggY2FtZXJhICkgeworICAgICAgICAgICAgdmFy
IHNlZ21lbnRGcmFjdGlvbiA9ICggdGFyZ2V0QXJjTGVuZ3RoIC0gbGVuZ3RoQmVmb3JlICkgLyBz
ZWdtZW50TGVuZ3RoOwogCi0gICAgICAgIHRoaXMuY2FtZXJhID0gY2FtZXJhOworICAgICAgICAg
ICAgLy8gYWRkIHRoYXQgZnJhY3Rpb25hbCBhbW91bnQgdG8gdAogCi0gICAgICAgIHRoaXMuYmlh
cyA9IDA7Ci0gICAgICAgIHRoaXMucmFkaXVzID0gMTsKKyAgICAgICAgICAgIHZhciB0ID0gKCBp
ICsgc2VnbWVudEZyYWN0aW9uICkgLyAoIGlsIC0gMSApOwogCi0gICAgICAgIHRoaXMubWFwU2l6
ZSA9IG5ldyBWZWN0b3IyKCA1MTIsIDUxMiApOworICAgICAgICAgICAgcmV0dXJuIHQ7CiAKLSAg
ICAgICAgdGhpcy5tYXAgPSBudWxsOwotICAgICAgICB0aGlzLm1hdHJpeCA9IG5ldyBNYXRyaXg0
KCk7CisgICAgICAgIH0sCiAKLSAgICB9CisgICAgICAgIC8vIFJldHVybnMgYSB1bml0IHZlY3Rv
ciB0YW5nZW50IGF0IHQKKyAgICAgICAgLy8gSW4gY2FzZSBhbnkgc3ViIGN1cnZlIGRvZXMgbm90
IGltcGxlbWVudCBpdHMgdGFuZ2VudCBkZXJpdmF0aW9uLAorICAgICAgICAvLyAyIHBvaW50cyBh
IHNtYWxsIGRlbHRhIGFwYXJ0IHdpbGwgYmUgdXNlZCB0byBmaW5kIGl0cyBncmFkaWVudAorICAg
ICAgICAvLyB3aGljaCBzZWVtcyB0byBnaXZlIGEgcmVhc29uYWJsZSBhcHByb3hpbWF0aW9uCiAK
LSAgICBPYmplY3QuYXNzaWduKCBMaWdodFNoYWRvdy5wcm90b3R5cGUsIHsKKyAgICAgICAgZ2V0
VGFuZ2VudDogZnVuY3Rpb24gKCB0ICkgewogCi0gICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291
cmNlICkgeworICAgICAgICAgICAgdmFyIGRlbHRhID0gMC4wMDAxOworICAgICAgICAgICAgdmFy
IHQxID0gdCAtIGRlbHRhOworICAgICAgICAgICAgdmFyIHQyID0gdCArIGRlbHRhOwogCi0gICAg
ICAgICAgICB0aGlzLmNhbWVyYSA9IHNvdXJjZS5jYW1lcmEuY2xvbmUoKTsKKyAgICAgICAgICAg
IC8vIENhcHBpbmcgaW4gY2FzZSBvZiBkYW5nZXIKIAotICAgICAgICAgICAgdGhpcy5iaWFzID0g
c291cmNlLmJpYXM7Ci0gICAgICAgICAgICB0aGlzLnJhZGl1cyA9IHNvdXJjZS5yYWRpdXM7Cisg
ICAgICAgICAgICBpZiAoIHQxIDwgMCApIHQxID0gMDsKKyAgICAgICAgICAgIGlmICggdDIgPiAx
ICkgdDIgPSAxOwogCi0gICAgICAgICAgICB0aGlzLm1hcFNpemUuY29weSggc291cmNlLm1hcFNp
emUgKTsKKyAgICAgICAgICAgIHZhciBwdDEgPSB0aGlzLmdldFBvaW50KCB0MSApOworICAgICAg
ICAgICAgdmFyIHB0MiA9IHRoaXMuZ2V0UG9pbnQoIHQyICk7CiAKLSAgICAgICAgICAgIHJldHVy
biB0aGlzOworICAgICAgICAgICAgdmFyIHZlYyA9IHB0Mi5jbG9uZSgpLnN1YiggcHQxICk7Cisg
ICAgICAgICAgICByZXR1cm4gdmVjLm5vcm1hbGl6ZSgpOwogCiAgICAgICAgIH0sCiAKLSAgICAg
ICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZ2V0VGFuZ2VudEF0OiBmdW5jdGlvbiAo
IHUgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHko
IHRoaXMgKTsKKyAgICAgICAgICAgIHZhciB0ID0gdGhpcy5nZXRVdG9UbWFwcGluZyggdSApOwor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGFuZ2VudCggdCApOwogCiAgICAgICAgIH0sCiAK
LSAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAgIHZhciBvYmplY3Qg
PSB7fTsKKyAgICAgICAgY29tcHV0ZUZyZW5ldEZyYW1lczogZnVuY3Rpb24gKCBzZWdtZW50cywg
Y2xvc2VkICkgewogCi0gICAgICAgICAgICBpZiAoIHRoaXMuYmlhcyAhPT0gMCApIG9iamVjdC5i
aWFzID0gdGhpcy5iaWFzOwotICAgICAgICAgICAgaWYgKCB0aGlzLnJhZGl1cyAhPT0gMSApIG9i
amVjdC5yYWRpdXMgPSB0aGlzLnJhZGl1czsKLSAgICAgICAgICAgIGlmICggdGhpcy5tYXBTaXpl
LnggIT09IDUxMiB8fCB0aGlzLm1hcFNpemUueSAhPT0gNTEyICkgb2JqZWN0Lm1hcFNpemUgPSB0
aGlzLm1hcFNpemUudG9BcnJheSgpOworICAgICAgICAgICAgLy8gc2VlIGh0dHA6Ly93d3cuY3Mu
aW5kaWFuYS5lZHUvcHViL3RlY2hyZXBvcnRzL1RSNDI1LnBkZgogCi0gICAgICAgICAgICBvYmpl
Y3QuY2FtZXJhID0gdGhpcy5jYW1lcmEudG9KU09OKCBmYWxzZSApLm9iamVjdDsKLSAgICAgICAg
ICAgIGRlbGV0ZSBvYmplY3QuY2FtZXJhLm1hdHJpeDsKKyAgICAgICAgICAgIHZhciBub3JtYWwg
PSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICAg
ICAgdmFyIHRhbmdlbnRzID0gW107CisgICAgICAgICAgICB2YXIgbm9ybWFscyA9IFtdOworICAg
ICAgICAgICAgdmFyIGJpbm9ybWFscyA9IFtdOwogCi0gICAgICAgIH0KKyAgICAgICAgICAgIHZh
ciB2ZWMgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdmFyIG1hdCA9IG5ldyBNYXRyaXg0
KCk7CiAKLSAgICB9ICk7CisgICAgICAgICAgICB2YXIgaSwgdSwgdGhldGE7CiAKLSAgICAvKioK
LSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqLworICAg
ICAgICAgICAgLy8gY29tcHV0ZSB0aGUgdGFuZ2VudCB2ZWN0b3JzIGZvciBlYWNoIHNlZ21lbnQg
b24gdGhlIGN1cnZlCiAKLSAgICBmdW5jdGlvbiBTcG90TGlnaHRTaGFkb3coKSB7CisgICAgICAg
ICAgICBmb3IgKCBpID0gMDsgaSA8PSBzZWdtZW50czsgaSArKyApIHsKIAotICAgICAgICBMaWdo
dFNoYWRvdy5jYWxsKCB0aGlzLCBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoIDUwLCAxLCAwLjUsIDUw
MCApICk7CisgICAgICAgICAgICAgICAgdSA9IGkgLyBzZWdtZW50czsKIAotICAgIH0KKyAgICAg
ICAgICAgICAgICB0YW5nZW50c1sgaSBdID0gdGhpcy5nZXRUYW5nZW50QXQoIHUgKTsKKyAgICAg
ICAgICAgICAgICB0YW5nZW50c1sgaSBdLm5vcm1hbGl6ZSgpOwogCi0gICAgU3BvdExpZ2h0U2hh
ZG93LnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIExpZ2h0U2hhZG93
LnByb3RvdHlwZSApLCB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgY29uc3RydWN0b3I6IFNw
b3RMaWdodFNoYWRvdywKKyAgICAgICAgICAgIC8vIHNlbGVjdCBhbiBpbml0aWFsIG5vcm1hbCB2
ZWN0b3IgcGVycGVuZGljdWxhciB0byB0aGUgZmlyc3QgdGFuZ2VudCB2ZWN0b3IsCisgICAgICAg
ICAgICAvLyBhbmQgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgbWluaW11bSB0YW5nZW50IHh5eiBj
b21wb25lbnQKIAotICAgICAgICBpc1Nwb3RMaWdodFNoYWRvdzogdHJ1ZSwKKyAgICAgICAgICAg
IG5vcm1hbHNbIDAgXSA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICBiaW5vcm1hbHNbIDAg
XSA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICB2YXIgbWluID0gTnVtYmVyLk1BWF9WQUxV
RTsKKyAgICAgICAgICAgIHZhciB0eCA9IE1hdGguYWJzKCB0YW5nZW50c1sgMCBdLnggKTsKKyAg
ICAgICAgICAgIHZhciB0eSA9IE1hdGguYWJzKCB0YW5nZW50c1sgMCBdLnkgKTsKKyAgICAgICAg
ICAgIHZhciB0eiA9IE1hdGguYWJzKCB0YW5nZW50c1sgMCBdLnogKTsKIAotICAgICAgICB1cGRh
dGU6IGZ1bmN0aW9uICggbGlnaHQgKSB7CisgICAgICAgICAgICBpZiAoIHR4IDw9IG1pbiApIHsK
IAotICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuY2FtZXJhOworICAgICAgICAgICAgICAg
IG1pbiA9IHR4OworICAgICAgICAgICAgICAgIG5vcm1hbC5zZXQoIDEsIDAsIDAgKTsKIAotICAg
ICAgICAgICAgdmFyIGZvdiA9IF9NYXRoLlJBRDJERUcgKiAyICogbGlnaHQuYW5nbGU7Ci0gICAg
ICAgICAgICB2YXIgYXNwZWN0ID0gdGhpcy5tYXBTaXplLndpZHRoIC8gdGhpcy5tYXBTaXplLmhl
aWdodDsKLSAgICAgICAgICAgIHZhciBmYXIgPSBsaWdodC5kaXN0YW5jZSB8fCBjYW1lcmEuZmFy
OworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIGZvdiAhPT0gY2FtZXJhLmZvdiB8
fCBhc3BlY3QgIT09IGNhbWVyYS5hc3BlY3QgfHwgZmFyICE9PSBjYW1lcmEuZmFyICkgeworICAg
ICAgICAgICAgaWYgKCB0eSA8PSBtaW4gKSB7CiAKLSAgICAgICAgICAgICAgICBjYW1lcmEuZm92
ID0gZm92OwotICAgICAgICAgICAgICAgIGNhbWVyYS5hc3BlY3QgPSBhc3BlY3Q7Ci0gICAgICAg
ICAgICAgICAgY2FtZXJhLmZhciA9IGZhcjsKLSAgICAgICAgICAgICAgICBjYW1lcmEudXBkYXRl
UHJvamVjdGlvbk1hdHJpeCgpOworICAgICAgICAgICAgICAgIG1pbiA9IHR5OworICAgICAgICAg
ICAgICAgIG5vcm1hbC5zZXQoIDAsIDEsIDAgKTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAg
IH0KKyAgICAgICAgICAgIGlmICggdHogPD0gbWluICkgewogCi0gICAgfSApOworICAgICAgICAg
ICAgICAgIG5vcm1hbC5zZXQoIDAsIDAsIDEgKTsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3Ig
YWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICovCisgICAgICAgICAg
ICB9CiAKLSAgICBmdW5jdGlvbiBTcG90TGlnaHQoIGNvbG9yLCBpbnRlbnNpdHksIGRpc3RhbmNl
LCBhbmdsZSwgcGVudW1icmEsIGRlY2F5ICkgeworICAgICAgICAgICAgdmVjLmNyb3NzVmVjdG9y
cyggdGFuZ2VudHNbIDAgXSwgbm9ybWFsICkubm9ybWFsaXplKCk7CiAKLSAgICAgICAgTGlnaHQu
Y2FsbCggdGhpcywgY29sb3IsIGludGVuc2l0eSApOworICAgICAgICAgICAgbm9ybWFsc1sgMCBd
LmNyb3NzVmVjdG9ycyggdGFuZ2VudHNbIDAgXSwgdmVjICk7CisgICAgICAgICAgICBiaW5vcm1h
bHNbIDAgXS5jcm9zc1ZlY3RvcnMoIHRhbmdlbnRzWyAwIF0sIG5vcm1hbHNbIDAgXSApOwogCi0g
ICAgICAgIHRoaXMudHlwZSA9ICdTcG90TGlnaHQnOwogCi0gICAgICAgIHRoaXMucG9zaXRpb24u
Y29weSggT2JqZWN0M0QuRGVmYXVsdFVwICk7Ci0gICAgICAgIHRoaXMudXBkYXRlTWF0cml4KCk7
CisgICAgICAgICAgICAvLyBjb21wdXRlIHRoZSBzbG93bHktdmFyeWluZyBub3JtYWwgYW5kIGJp
bm9ybWFsIHZlY3RvcnMgZm9yIGVhY2ggc2VnbWVudCBvbiB0aGUgY3VydmUKIAotICAgICAgICB0
aGlzLnRhcmdldCA9IG5ldyBPYmplY3QzRCgpOworICAgICAgICAgICAgZm9yICggaSA9IDE7IGkg
PD0gc2VnbWVudHM7IGkgKysgKSB7CiAKLSAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KCB0
aGlzLCAncG93ZXInLCB7Ci0gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgICAgICBub3JtYWxzWyBpIF0gPSBub3JtYWxzWyBpIC0gMSBdLmNsb25lKCk7CiAKLSAgICAg
ICAgICAgICAgICAvLyBpbnRlbnNpdHkgPSBwb3dlciBwZXIgc29saWQgYW5nbGUuCi0gICAgICAg
ICAgICAgICAgLy8gcmVmOiBlcXVhdGlvbiAoMTcpIGZyb20gaHR0cHM6Ly9zZWJsYWdhcmRlLmZp
bGVzLndvcmRwcmVzcy5jb20vMjAxNS8wNy9jb3Vyc2Vfbm90ZXNfbW92aW5nX2Zyb3N0Yml0ZV90
b19wYnJfdjMyLnBkZgotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmludGVuc2l0eSAqIE1h
dGguUEk7CisgICAgICAgICAgICAgICAgYmlub3JtYWxzWyBpIF0gPSBiaW5vcm1hbHNbIGkgLSAx
IF0uY2xvbmUoKTsKIAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHNldDogZnVuY3Rpb24g
KCBwb3dlciApIHsKKyAgICAgICAgICAgICAgICB2ZWMuY3Jvc3NWZWN0b3JzKCB0YW5nZW50c1sg
aSAtIDEgXSwgdGFuZ2VudHNbIGkgXSApOwogCi0gICAgICAgICAgICAgICAgLy8gaW50ZW5zaXR5
ID0gcG93ZXIgcGVyIHNvbGlkIGFuZ2xlLgotICAgICAgICAgICAgICAgIC8vIHJlZjogZXF1YXRp
b24gKDE3KSBmcm9tIGh0dHBzOi8vc2VibGFnYXJkZS5maWxlcy53b3JkcHJlc3MuY29tLzIwMTUv
MDcvY291cnNlX25vdGVzX21vdmluZ19mcm9zdGJpdGVfdG9fcGJyX3YzMi5wZGYKLSAgICAgICAg
ICAgICAgICB0aGlzLmludGVuc2l0eSA9IHBvd2VyIC8gTWF0aC5QSTsKKyAgICAgICAgICAgICAg
ICBpZiAoIHZlYy5sZW5ndGgoKSA+IE51bWJlci5FUFNJTE9OICkgewogCi0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gKTsKKyAgICAgICAgICAgICAgICAgICAgdmVjLm5vcm1hbGl6ZSgpOwogCi0g
ICAgICAgIHRoaXMuZGlzdGFuY2UgPSAoIGRpc3RhbmNlICE9PSB1bmRlZmluZWQgKSA/IGRpc3Rh
bmNlIDogMDsKLSAgICAgICAgdGhpcy5hbmdsZSA9ICggYW5nbGUgIT09IHVuZGVmaW5lZCApID8g
YW5nbGUgOiBNYXRoLlBJIC8gMzsKLSAgICAgICAgdGhpcy5wZW51bWJyYSA9ICggcGVudW1icmEg
IT09IHVuZGVmaW5lZCApID8gcGVudW1icmEgOiAwOwotICAgICAgICB0aGlzLmRlY2F5ID0gKCBk
ZWNheSAhPT0gdW5kZWZpbmVkICkgPyBkZWNheSA6IDE7ICAgLy8gZm9yIHBoeXNpY2FsbHkgY29y
cmVjdCBsaWdodHMsIHNob3VsZCBiZSAyLgorICAgICAgICAgICAgICAgICAgICB0aGV0YSA9IE1h
dGguYWNvcyggX01hdGguY2xhbXAoIHRhbmdlbnRzWyBpIC0gMSBdLmRvdCggdGFuZ2VudHNbIGkg
XSApLCAtIDEsIDEgKSApOyAvLyBjbGFtcCBmb3IgZmxvYXRpbmcgcHQgZXJyb3JzCiAKLSAgICAg
ICAgdGhpcy5zaGFkb3cgPSBuZXcgU3BvdExpZ2h0U2hhZG93KCk7CisgICAgICAgICAgICAgICAg
ICAgIG5vcm1hbHNbIGkgXS5hcHBseU1hdHJpeDQoIG1hdC5tYWtlUm90YXRpb25BeGlzKCB2ZWMs
IHRoZXRhICkgKTsKIAotICAgIH0KKyAgICAgICAgICAgICAgICB9CiAKLSAgICBTcG90TGlnaHQu
cHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggTGlnaHQucHJvdG90eXBl
ICksIHsKKyAgICAgICAgICAgICAgICBiaW5vcm1hbHNbIGkgXS5jcm9zc1ZlY3RvcnMoIHRhbmdl
bnRzWyBpIF0sIG5vcm1hbHNbIGkgXSApOwogCi0gICAgICAgIGNvbnN0cnVjdG9yOiBTcG90TGln
aHQsCisgICAgICAgICAgICB9CiAKLSAgICAgICAgaXNTcG90TGlnaHQ6IHRydWUsCisgICAgICAg
ICAgICAvLyBpZiB0aGUgY3VydmUgaXMgY2xvc2VkLCBwb3N0cHJvY2VzcyB0aGUgdmVjdG9ycyBz
byB0aGUgZmlyc3QgYW5kIGxhc3Qgbm9ybWFsIHZlY3RvcnMgYXJlIHRoZSBzYW1lCiAKLSAgICAg
ICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisgICAgICAgICAgICBpZiAoIGNsb3NlZCA9
PT0gdHJ1ZSApIHsKIAotICAgICAgICAgICAgTGlnaHQucHJvdG90eXBlLmNvcHkuY2FsbCggdGhp
cywgc291cmNlICk7CisgICAgICAgICAgICAgICAgdGhldGEgPSBNYXRoLmFjb3MoIF9NYXRoLmNs
YW1wKCBub3JtYWxzWyAwIF0uZG90KCBub3JtYWxzWyBzZWdtZW50cyBdICksIC0gMSwgMSApICk7
CisgICAgICAgICAgICAgICAgdGhldGEgLz0gc2VnbWVudHM7CiAKLSAgICAgICAgICAgIHRoaXMu
ZGlzdGFuY2UgPSBzb3VyY2UuZGlzdGFuY2U7Ci0gICAgICAgICAgICB0aGlzLmFuZ2xlID0gc291
cmNlLmFuZ2xlOwotICAgICAgICAgICAgdGhpcy5wZW51bWJyYSA9IHNvdXJjZS5wZW51bWJyYTsK
LSAgICAgICAgICAgIHRoaXMuZGVjYXkgPSBzb3VyY2UuZGVjYXk7Ci0KLSAgICAgICAgICAgIHRo
aXMudGFyZ2V0ID0gc291cmNlLnRhcmdldC5jbG9uZSgpOwotCi0gICAgICAgICAgICB0aGlzLnNo
YWRvdyA9IHNvdXJjZS5zaGFkb3cuY2xvbmUoKTsKLQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgICAgICAgICAgICAgaWYgKCB0YW5nZW50c1sgMCBdLmRvdCggdmVjLmNyb3NzVmVjdG9y
cyggbm9ybWFsc1sgMCBdLCBub3JtYWxzWyBzZWdtZW50cyBdICkgKSA+IDAgKSB7CiAKLSAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB0aGV0YSA9IC0gdGhldGE7CiAKLSAgICB9ICk7Cisg
ICAgICAgICAgICAgICAgfQogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRw
Oi8vbXJkb29iLmNvbS8KLSAgICAgKi8KKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMTsgaSA8
PSBzZWdtZW50czsgaSArKyApIHsKIAorICAgICAgICAgICAgICAgICAgICAvLyB0d2lzdCBhIGxp
dHRsZS4uLgorICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyBpIF0uYXBwbHlNYXRyaXg0KCBt
YXQubWFrZVJvdGF0aW9uQXhpcyggdGFuZ2VudHNbIGkgXSwgdGhldGEgKiBpICkgKTsKKyAgICAg
ICAgICAgICAgICAgICAgYmlub3JtYWxzWyBpIF0uY3Jvc3NWZWN0b3JzKCB0YW5nZW50c1sgaSBd
LCBub3JtYWxzWyBpIF0gKTsKIAotICAgIGZ1bmN0aW9uIFBvaW50TGlnaHQoIGNvbG9yLCBpbnRl
bnNpdHksIGRpc3RhbmNlLCBkZWNheSApIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
TGlnaHQuY2FsbCggdGhpcywgY29sb3IsIGludGVuc2l0eSApOworICAgICAgICAgICAgfQogCi0g
ICAgICAgIHRoaXMudHlwZSA9ICdQb2ludExpZ2h0JzsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgdGFuZ2VudHM6IHRhbmdlbnRzLAorICAgICAgICAgICAgICAgIG5vcm1h
bHM6IG5vcm1hbHMsCisgICAgICAgICAgICAgICAgYmlub3JtYWxzOiBiaW5vcm1hbHMKKyAgICAg
ICAgICAgIH07CiAKLSAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCAncG93ZXIn
LCB7Ci0gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgfSwKIAotICAgICAg
ICAgICAgICAgIC8vIGludGVuc2l0eSA9IHBvd2VyIHBlciBzb2xpZCBhbmdsZS4KLSAgICAgICAg
ICAgICAgICAvLyByZWY6IGVxdWF0aW9uICgxNSkgZnJvbSBodHRwczovL3NlYmxhZ2FyZGUuZmls
ZXMud29yZHByZXNzLmNvbS8yMDE1LzA3L2NvdXJzZV9ub3Rlc19tb3ZpbmdfZnJvc3RiaXRlX3Rv
X3Bicl92MzIucGRmCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW50ZW5zaXR5ICogNCAq
IE1hdGguUEk7CisgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIH0s
Ci0gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICggcG93ZXIgKSB7CisgICAgICAgICAgICByZXR1
cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7CiAKLSAgICAgICAgICAgICAg
ICAvLyBpbnRlbnNpdHkgPSBwb3dlciBwZXIgc29saWQgYW5nbGUuCi0gICAgICAgICAgICAgICAg
Ly8gcmVmOiBlcXVhdGlvbiAoMTUpIGZyb20gaHR0cHM6Ly9zZWJsYWdhcmRlLmZpbGVzLndvcmRw
cmVzcy5jb20vMjAxNS8wNy9jb3Vyc2Vfbm90ZXNfbW92aW5nX2Zyb3N0Yml0ZV90b19wYnJfdjMy
LnBkZgotICAgICAgICAgICAgICAgIHRoaXMuaW50ZW5zaXR5ID0gcG93ZXIgLyAoIDQgKiBNYXRo
LlBJICk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSApOworICAgICAg
ICBjb3B5OiBmdW5jdGlvbiAoIHNvdXJjZSApIHsKIAotICAgICAgICB0aGlzLmRpc3RhbmNlID0g
KCBkaXN0YW5jZSAhPT0gdW5kZWZpbmVkICkgPyBkaXN0YW5jZSA6IDA7Ci0gICAgICAgIHRoaXMu
ZGVjYXkgPSAoIGRlY2F5ICE9PSB1bmRlZmluZWQgKSA/IGRlY2F5IDogMTsgICAvLyBmb3IgcGh5
c2ljYWxseSBjb3JyZWN0IGxpZ2h0cywgc2hvdWxkIGJlIDIuCisgICAgICAgICAgICB0aGlzLmFy
Y0xlbmd0aERpdmlzaW9ucyA9IHNvdXJjZS5hcmNMZW5ndGhEaXZpc2lvbnM7CiAKLSAgICAgICAg
dGhpcy5zaGFkb3cgPSBuZXcgTGlnaHRTaGFkb3coIG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSggOTAs
IDEsIDAuNSwgNTAwICkgKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgfQorICAg
ICAgICB9LAogCi0gICAgUG9pbnRMaWdodC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmpl
Y3QuY3JlYXRlKCBMaWdodC5wcm90b3R5cGUgKSwgeworICAgICAgICB0b0pTT046IGZ1bmN0aW9u
ICgpIHsKIAotICAgICAgICBjb25zdHJ1Y3RvcjogUG9pbnRMaWdodCwKKyAgICAgICAgICAgIHZh
ciBkYXRhID0geworICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7CisgICAgICAgICAgICAgICAg
ICAgIHZlcnNpb246IDQuNSwKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0N1cnZlJywKKyAg
ICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiAnQ3VydmUudG9KU09OJworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgaXNQb2ludExpZ2h0OiB0cnVlLAorICAg
ICAgICAgICAgZGF0YS5hcmNMZW5ndGhEaXZpc2lvbnMgPSB0aGlzLmFyY0xlbmd0aERpdmlzaW9u
czsKKyAgICAgICAgICAgIGRhdGEudHlwZSA9IHRoaXMudHlwZTsKIAotICAgICAgICBjb3B5OiBm
dW5jdGlvbiAoIHNvdXJjZSApIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhOwogCi0gICAgICAg
ICAgICBMaWdodC5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKKyAgICAgICAg
fSwKIAotICAgICAgICAgICAgdGhpcy5kaXN0YW5jZSA9IHNvdXJjZS5kaXN0YW5jZTsKLSAgICAg
ICAgICAgIHRoaXMuZGVjYXkgPSBzb3VyY2UuZGVjYXk7CisgICAgICAgIGZyb21KU09OOiBmdW5j
dGlvbiAoIGpzb24gKSB7CiAKLSAgICAgICAgICAgIHRoaXMuc2hhZG93ID0gc291cmNlLnNoYWRv
dy5jbG9uZSgpOworICAgICAgICAgICAgdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMgPSBqc29uLmFy
Y0xlbmd0aERpdmlzaW9uczsKIAogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKQEAgLTM0NjU1
LDE4NTcgKzM1OTE2LDIxNTggQEAKIAogICAgIH0gKTsKIAotICAgIC8qKgotICAgICAqIEBhdXRo
b3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAgICovCisgICAgZnVuY3Rpb24gRWxs
aXBzZUN1cnZlKCBhWCwgYVksIHhSYWRpdXMsIHlSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5n
bGUsIGFDbG9ja3dpc2UsIGFSb3RhdGlvbiApIHsKIAotICAgIGZ1bmN0aW9uIERpcmVjdGlvbmFs
TGlnaHRTaGFkb3coICkgeworICAgICAgICBDdXJ2ZS5jYWxsKCB0aGlzICk7CiAKLSAgICAgICAg
TGlnaHRTaGFkb3cuY2FsbCggdGhpcywgbmV3IE9ydGhvZ3JhcGhpY0NhbWVyYSggLSA1LCA1LCA1
LCAtIDUsIDAuNSwgNTAwICkgKTsKKyAgICAgICAgdGhpcy50eXBlID0gJ0VsbGlwc2VDdXJ2ZSc7
CisKKyAgICAgICAgdGhpcy5hWCA9IGFYIHx8IDA7CisgICAgICAgIHRoaXMuYVkgPSBhWSB8fCAw
OworCisgICAgICAgIHRoaXMueFJhZGl1cyA9IHhSYWRpdXMgfHwgMTsKKyAgICAgICAgdGhpcy55
UmFkaXVzID0geVJhZGl1cyB8fCAxOworCisgICAgICAgIHRoaXMuYVN0YXJ0QW5nbGUgPSBhU3Rh
cnRBbmdsZSB8fCAwOworICAgICAgICB0aGlzLmFFbmRBbmdsZSA9IGFFbmRBbmdsZSB8fCAyICog
TWF0aC5QSTsKKworICAgICAgICB0aGlzLmFDbG9ja3dpc2UgPSBhQ2xvY2t3aXNlIHx8IGZhbHNl
OworCisgICAgICAgIHRoaXMuYVJvdGF0aW9uID0gYVJvdGF0aW9uIHx8IDA7CiAKICAgICB9CiAK
LSAgICBEaXJlY3Rpb25hbExpZ2h0U2hhZG93LnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9i
amVjdC5jcmVhdGUoIExpZ2h0U2hhZG93LnByb3RvdHlwZSApLCB7CisgICAgRWxsaXBzZUN1cnZl
LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEN1cnZlLnByb3RvdHlwZSApOworICAgIEVsbGlw
c2VDdXJ2ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFbGxpcHNlQ3VydmU7CiAKLSAgICAgICAg
Y29uc3RydWN0b3I6IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cKKyAgICBFbGxpcHNlQ3VydmUucHJv
dG90eXBlLmlzRWxsaXBzZUN1cnZlID0gdHJ1ZTsKIAotICAgIH0gKTsKKyAgICBFbGxpcHNlQ3Vy
dmUucHJvdG90eXBlLmdldFBvaW50ID0gZnVuY3Rpb24gKCB0LCBvcHRpb25hbFRhcmdldCApIHsK
IAotICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0g
ICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KLSAgICAg
Ki8KKyAgICAgICAgdmFyIHBvaW50ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3IFZlY3RvcjIoKTsK
IAotICAgIGZ1bmN0aW9uIERpcmVjdGlvbmFsTGlnaHQoIGNvbG9yLCBpbnRlbnNpdHkgKSB7Cisg
ICAgICAgIHZhciB0d29QaSA9IE1hdGguUEkgKiAyOworICAgICAgICB2YXIgZGVsdGFBbmdsZSA9
IHRoaXMuYUVuZEFuZ2xlIC0gdGhpcy5hU3RhcnRBbmdsZTsKKyAgICAgICAgdmFyIHNhbWVQb2lu
dHMgPSBNYXRoLmFicyggZGVsdGFBbmdsZSApIDwgTnVtYmVyLkVQU0lMT047CiAKLSAgICAgICAg
TGlnaHQuY2FsbCggdGhpcywgY29sb3IsIGludGVuc2l0eSApOworICAgICAgICAvLyBlbnN1cmVz
IHRoYXQgZGVsdGFBbmdsZSBpcyAwIC4uIDIgUEkKKyAgICAgICAgd2hpbGUgKCBkZWx0YUFuZ2xl
IDwgMCApIGRlbHRhQW5nbGUgKz0gdHdvUGk7CisgICAgICAgIHdoaWxlICggZGVsdGFBbmdsZSA+
IHR3b1BpICkgZGVsdGFBbmdsZSAtPSB0d29QaTsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnRGly
ZWN0aW9uYWxMaWdodCc7CisgICAgICAgIGlmICggZGVsdGFBbmdsZSA8IE51bWJlci5FUFNJTE9O
ICkgewogCi0gICAgICAgIHRoaXMucG9zaXRpb24uY29weSggT2JqZWN0M0QuRGVmYXVsdFVwICk7
Ci0gICAgICAgIHRoaXMudXBkYXRlTWF0cml4KCk7CisgICAgICAgICAgICBpZiAoIHNhbWVQb2lu
dHMgKSB7CiAKLSAgICAgICAgdGhpcy50YXJnZXQgPSBuZXcgT2JqZWN0M0QoKTsKKyAgICAgICAg
ICAgICAgICBkZWx0YUFuZ2xlID0gMDsKIAotICAgICAgICB0aGlzLnNoYWRvdyA9IG5ldyBEaXJl
Y3Rpb25hbExpZ2h0U2hhZG93KCk7CisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgfQorICAg
ICAgICAgICAgICAgIGRlbHRhQW5nbGUgPSB0d29QaTsKIAotICAgIERpcmVjdGlvbmFsTGlnaHQu
cHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggTGlnaHQucHJvdG90eXBl
ICksIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBjb25zdHJ1Y3RvcjogRGlyZWN0aW9uYWxM
aWdodCwKKyAgICAgICAgfQogCi0gICAgICAgIGlzRGlyZWN0aW9uYWxMaWdodDogdHJ1ZSwKKyAg
ICAgICAgaWYgKCB0aGlzLmFDbG9ja3dpc2UgPT09IHRydWUgJiYgISBzYW1lUG9pbnRzICkgewog
Ci0gICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkgeworICAgICAgICAgICAgaWYgKCBk
ZWx0YUFuZ2xlID09PSB0d29QaSApIHsKIAotICAgICAgICAgICAgTGlnaHQucHJvdG90eXBlLmNv
cHkuY2FsbCggdGhpcywgc291cmNlICk7CisgICAgICAgICAgICAgICAgZGVsdGFBbmdsZSA9IC0g
dHdvUGk7CiAKLSAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gc291cmNlLnRhcmdldC5jbG9uZSgp
OworICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgdGhpcy5zaGFkb3cgPSBzb3Vy
Y2Uuc2hhZG93LmNsb25lKCk7CisgICAgICAgICAgICAgICAgZGVsdGFBbmdsZSA9IGRlbHRhQW5n
bGUgLSB0d29QaTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CiAK
ICAgICAgICAgfQogCi0gICAgfSApOworICAgICAgICB2YXIgYW5nbGUgPSB0aGlzLmFTdGFydEFu
Z2xlICsgdCAqIGRlbHRhQW5nbGU7CisgICAgICAgIHZhciB4ID0gdGhpcy5hWCArIHRoaXMueFJh
ZGl1cyAqIE1hdGguY29zKCBhbmdsZSApOworICAgICAgICB2YXIgeSA9IHRoaXMuYVkgKyB0aGlz
LnlSYWRpdXMgKiBNYXRoLnNpbiggYW5nbGUgKTsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3Ig
bXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAgICovCisgICAgICAgIGlmICggdGhpcy5h
Um90YXRpb24gIT09IDAgKSB7CiAKLSAgICBmdW5jdGlvbiBBbWJpZW50TGlnaHQoIGNvbG9yLCBp
bnRlbnNpdHkgKSB7CisgICAgICAgICAgICB2YXIgY29zID0gTWF0aC5jb3MoIHRoaXMuYVJvdGF0
aW9uICk7CisgICAgICAgICAgICB2YXIgc2luID0gTWF0aC5zaW4oIHRoaXMuYVJvdGF0aW9uICk7
CiAKLSAgICAgICAgTGlnaHQuY2FsbCggdGhpcywgY29sb3IsIGludGVuc2l0eSApOworICAgICAg
ICAgICAgdmFyIHR4ID0geCAtIHRoaXMuYVg7CisgICAgICAgICAgICB2YXIgdHkgPSB5IC0gdGhp
cy5hWTsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnQW1iaWVudExpZ2h0JzsKKyAgICAgICAgICAg
IC8vIFJvdGF0ZSB0aGUgcG9pbnQgYWJvdXQgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZS4KKyAg
ICAgICAgICAgIHggPSB0eCAqIGNvcyAtIHR5ICogc2luICsgdGhpcy5hWDsKKyAgICAgICAgICAg
IHkgPSB0eCAqIHNpbiArIHR5ICogY29zICsgdGhpcy5hWTsKIAotICAgICAgICB0aGlzLmNhc3RT
aGFkb3cgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KIAotICAgIH0KKyAgICAgICAgcmV0dXJuIHBv
aW50LnNldCggeCwgeSApOwogCi0gICAgQW1iaWVudExpZ2h0LnByb3RvdHlwZSA9IE9iamVjdC5h
c3NpZ24oIE9iamVjdC5jcmVhdGUoIExpZ2h0LnByb3RvdHlwZSApLCB7CisgICAgfTsKIAotICAg
ICAgICBjb25zdHJ1Y3RvcjogQW1iaWVudExpZ2h0LAorICAgIEVsbGlwc2VDdXJ2ZS5wcm90b3R5
cGUuY29weSA9IGZ1bmN0aW9uICggc291cmNlICkgewogCi0gICAgICAgIGlzQW1iaWVudExpZ2h0
OiB0cnVlCisgICAgICAgIEN1cnZlLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSAp
OwogCi0gICAgfSApOworICAgICAgICB0aGlzLmFYID0gc291cmNlLmFYOworICAgICAgICB0aGlz
LmFZID0gc291cmNlLmFZOwogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBhYmVsbmF0aW9uIC8g
aHR0cDovL2dpdGh1Yi5jb20vYWJlbG5hdGlvbgotICAgICAqLworICAgICAgICB0aGlzLnhSYWRp
dXMgPSBzb3VyY2UueFJhZGl1czsKKyAgICAgICAgdGhpcy55UmFkaXVzID0gc291cmNlLnlSYWRp
dXM7CiAKLSAgICBmdW5jdGlvbiBSZWN0QXJlYUxpZ2h0KCBjb2xvciwgaW50ZW5zaXR5LCB3aWR0
aCwgaGVpZ2h0ICkgeworICAgICAgICB0aGlzLmFTdGFydEFuZ2xlID0gc291cmNlLmFTdGFydEFu
Z2xlOworICAgICAgICB0aGlzLmFFbmRBbmdsZSA9IHNvdXJjZS5hRW5kQW5nbGU7CiAKLSAgICAg
ICAgTGlnaHQuY2FsbCggdGhpcywgY29sb3IsIGludGVuc2l0eSApOworICAgICAgICB0aGlzLmFD
bG9ja3dpc2UgPSBzb3VyY2UuYUNsb2Nrd2lzZTsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnUmVj
dEFyZWFMaWdodCc7CisgICAgICAgIHRoaXMuYVJvdGF0aW9uID0gc291cmNlLmFSb3RhdGlvbjsK
IAotICAgICAgICB0aGlzLndpZHRoID0gKCB3aWR0aCAhPT0gdW5kZWZpbmVkICkgPyB3aWR0aCA6
IDEwOwotICAgICAgICB0aGlzLmhlaWdodCA9ICggaGVpZ2h0ICE9PSB1bmRlZmluZWQgKSA/IGhl
aWdodCA6IDEwOworICAgICAgICByZXR1cm4gdGhpczsKIAotICAgIH0KKyAgICB9OwogCi0gICAg
UmVjdEFyZWFMaWdodC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBM
aWdodC5wcm90b3R5cGUgKSwgewogCi0gICAgICAgIGNvbnN0cnVjdG9yOiBSZWN0QXJlYUxpZ2h0
LAorICAgIEVsbGlwc2VDdXJ2ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgewogCi0g
ICAgICAgIGlzUmVjdEFyZWFMaWdodDogdHJ1ZSwKKyAgICAgICAgdmFyIGRhdGEgPSBDdXJ2ZS5w
cm90b3R5cGUudG9KU09OLmNhbGwoIHRoaXMgKTsKIAotICAgICAgICBjb3B5OiBmdW5jdGlvbiAo
IHNvdXJjZSApIHsKKyAgICAgICAgZGF0YS5hWCA9IHRoaXMuYVg7CisgICAgICAgIGRhdGEuYVkg
PSB0aGlzLmFZOwogCi0gICAgICAgICAgICBMaWdodC5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlz
LCBzb3VyY2UgKTsKKyAgICAgICAgZGF0YS54UmFkaXVzID0gdGhpcy54UmFkaXVzOworICAgICAg
ICBkYXRhLnlSYWRpdXMgPSB0aGlzLnlSYWRpdXM7CiAKLSAgICAgICAgICAgIHRoaXMud2lkdGgg
PSBzb3VyY2Uud2lkdGg7Ci0gICAgICAgICAgICB0aGlzLmhlaWdodCA9IHNvdXJjZS5oZWlnaHQ7
CisgICAgICAgIGRhdGEuYVN0YXJ0QW5nbGUgPSB0aGlzLmFTdGFydEFuZ2xlOworICAgICAgICBk
YXRhLmFFbmRBbmdsZSA9IHRoaXMuYUVuZEFuZ2xlOwogCi0gICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgZGF0YS5hQ2xvY2t3aXNlID0gdGhpcy5hQ2xvY2t3aXNlOwogCi0gICAgICAg
IH0sCisgICAgICAgIGRhdGEuYVJvdGF0aW9uID0gdGhpcy5hUm90YXRpb247CiAKLSAgICAgICAg
dG9KU09OOiBmdW5jdGlvbiAoIG1ldGEgKSB7CisgICAgICAgIHJldHVybiBkYXRhOwogCi0gICAg
ICAgICAgICB2YXIgZGF0YSA9IExpZ2h0LnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcywgbWV0
YSApOworICAgIH07CiAKLSAgICAgICAgICAgIGRhdGEub2JqZWN0LndpZHRoID0gdGhpcy53aWR0
aDsKLSAgICAgICAgICAgIGRhdGEub2JqZWN0LmhlaWdodCA9IHRoaXMuaGVpZ2h0OworICAgIEVs
bGlwc2VDdXJ2ZS5wcm90b3R5cGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoIGpzb24gKSB7CiAKLSAg
ICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICBDdXJ2ZS5wcm90b3R5cGUuZnJvbUpTT04u
Y2FsbCggdGhpcywganNvbiApOwogCi0gICAgICAgIH0KKyAgICAgICAgdGhpcy5hWCA9IGpzb24u
YVg7CisgICAgICAgIHRoaXMuYVkgPSBqc29uLmFZOwogCi0gICAgfSApOworICAgICAgICB0aGlz
LnhSYWRpdXMgPSBqc29uLnhSYWRpdXM7CisgICAgICAgIHRoaXMueVJhZGl1cyA9IGpzb24ueVJh
ZGl1czsKIAotICAgIC8qKgotICAgICAqCi0gICAgICogQSBUcmFjayB0aGF0IGludGVycG9sYXRl
cyBTdHJpbmdzCi0gICAgICoKLSAgICAgKgotICAgICAqIEBhdXRob3IgQmVuIEhvdXN0b24gLyBo
dHRwOi8vY2xhcmEuaW8vCi0gICAgICogQGF1dGhvciBEYXZpZCBTYXJubyAvIGh0dHA6Ly9saWdo
dGhhdXMudXMvCi0gICAgICogQGF1dGhvciB0c2NodwotICAgICAqLworICAgICAgICB0aGlzLmFT
dGFydEFuZ2xlID0ganNvbi5hU3RhcnRBbmdsZTsKKyAgICAgICAgdGhpcy5hRW5kQW5nbGUgPSBq
c29uLmFFbmRBbmdsZTsKIAotICAgIGZ1bmN0aW9uIFN0cmluZ0tleWZyYW1lVHJhY2soIG5hbWUs
IHRpbWVzLCB2YWx1ZXMsIGludGVycG9sYXRpb24gKSB7CisgICAgICAgIHRoaXMuYUNsb2Nrd2lz
ZSA9IGpzb24uYUNsb2Nrd2lzZTsKIAotICAgICAgICBLZXlmcmFtZVRyYWNrLmNhbGwoIHRoaXMs
IG5hbWUsIHRpbWVzLCB2YWx1ZXMsIGludGVycG9sYXRpb24gKTsKKyAgICAgICAgdGhpcy5hUm90
YXRpb24gPSBqc29uLmFSb3RhdGlvbjsKIAotICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CiAK
LSAgICBTdHJpbmdLZXlmcmFtZVRyYWNrLnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVj
dC5jcmVhdGUoIEtleWZyYW1lVHJhY2sucHJvdG90eXBlICksIHsKKyAgICB9OwogCi0gICAgICAg
IGNvbnN0cnVjdG9yOiBTdHJpbmdLZXlmcmFtZVRyYWNrLAorICAgIGZ1bmN0aW9uIEFyY0N1cnZl
KCBhWCwgYVksIGFSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UgKSB7
CiAKLSAgICAgICAgVmFsdWVUeXBlTmFtZTogJ3N0cmluZycsCi0gICAgICAgIFZhbHVlQnVmZmVy
VHlwZTogQXJyYXksCisgICAgICAgIEVsbGlwc2VDdXJ2ZS5jYWxsKCB0aGlzLCBhWCwgYVksIGFS
YWRpdXMsIGFSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UgKTsKIAot
ICAgICAgICBEZWZhdWx0SW50ZXJwb2xhdGlvbjogSW50ZXJwb2xhdGVEaXNjcmV0ZSwKKyAgICAg
ICAgdGhpcy50eXBlID0gJ0FyY0N1cnZlJzsKIAotICAgICAgICBJbnRlcnBvbGFudEZhY3RvcnlN
ZXRob2RMaW5lYXI6IHVuZGVmaW5lZCwKKyAgICB9CiAKLSAgICAgICAgSW50ZXJwb2xhbnRGYWN0
b3J5TWV0aG9kU21vb3RoOiB1bmRlZmluZWQKKyAgICBBcmNDdXJ2ZS5wcm90b3R5cGUgPSBPYmpl
Y3QuY3JlYXRlKCBFbGxpcHNlQ3VydmUucHJvdG90eXBlICk7CisgICAgQXJjQ3VydmUucHJvdG90
eXBlLmNvbnN0cnVjdG9yID0gQXJjQ3VydmU7CiAKLSAgICB9ICk7CisgICAgQXJjQ3VydmUucHJv
dG90eXBlLmlzQXJjQ3VydmUgPSB0cnVlOwogCiAgICAgLyoqCisgICAgICogQGF1dGhvciB6ejg1
IGh0dHBzOi8vZ2l0aHViLmNvbS96ejg1CiAgICAgICoKLSAgICAgKiBBIFRyYWNrIG9mIEJvb2xl
YW4ga2V5ZnJhbWUgdmFsdWVzLgotICAgICAqCisgICAgICogQ2VudHJpcGV0YWwgQ2F0bXVsbFJv
bSBDdXJ2ZSAtIHdoaWNoIGlzIHVzZWZ1bCBmb3IgYXZvaWRpbmcKKyAgICAgKiBjdXNwcyBhbmQg
c2VsZi1pbnRlcnNlY3Rpb25zIGluIG5vbi11bmlmb3JtIGNhdG11bGwgcm9tIGN1cnZlcy4KKyAg
ICAgKiBodHRwOi8vd3d3LmNlbXl1a3NlbC5jb20vcmVzZWFyY2gvY2F0bXVsbHJvbV9wYXJhbS9j
YXRtdWxscm9tLnBkZgogICAgICAqCi0gICAgICogQGF1dGhvciBCZW4gSG91c3RvbiAvIGh0dHA6
Ly9jbGFyYS5pby8KLSAgICAgKiBAYXV0aG9yIERhdmlkIFNhcm5vIC8gaHR0cDovL2xpZ2h0aGF1
cy51cy8KLSAgICAgKiBAYXV0aG9yIHRzY2h3CisgICAgICogY3VydmUudHlwZSBhY2NlcHRzIGNl
bnRyaXBldGFsKGRlZmF1bHQpLCBjaG9yZGFsIGFuZCBjYXRtdWxscm9tCisgICAgICogY3VydmUu
dGVuc2lvbiBpcyB1c2VkIGZvciBjYXRtdWxscm9tIHdoaWNoIGRlZmF1bHRzIHRvIDAuNQogICAg
ICAqLwogCi0gICAgZnVuY3Rpb24gQm9vbGVhbktleWZyYW1lVHJhY2soIG5hbWUsIHRpbWVzLCB2
YWx1ZXMgKSB7Ci0KLSAgICAgICAgS2V5ZnJhbWVUcmFjay5jYWxsKCB0aGlzLCBuYW1lLCB0aW1l
cywgdmFsdWVzICk7CiAKLSAgICB9CisgICAgLyoKKyAgICBCYXNlZCBvbiBhbiBvcHRpbWl6ZWQg
YysrIHNvbHV0aW9uIGluCisgICAgIC0gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9u
cy85NDg5NzM2L2NhdG11bGwtcm9tLWN1cnZlLXdpdGgtbm8tY3VzcHMtYW5kLW5vLXNlbGYtaW50
ZXJzZWN0aW9ucy8KKyAgICAgLSBodHRwOi8vaWRlb25lLmNvbS9Ob0ViVk0KIAotICAgIEJvb2xl
YW5LZXlmcmFtZVRyYWNrLnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUo
IEtleWZyYW1lVHJhY2sucHJvdG90eXBlICksIHsKKyAgICBUaGlzIEN1YmljUG9seSBjbGFzcyBj
b3VsZCBiZSB1c2VkIGZvciByZXVzaW5nIHNvbWUgdmFyaWFibGVzIGFuZCBjYWxjdWxhdGlvbnMs
CisgICAgYnV0IGZvciB0aHJlZS5qcyBjdXJ2ZSB1c2UsIGl0IGNvdWxkIGJlIHBvc3NpYmxlIGlu
bGluZWQgYW5kIGZsYXR0ZW4gaW50byBhIHNpbmdsZSBmdW5jdGlvbiBjYWxsCisgICAgd2hpY2gg
Y2FuIGJlIHBsYWNlZCBpbiBDdXJ2ZVV0aWxzLgorICAgICovCiAKLSAgICAgICAgY29uc3RydWN0
b3I6IEJvb2xlYW5LZXlmcmFtZVRyYWNrLAorICAgIGZ1bmN0aW9uIEN1YmljUG9seSgpIHsKIAot
ICAgICAgICBWYWx1ZVR5cGVOYW1lOiAnYm9vbCcsCi0gICAgICAgIFZhbHVlQnVmZmVyVHlwZTog
QXJyYXksCisgICAgICAgIHZhciBjMCA9IDAsIGMxID0gMCwgYzIgPSAwLCBjMyA9IDA7CiAKLSAg
ICAgICAgRGVmYXVsdEludGVycG9sYXRpb246IEludGVycG9sYXRlRGlzY3JldGUsCisgICAgICAg
IC8qCisgICAgICAgICAqIENvbXB1dGUgY29lZmZpY2llbnRzIGZvciBhIGN1YmljIHBvbHlub21p
YWwKKyAgICAgICAgICogICBwKHMpID0gYzAgKyBjMSpzICsgYzIqc14yICsgYzMqc14zCisgICAg
ICAgICAqIHN1Y2ggdGhhdAorICAgICAgICAgKiAgIHAoMCkgPSB4MCwgcCgxKSA9IHgxCisgICAg
ICAgICAqICBhbmQKKyAgICAgICAgICogICBwJygwKSA9IHQwLCBwJygxKSA9IHQxLgorICAgICAg
ICAgKi8KKyAgICAgICAgZnVuY3Rpb24gaW5pdCggeDAsIHgxLCB0MCwgdDEgKSB7CiAKLSAgICAg
ICAgSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOiB1bmRlZmluZWQsCi0gICAgICAgIElu
dGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDogdW5kZWZpbmVkCisgICAgICAgICAgICBjMCA9
IHgwOworICAgICAgICAgICAgYzEgPSB0MDsKKyAgICAgICAgICAgIGMyID0gLSAzICogeDAgKyAz
ICogeDEgLSAyICogdDAgLSB0MTsKKyAgICAgICAgICAgIGMzID0gMiAqIHgwIC0gMiAqIHgxICsg
dDAgKyB0MTsKIAotICAgICAgICAvLyBOb3RlOiBBY3R1YWxseSB0aGlzIHRyYWNrIGNvdWxkIGhh
dmUgYSBvcHRpbWl6ZWQgLyBjb21wcmVzc2VkCi0gICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIG9m
IGEgc2luZ2xlIHZhbHVlIGFuZCBhIGN1c3RvbSBpbnRlcnBvbGFudCB0aGF0Ci0gICAgICAgIC8v
IGNvbXB1dGVzICJmaXJzdFZhbHVlIF4gaXNPZGQoIGluZGV4ICkiLgorICAgICAgICB9CiAKLSAg
ICB9ICk7CisgICAgICAgIHJldHVybiB7CiAKLSAgICAvKioKLSAgICAgKiBBYnN0cmFjdCBiYXNl
IGNsYXNzIG9mIGludGVycG9sYW50cyBvdmVyIHBhcmFtZXRyaWMgc2FtcGxlcy4KLSAgICAgKgot
ICAgICAqIFRoZSBwYXJhbWV0ZXIgZG9tYWluIGlzIG9uZSBkaW1lbnNpb25hbCwgdHlwaWNhbGx5
IHRoZSB0aW1lIG9yIGEgcGF0aAotICAgICAqIGFsb25nIGEgY3VydmUgZGVmaW5lZCBieSB0aGUg
ZGF0YS4KLSAgICAgKgotICAgICAqIFRoZSBzYW1wbGUgdmFsdWVzIGNhbiBoYXZlIGFueSBkaW1l
bnNpb25hbGl0eSBhbmQgZGVyaXZlZCBjbGFzc2VzIG1heQotICAgICAqIGFwcGx5IHNwZWNpYWwg
aW50ZXJwcmV0YXRpb25zIHRvIHRoZSBkYXRhLgotICAgICAqCi0gICAgICogVGhpcyBjbGFzcyBw
cm92aWRlcyB0aGUgaW50ZXJ2YWwgc2VlayBpbiBhIFRlbXBsYXRlIE1ldGhvZCwgZGVmZXJyaW5n
Ci0gICAgICogdGhlIGFjdHVhbCBpbnRlcnBvbGF0aW9uIHRvIGRlcml2ZWQgY2xhc3Nlcy4KLSAg
ICAgKgotICAgICAqIFRpbWUgY29tcGxleGl0eSBpcyBPKDEpIGZvciBsaW5lYXIgYWNjZXNzIGNy
b3NzaW5nIGF0IG1vc3QgdHdvIHBvaW50cwotICAgICAqIGFuZCBPKGxvZyBOKSBmb3IgcmFuZG9t
IGFjY2Vzcywgd2hlcmUgTiBpcyB0aGUgbnVtYmVyIG9mIHBvc2l0aW9ucy4KLSAgICAgKgotICAg
ICAqIFJlZmVyZW5jZXM6Ci0gICAgICoKLSAgICAgKiAgICAgIGh0dHA6Ly93d3cub29kZXNpZ24u
Y29tL3RlbXBsYXRlLW1ldGhvZC1wYXR0ZXJuLmh0bWwKLSAgICAgKgotICAgICAqIEBhdXRob3Ig
dHNjaHcKLSAgICAgKi8KKyAgICAgICAgICAgIGluaXRDYXRtdWxsUm9tOiBmdW5jdGlvbiAoIHgw
LCB4MSwgeDIsIHgzLCB0ZW5zaW9uICkgewogCi0gICAgZnVuY3Rpb24gSW50ZXJwb2xhbnQoIHBh
cmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIg
KSB7CisgICAgICAgICAgICAgICAgaW5pdCggeDEsIHgyLCB0ZW5zaW9uICogKCB4MiAtIHgwICks
IHRlbnNpb24gKiAoIHgzIC0geDEgKSApOwogCi0gICAgICAgIHRoaXMucGFyYW1ldGVyUG9zaXRp
b25zID0gcGFyYW1ldGVyUG9zaXRpb25zOwotICAgICAgICB0aGlzLl9jYWNoZWRJbmRleCA9IDA7
CisgICAgICAgICAgICB9LAogCi0gICAgICAgIHRoaXMucmVzdWx0QnVmZmVyID0gcmVzdWx0QnVm
ZmVyICE9PSB1bmRlZmluZWQgPwotICAgICAgICAgICAgcmVzdWx0QnVmZmVyIDogbmV3IHNhbXBs
ZVZhbHVlcy5jb25zdHJ1Y3Rvciggc2FtcGxlU2l6ZSApOwotICAgICAgICB0aGlzLnNhbXBsZVZh
bHVlcyA9IHNhbXBsZVZhbHVlczsKLSAgICAgICAgdGhpcy52YWx1ZVNpemUgPSBzYW1wbGVTaXpl
OworICAgICAgICAgICAgaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOiBmdW5jdGlvbiAoIHgwLCB4
MSwgeDIsIHgzLCBkdDAsIGR0MSwgZHQyICkgewogCi0gICAgfQorICAgICAgICAgICAgICAgIC8v
IGNvbXB1dGUgdGFuZ2VudHMgd2hlbiBwYXJhbWV0ZXJpemVkIGluIFt0MSx0Ml0KKyAgICAgICAg
ICAgICAgICB2YXIgdDEgPSAoIHgxIC0geDAgKSAvIGR0MCAtICggeDIgLSB4MCApIC8gKCBkdDAg
KyBkdDEgKSArICggeDIgLSB4MSApIC8gZHQxOworICAgICAgICAgICAgICAgIHZhciB0MiA9ICgg
eDIgLSB4MSApIC8gZHQxIC0gKCB4MyAtIHgxICkgLyAoIGR0MSArIGR0MiApICsgKCB4MyAtIHgy
ICkgLyBkdDI7CiAKLSAgICBPYmplY3QuYXNzaWduKCBJbnRlcnBvbGFudC5wcm90b3R5cGUsIHsK
KyAgICAgICAgICAgICAgICAvLyByZXNjYWxlIHRhbmdlbnRzIGZvciBwYXJhbWV0cml6YXRpb24g
aW4gWzAsMV0KKyAgICAgICAgICAgICAgICB0MSAqPSBkdDE7CisgICAgICAgICAgICAgICAgdDIg
Kj0gZHQxOwogCi0gICAgICAgIGV2YWx1YXRlOiBmdW5jdGlvbiAoIHQgKSB7CisgICAgICAgICAg
ICAgICAgaW5pdCggeDEsIHgyLCB0MSwgdDIgKTsKIAotICAgICAgICAgICAgdmFyIHBwID0gdGhp
cy5wYXJhbWV0ZXJQb3NpdGlvbnMsCi0gICAgICAgICAgICAgICAgaTEgPSB0aGlzLl9jYWNoZWRJ
bmRleCwKKyAgICAgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB0MSA9IHBwWyBpMSBdLAot
ICAgICAgICAgICAgICAgIHQwID0gcHBbIGkxIC0gMSBdOworICAgICAgICAgICAgY2FsYzogZnVu
Y3Rpb24gKCB0ICkgewogCi0gICAgICAgICAgICB2YWxpZGF0ZV9pbnRlcnZhbDogeworICAgICAg
ICAgICAgICAgIHZhciB0MiA9IHQgKiB0OworICAgICAgICAgICAgICAgIHZhciB0MyA9IHQyICog
dDsKKyAgICAgICAgICAgICAgICByZXR1cm4gYzAgKyBjMSAqIHQgKyBjMiAqIHQyICsgYzMgKiB0
MzsKIAotICAgICAgICAgICAgICAgIHNlZWs6IHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgICAgICB2YXIgcmlnaHQ7CisgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAg
bGluZWFyX3NjYW46IHsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vLSBTZWUg
aHR0cDovL2pzcGVyZi5jb20vY29tcGFyaXNvbi10by11bmRlZmluZWQvMwotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8tIHNsb3dlciBjb2RlOgotICAgICAgICAgICAgICAgICAgICAgICAgLy8t
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLy0gICAgICAgICAgICAgICAgIGlmICggdCA+PSB0
MSB8fCB0MSA9PT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2Fy
ZF9zY2FuOiBpZiAoICEgKCB0IDwgdDEgKSApIHsKKyAgICAvLwogCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICggdmFyIGdpdmVVcEF0ID0gaTEgKyAyOyA7ICkgeworICAgIHZhciB0
bXAgPSBuZXcgVmVjdG9yMygpOworICAgIHZhciBweCA9IG5ldyBDdWJpY1BvbHkoKSwgcHkgPSBu
ZXcgQ3ViaWNQb2x5KCksIHB6ID0gbmV3IEN1YmljUG9seSgpOwogCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggdDEgPT09IHVuZGVmaW5lZCApIHsKKyAgICBmdW5jdGlvbiBD
YXRtdWxsUm9tQ3VydmUzKCBwb2ludHMsIGNsb3NlZCwgY3VydmVUeXBlLCB0ZW5zaW9uICkgewog
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHQgPCB0MCApIGJyZWFr
IGZvcndhcmRfc2NhbjsKKyAgICAgICAgQ3VydmUuY2FsbCggdGhpcyApOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZnRlciBlbmQKKyAgICAgICAgdGhpcy50eXBl
ID0gJ0NhdG11bGxSb21DdXJ2ZTMnOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpMSA9IHBwLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuX2NhY2hlZEluZGV4ID0gaTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5hZnRlckVuZF8oIGkxIC0gMSwgdCwgdDAgKTsKKyAgICAgICAgdGhp
cy5wb2ludHMgPSBwb2ludHMgfHwgW107CisgICAgICAgIHRoaXMuY2xvc2VkID0gY2xvc2VkIHx8
IGZhbHNlOworICAgICAgICB0aGlzLmN1cnZlVHlwZSA9IGN1cnZlVHlwZSB8fCAnY2VudHJpcGV0
YWwnOworICAgICAgICB0aGlzLnRlbnNpb24gPSB0ZW5zaW9uIHx8IDAuNTsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggaTEgPT09IGdpdmVVcEF0ICkgYnJlYWs7IC8vIHRoaXMgbG9vcAorICAg
IENhdG11bGxSb21DdXJ2ZTMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQ3VydmUucHJvdG90
eXBlICk7CisgICAgQ2F0bXVsbFJvbUN1cnZlMy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYXRt
dWxsUm9tQ3VydmUzOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQwID0gdDE7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxID0gcHBbICsrIGkxIF07CisgICAg
Q2F0bXVsbFJvbUN1cnZlMy5wcm90b3R5cGUuaXNDYXRtdWxsUm9tQ3VydmUzID0gdHJ1ZTsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHQgPCB0MSApIHsKKyAgICBDYXRt
dWxsUm9tQ3VydmUzLnByb3RvdHlwZS5nZXRQb2ludCA9IGZ1bmN0aW9uICggdCwgb3B0aW9uYWxU
YXJnZXQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGhh
dmUgYXJyaXZlZCBhdCB0aGUgc291Z2h0IGludGVydmFsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhayBzZWVrOworICAgICAgICB2YXIgcG9pbnQgPSBvcHRpb25hbFRh
cmdldCB8fCBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzOworICAgICAgICB2YXIgbCA9IHBv
aW50cy5sZW5ndGg7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIHZh
ciBwID0gKCBsIC0gKCB0aGlzLmNsb3NlZCA/IDAgOiAxICkgKSAqIHQ7CisgICAgICAgIHZhciBp
bnRQb2ludCA9IE1hdGguZmxvb3IoIHAgKTsKKyAgICAgICAgdmFyIHdlaWdodCA9IHAgLSBpbnRQ
b2ludDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgYmluYXJ5IHNl
YXJjaCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgaW5kZXgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByaWdodCA9IHBwLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhayBsaW5lYXJfc2NhbjsKKyAgICAgICAgaWYgKCB0aGlzLmNsb3NlZCApIHsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50UG9pbnQgKz0gaW50UG9pbnQgPiAw
ID8gMCA6ICggTWF0aC5mbG9vciggTWF0aC5hYnMoIGludFBvaW50ICkgLyBsICkgKyAxICkgKiBs
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICAvLy0gc2xvd2VyIGNvZGU6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLy0gICAgICAgICAgICAgICAgIGlmICggdCA8IHQwIHx8IHQwID09PSB1
bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEgKCB0ID49IHQwICkg
KSB7CisgICAgICAgIH0gZWxzZSBpZiAoIHdlaWdodCA9PT0gMCAmJiBpbnRQb2ludCA9PT0gbCAt
IDEgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb29waW5nPworICAgICAg
ICAgICAgaW50UG9pbnQgPSBsIC0gMjsKKyAgICAgICAgICAgIHdlaWdodCA9IDE7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgdDFnbG9iYWwgPSBwcFsgMSBdOworICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHQgPCB0MWdsb2JhbCApIHsKKyAg
ICAgICAgdmFyIHAwLCBwMSwgcDIsIHAzOyAvLyA0IHBvaW50cwogCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGkxID0gMjsgLy8gKyAxLCB1c2luZyB0aGUgc2NhbiBmb3IgdGhlIGRl
dGFpbHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDAgPSB0MWdsb2JhbDsKKyAg
ICAgICAgaWYgKCB0aGlzLmNsb3NlZCB8fCBpbnRQb2ludCA+IDAgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBwMCA9IHBvaW50c1sgKCBpbnRQb2ludCAt
IDEgKSAlIGwgXTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmVhciByZXZl
cnNlIHNjYW4KKyAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIHZhciBnaXZlVXBBdCA9IGkxIC0gMjsgOyApIHsKKyAgICAgICAgICAgIC8vIGV4dHJh
cG9sYXRlIGZpcnN0IHBvaW50CisgICAgICAgICAgICB0bXAuc3ViVmVjdG9ycyggcG9pbnRzWyAw
IF0sIHBvaW50c1sgMSBdICkuYWRkKCBwb2ludHNbIDAgXSApOworICAgICAgICAgICAgcDAgPSB0
bXA7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0MCA9PT0gdW5kZWZp
bmVkICkgeworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGJlZm9yZSBzdGFydAorICAgICAgICBwMSA9IHBvaW50c1sgaW50UG9pbnQgJSBsIF07Cisg
ICAgICAgIHAyID0gcG9pbnRzWyAoIGludFBvaW50ICsgMSApICUgbCBdOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRJbmRleCA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5iZWZvcmVTdGFydF8oIDAs
IHQsIHQxICk7CisgICAgICAgIGlmICggdGhpcy5jbG9zZWQgfHwgaW50UG9pbnQgKyAyIDwgbCAp
IHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBwMyA9
IHBvaW50c1sgKCBpbnRQb2ludCArIDIgKSAlIGwgXTsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGkxID09PSBnaXZlVXBBdCApIGJyZWFrOyAvLyB0aGlzIGxvb3AKKyAg
ICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHQw
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MCA9IHBwWyAtLSBpMSAtIDEgXTsK
KyAgICAgICAgICAgIC8vIGV4dHJhcG9sYXRlIGxhc3QgcG9pbnQKKyAgICAgICAgICAgIHRtcC5z
dWJWZWN0b3JzKCBwb2ludHNbIGwgLSAxIF0sIHBvaW50c1sgbCAtIDIgXSApLmFkZCggcG9pbnRz
WyBsIC0gMSBdICk7CisgICAgICAgICAgICBwMyA9IHRtcDsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHQgPj0gdDAgKSB7CisgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhcnJpdmVkIGF0IHRoZSBzb3VnaHQg
aW50ZXJ2YWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHNlZWs7
CisgICAgICAgIGlmICggdGhpcy5jdXJ2ZVR5cGUgPT09ICdjZW50cmlwZXRhbCcgfHwgdGhpcy5j
dXJ2ZVR5cGUgPT09ICdjaG9yZGFsJyApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBpbml0IENlbnRyaXBldGFsIC8gQ2hvcmRhbCBDYXRtdWxs
LVJvbQorICAgICAgICAgICAgdmFyIHBvdyA9IHRoaXMuY3VydmVUeXBlID09PSAnY2hvcmRhbCcg
PyAwLjUgOiAwLjI1OworICAgICAgICAgICAgdmFyIGR0MCA9IE1hdGgucG93KCBwMC5kaXN0YW5j
ZVRvU3F1YXJlZCggcDEgKSwgcG93ICk7CisgICAgICAgICAgICB2YXIgZHQxID0gTWF0aC5wb3co
IHAxLmRpc3RhbmNlVG9TcXVhcmVkKCBwMiApLCBwb3cgKTsKKyAgICAgICAgICAgIHZhciBkdDIg
PSBNYXRoLnBvdyggcDIuZGlzdGFuY2VUb1NxdWFyZWQoIHAzICksIHBvdyApOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gc2FmZXR5IGNoZWNrIGZvciBy
ZXBlYXRlZCBwb2ludHMKKyAgICAgICAgICAgIGlmICggZHQxIDwgMWUtNCApIGR0MSA9IDEuMDsK
KyAgICAgICAgICAgIGlmICggZHQwIDwgMWUtNCApIGR0MCA9IGR0MTsKKyAgICAgICAgICAgIGlm
ICggZHQyIDwgMWUtNCApIGR0MiA9IGR0MTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHByZXBhcmUgYmluYXJ5IHNlYXJjaCBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBpbmRleAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gaTE7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaTEgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxp
bmVhcl9zY2FuOworICAgICAgICAgICAgcHguaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKCBwMC54
LCBwMS54LCBwMi54LCBwMy54LCBkdDAsIGR0MSwgZHQyICk7CisgICAgICAgICAgICBweS5pbml0
Tm9udW5pZm9ybUNhdG11bGxSb20oIHAwLnksIHAxLnksIHAyLnksIHAzLnksIGR0MCwgZHQxLCBk
dDIgKTsKKyAgICAgICAgICAgIHB6LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbSggcDAueiwgcDEu
eiwgcDIueiwgcDMueiwgZHQwLCBkdDEsIGR0MiApOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAoIHRoaXMuY3VydmVUeXBlID09PSAnY2F0bXVsbHJvbScg
KSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBpbnRlcnZhbCBpcyB2YWxpZAor
ICAgICAgICAgICAgcHguaW5pdENhdG11bGxSb20oIHAwLngsIHAxLngsIHAyLngsIHAzLngsIHRo
aXMudGVuc2lvbiApOworICAgICAgICAgICAgcHkuaW5pdENhdG11bGxSb20oIHAwLnksIHAxLnks
IHAyLnksIHAzLnksIHRoaXMudGVuc2lvbiApOworICAgICAgICAgICAgcHouaW5pdENhdG11bGxS
b20oIHAwLnosIHAxLnosIHAyLnosIHAzLnosIHRoaXMudGVuc2lvbiApOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhayB2YWxpZGF0ZV9pbnRlcnZhbDsKKyAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgICAgIH0gLy8gbGluZWFyIHNjYW4KKyAgICAgICAgcG9pbnQuc2V0KAorICAg
ICAgICAgICAgcHguY2FsYyggd2VpZ2h0ICksCisgICAgICAgICAgICBweS5jYWxjKCB3ZWlnaHQg
KSwKKyAgICAgICAgICAgIHB6LmNhbGMoIHdlaWdodCApCisgICAgICAgICk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgLy8gYmluYXJ5IHNlYXJjaAorICAgICAgICByZXR1cm4gcG9pbnQ7CiAKLSAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpMSA8IHJpZ2h0ICkgeworICAgIH07CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBtaWQgPSAoIGkxICsgcmlnaHQgKSA+Pj4gMTsKKyAgICBD
YXRtdWxsUm9tQ3VydmUzLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCBzb3VyY2UgKSB7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdCA8IHBwWyBtaWQgXSApIHsKKyAgICAgICAg
Q3VydmUucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByaWdodCA9IG1pZDsKKyAgICAgICAgdGhpcy5wb2ludHMgPSBbXTsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yICggdmFyIGkg
PSAwLCBsID0gc291cmNlLnBvaW50cy5sZW5ndGg7IGkgPCBsOyBpICsrICkgewogCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaTEgPSBtaWQgKyAxOworICAgICAgICAgICAgdmFyIHBvaW50
ID0gc291cmNlLnBvaW50c1sgaSBdOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBwb2ludC5jbG9uZSgpICk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgdDEgPSBwcFsgaTEg
XTsKLSAgICAgICAgICAgICAgICAgICAgdDAgPSBwcFsgaTEgLSAxIF07CisgICAgICAgIHRoaXMu
Y2xvc2VkID0gc291cmNlLmNsb3NlZDsKKyAgICAgICAgdGhpcy5jdXJ2ZVR5cGUgPSBzb3VyY2Uu
Y3VydmVUeXBlOworICAgICAgICB0aGlzLnRlbnNpb24gPSBzb3VyY2UudGVuc2lvbjsKIAotICAg
ICAgICAgICAgICAgICAgICAvLyBjaGVjayBib3VuZGFyeSBjYXNlcywgYWdhaW4KKyAgICAgICAg
cmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB0MCA9PT0gdW5kZWZpbmVk
ICkgeworICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZEluZGV4
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZVN0YXJ0Xygg
MCwgdCwgdDEgKTsKKyAgICBDYXRtdWxsUm9tQ3VydmUzLnByb3RvdHlwZS50b0pTT04gPSBmdW5j
dGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICB2YXIgZGF0YSA9IEN1
cnZlLnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcyApOwogCi0gICAgICAgICAgICAgICAgICAg
IGlmICggdDEgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgZGF0YS5wb2ludHMgPSBbXTsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgaTEgPSBwcC5sZW5ndGg7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9jYWNoZWRJbmRleCA9IGkxOwotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuYWZ0ZXJFbmRfKCBpMSAtIDEsIHQwLCB0ICk7CisgICAgICAgIGZvciAoIHZh
ciBpID0gMCwgbCA9IHRoaXMucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHBvaW50ID0gdGhpcy5wb2ludHNbIGkg
XTsKKyAgICAgICAgICAgIGRhdGEucG9pbnRzLnB1c2goIHBvaW50LnRvQXJyYXkoKSApOwogCi0g
ICAgICAgICAgICAgICAgfSAvLyBzZWVrCisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHRo
aXMuX2NhY2hlZEluZGV4ID0gaTE7CisgICAgICAgIGRhdGEuY2xvc2VkID0gdGhpcy5jbG9zZWQ7
CisgICAgICAgIGRhdGEuY3VydmVUeXBlID0gdGhpcy5jdXJ2ZVR5cGU7CisgICAgICAgIGRhdGEu
dGVuc2lvbiA9IHRoaXMudGVuc2lvbjsKIAotICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxD
aGFuZ2VkXyggaTEsIHQwLCB0MSApOworICAgICAgICByZXR1cm4gZGF0YTsKIAotICAgICAgICAg
ICAgfSAvLyB2YWxpZGF0ZV9pbnRlcnZhbAorICAgIH07CiAKLSAgICAgICAgICAgIHJldHVybiB0
aGlzLmludGVycG9sYXRlXyggaTEsIHQwLCB0LCB0MSApOworICAgIENhdG11bGxSb21DdXJ2ZTMu
cHJvdG90eXBlLmZyb21KU09OID0gZnVuY3Rpb24gKCBqc29uICkgewogCi0gICAgICAgIH0sCisg
ICAgICAgIEN1cnZlLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKCB0aGlzLCBqc29uICk7CiAKLSAg
ICAgICAgc2V0dGluZ3M6IG51bGwsIC8vIG9wdGlvbmFsLCBzdWJjbGFzcy1zcGVjaWZpYyBzZXR0
aW5ncyBzdHJ1Y3R1cmUKLSAgICAgICAgLy8gTm90ZTogVGhlIGluZGlyZWN0aW9uIGFsbG93cyBj
ZW50cmFsIGNvbnRyb2wgb2YgbWFueSBpbnRlcnBvbGFudHMuCisgICAgICAgIHRoaXMucG9pbnRz
ID0gW107CiAKLSAgICAgICAgLy8gLS0tIFByb3RlY3RlZCBpbnRlcmZhY2UKKyAgICAgICAgZm9y
ICggdmFyIGkgPSAwLCBsID0ganNvbi5wb2ludHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAot
ICAgICAgICBEZWZhdWx0U2V0dGluZ3NfOiB7fSwKKyAgICAgICAgICAgIHZhciBwb2ludCA9IGpz
b24ucG9pbnRzWyBpIF07CisgICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBuZXcgVmVjdG9y
MygpLmZyb21BcnJheSggcG9pbnQgKSApOwogCi0gICAgICAgIGdldFNldHRpbmdzXzogZnVuY3Rp
b24gKCkgeworICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzIHx8
IHRoaXMuRGVmYXVsdFNldHRpbmdzXzsKKyAgICAgICAgdGhpcy5jbG9zZWQgPSBqc29uLmNsb3Nl
ZDsKKyAgICAgICAgdGhpcy5jdXJ2ZVR5cGUgPSBqc29uLmN1cnZlVHlwZTsKKyAgICAgICAgdGhp
cy50ZW5zaW9uID0ganNvbi50ZW5zaW9uOwogCi0gICAgICAgIH0sCisgICAgICAgIHJldHVybiB0
aGlzOwogCi0gICAgICAgIGNvcHlTYW1wbGVWYWx1ZV86IGZ1bmN0aW9uICggaW5kZXggKSB7Cisg
ICAgfTsKIAotICAgICAgICAgICAgLy8gY29waWVzIGEgc2FtcGxlIHZhbHVlIHRvIHRoZSByZXN1
bHQgYnVmZmVyCisgICAgLyoqCisgICAgICogQGF1dGhvciB6ejg1IC8gaHR0cDovL3d3dy5sYWI0
Z2FtZXMubmV0L3p6ODUvYmxvZworICAgICAqCisgICAgICogQmV6aWVyIEN1cnZlcyBmb3JtdWxh
cyBvYnRhaW5lZCBmcm9tCisgICAgICogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Cw6l6
aWVyX2N1cnZlCisgICAgICovCiAKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnJlc3Vs
dEJ1ZmZlciwKLSAgICAgICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLnNhbXBsZVZhbHVlcywKLSAg
ICAgICAgICAgICAgICBzdHJpZGUgPSB0aGlzLnZhbHVlU2l6ZSwKLSAgICAgICAgICAgICAgICBv
ZmZzZXQgPSBpbmRleCAqIHN0cmlkZTsKKyAgICBmdW5jdGlvbiBDYXRtdWxsUm9tKCB0LCBwMCwg
cDEsIHAyLCBwMyApIHsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpICE9PSBzdHJp
ZGU7ICsrIGkgKSB7CisgICAgICAgIHZhciB2MCA9ICggcDIgLSBwMCApICogMC41OworICAgICAg
ICB2YXIgdjEgPSAoIHAzIC0gcDEgKSAqIDAuNTsKKyAgICAgICAgdmFyIHQyID0gdCAqIHQ7Cisg
ICAgICAgIHZhciB0MyA9IHQgKiB0MjsKKyAgICAgICAgcmV0dXJuICggMiAqIHAxIC0gMiAqIHAy
ICsgdjAgKyB2MSApICogdDMgKyAoIC0gMyAqIHAxICsgMyAqIHAyIC0gMiAqIHYwIC0gdjEgKSAq
IHQyICsgdjAgKiB0ICsgcDE7CiAKLSAgICAgICAgICAgICAgICByZXN1bHRbIGkgXSA9IHZhbHVl
c1sgb2Zmc2V0ICsgaSBdOworICAgIH0KIAotICAgICAgICAgICAgfQorICAgIC8vCiAKLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgZnVuY3Rpb24gUXVhZHJhdGljQmV6aWVyUDAoIHQs
IHAgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgdmFyIGsgPSAxIC0gdDsKKyAgICAgICAgcmV0
dXJuIGsgKiBrICogcDsKIAotICAgICAgICAvLyBUZW1wbGF0ZSBtZXRob2RzIGZvciBkZXJpdmVk
IGNsYXNzZXM6CisgICAgfQogCi0gICAgICAgIGludGVycG9sYXRlXzogZnVuY3Rpb24gKCAvKiBp
MSwgdDAsIHQsIHQxICovICkgeworICAgIGZ1bmN0aW9uIFF1YWRyYXRpY0JlemllclAxKCB0LCBw
ICkgewogCi0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoICdjYWxsIHRvIGFic3RyYWN0IG1l
dGhvZCcgKTsKLSAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9ucyBzaGFsbCByZXR1cm4gdGhp
cy5yZXN1bHRCdWZmZXIKKyAgICAgICAgcmV0dXJuIDIgKiAoIDEgLSB0ICkgKiB0ICogcDsKIAot
ICAgICAgICB9LAorICAgIH0KIAotICAgICAgICBpbnRlcnZhbENoYW5nZWRfOiBmdW5jdGlvbiAo
IC8qIGkxLCB0MCwgdDEgKi8gKSB7CisgICAgZnVuY3Rpb24gUXVhZHJhdGljQmV6aWVyUDIoIHQs
IHAgKSB7CiAKLSAgICAgICAgICAgIC8vIGVtcHR5CisgICAgICAgIHJldHVybiB0ICogdCAqIHA7
CiAKLSAgICAgICAgfQorICAgIH0KIAotICAgIH0gKTsKKyAgICBmdW5jdGlvbiBRdWFkcmF0aWNC
ZXppZXIoIHQsIHAwLCBwMSwgcDIgKSB7CiAKLSAgICAvLyFcIERFQ0xBUkUgQUxJQVMgQUZURVIg
YXNzaWduIHByb3RvdHlwZSAhCi0gICAgT2JqZWN0LmFzc2lnbiggSW50ZXJwb2xhbnQucHJvdG90
eXBlLCB7CisgICAgICAgIHJldHVybiBRdWFkcmF0aWNCZXppZXJQMCggdCwgcDAgKSArIFF1YWRy
YXRpY0JlemllclAxKCB0LCBwMSApICsKKyAgICAgICAgICAgIFF1YWRyYXRpY0JlemllclAyKCB0
LCBwMiApOwogCi0gICAgICAgIC8vKCAwLCB0LCB0MCApLCByZXR1cm5zIHRoaXMucmVzdWx0QnVm
ZmVyCi0gICAgICAgIGJlZm9yZVN0YXJ0XzogSW50ZXJwb2xhbnQucHJvdG90eXBlLmNvcHlTYW1w
bGVWYWx1ZV8sCisgICAgfQogCi0gICAgICAgIC8vKCBOLTEsIHROLTEsIHQgKSwgcmV0dXJucyB0
aGlzLnJlc3VsdEJ1ZmZlcgotICAgICAgICBhZnRlckVuZF86IEludGVycG9sYW50LnByb3RvdHlw
ZS5jb3B5U2FtcGxlVmFsdWVfLAorICAgIC8vCiAKLSAgICB9ICk7CisgICAgZnVuY3Rpb24gQ3Vi
aWNCZXppZXJQMCggdCwgcCApIHsKIAotICAgIC8qKgotICAgICAqIFNwaGVyaWNhbCBsaW5lYXIg
dW5pdCBxdWF0ZXJuaW9uIGludGVycG9sYW50LgotICAgICAqCi0gICAgICogQGF1dGhvciB0c2No
dwotICAgICAqLworICAgICAgICB2YXIgayA9IDEgLSB0OworICAgICAgICByZXR1cm4gayAqIGsg
KiBrICogcDsKIAotICAgIGZ1bmN0aW9uIFF1YXRlcm5pb25MaW5lYXJJbnRlcnBvbGFudCggcGFy
YW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNpemUsIHJlc3VsdEJ1ZmZlciAp
IHsKKyAgICB9CiAKLSAgICAgICAgSW50ZXJwb2xhbnQuY2FsbCggdGhpcywgcGFyYW1ldGVyUG9z
aXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNpemUsIHJlc3VsdEJ1ZmZlciApOworICAgIGZ1
bmN0aW9uIEN1YmljQmV6aWVyUDEoIHQsIHAgKSB7CisKKyAgICAgICAgdmFyIGsgPSAxIC0gdDsK
KyAgICAgICAgcmV0dXJuIDMgKiBrICogayAqIHQgKiBwOwogCiAgICAgfQogCi0gICAgUXVhdGVy
bmlvbkxpbmVhckludGVycG9sYW50LnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5j
cmVhdGUoIEludGVycG9sYW50LnByb3RvdHlwZSApLCB7CisgICAgZnVuY3Rpb24gQ3ViaWNCZXpp
ZXJQMiggdCwgcCApIHsKIAotICAgICAgICBjb25zdHJ1Y3RvcjogUXVhdGVybmlvbkxpbmVhcklu
dGVycG9sYW50LAorICAgICAgICByZXR1cm4gMyAqICggMSAtIHQgKSAqIHQgKiB0ICogcDsKIAot
ICAgICAgICBpbnRlcnBvbGF0ZV86IGZ1bmN0aW9uICggaTEsIHQwLCB0LCB0MSApIHsKKyAgICB9
CiAKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnJlc3VsdEJ1ZmZlciwKLSAgICAgICAg
ICAgICAgICB2YWx1ZXMgPSB0aGlzLnNhbXBsZVZhbHVlcywKLSAgICAgICAgICAgICAgICBzdHJp
ZGUgPSB0aGlzLnZhbHVlU2l6ZSwKKyAgICBmdW5jdGlvbiBDdWJpY0JlemllclAzKCB0LCBwICkg
ewogCi0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gaTEgKiBzdHJpZGUsCisgICAgICAgIHJldHVy
biB0ICogdCAqIHQgKiBwOwogCi0gICAgICAgICAgICAgICAgYWxwaGEgPSAoIHQgLSB0MCApIC8g
KCB0MSAtIHQwICk7CisgICAgfQogCi0gICAgICAgICAgICBmb3IgKCB2YXIgZW5kID0gb2Zmc2V0
ICsgc3RyaWRlOyBvZmZzZXQgIT09IGVuZDsgb2Zmc2V0ICs9IDQgKSB7CisgICAgZnVuY3Rpb24g
Q3ViaWNCZXppZXIoIHQsIHAwLCBwMSwgcDIsIHAzICkgewogCi0gICAgICAgICAgICAgICAgUXVh
dGVybmlvbi5zbGVycEZsYXQoIHJlc3VsdCwgMCwgdmFsdWVzLCBvZmZzZXQgLSBzdHJpZGUsIHZh
bHVlcywgb2Zmc2V0LCBhbHBoYSApOworICAgICAgICByZXR1cm4gQ3ViaWNCZXppZXJQMCggdCwg
cDAgKSArIEN1YmljQmV6aWVyUDEoIHQsIHAxICkgKyBDdWJpY0JlemllclAyKCB0LCBwMiApICsK
KyAgICAgICAgICAgIEN1YmljQmV6aWVyUDMoIHQsIHAzICk7CiAKLSAgICAgICAgICAgIH0KKyAg
ICB9CiAKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgZnVuY3Rpb24gQ3ViaWNCZXpp
ZXJDdXJ2ZSggdjAsIHYxLCB2MiwgdjMgKSB7CiAKLSAgICAgICAgfQorICAgICAgICBDdXJ2ZS5j
YWxsKCB0aGlzICk7CiAKLSAgICB9ICk7CisgICAgICAgIHRoaXMudHlwZSA9ICdDdWJpY0Jlemll
ckN1cnZlJzsKIAotICAgIC8qKgotICAgICAqCi0gICAgICogQSBUcmFjayBvZiBxdWF0ZXJuaW9u
IGtleWZyYW1lIHZhbHVlcy4KLSAgICAgKgotICAgICAqIEBhdXRob3IgQmVuIEhvdXN0b24gLyBo
dHRwOi8vY2xhcmEuaW8vCi0gICAgICogQGF1dGhvciBEYXZpZCBTYXJubyAvIGh0dHA6Ly9saWdo
dGhhdXMudXMvCi0gICAgICogQGF1dGhvciB0c2NodwotICAgICAqLworICAgICAgICB0aGlzLnYw
ID0gdjAgfHwgbmV3IFZlY3RvcjIoKTsKKyAgICAgICAgdGhpcy52MSA9IHYxIHx8IG5ldyBWZWN0
b3IyKCk7CisgICAgICAgIHRoaXMudjIgPSB2MiB8fCBuZXcgVmVjdG9yMigpOworICAgICAgICB0
aGlzLnYzID0gdjMgfHwgbmV3IFZlY3RvcjIoKTsKIAotICAgIGZ1bmN0aW9uIFF1YXRlcm5pb25L
ZXlmcmFtZVRyYWNrKCBuYW1lLCB0aW1lcywgdmFsdWVzLCBpbnRlcnBvbGF0aW9uICkgeworICAg
IH0KIAotICAgICAgICBLZXlmcmFtZVRyYWNrLmNhbGwoIHRoaXMsIG5hbWUsIHRpbWVzLCB2YWx1
ZXMsIGludGVycG9sYXRpb24gKTsKKyAgICBDdWJpY0JlemllckN1cnZlLnByb3RvdHlwZSA9IE9i
amVjdC5jcmVhdGUoIEN1cnZlLnByb3RvdHlwZSApOworICAgIEN1YmljQmV6aWVyQ3VydmUucHJv
dG90eXBlLmNvbnN0cnVjdG9yID0gQ3ViaWNCZXppZXJDdXJ2ZTsKIAotICAgIH0KKyAgICBDdWJp
Y0JlemllckN1cnZlLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmUgPSB0cnVlOwogCi0gICAg
UXVhdGVybmlvbktleWZyYW1lVHJhY2sucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0
LmNyZWF0ZSggS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUgKSwgeworICAgIEN1YmljQmV6aWVyQ3Vy
dmUucHJvdG90eXBlLmdldFBvaW50ID0gZnVuY3Rpb24gKCB0LCBvcHRpb25hbFRhcmdldCApIHsK
IAotICAgICAgICBjb25zdHJ1Y3RvcjogUXVhdGVybmlvbktleWZyYW1lVHJhY2ssCisgICAgICAg
IHZhciBwb2ludCA9IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBWZWN0b3IyKCk7CiAKLSAgICAgICAg
VmFsdWVUeXBlTmFtZTogJ3F1YXRlcm5pb24nLAorICAgICAgICB2YXIgdjAgPSB0aGlzLnYwLCB2
MSA9IHRoaXMudjEsIHYyID0gdGhpcy52MiwgdjMgPSB0aGlzLnYzOwogCi0gICAgICAgIC8vIFZh
bHVlQnVmZmVyVHlwZSBpcyBpbmhlcml0ZWQKKyAgICAgICAgcG9pbnQuc2V0KAorICAgICAgICAg
ICAgQ3ViaWNCZXppZXIoIHQsIHYwLngsIHYxLngsIHYyLngsIHYzLnggKSwKKyAgICAgICAgICAg
IEN1YmljQmV6aWVyKCB0LCB2MC55LCB2MS55LCB2Mi55LCB2My55ICkKKyAgICAgICAgKTsKIAot
ICAgICAgICBEZWZhdWx0SW50ZXJwb2xhdGlvbjogSW50ZXJwb2xhdGVMaW5lYXIsCisgICAgICAg
IHJldHVybiBwb2ludDsKIAotICAgICAgICBJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6
IGZ1bmN0aW9uICggcmVzdWx0ICkgeworICAgIH07CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcg
UXVhdGVybmlvbkxpbmVhckludGVycG9sYW50KCB0aGlzLnRpbWVzLCB0aGlzLnZhbHVlcywgdGhp
cy5nZXRWYWx1ZVNpemUoKSwgcmVzdWx0ICk7CisgICAgQ3ViaWNCZXppZXJDdXJ2ZS5wcm90b3R5
cGUuY29weSA9IGZ1bmN0aW9uICggc291cmNlICkgewogCi0gICAgICAgIH0sCisgICAgICAgIEN1
cnZlLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOwogCi0gICAgICAgIEludGVy
cG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDogdW5kZWZpbmVkIC8vIG5vdCB5ZXQgaW1wbGVtZW50
ZWQKKyAgICAgICAgdGhpcy52MC5jb3B5KCBzb3VyY2UudjAgKTsKKyAgICAgICAgdGhpcy52MS5j
b3B5KCBzb3VyY2UudjEgKTsKKyAgICAgICAgdGhpcy52Mi5jb3B5KCBzb3VyY2UudjIgKTsKKyAg
ICAgICAgdGhpcy52My5jb3B5KCBzb3VyY2UudjMgKTsKIAotICAgIH0gKTsKKyAgICAgICAgcmV0
dXJuIHRoaXM7CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqIEEgVHJhY2sgb2Yga2V5ZnJhbWUg
dmFsdWVzIHRoYXQgcmVwcmVzZW50IGNvbG9yLgotICAgICAqCi0gICAgICoKLSAgICAgKiBAYXV0
aG9yIEJlbiBIb3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvLwotICAgICAqIEBhdXRob3IgRGF2aWQg
U2Fybm8gLyBodHRwOi8vbGlnaHRoYXVzLnVzLwotICAgICAqIEBhdXRob3IgdHNjaHcKLSAgICAg
Ki8KKyAgICB9OwogCi0gICAgZnVuY3Rpb24gQ29sb3JLZXlmcmFtZVRyYWNrKCBuYW1lLCB0aW1l
cywgdmFsdWVzLCBpbnRlcnBvbGF0aW9uICkgeworICAgIEN1YmljQmV6aWVyQ3VydmUucHJvdG90
eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICBLZXlmcmFtZVRyYWNrLmNhbGwo
IHRoaXMsIG5hbWUsIHRpbWVzLCB2YWx1ZXMsIGludGVycG9sYXRpb24gKTsKKyAgICAgICAgdmFy
IGRhdGEgPSBDdXJ2ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoIHRoaXMgKTsKIAotICAgIH0KKyAg
ICAgICAgZGF0YS52MCA9IHRoaXMudjAudG9BcnJheSgpOworICAgICAgICBkYXRhLnYxID0gdGhp
cy52MS50b0FycmF5KCk7CisgICAgICAgIGRhdGEudjIgPSB0aGlzLnYyLnRvQXJyYXkoKTsKKyAg
ICAgICAgZGF0YS52MyA9IHRoaXMudjMudG9BcnJheSgpOwogCi0gICAgQ29sb3JLZXlmcmFtZVRy
YWNrLnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIEtleWZyYW1lVHJh
Y2sucHJvdG90eXBlICksIHsKKyAgICAgICAgcmV0dXJuIGRhdGE7CiAKLSAgICAgICAgY29uc3Ry
dWN0b3I6IENvbG9yS2V5ZnJhbWVUcmFjaywKKyAgICB9OwogCi0gICAgICAgIFZhbHVlVHlwZU5h
bWU6ICdjb2xvcicKKyAgICBDdWJpY0JlemllckN1cnZlLnByb3RvdHlwZS5mcm9tSlNPTiA9IGZ1
bmN0aW9uICgganNvbiApIHsKIAotICAgICAgICAvLyBWYWx1ZUJ1ZmZlclR5cGUgaXMgaW5oZXJp
dGVkCisgICAgICAgIEN1cnZlLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKCB0aGlzLCBqc29uICk7
CiAKLSAgICAgICAgLy8gRGVmYXVsdEludGVycG9sYXRpb24gaXMgaW5oZXJpdGVkCisgICAgICAg
IHRoaXMudjAuZnJvbUFycmF5KCBqc29uLnYwICk7CisgICAgICAgIHRoaXMudjEuZnJvbUFycmF5
KCBqc29uLnYxICk7CisgICAgICAgIHRoaXMudjIuZnJvbUFycmF5KCBqc29uLnYyICk7CisgICAg
ICAgIHRoaXMudjMuZnJvbUFycmF5KCBqc29uLnYzICk7CiAKLSAgICAgICAgLy8gTm90ZTogVmVy
eSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBhbmQgbm90aGluZyBzcGVjaWFsIHlldC4KLSAgICAgICAg
Ly8gSG93ZXZlciwgdGhpcyBpcyB0aGUgcGxhY2UgZm9yIGNvbG9yIHNwYWNlIHBhcmFtZXRlcml6
YXRpb24uCisgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgfSApOworICAgIH07CiAKLSAgICAv
KioKLSAgICAgKgotICAgICAqIEEgVHJhY2sgb2YgbnVtZXJpYyBrZXlmcmFtZSB2YWx1ZXMuCi0g
ICAgICoKLSAgICAgKiBAYXV0aG9yIEJlbiBIb3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvLwotICAg
ICAqIEBhdXRob3IgRGF2aWQgU2Fybm8gLyBodHRwOi8vbGlnaHRoYXVzLnVzLwotICAgICAqIEBh
dXRob3IgdHNjaHcKLSAgICAgKi8KKyAgICBmdW5jdGlvbiBDdWJpY0JlemllckN1cnZlMyggdjAs
IHYxLCB2MiwgdjMgKSB7CiAKLSAgICBmdW5jdGlvbiBOdW1iZXJLZXlmcmFtZVRyYWNrKCBuYW1l
LCB0aW1lcywgdmFsdWVzLCBpbnRlcnBvbGF0aW9uICkgeworICAgICAgICBDdXJ2ZS5jYWxsKCB0
aGlzICk7CiAKLSAgICAgICAgS2V5ZnJhbWVUcmFjay5jYWxsKCB0aGlzLCBuYW1lLCB0aW1lcywg
dmFsdWVzLCBpbnRlcnBvbGF0aW9uICk7CisgICAgICAgIHRoaXMudHlwZSA9ICdDdWJpY0Jlemll
ckN1cnZlMyc7CisKKyAgICAgICAgdGhpcy52MCA9IHYwIHx8IG5ldyBWZWN0b3IzKCk7CisgICAg
ICAgIHRoaXMudjEgPSB2MSB8fCBuZXcgVmVjdG9yMygpOworICAgICAgICB0aGlzLnYyID0gdjIg
fHwgbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgdGhpcy52MyA9IHYzIHx8IG5ldyBWZWN0b3IzKCk7
CiAKICAgICB9CiAKLSAgICBOdW1iZXJLZXlmcmFtZVRyYWNrLnByb3RvdHlwZSA9IE9iamVjdC5h
c3NpZ24oIE9iamVjdC5jcmVhdGUoIEtleWZyYW1lVHJhY2sucHJvdG90eXBlICksIHsKKyAgICBD
dWJpY0JlemllckN1cnZlMy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBDdXJ2ZS5wcm90b3R5
cGUgKTsKKyAgICBDdWJpY0JlemllckN1cnZlMy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDdWJp
Y0JlemllckN1cnZlMzsKIAotICAgICAgICBjb25zdHJ1Y3RvcjogTnVtYmVyS2V5ZnJhbWVUcmFj
aywKKyAgICBDdWJpY0JlemllckN1cnZlMy5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMyA9
IHRydWU7CiAKLSAgICAgICAgVmFsdWVUeXBlTmFtZTogJ251bWJlcicKKyAgICBDdWJpY0Jlemll
ckN1cnZlMy5wcm90b3R5cGUuZ2V0UG9pbnQgPSBmdW5jdGlvbiAoIHQsIG9wdGlvbmFsVGFyZ2V0
ICkgewogCi0gICAgICAgIC8vIFZhbHVlQnVmZmVyVHlwZSBpcyBpbmhlcml0ZWQKKyAgICAgICAg
dmFyIHBvaW50ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAv
LyBEZWZhdWx0SW50ZXJwb2xhdGlvbiBpcyBpbmhlcml0ZWQKKyAgICAgICAgdmFyIHYwID0gdGhp
cy52MCwgdjEgPSB0aGlzLnYxLCB2MiA9IHRoaXMudjIsIHYzID0gdGhpcy52MzsKIAotICAgIH0g
KTsKKyAgICAgICAgcG9pbnQuc2V0KAorICAgICAgICAgICAgQ3ViaWNCZXppZXIoIHQsIHYwLngs
IHYxLngsIHYyLngsIHYzLnggKSwKKyAgICAgICAgICAgIEN1YmljQmV6aWVyKCB0LCB2MC55LCB2
MS55LCB2Mi55LCB2My55ICksCisgICAgICAgICAgICBDdWJpY0JlemllciggdCwgdjAueiwgdjEu
eiwgdjIueiwgdjMueiApCisgICAgICAgICk7CiAKLSAgICAvKioKLSAgICAgKiBGYXN0IGFuZCBz
aW1wbGUgY3ViaWMgc3BsaW5lIGludGVycG9sYW50LgotICAgICAqCi0gICAgICogSXQgd2FzIGRl
cml2ZWQgZnJvbSBhIEhlcm1pdGlhbiBjb25zdHJ1Y3Rpb24gc2V0dGluZyB0aGUgZmlyc3QgZGVy
aXZhdGl2ZQotICAgICAqIGF0IGVhY2ggc2FtcGxlIHBvc2l0aW9uIHRvIHRoZSBsaW5lYXIgc2xv
cGUgYmV0d2VlbiBuZWlnaGJvcmluZyBwb3NpdGlvbnMKLSAgICAgKiBvdmVyIHRoZWlyIHBhcmFt
ZXRlciBpbnRlcnZhbC4KLSAgICAgKgotICAgICAqIEBhdXRob3IgdHNjaHcKLSAgICAgKi8KKyAg
ICAgICAgcmV0dXJuIHBvaW50OwogCi0gICAgZnVuY3Rpb24gQ3ViaWNJbnRlcnBvbGFudCggcGFy
YW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNpemUsIHJlc3VsdEJ1ZmZlciAp
IHsKKyAgICB9OwogCi0gICAgICAgIEludGVycG9sYW50LmNhbGwoIHRoaXMsIHBhcmFtZXRlclBv
c2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIgKTsKKyAgICBD
dWJpY0JlemllckN1cnZlMy5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uICggc291cmNlICkgewog
Ci0gICAgICAgIHRoaXMuX3dlaWdodFByZXYgPSAtIDA7Ci0gICAgICAgIHRoaXMuX29mZnNldFBy
ZXYgPSAtIDA7Ci0gICAgICAgIHRoaXMuX3dlaWdodE5leHQgPSAtIDA7Ci0gICAgICAgIHRoaXMu
X29mZnNldE5leHQgPSAtIDA7CisgICAgICAgIEN1cnZlLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRo
aXMsIHNvdXJjZSApOwogCi0gICAgfQorICAgICAgICB0aGlzLnYwLmNvcHkoIHNvdXJjZS52MCAp
OworICAgICAgICB0aGlzLnYxLmNvcHkoIHNvdXJjZS52MSApOworICAgICAgICB0aGlzLnYyLmNv
cHkoIHNvdXJjZS52MiApOworICAgICAgICB0aGlzLnYzLmNvcHkoIHNvdXJjZS52MyApOwogCi0g
ICAgQ3ViaWNJbnRlcnBvbGFudC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3Jl
YXRlKCBJbnRlcnBvbGFudC5wcm90b3R5cGUgKSwgeworICAgICAgICByZXR1cm4gdGhpczsKIAot
ICAgICAgICBjb25zdHJ1Y3RvcjogQ3ViaWNJbnRlcnBvbGFudCwKKyAgICB9OwogCi0gICAgICAg
IERlZmF1bHRTZXR0aW5nc186IHsKKyAgICBDdWJpY0JlemllckN1cnZlMy5wcm90b3R5cGUudG9K
U09OID0gZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICBlbmRpbmdTdGFydDogWmVyb0N1cnZh
dHVyZUVuZGluZywKLSAgICAgICAgICAgIGVuZGluZ0VuZDogWmVyb0N1cnZhdHVyZUVuZGluZwor
ICAgICAgICB2YXIgZGF0YSA9IEN1cnZlLnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcyApOwog
Ci0gICAgICAgIH0sCisgICAgICAgIGRhdGEudjAgPSB0aGlzLnYwLnRvQXJyYXkoKTsKKyAgICAg
ICAgZGF0YS52MSA9IHRoaXMudjEudG9BcnJheSgpOworICAgICAgICBkYXRhLnYyID0gdGhpcy52
Mi50b0FycmF5KCk7CisgICAgICAgIGRhdGEudjMgPSB0aGlzLnYzLnRvQXJyYXkoKTsKIAotICAg
ICAgICBpbnRlcnZhbENoYW5nZWRfOiBmdW5jdGlvbiAoIGkxLCB0MCwgdDEgKSB7CisgICAgICAg
IHJldHVybiBkYXRhOwogCi0gICAgICAgICAgICB2YXIgcHAgPSB0aGlzLnBhcmFtZXRlclBvc2l0
aW9ucywKLSAgICAgICAgICAgICAgICBpUHJldiA9IGkxIC0gMiwKLSAgICAgICAgICAgICAgICBp
TmV4dCA9IGkxICsgMSwKKyAgICB9OwogCi0gICAgICAgICAgICAgICAgdFByZXYgPSBwcFsgaVBy
ZXYgXSwKLSAgICAgICAgICAgICAgICB0TmV4dCA9IHBwWyBpTmV4dCBdOworICAgIEN1YmljQmV6
aWVyQ3VydmUzLnByb3RvdHlwZS5mcm9tSlNPTiA9IGZ1bmN0aW9uICgganNvbiApIHsKIAotICAg
ICAgICAgICAgaWYgKCB0UHJldiA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICBDdXJ2ZS5wcm90
b3R5cGUuZnJvbUpTT04uY2FsbCggdGhpcywganNvbiApOwogCi0gICAgICAgICAgICAgICAgc3dp
dGNoICggdGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdTdGFydCApIHsKKyAgICAgICAgdGhpcy52
MC5mcm9tQXJyYXkoIGpzb24udjAgKTsKKyAgICAgICAgdGhpcy52MS5mcm9tQXJyYXkoIGpzb24u
djEgKTsKKyAgICAgICAgdGhpcy52Mi5mcm9tQXJyYXkoIGpzb24udjIgKTsKKyAgICAgICAgdGhp
cy52My5mcm9tQXJyYXkoIGpzb24udjMgKTsKIAotICAgICAgICAgICAgICAgICAgICBjYXNlIFpl
cm9TbG9wZUVuZGluZzoKKyAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGYnKHQwKSA9IDAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlQcmV2ID0gaTE7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0UHJldiA9IDIgKiB0MCAtIHQxOworICAgIH07CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgIGZ1bmN0aW9uIExpbmVDdXJ2ZSgg
djEsIHYyICkgewogCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgV3JhcEFyb3VuZEVuZGluZzoK
KyAgICAgICAgQ3VydmUuY2FsbCggdGhpcyApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyB1c2UgdGhlIG90aGVyIGVuZCBvZiB0aGUgY3VydmUKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlQcmV2ID0gcHAubGVuZ3RoIC0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRQcmV2ID0g
dDAgKyBwcFsgaVByZXYgXSAtIHBwWyBpUHJldiArIDEgXTsKKyAgICAgICAgdGhpcy50eXBlID0g
J0xpbmVDdXJ2ZSc7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB0
aGlzLnYxID0gdjEgfHwgbmV3IFZlY3RvcjIoKTsKKyAgICAgICAgdGhpcy52MiA9IHYyIHx8IG5l
dyBWZWN0b3IyKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogLy8gWmVyb0N1cnZh
dHVyZUVuZGluZworICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZicnKHQwKSA9
IDAgYS5rLmEuIE5hdHVyYWwgU3BsaW5lCi0gICAgICAgICAgICAgICAgICAgICAgICBpUHJldiA9
IGkxOwotICAgICAgICAgICAgICAgICAgICAgICAgdFByZXYgPSB0MTsKKyAgICBMaW5lQ3VydmUu
cHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQ3VydmUucHJvdG90eXBlICk7CisgICAgTGluZUN1
cnZlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExpbmVDdXJ2ZTsKIAotICAgICAgICAgICAgICAg
IH0KKyAgICBMaW5lQ3VydmUucHJvdG90eXBlLmlzTGluZUN1cnZlID0gdHJ1ZTsKIAotICAgICAg
ICAgICAgfQorICAgIExpbmVDdXJ2ZS5wcm90b3R5cGUuZ2V0UG9pbnQgPSBmdW5jdGlvbiAoIHQs
IG9wdGlvbmFsVGFyZ2V0ICkgewogCi0gICAgICAgICAgICBpZiAoIHROZXh0ID09PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgIHZhciBwb2ludCA9IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBWZWN0b3Iy
KCk7CiAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKCB0aGlzLmdldFNldHRpbmdzXygpLmVuZGlu
Z0VuZCApIHsKKyAgICAgICAgaWYgKCB0ID09PSAxICkgewogCi0gICAgICAgICAgICAgICAgICAg
IGNhc2UgWmVyb1Nsb3BlRW5kaW5nOgorICAgICAgICAgICAgcG9pbnQuY29weSggdGhpcy52MiAp
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBmJyh0TikgPSAwCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpTmV4dCA9IGkxOwotICAgICAgICAgICAgICAgICAgICAgICAgdE5leHQgPSAy
ICogdDEgLSB0MDsKKyAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBwb2ludC5jb3B5KCB0aGlzLnYyICkuc3ViKCB0aGlzLnYxICk7
CisgICAgICAgICAgICBwb2ludC5tdWx0aXBseVNjYWxhciggdCApLmFkZCggdGhpcy52MSApOwog
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgV3JhcEFyb3VuZEVuZGluZzoKKyAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgdGhlIG90aGVyIGVuZCBvZiB0aGUgY3Vy
dmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlOZXh0ID0gMTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHROZXh0ID0gdDEgKyBwcFsgMSBdIC0gcHBbIDAgXTsKKyAgICAgICAgcmV0dXJuIHBv
aW50OwogCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICB9OwogCi0gICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IC8vIFplcm9DdXJ2YXR1cmVFbmRpbmcKKyAgICAvLyBMaW5l
IGN1cnZlIGlzIGxpbmVhciwgc28gd2UgY2FuIG92ZXJ3cml0ZSBkZWZhdWx0IGdldFBvaW50QXQK
IAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZicnKHROKSA9IDAsIGEuay5hLiBOYXR1cmFs
IFNwbGluZQotICAgICAgICAgICAgICAgICAgICAgICAgaU5leHQgPSBpMSAtIDE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB0TmV4dCA9IHQwOworICAgIExpbmVDdXJ2ZS5wcm90b3R5cGUuZ2V0
UG9pbnRBdCA9IGZ1bmN0aW9uICggdSwgb3B0aW9uYWxUYXJnZXQgKSB7CiAKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLmdldFBvaW50KCB1LCBvcHRpb25hbFRhcmdldCAp
OwogCi0gICAgICAgICAgICB9CisgICAgfTsKIAotICAgICAgICAgICAgdmFyIGhhbGZEdCA9ICgg
dDEgLSB0MCApICogMC41LAotICAgICAgICAgICAgICAgIHN0cmlkZSA9IHRoaXMudmFsdWVTaXpl
OworICAgIExpbmVDdXJ2ZS5wcm90b3R5cGUuZ2V0VGFuZ2VudCA9IGZ1bmN0aW9uICggLyogdCAq
LyApIHsKIAotICAgICAgICAgICAgdGhpcy5fd2VpZ2h0UHJldiA9IGhhbGZEdCAvICggdDAgLSB0
UHJldiApOwotICAgICAgICAgICAgdGhpcy5fd2VpZ2h0TmV4dCA9IGhhbGZEdCAvICggdE5leHQg
LSB0MSApOwotICAgICAgICAgICAgdGhpcy5fb2Zmc2V0UHJldiA9IGlQcmV2ICogc3RyaWRlOwot
ICAgICAgICAgICAgdGhpcy5fb2Zmc2V0TmV4dCA9IGlOZXh0ICogc3RyaWRlOworICAgICAgICB2
YXIgdGFuZ2VudCA9IHRoaXMudjIuY2xvbmUoKS5zdWIoIHRoaXMudjEgKTsKIAotICAgICAgICB9
LAorICAgICAgICByZXR1cm4gdGFuZ2VudC5ub3JtYWxpemUoKTsKIAotICAgICAgICBpbnRlcnBv
bGF0ZV86IGZ1bmN0aW9uICggaTEsIHQwLCB0LCB0MSApIHsKKyAgICB9OwogCi0gICAgICAgICAg
ICB2YXIgcmVzdWx0ID0gdGhpcy5yZXN1bHRCdWZmZXIsCi0gICAgICAgICAgICAgICAgdmFsdWVz
ID0gdGhpcy5zYW1wbGVWYWx1ZXMsCi0gICAgICAgICAgICAgICAgc3RyaWRlID0gdGhpcy52YWx1
ZVNpemUsCisgICAgTGluZUN1cnZlLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCBzb3VyY2Ug
KSB7CiAKLSAgICAgICAgICAgICAgICBvMSA9IGkxICogc3RyaWRlLCAgICAgICBvMCA9IG8xIC0g
c3RyaWRlLAotICAgICAgICAgICAgICAgIG9QID0gdGhpcy5fb2Zmc2V0UHJldiwgIG9OID0gdGhp
cy5fb2Zmc2V0TmV4dCwKLSAgICAgICAgICAgICAgICB3UCA9IHRoaXMuX3dlaWdodFByZXYsICB3
TiA9IHRoaXMuX3dlaWdodE5leHQsCisgICAgICAgIEN1cnZlLnByb3RvdHlwZS5jb3B5LmNhbGwo
IHRoaXMsIHNvdXJjZSApOwogCi0gICAgICAgICAgICAgICAgcCA9ICggdCAtIHQwICkgLyAoIHQx
IC0gdDAgKSwKLSAgICAgICAgICAgICAgICBwcCA9IHAgKiBwLAotICAgICAgICAgICAgICAgIHBw
cCA9IHBwICogcDsKKyAgICAgICAgdGhpcy52MS5jb3B5KCBzb3VyY2UudjEgKTsKKyAgICAgICAg
dGhpcy52Mi5jb3B5KCBzb3VyY2UudjIgKTsKIAotICAgICAgICAgICAgLy8gZXZhbHVhdGUgcG9s
eW5vbWlhbHMKKyAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIHZhciBzUCA9IC0g
d1AgKiBwcHAgKyAyICogd1AgKiBwcCAtIHdQICogcDsKLSAgICAgICAgICAgIHZhciBzMCA9ICgg
MSArIHdQICkgKiBwcHAgKyAoIC0gMS41IC0gMiAqIHdQICkgKiBwcCArICggLSAwLjUgKyB3UCAp
ICogcCArIDE7Ci0gICAgICAgICAgICB2YXIgczEgPSAoIC0gMSAtIHdOICkgKiBwcHAgKyAoIDEu
NSArIHdOICkgKiBwcCArIDAuNSAqIHA7Ci0gICAgICAgICAgICB2YXIgc04gPSB3TiAqIHBwcCAt
IHdOICogcHA7CisgICAgfTsKIAotICAgICAgICAgICAgLy8gY29tYmluZSBkYXRhIGxpbmVhcmx5
CisgICAgTGluZUN1cnZlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7CiAKLSAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gMDsgaSAhPT0gc3RyaWRlOyArKyBpICkgeworICAgICAgICB2
YXIgZGF0YSA9IEN1cnZlLnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcyApOwogCi0gICAgICAg
ICAgICAgICAgcmVzdWx0WyBpIF0gPQotICAgICAgICAgICAgICAgICAgICAgICAgc1AgKiB2YWx1
ZXNbIG9QICsgaSBdICsKLSAgICAgICAgICAgICAgICAgICAgICAgIHMwICogdmFsdWVzWyBvMCAr
IGkgXSArCi0gICAgICAgICAgICAgICAgICAgICAgICBzMSAqIHZhbHVlc1sgbzEgKyBpIF0gKwot
ICAgICAgICAgICAgICAgICAgICAgICAgc04gKiB2YWx1ZXNbIG9OICsgaSBdOworICAgICAgICBk
YXRhLnYxID0gdGhpcy52MS50b0FycmF5KCk7CisgICAgICAgIGRhdGEudjIgPSB0aGlzLnYyLnRv
QXJyYXkoKTsKIAotICAgICAgICAgICAgfQorICAgICAgICByZXR1cm4gZGF0YTsKIAotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OwogCi0gICAgICAgIH0KKyAgICBMaW5lQ3VydmUu
cHJvdG90eXBlLmZyb21KU09OID0gZnVuY3Rpb24gKCBqc29uICkgewogCi0gICAgfSApOworICAg
ICAgICBDdXJ2ZS5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCggdGhpcywganNvbiApOwogCi0gICAg
LyoqCi0gICAgICogQGF1dGhvciB0c2NodwotICAgICAqLworICAgICAgICB0aGlzLnYxLmZyb21B
cnJheSgganNvbi52MSApOworICAgICAgICB0aGlzLnYyLmZyb21BcnJheSgganNvbi52MiApOwog
Ci0gICAgZnVuY3Rpb24gTGluZWFySW50ZXJwb2xhbnQoIHBhcmFtZXRlclBvc2l0aW9ucywgc2Ft
cGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIgKSB7CisgICAgICAgIHJldHVybiB0
aGlzOwogCi0gICAgICAgIEludGVycG9sYW50LmNhbGwoIHRoaXMsIHBhcmFtZXRlclBvc2l0aW9u
cywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIgKTsKKyAgICB9OwogCi0g
ICAgfQorICAgIGZ1bmN0aW9uIExpbmVDdXJ2ZTMoIHYxLCB2MiApIHsKIAotICAgIExpbmVhcklu
dGVycG9sYW50LnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIEludGVy
cG9sYW50LnByb3RvdHlwZSApLCB7CisgICAgICAgIEN1cnZlLmNhbGwoIHRoaXMgKTsKIAotICAg
ICAgICBjb25zdHJ1Y3RvcjogTGluZWFySW50ZXJwb2xhbnQsCisgICAgICAgIHRoaXMudHlwZSA9
ICdMaW5lQ3VydmUzJzsKIAotICAgICAgICBpbnRlcnBvbGF0ZV86IGZ1bmN0aW9uICggaTEsIHQw
LCB0LCB0MSApIHsKKyAgICAgICAgdGhpcy52MSA9IHYxIHx8IG5ldyBWZWN0b3IzKCk7CisgICAg
ICAgIHRoaXMudjIgPSB2MiB8fCBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICB2YXIgcmVz
dWx0ID0gdGhpcy5yZXN1bHRCdWZmZXIsCi0gICAgICAgICAgICAgICAgdmFsdWVzID0gdGhpcy5z
YW1wbGVWYWx1ZXMsCi0gICAgICAgICAgICAgICAgc3RyaWRlID0gdGhpcy52YWx1ZVNpemUsCisg
ICAgfQogCi0gICAgICAgICAgICAgICAgb2Zmc2V0MSA9IGkxICogc3RyaWRlLAotICAgICAgICAg
ICAgICAgIG9mZnNldDAgPSBvZmZzZXQxIC0gc3RyaWRlLAorICAgIExpbmVDdXJ2ZTMucHJvdG90
eXBlID0gT2JqZWN0LmNyZWF0ZSggQ3VydmUucHJvdG90eXBlICk7CisgICAgTGluZUN1cnZlMy5w
cm90b3R5cGUuY29uc3RydWN0b3IgPSBMaW5lQ3VydmUzOwogCi0gICAgICAgICAgICAgICAgd2Vp
Z2h0MSA9ICggdCAtIHQwICkgLyAoIHQxIC0gdDAgKSwKLSAgICAgICAgICAgICAgICB3ZWlnaHQw
ID0gMSAtIHdlaWdodDE7CisgICAgTGluZUN1cnZlMy5wcm90b3R5cGUuaXNMaW5lQ3VydmUzID0g
dHJ1ZTsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpICE9PSBzdHJpZGU7ICsrIGkg
KSB7CisgICAgTGluZUN1cnZlMy5wcm90b3R5cGUuZ2V0UG9pbnQgPSBmdW5jdGlvbiAoIHQsIG9w
dGlvbmFsVGFyZ2V0ICkgewogCi0gICAgICAgICAgICAgICAgcmVzdWx0WyBpIF0gPQotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWVzWyBvZmZzZXQwICsgaSBdICogd2VpZ2h0MCArCi0gICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbIG9mZnNldDEgKyBpIF0gKiB3ZWlnaHQxOworICAg
ICAgICB2YXIgcG9pbnQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcgVmVjdG9yMygpOwogCi0gICAg
ICAgICAgICB9CisgICAgICAgIGlmICggdCA9PT0gMSApIHsKIAotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgICAgIHBvaW50LmNvcHkoIHRoaXMudjIgKTsKIAotICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CiAKLSAgICB9ICk7CisgICAgICAgICAgICBwb2ludC5jb3B5KCB0
aGlzLnYyICkuc3ViKCB0aGlzLnYxICk7CisgICAgICAgICAgICBwb2ludC5tdWx0aXBseVNjYWxh
ciggdCApLmFkZCggdGhpcy52MSApOwogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKiBJbnRlcnBv
bGFudCB0aGF0IGV2YWx1YXRlcyB0byB0aGUgc2FtcGxlIHZhbHVlIGF0IHRoZSBwb3NpdGlvbiBw
cmVjZWVkaW5nCi0gICAgICogdGhlIHBhcmFtZXRlci4KLSAgICAgKgotICAgICAqIEBhdXRob3Ig
dHNjaHcKLSAgICAgKi8KKyAgICAgICAgfQogCi0gICAgZnVuY3Rpb24gRGlzY3JldGVJbnRlcnBv
bGFudCggcGFyYW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNpemUsIHJlc3Vs
dEJ1ZmZlciApIHsKKyAgICAgICAgcmV0dXJuIHBvaW50OwogCi0gICAgICAgIEludGVycG9sYW50
LmNhbGwoIHRoaXMsIHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXpl
LCByZXN1bHRCdWZmZXIgKTsKKyAgICB9OwogCi0gICAgfQorICAgIC8vIExpbmUgY3VydmUgaXMg
bGluZWFyLCBzbyB3ZSBjYW4gb3ZlcndyaXRlIGRlZmF1bHQgZ2V0UG9pbnRBdAogCi0gICAgRGlz
Y3JldGVJbnRlcnBvbGFudC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRl
KCBJbnRlcnBvbGFudC5wcm90b3R5cGUgKSwgeworICAgIExpbmVDdXJ2ZTMucHJvdG90eXBlLmdl
dFBvaW50QXQgPSBmdW5jdGlvbiAoIHUsIG9wdGlvbmFsVGFyZ2V0ICkgewogCi0gICAgICAgIGNv
bnN0cnVjdG9yOiBEaXNjcmV0ZUludGVycG9sYW50LAorICAgICAgICByZXR1cm4gdGhpcy5nZXRQ
b2ludCggdSwgb3B0aW9uYWxUYXJnZXQgKTsKIAotICAgICAgICBpbnRlcnBvbGF0ZV86IGZ1bmN0
aW9uICggaTEgLyosIHQwLCB0LCB0MSAqLyApIHsKKyAgICB9OwogCi0gICAgICAgICAgICByZXR1
cm4gdGhpcy5jb3B5U2FtcGxlVmFsdWVfKCBpMSAtIDEgKTsKKyAgICBMaW5lQ3VydmUzLnByb3Rv
dHlwZS5jb3B5ID0gZnVuY3Rpb24gKCBzb3VyY2UgKSB7CiAKLSAgICAgICAgfQorICAgICAgICBD
dXJ2ZS5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKIAotICAgIH0gKTsKKyAg
ICAgICAgdGhpcy52MS5jb3B5KCBzb3VyY2UudjEgKTsKKyAgICAgICAgdGhpcy52Mi5jb3B5KCBz
b3VyY2UudjIgKTsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgdHNjaHcKLSAgICAgKiBAYXV0
aG9yIEJlbiBIb3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvLwotICAgICAqIEBhdXRob3IgRGF2aWQg
U2Fybm8gLyBodHRwOi8vbGlnaHRoYXVzLnVzLwotICAgICAqLworICAgICAgICByZXR1cm4gdGhp
czsKIAotICAgIHZhciBBbmltYXRpb25VdGlscyA9IHsKKyAgICB9OwogCi0gICAgICAgIC8vIHNh
bWUgYXMgQXJyYXkucHJvdG90eXBlLnNsaWNlLCBidXQgYWxzbyB3b3JrcyBvbiB0eXBlZCBhcnJh
eXMKLSAgICAgICAgYXJyYXlTbGljZTogZnVuY3Rpb24gKCBhcnJheSwgZnJvbSwgdG8gKSB7Cisg
ICAgTGluZUN1cnZlMy5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgewogCi0gICAgICAg
ICAgICBpZiAoIEFuaW1hdGlvblV0aWxzLmlzVHlwZWRBcnJheSggYXJyYXkgKSApIHsKKyAgICAg
ICAgdmFyIGRhdGEgPSBDdXJ2ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoIHRoaXMgKTsKIAotICAg
ICAgICAgICAgICAgIC8vIGluIGlvczkgYXJyYXkuc3ViYXJyYXkoZnJvbSwgdW5kZWZpbmVkKSB3
aWxsIHJldHVybiBlbXB0eSBhcnJheQotICAgICAgICAgICAgICAgIC8vIGJ1dCBhcnJheS5zdWJh
cnJheShmcm9tKSBvciBhcnJheS5zdWJhcnJheShmcm9tLCBsZW4pIGlzIGNvcnJlY3QKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbmV3IGFycmF5LmNvbnN0cnVjdG9yKCBhcnJheS5zdWJhcnJheSgg
ZnJvbSwgdG8gIT09IHVuZGVmaW5lZCA/IHRvIDogYXJyYXkubGVuZ3RoICkgKTsKKyAgICAgICAg
ZGF0YS52MSA9IHRoaXMudjEudG9BcnJheSgpOworICAgICAgICBkYXRhLnYyID0gdGhpcy52Mi50
b0FycmF5KCk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRhdGE7CiAKLSAgICAg
ICAgICAgIHJldHVybiBhcnJheS5zbGljZSggZnJvbSwgdG8gKTsKKyAgICB9OwogCi0gICAgICAg
IH0sCisgICAgTGluZUN1cnZlMy5wcm90b3R5cGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoIGpzb24g
KSB7CiAKLSAgICAgICAgLy8gY29udmVydHMgYW4gYXJyYXkgdG8gYSBzcGVjaWZpYyB0eXBlCi0g
ICAgICAgIGNvbnZlcnRBcnJheTogZnVuY3Rpb24gKCBhcnJheSwgdHlwZSwgZm9yY2VDbG9uZSAp
IHsKKyAgICAgICAgQ3VydmUucHJvdG90eXBlLmZyb21KU09OLmNhbGwoIHRoaXMsIGpzb24gKTsK
IAotICAgICAgICAgICAgaWYgKCAhIGFycmF5IHx8IC8vIGxldCAndW5kZWZpbmVkJyBhbmQgJ251
bGwnIHBhc3MKLSAgICAgICAgICAgICAgICAgICAgISBmb3JjZUNsb25lICYmIGFycmF5LmNvbnN0
cnVjdG9yID09PSB0eXBlICkgcmV0dXJuIGFycmF5OworICAgICAgICB0aGlzLnYxLmZyb21BcnJh
eSgganNvbi52MSApOworICAgICAgICB0aGlzLnYyLmZyb21BcnJheSgganNvbi52MiApOwogCi0g
ICAgICAgICAgICBpZiAoIHR5cGVvZiB0eXBlLkJZVEVTX1BFUl9FTEVNRU5UID09PSAnbnVtYmVy
JyApIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3
IHR5cGUoIGFycmF5ICk7IC8vIGNyZWF0ZSB0eXBlZCBhcnJheQorICAgIH07CiAKLSAgICAgICAg
ICAgIH0KKyAgICBmdW5jdGlvbiBRdWFkcmF0aWNCZXppZXJDdXJ2ZSggdjAsIHYxLCB2MiApIHsK
IAotICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBhcnJheSAp
OyAvLyBjcmVhdGUgQXJyYXkKKyAgICAgICAgQ3VydmUuY2FsbCggdGhpcyApOwogCi0gICAgICAg
IH0sCisgICAgICAgIHRoaXMudHlwZSA9ICdRdWFkcmF0aWNCZXppZXJDdXJ2ZSc7CiAKLSAgICAg
ICAgaXNUeXBlZEFycmF5OiBmdW5jdGlvbiAoIG9iamVjdCApIHsKKyAgICAgICAgdGhpcy52MCA9
IHYwIHx8IG5ldyBWZWN0b3IyKCk7CisgICAgICAgIHRoaXMudjEgPSB2MSB8fCBuZXcgVmVjdG9y
MigpOworICAgICAgICB0aGlzLnYyID0gdjIgfHwgbmV3IFZlY3RvcjIoKTsKIAotICAgICAgICAg
ICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyggb2JqZWN0ICkgJiYKLSAgICAgICAgICAgICAg
ICAgICAgISAoIG9iamVjdCBpbnN0YW5jZW9mIERhdGFWaWV3ICk7CisgICAgfQogCi0gICAgICAg
IH0sCisgICAgUXVhZHJhdGljQmV6aWVyQ3VydmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSgg
Q3VydmUucHJvdG90eXBlICk7CisgICAgUXVhZHJhdGljQmV6aWVyQ3VydmUucHJvdG90eXBlLmNv
bnN0cnVjdG9yID0gUXVhZHJhdGljQmV6aWVyQ3VydmU7CiAKLSAgICAgICAgLy8gcmV0dXJucyBh
biBhcnJheSBieSB3aGljaCB0aW1lcyBhbmQgdmFsdWVzIGNhbiBiZSBzb3J0ZWQKLSAgICAgICAg
Z2V0S2V5ZnJhbWVPcmRlcjogZnVuY3Rpb24gKCB0aW1lcyApIHsKKyAgICBRdWFkcmF0aWNCZXpp
ZXJDdXJ2ZS5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IHRydWU7CiAKLSAgICAg
ICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVUaW1lKCBpLCBqICkgeworICAgIFF1YWRyYXRpY0Jlemll
ckN1cnZlLnByb3RvdHlwZS5nZXRQb2ludCA9IGZ1bmN0aW9uICggdCwgb3B0aW9uYWxUYXJnZXQg
KSB7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGltZXNbIGkgXSAtIHRpbWVzWyBqIF07Cisg
ICAgICAgIHZhciBwb2ludCA9IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBWZWN0b3IyKCk7CiAKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgdmFyIHYwID0gdGhpcy52MCwgdjEgPSB0aGlzLnYxLCB2MiA9
IHRoaXMudjI7CiAKLSAgICAgICAgICAgIHZhciBuID0gdGltZXMubGVuZ3RoOwotICAgICAgICAg
ICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheSggbiApOwotICAgICAgICAgICAgZm9yICggdmFyIGkg
PSAwOyBpICE9PSBuOyArKyBpICkgcmVzdWx0WyBpIF0gPSBpOworICAgICAgICBwb2ludC5zZXQo
CisgICAgICAgICAgICBRdWFkcmF0aWNCZXppZXIoIHQsIHYwLngsIHYxLngsIHYyLnggKSwKKyAg
ICAgICAgICAgIFF1YWRyYXRpY0JlemllciggdCwgdjAueSwgdjEueSwgdjIueSApCisgICAgICAg
ICk7CiAKLSAgICAgICAgICAgIHJlc3VsdC5zb3J0KCBjb21wYXJlVGltZSApOworICAgICAgICBy
ZXR1cm4gcG9pbnQ7CiAKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKIAotICAg
ICAgICB9LAorICAgIFF1YWRyYXRpY0JlemllckN1cnZlLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rp
b24gKCBzb3VyY2UgKSB7CiAKLSAgICAgICAgLy8gdXNlcyB0aGUgYXJyYXkgcHJldmlvdXNseSBy
ZXR1cm5lZCBieSAnZ2V0S2V5ZnJhbWVPcmRlcicgdG8gc29ydCBkYXRhCi0gICAgICAgIHNvcnRl
ZEFycmF5OiBmdW5jdGlvbiAoIHZhbHVlcywgc3RyaWRlLCBvcmRlciApIHsKKyAgICAgICAgQ3Vy
dmUucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CiAKLSAgICAgICAgICAgIHZh
ciBuVmFsdWVzID0gdmFsdWVzLmxlbmd0aDsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcg
dmFsdWVzLmNvbnN0cnVjdG9yKCBuVmFsdWVzICk7CisgICAgICAgIHRoaXMudjAuY29weSggc291
cmNlLnYwICk7CisgICAgICAgIHRoaXMudjEuY29weSggc291cmNlLnYxICk7CisgICAgICAgIHRo
aXMudjIuY29weSggc291cmNlLnYyICk7CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwg
ZHN0T2Zmc2V0ID0gMDsgZHN0T2Zmc2V0ICE9PSBuVmFsdWVzOyArKyBpICkgeworICAgICAgICBy
ZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIHZhciBzcmNPZmZzZXQgPSBvcmRlclsgaSBd
ICogc3RyaWRlOworICAgIH07CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDA7IGog
IT09IHN0cmlkZTsgKysgaiApIHsKKyAgICBRdWFkcmF0aWNCZXppZXJDdXJ2ZS5wcm90b3R5cGUu
dG9KU09OID0gZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFsgZHN0
T2Zmc2V0ICsrIF0gPSB2YWx1ZXNbIHNyY09mZnNldCArIGogXTsKKyAgICAgICAgdmFyIGRhdGEg
PSBDdXJ2ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoIHRoaXMgKTsKIAotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgZGF0YS52MCA9IHRoaXMudjAudG9BcnJheSgpOworICAgICAgICBkYXRhLnYx
ID0gdGhpcy52MS50b0FycmF5KCk7CisgICAgICAgIGRhdGEudjIgPSB0aGlzLnYyLnRvQXJyYXko
KTsKIAotICAgICAgICAgICAgfQorICAgICAgICByZXR1cm4gZGF0YTsKIAotICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9OwogCi0gICAgICAgIH0sCisgICAgUXVhZHJhdGljQmV6aWVy
Q3VydmUucHJvdG90eXBlLmZyb21KU09OID0gZnVuY3Rpb24gKCBqc29uICkgewogCi0gICAgICAg
IC8vIGZ1bmN0aW9uIGZvciBwYXJzaW5nIEFPUyBrZXlmcmFtZSBmb3JtYXRzCi0gICAgICAgIGZs
YXR0ZW5KU09OOiBmdW5jdGlvbiAoIGpzb25LZXlzLCB0aW1lcywgdmFsdWVzLCB2YWx1ZVByb3Bl
cnR5TmFtZSApIHsKKyAgICAgICAgQ3VydmUucHJvdG90eXBlLmZyb21KU09OLmNhbGwoIHRoaXMs
IGpzb24gKTsKIAotICAgICAgICAgICAgdmFyIGkgPSAxLCBrZXkgPSBqc29uS2V5c1sgMCBdOwor
ICAgICAgICB0aGlzLnYwLmZyb21BcnJheSgganNvbi52MCApOworICAgICAgICB0aGlzLnYxLmZy
b21BcnJheSgganNvbi52MSApOworICAgICAgICB0aGlzLnYyLmZyb21BcnJheSgganNvbi52MiAp
OwogCi0gICAgICAgICAgICB3aGlsZSAoIGtleSAhPT0gdW5kZWZpbmVkICYmIGtleVsgdmFsdWVQ
cm9wZXJ0eU5hbWUgXSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICByZXR1cm4gdGhpczsKIAot
ICAgICAgICAgICAgICAgIGtleSA9IGpzb25LZXlzWyBpICsrIF07CisgICAgfTsKIAotICAgICAg
ICAgICAgfQorICAgIGZ1bmN0aW9uIFF1YWRyYXRpY0JlemllckN1cnZlMyggdjAsIHYxLCB2MiAp
IHsKIAotICAgICAgICAgICAgaWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHJldHVybjsgLy8gbm8g
ZGF0YQorICAgICAgICBDdXJ2ZS5jYWxsKCB0aGlzICk7CiAKLSAgICAgICAgICAgIHZhciB2YWx1
ZSA9IGtleVsgdmFsdWVQcm9wZXJ0eU5hbWUgXTsKLSAgICAgICAgICAgIGlmICggdmFsdWUgPT09
IHVuZGVmaW5lZCApIHJldHVybjsgLy8gbm8gZGF0YQorICAgICAgICB0aGlzLnR5cGUgPSAnUXVh
ZHJhdGljQmV6aWVyQ3VydmUzJzsKIAotICAgICAgICAgICAgaWYgKCBBcnJheS5pc0FycmF5KCB2
YWx1ZSApICkgeworICAgICAgICB0aGlzLnYwID0gdjAgfHwgbmV3IFZlY3RvcjMoKTsKKyAgICAg
ICAgdGhpcy52MSA9IHYxIHx8IG5ldyBWZWN0b3IzKCk7CisgICAgICAgIHRoaXMudjIgPSB2MiB8
fCBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICAgICAgZG8geworICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICB2YWx1ZSA9IGtleVsgdmFsdWVQcm9wZXJ0eU5hbWUgXTsKKyAgICBRdWFk
cmF0aWNCZXppZXJDdXJ2ZTMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQ3VydmUucHJvdG90
eXBlICk7CisgICAgUXVhZHJhdGljQmV6aWVyQ3VydmUzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9
IFF1YWRyYXRpY0JlemllckN1cnZlMzsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVl
ICE9PSB1bmRlZmluZWQgKSB7CisgICAgUXVhZHJhdGljQmV6aWVyQ3VydmUzLnByb3RvdHlwZS5p
c1F1YWRyYXRpY0JlemllckN1cnZlMyA9IHRydWU7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRpbWVzLnB1c2goIGtleS50aW1lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMu
cHVzaC5hcHBseSggdmFsdWVzLCB2YWx1ZSApOyAvLyBwdXNoIGFsbCBlbGVtZW50cworICAgIFF1
YWRyYXRpY0JlemllckN1cnZlMy5wcm90b3R5cGUuZ2V0UG9pbnQgPSBmdW5jdGlvbiAoIHQsIG9w
dGlvbmFsVGFyZ2V0ICkgewogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgdmFyIHBv
aW50ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAgICAgICAg
ICAgICBrZXkgPSBqc29uS2V5c1sgaSArKyBdOworICAgICAgICB2YXIgdjAgPSB0aGlzLnYwLCB2
MSA9IHRoaXMudjEsIHYyID0gdGhpcy52MjsKIAotICAgICAgICAgICAgICAgIH0gd2hpbGUgKCBr
ZXkgIT09IHVuZGVmaW5lZCApOworICAgICAgICBwb2ludC5zZXQoCisgICAgICAgICAgICBRdWFk
cmF0aWNCZXppZXIoIHQsIHYwLngsIHYxLngsIHYyLnggKSwKKyAgICAgICAgICAgIFF1YWRyYXRp
Y0JlemllciggdCwgdjAueSwgdjEueSwgdjIueSApLAorICAgICAgICAgICAgUXVhZHJhdGljQmV6
aWVyKCB0LCB2MC56LCB2MS56LCB2Mi56ICkKKyAgICAgICAgKTsKIAotICAgICAgICAgICAgfSBl
bHNlIGlmICggdmFsdWUudG9BcnJheSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICByZXR1cm4g
cG9pbnQ7CiAKLSAgICAgICAgICAgICAgICAvLyAuLi5hc3N1bWUgVEhSRUUuTWF0aC1pc2gKKyAg
ICB9OwogCi0gICAgICAgICAgICAgICAgZG8geworICAgIFF1YWRyYXRpY0JlemllckN1cnZlMy5w
cm90b3R5cGUuY29weSA9IGZ1bmN0aW9uICggc291cmNlICkgewogCi0gICAgICAgICAgICAgICAg
ICAgIHZhbHVlID0ga2V5WyB2YWx1ZVByb3BlcnR5TmFtZSBdOworICAgICAgICBDdXJ2ZS5wcm90
b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKIAotICAgICAgICAgICAgICAgICAgICBp
ZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgIHRoaXMudjAuY29weSggc291cmNl
LnYwICk7CisgICAgICAgIHRoaXMudjEuY29weSggc291cmNlLnYxICk7CisgICAgICAgIHRoaXMu
djIuY29weSggc291cmNlLnYyICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzLnB1
c2goIGtleS50aW1lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS50b0FycmF5KCB2
YWx1ZXMsIHZhbHVlcy5sZW5ndGggKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAg
ICAgICAgICAgICAgfQorICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAga2V5ID0ganNvbktl
eXNbIGkgKysgXTsKKyAgICBRdWFkcmF0aWNCZXppZXJDdXJ2ZTMucHJvdG90eXBlLnRvSlNPTiA9
IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgIH0gd2hpbGUgKCBrZXkgIT09IHVuZGVm
aW5lZCApOworICAgICAgICB2YXIgZGF0YSA9IEN1cnZlLnByb3RvdHlwZS50b0pTT04uY2FsbCgg
dGhpcyApOwogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICBkYXRhLnYwID0gdGhpcy52
MC50b0FycmF5KCk7CisgICAgICAgIGRhdGEudjEgPSB0aGlzLnYxLnRvQXJyYXkoKTsKKyAgICAg
ICAgZGF0YS52MiA9IHRoaXMudjIudG9BcnJheSgpOwogCi0gICAgICAgICAgICAgICAgLy8gb3Ro
ZXJ3aXNlIHB1c2ggYXMtaXMKKyAgICAgICAgcmV0dXJuIGRhdGE7CiAKLSAgICAgICAgICAgICAg
ICBkbyB7CisgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGtleVsgdmFsdWVQ
cm9wZXJ0eU5hbWUgXTsKKyAgICBRdWFkcmF0aWNCZXppZXJDdXJ2ZTMucHJvdG90eXBlLmZyb21K
U09OID0gZnVuY3Rpb24gKCBqc29uICkgewogCi0gICAgICAgICAgICAgICAgICAgIGlmICggdmFs
dWUgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgQ3VydmUucHJvdG90eXBlLmZyb21KU09OLmNh
bGwoIHRoaXMsIGpzb24gKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdGltZXMucHVzaCgg
a2V5LnRpbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKCB2YWx1ZSAp
OworICAgICAgICB0aGlzLnYwLmZyb21BcnJheSgganNvbi52MCApOworICAgICAgICB0aGlzLnYx
LmZyb21BcnJheSgganNvbi52MSApOworICAgICAgICB0aGlzLnYyLmZyb21BcnJheSgganNvbi52
MiApOwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAg
ICAgICAgICAgICAgICAgICAga2V5ID0ganNvbktleXNbIGkgKysgXTsKKyAgICB9OwogCi0gICAg
ICAgICAgICAgICAgfSB3aGlsZSAoIGtleSAhPT0gdW5kZWZpbmVkICk7CisgICAgZnVuY3Rpb24g
U3BsaW5lQ3VydmUoIHBvaW50cyAvKiBhcnJheSBvZiBWZWN0b3IyICovICkgewogCi0gICAgICAg
ICAgICB9CisgICAgICAgIEN1cnZlLmNhbGwoIHRoaXMgKTsKIAotICAgICAgICB9CisgICAgICAg
IHRoaXMudHlwZSA9ICdTcGxpbmVDdXJ2ZSc7CiAKLSAgICB9OworICAgICAgICB0aGlzLnBvaW50
cyA9IHBvaW50cyB8fCBbXTsKIAotICAgIC8qKgotICAgICAqCi0gICAgICogQSB0aW1lZCBzZXF1
ZW5jZSBvZiBrZXlmcmFtZXMgZm9yIGEgc3BlY2lmaWMgcHJvcGVydHkuCi0gICAgICoKLSAgICAg
KgotICAgICAqIEBhdXRob3IgQmVuIEhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW8vCi0gICAgICog
QGF1dGhvciBEYXZpZCBTYXJubyAvIGh0dHA6Ly9saWdodGhhdXMudXMvCi0gICAgICogQGF1dGhv
ciB0c2NodwotICAgICAqLworICAgIH0KIAotICAgIGZ1bmN0aW9uIEtleWZyYW1lVHJhY2soIG5h
bWUsIHRpbWVzLCB2YWx1ZXMsIGludGVycG9sYXRpb24gKSB7CisgICAgU3BsaW5lQ3VydmUucHJv
dG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQ3VydmUucHJvdG90eXBlICk7CisgICAgU3BsaW5lQ3Vy
dmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3BsaW5lQ3VydmU7CiAKLSAgICAgICAgaWYgKCBu
YW1lID09PSB1bmRlZmluZWQgKSB0aHJvdyBuZXcgRXJyb3IoICdUSFJFRS5LZXlmcmFtZVRyYWNr
OiB0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCcgKTsKLSAgICAgICAgaWYgKCB0aW1lcyA9PT0gdW5k
ZWZpbmVkIHx8IHRpbWVzLmxlbmd0aCA9PT0gMCApIHRocm93IG5ldyBFcnJvciggJ1RIUkVFLktl
eWZyYW1lVHJhY2s6IG5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAnICsgbmFtZSApOworICAg
IFNwbGluZUN1cnZlLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlID0gdHJ1ZTsKIAotICAgICAgICB0
aGlzLm5hbWUgPSBuYW1lOworICAgIFNwbGluZUN1cnZlLnByb3RvdHlwZS5nZXRQb2ludCA9IGZ1
bmN0aW9uICggdCwgb3B0aW9uYWxUYXJnZXQgKSB7CiAKLSAgICAgICAgdGhpcy50aW1lcyA9IEFu
aW1hdGlvblV0aWxzLmNvbnZlcnRBcnJheSggdGltZXMsIHRoaXMuVGltZUJ1ZmZlclR5cGUgKTsK
LSAgICAgICAgdGhpcy52YWx1ZXMgPSBBbmltYXRpb25VdGlscy5jb252ZXJ0QXJyYXkoIHZhbHVl
cywgdGhpcy5WYWx1ZUJ1ZmZlclR5cGUgKTsKKyAgICAgICAgdmFyIHBvaW50ID0gb3B0aW9uYWxU
YXJnZXQgfHwgbmV3IFZlY3RvcjIoKTsKIAotICAgICAgICB0aGlzLnNldEludGVycG9sYXRpb24o
IGludGVycG9sYXRpb24gfHwgdGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbiApOworICAgICAgICB2
YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7CisgICAgICAgIHZhciBwID0gKCBwb2ludHMubGVuZ3Ro
IC0gMSApICogdDsKIAotICAgICAgICB0aGlzLnZhbGlkYXRlKCk7Ci0gICAgICAgIHRoaXMub3B0
aW1pemUoKTsKKyAgICAgICAgdmFyIGludFBvaW50ID0gTWF0aC5mbG9vciggcCApOworICAgICAg
ICB2YXIgd2VpZ2h0ID0gcCAtIGludFBvaW50OwogCi0gICAgfQorICAgICAgICB2YXIgcDAgPSBw
b2ludHNbIGludFBvaW50ID09PSAwID8gaW50UG9pbnQgOiBpbnRQb2ludCAtIDEgXTsKKyAgICAg
ICAgdmFyIHAxID0gcG9pbnRzWyBpbnRQb2ludCBdOworICAgICAgICB2YXIgcDIgPSBwb2ludHNb
IGludFBvaW50ID4gcG9pbnRzLmxlbmd0aCAtIDIgPyBwb2ludHMubGVuZ3RoIC0gMSA6IGludFBv
aW50ICsgMSBdOworICAgICAgICB2YXIgcDMgPSBwb2ludHNbIGludFBvaW50ID4gcG9pbnRzLmxl
bmd0aCAtIDMgPyBwb2ludHMubGVuZ3RoIC0gMSA6IGludFBvaW50ICsgMiBdOwogCi0gICAgLy8g
U3RhdGljIG1ldGhvZHM6CisgICAgICAgIHBvaW50LnNldCgKKyAgICAgICAgICAgIENhdG11bGxS
b20oIHdlaWdodCwgcDAueCwgcDEueCwgcDIueCwgcDMueCApLAorICAgICAgICAgICAgQ2F0bXVs
bFJvbSggd2VpZ2h0LCBwMC55LCBwMS55LCBwMi55LCBwMy55ICkKKyAgICAgICAgKTsKIAotICAg
IE9iamVjdC5hc3NpZ24oIEtleWZyYW1lVHJhY2ssIHsKKyAgICAgICAgcmV0dXJuIHBvaW50Owog
Ci0gICAgICAgIC8vIFNlcmlhbGl6YXRpb24gKGluIHN0YXRpYyBjb250ZXh0LCBiZWNhdXNlIG9m
IGNvbnN0cnVjdG9yIGludm9jYXRpb24KLSAgICAgICAgLy8gYW5kIGF1dG9tYXRpYyBpbnZvY2F0
aW9uIG9mIC50b0pTT04pOgorICAgIH07CiAKLSAgICAgICAgcGFyc2U6IGZ1bmN0aW9uICgganNv
biApIHsKKyAgICBTcGxpbmVDdXJ2ZS5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uICggc291cmNl
ICkgewogCi0gICAgICAgICAgICBpZiAoIGpzb24udHlwZSA9PT0gdW5kZWZpbmVkICkgeworICAg
ICAgICBDdXJ2ZS5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKIAotICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvciggJ1RIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIHR5
cGUgdW5kZWZpbmVkLCBjYW4gbm90IHBhcnNlJyApOworICAgICAgICB0aGlzLnBvaW50cyA9IFtd
OwogCi0gICAgICAgICAgICB9CisgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHNvdXJjZS5w
b2ludHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICAgICAgdmFyIHRyYWNrVHlw
ZSA9IEtleWZyYW1lVHJhY2suX2dldFRyYWNrVHlwZUZvclZhbHVlVHlwZU5hbWUoIGpzb24udHlw
ZSApOworICAgICAgICAgICAgdmFyIHBvaW50ID0gc291cmNlLnBvaW50c1sgaSBdOwogCi0gICAg
ICAgICAgICBpZiAoIGpzb24udGltZXMgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHRo
aXMucG9pbnRzLnB1c2goIHBvaW50LmNsb25lKCkgKTsKIAotICAgICAgICAgICAgICAgIHZhciB0
aW1lcyA9IFtdLCB2YWx1ZXMgPSBbXTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgQW5p
bWF0aW9uVXRpbHMuZmxhdHRlbkpTT04oIGpzb24ua2V5cywgdGltZXMsIHZhbHVlcywgJ3ZhbHVl
JyApOworICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIGpzb24udGltZXMg
PSB0aW1lczsKLSAgICAgICAgICAgICAgICBqc29uLnZhbHVlcyA9IHZhbHVlczsKKyAgICB9Owog
Ci0gICAgICAgICAgICB9CisgICAgU3BsaW5lQ3VydmUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0
aW9uICgpIHsKIAotICAgICAgICAgICAgLy8gZGVyaXZlZCBjbGFzc2VzIGNhbiBkZWZpbmUgYSBz
dGF0aWMgcGFyc2UgbWV0aG9kCi0gICAgICAgICAgICBpZiAoIHRyYWNrVHlwZS5wYXJzZSAhPT0g
dW5kZWZpbmVkICkgeworICAgICAgICB2YXIgZGF0YSA9IEN1cnZlLnByb3RvdHlwZS50b0pTT04u
Y2FsbCggdGhpcyApOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRyYWNrVHlwZS5wYXJzZSgg
anNvbiApOworICAgICAgICBkYXRhLnBvaW50cyA9IFtdOwogCi0gICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLnBvaW50cy5sZW5ndGg7IGkgPCBs
OyBpICsrICkgewogCi0gICAgICAgICAgICAgICAgLy8gYnkgZGVmYXVsdCwgd2UgYXNzdW1lIGEg
Y29uc3RydWN0b3IgY29tcGF0aWJsZSB3aXRoIHRoZSBiYXNlCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG5ldyB0cmFja1R5cGUoIGpzb24ubmFtZSwganNvbi50aW1lcywganNvbi52YWx1ZXMsIGpz
b24uaW50ZXJwb2xhdGlvbiApOworICAgICAgICAgICAgdmFyIHBvaW50ID0gdGhpcy5wb2ludHNb
IGkgXTsKKyAgICAgICAgICAgIGRhdGEucG9pbnRzLnB1c2goIHBvaW50LnRvQXJyYXkoKSApOwog
Ci0gICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICB9LAorICAgICAgICByZXR1cm4g
ZGF0YTsKIAotICAgICAgICB0b0pTT046IGZ1bmN0aW9uICggdHJhY2sgKSB7CisgICAgfTsKIAot
ICAgICAgICAgICAgdmFyIHRyYWNrVHlwZSA9IHRyYWNrLmNvbnN0cnVjdG9yOworICAgIFNwbGlu
ZUN1cnZlLnByb3RvdHlwZS5mcm9tSlNPTiA9IGZ1bmN0aW9uICgganNvbiApIHsKIAotICAgICAg
ICAgICAgdmFyIGpzb247CisgICAgICAgIEN1cnZlLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKCB0
aGlzLCBqc29uICk7CiAKLSAgICAgICAgICAgIC8vIGRlcml2ZWQgY2xhc3NlcyBjYW4gZGVmaW5l
IGEgc3RhdGljIHRvSlNPTiBtZXRob2QKLSAgICAgICAgICAgIGlmICggdHJhY2tUeXBlLnRvSlNP
TiAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICB0aGlzLnBvaW50cyA9IFtdOwogCi0gICAgICAg
ICAgICAgICAganNvbiA9IHRyYWNrVHlwZS50b0pTT04oIHRyYWNrICk7CisgICAgICAgIGZvciAo
IHZhciBpID0gMCwgbCA9IGpzb24ucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgcG9pbnQgPSBqc29uLnBvaW50c1sg
aSBdOworICAgICAgICAgICAgdGhpcy5wb2ludHMucHVzaCggbmV3IFZlY3RvcjIoKS5mcm9tQXJy
YXkoIHBvaW50ICkgKTsKIAotICAgICAgICAgICAgICAgIC8vIGJ5IGRlZmF1bHQsIHdlIGFzc3Vt
ZSB0aGUgZGF0YSBjYW4gYmUgc2VyaWFsaXplZCBhcy1pcwotICAgICAgICAgICAgICAgIGpzb24g
PSB7CisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAnbmFtZSc6IHRyYWNrLm5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICd0aW1lcyc6IEFuaW1hdGlvblV0aWxzLmNvbnZlcnRBcnJh
eSggdHJhY2sudGltZXMsIEFycmF5ICksCi0gICAgICAgICAgICAgICAgICAgICd2YWx1ZXMnOiBB
bmltYXRpb25VdGlscy5jb252ZXJ0QXJyYXkoIHRyYWNrLnZhbHVlcywgQXJyYXkgKQorICAgICAg
ICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIH07CisgICAgfTsKIAotICAgICAgICAg
ICAgICAgIHZhciBpbnRlcnBvbGF0aW9uID0gdHJhY2suZ2V0SW50ZXJwb2xhdGlvbigpOwogCi0g
ICAgICAgICAgICAgICAgaWYgKCBpbnRlcnBvbGF0aW9uICE9PSB0cmFjay5EZWZhdWx0SW50ZXJw
b2xhdGlvbiApIHsKIAotICAgICAgICAgICAgICAgICAgICBqc29uLmludGVycG9sYXRpb24gPSBp
bnRlcnBvbGF0aW9uOworICAgIHZhciBDdXJ2ZXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6
ZSh7CisgICAgICAgIEFyY0N1cnZlOiBBcmNDdXJ2ZSwKKyAgICAgICAgQ2F0bXVsbFJvbUN1cnZl
MzogQ2F0bXVsbFJvbUN1cnZlMywKKyAgICAgICAgQ3ViaWNCZXppZXJDdXJ2ZTogQ3ViaWNCZXpp
ZXJDdXJ2ZSwKKyAgICAgICAgQ3ViaWNCZXppZXJDdXJ2ZTM6IEN1YmljQmV6aWVyQ3VydmUzLAor
ICAgICAgICBFbGxpcHNlQ3VydmU6IEVsbGlwc2VDdXJ2ZSwKKyAgICAgICAgTGluZUN1cnZlOiBM
aW5lQ3VydmUsCisgICAgICAgIExpbmVDdXJ2ZTM6IExpbmVDdXJ2ZTMsCisgICAgICAgIFF1YWRy
YXRpY0JlemllckN1cnZlOiBRdWFkcmF0aWNCZXppZXJDdXJ2ZSwKKyAgICAgICAgUXVhZHJhdGlj
QmV6aWVyQ3VydmUzOiBRdWFkcmF0aWNCZXppZXJDdXJ2ZTMsCisgICAgICAgIFNwbGluZUN1cnZl
OiBTcGxpbmVDdXJ2ZQorICAgIH0pOwogCi0gICAgICAgICAgICAgICAgfQorICAgIC8qKgorICAg
ICAqIEBhdXRob3Igeno4NSAvIGh0dHA6Ly93d3cubGFiNGdhbWVzLm5ldC96ejg1L2Jsb2cKKyAg
ICAgKgorICAgICAqKi8KIAotICAgICAgICAgICAgfQorICAgIC8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqICBDdXJ2
ZWQgUGF0aCAtIGEgY3VydmUgcGF0aCBpcyBzaW1wbHkgYSBhcnJheSBvZiBjb25uZWN0ZWQKKyAg
ICAgKiAgY3VydmVzLCBidXQgcmV0YWlucyB0aGUgYXBpIG9mIGEgY3VydmUKKyAgICAgKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CiAKLSAgICAgICAgICAgIGpzb24udHlwZSA9IHRyYWNrLlZhbHVlVHlwZU5hbWU7IC8vIG1hbmRh
dG9yeQorICAgIGZ1bmN0aW9uIEN1cnZlUGF0aCgpIHsKIAotICAgICAgICAgICAgcmV0dXJuIGpz
b247CisgICAgICAgIEN1cnZlLmNhbGwoIHRoaXMgKTsKIAotICAgICAgICB9LAorICAgICAgICB0
aGlzLnR5cGUgPSAnQ3VydmVQYXRoJzsKIAotICAgICAgICBfZ2V0VHJhY2tUeXBlRm9yVmFsdWVU
eXBlTmFtZTogZnVuY3Rpb24gKCB0eXBlTmFtZSApIHsKKyAgICAgICAgdGhpcy5jdXJ2ZXMgPSBb
XTsKKyAgICAgICAgdGhpcy5hdXRvQ2xvc2UgPSBmYWxzZTsgLy8gQXV0b21hdGljYWxseSBjbG9z
ZXMgdGhlIHBhdGgKIAotICAgICAgICAgICAgc3dpdGNoICggdHlwZU5hbWUudG9Mb3dlckNhc2Uo
KSApIHsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICBjYXNlICdzY2FsYXInOgotICAgICAgICAg
ICAgICAgIGNhc2UgJ2RvdWJsZSc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnZmxvYXQnOgotICAg
ICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6Ci0gICAgICAgICAgICAgICAgY2FzZSAnaW50ZWdl
cic6CisgICAgQ3VydmVQYXRoLnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVh
dGUoIEN1cnZlLnByb3RvdHlwZSApLCB7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51
bWJlcktleWZyYW1lVHJhY2s7CisgICAgICAgIGNvbnN0cnVjdG9yOiBDdXJ2ZVBhdGgsCiAKLSAg
ICAgICAgICAgICAgICBjYXNlICd2ZWN0b3InOgotICAgICAgICAgICAgICAgIGNhc2UgJ3ZlY3Rv
cjInOgotICAgICAgICAgICAgICAgIGNhc2UgJ3ZlY3RvcjMnOgotICAgICAgICAgICAgICAgIGNh
c2UgJ3ZlY3RvcjQnOgorICAgICAgICBhZGQ6IGZ1bmN0aW9uICggY3VydmUgKSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFZlY3RvcktleWZyYW1lVHJhY2s7CisgICAgICAgICAgICB0
aGlzLmN1cnZlcy5wdXNoKCBjdXJ2ZSApOwogCi0gICAgICAgICAgICAgICAgY2FzZSAnY29sb3In
OgorICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2xvcktleWZyYW1l
VHJhY2s7CisgICAgICAgIGNsb3NlUGF0aDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAg
ICAgY2FzZSAncXVhdGVybmlvbic6CisgICAgICAgICAgICAvLyBBZGQgYSBsaW5lIGN1cnZlIGlm
IHN0YXJ0IGFuZCBlbmQgb2YgbGluZXMgYXJlIG5vdCBjb25uZWN0ZWQKKyAgICAgICAgICAgIHZh
ciBzdGFydFBvaW50ID0gdGhpcy5jdXJ2ZXNbIDAgXS5nZXRQb2ludCggMCApOworICAgICAgICAg
ICAgdmFyIGVuZFBvaW50ID0gdGhpcy5jdXJ2ZXNbIHRoaXMuY3VydmVzLmxlbmd0aCAtIDEgXS5n
ZXRQb2ludCggMSApOwogCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBRdWF0ZXJuaW9uS2V5
ZnJhbWVUcmFjazsKKyAgICAgICAgICAgIGlmICggISBzdGFydFBvaW50LmVxdWFscyggZW5kUG9p
bnQgKSApIHsKIAotICAgICAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOgotICAgICAgICAgICAgICAg
IGNhc2UgJ2Jvb2xlYW4nOgorICAgICAgICAgICAgICAgIHRoaXMuY3VydmVzLnB1c2goIG5ldyBM
aW5lQ3VydmUoIGVuZFBvaW50LCBzdGFydFBvaW50ICkgKTsKIAotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gQm9vbGVhbktleWZyYW1lVHJhY2s7CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICBjYXNlICdzdHJpbmcnOgorICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBTdHJpbmdLZXlmcmFtZVRyYWNrOworICAgICAgICAvLyBUbyBnZXQgYWNjdXJhdGUg
cG9pbnQgd2l0aCByZWZlcmVuY2UgdG8KKyAgICAgICAgLy8gZW50aXJlIHBhdGggZGlzdGFuY2Ug
YXQgdGltZSB0LAorICAgICAgICAvLyBmb2xsb3dpbmcgaGFzIHRvIGJlIGRvbmU6CiAKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgLy8gMS4gTGVuZ3RoIG9mIGVhY2ggc3ViIHBhdGggaGF2ZSB0byBi
ZSBrbm93bgorICAgICAgICAvLyAyLiBMb2NhdGUgYW5kIGlkZW50aWZ5IHR5cGUgb2YgY3VydmUK
KyAgICAgICAgLy8gMy4gR2V0IHQgZm9yIHRoZSBjdXJ2ZQorICAgICAgICAvLyA0LiBSZXR1cm4g
Y3VydmUuZ2V0UG9pbnRBdCh0JykKIAotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCAnVEhS
RUUuS2V5ZnJhbWVUcmFjazogVW5zdXBwb3J0ZWQgdHlwZU5hbWU6ICcgKyB0eXBlTmFtZSApOwor
ICAgICAgICBnZXRQb2ludDogZnVuY3Rpb24gKCB0ICkgewogCi0gICAgICAgIH0KKyAgICAgICAg
ICAgIHZhciBkID0gdCAqIHRoaXMuZ2V0TGVuZ3RoKCk7CisgICAgICAgICAgICB2YXIgY3VydmVM
ZW5ndGhzID0gdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTsKKyAgICAgICAgICAgIHZhciBpID0gMDsK
IAotICAgIH0gKTsKKyAgICAgICAgICAgIC8vIFRvIHRoaW5rIGFib3V0IGJvdW5kYXJpZXMgcG9p
bnRzLgogCi0gICAgT2JqZWN0LmFzc2lnbiggS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUsIHsKKyAg
ICAgICAgICAgIHdoaWxlICggaSA8IGN1cnZlTGVuZ3Rocy5sZW5ndGggKSB7CiAKLSAgICAgICAg
Y29uc3RydWN0b3I6IEtleWZyYW1lVHJhY2ssCisgICAgICAgICAgICAgICAgaWYgKCBjdXJ2ZUxl
bmd0aHNbIGkgXSA+PSBkICkgewogCi0gICAgICAgIFRpbWVCdWZmZXJUeXBlOiBGbG9hdDMyQXJy
YXksCisgICAgICAgICAgICAgICAgICAgIHZhciBkaWZmID0gY3VydmVMZW5ndGhzWyBpIF0gLSBk
OworICAgICAgICAgICAgICAgICAgICB2YXIgY3VydmUgPSB0aGlzLmN1cnZlc1sgaSBdOwogCi0g
ICAgICAgIFZhbHVlQnVmZmVyVHlwZTogRmxvYXQzMkFycmF5LAorICAgICAgICAgICAgICAgICAg
ICB2YXIgc2VnbWVudExlbmd0aCA9IGN1cnZlLmdldExlbmd0aCgpOworICAgICAgICAgICAgICAg
ICAgICB2YXIgdSA9IHNlZ21lbnRMZW5ndGggPT09IDAgPyAwIDogMSAtIGRpZmYgLyBzZWdtZW50
TGVuZ3RoOwogCi0gICAgICAgIERlZmF1bHRJbnRlcnBvbGF0aW9uOiBJbnRlcnBvbGF0ZUxpbmVh
ciwKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnZlLmdldFBvaW50QXQoIHUgKTsKIAot
ICAgICAgICBJbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTogZnVuY3Rpb24gKCByZXN1
bHQgKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gbmV3IERpc2Ny
ZXRlSW50ZXJwb2xhbnQoIHRoaXMudGltZXMsIHRoaXMudmFsdWVzLCB0aGlzLmdldFZhbHVlU2l6
ZSgpLCByZXN1bHQgKTsKKyAgICAgICAgICAgICAgICBpICsrOwogCi0gICAgICAgIH0sCisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOiBmdW5j
dGlvbiAoIHJlc3VsdCApIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwogCi0gICAgICAgICAg
ICByZXR1cm4gbmV3IExpbmVhckludGVycG9sYW50KCB0aGlzLnRpbWVzLCB0aGlzLnZhbHVlcywg
dGhpcy5nZXRWYWx1ZVNpemUoKSwgcmVzdWx0ICk7CisgICAgICAgICAgICAvLyBsb29wIHdoZXJl
IHN1bSAhPSAwLCBzdW0gPiBkICwgc3VtKzEgPGQKIAogICAgICAgICB9LAogCi0gICAgICAgIElu
dGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDogZnVuY3Rpb24gKCByZXN1bHQgKSB7CisgICAg
ICAgIC8vIFdlIGNhbm5vdCB1c2UgdGhlIGRlZmF1bHQgVEhSRUUuQ3VydmUgZ2V0UG9pbnQoKSB3
aXRoIGdldExlbmd0aCgpIGJlY2F1c2UgaW4KKyAgICAgICAgLy8gVEhSRUUuQ3VydmUsIGdldExl
bmd0aCgpIGRlcGVuZHMgb24gZ2V0UG9pbnQoKSBidXQgaW4gVEhSRUUuQ3VydmVQYXRoCisgICAg
ICAgIC8vIGdldFBvaW50KCkgZGVwZW5kcyBvbiBnZXRMZW5ndGgKIAotICAgICAgICAgICAgcmV0
dXJuIG5ldyBDdWJpY0ludGVycG9sYW50KCB0aGlzLnRpbWVzLCB0aGlzLnZhbHVlcywgdGhpcy5n
ZXRWYWx1ZVNpemUoKSwgcmVzdWx0ICk7CisgICAgICAgIGdldExlbmd0aDogZnVuY3Rpb24gKCkg
eworCisgICAgICAgICAgICB2YXIgbGVucyA9IHRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7CisgICAg
ICAgICAgICByZXR1cm4gbGVuc1sgbGVucy5sZW5ndGggLSAxIF07CiAKICAgICAgICAgfSwKIAot
ICAgICAgICBzZXRJbnRlcnBvbGF0aW9uOiBmdW5jdGlvbiAoIGludGVycG9sYXRpb24gKSB7Cisg
ICAgICAgIC8vIGNhY2hlTGVuZ3RocyBtdXN0IGJlIHJlY2FsY3VsYXRlZC4KKyAgICAgICAgdXBk
YXRlQXJjTGVuZ3RoczogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICB2YXIgZmFjdG9yeU1l
dGhvZDsKKyAgICAgICAgICAgIHRoaXMubmVlZHNVcGRhdGUgPSB0cnVlOworICAgICAgICAgICAg
dGhpcy5jYWNoZUxlbmd0aHMgPSBudWxsOworICAgICAgICAgICAgdGhpcy5nZXRDdXJ2ZUxlbmd0
aHMoKTsKIAotICAgICAgICAgICAgc3dpdGNoICggaW50ZXJwb2xhdGlvbiApIHsKKyAgICAgICAg
fSwKIAotICAgICAgICAgICAgICAgIGNhc2UgSW50ZXJwb2xhdGVEaXNjcmV0ZToKKyAgICAgICAg
Ly8gQ29tcHV0ZSBsZW5ndGhzIGFuZCBjYWNoZSB0aGVtCisgICAgICAgIC8vIFdlIGNhbm5vdCBv
dmVyd3JpdGUgZ2V0TGVuZ3RocygpIGJlY2F1c2UgVXRvVCBtYXBwaW5nIHVzZXMgaXQuCiAKLSAg
ICAgICAgICAgICAgICAgICAgZmFjdG9yeU1ldGhvZCA9IHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5
TWV0aG9kRGlzY3JldGU7CisgICAgICAgIGdldEN1cnZlTGVuZ3RoczogZnVuY3Rpb24gKCkgewog
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gV2UgdXNlIGNhY2hl
IHZhbHVlcyBpZiBjdXJ2ZXMgYW5kIGNhY2hlIGFycmF5IGFyZSBzYW1lIGxlbmd0aAogCi0gICAg
ICAgICAgICAgICAgY2FzZSBJbnRlcnBvbGF0ZUxpbmVhcjoKKyAgICAgICAgICAgIGlmICggdGhp
cy5jYWNoZUxlbmd0aHMgJiYgdGhpcy5jYWNoZUxlbmd0aHMubGVuZ3RoID09PSB0aGlzLmN1cnZl
cy5sZW5ndGggKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgZmFjdG9yeU1ldGhvZCA9IHRoaXMu
SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOworICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLmNhY2hlTGVuZ3RoczsKIAotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIGNhc2UgSW50ZXJwb2xhdGVTbW9vdGg6CisgICAgICAg
ICAgICAvLyBHZXQgbGVuZ3RoIG9mIHN1Yi1jdXJ2ZQorICAgICAgICAgICAgLy8gUHVzaCBzdW1z
IGludG8gY2FjaGVkIGFycmF5CiAKLSAgICAgICAgICAgICAgICAgICAgZmFjdG9yeU1ldGhvZCA9
IHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOworICAgICAgICAgICAgdmFyIGxl
bmd0aHMgPSBbXSwgc3VtcyA9IDA7CiAKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmN1cnZlcy5sZW5ndGg7IGkgPCBsOyBp
ICsrICkgeworCisgICAgICAgICAgICAgICAgc3VtcyArPSB0aGlzLmN1cnZlc1sgaSBdLmdldExl
bmd0aCgpOworICAgICAgICAgICAgICAgIGxlbmd0aHMucHVzaCggc3VtcyApOwogCiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmICggZmFjdG9yeU1ldGhvZCA9PT0gdW5kZWZpbmVkICkg
eworICAgICAgICAgICAgdGhpcy5jYWNoZUxlbmd0aHMgPSBsZW5ndGhzOwogCi0gICAgICAgICAg
ICAgICAgdmFyIG1lc3NhZ2UgPSAidW5zdXBwb3J0ZWQgaW50ZXJwb2xhdGlvbiBmb3IgIiArCi0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuVmFsdWVUeXBlTmFtZSArICIga2V5ZnJhbWUgdHJhY2sg
bmFtZWQgIiArIHRoaXMubmFtZTsKKyAgICAgICAgICAgIHJldHVybiBsZW5ndGhzOwogCi0gICAg
ICAgICAgICAgICAgaWYgKCB0aGlzLmNyZWF0ZUludGVycG9sYW50ID09PSB1bmRlZmluZWQgKSB7
CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgLy8gZmFsbCBiYWNrIHRvIGRlZmF1
bHQsIHVubGVzcyB0aGUgZGVmYXVsdCBpdHNlbGYgaXMgbWVzc2VkIHVwCi0gICAgICAgICAgICAg
ICAgICAgIGlmICggaW50ZXJwb2xhdGlvbiAhPT0gdGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbiAp
IHsKKyAgICAgICAgZ2V0U3BhY2VkUG9pbnRzOiBmdW5jdGlvbiAoIGRpdmlzaW9ucyApIHsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJbnRlcnBvbGF0aW9uKCB0aGlzLkRlZmF1
bHRJbnRlcnBvbGF0aW9uICk7CisgICAgICAgICAgICBpZiAoIGRpdmlzaW9ucyA9PT0gdW5kZWZp
bmVkICkgZGl2aXNpb25zID0gNDA7CiAKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHZhciBwb2ludHMgPSBbXTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCBtZXNzYWdlICk7IC8vIGZhdGFsLCBpbiB0aGlzIGNhc2UKKyAgICAgICAg
ICAgIGZvciAoIHZhciBpID0gMDsgaSA8PSBkaXZpc2lvbnM7IGkgKysgKSB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKCB0aGlzLmdldFBvaW50
KCBpIC8gZGl2aXNpb25zICkgKTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLktleWZyYW1lVHJhY2s6Jywg
bWVzc2FnZSApOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICggdGhp
cy5hdXRvQ2xvc2UgKSB7CisKKyAgICAgICAgICAgICAgICBwb2ludHMucHVzaCggcG9pbnRzWyAw
IF0gKTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLmNyZWF0ZUludGVycG9s
YW50ID0gZmFjdG9yeU1ldGhvZDsKKyAgICAgICAgICAgIHJldHVybiBwb2ludHM7CiAKICAgICAg
ICAgfSwKIAotICAgICAgICBnZXRJbnRlcnBvbGF0aW9uOiBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGdldFBvaW50czogZnVuY3Rpb24gKCBkaXZpc2lvbnMgKSB7CiAKLSAgICAgICAgICAgIHN3aXRj
aCAoIHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQgKSB7CisgICAgICAgICAgICBkaXZpc2lvbnMgPSBk
aXZpc2lvbnMgfHwgMTI7CiAKLSAgICAgICAgICAgICAgICBjYXNlIHRoaXMuSW50ZXJwb2xhbnRG
YWN0b3J5TWV0aG9kRGlzY3JldGU6CisgICAgICAgICAgICB2YXIgcG9pbnRzID0gW10sIGxhc3Q7
CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEludGVycG9sYXRlRGlzY3JldGU7CisgICAg
ICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGN1cnZlcyA9IHRoaXMuY3VydmVzOyBpIDwgY3VydmVz
Lmxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgIGNhc2UgdGhpcy5JbnRlcnBvbGFu
dEZhY3RvcnlNZXRob2RMaW5lYXI6CisgICAgICAgICAgICAgICAgdmFyIGN1cnZlID0gY3VydmVz
WyBpIF07CisgICAgICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSAoIGN1cnZlICYmIGN1cnZl
LmlzRWxsaXBzZUN1cnZlICkgPyBkaXZpc2lvbnMgKiAyCisgICAgICAgICAgICAgICAgICAgIDog
KCBjdXJ2ZSAmJiAoIGN1cnZlLmlzTGluZUN1cnZlIHx8IGN1cnZlLmlzTGluZUN1cnZlMyApICkg
PyAxCisgICAgICAgICAgICAgICAgICAgICAgICA6ICggY3VydmUgJiYgY3VydmUuaXNTcGxpbmVD
dXJ2ZSApID8gZGl2aXNpb25zICogY3VydmUucG9pbnRzLmxlbmd0aAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogZGl2aXNpb25zOwogCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBJ
bnRlcnBvbGF0ZUxpbmVhcjsKKyAgICAgICAgICAgICAgICB2YXIgcHRzID0gY3VydmUuZ2V0UG9p
bnRzKCByZXNvbHV0aW9uICk7CiAKLSAgICAgICAgICAgICAgICBjYXNlIHRoaXMuSW50ZXJwb2xh
bnRGYWN0b3J5TWV0aG9kU21vb3RoOgorICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0gMDsg
aiA8IHB0cy5sZW5ndGg7IGogKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElu
dGVycG9sYXRlU21vb3RoOworICAgICAgICAgICAgICAgICAgICB2YXIgcG9pbnQgPSBwdHNbIGog
XTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIGxhc3QgJiYgbGFzdC5lcXVhbHMoIHBvaW50
ICkgKSBjb250aW51ZTsgLy8gZW5zdXJlcyBubyBjb25zZWN1dGl2ZSBwb2ludHMgYXJlIGR1cGxp
Y2F0ZXMKKworICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCggcG9pbnQgKTsKKyAgICAg
ICAgICAgICAgICAgICAgbGFzdCA9IHBvaW50OworCisgICAgICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIGlmICggdGhpcy5hdXRvQ2xvc2Ug
JiYgcG9pbnRzLmxlbmd0aCA+IDEgJiYgISBwb2ludHNbIHBvaW50cy5sZW5ndGggLSAxIF0uZXF1
YWxzKCBwb2ludHNbIDAgXSApICkgewogCi0gICAgICAgIGdldFZhbHVlU2l6ZTogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKCBwb2ludHNbIDAgXSApOwogCi0gICAg
ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoIC8gdGhpcy50aW1lcy5sZW5ndGg7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwb2ludHM7CiAKICAgICAgICAgfSwK
IAotICAgICAgICAvLyBtb3ZlIGFsbCBrZXlmcmFtZXMgZWl0aGVyIGZvcndhcmRzIG9yIGJhY2t3
YXJkcyBpbiB0aW1lCi0gICAgICAgIHNoaWZ0OiBmdW5jdGlvbiAoIHRpbWVPZmZzZXQgKSB7Cisg
ICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkgewogCi0gICAgICAgICAgICBpZiAoIHRp
bWVPZmZzZXQgIT09IDAuMCApIHsKKyAgICAgICAgICAgIEN1cnZlLnByb3RvdHlwZS5jb3B5LmNh
bGwoIHRoaXMsIHNvdXJjZSApOwogCi0gICAgICAgICAgICAgICAgdmFyIHRpbWVzID0gdGhpcy50
aW1lczsKKyAgICAgICAgICAgIHRoaXMuY3VydmVzID0gW107CiAKLSAgICAgICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IDAsIG4gPSB0aW1lcy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7CisgICAg
ICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBzb3VyY2UuY3VydmVzLmxlbmd0aDsgaSA8IGw7
IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgdGltZXNbIGkgXSArPSB0aW1lT2Zmc2V0
OworICAgICAgICAgICAgICAgIHZhciBjdXJ2ZSA9IHNvdXJjZS5jdXJ2ZXNbIGkgXTsKIAotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLmN1cnZlcy5wdXNoKCBjdXJ2ZS5j
bG9uZSgpICk7CiAKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgdGhpcy5hdXRvQ2xvc2Ug
PSBzb3VyY2UuYXV0b0Nsb3NlOworCiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAg
ICB9LAogCi0gICAgICAgIC8vIHNjYWxlIGFsbCBrZXlmcmFtZSB0aW1lcyBieSBhIGZhY3RvciAo
dXNlZnVsIGZvciBmcmFtZSA8LT4gc2Vjb25kcyBjb252ZXJzaW9ucykKLSAgICAgICAgc2NhbGU6
IGZ1bmN0aW9uICggdGltZVNjYWxlICkgewotCi0gICAgICAgICAgICBpZiAoIHRpbWVTY2FsZSAh
PT0gMS4wICkgeworICAgICAgICB0b0pTT046IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAg
ICAgIHZhciB0aW1lcyA9IHRoaXMudGltZXM7CisgICAgICAgICAgICB2YXIgZGF0YSA9IEN1cnZl
LnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcyApOwogCi0gICAgICAgICAgICAgICAgZm9yICgg
dmFyIGkgPSAwLCBuID0gdGltZXMubGVuZ3RoOyBpICE9PSBuOyArKyBpICkgeworICAgICAgICAg
ICAgZGF0YS5hdXRvQ2xvc2UgPSB0aGlzLmF1dG9DbG9zZTsKKyAgICAgICAgICAgIGRhdGEuY3Vy
dmVzID0gW107CiAKLSAgICAgICAgICAgICAgICAgICAgdGltZXNbIGkgXSAqPSB0aW1lU2NhbGU7
CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmN1cnZlcy5sZW5ndGg7IGkg
PCBsOyBpICsrICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBj
dXJ2ZSA9IHRoaXMuY3VydmVzWyBpIF07CisgICAgICAgICAgICAgICAgZGF0YS5jdXJ2ZXMucHVz
aCggY3VydmUudG9KU09OKCkgKTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgIHJldHVybiBkYXRhOwogCiAgICAgICAgIH0sCiAKLSAgICAg
ICAgLy8gcmVtb3ZlcyBrZXlmcmFtZXMgYmVmb3JlIGFuZCBhZnRlciBhbmltYXRpb24gd2l0aG91
dCBjaGFuZ2luZyBhbnkgdmFsdWVzIHdpdGhpbiB0aGUgcmFuZ2UgW3N0YXJ0VGltZSwgZW5kVGlt
ZV0uCi0gICAgICAgIC8vIElNUE9SVEFOVDogV2UgZG8gbm90IHNoaWZ0IGFyb3VuZCBrZXlzIHRv
IHRoZSBzdGFydCBvZiB0aGUgdHJhY2sgdGltZSwgYmVjYXVzZSBmb3IgaW50ZXJwb2xhdGVkIGtl
eXMgdGhpcyB3aWxsIGNoYW5nZSB0aGVpciB2YWx1ZXMKLSAgICAgICAgdHJpbTogZnVuY3Rpb24g
KCBzdGFydFRpbWUsIGVuZFRpbWUgKSB7Ci0KLSAgICAgICAgICAgIHZhciB0aW1lcyA9IHRoaXMu
dGltZXMsCi0gICAgICAgICAgICAgICAgbktleXMgPSB0aW1lcy5sZW5ndGgsCi0gICAgICAgICAg
ICAgICAgZnJvbSA9IDAsCi0gICAgICAgICAgICAgICAgdG8gPSBuS2V5cyAtIDE7Ci0KLSAgICAg
ICAgICAgIHdoaWxlICggZnJvbSAhPT0gbktleXMgJiYgdGltZXNbIGZyb20gXSA8IHN0YXJ0VGlt
ZSApIHsKKyAgICAgICAgZnJvbUpTT046IGZ1bmN0aW9uICgganNvbiApIHsKIAotICAgICAgICAg
ICAgICAgICsrIGZyb207CisgICAgICAgICAgICBDdXJ2ZS5wcm90b3R5cGUuZnJvbUpTT04uY2Fs
bCggdGhpcywganNvbiApOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmF1dG9D
bG9zZSA9IGpzb24uYXV0b0Nsb3NlOworICAgICAgICAgICAgdGhpcy5jdXJ2ZXMgPSBbXTsKIAot
ICAgICAgICAgICAgd2hpbGUgKCB0byAhPT0gLSAxICYmIHRpbWVzWyB0byBdID4gZW5kVGltZSAp
IHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGpzb24uY3VydmVzLmxlbmd0aDsg
aSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICAtLSB0bzsKKyAgICAgICAgICAgICAg
ICB2YXIgY3VydmUgPSBqc29uLmN1cnZlc1sgaSBdOworICAgICAgICAgICAgICAgIHRoaXMuY3Vy
dmVzLnB1c2goIG5ldyBDdXJ2ZXNbIGN1cnZlLnR5cGUgXSgpLmZyb21KU09OKCBjdXJ2ZSApICk7
CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgKysgdG87IC8vIGluY2x1c2l2ZSAtPiBl
eGNsdXNpdmUgYm91bmQKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICBp
ZiAoIGZyb20gIT09IDAgfHwgdG8gIT09IG5LZXlzICkgeworICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAvLyBlbXB0eSB0cmFja3MgYXJlIGZvcmJpZGRlbiwgc28ga2VlcCBhdCBsZWFzdCBv
bmUga2V5ZnJhbWUKLSAgICAgICAgICAgICAgICBpZiAoIGZyb20gPj0gdG8gKSB0byA9IE1hdGgu
bWF4KCB0bywgMSApLCBmcm9tID0gdG8gLSAxOwotCi0gICAgICAgICAgICAgICAgdmFyIHN0cmlk
ZSA9IHRoaXMuZ2V0VmFsdWVTaXplKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy50aW1lcyA9IEFu
aW1hdGlvblV0aWxzLmFycmF5U2xpY2UoIHRpbWVzLCBmcm9tLCB0byApOwotICAgICAgICAgICAg
ICAgIHRoaXMudmFsdWVzID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSggdGhpcy52YWx1ZXMs
IGZyb20gKiBzdHJpZGUsIHRvICogc3RyaWRlICk7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7Ci0KLSAgICAgICAgfSwKLQotICAgICAgICAvLyBlbnN1cmUgd2Ug
ZG8gbm90IGdldCBhIEdhcmJhZ2VJbkdhcmJhZ2VPdXQgc2l0dWF0aW9uLCBtYWtlIHN1cmUgdHJh
Y2tzIGFyZSBhdCBsZWFzdCBtaW5pbWFsbHkgdmlhYmxlCi0gICAgICAgIHZhbGlkYXRlOiBmdW5j
dGlvbiAoKSB7Ci0KLSAgICAgICAgICAgIHZhciB2YWxpZCA9IHRydWU7Ci0KLSAgICAgICAgICAg
IHZhciB2YWx1ZVNpemUgPSB0aGlzLmdldFZhbHVlU2l6ZSgpOwotICAgICAgICAgICAgaWYgKCB2
YWx1ZVNpemUgLSBNYXRoLmZsb29yKCB2YWx1ZVNpemUgKSAhPT0gMCApIHsKLQotICAgICAgICAg
ICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5LZXlmcmFtZVRyYWNrOiBJbnZhbGlkIHZhbHVl
IHNpemUgaW4gdHJhY2suJywgdGhpcyApOwotICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7
Ci0KLSAgICAgICAgICAgIH0KKyAgICB9ICk7CiAKLSAgICAgICAgICAgIHZhciB0aW1lcyA9IHRo
aXMudGltZXMsCi0gICAgICAgICAgICAgICAgdmFsdWVzID0gdGhpcy52YWx1ZXMsCisgICAgLyoq
CisgICAgICogQGF1dGhvciB6ejg1IC8gaHR0cDovL3d3dy5sYWI0Z2FtZXMubmV0L3p6ODUvYmxv
ZworICAgICAqIENyZWF0ZXMgZnJlZSBmb3JtIDJkIHBhdGggdXNpbmcgc2VyaWVzIG9mIHBvaW50
cywgbGluZXMgb3IgY3VydmVzLgorICAgICAqKi8KIAotICAgICAgICAgICAgICAgIG5LZXlzID0g
dGltZXMubGVuZ3RoOworICAgIGZ1bmN0aW9uIFBhdGgoIHBvaW50cyApIHsKIAotICAgICAgICAg
ICAgaWYgKCBuS2V5cyA9PT0gMCApIHsKKyAgICAgICAgQ3VydmVQYXRoLmNhbGwoIHRoaXMgKTsK
IAotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5LZXlmcmFtZVRyYWNrOiBU
cmFjayBpcyBlbXB0eS4nLCB0aGlzICk7Ci0gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy50eXBlID0gJ1BhdGgnOwogCi0gICAgICAgICAgICB9CisgICAgICAgIHRo
aXMuY3VycmVudFBvaW50ID0gbmV3IFZlY3RvcjIoKTsKIAotICAgICAgICAgICAgdmFyIHByZXZU
aW1lID0gbnVsbDsKKyAgICAgICAgaWYgKCBwb2ludHMgKSB7CiAKLSAgICAgICAgICAgIGZvciAo
IHZhciBpID0gMDsgaSAhPT0gbktleXM7IGkgKysgKSB7CisgICAgICAgICAgICB0aGlzLnNldEZy
b21Qb2ludHMoIHBvaW50cyApOwogCi0gICAgICAgICAgICAgICAgdmFyIGN1cnJUaW1lID0gdGlt
ZXNbIGkgXTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY3VyclRp
bWUgPT09ICdudW1iZXInICYmIGlzTmFOKCBjdXJyVGltZSApICkgeworICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBp
cyBub3QgYSB2YWxpZCBudW1iZXIuJywgdGhpcywgaSwgY3VyclRpbWUgKTsKLSAgICAgICAgICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
UGF0aC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBDdXJ2ZVBhdGgu
cHJvdG90eXBlICksIHsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgY29uc3RydWN0b3I6
IFBhdGgsCiAKLSAgICAgICAgICAgICAgICBpZiAoIHByZXZUaW1lICE9PSBudWxsICYmIHByZXZU
aW1lID4gY3VyclRpbWUgKSB7CisgICAgICAgIHNldEZyb21Qb2ludHM6IGZ1bmN0aW9uICggcG9p
bnRzICkgewogCi0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5LZXlm
cmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4nLCB0aGlzLCBpLCBjdXJyVGltZSwgcHJldlRp
bWUgKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB0aGlzLm1vdmVUbyggcG9pbnRzWyAwIF0ueCwgcG9p
bnRzWyAwIF0ueSApOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICggdmFy
IGkgPSAxLCBsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgICAg
ICAgICBwcmV2VGltZSA9IGN1cnJUaW1lOworICAgICAgICAgICAgICAgIHRoaXMubGluZVRvKCBw
b2ludHNbIGkgXS54LCBwb2ludHNbIGkgXS55ICk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgaWYgKCB2YWx1ZXMgIT09IHVuZGVmaW5lZCApIHsKLQotICAgICAgICAgICAgICAgIGlm
ICggQW5pbWF0aW9uVXRpbHMuaXNUeXBlZEFycmF5KCB2YWx1ZXMgKSApIHsKLQotICAgICAgICAg
ICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIG4gPSB2YWx1ZXMubGVuZ3RoOyBpICE9PSBuOyAr
KyBpICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbIGkg
XTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc05hTiggdmFsdWUgKSApIHsKKyAg
ICAgICAgfSwKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdU
SFJFRS5LZXlmcmFtZVRyYWNrOiBWYWx1ZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuJywgdGhpcywg
aSwgdmFsdWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtb3ZlVG86IGZ1bmN0
aW9uICggeCwgeSApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy5jdXJyZW50UG9pbnQuc2V0KCB4LCB5ICk7IC8vIFRPRE8gY29uc2lkZXIgcmVmZXJlbmNp
bmcgdmVjdG9ycyBpbnN0ZWFkIG9mIGNvcHlpbmc/CiAKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICBsaW5lVG86IGZ1bmN0aW9u
ICggeCwgeSApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGN1cnZlID0gbmV3
IExpbmVDdXJ2ZSggdGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSwgbmV3IFZlY3RvcjIoIHgsIHkg
KSApOworICAgICAgICAgICAgdGhpcy5jdXJ2ZXMucHVzaCggY3VydmUgKTsKIAotICAgICAgICAg
ICAgcmV0dXJuIHZhbGlkOworICAgICAgICAgICAgdGhpcy5jdXJyZW50UG9pbnQuc2V0KCB4LCB5
ICk7CiAKICAgICAgICAgfSwKIAotICAgICAgICAvLyByZW1vdmVzIGVxdWl2YWxlbnQgc2VxdWVu
dGlhbCBrZXlzIGFzIGNvbW1vbiBpbiBtb3JwaCB0YXJnZXQgc2VxdWVuY2VzCi0gICAgICAgIC8v
ICgwLDAsMCwwLDEsMSwxLDAsMCwwLDAsMCwwLDApIC0tPiAoMCwwLDEsMSwwLDApCi0gICAgICAg
IG9wdGltaXplOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHF1YWRyYXRpY0N1cnZlVG86IGZ1bmN0
aW9uICggYUNQeCwgYUNQeSwgYVgsIGFZICkgewogCi0gICAgICAgICAgICB2YXIgdGltZXMgPSB0
aGlzLnRpbWVzLAotICAgICAgICAgICAgICAgIHZhbHVlcyA9IHRoaXMudmFsdWVzLAotICAgICAg
ICAgICAgICAgIHN0cmlkZSA9IHRoaXMuZ2V0VmFsdWVTaXplKCksCisgICAgICAgICAgICB2YXIg
Y3VydmUgPSBuZXcgUXVhZHJhdGljQmV6aWVyQ3VydmUoCisgICAgICAgICAgICAgICAgdGhpcy5j
dXJyZW50UG9pbnQuY2xvbmUoKSwKKyAgICAgICAgICAgICAgICBuZXcgVmVjdG9yMiggYUNQeCwg
YUNQeSApLAorICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IyKCBhWCwgYVkgKQorICAgICAgICAg
ICAgKTsKIAotICAgICAgICAgICAgICAgIHNtb290aEludGVycG9sYXRpb24gPSB0aGlzLmdldElu
dGVycG9sYXRpb24oKSA9PT0gSW50ZXJwb2xhdGVTbW9vdGgsCisgICAgICAgICAgICB0aGlzLmN1
cnZlcy5wdXNoKCBjdXJ2ZSApOwogCi0gICAgICAgICAgICAgICAgd3JpdGVJbmRleCA9IDEsCi0g
ICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gdGltZXMubGVuZ3RoIC0gMTsKKyAgICAgICAgICAg
IHRoaXMuY3VycmVudFBvaW50LnNldCggYVgsIGFZICk7CiAKLSAgICAgICAgICAgIGZvciAoIHZh
ciBpID0gMTsgaSA8IGxhc3RJbmRleDsgKysgaSApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAg
ICAgICAgIHZhciBrZWVwID0gZmFsc2U7CisgICAgICAgIGJlemllckN1cnZlVG86IGZ1bmN0aW9u
ICggYUNQMXgsIGFDUDF5LCBhQ1AyeCwgYUNQMnksIGFYLCBhWSApIHsKIAotICAgICAgICAgICAg
ICAgIHZhciB0aW1lID0gdGltZXNbIGkgXTsKLSAgICAgICAgICAgICAgICB2YXIgdGltZU5leHQg
PSB0aW1lc1sgaSArIDEgXTsKKyAgICAgICAgICAgIHZhciBjdXJ2ZSA9IG5ldyBDdWJpY0Jlemll
ckN1cnZlKAorICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksCisgICAg
ICAgICAgICAgICAgbmV3IFZlY3RvcjIoIGFDUDF4LCBhQ1AxeSApLAorICAgICAgICAgICAgICAg
IG5ldyBWZWN0b3IyKCBhQ1AyeCwgYUNQMnkgKSwKKyAgICAgICAgICAgICAgICBuZXcgVmVjdG9y
MiggYVgsIGFZICkKKyAgICAgICAgICAgICk7CiAKLSAgICAgICAgICAgICAgICAvLyByZW1vdmUg
YWRqYWNlbnQga2V5ZnJhbWVzIHNjaGVkdWxlZCBhdCB0aGUgc2FtZSB0aW1lCisgICAgICAgICAg
ICB0aGlzLmN1cnZlcy5wdXNoKCBjdXJ2ZSApOwogCi0gICAgICAgICAgICAgICAgaWYgKCB0aW1l
ICE9PSB0aW1lTmV4dCAmJiAoIGkgIT09IDEgfHwgdGltZSAhPT0gdGltZVsgMCBdICkgKSB7Cisg
ICAgICAgICAgICB0aGlzLmN1cnJlbnRQb2ludC5zZXQoIGFYLCBhWSApOwogCi0gICAgICAgICAg
ICAgICAgICAgIGlmICggISBzbW9vdGhJbnRlcnBvbGF0aW9uICkgeworICAgICAgICB9LAogCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgdW5uZWNlc3Nhcnkga2V5ZnJhbWVzIHNh
bWUgYXMgdGhlaXIgbmVpZ2hib3JzCisgICAgICAgIHNwbGluZVRocnU6IGZ1bmN0aW9uICggcHRz
IC8qQXJyYXkgb2YgVmVjdG9yKi8gKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBv
ZmZzZXQgPSBpICogc3RyaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFAg
PSBvZmZzZXQgLSBzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0TiA9
IG9mZnNldCArIHN0cmlkZTsKKyAgICAgICAgICAgIHZhciBucHRzID0gWyB0aGlzLmN1cnJlbnRQ
b2ludC5jbG9uZSgpIF0uY29uY2F0KCBwdHMgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICggdmFyIGogPSAwOyBqICE9PSBzdHJpZGU7ICsrIGogKSB7CisgICAgICAgICAgICB2YXIg
Y3VydmUgPSBuZXcgU3BsaW5lQ3VydmUoIG5wdHMgKTsKKyAgICAgICAgICAgIHRoaXMuY3VydmVz
LnB1c2goIGN1cnZlICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUg
PSB2YWx1ZXNbIG9mZnNldCArIGogXTsKKyAgICAgICAgICAgIHRoaXMuY3VycmVudFBvaW50LmNv
cHkoIHB0c1sgcHRzLmxlbmd0aCAtIDEgXSApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCB2YWx1ZSAhPT0gdmFsdWVzWyBvZmZzZXRQICsgaiBdIHx8Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlICE9PSB2YWx1ZXNbIG9mZnNldE4gKyBqIF0gKSB7Cisg
ICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VlcCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBhcmM6IGZ1
bmN0aW9uICggYVgsIGFZLCBhUmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3
aXNlICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFy
IHgwID0gdGhpcy5jdXJyZW50UG9pbnQueDsKKyAgICAgICAgICAgIHZhciB5MCA9IHRoaXMuY3Vy
cmVudFBvaW50Lnk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuYWJzYXJjKCBhWCArIHgwLCBhWSArIHkwLCBhUmFkaXVzLAorICAgICAgICAgICAgICAgIGFT
dGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UgKTsKIAotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAgICAgICBrZWVwID0g
dHJ1ZTsKKyAgICAgICAgYWJzYXJjOiBmdW5jdGlvbiAoIGFYLCBhWSwgYVJhZGl1cywgYVN0YXJ0
QW5nbGUsIGFFbmRBbmdsZSwgYUNsb2Nrd2lzZSApIHsKIAotICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB0aGlzLmFic2VsbGlwc2UoIGFYLCBhWSwgYVJhZGl1cywgYVJhZGl1cywg
YVN0YXJ0QW5nbGUsIGFFbmRBbmdsZSwgYUNsb2Nrd2lzZSApOwogCi0gICAgICAgICAgICAgICAg
fQorICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgLy8gaW4tcGxhY2UgY29tcGFjdGlvbgor
ICAgICAgICBlbGxpcHNlOiBmdW5jdGlvbiAoIGFYLCBhWSwgeFJhZGl1cywgeVJhZGl1cywgYVN0
YXJ0QW5nbGUsIGFFbmRBbmdsZSwgYUNsb2Nrd2lzZSwgYVJvdGF0aW9uICkgewogCi0gICAgICAg
ICAgICAgICAgaWYgKCBrZWVwICkgeworICAgICAgICAgICAgdmFyIHgwID0gdGhpcy5jdXJyZW50
UG9pbnQueDsKKyAgICAgICAgICAgIHZhciB5MCA9IHRoaXMuY3VycmVudFBvaW50Lnk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCBpICE9PSB3cml0ZUluZGV4ICkgeworICAgICAgICAgICAg
dGhpcy5hYnNlbGxpcHNlKCBhWCArIHgwLCBhWSArIHkwLCB4UmFkaXVzLCB5UmFkaXVzLCBhU3Rh
cnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlLCBhUm90YXRpb24gKTsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZXNbIHdyaXRlSW5kZXggXSA9IHRpbWVzWyBpIF07CisgICAgICAg
IH0sCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkT2Zmc2V0ID0gaSAqIHN0cmlk
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZU9mZnNldCA9IHdyaXRlSW5kZXgg
KiBzdHJpZGU7CisgICAgICAgIGFic2VsbGlwc2U6IGZ1bmN0aW9uICggYVgsIGFZLCB4UmFkaXVz
LCB5UmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlLCBhUm90YXRpb24g
KSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0gMDsgaiAhPT0gc3Ry
aWRlOyArKyBqICkgeworICAgICAgICAgICAgdmFyIGN1cnZlID0gbmV3IEVsbGlwc2VDdXJ2ZSgg
YVgsIGFZLCB4UmFkaXVzLCB5UmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3
aXNlLCBhUm90YXRpb24gKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1sg
d3JpdGVPZmZzZXQgKyBqIF0gPSB2YWx1ZXNbIHJlYWRPZmZzZXQgKyBqIF07CisgICAgICAgICAg
ICBpZiAoIHRoaXMuY3VydmVzLmxlbmd0aCA+IDAgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAvLyBpZiBhIHByZXZpb3VzIGN1cnZlIGlzIHByZXNlbnQs
IGF0dGVtcHQgdG8gam9pbgorICAgICAgICAgICAgICAgIHZhciBmaXJzdFBvaW50ID0gY3VydmUu
Z2V0UG9pbnQoIDAgKTsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKCAhIGZpcnN0UG9pbnQuZXF1YWxzKCB0aGlzLmN1cnJlbnRQb2ludCApICkgewogCi0gICAg
ICAgICAgICAgICAgICAgICsrIHdyaXRlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
bGluZVRvKCBmaXJzdFBvaW50LngsIGZpcnN0UG9pbnQueSApOwogCiAgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIGZsdXNoIGxhc3Qga2V5ZnJhbWUg
KGNvbXBhY3Rpb24gbG9va3MgYWhlYWQpCi0KLSAgICAgICAgICAgIGlmICggbGFzdEluZGV4ID4g
MCApIHsKLQotICAgICAgICAgICAgICAgIHRpbWVzWyB3cml0ZUluZGV4IF0gPSB0aW1lc1sgbGFz
dEluZGV4IF07Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgcmVhZE9mZnNldCA9IGxhc3RJ
bmRleCAqIHN0cmlkZSwgd3JpdGVPZmZzZXQgPSB3cml0ZUluZGV4ICogc3RyaWRlLCBqID0gMDsg
aiAhPT0gc3RyaWRlOyArKyBqICkgewotCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlc1sgd3Jp
dGVPZmZzZXQgKyBqIF0gPSB2YWx1ZXNbIHJlYWRPZmZzZXQgKyBqIF07Ci0KLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLmN1cnZlcy5wdXNoKCBjdXJ2ZSApOwogCi0gICAgICAg
ICAgICAgICAgKysgd3JpdGVJbmRleDsKKyAgICAgICAgICAgIHZhciBsYXN0UG9pbnQgPSBjdXJ2
ZS5nZXRQb2ludCggMSApOworICAgICAgICAgICAgdGhpcy5jdXJyZW50UG9pbnQuY29weSggbGFz
dFBvaW50ICk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgfSwKIAotICAgICAgICAgICAgaWYg
KCB3cml0ZUluZGV4ICE9PSB0aW1lcy5sZW5ndGggKSB7CisgICAgICAgIGNvcHk6IGZ1bmN0aW9u
ICggc291cmNlICkgewogCi0gICAgICAgICAgICAgICAgdGhpcy50aW1lcyA9IEFuaW1hdGlvblV0
aWxzLmFycmF5U2xpY2UoIHRpbWVzLCAwLCB3cml0ZUluZGV4ICk7Ci0gICAgICAgICAgICAgICAg
dGhpcy52YWx1ZXMgPSBBbmltYXRpb25VdGlscy5hcnJheVNsaWNlKCB2YWx1ZXMsIDAsIHdyaXRl
SW5kZXggKiBzdHJpZGUgKTsKKyAgICAgICAgICAgIEN1cnZlUGF0aC5wcm90b3R5cGUuY29weS5j
YWxsKCB0aGlzLCBzb3VyY2UgKTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5j
dXJyZW50UG9pbnQuY29weSggc291cmNlLmN1cnJlbnRQb2ludCApOwogCiAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKIAotICAgICAgICB9CisgICAgICAgIH0sCiAKLSAgICB9ICk7CisgICAgICAg
IHRvSlNPTjogZnVuY3Rpb24gKCkgewogCi0gICAgLyoqCi0gICAgICoKLSAgICAgKiBBIFRyYWNr
IG9mIHZlY3RvcmVkIGtleWZyYW1lIHZhbHVlcy4KLSAgICAgKgotICAgICAqCi0gICAgICogQGF1
dGhvciBCZW4gSG91c3RvbiAvIGh0dHA6Ly9jbGFyYS5pby8KLSAgICAgKiBAYXV0aG9yIERhdmlk
IFNhcm5vIC8gaHR0cDovL2xpZ2h0aGF1cy51cy8KLSAgICAgKiBAYXV0aG9yIHRzY2h3Ci0gICAg
ICovCisgICAgICAgICAgICB2YXIgZGF0YSA9IEN1cnZlUGF0aC5wcm90b3R5cGUudG9KU09OLmNh
bGwoIHRoaXMgKTsKIAotICAgIGZ1bmN0aW9uIFZlY3RvcktleWZyYW1lVHJhY2soIG5hbWUsIHRp
bWVzLCB2YWx1ZXMsIGludGVycG9sYXRpb24gKSB7CisgICAgICAgICAgICBkYXRhLmN1cnJlbnRQ
b2ludCA9IHRoaXMuY3VycmVudFBvaW50LnRvQXJyYXkoKTsKIAotICAgICAgICBLZXlmcmFtZVRy
YWNrLmNhbGwoIHRoaXMsIG5hbWUsIHRpbWVzLCB2YWx1ZXMsIGludGVycG9sYXRpb24gKTsKKyAg
ICAgICAgICAgIHJldHVybiBkYXRhOwogCi0gICAgfQorICAgICAgICB9LAogCi0gICAgVmVjdG9y
S2V5ZnJhbWVUcmFjay5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBL
ZXlmcmFtZVRyYWNrLnByb3RvdHlwZSApLCB7CisgICAgICAgIGZyb21KU09OOiBmdW5jdGlvbiAo
IGpzb24gKSB7CiAKLSAgICAgICAgY29uc3RydWN0b3I6IFZlY3RvcktleWZyYW1lVHJhY2ssCisg
ICAgICAgICAgICBDdXJ2ZVBhdGgucHJvdG90eXBlLmZyb21KU09OLmNhbGwoIHRoaXMsIGpzb24g
KTsKIAotICAgICAgICBWYWx1ZVR5cGVOYW1lOiAndmVjdG9yJworICAgICAgICAgICAgdGhpcy5j
dXJyZW50UG9pbnQuZnJvbUFycmF5KCBqc29uLmN1cnJlbnRQb2ludCApOwogCi0gICAgICAgIC8v
IFZhbHVlQnVmZmVyVHlwZSBpcyBpbmhlcml0ZWQKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwog
Ci0gICAgICAgIC8vIERlZmF1bHRJbnRlcnBvbGF0aW9uIGlzIGluaGVyaXRlZAorICAgICAgICB9
CiAKICAgICB9ICk7CiAKICAgICAvKioKLSAgICAgKgotICAgICAqIFJldXNhYmxlIHNldCBvZiBU
cmFja3MgdGhhdCByZXByZXNlbnQgYW4gYW5pbWF0aW9uLgotICAgICAqCi0gICAgICogQGF1dGhv
ciBCZW4gSG91c3RvbiAvIGh0dHA6Ly9jbGFyYS5pby8KLSAgICAgKiBAYXV0aG9yIERhdmlkIFNh
cm5vIC8gaHR0cDovL2xpZ2h0aGF1cy51cy8KLSAgICAgKi8KLQotICAgIGZ1bmN0aW9uIEFuaW1h
dGlvbkNsaXAoIG5hbWUsIGR1cmF0aW9uLCB0cmFja3MgKSB7CisgICAgICogQGF1dGhvciB6ejg1
IC8gaHR0cDovL3d3dy5sYWI0Z2FtZXMubmV0L3p6ODUvYmxvZworICAgICAqIERlZmluZXMgYSAy
ZCBzaGFwZSBwbGFuZSB1c2luZyBwYXRocy4KKyAgICAgKiovCiAKLSAgICAgICAgdGhpcy5uYW1l
ID0gbmFtZTsKLSAgICAgICAgdGhpcy50cmFja3MgPSB0cmFja3M7Ci0gICAgICAgIHRoaXMuZHVy
YXRpb24gPSAoIGR1cmF0aW9uICE9PSB1bmRlZmluZWQgKSA/IGR1cmF0aW9uIDogLSAxOworICAg
IC8vIFNURVAgMSBDcmVhdGUgYSBwYXRoLgorICAgIC8vIFNURVAgMiBUdXJuIHBhdGggaW50byBz
aGFwZS4KKyAgICAvLyBTVEVQIDMgRXh0cnVkZUdlb21ldHJ5IHRha2VzIGluIFNoYXBlL1NoYXBl
cworICAgIC8vIFNURVAgM2EgLSBFeHRyYWN0IHBvaW50cyBmcm9tIGVhY2ggc2hhcGUsIHR1cm4g
dG8gdmVydGljZXMKKyAgICAvLyBTVEVQIDNiIC0gVHJpYW5ndWxhdGUgZWFjaCBzaGFwZSwgYWRk
IGZhY2VzLgogCi0gICAgICAgIHRoaXMudXVpZCA9IF9NYXRoLmdlbmVyYXRlVVVJRCgpOworICAg
IGZ1bmN0aW9uIFNoYXBlKCBwb2ludHMgKSB7CiAKLSAgICAgICAgLy8gdGhpcyBtZWFucyBpdCBz
aG91bGQgZmlndXJlIG91dCBpdHMgZHVyYXRpb24gYnkgc2Nhbm5pbmcgdGhlIHRyYWNrcwotICAg
ICAgICBpZiAoIHRoaXMuZHVyYXRpb24gPCAwICkgeworICAgICAgICBQYXRoLmNhbGwoIHRoaXMs
IHBvaW50cyApOwogCi0gICAgICAgICAgICB0aGlzLnJlc2V0RHVyYXRpb24oKTsKKyAgICAgICAg
dGhpcy51dWlkID0gX01hdGguZ2VuZXJhdGVVVUlEKCk7CiAKLSAgICAgICAgfQorICAgICAgICB0
aGlzLnR5cGUgPSAnU2hhcGUnOwogCi0gICAgICAgIHRoaXMub3B0aW1pemUoKTsKKyAgICAgICAg
dGhpcy5ob2xlcyA9IFtdOwogCiAgICAgfQogCi0gICAgT2JqZWN0LmFzc2lnbiggQW5pbWF0aW9u
Q2xpcCwgeworICAgIFNoYXBlLnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVh
dGUoIFBhdGgucHJvdG90eXBlICksIHsKIAotICAgICAgICBwYXJzZTogZnVuY3Rpb24gKCBqc29u
ICkgeworICAgICAgICBjb25zdHJ1Y3RvcjogU2hhcGUsCiAKLSAgICAgICAgICAgIHZhciB0cmFj
a3MgPSBbXSwKLSAgICAgICAgICAgICAgICBqc29uVHJhY2tzID0ganNvbi50cmFja3MsCi0gICAg
ICAgICAgICAgICAgZnJhbWVUaW1lID0gMS4wIC8gKCBqc29uLmZwcyB8fCAxLjAgKTsKKyAgICAg
ICAgZ2V0UG9pbnRzSG9sZXM6IGZ1bmN0aW9uICggZGl2aXNpb25zICkgewogCi0gICAgICAgICAg
ICBmb3IgKCB2YXIgaSA9IDAsIG4gPSBqc29uVHJhY2tzLmxlbmd0aDsgaSAhPT0gbjsgKysgaSAp
IHsKKyAgICAgICAgICAgIHZhciBob2xlc1B0cyA9IFtdOworCisgICAgICAgICAgICBmb3IgKCB2
YXIgaSA9IDAsIGwgPSB0aGlzLmhvbGVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAg
ICAgICAgICAgICB0cmFja3MucHVzaCggS2V5ZnJhbWVUcmFjay5wYXJzZSgganNvblRyYWNrc1sg
aSBdICkuc2NhbGUoIGZyYW1lVGltZSApICk7CisgICAgICAgICAgICAgICAgaG9sZXNQdHNbIGkg
XSA9IHRoaXMuaG9sZXNbIGkgXS5nZXRQb2ludHMoIGRpdmlzaW9ucyApOwogCiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgQW5pbWF0aW9uQ2xpcCgganNvbi5uYW1lLCBq
c29uLmR1cmF0aW9uLCB0cmFja3MgKTsKKyAgICAgICAgICAgIHJldHVybiBob2xlc1B0czsKIAog
ICAgICAgICB9LAogCi0gICAgICAgIHRvSlNPTjogZnVuY3Rpb24gKCBjbGlwICkgeworICAgICAg
ICAvLyBnZXQgcG9pbnRzIG9mIHNoYXBlIGFuZCBob2xlcyAoa2V5cG9pbnRzIGJhc2VkIG9uIHNl
Z21lbnRzIHBhcmFtZXRlcikKIAotICAgICAgICAgICAgdmFyIHRyYWNrcyA9IFtdLAotICAgICAg
ICAgICAgICAgIGNsaXBUcmFja3MgPSBjbGlwLnRyYWNrczsKKyAgICAgICAgZXh0cmFjdFBvaW50
czogZnVuY3Rpb24gKCBkaXZpc2lvbnMgKSB7CiAKLSAgICAgICAgICAgIHZhciBqc29uID0gewor
ICAgICAgICAgICAgcmV0dXJuIHsKIAotICAgICAgICAgICAgICAgICduYW1lJzogY2xpcC5uYW1l
LAotICAgICAgICAgICAgICAgICdkdXJhdGlvbic6IGNsaXAuZHVyYXRpb24sCi0gICAgICAgICAg
ICAgICAgJ3RyYWNrcyc6IHRyYWNrcywKLSAgICAgICAgICAgICAgICAndXVpZCc6IGNsaXAudXVp
ZAorICAgICAgICAgICAgICAgIHNoYXBlOiB0aGlzLmdldFBvaW50cyggZGl2aXNpb25zICksCisg
ICAgICAgICAgICAgICAgaG9sZXM6IHRoaXMuZ2V0UG9pbnRzSG9sZXMoIGRpdmlzaW9ucyApCiAK
ICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbiA9IGNsaXBU
cmFja3MubGVuZ3RoOyBpICE9PSBuOyArKyBpICkgewotCi0gICAgICAgICAgICAgICAgdHJhY2tz
LnB1c2goIEtleWZyYW1lVHJhY2sudG9KU09OKCBjbGlwVHJhY2tzWyBpIF0gKSApOworICAgICAg
ICB9LAogCi0gICAgICAgICAgICB9CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkg
ewogCi0gICAgICAgICAgICByZXR1cm4ganNvbjsKKyAgICAgICAgICAgIFBhdGgucHJvdG90eXBl
LmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIHRo
aXMuaG9sZXMgPSBbXTsKIAotICAgICAgICBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZTog
ZnVuY3Rpb24gKCBuYW1lLCBtb3JwaFRhcmdldFNlcXVlbmNlLCBmcHMsIG5vTG9vcCApIHsKKyAg
ICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHNvdXJjZS5ob2xlcy5sZW5ndGg7IGkgPCBs
OyBpICsrICkgewogCi0gICAgICAgICAgICB2YXIgbnVtTW9ycGhUYXJnZXRzID0gbW9ycGhUYXJn
ZXRTZXF1ZW5jZS5sZW5ndGg7Ci0gICAgICAgICAgICB2YXIgdHJhY2tzID0gW107CisgICAgICAg
ICAgICAgICAgdmFyIGhvbGUgPSBzb3VyY2UuaG9sZXNbIGkgXTsKIAotICAgICAgICAgICAgZm9y
ICggdmFyIGkgPSAwOyBpIDwgbnVtTW9ycGhUYXJnZXRzOyBpICsrICkgeworICAgICAgICAgICAg
ICAgIHRoaXMuaG9sZXMucHVzaCggaG9sZS5jbG9uZSgpICk7CiAKLSAgICAgICAgICAgICAgICB2
YXIgdGltZXMgPSBbXTsKLSAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gW107CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICB0aW1lcy5wdXNoKAotICAgICAgICAgICAgICAgICAg
ICAoIGkgKyBudW1Nb3JwaFRhcmdldHMgLSAxICkgJSBudW1Nb3JwaFRhcmdldHMsCi0gICAgICAg
ICAgICAgICAgICAgIGksCi0gICAgICAgICAgICAgICAgICAgICggaSArIDEgKSAlIG51bU1vcnBo
VGFyZ2V0cyApOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICB2
YWx1ZXMucHVzaCggMCwgMSwgMCApOworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgdmFy
IG9yZGVyID0gQW5pbWF0aW9uVXRpbHMuZ2V0S2V5ZnJhbWVPcmRlciggdGltZXMgKTsKLSAgICAg
ICAgICAgICAgICB0aW1lcyA9IEFuaW1hdGlvblV0aWxzLnNvcnRlZEFycmF5KCB0aW1lcywgMSwg
b3JkZXIgKTsKLSAgICAgICAgICAgICAgICB2YWx1ZXMgPSBBbmltYXRpb25VdGlscy5zb3J0ZWRB
cnJheSggdmFsdWVzLCAxLCBvcmRlciApOworICAgICAgICB0b0pTT046IGZ1bmN0aW9uICgpIHsK
IAotICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGEga2V5IGF0IHRoZSBmaXJzdCBmcmFt
ZSwgZHVwbGljYXRlIGl0IGFzIHRoZQotICAgICAgICAgICAgICAgIC8vIGxhc3QgZnJhbWUgYXMg
d2VsbCBmb3IgcGVyZmVjdCBsb29wLgotICAgICAgICAgICAgICAgIGlmICggISBub0xvb3AgJiYg
dGltZXNbIDAgXSA9PT0gMCApIHsKKyAgICAgICAgICAgIHZhciBkYXRhID0gUGF0aC5wcm90b3R5
cGUudG9KU09OLmNhbGwoIHRoaXMgKTsKIAotICAgICAgICAgICAgICAgICAgICB0aW1lcy5wdXNo
KCBudW1Nb3JwaFRhcmdldHMgKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goIHZh
bHVlc1sgMCBdICk7CisgICAgICAgICAgICBkYXRhLnV1aWQgPSB0aGlzLnV1aWQ7CisgICAgICAg
ICAgICBkYXRhLmhvbGVzID0gW107CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmhvbGVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAK
LSAgICAgICAgICAgICAgICB0cmFja3MucHVzaCgKLSAgICAgICAgICAgICAgICAgICAgbmV3IE51
bWJlcktleWZyYW1lVHJhY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAnLm1vcnBoVGFyZ2V0
SW5mbHVlbmNlc1snICsgbW9ycGhUYXJnZXRTZXF1ZW5jZVsgaSBdLm5hbWUgKyAnXScsCi0gICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lcywgdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICku
c2NhbGUoIDEuMCAvIGZwcyApICk7CisgICAgICAgICAgICAgICAgdmFyIGhvbGUgPSB0aGlzLmhv
bGVzWyBpIF07CisgICAgICAgICAgICAgICAgZGF0YS5ob2xlcy5wdXNoKCBob2xlLnRvSlNPTigp
ICk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIG5ldyBBbmltYXRpb25D
bGlwKCBuYW1lLCAtIDEsIHRyYWNrcyApOworICAgICAgICAgICAgcmV0dXJuIGRhdGE7CiAKICAg
ICAgICAgfSwKIAotICAgICAgICBmaW5kQnlOYW1lOiBmdW5jdGlvbiAoIG9iamVjdE9yQ2xpcEFy
cmF5LCBuYW1lICkgeworICAgICAgICBmcm9tSlNPTjogZnVuY3Rpb24gKCBqc29uICkgewogCi0g
ICAgICAgICAgICB2YXIgY2xpcEFycmF5ID0gb2JqZWN0T3JDbGlwQXJyYXk7CisgICAgICAgICAg
ICBQYXRoLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKCB0aGlzLCBqc29uICk7CiAKLSAgICAgICAg
ICAgIGlmICggISBBcnJheS5pc0FycmF5KCBvYmplY3RPckNsaXBBcnJheSApICkgeworICAgICAg
ICAgICAgdGhpcy51dWlkID0ganNvbi51dWlkOworICAgICAgICAgICAgdGhpcy5ob2xlcyA9IFtd
OwogCi0gICAgICAgICAgICAgICAgdmFyIG8gPSBvYmplY3RPckNsaXBBcnJheTsKLSAgICAgICAg
ICAgICAgICBjbGlwQXJyYXkgPSBvLmdlb21ldHJ5ICYmIG8uZ2VvbWV0cnkuYW5pbWF0aW9ucyB8
fCBvLmFuaW1hdGlvbnM7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBqc29uLmhv
bGVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisKKyAgICAgICAgICAgICAgICB2YXIgaG9sZSA9
IGpzb24uaG9sZXNbIGkgXTsKKyAgICAgICAgICAgICAgICB0aGlzLmhvbGVzLnB1c2goIG5ldyBQ
YXRoKCkuZnJvbUpTT04oIGhvbGUgKSApOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGZvciAoIHZhciBpID0gMDsgaSA8IGNsaXBBcnJheS5sZW5ndGg7IGkgKysgKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIGlmICggY2xpcEFycmF5WyBpIF0u
bmFtZSA9PT0gbmFtZSApIHsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBjbGlwQXJyYXlbIGkgXTsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgLyoq
CisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKiBAYXV0
aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLworICAgICAqLwogCi0gICAg
ICAgICAgICB9CisgICAgZnVuY3Rpb24gTGlnaHQoIGNvbG9yLCBpbnRlbnNpdHkgKSB7CiAKLSAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBPYmplY3QzRC5jYWxsKCB0aGlzICk7CiAK
LSAgICAgICAgfSwKKyAgICAgICAgdGhpcy50eXBlID0gJ0xpZ2h0JzsKIAotICAgICAgICBDcmVh
dGVDbGlwc0Zyb21Nb3JwaFRhcmdldFNlcXVlbmNlczogZnVuY3Rpb24gKCBtb3JwaFRhcmdldHMs
IGZwcywgbm9Mb29wICkgeworICAgICAgICB0aGlzLmNvbG9yID0gbmV3IENvbG9yKCBjb2xvciAp
OworICAgICAgICB0aGlzLmludGVuc2l0eSA9IGludGVuc2l0eSAhPT0gdW5kZWZpbmVkID8gaW50
ZW5zaXR5IDogMTsKIAotICAgICAgICAgICAgdmFyIGFuaW1hdGlvblRvTW9ycGhUYXJnZXRzID0g
e307CisgICAgICAgIHRoaXMucmVjZWl2ZVNoYWRvdyA9IHVuZGVmaW5lZDsKIAotICAgICAgICAg
ICAgLy8gdGVzdGVkIHdpdGggaHR0cHM6Ly9yZWdleDEwMS5jb20vIG9uIHRyaWNrIHNlcXVlbmNl
cwotICAgICAgICAgICAgLy8gc3VjaCBmbGFtaW5nb19mbHlBXzAwMywgZmxhbWluZ29fcnVuMV8w
MDMsIGNyZGVhdGgwMDU5Ci0gICAgICAgICAgICB2YXIgcGF0dGVybiA9IC9eKFtcdy1dKj8pKFtc
ZF0rKSQvOworICAgIH0KIAotICAgICAgICAgICAgLy8gc29ydCBtb3JwaCB0YXJnZXQgbmFtZXMg
aW50byBhbmltYXRpb24gZ3JvdXBzIGJhc2VkCi0gICAgICAgICAgICAvLyBwYXR0ZXJucyBsaWtl
IFdhbGtfMDAxLCBXYWxrXzAwMiwgUnVuXzAwMSwgUnVuXzAwMgotICAgICAgICAgICAgZm9yICgg
dmFyIGkgPSAwLCBpbCA9IG1vcnBoVGFyZ2V0cy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAg
ICBMaWdodC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBPYmplY3Qz
RC5wcm90b3R5cGUgKSwgewogCi0gICAgICAgICAgICAgICAgdmFyIG1vcnBoVGFyZ2V0ID0gbW9y
cGhUYXJnZXRzWyBpIF07Ci0gICAgICAgICAgICAgICAgdmFyIHBhcnRzID0gbW9ycGhUYXJnZXQu
bmFtZS5tYXRjaCggcGF0dGVybiApOworICAgICAgICBjb25zdHJ1Y3RvcjogTGlnaHQsCiAKLSAg
ICAgICAgICAgICAgICBpZiAoIHBhcnRzICYmIHBhcnRzLmxlbmd0aCA+IDEgKSB7CisgICAgICAg
IGlzTGlnaHQ6IHRydWUsCiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBwYXJ0c1sg
MSBdOworICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHNvdXJjZSApIHsKIAotICAgICAgICAgICAg
ICAgICAgICB2YXIgYW5pbWF0aW9uTW9ycGhUYXJnZXRzID0gYW5pbWF0aW9uVG9Nb3JwaFRhcmdl
dHNbIG5hbWUgXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIGFuaW1hdGlvbk1vcnBoVGFy
Z2V0cyApIHsKKyAgICAgICAgICAgIE9iamVjdDNELnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMs
IHNvdXJjZSApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25Ub01vcnBoVGFy
Z2V0c1sgbmFtZSBdID0gYW5pbWF0aW9uTW9ycGhUYXJnZXRzID0gW107CisgICAgICAgICAgICB0
aGlzLmNvbG9yLmNvcHkoIHNvdXJjZS5jb2xvciApOworICAgICAgICAgICAgdGhpcy5pbnRlbnNp
dHkgPSBzb3VyY2UuaW50ZW5zaXR5OwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbk1vcnBoVGFy
Z2V0cy5wdXNoKCBtb3JwaFRhcmdldCApOworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAg
fQorICAgICAgICB0b0pTT046IGZ1bmN0aW9uICggbWV0YSApIHsKIAotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdmFyIGRhdGEgPSBPYmplY3QzRC5wcm90b3R5cGUudG9KU09OLmNhbGwoIHRo
aXMsIG1ldGEgKTsKIAotICAgICAgICAgICAgdmFyIGNsaXBzID0gW107CisgICAgICAgICAgICBk
YXRhLm9iamVjdC5jb2xvciA9IHRoaXMuY29sb3IuZ2V0SGV4KCk7CisgICAgICAgICAgICBkYXRh
Lm9iamVjdC5pbnRlbnNpdHkgPSB0aGlzLmludGVuc2l0eTsKIAotICAgICAgICAgICAgZm9yICgg
dmFyIG5hbWUgaW4gYW5pbWF0aW9uVG9Nb3JwaFRhcmdldHMgKSB7CisgICAgICAgICAgICBpZiAo
IHRoaXMuZ3JvdW5kQ29sb3IgIT09IHVuZGVmaW5lZCApIGRhdGEub2JqZWN0Lmdyb3VuZENvbG9y
ID0gdGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKTsKIAotICAgICAgICAgICAgICAgIGNsaXBzLnB1
c2goIEFuaW1hdGlvbkNsaXAuQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UoIG5hbWUsIGFu
aW1hdGlvblRvTW9ycGhUYXJnZXRzWyBuYW1lIF0sIGZwcywgbm9Mb29wICkgKTsKKyAgICAgICAg
ICAgIGlmICggdGhpcy5kaXN0YW5jZSAhPT0gdW5kZWZpbmVkICkgZGF0YS5vYmplY3QuZGlzdGFu
Y2UgPSB0aGlzLmRpc3RhbmNlOworICAgICAgICAgICAgaWYgKCB0aGlzLmFuZ2xlICE9PSB1bmRl
ZmluZWQgKSBkYXRhLm9iamVjdC5hbmdsZSA9IHRoaXMuYW5nbGU7CisgICAgICAgICAgICBpZiAo
IHRoaXMuZGVjYXkgIT09IHVuZGVmaW5lZCApIGRhdGEub2JqZWN0LmRlY2F5ID0gdGhpcy5kZWNh
eTsKKyAgICAgICAgICAgIGlmICggdGhpcy5wZW51bWJyYSAhPT0gdW5kZWZpbmVkICkgZGF0YS5v
YmplY3QucGVudW1icmEgPSB0aGlzLnBlbnVtYnJhOwogCi0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoIHRoaXMuc2hhZG93ICE9PSB1bmRlZmluZWQgKSBkYXRhLm9iamVjdC5zaGFkb3cg
PSB0aGlzLnNoYWRvdy50b0pTT04oKTsKIAotICAgICAgICAgICAgcmV0dXJuIGNsaXBzOworICAg
ICAgICAgICAgcmV0dXJuIGRhdGE7CiAKLSAgICAgICAgfSwKKyAgICAgICAgfQogCi0gICAgICAg
IC8vIHBhcnNlIHRoZSBhbmltYXRpb24uaGllcmFyY2h5IGZvcm1hdAotICAgICAgICBwYXJzZUFu
aW1hdGlvbjogZnVuY3Rpb24gKCBhbmltYXRpb24sIGJvbmVzICkgeworICAgIH0gKTsKIAotICAg
ICAgICAgICAgaWYgKCAhIGFuaW1hdGlvbiApIHsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIGFs
dGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLworICAgICAqLwogCi0gICAgICAgICAg
ICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLkFuaW1hdGlvbkNsaXA6IE5vIGFuaW1hdGlvbiBp
biBKU09OTG9hZGVyIGRhdGEuJyApOwotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
IGZ1bmN0aW9uIEhlbWlzcGhlcmVMaWdodCggc2t5Q29sb3IsIGdyb3VuZENvbG9yLCBpbnRlbnNp
dHkgKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgTGlnaHQuY2FsbCggdGhpcywgc2t5Q29s
b3IsIGludGVuc2l0eSApOwogCi0gICAgICAgICAgICB2YXIgYWRkTm9uZW1wdHlUcmFjayA9IGZ1
bmN0aW9uICggdHJhY2tUeXBlLCB0cmFja05hbWUsIGFuaW1hdGlvbktleXMsIHByb3BlcnR5TmFt
ZSwgZGVzdFRyYWNrcyApIHsKKyAgICAgICAgdGhpcy50eXBlID0gJ0hlbWlzcGhlcmVMaWdodCc7
CiAKLSAgICAgICAgICAgICAgICAvLyBvbmx5IHJldHVybiB0cmFjayBpZiB0aGVyZSBhcmUgYWN0
dWFsbHkga2V5cy4KLSAgICAgICAgICAgICAgICBpZiAoIGFuaW1hdGlvbktleXMubGVuZ3RoICE9
PSAwICkgeworICAgICAgICB0aGlzLmNhc3RTaGFkb3cgPSB1bmRlZmluZWQ7CiAKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIHRpbWVzID0gW107Ci0gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1
ZXMgPSBbXTsKKyAgICAgICAgdGhpcy5wb3NpdGlvbi5jb3B5KCBPYmplY3QzRC5EZWZhdWx0VXAg
KTsKKyAgICAgICAgdGhpcy51cGRhdGVNYXRyaXgoKTsKIAotICAgICAgICAgICAgICAgICAgICBB
bmltYXRpb25VdGlscy5mbGF0dGVuSlNPTiggYW5pbWF0aW9uS2V5cywgdGltZXMsIHZhbHVlcywg
cHJvcGVydHlOYW1lICk7CisgICAgICAgIHRoaXMuZ3JvdW5kQ29sb3IgPSBuZXcgQ29sb3IoIGdy
b3VuZENvbG9yICk7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gZW1wdHkga2V5cyBhcmUgZmls
dGVyZWQgb3V0LCBzbyBjaGVjayBhZ2FpbgotICAgICAgICAgICAgICAgICAgICBpZiAoIHRpbWVz
Lmxlbmd0aCAhPT0gMCApIHsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RU
cmFja3MucHVzaCggbmV3IHRyYWNrVHlwZSggdHJhY2tOYW1lLCB0aW1lcywgdmFsdWVzICkgKTsK
KyAgICBIZW1pc3BoZXJlTGlnaHQucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNy
ZWF0ZSggTGlnaHQucHJvdG90eXBlICksIHsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgIGNvbnN0cnVjdG9yOiBIZW1pc3BoZXJlTGlnaHQsCiAKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgIGlzSGVtaXNwaGVyZUxpZ2h0OiB0cnVlLAogCi0gICAgICAgICAgICB9OworICAgICAg
ICBjb3B5OiBmdW5jdGlvbiAoIHNvdXJjZSApIHsKIAotICAgICAgICAgICAgdmFyIHRyYWNrcyA9
IFtdOworICAgICAgICAgICAgTGlnaHQucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNl
ICk7CiAKLSAgICAgICAgICAgIHZhciBjbGlwTmFtZSA9IGFuaW1hdGlvbi5uYW1lIHx8ICdkZWZh
dWx0JzsKLSAgICAgICAgICAgIC8vIGF1dG9tYXRpYyBsZW5ndGggZGV0ZXJtaW5hdGlvbiBpbiBB
bmltYXRpb25DbGlwLgotICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gYW5pbWF0aW9uLmxlbmd0
aCB8fCAtIDE7Ci0gICAgICAgICAgICB2YXIgZnBzID0gYW5pbWF0aW9uLmZwcyB8fCAzMDsKKyAg
ICAgICAgICAgIHRoaXMuZ3JvdW5kQ29sb3IuY29weSggc291cmNlLmdyb3VuZENvbG9yICk7CiAK
LSAgICAgICAgICAgIHZhciBoaWVyYXJjaHlUcmFja3MgPSBhbmltYXRpb24uaGllcmFyY2h5IHx8
IFtdOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBo
ID0gMDsgaCA8IGhpZXJhcmNoeVRyYWNrcy5sZW5ndGg7IGggKysgKSB7CisgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIHZhciBhbmltYXRpb25LZXlzID0gaGllcmFyY2h5VHJhY2tzWyBoIF0u
a2V5czsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgICAgICAvLyBza2lwIGVtcHR5IHRyYWNrcwot
ICAgICAgICAgICAgICAgIGlmICggISBhbmltYXRpb25LZXlzIHx8IGFuaW1hdGlvbktleXMubGVu
Z3RoID09PSAwICkgY29udGludWU7CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBo
dHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKi8KIAotICAgICAgICAgICAgICAgIC8vIHByb2Nlc3Mg
bW9ycGggdGFyZ2V0cwotICAgICAgICAgICAgICAgIGlmICggYW5pbWF0aW9uS2V5c1sgMCBdLm1v
cnBoVGFyZ2V0cyApIHsKKyAgICBmdW5jdGlvbiBMaWdodFNoYWRvdyggY2FtZXJhICkgewogCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGZpZ3VyZSBvdXQgYWxsIG1vcnBoIHRhcmdldHMgdXNlZCBp
biB0aGlzIHRyYWNrCi0gICAgICAgICAgICAgICAgICAgIHZhciBtb3JwaFRhcmdldE5hbWVzID0g
e307CisgICAgICAgIHRoaXMuY2FtZXJhID0gY2FtZXJhOwogCi0gICAgICAgICAgICAgICAgICAg
IGZvciAoIHZhciBrID0gMDsgayA8IGFuaW1hdGlvbktleXMubGVuZ3RoOyBrICsrICkgeworICAg
ICAgICB0aGlzLmJpYXMgPSAwOworICAgICAgICB0aGlzLnJhZGl1cyA9IDE7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggYW5pbWF0aW9uS2V5c1sgayBdLm1vcnBoVGFyZ2V0cyApIHsK
KyAgICAgICAgdGhpcy5tYXBTaXplID0gbmV3IFZlY3RvcjIoIDUxMiwgNTEyICk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgbSA9IDA7IG0gPCBhbmltYXRpb25LZXlz
WyBrIF0ubW9ycGhUYXJnZXRzLmxlbmd0aDsgbSArKyApIHsKKyAgICAgICAgdGhpcy5tYXAgPSBu
dWxsOworICAgICAgICB0aGlzLm1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbW9ycGhUYXJnZXROYW1lc1sgYW5pbWF0aW9uS2V5c1sgayBd
Lm1vcnBoVGFyZ2V0c1sgbSBdIF0gPSAtIDE7CisgICAgfQogCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgIE9iamVjdC5hc3NpZ24oIExpZ2h0U2hhZG93LnByb3RvdHlwZSwgewog
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291
cmNlICkgewogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuY2FtZXJh
ID0gc291cmNlLmNhbWVyYS5jbG9uZSgpOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0
ZSBhIHRyYWNrIGZvciBlYWNoIG1vcnBoIHRhcmdldCB3aXRoIGFsbCB6ZXJvCi0gICAgICAgICAg
ICAgICAgICAgIC8vIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBleGNlcHQgZm9yIHRoZSBrZXlzIGlu
IHdoaWNoCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBtb3JwaFRhcmdldCBpcyBuYW1lZC4K
LSAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIG1vcnBoVGFyZ2V0TmFtZSBpbiBtb3JwaFRh
cmdldE5hbWVzICkgeworICAgICAgICAgICAgdGhpcy5iaWFzID0gc291cmNlLmJpYXM7CisgICAg
ICAgICAgICB0aGlzLnJhZGl1cyA9IHNvdXJjZS5yYWRpdXM7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciB0aW1lcyA9IFtdOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVl
cyA9IFtdOworICAgICAgICAgICAgdGhpcy5tYXBTaXplLmNvcHkoIHNvdXJjZS5tYXBTaXplICk7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBtID0gMDsgbSAhPT0gYW5pbWF0
aW9uS2V5c1sgayBdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7ICsrIG0gKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbmltYXRpb25L
ZXkgPSBhbmltYXRpb25LZXlzWyBrIF07CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aW1lcy5wdXNoKCBhbmltYXRpb25LZXkudGltZSApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKCAoIGFuaW1hdGlvbktleS5tb3JwaFRhcmdldCA9
PT0gbW9ycGhUYXJnZXROYW1lICkgPyAxIDogMCApOworICAgICAgICBjbG9uZTogZnVuY3Rpb24g
KCkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbmV3
IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRyYWNrcy5wdXNoKCBuZXcgTnVtYmVyS2V5ZnJhbWVUcmFjayggJy5tb3JwaFRhcmdldElu
Zmx1ZW5jZVsnICsgbW9ycGhUYXJnZXROYW1lICsgJ10nLCB0aW1lcywgdmFsdWVzICkgKTsKKyAg
ICAgICAgfSwKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIHRvSlNPTjogZnVuY3Rp
b24gKCkgewogCi0gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gbW9ycGhUYXJnZXROYW1l
cy5sZW5ndGggKiAoIGZwcyB8fCAxLjAgKTsKKyAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTsK
IAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIHRoaXMuYmlhcyAh
PT0gMCApIG9iamVjdC5iaWFzID0gdGhpcy5iaWFzOworICAgICAgICAgICAgaWYgKCB0aGlzLnJh
ZGl1cyAhPT0gMSApIG9iamVjdC5yYWRpdXMgPSB0aGlzLnJhZGl1czsKKyAgICAgICAgICAgIGlm
ICggdGhpcy5tYXBTaXplLnggIT09IDUxMiB8fCB0aGlzLm1hcFNpemUueSAhPT0gNTEyICkgb2Jq
ZWN0Lm1hcFNpemUgPSB0aGlzLm1hcFNpemUudG9BcnJheSgpOwogCi0gICAgICAgICAgICAgICAg
ICAgIC8vIC4uLmFzc3VtZSBza2VsZXRhbCBhbmltYXRpb24KKyAgICAgICAgICAgIG9iamVjdC5j
YW1lcmEgPSB0aGlzLmNhbWVyYS50b0pTT04oIGZhbHNlICkub2JqZWN0OworICAgICAgICAgICAg
ZGVsZXRlIG9iamVjdC5jYW1lcmEubWF0cml4OwogCi0gICAgICAgICAgICAgICAgICAgIHZhciBi
b25lTmFtZSA9ICcuYm9uZXNbJyArIGJvbmVzWyBoIF0ubmFtZSArICddJzsKKyAgICAgICAgICAg
IHJldHVybiBvYmplY3Q7CiAKLSAgICAgICAgICAgICAgICAgICAgYWRkTm9uZW1wdHlUcmFjaygK
LSAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcktleWZyYW1lVHJhY2ssIGJvbmVOYW1lICsg
Jy5wb3NpdGlvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25LZXlzLCAncG9z
JywgdHJhY2tzICk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBhZGROb25lbXB0
eVRyYWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgUXVhdGVybmlvbktleWZyYW1lVHJhY2ss
IGJvbmVOYW1lICsgJy5xdWF0ZXJuaW9uJywKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1h
dGlvbktleXMsICdyb3QnLCB0cmFja3MgKTsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgYWRkTm9uZW1wdHlUcmFjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcktleWZy
YW1lVHJhY2ssIGJvbmVOYW1lICsgJy5zY2FsZScsCi0gICAgICAgICAgICAgICAgICAgICAgICBh
bmltYXRpb25LZXlzLCAnc2NsJywgdHJhY2tzICk7CisgICAgLyoqCisgICAgICogQGF1dGhvciBt
cmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKi8KIAotICAgICAgICAgICAgICAgIH0K
KyAgICBmdW5jdGlvbiBTcG90TGlnaHRTaGFkb3coKSB7CisKKyAgICAgICAgTGlnaHRTaGFkb3cu
Y2FsbCggdGhpcywgbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCA1MCwgMSwgMC41LCA1MDAgKSApOwor
CisgICAgfQorCisgICAgU3BvdExpZ2h0U2hhZG93LnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24o
IE9iamVjdC5jcmVhdGUoIExpZ2h0U2hhZG93LnByb3RvdHlwZSApLCB7CisKKyAgICAgICAgY29u
c3RydWN0b3I6IFNwb3RMaWdodFNoYWRvdywKKworICAgICAgICBpc1Nwb3RMaWdodFNoYWRvdzog
dHJ1ZSwKKworICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uICggbGlnaHQgKSB7CisKKyAgICAgICAg
ICAgIHZhciBjYW1lcmEgPSB0aGlzLmNhbWVyYTsKKworICAgICAgICAgICAgdmFyIGZvdiA9IF9N
YXRoLlJBRDJERUcgKiAyICogbGlnaHQuYW5nbGU7CisgICAgICAgICAgICB2YXIgYXNwZWN0ID0g
dGhpcy5tYXBTaXplLndpZHRoIC8gdGhpcy5tYXBTaXplLmhlaWdodDsKKyAgICAgICAgICAgIHZh
ciBmYXIgPSBsaWdodC5kaXN0YW5jZSB8fCBjYW1lcmEuZmFyOworCisgICAgICAgICAgICBpZiAo
IGZvdiAhPT0gY2FtZXJhLmZvdiB8fCBhc3BlY3QgIT09IGNhbWVyYS5hc3BlY3QgfHwgZmFyICE9
PSBjYW1lcmEuZmFyICkgeworCisgICAgICAgICAgICAgICAgY2FtZXJhLmZvdiA9IGZvdjsKKyAg
ICAgICAgICAgICAgICBjYW1lcmEuYXNwZWN0ID0gYXNwZWN0OworICAgICAgICAgICAgICAgIGNh
bWVyYS5mYXIgPSBmYXI7CisgICAgICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25N
YXRyaXgoKTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIHRyYWNrcy5sZW5n
dGggPT09IDAgKSB7CisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgIH0gKTsKKworICAgIC8qKgorICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0
ZXJlZHF1YWxpYS5jb20vCisgICAgICovCisKKyAgICBmdW5jdGlvbiBTcG90TGlnaHQoIGNvbG9y
LCBpbnRlbnNpdHksIGRpc3RhbmNlLCBhbmdsZSwgcGVudW1icmEsIGRlY2F5ICkgeworCisgICAg
ICAgIExpZ2h0LmNhbGwoIHRoaXMsIGNvbG9yLCBpbnRlbnNpdHkgKTsKKworICAgICAgICB0aGlz
LnR5cGUgPSAnU3BvdExpZ2h0JzsKKworICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHkoIE9iamVj
dDNELkRlZmF1bHRVcCApOworICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpeCgpOworCisgICAgICAg
IHRoaXMudGFyZ2V0ID0gbmV3IE9iamVjdDNEKCk7CisKKyAgICAgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KCB0aGlzLCAncG93ZXInLCB7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KworICAgICAgICAgICAgICAgIC8vIGludGVuc2l0eSA9IHBvd2VyIHBlciBzb2xpZCBhbmdsZS4K
KyAgICAgICAgICAgICAgICAvLyByZWY6IGVxdWF0aW9uICgxNykgZnJvbSBodHRwczovL3NlYmxh
Z2FyZGUuZmlsZXMud29yZHByZXNzLmNvbS8yMDE1LzA3L2NvdXJzZV9ub3Rlc19tb3ZpbmdfZnJv
c3RiaXRlX3RvX3Bicl92MzIucGRmCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW50ZW5z
aXR5ICogTWF0aC5QSTsKKworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHNldDogZnVuY3Rp
b24gKCBwb3dlciApIHsKKworICAgICAgICAgICAgICAgIC8vIGludGVuc2l0eSA9IHBvd2VyIHBl
ciBzb2xpZCBhbmdsZS4KKyAgICAgICAgICAgICAgICAvLyByZWY6IGVxdWF0aW9uICgxNykgZnJv
bSBodHRwczovL3NlYmxhZ2FyZGUuZmlsZXMud29yZHByZXNzLmNvbS8yMDE1LzA3L2NvdXJzZV9u
b3Rlc19tb3ZpbmdfZnJvc3RiaXRlX3RvX3Bicl92MzIucGRmCisgICAgICAgICAgICAgICAgdGhp
cy5pbnRlbnNpdHkgPSBwb3dlciAvIE1hdGguUEk7CiAKICAgICAgICAgICAgIH0KKyAgICAgICAg
fSApOwogCi0gICAgICAgICAgICB2YXIgY2xpcCA9IG5ldyBBbmltYXRpb25DbGlwKCBjbGlwTmFt
ZSwgZHVyYXRpb24sIHRyYWNrcyApOworICAgICAgICB0aGlzLmRpc3RhbmNlID0gKCBkaXN0YW5j
ZSAhPT0gdW5kZWZpbmVkICkgPyBkaXN0YW5jZSA6IDA7CisgICAgICAgIHRoaXMuYW5nbGUgPSAo
IGFuZ2xlICE9PSB1bmRlZmluZWQgKSA/IGFuZ2xlIDogTWF0aC5QSSAvIDM7CisgICAgICAgIHRo
aXMucGVudW1icmEgPSAoIHBlbnVtYnJhICE9PSB1bmRlZmluZWQgKSA/IHBlbnVtYnJhIDogMDsK
KyAgICAgICAgdGhpcy5kZWNheSA9ICggZGVjYXkgIT09IHVuZGVmaW5lZCApID8gZGVjYXkgOiAx
OyAgIC8vIGZvciBwaHlzaWNhbGx5IGNvcnJlY3QgbGlnaHRzLCBzaG91bGQgYmUgMi4KIAotICAg
ICAgICAgICAgcmV0dXJuIGNsaXA7CisgICAgICAgIHRoaXMuc2hhZG93ID0gbmV3IFNwb3RMaWdo
dFNoYWRvdygpOworCisgICAgfQorCisgICAgU3BvdExpZ2h0LnByb3RvdHlwZSA9IE9iamVjdC5h
c3NpZ24oIE9iamVjdC5jcmVhdGUoIExpZ2h0LnByb3RvdHlwZSApLCB7CisKKyAgICAgICAgY29u
c3RydWN0b3I6IFNwb3RMaWdodCwKKworICAgICAgICBpc1Nwb3RMaWdodDogdHJ1ZSwKKworICAg
ICAgICBjb3B5OiBmdW5jdGlvbiAoIHNvdXJjZSApIHsKKworICAgICAgICAgICAgTGlnaHQucHJv
dG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CisKKyAgICAgICAgICAgIHRoaXMuZGlz
dGFuY2UgPSBzb3VyY2UuZGlzdGFuY2U7CisgICAgICAgICAgICB0aGlzLmFuZ2xlID0gc291cmNl
LmFuZ2xlOworICAgICAgICAgICAgdGhpcy5wZW51bWJyYSA9IHNvdXJjZS5wZW51bWJyYTsKKyAg
ICAgICAgICAgIHRoaXMuZGVjYXkgPSBzb3VyY2UuZGVjYXk7CisKKyAgICAgICAgICAgIHRoaXMu
dGFyZ2V0ID0gc291cmNlLnRhcmdldC5jbG9uZSgpOworCisgICAgICAgICAgICB0aGlzLnNoYWRv
dyA9IHNvdXJjZS5zaGFkb3cuY2xvbmUoKTsKKworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
ICAgICAgICAgfQogCiAgICAgfSApOwogCi0gICAgT2JqZWN0LmFzc2lnbiggQW5pbWF0aW9uQ2xp
cC5wcm90b3R5cGUsIHsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9t
cmRvb2IuY29tLworICAgICAqLwogCi0gICAgICAgIHJlc2V0RHVyYXRpb246IGZ1bmN0aW9uICgp
IHsKIAotICAgICAgICAgICAgdmFyIHRyYWNrcyA9IHRoaXMudHJhY2tzLCBkdXJhdGlvbiA9IDA7
CisgICAgZnVuY3Rpb24gUG9pbnRMaWdodCggY29sb3IsIGludGVuc2l0eSwgZGlzdGFuY2UsIGRl
Y2F5ICkgewogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIG4gPSB0cmFja3MubGVuZ3Ro
OyBpICE9PSBuOyArKyBpICkgeworICAgICAgICBMaWdodC5jYWxsKCB0aGlzLCBjb2xvciwgaW50
ZW5zaXR5ICk7CiAKLSAgICAgICAgICAgICAgICB2YXIgdHJhY2sgPSB0aGlzLnRyYWNrc1sgaSBd
OworICAgICAgICB0aGlzLnR5cGUgPSAnUG9pbnRMaWdodCc7CiAKLSAgICAgICAgICAgICAgICBk
dXJhdGlvbiA9IE1hdGgubWF4KCBkdXJhdGlvbiwgdHJhY2sudGltZXNbIHRyYWNrLnRpbWVzLmxl
bmd0aCAtIDEgXSApOworICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsICdwb3dl
cicsIHsKKyAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworCisgICAgICAgICAgICAgICAg
Ly8gaW50ZW5zaXR5ID0gcG93ZXIgcGVyIHNvbGlkIGFuZ2xlLgorICAgICAgICAgICAgICAgIC8v
IHJlZjogZXF1YXRpb24gKDE1KSBmcm9tIGh0dHBzOi8vc2VibGFnYXJkZS5maWxlcy53b3JkcHJl
c3MuY29tLzIwMTUvMDcvY291cnNlX25vdGVzX21vdmluZ19mcm9zdGJpdGVfdG9fcGJyX3YzMi5w
ZGYKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnRlbnNpdHkgKiA0ICogTWF0aC5QSTsK
KworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKCBwb3dlciApIHsK
KworICAgICAgICAgICAgICAgIC8vIGludGVuc2l0eSA9IHBvd2VyIHBlciBzb2xpZCBhbmdsZS4K
KyAgICAgICAgICAgICAgICAvLyByZWY6IGVxdWF0aW9uICgxNSkgZnJvbSBodHRwczovL3NlYmxh
Z2FyZGUuZmlsZXMud29yZHByZXNzLmNvbS8yMDE1LzA3L2NvdXJzZV9ub3Rlc19tb3ZpbmdfZnJv
c3RiaXRlX3RvX3Bicl92MzIucGRmCisgICAgICAgICAgICAgICAgdGhpcy5pbnRlbnNpdHkgPSBw
b3dlciAvICggNCAqIE1hdGguUEkgKTsKIAogICAgICAgICAgICAgfQorICAgICAgICB9ICk7CiAK
LSAgICAgICAgICAgIHRoaXMuZHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICAgICAgdGhpcy5kaXN0
YW5jZSA9ICggZGlzdGFuY2UgIT09IHVuZGVmaW5lZCApID8gZGlzdGFuY2UgOiAwOworICAgICAg
ICB0aGlzLmRlY2F5ID0gKCBkZWNheSAhPT0gdW5kZWZpbmVkICkgPyBkZWNheSA6IDE7ICAgLy8g
Zm9yIHBoeXNpY2FsbHkgY29ycmVjdCBsaWdodHMsIHNob3VsZCBiZSAyLgorCisgICAgICAgIHRo
aXMuc2hhZG93ID0gbmV3IExpZ2h0U2hhZG93KCBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoIDkwLCAx
LCAwLjUsIDUwMCApICk7CisKKyAgICB9CisKKyAgICBQb2ludExpZ2h0LnByb3RvdHlwZSA9IE9i
amVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIExpZ2h0LnByb3RvdHlwZSApLCB7CisKKyAgICAg
ICAgY29uc3RydWN0b3I6IFBvaW50TGlnaHQsCisKKyAgICAgICAgaXNQb2ludExpZ2h0OiB0cnVl
LAorCisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkgeworCisgICAgICAgICAgICBM
aWdodC5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKKworICAgICAgICAgICAg
dGhpcy5kaXN0YW5jZSA9IHNvdXJjZS5kaXN0YW5jZTsKKyAgICAgICAgICAgIHRoaXMuZGVjYXkg
PSBzb3VyY2UuZGVjYXk7CisKKyAgICAgICAgICAgIHRoaXMuc2hhZG93ID0gc291cmNlLnNoYWRv
dy5jbG9uZSgpOworCisgICAgICAgICAgICByZXR1cm4gdGhpczsKKworICAgICAgICB9CisKKyAg
ICB9ICk7CisKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVy
ZWRxdWFsaWEuY29tLworICAgICAqIEBhdXRob3IgYXJvc2UgLyBodHRwOi8vZ2l0aHViLmNvbS9h
cm9zZQorICAgICAqLworCisgICAgZnVuY3Rpb24gT3J0aG9ncmFwaGljQ2FtZXJhKCBsZWZ0LCBy
aWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhciApIHsKKworICAgICAgICBDYW1lcmEuY2FsbCgg
dGhpcyApOworCisgICAgICAgIHRoaXMudHlwZSA9ICdPcnRob2dyYXBoaWNDYW1lcmEnOworCisg
ICAgICAgIHRoaXMuem9vbSA9IDE7CisgICAgICAgIHRoaXMudmlldyA9IG51bGw7CisKKyAgICAg
ICAgdGhpcy5sZWZ0ID0gKCBsZWZ0ICE9PSB1bmRlZmluZWQgKSA/IGxlZnQgOiAtIDE7CisgICAg
ICAgIHRoaXMucmlnaHQgPSAoIHJpZ2h0ICE9PSB1bmRlZmluZWQgKSA/IHJpZ2h0IDogMTsKKyAg
ICAgICAgdGhpcy50b3AgPSAoIHRvcCAhPT0gdW5kZWZpbmVkICkgPyB0b3AgOiAxOworICAgICAg
ICB0aGlzLmJvdHRvbSA9ICggYm90dG9tICE9PSB1bmRlZmluZWQgKSA/IGJvdHRvbSA6IC0gMTsK
KworICAgICAgICB0aGlzLm5lYXIgPSAoIG5lYXIgIT09IHVuZGVmaW5lZCApID8gbmVhciA6IDAu
MTsKKyAgICAgICAgdGhpcy5mYXIgPSAoIGZhciAhPT0gdW5kZWZpbmVkICkgPyBmYXIgOiAyMDAw
OworCisgICAgICAgIHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpOworCisgICAgfQorCisg
ICAgT3J0aG9ncmFwaGljQ2FtZXJhLnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5j
cmVhdGUoIENhbWVyYS5wcm90b3R5cGUgKSwgeworCisgICAgICAgIGNvbnN0cnVjdG9yOiBPcnRo
b2dyYXBoaWNDYW1lcmEsCisKKyAgICAgICAgaXNPcnRob2dyYXBoaWNDYW1lcmE6IHRydWUsCisK
KyAgICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UsIHJlY3Vyc2l2ZSApIHsKKworICAgICAg
ICAgICAgQ2FtZXJhLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSwgcmVjdXJzaXZl
ICk7CisKKyAgICAgICAgICAgIHRoaXMubGVmdCA9IHNvdXJjZS5sZWZ0OworICAgICAgICAgICAg
dGhpcy5yaWdodCA9IHNvdXJjZS5yaWdodDsKKyAgICAgICAgICAgIHRoaXMudG9wID0gc291cmNl
LnRvcDsKKyAgICAgICAgICAgIHRoaXMuYm90dG9tID0gc291cmNlLmJvdHRvbTsKKyAgICAgICAg
ICAgIHRoaXMubmVhciA9IHNvdXJjZS5uZWFyOworICAgICAgICAgICAgdGhpcy5mYXIgPSBzb3Vy
Y2UuZmFyOworCisgICAgICAgICAgICB0aGlzLnpvb20gPSBzb3VyY2Uuem9vbTsKKyAgICAgICAg
ICAgIHRoaXMudmlldyA9IHNvdXJjZS52aWV3ID09PSBudWxsID8gbnVsbCA6IE9iamVjdC5hc3Np
Z24oIHt9LCBzb3VyY2UudmlldyApOworCisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAg
ICAgICB9LAogCi0gICAgICAgIHRyaW06IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgc2V0Vmlld09m
ZnNldDogZnVuY3Rpb24gKCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHgsIHksIHdpZHRoLCBoZWln
aHQgKSB7CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxl
bmd0aDsgaSArKyApIHsKKyAgICAgICAgICAgIGlmICggdGhpcy52aWV3ID09PSBudWxsICkgewog
Ci0gICAgICAgICAgICAgICAgdGhpcy50cmFja3NbIGkgXS50cmltKCAwLCB0aGlzLmR1cmF0aW9u
ICk7CisgICAgICAgICAgICAgICAgdGhpcy52aWV3ID0geworICAgICAgICAgICAgICAgICAgICBl
bmFibGVkOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICBmdWxsV2lkdGg6IDEsCisgICAgICAg
ICAgICAgICAgICAgIGZ1bGxIZWlnaHQ6IDEsCisgICAgICAgICAgICAgICAgICAgIG9mZnNldFg6
IDAsCisgICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IDAsCisgICAgICAgICAgICAgICAgICAg
IHdpZHRoOiAxLAorICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEKKyAgICAgICAgICAgICAg
ICB9OwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICAgICAgdGhpcy52aWV3LmVuYWJsZWQgPSB0cnVlOworICAgICAgICAgICAgdGhpcy52aWV3LmZ1
bGxXaWR0aCA9IGZ1bGxXaWR0aDsKKyAgICAgICAgICAgIHRoaXMudmlldy5mdWxsSGVpZ2h0ID0g
ZnVsbEhlaWdodDsKKyAgICAgICAgICAgIHRoaXMudmlldy5vZmZzZXRYID0geDsKKyAgICAgICAg
ICAgIHRoaXMudmlldy5vZmZzZXRZID0geTsKKyAgICAgICAgICAgIHRoaXMudmlldy53aWR0aCA9
IHdpZHRoOworICAgICAgICAgICAgdGhpcy52aWV3LmhlaWdodCA9IGhlaWdodDsKKworICAgICAg
ICAgICAgdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7CiAKICAgICAgICAgfSwKIAotICAg
ICAgICBvcHRpbWl6ZTogZnVuY3Rpb24gKCkgeworICAgICAgICBjbGVhclZpZXdPZmZzZXQ6IGZ1
bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgdGhpcy50cmFj
a3MubGVuZ3RoOyBpICsrICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLnZpZXcgIT09IG51bGwg
KSB7CiAKLSAgICAgICAgICAgICAgICB0aGlzLnRyYWNrc1sgaSBdLm9wdGltaXplKCk7CisgICAg
ICAgICAgICAgICAgdGhpcy52aWV3LmVuYWJsZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICB0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTsKKworICAgICAgICB9
LAorCisgICAgICAgIHVwZGF0ZVByb2plY3Rpb25NYXRyaXg6IGZ1bmN0aW9uICgpIHsKKworICAg
ICAgICAgICAgdmFyIGR4ID0gKCB0aGlzLnJpZ2h0IC0gdGhpcy5sZWZ0ICkgLyAoIDIgKiB0aGlz
Lnpvb20gKTsKKyAgICAgICAgICAgIHZhciBkeSA9ICggdGhpcy50b3AgLSB0aGlzLmJvdHRvbSAp
IC8gKCAyICogdGhpcy56b29tICk7CisgICAgICAgICAgICB2YXIgY3ggPSAoIHRoaXMucmlnaHQg
KyB0aGlzLmxlZnQgKSAvIDI7CisgICAgICAgICAgICB2YXIgY3kgPSAoIHRoaXMudG9wICsgdGhp
cy5ib3R0b20gKSAvIDI7CisKKyAgICAgICAgICAgIHZhciBsZWZ0ID0gY3ggLSBkeDsKKyAgICAg
ICAgICAgIHZhciByaWdodCA9IGN4ICsgZHg7CisgICAgICAgICAgICB2YXIgdG9wID0gY3kgKyBk
eTsKKyAgICAgICAgICAgIHZhciBib3R0b20gPSBjeSAtIGR5OworCisgICAgICAgICAgICBpZiAo
IHRoaXMudmlldyAhPT0gbnVsbCAmJiB0aGlzLnZpZXcuZW5hYmxlZCApIHsKKworICAgICAgICAg
ICAgICAgIHZhciB6b29tVyA9IHRoaXMuem9vbSAvICggdGhpcy52aWV3LndpZHRoIC8gdGhpcy52
aWV3LmZ1bGxXaWR0aCApOworICAgICAgICAgICAgICAgIHZhciB6b29tSCA9IHRoaXMuem9vbSAv
ICggdGhpcy52aWV3LmhlaWdodCAvIHRoaXMudmlldy5mdWxsSGVpZ2h0ICk7CisgICAgICAgICAg
ICAgICAgdmFyIHNjYWxlVyA9ICggdGhpcy5yaWdodCAtIHRoaXMubGVmdCApIC8gdGhpcy52aWV3
LndpZHRoOworICAgICAgICAgICAgICAgIHZhciBzY2FsZUggPSAoIHRoaXMudG9wIC0gdGhpcy5i
b3R0b20gKSAvIHRoaXMudmlldy5oZWlnaHQ7CisKKyAgICAgICAgICAgICAgICBsZWZ0ICs9IHNj
YWxlVyAqICggdGhpcy52aWV3Lm9mZnNldFggLyB6b29tVyApOworICAgICAgICAgICAgICAgIHJp
Z2h0ID0gbGVmdCArIHNjYWxlVyAqICggdGhpcy52aWV3LndpZHRoIC8gem9vbVcgKTsKKyAgICAg
ICAgICAgICAgICB0b3AgLT0gc2NhbGVIICogKCB0aGlzLnZpZXcub2Zmc2V0WSAvIHpvb21IICk7
CisgICAgICAgICAgICAgICAgYm90dG9tID0gdG9wIC0gc2NhbGVIICogKCB0aGlzLnZpZXcuaGVp
Z2h0IC8gem9vbUggKTsKIAogICAgICAgICAgICAgfQogCisgICAgICAgICAgICB0aGlzLnByb2pl
Y3Rpb25NYXRyaXgubWFrZU9ydGhvZ3JhcGhpYyggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCB0
aGlzLm5lYXIsIHRoaXMuZmFyICk7CisKKyAgICAgICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJp
eEludmVyc2UuZ2V0SW52ZXJzZSggdGhpcy5wcm9qZWN0aW9uTWF0cml4ICk7CisKKyAgICAgICAg
fSwKKworICAgICAgICB0b0pTT046IGZ1bmN0aW9uICggbWV0YSApIHsKKworICAgICAgICAgICAg
dmFyIGRhdGEgPSBPYmplY3QzRC5wcm90b3R5cGUudG9KU09OLmNhbGwoIHRoaXMsIG1ldGEgKTsK
KworICAgICAgICAgICAgZGF0YS5vYmplY3Quem9vbSA9IHRoaXMuem9vbTsKKyAgICAgICAgICAg
IGRhdGEub2JqZWN0LmxlZnQgPSB0aGlzLmxlZnQ7CisgICAgICAgICAgICBkYXRhLm9iamVjdC5y
aWdodCA9IHRoaXMucmlnaHQ7CisgICAgICAgICAgICBkYXRhLm9iamVjdC50b3AgPSB0aGlzLnRv
cDsKKyAgICAgICAgICAgIGRhdGEub2JqZWN0LmJvdHRvbSA9IHRoaXMuYm90dG9tOworICAgICAg
ICAgICAgZGF0YS5vYmplY3QubmVhciA9IHRoaXMubmVhcjsKKyAgICAgICAgICAgIGRhdGEub2Jq
ZWN0LmZhciA9IHRoaXMuZmFyOworCisgICAgICAgICAgICBpZiAoIHRoaXMudmlldyAhPT0gbnVs
bCApIGRhdGEub2JqZWN0LnZpZXcgPSBPYmplY3QuYXNzaWduKCB7fSwgdGhpcy52aWV3ICk7CisK
KyAgICAgICAgICAgIHJldHVybiBkYXRhOworCisgICAgICAgIH0KKworICAgIH0gKTsKKworICAg
IC8qKgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICov
CisKKyAgICBmdW5jdGlvbiBEaXJlY3Rpb25hbExpZ2h0U2hhZG93KCApIHsKKworICAgICAgICBM
aWdodFNoYWRvdy5jYWxsKCB0aGlzLCBuZXcgT3J0aG9ncmFwaGljQ2FtZXJhKCAtIDUsIDUsIDUs
IC0gNSwgMC41LCA1MDAgKSApOworCisgICAgfQorCisgICAgRGlyZWN0aW9uYWxMaWdodFNoYWRv
dy5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBMaWdodFNoYWRvdy5w
cm90b3R5cGUgKSwgeworCisgICAgICAgIGNvbnN0cnVjdG9yOiBEaXJlY3Rpb25hbExpZ2h0U2hh
ZG93CisKKyAgICB9ICk7CisKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6
Ly9tcmRvb2IuY29tLworICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1
YWxpYS5jb20vCisgICAgICovCisKKyAgICBmdW5jdGlvbiBEaXJlY3Rpb25hbExpZ2h0KCBjb2xv
ciwgaW50ZW5zaXR5ICkgeworCisgICAgICAgIExpZ2h0LmNhbGwoIHRoaXMsIGNvbG9yLCBpbnRl
bnNpdHkgKTsKKworICAgICAgICB0aGlzLnR5cGUgPSAnRGlyZWN0aW9uYWxMaWdodCc7CisKKyAg
ICAgICAgdGhpcy5wb3NpdGlvbi5jb3B5KCBPYmplY3QzRC5EZWZhdWx0VXAgKTsKKyAgICAgICAg
dGhpcy51cGRhdGVNYXRyaXgoKTsKKworICAgICAgICB0aGlzLnRhcmdldCA9IG5ldyBPYmplY3Qz
RCgpOworCisgICAgICAgIHRoaXMuc2hhZG93ID0gbmV3IERpcmVjdGlvbmFsTGlnaHRTaGFkb3co
KTsKKworICAgIH0KKworICAgIERpcmVjdGlvbmFsTGlnaHQucHJvdG90eXBlID0gT2JqZWN0LmFz
c2lnbiggT2JqZWN0LmNyZWF0ZSggTGlnaHQucHJvdG90eXBlICksIHsKKworICAgICAgICBjb25z
dHJ1Y3RvcjogRGlyZWN0aW9uYWxMaWdodCwKKworICAgICAgICBpc0RpcmVjdGlvbmFsTGlnaHQ6
IHRydWUsCisKKyAgICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisKKyAgICAgICAg
ICAgIExpZ2h0LnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOworCisgICAgICAg
ICAgICB0aGlzLnRhcmdldCA9IHNvdXJjZS50YXJnZXQuY2xvbmUoKTsKKworICAgICAgICAgICAg
dGhpcy5zaGFkb3cgPSBzb3VyY2Uuc2hhZG93LmNsb25lKCk7CisKKyAgICAgICAgICAgIHJldHVy
biB0aGlzOworCisgICAgICAgIH0KKworICAgIH0gKTsKKworICAgIC8qKgorICAgICAqIEBhdXRo
b3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICovCisKKyAgICBmdW5jdGlvbiBB
bWJpZW50TGlnaHQoIGNvbG9yLCBpbnRlbnNpdHkgKSB7CisKKyAgICAgICAgTGlnaHQuY2FsbCgg
dGhpcywgY29sb3IsIGludGVuc2l0eSApOworCisgICAgICAgIHRoaXMudHlwZSA9ICdBbWJpZW50
TGlnaHQnOworCisgICAgICAgIHRoaXMuY2FzdFNoYWRvdyA9IHVuZGVmaW5lZDsKKworICAgIH0K
KworICAgIEFtYmllbnRMaWdodC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3Jl
YXRlKCBMaWdodC5wcm90b3R5cGUgKSwgeworCisgICAgICAgIGNvbnN0cnVjdG9yOiBBbWJpZW50
TGlnaHQsCisKKyAgICAgICAgaXNBbWJpZW50TGlnaHQ6IHRydWUKKworICAgIH0gKTsKKworICAg
IC8qKgorICAgICAqIEBhdXRob3IgYWJlbG5hdGlvbiAvIGh0dHA6Ly9naXRodWIuY29tL2FiZWxu
YXRpb24KKyAgICAgKi8KKworICAgIGZ1bmN0aW9uIFJlY3RBcmVhTGlnaHQoIGNvbG9yLCBpbnRl
bnNpdHksIHdpZHRoLCBoZWlnaHQgKSB7CisKKyAgICAgICAgTGlnaHQuY2FsbCggdGhpcywgY29s
b3IsIGludGVuc2l0eSApOworCisgICAgICAgIHRoaXMudHlwZSA9ICdSZWN0QXJlYUxpZ2h0JzsK
KworICAgICAgICB0aGlzLndpZHRoID0gKCB3aWR0aCAhPT0gdW5kZWZpbmVkICkgPyB3aWR0aCA6
IDEwOworICAgICAgICB0aGlzLmhlaWdodCA9ICggaGVpZ2h0ICE9PSB1bmRlZmluZWQgKSA/IGhl
aWdodCA6IDEwOworCisgICAgfQorCisgICAgUmVjdEFyZWFMaWdodC5wcm90b3R5cGUgPSBPYmpl
Y3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBMaWdodC5wcm90b3R5cGUgKSwgeworCisgICAgICAg
IGNvbnN0cnVjdG9yOiBSZWN0QXJlYUxpZ2h0LAorCisgICAgICAgIGlzUmVjdEFyZWFMaWdodDog
dHJ1ZSwKKworICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHNvdXJjZSApIHsKKworICAgICAgICAg
ICAgTGlnaHQucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CisKKyAgICAgICAg
ICAgIHRoaXMud2lkdGggPSBzb3VyY2Uud2lkdGg7CisgICAgICAgICAgICB0aGlzLmhlaWdodCA9
IHNvdXJjZS5oZWlnaHQ7CisKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCisgICAgICAgIH0s
CisKKyAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoIG1ldGEgKSB7CisKKyAgICAgICAgICAgIHZh
ciBkYXRhID0gTGlnaHQucHJvdG90eXBlLnRvSlNPTi5jYWxsKCB0aGlzLCBtZXRhICk7CisKKyAg
ICAgICAgICAgIGRhdGEub2JqZWN0LndpZHRoID0gdGhpcy53aWR0aDsKKyAgICAgICAgICAgIGRh
dGEub2JqZWN0LmhlaWdodCA9IHRoaXMuaGVpZ2h0OworCisgICAgICAgICAgICByZXR1cm4gZGF0
YTsKKwogICAgICAgICB9CiAKICAgICB9ICk7CkBAIC0zNjUyOCw2ICszODA5MCw3IEBACiAgICAg
ICAgICAgICB2YXIgc2NvcGUgPSB0aGlzOwogCiAgICAgICAgICAgICB2YXIgbG9hZGVyID0gbmV3
IEZpbGVMb2FkZXIoIHNjb3BlLm1hbmFnZXIgKTsKKyAgICAgICAgICAgIGxvYWRlci5zZXRQYXRo
KCBzY29wZS5wYXRoICk7CiAgICAgICAgICAgICBsb2FkZXIubG9hZCggdXJsLCBmdW5jdGlvbiAo
IHRleHQgKSB7CiAKICAgICAgICAgICAgICAgICBvbkxvYWQoIHNjb3BlLnBhcnNlKCBKU09OLnBh
cnNlKCB0ZXh0ICkgKSApOwpAQCAtMzY1MzYsMTIgKzM4MDk5LDYgQEAKIAogICAgICAgICB9LAog
Ci0gICAgICAgIHNldFRleHR1cmVzOiBmdW5jdGlvbiAoIHZhbHVlICkgewotCi0gICAgICAgICAg
ICB0aGlzLnRleHR1cmVzID0gdmFsdWU7Ci0KLSAgICAgICAgfSwKLQogICAgICAgICBwYXJzZTog
ZnVuY3Rpb24gKCBqc29uICkgewogCiAgICAgICAgICAgICB2YXIgdGV4dHVyZXMgPSB0aGlzLnRl
eHR1cmVzOwpAQCAtMzY1NzAsMTMgKzM4MTI3LDExIEBACiAgICAgICAgICAgICBpZiAoIGpzb24u
c2hpbmluZXNzICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zaGluaW5lc3MgPSBqc29uLnNoaW5p
bmVzczsKICAgICAgICAgICAgIGlmICgganNvbi5jbGVhckNvYXQgIT09IHVuZGVmaW5lZCApIG1h
dGVyaWFsLmNsZWFyQ29hdCA9IGpzb24uY2xlYXJDb2F0OwogICAgICAgICAgICAgaWYgKCBqc29u
LmNsZWFyQ29hdFJvdWdobmVzcyAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuY2xlYXJDb2F0Um91
Z2huZXNzID0ganNvbi5jbGVhckNvYXRSb3VnaG5lc3M7Ci0gICAgICAgICAgICBpZiAoIGpzb24u
dW5pZm9ybXMgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnVuaWZvcm1zID0ganNvbi51bmlmb3Jt
czsKLSAgICAgICAgICAgIGlmICgganNvbi52ZXJ0ZXhTaGFkZXIgIT09IHVuZGVmaW5lZCApIG1h
dGVyaWFsLnZlcnRleFNoYWRlciA9IGpzb24udmVydGV4U2hhZGVyOwotICAgICAgICAgICAgaWYg
KCBqc29uLmZyYWdtZW50U2hhZGVyICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5mcmFnbWVudFNo
YWRlciA9IGpzb24uZnJhZ21lbnRTaGFkZXI7CiAgICAgICAgICAgICBpZiAoIGpzb24udmVydGV4
Q29sb3JzICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC52ZXJ0ZXhDb2xvcnMgPSBqc29uLnZlcnRl
eENvbG9yczsKICAgICAgICAgICAgIGlmICgganNvbi5mb2cgIT09IHVuZGVmaW5lZCApIG1hdGVy
aWFsLmZvZyA9IGpzb24uZm9nOwogICAgICAgICAgICAgaWYgKCBqc29uLmZsYXRTaGFkaW5nICE9
PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5mbGF0U2hhZGluZyA9IGpzb24uZmxhdFNoYWRpbmc7CiAg
ICAgICAgICAgICBpZiAoIGpzb24uYmxlbmRpbmcgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmJs
ZW5kaW5nID0ganNvbi5ibGVuZGluZzsKKyAgICAgICAgICAgIGlmICgganNvbi5jb21iaW5lICE9
PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5jb21iaW5lID0ganNvbi5jb21iaW5lOwogICAgICAgICAg
ICAgaWYgKCBqc29uLnNpZGUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnNpZGUgPSBqc29uLnNp
ZGU7CiAgICAgICAgICAgICBpZiAoIGpzb24ub3BhY2l0eSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJp
YWwub3BhY2l0eSA9IGpzb24ub3BhY2l0eTsKICAgICAgICAgICAgIGlmICgganNvbi50cmFuc3Bh
cmVudCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSBqc29uLnRyYW5zcGFy
ZW50OwpAQCAtMzY2MDIsMTEgKzM4MTU3LDc0IEBACiAKICAgICAgICAgICAgIGlmICgganNvbi5z
a2lubmluZyAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc2tpbm5pbmcgPSBqc29uLnNraW5uaW5n
OwogICAgICAgICAgICAgaWYgKCBqc29uLm1vcnBoVGFyZ2V0cyAhPT0gdW5kZWZpbmVkICkgbWF0
ZXJpYWwubW9ycGhUYXJnZXRzID0ganNvbi5tb3JwaFRhcmdldHM7CisgICAgICAgICAgICBpZiAo
IGpzb24ubW9ycGhOb3JtYWxzICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5tb3JwaE5vcm1hbHMg
PSBqc29uLm1vcnBoTm9ybWFsczsKICAgICAgICAgICAgIGlmICgganNvbi5kaXRoZXJpbmcgIT09
IHVuZGVmaW5lZCApIG1hdGVyaWFsLmRpdGhlcmluZyA9IGpzb24uZGl0aGVyaW5nOwogCiAgICAg
ICAgICAgICBpZiAoIGpzb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwudmlzaWJs
ZSA9IGpzb24udmlzaWJsZTsKICAgICAgICAgICAgIGlmICgganNvbi51c2VyRGF0YSAhPT0gdW5k
ZWZpbmVkICkgbWF0ZXJpYWwudXNlckRhdGEgPSBqc29uLnVzZXJEYXRhOwogCisgICAgICAgICAg
ICAvLyBTaGFkZXIgTWF0ZXJpYWwKKworICAgICAgICAgICAgaWYgKCBqc29uLnVuaWZvcm1zICE9
PSB1bmRlZmluZWQgKSB7CisKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgbmFtZSBpbiBqc29u
LnVuaWZvcm1zICkgeworCisgICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtID0ganNvbi51
bmlmb3Jtc1sgbmFtZSBdOworCisgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuaWZvcm1z
WyBuYW1lIF0gPSB7fTsKKworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCB1bmlmb3JtLnR5
cGUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuaWZvcm1zWyBuYW1lIF0udmFsdWUgPSBnZXRUZXh0
dXJlKCB1bmlmb3JtLnZhbHVlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGVyaWFsLnVuaWZvcm1zWyBuYW1lIF0udmFsdWUgPSBuZXcgQ29sb3IoKS5z
ZXRIZXgoIHVuaWZvcm0udmFsdWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndjInOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hdGVyaWFsLnVuaWZvcm1zWyBuYW1lIF0udmFsdWUgPSBuZXcgVmVjdG9y
MigpLmZyb21BcnJheSggdW5pZm9ybS52YWx1ZSApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd2Myc6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwudW5pZm9ybXNbIG5hbWUgXS52YWx1ZSA9IG5l
dyBWZWN0b3IzKCkuZnJvbUFycmF5KCB1bmlmb3JtLnZhbHVlICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Y0JzoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC51bmlmb3Jtc1sgbmFtZSBdLnZh
bHVlID0gbmV3IFZlY3RvcjQoKS5mcm9tQXJyYXkoIHVuaWZvcm0udmFsdWUgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnbTMnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuaWZvcm1zWyBu
YW1lIF0udmFsdWUgPSBuZXcgTWF0cml4MygpLmZyb21BcnJheSggdW5pZm9ybS52YWx1ZSApOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtNCc6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0ZXJpYWwudW5pZm9ybXNbIG5hbWUgXS52YWx1ZSA9IG5ldyBNYXRyaXg0KCku
ZnJvbUFycmF5KCB1bmlmb3JtLnZhbHVlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0ZXJpYWwudW5pZm9ybXNbIG5hbWUgXS52YWx1ZSA9IHVuaWZvcm0u
dmFsdWU7CisKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgganNvbi5kZWZpbmVzICE9PSB1bmRlZmlu
ZWQgKSBtYXRlcmlhbC5kZWZpbmVzID0ganNvbi5kZWZpbmVzOworICAgICAgICAgICAgaWYgKCBq
c29uLnZlcnRleFNoYWRlciAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwudmVydGV4U2hhZGVyID0g
anNvbi52ZXJ0ZXhTaGFkZXI7CisgICAgICAgICAgICBpZiAoIGpzb24uZnJhZ21lbnRTaGFkZXIg
IT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmZyYWdtZW50U2hhZGVyID0ganNvbi5mcmFnbWVudFNo
YWRlcjsKKworICAgICAgICAgICAgaWYgKCBqc29uLmV4dGVuc2lvbnMgIT09IHVuZGVmaW5lZCAp
IHsKKworICAgICAgICAgICAgICAgIGZvciAoIHZhciBrZXkgaW4ganNvbi5leHRlbnNpb25zICkg
eworCisgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmV4dGVuc2lvbnNbIGtleSBdID0ganNv
bi5leHRlbnNpb25zWyBrZXkgXTsKKworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICAvLyBEZXByZWNhdGVkCiAKICAgICAgICAgICAgIGlmICgganNvbi5z
aGFkaW5nICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5mbGF0U2hhZGluZyA9IGpzb24uc2hhZGlu
ZyA9PT0gMTsgLy8gVEhSRUUuRmxhdFNoYWRpbmcKQEAgLTM2NjE5LDYgKzM4MjM3LDcgQEAKICAg
ICAgICAgICAgIC8vIG1hcHMKIAogICAgICAgICAgICAgaWYgKCBqc29uLm1hcCAhPT0gdW5kZWZp
bmVkICkgbWF0ZXJpYWwubWFwID0gZ2V0VGV4dHVyZSgganNvbi5tYXAgKTsKKyAgICAgICAgICAg
IGlmICgganNvbi5tYXRjYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLm1hdGNhcCA9IGdldFRl
eHR1cmUoIGpzb24ubWF0Y2FwICk7CiAKICAgICAgICAgICAgIGlmICgganNvbi5hbHBoYU1hcCAh
PT0gdW5kZWZpbmVkICkgewogCkBAIC0zNjY2MSw4ICszODI4MCwxMCBAQAogICAgICAgICAgICAg
aWYgKCBqc29uLnNwZWN1bGFyTWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zcGVjdWxhck1h
cCA9IGdldFRleHR1cmUoIGpzb24uc3BlY3VsYXJNYXAgKTsKIAogICAgICAgICAgICAgaWYgKCBq
c29uLmVudk1hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuZW52TWFwID0gZ2V0VGV4dHVyZSgg
anNvbi5lbnZNYXAgKTsKKyAgICAgICAgICAgIGlmICgganNvbi5lbnZNYXBJbnRlbnNpdHkgIT09
IHVuZGVmaW5lZCApIG1hdGVyaWFsLmVudk1hcEludGVuc2l0eSA9IGpzb24uZW52TWFwSW50ZW5z
aXR5OwogCiAgICAgICAgICAgICBpZiAoIGpzb24ucmVmbGVjdGl2aXR5ICE9PSB1bmRlZmluZWQg
KSBtYXRlcmlhbC5yZWZsZWN0aXZpdHkgPSBqc29uLnJlZmxlY3Rpdml0eTsKKyAgICAgICAgICAg
IGlmICgganNvbi5yZWZyYWN0aW9uUmF0aW8gIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnJlZnJh
Y3Rpb25SYXRpbyA9IGpzb24ucmVmcmFjdGlvblJhdGlvOwogCiAgICAgICAgICAgICBpZiAoIGpz
b24ubGlnaHRNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmxpZ2h0TWFwID0gZ2V0VGV4dHVy
ZSgganNvbi5saWdodE1hcCApOwogICAgICAgICAgICAgaWYgKCBqc29uLmxpZ2h0TWFwSW50ZW5z
aXR5ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5saWdodE1hcEludGVuc2l0eSA9IGpzb24ubGln
aHRNYXBJbnRlbnNpdHk7CkBAIC0zNjY3NCw0OTEgKzM4Mjk1LDMyNyBAQAogCiAgICAgICAgICAg
ICByZXR1cm4gbWF0ZXJpYWw7CiAKKyAgICAgICAgfSwKKworICAgICAgICBzZXRQYXRoOiBmdW5j
dGlvbiAoIHZhbHVlICkgeworCisgICAgICAgICAgICB0aGlzLnBhdGggPSB2YWx1ZTsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzOworCisgICAgICAgIH0sCisKKyAgICAgICAgc2V0VGV4dHVyZXM6
IGZ1bmN0aW9uICggdmFsdWUgKSB7CisKKyAgICAgICAgICAgIHRoaXMudGV4dHVyZXMgPSB2YWx1
ZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworCiAgICAgICAgIH0KIAogICAgIH0gKTsKIAog
ICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAg
ICogQGF1dGhvciBEb24gTWNDdXJkeSAvIGh0dHBzOi8vd3d3LmRvbm1jY3VyZHkuY29tCiAgICAg
ICovCiAKLSAgICBmdW5jdGlvbiBCdWZmZXJHZW9tZXRyeUxvYWRlciggbWFuYWdlciApIHsKKyAg
ICB2YXIgTG9hZGVyVXRpbHMgPSB7CiAKLSAgICAgICAgdGhpcy5tYW5hZ2VyID0gKCBtYW5hZ2Vy
ICE9PSB1bmRlZmluZWQgKSA/IG1hbmFnZXIgOiBEZWZhdWx0TG9hZGluZ01hbmFnZXI7CisgICAg
ICAgIGRlY29kZVRleHQ6IGZ1bmN0aW9uICggYXJyYXkgKSB7CiAKLSAgICB9CisgICAgICAgICAg
ICBpZiAoIHR5cGVvZiBUZXh0RGVjb2RlciAhPT0gJ3VuZGVmaW5lZCcgKSB7CiAKLSAgICBPYmpl
Y3QuYXNzaWduKCBCdWZmZXJHZW9tZXRyeUxvYWRlci5wcm90b3R5cGUsIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKCBhcnJheSApOwogCi0gICAgICAg
IGxvYWQ6IGZ1bmN0aW9uICggdXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7Cisg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBzY29wZSA9IHRoaXM7CisgICAgICAgICAg
ICAvLyBBdm9pZCB0aGUgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBhcnJheSkgc2hv
cnRjdXQsIHdoaWNoCisgICAgICAgICAgICAvLyB0aHJvd3MgYSAibWF4aW11bSBjYWxsIHN0YWNr
IHNpemUgZXhjZWVkZWQiIGVycm9yIGZvciBsYXJnZSBhcnJheXMuCiAKLSAgICAgICAgICAgIHZh
ciBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlciggc2NvcGUubWFuYWdlciApOwotICAgICAgICAgICAg
bG9hZGVyLmxvYWQoIHVybCwgZnVuY3Rpb24gKCB0ZXh0ICkgeworICAgICAgICAgICAgdmFyIHMg
PSAnJzsKIAotICAgICAgICAgICAgICAgIG9uTG9hZCggc2NvcGUucGFyc2UoIEpTT04ucGFyc2Uo
IHRleHQgKSApICk7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGlsID0gYXJyYXkubGVu
Z3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgIH0sIG9uUHJvZ3Jlc3MsIG9uRXJy
b3IgKTsKKyAgICAgICAgICAgICAgICAvLyBJbXBsaWNpdGx5IGFzc3VtZXMgbGl0dGxlLWVuZGlh
bi4KKyAgICAgICAgICAgICAgICBzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoIGFycmF5WyBpIF0g
KTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgfQogCi0gICAgICAgIHBhcnNlOiBmdW5jdGlv
biAoIGpzb24gKSB7CisgICAgICAgICAgICB0cnkgewogCi0gICAgICAgICAgICB2YXIgZ2VvbWV0
cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTsKKyAgICAgICAgICAgICAgICAvLyBtZXJnZXMgbXVs
dGktYnl0ZSB1dGYtOCBjaGFyYWN0ZXJzLgogCi0gICAgICAgICAgICB2YXIgaW5kZXggPSBqc29u
LmRhdGEuaW5kZXg7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCgg
ZXNjYXBlKCBzICkgKTsKIAotICAgICAgICAgICAgaWYgKCBpbmRleCAhPT0gdW5kZWZpbmVkICkg
eworICAgICAgICAgICAgfSBjYXRjaCAoIGUgKSB7IC8vIHNlZSAjMTYzNTgKIAotICAgICAgICAg
ICAgICAgIHZhciB0eXBlZEFycmF5ID0gbmV3IFRZUEVEX0FSUkFZU1sgaW5kZXgudHlwZSBdKCBp
bmRleC5hcnJheSApOwotICAgICAgICAgICAgICAgIGdlb21ldHJ5LnNldEluZGV4KCBuZXcgQnVm
ZmVyQXR0cmlidXRlKCB0eXBlZEFycmF5LCAxICkgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
czsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGpzb24u
ZGF0YS5hdHRyaWJ1dGVzOworICAgICAgICB9LAogCi0gICAgICAgICAgICBmb3IgKCB2YXIga2V5
IGluIGF0dHJpYnV0ZXMgKSB7Ci0KLSAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlID0gYXR0
cmlidXRlc1sga2V5IF07Ci0gICAgICAgICAgICAgICAgdmFyIHR5cGVkQXJyYXkgPSBuZXcgVFlQ
RURfQVJSQVlTWyBhdHRyaWJ1dGUudHlwZSBdKCBhdHRyaWJ1dGUuYXJyYXkgKTsKLQotICAgICAg
ICAgICAgICAgIGdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgga2V5LCBuZXcgQnVmZmVyQXR0cmlidXRl
KCB0eXBlZEFycmF5LCBhdHRyaWJ1dGUuaXRlbVNpemUsIGF0dHJpYnV0ZS5ub3JtYWxpemVkICkg
KTsKLQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgZ3JvdXBzID0ganNvbi5kYXRh
Lmdyb3VwcyB8fCBqc29uLmRhdGEuZHJhd2NhbGxzIHx8IGpzb24uZGF0YS5vZmZzZXRzOworICAg
ICAgICBleHRyYWN0VXJsQmFzZTogZnVuY3Rpb24gKCB1cmwgKSB7CiAKLSAgICAgICAgICAgIGlm
ICggZ3JvdXBzICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICB2YXIgaW5kZXggPSB1cmwu
bGFzdEluZGV4T2YoICcvJyApOwogCi0gICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBu
ID0gZ3JvdXBzLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHsKKyAgICAgICAgICAgIGlmICggaW5k
ZXggPT09IC0gMSApIHJldHVybiAnLi8nOwogCi0gICAgICAgICAgICAgICAgICAgIHZhciBncm91
cCA9IGdyb3Vwc1sgaSBdOworICAgICAgICAgICAgcmV0dXJuIHVybC5zdWJzdHIoIDAsIGluZGV4
ICsgMSApOwogCi0gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmFkZEdyb3VwKCBncm91cC5z
dGFydCwgZ3JvdXAuY291bnQsIGdyb3VwLm1hdGVyaWFsSW5kZXggKTsKKyAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgfQorICAgIH07CiAKLSAgICAgICAgICAgIH0KKyAgICAvKioKKyAgICAg
KiBAYXV0aG9yIGJlbmFhZGFtcyAvIGh0dHBzOi8vdHdpdHRlci5jb20vYmVuX2FfYWRhbXMKKyAg
ICAgKi8KIAotICAgICAgICAgICAgdmFyIGJvdW5kaW5nU3BoZXJlID0ganNvbi5kYXRhLmJvdW5k
aW5nU3BoZXJlOworICAgIGZ1bmN0aW9uIEluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KCkgewogCi0g
ICAgICAgICAgICBpZiAoIGJvdW5kaW5nU3BoZXJlICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAg
IEJ1ZmZlckdlb21ldHJ5LmNhbGwoIHRoaXMgKTsKIAotICAgICAgICAgICAgICAgIHZhciBjZW50
ZXIgPSBuZXcgVmVjdG9yMygpOworICAgICAgICB0aGlzLnR5cGUgPSAnSW5zdGFuY2VkQnVmZmVy
R2VvbWV0cnknOworICAgICAgICB0aGlzLm1heEluc3RhbmNlZENvdW50ID0gdW5kZWZpbmVkOwog
Ci0gICAgICAgICAgICAgICAgaWYgKCBib3VuZGluZ1NwaGVyZS5jZW50ZXIgIT09IHVuZGVmaW5l
ZCApIHsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgY2VudGVyLmZyb21BcnJheSggYm91
bmRpbmdTcGhlcmUuY2VudGVyICk7CisgICAgSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkucHJvdG90
eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggQnVmZmVyR2VvbWV0cnkucHJvdG90
eXBlICksIHsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgY29uc3RydWN0b3I6IEluc3Rh
bmNlZEJ1ZmZlckdlb21ldHJ5LAogCi0gICAgICAgICAgICAgICAgZ2VvbWV0cnkuYm91bmRpbmdT
cGhlcmUgPSBuZXcgU3BoZXJlKCBjZW50ZXIsIGJvdW5kaW5nU3BoZXJlLnJhZGl1cyApOworICAg
ICAgICBpc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5OiB0cnVlLAogCi0gICAgICAgICAgICB9Cisg
ICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkgewogCi0gICAgICAgICAgICByZXR1cm4g
Z2VvbWV0cnk7CisgICAgICAgICAgICBCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29weS5jYWxs
KCB0aGlzLCBzb3VyY2UgKTsKIAotICAgICAgICB9CisgICAgICAgICAgICB0aGlzLm1heEluc3Rh
bmNlZENvdW50ID0gc291cmNlLm1heEluc3RhbmNlZENvdW50OwogCi0gICAgfSApOworICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICB2YXIgVFlQRURfQVJSQVlTID0gewotICAgICAgICBJ
bnQ4QXJyYXk6IEludDhBcnJheSwKLSAgICAgICAgVWludDhBcnJheTogVWludDhBcnJheSwKLSAg
ICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgSUUxMSBwcmUgS0IyOTI5NDM3LiBTZWUgIzExNDQwCi0g
ICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5OiB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09ICd1
bmRlZmluZWQnID8gVWludDhDbGFtcGVkQXJyYXkgOiBVaW50OEFycmF5LAotICAgICAgICBJbnQx
NkFycmF5OiBJbnQxNkFycmF5LAotICAgICAgICBVaW50MTZBcnJheTogVWludDE2QXJyYXksCi0g
ICAgICAgIEludDMyQXJyYXk6IEludDMyQXJyYXksCi0gICAgICAgIFVpbnQzMkFycmF5OiBVaW50
MzJBcnJheSwKLSAgICAgICAgRmxvYXQzMkFycmF5OiBGbG9hdDMyQXJyYXksCi0gICAgICAgIEZs
b2F0NjRBcnJheTogRmxvYXQ2NEFycmF5Ci0gICAgfTsKKyAgICAgICAgfSwKIAotICAgIC8qKgot
ICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAg
ICovCisgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CiAKLSAgICBmdW5jdGlvbiBMb2FkZXIo
KSB7fQorICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhp
cyApOwogCi0gICAgTG9hZGVyLkhhbmRsZXJzID0geworICAgICAgICB9LAogCi0gICAgICAgIGhh
bmRsZXJzOiBbXSwKKyAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgYWRk
OiBmdW5jdGlvbiAoIHJlZ2V4LCBsb2FkZXIgKSB7CisgICAgICAgICAgICB2YXIgZGF0YSA9IEJ1
ZmZlckdlb21ldHJ5LnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcyApOwogCi0gICAgICAgICAg
ICB0aGlzLmhhbmRsZXJzLnB1c2goIHJlZ2V4LCBsb2FkZXIgKTsKKyAgICAgICAgICAgIGRhdGEu
bWF4SW5zdGFuY2VkQ291bnQgPSB0aGlzLm1heEluc3RhbmNlZENvdW50OwogCi0gICAgICAgIH0s
CisgICAgICAgICAgICBkYXRhLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgPSB0cnVlOwogCi0g
ICAgICAgIGdldDogZnVuY3Rpb24gKCBmaWxlICkgeworICAgICAgICAgICAgcmV0dXJuIGRhdGE7
CiAKLSAgICAgICAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7CisgICAgICAgIH0K
IAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoOyBpIDwg
bDsgaSArPSAyICkgeworICAgIH0gKTsKIAotICAgICAgICAgICAgICAgIHZhciByZWdleCA9IGhh
bmRsZXJzWyBpIF07Ci0gICAgICAgICAgICAgICAgdmFyIGxvYWRlciA9IGhhbmRsZXJzWyBpICsg
MSBdOworICAgIC8qKgorICAgICAqIEBhdXRob3IgYmVuYWFkYW1zIC8gaHR0cHM6Ly90d2l0dGVy
LmNvbS9iZW5fYV9hZGFtcworICAgICAqLwogCi0gICAgICAgICAgICAgICAgaWYgKCByZWdleC50
ZXN0KCBmaWxlICkgKSB7CisgICAgZnVuY3Rpb24gSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKCBh
cnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQsIG1lc2hQZXJBdHRyaWJ1dGUgKSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRlcjsKKyAgICAgICAgaWYgKCB0eXBlb2YgKCBub3Jt
YWxpemVkICkgPT09ICdudW1iZXInICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbWVzaFBlckF0dHJpYnV0ZSA9IG5vcm1hbGl6ZWQ7CiAKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG5vcm1hbGl6ZWQgPSBmYWxzZTsKIAotICAgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRl
OiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgbm9ybWFsaXplZCBhcyB0aGUgdGhpcmQgYXJn
dW1lbnQuJyApOwogCiAgICAgICAgIH0KIAotICAgIH07Ci0KLSAgICBPYmplY3QuYXNzaWduKCBM
b2FkZXIucHJvdG90eXBlLCB7Ci0KLSAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLAor
ICAgICAgICBCdWZmZXJBdHRyaWJ1dGUuY2FsbCggdGhpcywgYXJyYXksIGl0ZW1TaXplLCBub3Jt
YWxpemVkICk7CiAKLSAgICAgICAgb25Mb2FkU3RhcnQ6IGZ1bmN0aW9uICgpIHt9LAorICAgICAg
ICB0aGlzLm1lc2hQZXJBdHRyaWJ1dGUgPSBtZXNoUGVyQXR0cmlidXRlIHx8IDE7CiAKLSAgICAg
ICAgb25Mb2FkUHJvZ3Jlc3M6IGZ1bmN0aW9uICgpIHt9LAorICAgIH0KIAotICAgICAgICBvbkxv
YWRDb21wbGV0ZTogZnVuY3Rpb24gKCkge30sCisgICAgSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRl
LnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIEJ1ZmZlckF0dHJpYnV0
ZS5wcm90b3R5cGUgKSwgewogCi0gICAgICAgIGluaXRNYXRlcmlhbHM6IGZ1bmN0aW9uICggbWF0
ZXJpYWxzLCB0ZXh0dXJlUGF0aCwgY3Jvc3NPcmlnaW4gKSB7CisgICAgICAgIGNvbnN0cnVjdG9y
OiBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUsCiAKLSAgICAgICAgICAgIHZhciBhcnJheSA9IFtd
OworICAgICAgICBpc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogdHJ1ZSwKIAotICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwOyBpIDwgbWF0ZXJpYWxzLmxlbmd0aDsgKysgaSApIHsKKyAgICAg
ICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UgKSB7CiAKLSAgICAgICAgICAgICAgICBhcnJheVsg
aSBdID0gdGhpcy5jcmVhdGVNYXRlcmlhbCggbWF0ZXJpYWxzWyBpIF0sIHRleHR1cmVQYXRoLCBj
cm9zc09yaWdpbiApOworICAgICAgICAgICAgQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5jb3B5
LmNhbGwoIHRoaXMsIHNvdXJjZSApOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Lm1lc2hQZXJBdHRyaWJ1dGUgPSBzb3VyY2UubWVzaFBlckF0dHJpYnV0ZTsKIAotICAgICAgICAg
ICAgcmV0dXJuIGFycmF5OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwK
IAotICAgICAgICBjcmVhdGVNYXRlcmlhbDogKCBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAg
IHZhciBCbGVuZGluZ01vZGUgPSB7Ci0gICAgICAgICAgICAgICAgTm9CbGVuZGluZzogTm9CbGVu
ZGluZywKLSAgICAgICAgICAgICAgICBOb3JtYWxCbGVuZGluZzogTm9ybWFsQmxlbmRpbmcsCi0g
ICAgICAgICAgICAgICAgQWRkaXRpdmVCbGVuZGluZzogQWRkaXRpdmVCbGVuZGluZywKLSAgICAg
ICAgICAgICAgICBTdWJ0cmFjdGl2ZUJsZW5kaW5nOiBTdWJ0cmFjdGl2ZUJsZW5kaW5nLAotICAg
ICAgICAgICAgICAgIE11bHRpcGx5QmxlbmRpbmc6IE11bHRpcGx5QmxlbmRpbmcsCi0gICAgICAg
ICAgICAgICAgQ3VzdG9tQmxlbmRpbmc6IEN1c3RvbUJsZW5kaW5nCi0gICAgICAgICAgICB9Owot
Ci0gICAgICAgICAgICB2YXIgY29sb3IgPSBuZXcgQ29sb3IoKTsKLSAgICAgICAgICAgIHZhciB0
ZXh0dXJlTG9hZGVyID0gbmV3IFRleHR1cmVMb2FkZXIoKTsKLSAgICAgICAgICAgIHZhciBtYXRl
cmlhbExvYWRlciA9IG5ldyBNYXRlcmlhbExvYWRlcigpOworICAgICAgICB0b0pTT046IGZ1bmN0
aW9uICgpIHsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZU1hdGVyaWFsKCBt
LCB0ZXh0dXJlUGF0aCwgY3Jvc3NPcmlnaW4gKSB7CisgICAgICAgICAgICB2YXIgZGF0YSA9IEJ1
ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoIHRoaXMgKTsKIAotICAgICAgICAg
ICAgICAgIC8vIGNvbnZlcnQgZnJvbSBvbGQgbWF0ZXJpYWwgZm9ybWF0CisgICAgICAgICAgICBk
YXRhLm1lc2hQZXJBdHRyaWJ1dGUgPSB0aGlzLm1lc2hQZXJBdHRyaWJ1dGU7CiAKLSAgICAgICAg
ICAgICAgICB2YXIgdGV4dHVyZXMgPSB7fTsKKyAgICAgICAgICAgIGRhdGEuaXNJbnN0YW5jZWRC
dWZmZXJBdHRyaWJ1dGUgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgZnVuY3Rpb24gbG9hZFRl
eHR1cmUoIHBhdGgsIHJlcGVhdCwgb2Zmc2V0LCB3cmFwLCBhbmlzb3Ryb3B5ICkgeworICAgICAg
ICAgICAgcmV0dXJuIGRhdGE7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bGxQYXRoID0g
dGV4dHVyZVBhdGggKyBwYXRoOwotICAgICAgICAgICAgICAgICAgICB2YXIgbG9hZGVyID0gTG9h
ZGVyLkhhbmRsZXJzLmdldCggZnVsbFBhdGggKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgICAgIHZhciB0ZXh0dXJlOworICAgIH0gKTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAo
IGxvYWRlciAhPT0gbnVsbCApIHsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0
dHA6Ly9tcmRvb2IuY29tLworICAgICAqLwogCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlID0gbG9hZGVyLmxvYWQoIGZ1bGxQYXRoICk7CisgICAgZnVuY3Rpb24gQnVmZmVyR2VvbWV0
cnlMb2FkZXIoIG1hbmFnZXIgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgdGhpcy5tYW5hZ2VyID0gKCBtYW5hZ2VyICE9PSB1bmRlZmluZWQgKSA/IG1hbmFnZXIg
OiBEZWZhdWx0TG9hZGluZ01hbmFnZXI7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVMb2FkZXIuc2V0Q3Jvc3NPcmlnaW4oIGNyb3NzT3JpZ2luICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlID0gdGV4dHVyZUxvYWRlci5sb2FkKCBmdWxsUGF0aCApOworICAgIH0K
IAotICAgICAgICAgICAgICAgICAgICB9CisgICAgT2JqZWN0LmFzc2lnbiggQnVmZmVyR2VvbWV0
cnlMb2FkZXIucHJvdG90eXBlLCB7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCByZXBlYXQg
IT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgbG9hZDogZnVuY3Rpb24gKCB1cmwsIG9uTG9hZCwg
b25Qcm9ncmVzcywgb25FcnJvciApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS5yZXBlYXQuZnJvbUFycmF5KCByZXBlYXQgKTsKKyAgICAgICAgICAgIHZhciBzY29wZSA9IHRo
aXM7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVwZWF0WyAwIF0gIT09IDEgKSB0
ZXh0dXJlLndyYXBTID0gUmVwZWF0V3JhcHBpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHJlcGVhdFsgMSBdICE9PSAxICkgdGV4dHVyZS53cmFwVCA9IFJlcGVhdFdyYXBwaW5nOwor
ICAgICAgICAgICAgdmFyIGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKCBzY29wZS5tYW5hZ2VyICk7
CisgICAgICAgICAgICBsb2FkZXIuc2V0UGF0aCggc2NvcGUucGF0aCApOworICAgICAgICAgICAg
bG9hZGVyLmxvYWQoIHVybCwgZnVuY3Rpb24gKCB0ZXh0ICkgewogCi0gICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBvbkxvYWQoIHNjb3BlLnBhcnNlKCBKU09OLnBhcnNlKCB0
ZXh0ICkgKSApOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICggb2Zmc2V0ICE9PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgICAgICB9LCBvblByb2dyZXNzLCBvbkVycm9yICk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUub2Zmc2V0LmZyb21BcnJheSggb2Zmc2V0ICk7CisgICAg
ICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICBwYXJzZTogZnVuY3Rpb24g
KCBqc29uICkgewogCi0gICAgICAgICAgICAgICAgICAgIGlmICggd3JhcCAhPT0gdW5kZWZpbmVk
ICkgeworICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0ganNvbi5pc0luc3RhbmNlZEJ1ZmZlckdl
b21ldHJ5ID8gbmV3IEluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KCkgOiBuZXcgQnVmZmVyR2VvbWV0
cnkoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB3cmFwWyAwIF0gPT09ICdyZXBl
YXQnICkgdGV4dHVyZS53cmFwUyA9IFJlcGVhdFdyYXBwaW5nOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB3cmFwWyAwIF0gPT09ICdtaXJyb3InICkgdGV4dHVyZS53cmFwUyA9IE1pcnJv
cmVkUmVwZWF0V3JhcHBpbmc7CisgICAgICAgICAgICB2YXIgaW5kZXggPSBqc29uLmRhdGEuaW5k
ZXg7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggd3JhcFsgMSBdID09PSAncmVwZWF0
JyApIHRleHR1cmUud3JhcFQgPSBSZXBlYXRXcmFwcGluZzsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggd3JhcFsgMSBdID09PSAnbWlycm9yJyApIHRleHR1cmUud3JhcFQgPSBNaXJyb3Jl
ZFJlcGVhdFdyYXBwaW5nOworICAgICAgICAgICAgaWYgKCBpbmRleCAhPT0gdW5kZWZpbmVkICkg
ewogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgdHlwZWRBcnJh
eSA9IG5ldyBUWVBFRF9BUlJBWVNbIGluZGV4LnR5cGUgXSggaW5kZXguYXJyYXkgKTsKKyAgICAg
ICAgICAgICAgICBnZW9tZXRyeS5zZXRJbmRleCggbmV3IEJ1ZmZlckF0dHJpYnV0ZSggdHlwZWRB
cnJheSwgMSApICk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBhbmlzb3Ryb3B5ICE9PSB1
bmRlZmluZWQgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUuYW5pc290cm9weSA9IGFuaXNvdHJvcHk7CisgICAgICAgICAgICB2YXIgYXR0cmlidXRl
cyA9IGpzb24uZGF0YS5hdHRyaWJ1dGVzOwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAoIHZhciBrZXkgaW4gYXR0cmlidXRlcyApIHsKIAotICAgICAgICAgICAgICAg
ICAgICB2YXIgdXVpZCA9IF9NYXRoLmdlbmVyYXRlVVVJRCgpOworICAgICAgICAgICAgICAgIHZh
ciBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzWyBrZXkgXTsKKyAgICAgICAgICAgICAgICB2YXIgdHlw
ZWRBcnJheSA9IG5ldyBUWVBFRF9BUlJBWVNbIGF0dHJpYnV0ZS50eXBlIF0oIGF0dHJpYnV0ZS5h
cnJheSApOworICAgICAgICAgICAgICAgIHZhciBidWZmZXJBdHRyaWJ1dGVDb25zdHIgPSBhdHRy
aWJ1dGUuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUgPyBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1
dGUgOiBCdWZmZXJBdHRyaWJ1dGU7CisgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckF0dHJpYnV0
ZSA9IG5ldyBidWZmZXJBdHRyaWJ1dGVDb25zdHIoIHR5cGVkQXJyYXksIGF0dHJpYnV0ZS5pdGVt
U2l6ZSwgYXR0cmlidXRlLm5vcm1hbGl6ZWQgKTsKKyAgICAgICAgICAgICAgICBpZiAoIGF0dHJp
YnV0ZS5uYW1lICE9PSB1bmRlZmluZWQgKSBidWZmZXJBdHRyaWJ1dGUubmFtZSA9IGF0dHJpYnV0
ZS5uYW1lOworICAgICAgICAgICAgICAgIGdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgga2V5LCBidWZm
ZXJBdHRyaWJ1dGUgKTsKIAotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlc1sgdXVpZCBdID0g
dGV4dHVyZTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXVp
ZDsKKyAgICAgICAgICAgIHZhciBtb3JwaEF0dHJpYnV0ZXMgPSBqc29uLmRhdGEubW9ycGhBdHRy
aWJ1dGVzOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBtb3JwaEF0dHJp
YnV0ZXMgKSB7CiAKLSAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIGZvciAoIHZh
ciBrZXkgaW4gbW9ycGhBdHRyaWJ1dGVzICkgewogCi0gICAgICAgICAgICAgICAgdmFyIGpzb24g
PSB7Ci0gICAgICAgICAgICAgICAgICAgIHV1aWQ6IF9NYXRoLmdlbmVyYXRlVVVJRCgpLAotICAg
ICAgICAgICAgICAgICAgICB0eXBlOiAnTWVzaExhbWJlcnRNYXRlcmlhbCcKLSAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlQXJyYXkgPSBtb3JwaEF0
dHJpYnV0ZXNbIGtleSBdOwogCi0gICAgICAgICAgICAgICAgZm9yICggdmFyIG5hbWUgaW4gbSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gW107CiAKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIHZhbHVlID0gbVsgbmFtZSBdOworICAgICAgICAgICAgICAgICAgICBmb3IgKCB2
YXIgaSA9IDAsIGlsID0gYXR0cmlidXRlQXJyYXkubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAK
LSAgICAgICAgICAgICAgICAgICAgc3dpdGNoICggbmFtZSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVBcnJheVsgaSBdOworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHR5cGVkQXJyYXkgPSBuZXcgVFlQRURfQVJSQVlTWyBhdHRyaWJ1dGUu
dHlwZSBdKCBhdHRyaWJ1dGUuYXJyYXkgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnRGJnQ29sb3InOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRGJnSW5kZXgnOgot
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnb3B0aWNhbERlbnNpdHknOgotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAnaWxsdW1pbmF0aW9uJzoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RiZ05hbWUnOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24ubmFtZSA9IHZhbHVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
YmxlbmRpbmcnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24uYmxlbmRpbmcgPSBC
bGVuZGluZ01vZGVbIHZhbHVlIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjb2xvckFtYmllbnQnOgotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAnbWFwQW1iaWVudCc6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuTG9hZGVyLmNyZWF0ZU1hdGVyaWFsOicsIG5hbWUs
ICdpcyBubyBsb25nZXIgc3VwcG9ydGVkLicgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbG9yRGlmZnVzZSc6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5jb2xvciA9IGNvbG9yLmZyb21BcnJheSgg
dmFsdWUgKS5nZXRIZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbG9yU3BlY3VsYXInOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpzb24uc3BlY3VsYXIgPSBjb2xvci5mcm9tQXJyYXkoIHZhbHVlICku
Z2V0SGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICdjb2xvckVtaXNzaXZlJzoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqc29uLmVtaXNzaXZlID0gY29sb3IuZnJvbUFycmF5KCB2YWx1ZSApLmdldEhleCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnc3BlY3VsYXJDb2VmJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
c29uLnNoaW5pbmVzcyA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2hhZGluZyc6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAnYmFzaWMnICkganNv
bi50eXBlID0gJ01lc2hCYXNpY01hdGVyaWFsJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICdwaG9uZycgKSBqc29uLnR5cGUgPSAnTWVz
aFBob25nTWF0ZXJpYWwnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUu
dG9Mb3dlckNhc2UoKSA9PT0gJ3N0YW5kYXJkJyApIGpzb24udHlwZSA9ICdNZXNoU3RhbmRhcmRN
YXRlcmlhbCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICdtYXBEaWZmdXNlJzoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqc29uLm1hcCA9IGxvYWRUZXh0dXJlKCB2YWx1ZSwgbS5tYXBEaWZmdXNlUmVwZWF0LCBt
Lm1hcERpZmZ1c2VPZmZzZXQsIG0ubWFwRGlmZnVzZVdyYXAsIG0ubWFwRGlmZnVzZUFuaXNvdHJv
cHkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ21hcERpZmZ1c2VSZXBlYXQnOgotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnbWFwRGlmZnVzZU9mZnNldCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICdtYXBEaWZmdXNlV3JhcCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBEaWZm
dXNlQW5pc290cm9weSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBFbWlzc2l2ZSc6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAganNvbi5lbWlzc2l2ZU1hcCA9IGxvYWRUZXh0dXJlKCB2YWx1ZSwgbS5tYXBF
bWlzc2l2ZVJlcGVhdCwgbS5tYXBFbWlzc2l2ZU9mZnNldCwgbS5tYXBFbWlzc2l2ZVdyYXAsIG0u
bWFwRW1pc3NpdmVBbmlzb3Ryb3B5ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBFbWlzc2l2ZVJlcGVhdCc6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBFbWlzc2l2ZU9mZnNldCc6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICdtYXBFbWlzc2l2ZVdyYXAnOgotICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnbWFwRW1pc3NpdmVBbmlzb3Ryb3B5JzoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcExpZ2h0
JzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLmxpZ2h0TWFwID0gbG9hZFRleHR1
cmUoIHZhbHVlLCBtLm1hcExpZ2h0UmVwZWF0LCBtLm1hcExpZ2h0T2Zmc2V0LCBtLm1hcExpZ2h0
V3JhcCwgbS5tYXBMaWdodEFuaXNvdHJvcHkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcExpZ2h0UmVwZWF0JzoK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcExpZ2h0T2Zmc2V0JzoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ21hcExpZ2h0V3JhcCc6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICdtYXBMaWdodEFuaXNvdHJvcHknOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwQU8nOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpzb24uYW9NYXAgPSBsb2FkVGV4dHVyZSggdmFsdWUsIG0u
bWFwQU9SZXBlYXQsIG0ubWFwQU9PZmZzZXQsIG0ubWFwQU9XcmFwLCBtLm1hcEFPQW5pc290cm9w
eSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnbWFwQU9SZXBlYXQnOgotICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnbWFwQU9PZmZzZXQnOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwQU9XcmFw
JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcEFPQW5pc290cm9weSc6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICdtYXBCdW1wJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLmJ1bXBNYXAg
PSBsb2FkVGV4dHVyZSggdmFsdWUsIG0ubWFwQnVtcFJlcGVhdCwgbS5tYXBCdW1wT2Zmc2V0LCBt
Lm1hcEJ1bXBXcmFwLCBtLm1hcEJ1bXBBbmlzb3Ryb3B5ICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBCdW1wU2Nh
bGUnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24uYnVtcFNjYWxlID0gdmFsdWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICdtYXBCdW1wUmVwZWF0JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J21hcEJ1bXBPZmZzZXQnOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwQnVtcFdy
YXAnOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwQnVtcEFuaXNvdHJvcHknOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnbWFwTm9ybWFsJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLm5v
cm1hbE1hcCA9IGxvYWRUZXh0dXJlKCB2YWx1ZSwgbS5tYXBOb3JtYWxSZXBlYXQsIG0ubWFwTm9y
bWFsT2Zmc2V0LCBtLm1hcE5vcm1hbFdyYXAsIG0ubWFwTm9ybWFsQW5pc290cm9weSApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnbWFwTm9ybWFsRmFjdG9yJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29u
Lm5vcm1hbFNjYWxlID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBOb3JtYWxSZXBlYXQnOgotICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwTm9ybWFsT2Zmc2V0JzoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ21hcE5vcm1hbFdyYXAnOgotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnbWFwTm9ybWFsQW5pc290cm9weSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBTcGVjdWxhcic6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAganNvbi5zcGVjdWxhck1hcCA9IGxvYWRUZXh0dXJlKCB2
YWx1ZSwgbS5tYXBTcGVjdWxhclJlcGVhdCwgbS5tYXBTcGVjdWxhck9mZnNldCwgbS5tYXBTcGVj
dWxhcldyYXAsIG0ubWFwU3BlY3VsYXJBbmlzb3Ryb3B5ICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBTcGVjdWxh
clJlcGVhdCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBTcGVjdWxhck9mZnNl
dCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBTcGVjdWxhcldyYXAnOgotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwU3BlY3VsYXJBbmlzb3Ryb3B5JzoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ21hcE1ldGFsbmVzcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5tZXRh
bG5lc3NNYXAgPSBsb2FkVGV4dHVyZSggdmFsdWUsIG0ubWFwTWV0YWxuZXNzUmVwZWF0LCBtLm1h
cE1ldGFsbmVzc09mZnNldCwgbS5tYXBNZXRhbG5lc3NXcmFwLCBtLm1hcE1ldGFsbmVzc0FuaXNv
dHJvcHkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ21hcE1ldGFsbmVzc1JlcGVhdCc6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICdtYXBNZXRhbG5lc3NPZmZzZXQnOgotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnbWFwTWV0YWxuZXNzV3JhcCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICdtYXBNZXRhbG5lc3NBbmlzb3Ryb3B5JzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcFJvdWdobmVzcyc6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAganNvbi5yb3VnaG5lc3NNYXAgPSBsb2FkVGV4dHVyZSgg
dmFsdWUsIG0ubWFwUm91Z2huZXNzUmVwZWF0LCBtLm1hcFJvdWdobmVzc09mZnNldCwgbS5tYXBS
b3VnaG5lc3NXcmFwLCBtLm1hcFJvdWdobmVzc0FuaXNvdHJvcHkgKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcFJv
dWdobmVzc1JlcGVhdCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBSb3VnaG5l
c3NPZmZzZXQnOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwUm91Z2huZXNzV3Jh
cCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBSb3VnaG5lc3NBbmlzb3Ryb3B5
JzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ21hcEFscGhhJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29u
LmFscGhhTWFwID0gbG9hZFRleHR1cmUoIHZhbHVlLCBtLm1hcEFscGhhUmVwZWF0LCBtLm1hcEFs
cGhhT2Zmc2V0LCBtLm1hcEFscGhhV3JhcCwgbS5tYXBBbHBoYUFuaXNvdHJvcHkgKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ21hcEFscGhhUmVwZWF0JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcEFs
cGhhT2Zmc2V0JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcEFscGhhV3JhcCc6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBBbHBoYUFuaXNvdHJvcHknOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnZmxpcFNpZGVkJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnNpZGUg
PSBCYWNrU2lkZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ2RvdWJsZVNpZGVkJzoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqc29uLnNpZGUgPSBEb3VibGVTaWRlOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndHJhbnNwYXJlbmN5JzoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5Mb2FkZXIu
Y3JlYXRlTWF0ZXJpYWw6IHRyYW5zcGFyZW5jeSBoYXMgYmVlbiByZW5hbWVkIHRvIG9wYWNpdHkn
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5vcGFjaXR5ID0gdmFsdWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICdkZXB0aFRlc3QnOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVwdGhX
cml0ZSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjb2xvcldyaXRlJzoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ29wYWNpdHknOgotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAncmVmbGVjdGl2aXR5JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Ry
YW5zcGFyZW50JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Zpc2libGUnOgotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAnd2lyZWZyYW1lJzoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqc29uWyBuYW1lIF0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3ZlcnRleENvbG9ycyc6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gdHJ1ZSApIGpzb24u
dmVydGV4Q29sb3JzID0gVmVydGV4Q29sb3JzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggdmFsdWUgPT09ICdmYWNlJyApIGpzb24udmVydGV4Q29sb3JzID0gRmFjZUNvbG9yczsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigg
J1RIUkVFLkxvYWRlci5jcmVhdGVNYXRlcmlhbDogVW5zdXBwb3J0ZWQnLCBuYW1lLCB2YWx1ZSAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGJ1ZmZlckF0dHJpYnV0ZSA9IG5ldyBCdWZmZXJBdHRyaWJ1dGUoIHR5cGVkQXJy
YXksIGF0dHJpYnV0ZS5pdGVtU2l6ZSwgYXR0cmlidXRlLm5vcm1hbGl6ZWQgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggYXR0cmlidXRlLm5hbWUgIT09IHVuZGVmaW5lZCApIGJ1ZmZl
ckF0dHJpYnV0ZS5uYW1lID0gYXR0cmlidXRlLm5hbWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhcnJheS5wdXNoKCBidWZmZXJBdHRyaWJ1dGUgKTsKIAogICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGpzb24udHlwZSA9
PT0gJ01lc2hCYXNpY01hdGVyaWFsJyApIGRlbGV0ZSBqc29uLmVtaXNzaXZlOwotICAgICAgICAg
ICAgICAgIGlmICgganNvbi50eXBlICE9PSAnTWVzaFBob25nTWF0ZXJpYWwnICkgZGVsZXRlIGpz
b24uc3BlY3VsYXI7CisgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRl
c1sga2V5IF0gPSBhcnJheTsKIAotICAgICAgICAgICAgICAgIGlmICgganNvbi5vcGFjaXR5IDwg
MSApIGpzb24udHJhbnNwYXJlbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgIG1hdGVyaWFsTG9hZGVyLnNldFRleHR1cmVzKCB0ZXh0dXJlcyApOworICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGVyaWFsTG9hZGVyLnBhcnNlKCBq
c29uICk7CisgICAgICAgICAgICB2YXIgZ3JvdXBzID0ganNvbi5kYXRhLmdyb3VwcyB8fCBqc29u
LmRhdGEuZHJhd2NhbGxzIHx8IGpzb24uZGF0YS5vZmZzZXRzOwogCi0gICAgICAgICAgICB9Owor
ICAgICAgICAgICAgaWYgKCBncm91cHMgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICB9ICko
KQorICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbiA9IGdyb3Vwcy5sZW5ndGg7IGkg
IT09IG47ICsrIGkgKSB7CiAKLSAgICB9ICk7CisgICAgICAgICAgICAgICAgICAgIHZhciBncm91
cCA9IGdyb3Vwc1sgaSBdOwogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBEb24gTWNDdXJkeSAv
IGh0dHBzOi8vd3d3LmRvbm1jY3VyZHkuY29tCi0gICAgICovCisgICAgICAgICAgICAgICAgICAg
IGdlb21ldHJ5LmFkZEdyb3VwKCBncm91cC5zdGFydCwgZ3JvdXAuY291bnQsIGdyb3VwLm1hdGVy
aWFsSW5kZXggKTsKIAotICAgIHZhciBMb2FkZXJVdGlscyA9IHsKKyAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgZGVjb2RlVGV4dDogZnVuY3Rpb24gKCBhcnJheSApIHsKKyAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCB0eXBlb2YgVGV4dERlY29kZXIgIT09ICd1bmRlZmluZWQn
ICkgeworICAgICAgICAgICAgdmFyIGJvdW5kaW5nU3BoZXJlID0ganNvbi5kYXRhLmJvdW5kaW5n
U3BoZXJlOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29k
ZSggYXJyYXkgKTsKKyAgICAgICAgICAgIGlmICggYm91bmRpbmdTcGhlcmUgIT09IHVuZGVmaW5l
ZCApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBjZW50ZXIgPSBuZXcg
VmVjdG9yMygpOwogCi0gICAgICAgICAgICAvLyBBdm9pZCB0aGUgU3RyaW5nLmZyb21DaGFyQ29k
ZS5hcHBseShudWxsLCBhcnJheSkgc2hvcnRjdXQsIHdoaWNoCi0gICAgICAgICAgICAvLyB0aHJv
d3MgYSAibWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQiIGVycm9yIGZvciBsYXJnZSBh
cnJheXMuCisgICAgICAgICAgICAgICAgaWYgKCBib3VuZGluZ1NwaGVyZS5jZW50ZXIgIT09IHVu
ZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgdmFyIHMgPSAnJzsKKyAgICAgICAgICAgICAgICAg
ICAgY2VudGVyLmZyb21BcnJheSggYm91bmRpbmdTcGhlcmUuY2VudGVyICk7CiAKLSAgICAgICAg
ICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBhcnJheS5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsK
KyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBJbXBsaWNpdGx5IGFzc3Vt
ZXMgbGl0dGxlLWVuZGlhbi4KLSAgICAgICAgICAgICAgICBzICs9IFN0cmluZy5mcm9tQ2hhckNv
ZGUoIGFycmF5WyBpIF0gKTsKKyAgICAgICAgICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ1NwaGVy
ZSA9IG5ldyBTcGhlcmUoIGNlbnRlciwgYm91bmRpbmdTcGhlcmUucmFkaXVzICk7CiAKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgLy8gTWVyZ2VzIG11bHRpLWJ5dGUgdXRmLTggY2hhcmFj
dGVycy4KLSAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoIGVzY2FwZSggcyAp
ICk7Ci0KLSAgICAgICAgfSwKKyAgICAgICAgICAgIGlmICgganNvbi5uYW1lICkgZ2VvbWV0cnku
bmFtZSA9IGpzb24ubmFtZTsKKyAgICAgICAgICAgIGlmICgganNvbi51c2VyRGF0YSApIGdlb21l
dHJ5LnVzZXJEYXRhID0ganNvbi51c2VyRGF0YTsKIAotICAgICAgICBleHRyYWN0VXJsQmFzZTog
ZnVuY3Rpb24gKCB1cmwgKSB7CisgICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnk7CiAKLSAgICAg
ICAgICAgIHZhciBpbmRleCA9IHVybC5sYXN0SW5kZXhPZiggJy8nICk7CisgICAgICAgIH0sCiAK
LSAgICAgICAgICAgIGlmICggaW5kZXggPT09IC0gMSApIHJldHVybiAnLi8nOworICAgICAgICBz
ZXRQYXRoOiBmdW5jdGlvbiAoIHZhbHVlICkgewogCi0gICAgICAgICAgICByZXR1cm4gdXJsLnN1
YnN0ciggMCwgaW5kZXggKyAxICk7CisgICAgICAgICAgICB0aGlzLnBhdGggPSB2YWx1ZTsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0KIAorICAgIH0gKTsKKworICAgIHZh
ciBUWVBFRF9BUlJBWVMgPSB7CisgICAgICAgIEludDhBcnJheTogSW50OEFycmF5LAorICAgICAg
ICBVaW50OEFycmF5OiBVaW50OEFycmF5LAorICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBJRTEx
IHByZSBLQjI5Mjk0MzcuIFNlZSAjMTE0NDAKKyAgICAgICAgVWludDhDbGFtcGVkQXJyYXk6IHR5
cGVvZiBVaW50OENsYW1wZWRBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OENsYW1wZWRBcnJh
eSA6IFVpbnQ4QXJyYXksCisgICAgICAgIEludDE2QXJyYXk6IEludDE2QXJyYXksCisgICAgICAg
IFVpbnQxNkFycmF5OiBVaW50MTZBcnJheSwKKyAgICAgICAgSW50MzJBcnJheTogSW50MzJBcnJh
eSwKKyAgICAgICAgVWludDMyQXJyYXk6IFVpbnQzMkFycmF5LAorICAgICAgICBGbG9hdDMyQXJy
YXk6IEZsb2F0MzJBcnJheSwKKyAgICAgICAgRmxvYXQ2NEFycmF5OiBGbG9hdDY0QXJyYXkKICAg
ICB9OwogCiAgICAgLyoqCiAgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNv
bS8KLSAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwog
ICAgICAqLwogCi0gICAgZnVuY3Rpb24gSlNPTkxvYWRlciggbWFuYWdlciApIHsKLQotICAgICAg
ICBpZiAoIHR5cGVvZiBtYW5hZ2VyID09PSAnYm9vbGVhbicgKSB7Ci0KLSAgICAgICAgICAgIGNv
bnNvbGUud2FybiggJ1RIUkVFLkpTT05Mb2FkZXI6IHNob3dTdGF0dXMgcGFyYW1ldGVyIGhhcyBi
ZWVuIHJlbW92ZWQgZnJvbSBjb25zdHJ1Y3Rvci4nICk7Ci0gICAgICAgICAgICBtYW5hZ2VyID0g
dW5kZWZpbmVkOwotCi0gICAgICAgIH0KKyAgICBmdW5jdGlvbiBPYmplY3RMb2FkZXIoIG1hbmFn
ZXIgKSB7CiAKICAgICAgICAgdGhpcy5tYW5hZ2VyID0gKCBtYW5hZ2VyICE9PSB1bmRlZmluZWQg
KSA/IG1hbmFnZXIgOiBEZWZhdWx0TG9hZGluZ01hbmFnZXI7Ci0KLSAgICAgICAgdGhpcy53aXRo
Q3JlZGVudGlhbHMgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5yZXNvdXJjZVBhdGggPSAnJzsKIAog
ICAgIH0KIAotICAgIE9iamVjdC5hc3NpZ24oIEpTT05Mb2FkZXIucHJvdG90eXBlLCB7CisgICAg
T2JqZWN0LmFzc2lnbiggT2JqZWN0TG9hZGVyLnByb3RvdHlwZSwgewogCiAgICAgICAgIGNyb3Nz
T3JpZ2luOiAnYW5vbnltb3VzJywKIApAQCAtMzcxNjYsNzEwICszODYyMywxNTggQEAKIAogICAg
ICAgICAgICAgdmFyIHNjb3BlID0gdGhpczsKIAotICAgICAgICAgICAgdmFyIHRleHR1cmVQYXRo
ID0gdGhpcy50ZXh0dXJlUGF0aCAmJiAoIHR5cGVvZiB0aGlzLnRleHR1cmVQYXRoID09PSAnc3Ry
aW5nJyApID8gdGhpcy50ZXh0dXJlUGF0aCA6IExvYWRlclV0aWxzLmV4dHJhY3RVcmxCYXNlKCB1
cmwgKTsKKyAgICAgICAgICAgIHZhciBwYXRoID0gKCB0aGlzLnBhdGggPT09IHVuZGVmaW5lZCAp
ID8gTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoIHVybCApIDogdGhpcy5wYXRoOworICAgICAg
ICAgICAgdGhpcy5yZXNvdXJjZVBhdGggPSB0aGlzLnJlc291cmNlUGF0aCB8fCBwYXRoOwogCi0g
ICAgICAgICAgICB2YXIgbG9hZGVyID0gbmV3IEZpbGVMb2FkZXIoIHRoaXMubWFuYWdlciApOwot
ICAgICAgICAgICAgbG9hZGVyLnNldFdpdGhDcmVkZW50aWFscyggdGhpcy53aXRoQ3JlZGVudGlh
bHMgKTsKKyAgICAgICAgICAgIHZhciBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlciggc2NvcGUubWFu
YWdlciApOworICAgICAgICAgICAgbG9hZGVyLnNldFBhdGgoIHRoaXMucGF0aCApOwogICAgICAg
ICAgICAgbG9hZGVyLmxvYWQoIHVybCwgZnVuY3Rpb24gKCB0ZXh0ICkgewogCi0gICAgICAgICAg
ICAgICAgdmFyIGpzb24gPSBKU09OLnBhcnNlKCB0ZXh0ICk7Ci0gICAgICAgICAgICAgICAgdmFy
IG1ldGFkYXRhID0ganNvbi5tZXRhZGF0YTsKKyAgICAgICAgICAgICAgICB2YXIganNvbiA9IG51
bGw7CiAKLSAgICAgICAgICAgICAgICBpZiAoIG1ldGFkYXRhICE9PSB1bmRlZmluZWQgKSB7Cisg
ICAgICAgICAgICAgICAgdHJ5IHsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IG1l
dGFkYXRhLnR5cGU7CisgICAgICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKCB0ZXh0
ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlICE9PSB1bmRlZmluZWQgKSB7Cisg
ICAgICAgICAgICAgICAgfSBjYXRjaCAoIGVycm9yICkgewogCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ29iamVjdCcgKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICggb25FcnJvciAhPT0gdW5kZWZpbmVkICkgb25FcnJvciggZXJyb3IgKTsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5KU09O
TG9hZGVyOiAnICsgdXJsICsgJyBzaG91bGQgYmUgbG9hZGVkIHdpdGggVEhSRUUuT2JqZWN0TG9h
ZGVyIGluc3RlYWQuJyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFOk9iamVjdExvYWRlcjogQ2Fu
XCd0IHBhcnNlICcgKyB1cmwgKyAnLicsIGVycm9yLm1lc3NhZ2UgKTsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciBtZXRh
ZGF0YSA9IGpzb24ubWV0YWRhdGE7CisKKyAgICAgICAgICAgICAgICBpZiAoIG1ldGFkYXRhID09
PSB1bmRlZmluZWQgfHwgbWV0YWRhdGEudHlwZSA9PT0gdW5kZWZpbmVkIHx8IG1ldGFkYXRhLnR5
cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2dlb21ldHJ5JyApIHsKKworICAgICAgICAgICAgICAgICAg
ICBjb25zb2xlLmVycm9yKCAnVEhSRUUuT2JqZWN0TG9hZGVyOiBDYW5cJ3QgbG9hZCAnICsgdXJs
ICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSBzY29wZS5wYXJzZSgganNvbiwgdGV4dHVyZVBh
dGggKTsKLSAgICAgICAgICAgICAgICBvbkxvYWQoIG9iamVjdC5nZW9tZXRyeSwgb2JqZWN0Lm1h
dGVyaWFscyApOworICAgICAgICAgICAgICAgIHNjb3BlLnBhcnNlKCBqc29uLCBvbkxvYWQgKTsK
IAogICAgICAgICAgICAgfSwgb25Qcm9ncmVzcywgb25FcnJvciApOwogCiAgICAgICAgIH0sCiAK
LSAgICAgICAgc2V0Q3Jvc3NPcmlnaW46IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAgICAgIHNl
dFBhdGg6IGZ1bmN0aW9uICggdmFsdWUgKSB7CiAKLSAgICAgICAgICAgIHRoaXMuY3Jvc3NPcmln
aW4gPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMucGF0aCA9IHZhbHVlOwogICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBzZXRUZXh0dXJlUGF0aDogZnVu
Y3Rpb24gKCB2YWx1ZSApIHsKKyAgICAgICAgc2V0UmVzb3VyY2VQYXRoOiBmdW5jdGlvbiAoIHZh
bHVlICkgewogCi0gICAgICAgICAgICB0aGlzLnRleHR1cmVQYXRoID0gdmFsdWU7CisgICAgICAg
ICAgICB0aGlzLnJlc291cmNlUGF0aCA9IHZhbHVlOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAKICAgICAgICAgfSwKIAotICAgICAgICBwYXJzZTogKCBmdW5jdGlvbiAoKSB7Ci0KLSAgICAg
ICAgICAgIGZ1bmN0aW9uIHBhcnNlTW9kZWwoIGpzb24sIGdlb21ldHJ5ICkgewotCi0gICAgICAg
ICAgICAgICAgZnVuY3Rpb24gaXNCaXRTZXQoIHZhbHVlLCBwb3NpdGlvbiApIHsKLQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgJiAoIDEgPDwgcG9zaXRpb24gKTsKLQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBpLCBqLCBmaSwKKyAgICAgICAgc2V0
Q3Jvc3NPcmlnaW46IGZ1bmN0aW9uICggdmFsdWUgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0LCB6TGVuZ3RoLAorICAgICAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHZhbHVlOwor
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICAgICAgY29sb3JJbmRl
eCwgbm9ybWFsSW5kZXgsIHV2SW5kZXgsIG1hdGVyaWFsSW5kZXgsCisgICAgICAgIH0sCiAKLSAg
ICAgICAgICAgICAgICAgICAgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgaXNRdWFkLAotICAg
ICAgICAgICAgICAgICAgICBoYXNNYXRlcmlhbCwKLSAgICAgICAgICAgICAgICAgICAgaGFzRmFj
ZVZlcnRleFV2LAotICAgICAgICAgICAgICAgICAgICBoYXNGYWNlTm9ybWFsLCBoYXNGYWNlVmVy
dGV4Tm9ybWFsLAotICAgICAgICAgICAgICAgICAgICBoYXNGYWNlQ29sb3IsIGhhc0ZhY2VWZXJ0
ZXhDb2xvciwKKyAgICAgICAgcGFyc2U6IGZ1bmN0aW9uICgganNvbiwgb25Mb2FkICkgewogCi0g
ICAgICAgICAgICAgICAgICAgIHZlcnRleCwgZmFjZSwgZmFjZUEsIGZhY2VCLCBoZXgsIG5vcm1h
bCwKKyAgICAgICAgICAgIHZhciBzaGFwZXMgPSB0aGlzLnBhcnNlU2hhcGUoIGpzb24uc2hhcGVz
ICk7CisgICAgICAgICAgICB2YXIgZ2VvbWV0cmllcyA9IHRoaXMucGFyc2VHZW9tZXRyaWVzKCBq
c29uLmdlb21ldHJpZXMsIHNoYXBlcyApOwogCi0gICAgICAgICAgICAgICAgICAgIHV2TGF5ZXIs
IHV2LCB1LCB2LAorICAgICAgICAgICAgdmFyIGltYWdlcyA9IHRoaXMucGFyc2VJbWFnZXMoIGpz
b24uaW1hZ2VzLCBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgZmFjZXMgPSBq
c29uLmZhY2VzLAotICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlcyA9IGpzb24udmVydGljZXMs
Ci0gICAgICAgICAgICAgICAgICAgIG5vcm1hbHMgPSBqc29uLm5vcm1hbHMsCi0gICAgICAgICAg
ICAgICAgICAgIGNvbG9ycyA9IGpzb24uY29sb3JzLAorICAgICAgICAgICAgICAgIGlmICggb25M
b2FkICE9PSB1bmRlZmluZWQgKSBvbkxvYWQoIG9iamVjdCApOwogCi0gICAgICAgICAgICAgICAg
ICAgIHNjYWxlID0ganNvbi5zY2FsZSwKKyAgICAgICAgICAgIH0gKTsKIAotICAgICAgICAgICAg
ICAgICAgICBuVXZMYXllcnMgPSAwOworICAgICAgICAgICAgdmFyIHRleHR1cmVzID0gdGhpcy5w
YXJzZVRleHR1cmVzKCBqc29uLnRleHR1cmVzLCBpbWFnZXMgKTsKKyAgICAgICAgICAgIHZhciBt
YXRlcmlhbHMgPSB0aGlzLnBhcnNlTWF0ZXJpYWxzKCBqc29uLm1hdGVyaWFscywgdGV4dHVyZXMg
KTsKIAorICAgICAgICAgICAgdmFyIG9iamVjdCA9IHRoaXMucGFyc2VPYmplY3QoIGpzb24ub2Jq
ZWN0LCBnZW9tZXRyaWVzLCBtYXRlcmlhbHMgKTsKIAotICAgICAgICAgICAgICAgIGlmICgganNv
bi51dnMgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIGlmICgganNvbi5hbmltYXRpb25z
ICkgewogCi0gICAgICAgICAgICAgICAgICAgIC8vIGRpc3JlZ2FyZCBlbXB0eSBhcnJheXMKKyAg
ICAgICAgICAgICAgICBvYmplY3QuYW5pbWF0aW9ucyA9IHRoaXMucGFyc2VBbmltYXRpb25zKCBq
c29uLmFuaW1hdGlvbnMgKTsKIAotICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8
IGpzb24udXZzLmxlbmd0aDsgaSArKyApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBqc29uLnV2c1sgaSBdLmxlbmd0aCApIG5VdkxheWVycyArKzsKKyAg
ICAgICAgICAgIGlmICgganNvbi5pbWFnZXMgPT09IHVuZGVmaW5lZCB8fCBqc29uLmltYWdlcy5s
ZW5ndGggPT09IDAgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICggb25Mb2FkICE9PSB1bmRlZmluZWQgKSBvbkxvYWQoIG9iamVjdCApOwogCi0gICAgICAg
ICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgblV2TGF5ZXJzOyBpICsrICkgeworICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5mYWNlVmVydGV4VXZz
WyBpIF0gPSBbXTsKKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAKLSAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICBwYXJzZVNo
YXBlOiBmdW5jdGlvbiAoIGpzb24gKSB7CiAKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSAwOwot
ICAgICAgICAgICAgICAgIHpMZW5ndGggPSB2ZXJ0aWNlcy5sZW5ndGg7CisgICAgICAgICAgICB2
YXIgc2hhcGVzID0ge307CiAKLSAgICAgICAgICAgICAgICB3aGlsZSAoIG9mZnNldCA8IHpMZW5n
dGggKSB7CisgICAgICAgICAgICBpZiAoIGpzb24gIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAg
ICAgICAgICAgICAgICB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMCwgbCA9IGpzb24ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAg
ICAgICAgICAgICAgICB2ZXJ0ZXgueCA9IHZlcnRpY2VzWyBvZmZzZXQgKysgXSAqIHNjYWxlOwot
ICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXgueSA9IHZlcnRpY2VzWyBvZmZzZXQgKysgXSAqIHNj
YWxlOwotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXgueiA9IHZlcnRpY2VzWyBvZmZzZXQgKysg
XSAqIHNjYWxlOworICAgICAgICAgICAgICAgICAgICB2YXIgc2hhcGUgPSBuZXcgU2hhcGUoKS5m
cm9tSlNPTigganNvblsgaSBdICk7CiAKLSAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkudmVy
dGljZXMucHVzaCggdmVydGV4ICk7CisgICAgICAgICAgICAgICAgICAgIHNoYXBlc1sgc2hhcGUu
dXVpZCBdID0gc2hhcGU7CiAKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBv
ZmZzZXQgPSAwOwotICAgICAgICAgICAgICAgIHpMZW5ndGggPSBmYWNlcy5sZW5ndGg7CisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB3aGlsZSAoIG9mZnNldCA8IHpMZW5ndGggKSB7
CisgICAgICAgICAgICByZXR1cm4gc2hhcGVzOwogCi0gICAgICAgICAgICAgICAgICAgIHR5cGUg
PSBmYWNlc1sgb2Zmc2V0ICsrIF07CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAg
aXNRdWFkID0gaXNCaXRTZXQoIHR5cGUsIDAgKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzTWF0
ZXJpYWwgPSBpc0JpdFNldCggdHlwZSwgMSApOwotICAgICAgICAgICAgICAgICAgICBoYXNGYWNl
VmVydGV4VXYgPSBpc0JpdFNldCggdHlwZSwgMyApOwotICAgICAgICAgICAgICAgICAgICBoYXNG
YWNlTm9ybWFsID0gaXNCaXRTZXQoIHR5cGUsIDQgKTsKLSAgICAgICAgICAgICAgICAgICAgaGFz
RmFjZVZlcnRleE5vcm1hbCA9IGlzQml0U2V0KCB0eXBlLCA1ICk7Ci0gICAgICAgICAgICAgICAg
ICAgIGhhc0ZhY2VDb2xvciA9IGlzQml0U2V0KCB0eXBlLCA2ICk7Ci0gICAgICAgICAgICAgICAg
ICAgIGhhc0ZhY2VWZXJ0ZXhDb2xvciA9IGlzQml0U2V0KCB0eXBlLCA3ICk7CisgICAgICAgIHBh
cnNlR2VvbWV0cmllczogZnVuY3Rpb24gKCBqc29uLCBzaGFwZXMgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgLy8gY29uc29sZS5sb2coInR5cGUiLCB0eXBlLCAiYml0cyIsIGlzUXVhZCwgaGFz
TWF0ZXJpYWwsIGhhc0ZhY2VWZXJ0ZXhVdiwgaGFzRmFjZU5vcm1hbCwgaGFzRmFjZVZlcnRleE5v
cm1hbCwgaGFzRmFjZUNvbG9yLCBoYXNGYWNlVmVydGV4Q29sb3IpOworICAgICAgICAgICAgdmFy
IGdlb21ldHJpZXMgPSB7fTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIGlzUXVhZCApIHsK
KyAgICAgICAgICAgIGlmICgganNvbiAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAg
ICAgICAgICAgICBmYWNlQSA9IG5ldyBGYWNlMygpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZmFjZUEuYSA9IGZhY2VzWyBvZmZzZXQgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VB
LmIgPSBmYWNlc1sgb2Zmc2V0ICsgMSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgZmFjZUEu
YyA9IGZhY2VzWyBvZmZzZXQgKyAzIF07CisgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckdlb21l
dHJ5TG9hZGVyID0gbmV3IEJ1ZmZlckdlb21ldHJ5TG9hZGVyKCk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZhY2VCID0gbmV3IEZhY2UzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
YWNlQi5hID0gZmFjZXNbIG9mZnNldCArIDEgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZh
Y2VCLmIgPSBmYWNlc1sgb2Zmc2V0ICsgMiBdOwotICAgICAgICAgICAgICAgICAgICAgICAgZmFj
ZUIuYyA9IGZhY2VzWyBvZmZzZXQgKyAzIF07CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkg
PSAwLCBsID0ganNvbi5sZW5ndGg7IGkgPCBsOyBpICsrICkgewogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBvZmZzZXQgKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5Owor
ICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGpzb25bIGkgXTsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBoYXNNYXRlcmlhbCApIHsKKyAgICAgICAgICAgICAgICAgICAgc3dp
dGNoICggZGF0YS50eXBlICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJp
YWxJbmRleCA9IGZhY2VzWyBvZmZzZXQgKysgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmYWNlQS5tYXRlcmlhbEluZGV4ID0gbWF0ZXJpYWxJbmRleDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWNlQi5tYXRlcmlhbEluZGV4ID0gbWF0ZXJpYWxJbmRleDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ1BsYW5lR2VvbWV0cnknOgorICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnUGxhbmVCdWZmZXJHZW9tZXRyeSc6CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeSA9IG5ldyBHZW9tZXRy
aWVzWyBkYXRhLnR5cGUgXSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS53
aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5oZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEud2lkdGhTZWdtZW50cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5oZWlnaHRTZWdtZW50cworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGdldCBm
YWNlIDw9PiB1diBpbmRleCBjb3JyZXNwb25kZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBmaSA9IGdlb21ldHJ5LmZhY2Vz
Lmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JveEdlb21ldHJ5JzoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JveEJ1ZmZlckdlb21ldHJ5JzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ0N1YmVHZW9tZXRyeSc6IC8vIGJhY2t3YXJkcyBjb21wYXRp
YmxlCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFzRmFjZVZlcnRleFV2ICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5ID0gbmV3IEdlb21ldHJpZXNbIGRh
dGEudHlwZSBdKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLndpZHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmhlaWdodCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YS5kZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YS53aWR0aFNlZ21lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhLmhlaWdodFNlZ21lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhLmRlcHRoU2VnbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBuVXZMYXllcnM7IGkg
KysgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZMYXllciA9IGpzb24u
dXZzWyBpIF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuZmFj
ZVZlcnRleFV2c1sgaSBdWyBmaSBdID0gW107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdlb21ldHJ5LmZhY2VWZXJ0ZXhVdnNbIGkgXVsgZmkgKyAxIF0gPSBbXTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8IDQ7IGogKysgKSB7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2SW5kZXggPSBmYWNlc1sgb2Zm
c2V0ICsrIF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSB1dkxh
eWVyWyB1dkluZGV4ICogMiBdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
diA9IHV2TGF5ZXJbIHV2SW5kZXggKiAyICsgMSBdOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1diA9IG5ldyBWZWN0b3IyKCB1LCB2ICk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggaiAhPT0gMiApIGdlb21ldHJ5LmZhY2VWZXJ0ZXhV
dnNbIGkgXVsgZmkgXS5wdXNoKCB1diApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBqICE9PSAwICkgZ2VvbWV0cnkuZmFjZVZlcnRleFV2c1sgaSBdWyBmaSArIDEg
XS5wdXNoKCB1diApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhc0ZhY2VOb3JtYWwgKSB7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxJbmRleCA9IGZhY2VzWyBvZmZzZXQgKysgXSAq
IDM7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlQS5ub3JtYWwuc2V0KAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyBub3JtYWxJbmRleCArKyBdLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyBub3JtYWxJbmRleCArKyBd
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyBub3JtYWxJbmRleCBd
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZhY2VCLm5vcm1hbC5jb3B5KCBmYWNlQS5ub3JtYWwgKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhc0ZhY2VWZXJ0
ZXhOb3JtYWwgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsg
aSA8IDQ7IGkgKysgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFs
SW5kZXggPSBmYWNlc1sgb2Zmc2V0ICsrIF0gKiAzOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vcm1hbCA9IG5ldyBWZWN0b3IzKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9ybWFsc1sgbm9ybWFsSW5kZXggKysgXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIG5vcm1hbEluZGV4ICsrIF0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyBub3JtYWxJbmRleCBdCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGkgIT09IDIgKSBmYWNlQS52ZXJ0ZXhOb3JtYWxzLnB1c2goIG5vcm1hbCAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGkgIT09IDAgKSBmYWNlQi52
ZXJ0ZXhOb3JtYWxzLnB1c2goIG5vcm1hbCApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBoYXNGYWNlQ29sb3IgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2xvckluZGV4ID0gZmFjZXNbIG9mZnNldCArKyBdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhleCA9IGNvbG9yc1sgY29sb3JJbmRleCBdOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmFjZUEuY29sb3Iuc2V0SGV4KCBoZXggKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmYWNlQi5jb2xvci5zZXRIZXgoIGhleCApOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBoYXNGYWNlVmVydGV4Q29s
b3IgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IDQ7
IGkgKysgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JJbmRleCA9
IGZhY2VzWyBvZmZzZXQgKysgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4
ID0gY29sb3JzWyBjb2xvckluZGV4IF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBpICE9PSAyICkgZmFjZUEudmVydGV4Q29sb3JzLnB1c2goIG5ldyBDb2xvciggaGV4
ICkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpICE9PSAwICkgZmFj
ZUIudmVydGV4Q29sb3JzLnB1c2goIG5ldyBDb2xvciggaGV4ICkgKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBnZW9tZXRyeS5mYWNlcy5wdXNoKCBmYWNlQSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZ2VvbWV0cnkuZmFjZXMucHVzaCggZmFjZUIgKTsKLQotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gbmV3
IEZhY2UzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWNlLmEgPSBmYWNlc1sgb2Zmc2V0
ICsrIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWNlLmIgPSBmYWNlc1sgb2Zmc2V0ICsr
IF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWNlLmMgPSBmYWNlc1sgb2Zmc2V0ICsrIF07
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFzTWF0ZXJpYWwgKSB7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbEluZGV4ID0gZmFjZXNbIG9mZnNldCArKyBd
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UubWF0ZXJpYWxJbmRleCA9IG1hdGVy
aWFsSW5kZXg7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdG8gZ2V0IGZhY2UgPD0+IHV2IGluZGV4IGNvcnJlc3BvbmRlbmNlCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZpID0gZ2VvbWV0cnkuZmFjZXMubGVuZ3RoOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGhhc0ZhY2VWZXJ0ZXhVdiApIHsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgblV2TGF5ZXJzOyBpICsrICkgewot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2TGF5ZXIgPSBqc29uLnV2c1sgaSBd
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmZhY2VWZXJ0ZXhV
dnNbIGkgXVsgZmkgXSA9IFtdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoIGogPSAwOyBqIDwgMzsgaiArKyApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXZJbmRleCA9IGZhY2VzWyBvZmZzZXQgKysgXTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdSA9IHV2TGF5ZXJbIHV2SW5kZXggKiAyIF07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gdXZMYXllclsgdXZJbmRleCAqIDIgKyAx
IF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2ID0gbmV3IFZlY3Rv
cjIoIHUsIHYgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0
cnkuZmFjZVZlcnRleFV2c1sgaSBdWyBmaSBdLnB1c2goIHV2ICk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
aGFzRmFjZU5vcm1hbCApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbElu
ZGV4ID0gZmFjZXNbIG9mZnNldCArKyBdICogMzsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZhY2Uubm9ybWFsLnNldCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9y
bWFsc1sgbm9ybWFsSW5kZXggKysgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9ybWFsc1sgbm9ybWFsSW5kZXggKysgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9ybWFsc1sgbm9ybWFsSW5kZXggXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBoYXNGYWNlVmVydGV4Tm9ybWFsICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggaSA9IDA7IGkgPCAzOyBpICsrICkgewotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vcm1hbEluZGV4ID0gZmFjZXNbIG9mZnNldCArKyBdICogMzsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWwgPSBuZXcgVmVjdG9yMygKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIG5vcm1hbEluZGV4ICsrIF0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyBub3JtYWxJbmRleCAr
KyBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgbm9ybWFs
SW5kZXggXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZhY2UudmVydGV4Tm9ybWFscy5wdXNoKCBub3JtYWwgKTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFzRmFjZUNvbG9yICkgewot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JJbmRleCA9IGZhY2VzWyBvZmZzZXQg
KysgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLmNvbG9yLnNldEhleCggY29s
b3JzWyBjb2xvckluZGV4IF0gKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFzRmFjZVZlcnRleENvbG9yICkgewotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCAzOyBpICsrICkgewotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ySW5kZXggPSBmYWNlc1sgb2Zmc2V0
ICsrIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UudmVydGV4Q29sb3Jz
LnB1c2goIG5ldyBDb2xvciggY29sb3JzWyBjb2xvckluZGV4IF0gKSApOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmZhY2VzLnB1c2goIGZhY2UgKTsKLQotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VTa2luKCBqc29uLCBnZW9tZXRyeSApIHsKLQotICAg
ICAgICAgICAgICAgIHZhciBpbmZsdWVuY2VzUGVyVmVydGV4ID0gKCBqc29uLmluZmx1ZW5jZXNQ
ZXJWZXJ0ZXggIT09IHVuZGVmaW5lZCApID8ganNvbi5pbmZsdWVuY2VzUGVyVmVydGV4IDogMjsK
LQotICAgICAgICAgICAgICAgIGlmICgganNvbi5za2luV2VpZ2h0cyApIHsKLQotICAgICAgICAg
ICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBqc29uLnNraW5XZWlnaHRzLmxlbmd0aDsg
aSA8IGw7IGkgKz0gaW5mbHVlbmNlc1BlclZlcnRleCApIHsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHggPSBqc29uLnNraW5XZWlnaHRzWyBpIF07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgeSA9ICggaW5mbHVlbmNlc1BlclZlcnRleCA+IDEgKSA/IGpzb24uc2tpbldlaWdo
dHNbIGkgKyAxIF0gOiAwOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHogPSAoIGluZmx1
ZW5jZXNQZXJWZXJ0ZXggPiAyICkgPyBqc29uLnNraW5XZWlnaHRzWyBpICsgMiBdIDogMDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB3ID0gKCBpbmZsdWVuY2VzUGVyVmVydGV4ID4gMyAp
ID8ganNvbi5za2luV2VpZ2h0c1sgaSArIDMgXSA6IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGdlb21ldHJ5LnNraW5XZWlnaHRzLnB1c2goIG5ldyBWZWN0b3I0KCB4LCB5LCB6LCB3ICkg
KTsKLQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIGpzb24uc2tpbkluZGljZXMgKSB7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwLCBsID0ganNvbi5za2luSW5kaWNlcy5sZW5ndGg7IGkgPCBsOyBp
ICs9IGluZmx1ZW5jZXNQZXJWZXJ0ZXggKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBhID0ganNvbi5za2luSW5kaWNlc1sgaSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGIgPSAoIGluZmx1ZW5jZXNQZXJWZXJ0ZXggPiAxICkgPyBqc29uLnNraW5JbmRpY2VzWyBpICsg
MSBdIDogMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gKCBpbmZsdWVuY2VzUGVy
VmVydGV4ID4gMiApID8ganNvbi5za2luSW5kaWNlc1sgaSArIDIgXSA6IDA7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgZCA9ICggaW5mbHVlbmNlc1BlclZlcnRleCA+IDMgKSA/IGpzb24u
c2tpbkluZGljZXNbIGkgKyAzIF0gOiAwOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBnZW9t
ZXRyeS5za2luSW5kaWNlcy5wdXNoKCBuZXcgVmVjdG9yNCggYSwgYiwgYywgZCApICk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgZ2VvbWV0cnkuYm9uZXMgPSBqc29uLmJvbmVzOwotCi0gICAgICAgICAgICAgICAgaWYgKCBn
ZW9tZXRyeS5ib25lcyAmJiBnZW9tZXRyeS5ib25lcy5sZW5ndGggPiAwICYmICggZ2VvbWV0cnku
c2tpbldlaWdodHMubGVuZ3RoICE9PSBnZW9tZXRyeS5za2luSW5kaWNlcy5sZW5ndGggfHwgZ2Vv
bWV0cnkuc2tpbkluZGljZXMubGVuZ3RoICE9PSBnZW9tZXRyeS52ZXJ0aWNlcy5sZW5ndGggKSAp
IHsKLQotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdXaGVuIHNraW5uaW5nLCBu
dW1iZXIgb2YgdmVydGljZXMgKCcgKyBnZW9tZXRyeS52ZXJ0aWNlcy5sZW5ndGggKyAnKSwgc2tp
bkluZGljZXMgKCcgKwotICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuc2tpbkluZGlj
ZXMubGVuZ3RoICsgJyksIGFuZCBza2luV2VpZ2h0cyAoJyArIGdlb21ldHJ5LnNraW5XZWlnaHRz
Lmxlbmd0aCArICcpIHNob3VsZCBtYXRjaC4nICk7Ci0KLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VNb3JwaGluZygganNvbiwg
Z2VvbWV0cnkgKSB7Ci0KLSAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSBqc29uLnNjYWxlOwot
Ci0gICAgICAgICAgICAgICAgaWYgKCBqc29uLm1vcnBoVGFyZ2V0cyAhPT0gdW5kZWZpbmVkICkg
ewotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGpzb24ubW9ycGhU
YXJnZXRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGdlb21ldHJ5Lm1vcnBoVGFyZ2V0c1sgaSBdID0ge307Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBnZW9tZXRyeS5tb3JwaFRhcmdldHNbIGkgXS5uYW1lID0ganNvbi5tb3JwaFRhcmdldHNbIGkg
XS5uYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkubW9ycGhUYXJnZXRzWyBp
IF0udmVydGljZXMgPSBbXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRzdFZlcnRp
Y2VzID0gZ2VvbWV0cnkubW9ycGhUYXJnZXRzWyBpIF0udmVydGljZXM7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgc3JjVmVydGljZXMgPSBqc29uLm1vcnBoVGFyZ2V0c1sgaSBdLnZlcnRp
Y2VzOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgdiA9IDAsIHZsID0gc3Jj
VmVydGljZXMubGVuZ3RoOyB2IDwgdmw7IHYgKz0gMyApIHsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZlcnRleC54ID0gc3JjVmVydGljZXNbIHYgXSAqIHNjYWxlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZlcnRleC55ID0gc3JjVmVydGljZXNbIHYgKyAxIF0gKiBzY2Fs
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXgueiA9IHNyY1ZlcnRpY2VzWyB2
ICsgMiBdICogc2NhbGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RWZXJ0aWNl
cy5wdXNoKCB2ZXJ0ZXggKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlm
ICgganNvbi5tb3JwaENvbG9ycyAhPT0gdW5kZWZpbmVkICYmIGpzb24ubW9ycGhDb2xvcnMubGVu
Z3RoID4gMCApIHsKLQotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5K
U09OTG9hZGVyOiAibW9ycGhDb2xvcnMiIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFVzaW5nIHRoZW0g
YXMgZmFjZSBjb2xvcnMuJyApOwotCi0gICAgICAgICAgICAgICAgICAgIHZhciBmYWNlcyA9IGdl
b21ldHJ5LmZhY2VzOwotICAgICAgICAgICAgICAgICAgICB2YXIgbW9ycGhDb2xvcnMgPSBqc29u
Lm1vcnBoQ29sb3JzWyAwIF0uY29sb3JzOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIHZh
ciBpID0gMCwgbCA9IGZhY2VzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZhY2VzWyBpIF0uY29sb3IuZnJvbUFycmF5KCBtb3JwaENvbG9ycywgaSAq
IDMgKTsKLQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VBbmltYXRpb25zKCBqc29u
LCBnZW9tZXRyeSApIHsKLQotICAgICAgICAgICAgICAgIHZhciBvdXRwdXRBbmltYXRpb25zID0g
W107Ci0KLSAgICAgICAgICAgICAgICAvLyBwYXJzZSBvbGQgc3R5bGUgQm9uZS9IaWVyYXJjaHkg
YW5pbWF0aW9ucwotICAgICAgICAgICAgICAgIHZhciBhbmltYXRpb25zID0gW107Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIGpzb24uYW5pbWF0aW9uICE9PSB1bmRlZmluZWQgKSB7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5wdXNoKCBqc29uLmFuaW1hdGlvbiApOwotCi0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCBqc29uLmFuaW1hdGlvbnMgIT09
IHVuZGVmaW5lZCApIHsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIGpzb24uYW5pbWF0aW9u
cy5sZW5ndGggKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbnMgPSBhbmlt
YXRpb25zLmNvbmNhdCgganNvbi5hbmltYXRpb25zICk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5wdXNoKCBqc29u
LmFuaW1hdGlvbnMgKTsKLQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBhbmltYXRpb25zLmxl
bmd0aDsgaSArKyApIHsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgY2xpcCA9IEFuaW1hdGlv
bkNsaXAucGFyc2VBbmltYXRpb24oIGFuaW1hdGlvbnNbIGkgXSwgZ2VvbWV0cnkuYm9uZXMgKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCBjbGlwICkgb3V0cHV0QW5pbWF0aW9ucy5wdXNoKCBj
bGlwICk7Ci0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBwYXJzZSBp
bXBsaWNpdCBtb3JwaCBhbmltYXRpb25zCi0gICAgICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5t
b3JwaFRhcmdldHMgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogRmlndXJlIG91
dCB3aGF0IGFuIGFwcHJvcHJhaXRlIEZQUyBpcyBmb3IgbW9ycGggdGFyZ2V0IGFuaW1hdGlvbnMg
LS0gZGVmYXVsdGluZyB0byAxMCwgYnV0IHJlYWxseSBpdCBpcyBjb21wbGV0ZWx5IGFyYml0cmFy
eS4KLSAgICAgICAgICAgICAgICAgICAgdmFyIG1vcnBoQW5pbWF0aW9uQ2xpcHMgPSBBbmltYXRp
b25DbGlwLkNyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKCBnZW9tZXRyeS5tb3Jw
aFRhcmdldHMsIDEwICk7Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dEFuaW1hdGlvbnMgPSBv
dXRwdXRBbmltYXRpb25zLmNvbmNhdCggbW9ycGhBbmltYXRpb25DbGlwcyApOwotCi0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCBvdXRwdXRBbmltYXRpb25zLmxlbmd0
aCA+IDAgKSBnZW9tZXRyeS5hbmltYXRpb25zID0gb3V0cHV0QW5pbWF0aW9uczsKLQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGFyc2UoIGpzb24sIHRleHR1
cmVQYXRoICkgewotCi0gICAgICAgICAgICAgICAgaWYgKCBqc29uLmRhdGEgIT09IHVuZGVmaW5l
ZCApIHsKLQotICAgICAgICAgICAgICAgICAgICAvLyBHZW9tZXRyeSA0LjAgc3BlYwotICAgICAg
ICAgICAgICAgICAgICBqc29uID0ganNvbi5kYXRhOwotCi0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKCBqc29uLnNjYWxlICE9PSB1bmRlZmluZWQgKSB7Ci0KLSAgICAg
ICAgICAgICAgICAgICAganNvbi5zY2FsZSA9IDEuMCAvIGpzb24uc2NhbGU7Ci0KLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAgICAgICAgICAgIGpzb24uc2NhbGUgPSAxLjA7
Ci0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSBu
ZXcgR2VvbWV0cnkoKTsKLQotICAgICAgICAgICAgICAgIHBhcnNlTW9kZWwoIGpzb24sIGdlb21l
dHJ5ICk7Ci0gICAgICAgICAgICAgICAgcGFyc2VTa2luKCBqc29uLCBnZW9tZXRyeSApOwotICAg
ICAgICAgICAgICAgIHBhcnNlTW9ycGhpbmcoIGpzb24sIGdlb21ldHJ5ICk7Ci0gICAgICAgICAg
ICAgICAgcGFyc2VBbmltYXRpb25zKCBqc29uLCBnZW9tZXRyeSApOwotCi0gICAgICAgICAgICAg
ICAgZ2VvbWV0cnkuY29tcHV0ZUZhY2VOb3JtYWxzKCk7Ci0gICAgICAgICAgICAgICAgZ2VvbWV0
cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGpzb24u
bWF0ZXJpYWxzID09PSB1bmRlZmluZWQgfHwganNvbi5tYXRlcmlhbHMubGVuZ3RoID09PSAwICkg
ewotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGdlb21ldHJ5OiBnZW9tZXRyeSB9Owot
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgbWF0
ZXJpYWxzID0gTG9hZGVyLnByb3RvdHlwZS5pbml0TWF0ZXJpYWxzKCBqc29uLm1hdGVyaWFscywg
dGV4dHVyZVBhdGgsIHRoaXMuY3Jvc3NPcmlnaW4gKTsKLQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4geyBnZW9tZXRyeTogZ2VvbWV0cnksIG1hdGVyaWFsczogbWF0ZXJpYWxzIH07Ci0KLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgfSApKCkKLQotICAg
IH0gKTsKLQotICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5j
b20vCi0gICAgICovCi0KLSAgICBmdW5jdGlvbiBPYmplY3RMb2FkZXIoIG1hbmFnZXIgKSB7Ci0K
LSAgICAgICAgdGhpcy5tYW5hZ2VyID0gKCBtYW5hZ2VyICE9PSB1bmRlZmluZWQgKSA/IG1hbmFn
ZXIgOiBEZWZhdWx0TG9hZGluZ01hbmFnZXI7Ci0gICAgICAgIHRoaXMudGV4dHVyZVBhdGggPSAn
JzsKLQotICAgIH0KLQotICAgIE9iamVjdC5hc3NpZ24oIE9iamVjdExvYWRlci5wcm90b3R5cGUs
IHsKLQotICAgICAgICBjcm9zc09yaWdpbjogJ2Fub255bW91cycsCi0KLSAgICAgICAgbG9hZDog
ZnVuY3Rpb24gKCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHsKLQotICAgICAg
ICAgICAgaWYgKCB0aGlzLnRleHR1cmVQYXRoID09PSAnJyApIHsKLQotICAgICAgICAgICAgICAg
IHRoaXMudGV4dHVyZVBhdGggPSB1cmwuc3Vic3RyaW5nKCAwLCB1cmwubGFzdEluZGV4T2YoICcv
JyApICsgMSApOwotCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBzY29wZSA9IHRo
aXM7Ci0KLSAgICAgICAgICAgIHZhciBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlciggc2NvcGUubWFu
YWdlciApOwotICAgICAgICAgICAgbG9hZGVyLmxvYWQoIHVybCwgZnVuY3Rpb24gKCB0ZXh0ICkg
ewotCi0gICAgICAgICAgICAgICAgdmFyIGpzb24gPSBudWxsOwotCi0gICAgICAgICAgICAgICAg
dHJ5IHsKLQotICAgICAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZSggdGV4dCApOwot
Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoIGVycm9yICkgewotCi0gICAgICAgICAgICAgICAg
ICAgIGlmICggb25FcnJvciAhPT0gdW5kZWZpbmVkICkgb25FcnJvciggZXJyb3IgKTsKLQotICAg
ICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUU6T2JqZWN0TG9hZGVyOiBDYW5c
J3QgcGFyc2UgJyArIHVybCArICcuJywgZXJyb3IubWVzc2FnZSApOwotCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZh
ciBtZXRhZGF0YSA9IGpzb24ubWV0YWRhdGE7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIG1ldGFk
YXRhID09PSB1bmRlZmluZWQgfHwgbWV0YWRhdGEudHlwZSA9PT0gdW5kZWZpbmVkIHx8IG1ldGFk
YXRhLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2dlb21ldHJ5JyApIHsKLQotICAgICAgICAgICAg
ICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuT2JqZWN0TG9hZGVyOiBDYW5cJ3QgbG9hZCAn
ICsgdXJsICsgJy4gVXNlIFRIUkVFLkpTT05Mb2FkZXIgaW5zdGVhZC4nICk7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHNjb3BlLnBhcnNlKCBqc29uLCBvbkxvYWQgKTsKLQotICAgICAgICAgICAgfSwgb25Qcm9ncmVz
cywgb25FcnJvciApOwotCi0gICAgICAgIH0sCi0KLSAgICAgICAgc2V0VGV4dHVyZVBhdGg6IGZ1
bmN0aW9uICggdmFsdWUgKSB7Ci0KLSAgICAgICAgICAgIHRoaXMudGV4dHVyZVBhdGggPSB2YWx1
ZTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotCi0gICAgICAgIH0sCi0KLSAgICAgICAgc2V0
Q3Jvc3NPcmlnaW46IGZ1bmN0aW9uICggdmFsdWUgKSB7Ci0KLSAgICAgICAgICAgIHRoaXMuY3Jv
c3NPcmlnaW4gPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotCi0gICAgICAgIH0s
Ci0KLSAgICAgICAgcGFyc2U6IGZ1bmN0aW9uICgganNvbiwgb25Mb2FkICkgewotCi0gICAgICAg
ICAgICB2YXIgc2hhcGVzID0gdGhpcy5wYXJzZVNoYXBlKCBqc29uLnNoYXBlcyApOwotICAgICAg
ICAgICAgdmFyIGdlb21ldHJpZXMgPSB0aGlzLnBhcnNlR2VvbWV0cmllcygganNvbi5nZW9tZXRy
aWVzLCBzaGFwZXMgKTsKLQotICAgICAgICAgICAgdmFyIGltYWdlcyA9IHRoaXMucGFyc2VJbWFn
ZXMoIGpzb24uaW1hZ2VzLCBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIG9u
TG9hZCAhPT0gdW5kZWZpbmVkICkgb25Mb2FkKCBvYmplY3QgKTsKLQotICAgICAgICAgICAgfSAp
OwotCi0gICAgICAgICAgICB2YXIgdGV4dHVyZXMgPSB0aGlzLnBhcnNlVGV4dHVyZXMoIGpzb24u
dGV4dHVyZXMsIGltYWdlcyApOwotICAgICAgICAgICAgdmFyIG1hdGVyaWFscyA9IHRoaXMucGFy
c2VNYXRlcmlhbHMoIGpzb24ubWF0ZXJpYWxzLCB0ZXh0dXJlcyApOwotCi0gICAgICAgICAgICB2
YXIgb2JqZWN0ID0gdGhpcy5wYXJzZU9iamVjdCgganNvbi5vYmplY3QsIGdlb21ldHJpZXMsIG1h
dGVyaWFscyApOwotCi0gICAgICAgICAgICBpZiAoIGpzb24uYW5pbWF0aW9ucyApIHsKLQotICAg
ICAgICAgICAgICAgIG9iamVjdC5hbmltYXRpb25zID0gdGhpcy5wYXJzZUFuaW1hdGlvbnMoIGpz
b24uYW5pbWF0aW9ucyApOwotCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgganNv
bi5pbWFnZXMgPT09IHVuZGVmaW5lZCB8fCBqc29uLmltYWdlcy5sZW5ndGggPT09IDAgKSB7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIG9uTG9hZCAhPT0gdW5kZWZpbmVkICkgb25Mb2FkKCBvYmpl
Y3QgKTsKLQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotCi0g
ICAgICAgIH0sCi0KLSAgICAgICAgcGFyc2VTaGFwZTogZnVuY3Rpb24gKCBqc29uICkgewotCi0g
ICAgICAgICAgICB2YXIgc2hhcGVzID0ge307Ci0KLSAgICAgICAgICAgIGlmICgganNvbiAhPT0g
dW5kZWZpbmVkICkgewotCi0gICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0ganNv
bi5sZW5ndGg7IGkgPCBsOyBpICsrICkgewotCi0gICAgICAgICAgICAgICAgICAgIHZhciBzaGFw
ZSA9IG5ldyBTaGFwZSgpLmZyb21KU09OKCBqc29uWyBpIF0gKTsKLQotICAgICAgICAgICAgICAg
ICAgICBzaGFwZXNbIHNoYXBlLnV1aWQgXSA9IHNoYXBlOwotCi0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBzaGFwZXM7Ci0KLSAgICAgICAg
fSwKLQotICAgICAgICBwYXJzZUdlb21ldHJpZXM6IGZ1bmN0aW9uICgganNvbiwgc2hhcGVzICkg
ewotCi0gICAgICAgICAgICB2YXIgZ2VvbWV0cmllcyA9IHt9OwotCi0gICAgICAgICAgICBpZiAo
IGpzb24gIT09IHVuZGVmaW5lZCApIHsKLQotICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeUxv
YWRlciA9IG5ldyBKU09OTG9hZGVyKCk7Ci0gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckdlb21l
dHJ5TG9hZGVyID0gbmV3IEJ1ZmZlckdlb21ldHJ5TG9hZGVyKCk7Ci0KLSAgICAgICAgICAgICAg
ICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBqc29uLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5OwotICAgICAgICAgICAgICAgICAgICB2YXIg
ZGF0YSA9IGpzb25bIGkgXTsKLQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCBkYXRhLnR5
cGUgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BsYW5lR2VvbWV0cnknOgot
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUGxhbmVCdWZmZXJHZW9tZXRyeSc6Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeSA9IG5ldyBHZW9tZXRyaWVzWyBkYXRh
LnR5cGUgXSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS53aWR0aCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5oZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGEud2lkdGhTZWdtZW50cywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YS5oZWlnaHRTZWdtZW50cwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAnQm94R2VvbWV0cnknOgotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnQm94QnVmZmVyR2VvbWV0cnknOgotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnQ3ViZUdlb21ldHJ5JzogLy8gYmFja3dhcmRzIGNvbXBhdGlibGUKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5ID0gbmV3IEdlb21ldHJpZXNbIGRhdGEudHlwZSBd
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLndpZHRoLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YS5kZXB0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YS53aWR0aFNlZ21lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
LmhlaWdodFNlZ21lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmRl
cHRoU2VnbWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NpcmNsZUdlb21ldHJ5JzoKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NpcmNsZUJ1ZmZlckdlb21ldHJ5JzoKQEAgLTM3
OTg2LDYgKzM4ODkxLDIxIEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
IAorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVHViZUdlb21ldHJ5JzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ1R1YmVCdWZmZXJHZW9tZXRyeSc6CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIG9ubHkgd29ya3MgZm9yIGJ1aWx0LWluIGN1cnZlcyAo
ZS5nLiBDYXRtdWxsUm9tQ3VydmUzKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBV
c2VyIGRlZmluZWQgY3VydmVzIG9yIGluc3RhbmNlcyBvZiBDdXJ2ZVBhdGggd2lsbCBub3QgYmUg
ZGVzZXJpYWxpemVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5ID0gbmV3
IEdlb21ldHJpZXNbIGRhdGEudHlwZSBdKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXcgQ3VydmVzWyBkYXRhLnBhdGgudHlwZSBdKCkuZnJvbUpTT04oIGRhdGEucGF0aCApLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnR1YnVsYXJTZWdtZW50cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yYWRpdXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGEucmFkaWFsU2VnbWVudHMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEuY2xvc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICdMYXRoZUdlb21ldHJ5JzoKICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgJ0xhdGhlQnVmZmVyR2VvbWV0cnknOgogCkBAIC0zODA2MCw2ICszODk4MCw3IEBACiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ0J1ZmZlckdlb21ldHJ5JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5JzoKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdlb21ldHJ5ID0gYnVmZmVyR2VvbWV0cnlMb2FkZXIucGFyc2UoIGRhdGEgKTsKIApAQCAtMzgw
NjcsNyArMzg5ODgsMTcgQEAKIAogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnR2VvbWV0
cnknOgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBnZW9tZXRyeUxv
YWRlci5wYXJzZSggZGF0YSwgdGhpcy50ZXh0dXJlUGF0aCApLmdlb21ldHJ5OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggJ1RIUkVFJyBpbiB3aW5kb3cgJiYgJ0xlZ2FjeUpTT05M
b2FkZXInIGluIFRIUkVFICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBnZW9tZXRyeUxvYWRlciA9IG5ldyBUSFJFRS5MZWdhY3lKU09OTG9hZGVyKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5ID0gZ2VvbWV0cnlMb2FkZXIucGFyc2Uo
IGRhdGEsIHRoaXMucmVzb3VyY2VQYXRoICkuZ2VvbWV0cnk7CisKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc29sZS5lcnJvciggJ1RIUkVFLk9iamVjdExvYWRlcjogWW91IGhhdmUgdG8gaW1wb3J0IExl
Z2FjeUpTT05Mb2FkZXIgaW4gb3JkZXIgbG9hZCBnZW9tZXRyeSBkYXRhIG9mIHR5cGUgIkdlb21l
dHJ5Ii4nICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKIApAQCAtMzgwOTYsNiArMzkwMjcsNyBAQAogCiAgICAg
ICAgIHBhcnNlTWF0ZXJpYWxzOiBmdW5jdGlvbiAoIGpzb24sIHRleHR1cmVzICkgewogCisgICAg
ICAgICAgICB2YXIgY2FjaGUgPSB7fTsgLy8gTXVsdGlNYXRlcmlhbAogICAgICAgICAgICAgdmFy
IG1hdGVyaWFscyA9IHt9OwogCiAgICAgICAgICAgICBpZiAoIGpzb24gIT09IHVuZGVmaW5lZCAp
IHsKQEAgLTM4MTE1LDcgKzM5MDQ3LDE1IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoIHZhciBqID0gMDsgaiA8IGRhdGEubWF0ZXJpYWxzLmxlbmd0aDsgaiArKyApIHsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2goIGxvYWRlci5wYXJzZSggZGF0YS5t
YXRlcmlhbHNbIGogXSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGVy
aWFsID0gZGF0YS5tYXRlcmlhbHNbIGogXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggY2FjaGVbIG1hdGVyaWFsLnV1aWQgXSA9PT0gdW5kZWZpbmVkICkgeworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlWyBtYXRlcmlhbC51dWlkIF0gPSBsb2FkZXIu
cGFyc2UoIG1hdGVyaWFsICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKCBjYWNoZVsgbWF0ZXJpYWwudXVp
ZCBdICk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIApAQCAtMzgxMjMsNyArMzkwNjMs
MTMgQEAKIAogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBtYXRlcmlhbHNbIGRhdGEudXVpZCBdID0gbG9hZGVyLnBhcnNlKCBkYXRhICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhY2hlWyBkYXRhLnV1aWQgXSA9PT0gdW5kZWZp
bmVkICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbIGRhdGEudXVpZCBd
ID0gbG9hZGVyLnBhcnNlKCBkYXRhICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxzWyBkYXRhLnV1aWQgXSA9IGNhY2hlWyBk
YXRhLnV1aWQgXTsKIAogICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTM4MTcwLDggKzM5MTE2
LDggQEAKIAogICAgICAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgewogCi0g
ICAgICAgICAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIuaXRlbUVuZCggdXJsICk7CiAgICAgICAg
ICAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIuaXRlbUVycm9yKCB1cmwgKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2NvcGUubWFuYWdlci5pdGVtRW5kKCB1cmwgKTsKIAogICAgICAgICAgICAgICAg
IH0gKTsKIApAQCAtMzgxOTksNyArMzkxNDUsNyBAQAogCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGN1cnJlbnRVcmwgPSB1cmxbIGogXTsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBwYXRoID0gL14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3QoIGN1cnJl
bnRVcmwgKSA/IGN1cnJlbnRVcmwgOiBzY29wZS50ZXh0dXJlUGF0aCArIGN1cnJlbnRVcmw7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdGggPSAvXihcL1wvKXwoW2Etel0rOihc
L1wvKT8pL2kudGVzdCggY3VycmVudFVybCApID8gY3VycmVudFVybCA6IHNjb3BlLnJlc291cmNl
UGF0aCArIGN1cnJlbnRVcmw7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXNb
IGltYWdlLnV1aWQgXS5wdXNoKCBsb2FkSW1hZ2UoIHBhdGggKSApOwogCkBAIC0zODIwOSw3ICsz
OTE1NSw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvYWQgc2luZ2xlIGltYWdl
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXRoID0gL14oXC9cLyl8KFthLXpdKzoo
XC9cLyk/KS9pLnRlc3QoIGltYWdlLnVybCApID8gaW1hZ2UudXJsIDogc2NvcGUudGV4dHVyZVBh
dGggKyBpbWFnZS51cmw7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IC9eKFwv
XC8pfChbYS16XSs6KFwvXC8pPykvaS50ZXN0KCBpbWFnZS51cmwgKSA/IGltYWdlLnVybCA6IHNj
b3BlLnJlc291cmNlUGF0aCArIGltYWdlLnVybDsKIAogICAgICAgICAgICAgICAgICAgICAgICAg
aW1hZ2VzWyBpbWFnZS51dWlkIF0gPSBsb2FkSW1hZ2UoIHBhdGggKTsKIApAQCAtMzgyODgsNiAr
MzkyMzQsOCBAQAogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAg
aWYgKCBkYXRhLmZvcm1hdCAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS5mb3JtYXQgPSBkYXRhLmZv
cm1hdDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhLnR5cGUgIT09IHVuZGVmaW5lZCAp
IHRleHR1cmUudHlwZSA9IGRhdGEudHlwZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRh
LmVuY29kaW5nICE9PSB1bmRlZmluZWQgKSB0ZXh0dXJlLmVuY29kaW5nID0gZGF0YS5lbmNvZGlu
ZzsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEubWluRmlsdGVyICE9PSB1bmRlZmlu
ZWQgKSB0ZXh0dXJlLm1pbkZpbHRlciA9IHBhcnNlQ29uc3RhbnQoIGRhdGEubWluRmlsdGVyLCBU
RVhUVVJFX0ZJTFRFUiApOwogICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEubWFnRmlsdGVy
ICE9PSB1bmRlZmluZWQgKSB0ZXh0dXJlLm1hZ0ZpbHRlciA9IHBhcnNlQ29uc3RhbnQoIGRhdGEu
bWFnRmlsdGVyLCBURVhUVVJFX0ZJTFRFUiApOwpAQCAtMzgyOTUsNiArMzkyNDMsOSBAQAogCiAg
ICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5mbGlwWSAhPT0gdW5kZWZpbmVkICkgdGV4dHVy
ZS5mbGlwWSA9IGRhdGEuZmxpcFk7CiAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhLnBy
ZW11bHRpcGx5QWxwaGEgIT09IHVuZGVmaW5lZCApIHRleHR1cmUucHJlbXVsdGlwbHlBbHBoYSA9
IGRhdGEucHJlbXVsdGlwbHlBbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhLnVu
cGFja0FsaWdubWVudCAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS51bnBhY2tBbGlnbm1lbnQgPSBk
YXRhLnVucGFja0FsaWdubWVudDsKKwogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlc1sgZGF0
YS51dWlkIF0gPSB0ZXh0dXJlOwogCiAgICAgICAgICAgICAgICAgfQpAQCAtMzg0NjUsNiArMzk0
MTYsOCBAQAogCiAgICAgICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgICAgICBp
ZiAoIGRhdGEuZHJhd01vZGUgIT09IHVuZGVmaW5lZCApIG9iamVjdC5zZXREcmF3TW9kZSggZGF0
YS5kcmF3TW9kZSApOworCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAg
ICAgICAgY2FzZSAnTE9EJzoKQEAgLTM4Njg3LDcgKzM5NjQwLDE2IEBACiAKICAgICAgICAgICAg
IH0gKS50aGVuKCBmdW5jdGlvbiAoIGJsb2IgKSB7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlSW1hZ2VCaXRtYXAoIGJsb2IsIHNjb3BlLm9wdGlvbnMgKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIHNjb3BlLm9wdGlvbnMgPT09IHVuZGVmaW5lZCApIHsKKworICAgICAgICAgICAgICAg
ICAgICAvLyBXb3JrYXJvdW5kIGZvciBGaXJlRm94LiBJdCBjYXVzZXMgYW4gZXJyb3IgaWYgeW91
IHBhc3Mgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUltYWdlQml0
bWFwKCBibG9iICk7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVJbWFnZUJpdG1hcCggYmxvYiwgc2NvcGUub3B0aW9ucyApOwor
CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB9ICkudGhlbiggZnVuY3Rpb24gKCBp
bWFnZUJpdG1hcCApIHsKIApAQCAtMzg3MDEsMTEgKzM5NjYzLDEzIEBACiAKICAgICAgICAgICAg
ICAgICBpZiAoIG9uRXJyb3IgKSBvbkVycm9yKCBlICk7CiAKLSAgICAgICAgICAgICAgICBzY29w
ZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApOwogICAgICAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIu
aXRlbUVycm9yKCB1cmwgKTsKKyAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FbmQo
IHVybCApOwogCiAgICAgICAgICAgICB9ICk7CiAKKyAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIu
aXRlbVN0YXJ0KCB1cmwgKTsKKwogICAgICAgICB9LAogCiAgICAgICAgIHNldENyb3NzT3JpZ2lu
OiBmdW5jdGlvbiAoIC8qIHZhbHVlICovICkgewpAQCAtMzkyMDEsMzAyICs0MDE2NSw0NDEgQEAK
ICAgICB9ICk7CiAKICAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRv
b2IuY29tLworICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5j
b20vCiAgICAgICovCiAKLSAgICB2YXIgY29udGV4dDsKKyAgICBmdW5jdGlvbiBMb2FkZXIoKSB7
fQogCi0gICAgdmFyIEF1ZGlvQ29udGV4dCA9IHsKKyAgICBMb2FkZXIuSGFuZGxlcnMgPSB7CiAK
LSAgICAgICAgZ2V0Q29udGV4dDogZnVuY3Rpb24gKCkgeworICAgICAgICBoYW5kbGVyczogW10s
CiAKLSAgICAgICAgICAgIGlmICggY29udGV4dCA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICBh
ZGQ6IGZ1bmN0aW9uICggcmVnZXgsIGxvYWRlciApIHsKIAotICAgICAgICAgICAgICAgIGNvbnRl
eHQgPSBuZXcgKCB3aW5kb3cuQXVkaW9Db250ZXh0IHx8IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRl
eHQgKSgpOworICAgICAgICAgICAgdGhpcy5oYW5kbGVycy5wdXNoKCByZWdleCwgbG9hZGVyICk7
CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgfSwKIAotICAgICAgICAgICAgcmV0dXJuIGNvbnRl
eHQ7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCBmaWxlICkgewogCi0gICAgICAgIH0sCisgICAg
ICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzOwogCi0gICAgICAgIHNldENvbnRl
eHQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwg
PSBoYW5kbGVycy5sZW5ndGg7IGkgPCBsOyBpICs9IDIgKSB7CiAKLSAgICAgICAgICAgIGNvbnRl
eHQgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB2YXIgcmVnZXggPSBoYW5kbGVyc1sgaSBdOwor
ICAgICAgICAgICAgICAgIHZhciBsb2FkZXIgPSBoYW5kbGVyc1sgaSArIDEgXTsKKworICAgICAg
ICAgICAgICAgIGlmICggcmVnZXgudGVzdCggZmlsZSApICkgeworCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBsb2FkZXI7CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAKICAgICAgICAgfQogCiAgICAgfTsKIAotICAg
IC8qKgotICAgICAqIEBhdXRob3IgUmVlY2UgQWFyb24gTGVjcml2YWluIC8gaHR0cDovL3JlZWNl
bm90ZXMuY29tLwotICAgICAqLworICAgIE9iamVjdC5hc3NpZ24oIExvYWRlci5wcm90b3R5cGUs
IHsKIAotICAgIGZ1bmN0aW9uIEF1ZGlvTG9hZGVyKCBtYW5hZ2VyICkgeworICAgICAgICBjcm9z
c09yaWdpbjogJ2Fub255bW91cycsCiAKLSAgICAgICAgdGhpcy5tYW5hZ2VyID0gKCBtYW5hZ2Vy
ICE9PSB1bmRlZmluZWQgKSA/IG1hbmFnZXIgOiBEZWZhdWx0TG9hZGluZ01hbmFnZXI7CisgICAg
ICAgIG9uTG9hZFN0YXJ0OiBmdW5jdGlvbiAoKSB7fSwKIAotICAgIH0KKyAgICAgICAgb25Mb2Fk
UHJvZ3Jlc3M6IGZ1bmN0aW9uICgpIHt9LAogCi0gICAgT2JqZWN0LmFzc2lnbiggQXVkaW9Mb2Fk
ZXIucHJvdG90eXBlLCB7CisgICAgICAgIG9uTG9hZENvbXBsZXRlOiBmdW5jdGlvbiAoKSB7fSwK
IAotICAgICAgICBsb2FkOiBmdW5jdGlvbiAoIHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVy
cm9yICkgeworICAgICAgICBpbml0TWF0ZXJpYWxzOiBmdW5jdGlvbiAoIG1hdGVyaWFscywgdGV4
dHVyZVBhdGgsIGNyb3NzT3JpZ2luICkgewogCi0gICAgICAgICAgICB2YXIgbG9hZGVyID0gbmV3
IEZpbGVMb2FkZXIoIHRoaXMubWFuYWdlciApOwotICAgICAgICAgICAgbG9hZGVyLnNldFJlc3Bv
bnNlVHlwZSggJ2FycmF5YnVmZmVyJyApOwotICAgICAgICAgICAgbG9hZGVyLmxvYWQoIHVybCwg
ZnVuY3Rpb24gKCBidWZmZXIgKSB7CisgICAgICAgICAgICB2YXIgYXJyYXkgPSBbXTsKIAotICAg
ICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIGJ1ZmZlci4gVGhlIGBkZWNvZGVB
dWRpb0RhdGFgIG1ldGhvZAotICAgICAgICAgICAgICAgIC8vIGRldGFjaGVzIHRoZSBidWZmZXIg
d2hlbiBjb21wbGV0ZSwgcHJldmVudGluZyByZXVzZS4KLSAgICAgICAgICAgICAgICB2YXIgYnVm
ZmVyQ29weSA9IGJ1ZmZlci5zbGljZSggMCApOworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
OyBpIDwgbWF0ZXJpYWxzLmxlbmd0aDsgKysgaSApIHsKIAotICAgICAgICAgICAgICAgIHZhciBj
b250ZXh0ID0gQXVkaW9Db250ZXh0LmdldENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICBjb250
ZXh0LmRlY29kZUF1ZGlvRGF0YSggYnVmZmVyQ29weSwgZnVuY3Rpb24gKCBhdWRpb0J1ZmZlciAp
IHsKKyAgICAgICAgICAgICAgICBhcnJheVsgaSBdID0gdGhpcy5jcmVhdGVNYXRlcmlhbCggbWF0
ZXJpYWxzWyBpIF0sIHRleHR1cmVQYXRoLCBjcm9zc09yaWdpbiApOwogCi0gICAgICAgICAgICAg
ICAgICAgIG9uTG9hZCggYXVkaW9CdWZmZXIgKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIH0gKTsKKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKIAotICAgICAgICAgICAgfSwg
b25Qcm9ncmVzcywgb25FcnJvciApOworICAgICAgICB9LAogCi0gICAgICAgIH0KKyAgICAgICAg
Y3JlYXRlTWF0ZXJpYWw6ICggZnVuY3Rpb24gKCkgewogCi0gICAgfSApOworICAgICAgICAgICAg
dmFyIEJsZW5kaW5nTW9kZSA9IHsKKyAgICAgICAgICAgICAgICBOb0JsZW5kaW5nOiBOb0JsZW5k
aW5nLAorICAgICAgICAgICAgICAgIE5vcm1hbEJsZW5kaW5nOiBOb3JtYWxCbGVuZGluZywKKyAg
ICAgICAgICAgICAgICBBZGRpdGl2ZUJsZW5kaW5nOiBBZGRpdGl2ZUJsZW5kaW5nLAorICAgICAg
ICAgICAgICAgIFN1YnRyYWN0aXZlQmxlbmRpbmc6IFN1YnRyYWN0aXZlQmxlbmRpbmcsCisgICAg
ICAgICAgICAgICAgTXVsdGlwbHlCbGVuZGluZzogTXVsdGlwbHlCbGVuZGluZywKKyAgICAgICAg
ICAgICAgICBDdXN0b21CbGVuZGluZzogQ3VzdG9tQmxlbmRpbmcKKyAgICAgICAgICAgIH07CiAK
LSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAg
ICAqLworICAgICAgICAgICAgdmFyIGNvbG9yID0gbmV3IENvbG9yKCk7CisgICAgICAgICAgICB2
YXIgdGV4dHVyZUxvYWRlciA9IG5ldyBUZXh0dXJlTG9hZGVyKCk7CisgICAgICAgICAgICB2YXIg
bWF0ZXJpYWxMb2FkZXIgPSBuZXcgTWF0ZXJpYWxMb2FkZXIoKTsKIAotICAgIGZ1bmN0aW9uIFN0
ZXJlb0NhbWVyYSgpIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjcmVhdGVNYXRlcmlh
bCggbSwgdGV4dHVyZVBhdGgsIGNyb3NzT3JpZ2luICkgewogCi0gICAgICAgIHRoaXMudHlwZSA9
ICdTdGVyZW9DYW1lcmEnOworICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgZnJvbSBvbGQgbWF0
ZXJpYWwgZm9ybWF0CiAKLSAgICAgICAgdGhpcy5hc3BlY3QgPSAxOworICAgICAgICAgICAgICAg
IHZhciB0ZXh0dXJlcyA9IHt9OwogCi0gICAgICAgIHRoaXMuZXllU2VwID0gMC4wNjQ7CisgICAg
ICAgICAgICAgICAgZnVuY3Rpb24gbG9hZFRleHR1cmUoIHBhdGgsIHJlcGVhdCwgb2Zmc2V0LCB3
cmFwLCBhbmlzb3Ryb3B5ICkgewogCi0gICAgICAgIHRoaXMuY2FtZXJhTCA9IG5ldyBQZXJzcGVj
dGl2ZUNhbWVyYSgpOwotICAgICAgICB0aGlzLmNhbWVyYUwubGF5ZXJzLmVuYWJsZSggMSApOwot
ICAgICAgICB0aGlzLmNhbWVyYUwubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICB2YXIgZnVsbFBhdGggPSB0ZXh0dXJlUGF0aCArIHBhdGg7CisgICAgICAgICAg
ICAgICAgICAgIHZhciBsb2FkZXIgPSBMb2FkZXIuSGFuZGxlcnMuZ2V0KCBmdWxsUGF0aCApOwog
Ci0gICAgICAgIHRoaXMuY2FtZXJhUiA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpOwotICAgICAg
ICB0aGlzLmNhbWVyYVIubGF5ZXJzLmVuYWJsZSggMiApOwotICAgICAgICB0aGlzLmNhbWVyYVIu
bWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dHVy
ZTsKIAotICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBsb2FkZXIgIT09IG51bGwgKSB7
CiAKLSAgICBPYmplY3QuYXNzaWduKCBTdGVyZW9DYW1lcmEucHJvdG90eXBlLCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlID0gbG9hZGVyLmxvYWQoIGZ1bGxQYXRoICk7CiAKLSAg
ICAgICAgdXBkYXRlOiAoIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKIAotICAgICAgICAgICAgdmFyIGluc3RhbmNlLCBmb2N1cywgZm92LCBhc3BlY3QsIG5lYXIs
IGZhciwgem9vbSwgZXllU2VwOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUxvYWRl
ci5zZXRDcm9zc09yaWdpbiggY3Jvc3NPcmlnaW4gKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUgPSB0ZXh0dXJlTG9hZGVyLmxvYWQoIGZ1bGxQYXRoICk7CiAKLSAgICAgICAgICAg
IHZhciBleWVSaWdodCA9IG5ldyBNYXRyaXg0KCk7Ci0gICAgICAgICAgICB2YXIgZXllTGVmdCA9
IG5ldyBNYXRyaXg0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uIHVwZGF0ZSggY2FtZXJhICkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IHJlcGVhdCAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgdmFyIG5lZWRzVXBk
YXRlID0gaW5zdGFuY2UgIT09IHRoaXMgfHwgZm9jdXMgIT09IGNhbWVyYS5mb2N1cyB8fCBmb3Yg
IT09IGNhbWVyYS5mb3YgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhc3BlY3QgIT09IGNhbWVyYS5hc3BlY3QgKiB0aGlzLmFzcGVjdCB8fCBu
ZWFyICE9PSBjYW1lcmEubmVhciB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZhciAhPT0gY2FtZXJhLmZhciB8fCB6b29tICE9PSBjYW1lcmEu
em9vbSB8fCBleWVTZXAgIT09IHRoaXMuZXllU2VwOworICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZS5yZXBlYXQuZnJvbUFycmF5KCByZXBlYXQgKTsKIAotICAgICAgICAgICAgICAgIGlm
ICggbmVlZHNVcGRhdGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlcGVhdFsg
MCBdICE9PSAxICkgdGV4dHVyZS53cmFwUyA9IFJlcGVhdFdyYXBwaW5nOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCByZXBlYXRbIDEgXSAhPT0gMSApIHRleHR1cmUud3JhcFQgPSBSZXBl
YXRXcmFwcGluZzsKIAotICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IHRoaXM7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvY3VzID0gY2FtZXJhLmZvY3VzOwotICAgICAgICAgICAgICAgICAg
ICBmb3YgPSBjYW1lcmEuZm92OwotICAgICAgICAgICAgICAgICAgICBhc3BlY3QgPSBjYW1lcmEu
YXNwZWN0ICogdGhpcy5hc3BlY3Q7Ci0gICAgICAgICAgICAgICAgICAgIG5lYXIgPSBjYW1lcmEu
bmVhcjsKLSAgICAgICAgICAgICAgICAgICAgZmFyID0gY2FtZXJhLmZhcjsKLSAgICAgICAgICAg
ICAgICAgICAgem9vbSA9IGNhbWVyYS56b29tOworICAgICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICAgICAgLy8gT2ZmLWF4aXMgc3RlcmVvc2NvcGljIGVmZmVjdCBiYXNlZCBv
bgotICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vcGF1bGJvdXJrZS5uZXQvc3RlcmVvZ3Jh
cGhpY3Mvc3RlcmVvcmVuZGVyLworICAgICAgICAgICAgICAgICAgICBpZiAoIG9mZnNldCAhPT0g
dW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgICAgIHZhciBwcm9qZWN0aW9uTWF0cml4
ID0gY2FtZXJhLnByb2plY3Rpb25NYXRyaXguY2xvbmUoKTsKLSAgICAgICAgICAgICAgICAgICAg
ZXllU2VwID0gdGhpcy5leWVTZXAgLyAyOwotICAgICAgICAgICAgICAgICAgICB2YXIgZXllU2Vw
T25Qcm9qZWN0aW9uID0gZXllU2VwICogbmVhciAvIGZvY3VzOwotICAgICAgICAgICAgICAgICAg
ICB2YXIgeW1heCA9ICggbmVhciAqIE1hdGgudGFuKCBfTWF0aC5ERUcyUkFEICogZm92ICogMC41
ICkgKSAvIHpvb207Ci0gICAgICAgICAgICAgICAgICAgIHZhciB4bWluLCB4bWF4OworICAgICAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZS5vZmZzZXQuZnJvbUFycmF5KCBvZmZzZXQgKTsKIAot
ICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2xhdGUgeE9mZnNldAorICAgICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgZXllTGVmdC5lbGVtZW50c1sgMTIgXSA9IC0g
ZXllU2VwOwotICAgICAgICAgICAgICAgICAgICBleWVSaWdodC5lbGVtZW50c1sgMTIgXSA9IGV5
ZVNlcDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB3cmFwICE9PSB1bmRlZmluZWQgKSB7CiAK
LSAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGxlZnQgZXllCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHdyYXBbIDAgXSA9PT0gJ3JlcGVhdCcgKSB0ZXh0dXJlLndyYXBTID0gUmVwZWF0
V3JhcHBpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHdyYXBbIDAgXSA9PT0gJ21p
cnJvcicgKSB0ZXh0dXJlLndyYXBTID0gTWlycm9yZWRSZXBlYXRXcmFwcGluZzsKIAotICAgICAg
ICAgICAgICAgICAgICB4bWluID0gLSB5bWF4ICogYXNwZWN0ICsgZXllU2VwT25Qcm9qZWN0aW9u
OwotICAgICAgICAgICAgICAgICAgICB4bWF4ID0geW1heCAqIGFzcGVjdCArIGV5ZVNlcE9uUHJv
amVjdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggd3JhcFsgMSBdID09PSAncmVw
ZWF0JyApIHRleHR1cmUud3JhcFQgPSBSZXBlYXRXcmFwcGluZzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggd3JhcFsgMSBdID09PSAnbWlycm9yJyApIHRleHR1cmUud3JhcFQgPSBNaXJy
b3JlZFJlcGVhdFdyYXBwaW5nOwogCi0gICAgICAgICAgICAgICAgICAgIHByb2plY3Rpb25NYXRy
aXguZWxlbWVudHNbIDAgXSA9IDIgKiBuZWFyIC8gKCB4bWF4IC0geG1pbiApOwotICAgICAgICAg
ICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWyA4IF0gPSAoIHhtYXggKyB4bWlu
ICkgLyAoIHhtYXggLSB4bWluICk7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgICAgICB0aGlzLmNhbWVyYUwucHJvamVjdGlvbk1hdHJpeC5jb3B5KCBwcm9qZWN0aW9u
TWF0cml4ICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggYW5pc290cm9weSAhPT0gdW5kZWZp
bmVkICkgewogCi0gICAgICAgICAgICAgICAgICAgIC8vIGZvciByaWdodCBleWUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUuYW5pc290cm9weSA9IGFuaXNvdHJvcHk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgeG1pbiA9IC0geW1heCAqIGFzcGVjdCAtIGV5ZVNlcE9uUHJvamVjdGlv
bjsKLSAgICAgICAgICAgICAgICAgICAgeG1heCA9IHltYXggKiBhc3BlY3QgLSBleWVTZXBPblBy
b2plY3Rpb247CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBw
cm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWyAwIF0gPSAyICogbmVhciAvICggeG1heCAtIHhtaW4g
KTsKLSAgICAgICAgICAgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sgOCBdID0g
KCB4bWF4ICsgeG1pbiApIC8gKCB4bWF4IC0geG1pbiApOworICAgICAgICAgICAgICAgICAgICB2
YXIgdXVpZCA9IF9NYXRoLmdlbmVyYXRlVVVJRCgpOwogCi0gICAgICAgICAgICAgICAgICAgIHRo
aXMuY2FtZXJhUi5wcm9qZWN0aW9uTWF0cml4LmNvcHkoIHByb2plY3Rpb25NYXRyaXggKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZXNbIHV1aWQgXSA9IHRleHR1cmU7CisKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHV1aWQ7CiAKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICB0aGlzLmNhbWVyYUwubWF0cml4V29ybGQuY29weSggY2FtZXJhLm1hdHJpeFdvcmxk
ICkubXVsdGlwbHkoIGV5ZUxlZnQgKTsKLSAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYVIubWF0
cml4V29ybGQuY29weSggY2FtZXJhLm1hdHJpeFdvcmxkICkubXVsdGlwbHkoIGV5ZVJpZ2h0ICk7
CisgICAgICAgICAgICAgICAgLy8KIAotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB2
YXIganNvbiA9IHsKKyAgICAgICAgICAgICAgICAgICAgdXVpZDogX01hdGguZ2VuZXJhdGVVVUlE
KCksCisgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdNZXNoTGFtYmVydE1hdGVyaWFsJworICAg
ICAgICAgICAgICAgIH07CiAKLSAgICAgICAgfSApKCkKKyAgICAgICAgICAgICAgICBmb3IgKCB2
YXIgbmFtZSBpbiBtICkgewogCi0gICAgfSApOworICAgICAgICAgICAgICAgICAgICB2YXIgdmFs
dWUgPSBtWyBuYW1lIF07CiAKLSAgICAvKioKLSAgICAgKiBDYW1lcmEgZm9yIHJlbmRlcmluZyBj
dWJlIG1hcHMKLSAgICAgKiAgLSByZW5kZXJzIHNjZW5lIGludG8gYXhpcy1hbGlnbmVkIGN1YmUK
LSAgICAgKgotICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5j
b20vCi0gICAgICovCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoIG5hbWUgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RiZ0NvbG9yJzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ0RiZ0luZGV4JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ29w
dGljYWxEZW5zaXR5JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2lsbHVtaW5hdGlv
bic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICdEYmdOYW1lJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29u
Lm5hbWUgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JsZW5kaW5nJzoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqc29uLmJsZW5kaW5nID0gQmxlbmRpbmdNb2RlWyB2YWx1ZSBdOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
Y29sb3JBbWJpZW50JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcEFtYmllbnQn
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkxvYWRl
ci5jcmVhdGVNYXRlcmlhbDonLCBuYW1lLCAnaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4nICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICdjb2xvckRpZmZ1c2UnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24u
Y29sb3IgPSBjb2xvci5mcm9tQXJyYXkoIHZhbHVlICkuZ2V0SGV4KCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjb2xv
clNwZWN1bGFyJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnNwZWN1bGFyID0g
Y29sb3IuZnJvbUFycmF5KCB2YWx1ZSApLmdldEhleCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29sb3JFbWlzc2l2
ZSc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5lbWlzc2l2ZSA9IGNvbG9yLmZy
b21BcnJheSggdmFsdWUgKS5nZXRIZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NwZWN1bGFyQ29lZic6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAganNvbi5zaGluaW5lc3MgPSB2YWx1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J3NoYWRpbmcnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUudG9Mb3dl
ckNhc2UoKSA9PT0gJ2Jhc2ljJyApIGpzb24udHlwZSA9ICdNZXNoQmFzaWNNYXRlcmlhbCc7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAn
cGhvbmcnICkganNvbi50eXBlID0gJ01lc2hQaG9uZ01hdGVyaWFsJzsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICdzdGFuZGFyZCcgKSBq
c29uLnR5cGUgPSAnTWVzaFN0YW5kYXJkTWF0ZXJpYWwnOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwRGlmZnVzZSc6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5tYXAgPSBsb2FkVGV4dHVyZSggdmFs
dWUsIG0ubWFwRGlmZnVzZVJlcGVhdCwgbS5tYXBEaWZmdXNlT2Zmc2V0LCBtLm1hcERpZmZ1c2VX
cmFwLCBtLm1hcERpZmZ1c2VBbmlzb3Ryb3B5ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBEaWZmdXNlUmVwZWF0
JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcERpZmZ1c2VPZmZzZXQnOgorICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwRGlmZnVzZVdyYXAnOgorICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnbWFwRGlmZnVzZUFuaXNvdHJvcHknOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwRW1p
c3NpdmUnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24uZW1pc3NpdmVNYXAgPSBs
b2FkVGV4dHVyZSggdmFsdWUsIG0ubWFwRW1pc3NpdmVSZXBlYXQsIG0ubWFwRW1pc3NpdmVPZmZz
ZXQsIG0ubWFwRW1pc3NpdmVXcmFwLCBtLm1hcEVtaXNzaXZlQW5pc290cm9weSApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnbWFwRW1pc3NpdmVSZXBlYXQnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFw
RW1pc3NpdmVPZmZzZXQnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwRW1pc3Np
dmVXcmFwJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcEVtaXNzaXZlQW5pc290
cm9weSc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICdtYXBMaWdodCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
anNvbi5saWdodE1hcCA9IGxvYWRUZXh0dXJlKCB2YWx1ZSwgbS5tYXBMaWdodFJlcGVhdCwgbS5t
YXBMaWdodE9mZnNldCwgbS5tYXBMaWdodFdyYXAsIG0ubWFwTGlnaHRBbmlzb3Ryb3B5ICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICdtYXBMaWdodFJlcGVhdCc6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdt
YXBMaWdodE9mZnNldCc6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBMaWdodFdy
YXAnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwTGlnaHRBbmlzb3Ryb3B5JzoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ21hcEFPJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLmFvTWFw
ID0gbG9hZFRleHR1cmUoIHZhbHVlLCBtLm1hcEFPUmVwZWF0LCBtLm1hcEFPT2Zmc2V0LCBtLm1h
cEFPV3JhcCwgbS5tYXBBT0FuaXNvdHJvcHkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcEFPUmVwZWF0JzoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcEFPT2Zmc2V0JzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ21hcEFPV3JhcCc6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICdtYXBBT0FuaXNvdHJvcHknOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwQnVtcCc6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAganNvbi5idW1wTWFwID0gbG9hZFRleHR1cmUoIHZhbHVlLCBtLm1hcEJ1bXBS
ZXBlYXQsIG0ubWFwQnVtcE9mZnNldCwgbS5tYXBCdW1wV3JhcCwgbS5tYXBCdW1wQW5pc290cm9w
eSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnbWFwQnVtcFNjYWxlJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqc29uLmJ1bXBTY2FsZSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwQnVtcFJlcGVhdCc6CisgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBCdW1wT2Zmc2V0JzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ21hcEJ1bXBXcmFwJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ21hcEJ1bXBBbmlzb3Ryb3B5JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcE5vcm1hbCc6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAganNvbi5ub3JtYWxNYXAgPSBsb2FkVGV4dHVyZSggdmFsdWUsIG0u
bWFwTm9ybWFsUmVwZWF0LCBtLm1hcE5vcm1hbE9mZnNldCwgbS5tYXBOb3JtYWxXcmFwLCBtLm1h
cE5vcm1hbEFuaXNvdHJvcHkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcE5vcm1hbEZhY3Rvcic6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAganNvbi5ub3JtYWxTY2FsZSA9IHZhbHVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
bWFwTm9ybWFsUmVwZWF0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcE5vcm1h
bE9mZnNldCc6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBOb3JtYWxXcmFwJzoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcE5vcm1hbEFuaXNvdHJvcHknOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnbWFwU3BlY3VsYXInOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24uc3Bl
Y3VsYXJNYXAgPSBsb2FkVGV4dHVyZSggdmFsdWUsIG0ubWFwU3BlY3VsYXJSZXBlYXQsIG0ubWFw
U3BlY3VsYXJPZmZzZXQsIG0ubWFwU3BlY3VsYXJXcmFwLCBtLm1hcFNwZWN1bGFyQW5pc290cm9w
eSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnbWFwU3BlY3VsYXJSZXBlYXQnOgorICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnbWFwU3BlY3VsYXJPZmZzZXQnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnbWFwU3BlY3VsYXJXcmFwJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcFNw
ZWN1bGFyQW5pc290cm9weSc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBNZXRhbG5lc3MnOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpzb24ubWV0YWxuZXNzTWFwID0gbG9hZFRleHR1cmUoIHZhbHVlLCBt
Lm1hcE1ldGFsbmVzc1JlcGVhdCwgbS5tYXBNZXRhbG5lc3NPZmZzZXQsIG0ubWFwTWV0YWxuZXNz
V3JhcCwgbS5tYXBNZXRhbG5lc3NBbmlzb3Ryb3B5ICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBNZXRhbG5lc3NS
ZXBlYXQnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwTWV0YWxuZXNzT2Zmc2V0
JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcE1ldGFsbmVzc1dyYXAnOgorICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwTWV0YWxuZXNzQW5pc290cm9weSc6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICdtYXBSb3VnaG5lc3MnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24ucm91
Z2huZXNzTWFwID0gbG9hZFRleHR1cmUoIHZhbHVlLCBtLm1hcFJvdWdobmVzc1JlcGVhdCwgbS5t
YXBSb3VnaG5lc3NPZmZzZXQsIG0ubWFwUm91Z2huZXNzV3JhcCwgbS5tYXBSb3VnaG5lc3NBbmlz
b3Ryb3B5ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICdtYXBSb3VnaG5lc3NSZXBlYXQnOgorICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnbWFwUm91Z2huZXNzT2Zmc2V0JzoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ21hcFJvdWdobmVzc1dyYXAnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnbWFwUm91Z2huZXNzQW5pc290cm9weSc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBBbHBoYSc6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAganNvbi5hbHBoYU1hcCA9IGxvYWRUZXh0dXJlKCB2YWx1ZSwg
bS5tYXBBbHBoYVJlcGVhdCwgbS5tYXBBbHBoYU9mZnNldCwgbS5tYXBBbHBoYVdyYXAsIG0ubWFw
QWxwaGFBbmlzb3Ryb3B5ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBBbHBoYVJlcGVhdCc6CisgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICdtYXBBbHBoYU9mZnNldCc6CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICdtYXBBbHBoYVdyYXAnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
bWFwQWxwaGFBbmlzb3Ryb3B5JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZsaXBTaWRlZCc6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAganNvbi5zaWRlID0gQmFja1NpZGU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkb3VibGVTaWRl
ZCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5zaWRlID0gRG91YmxlU2lkZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ3RyYW5zcGFyZW5jeSc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c29sZS53YXJuKCAnVEhSRUUuTG9hZGVyLmNyZWF0ZU1hdGVyaWFsOiB0cmFuc3BhcmVuY3kgaGFz
IGJlZW4gcmVuYW1lZCB0byBvcGFjaXR5JyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpzb24ub3BhY2l0eSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVwdGhUZXN0JzoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ2RlcHRoV3JpdGUnOgorICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnY29sb3JXcml0ZSc6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdvcGFjaXR5
JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlZmxlY3Rpdml0eSc6CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICd0cmFuc3BhcmVudCc6CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICd2aXNpYmxlJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3dpcmVm
cmFtZSc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvblsgbmFtZSBdID0gdmFsdWU7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICd2ZXJ0ZXhDb2xvcnMnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggdmFsdWUgPT09IHRydWUgKSBqc29uLnZlcnRleENvbG9ycyA9IFZlcnRleENvbG9yczsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlID09PSAnZmFjZScgKSBqc29uLnZl
cnRleENvbG9ycyA9IEZhY2VDb2xvcnM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5Mb2FkZXIuY3JlYXRlTWF0ZXJpYWw6IFVu
c3VwcG9ydGVkJywgbmFtZSwgdmFsdWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKIAotICAgIGZ1bmN0aW9uIEN1YmVDYW1lcmEoIG5lYXIsIGZhciwgY3ViZVJlc29sdXRp
b24gKSB7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBPYmplY3QzRC5jYWxsKCB0
aGlzICk7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIHRoaXMudHlwZSA9ICdDdWJlQ2Ft
ZXJhJzsKKyAgICAgICAgICAgICAgICBpZiAoIGpzb24udHlwZSA9PT0gJ01lc2hCYXNpY01hdGVy
aWFsJyApIGRlbGV0ZSBqc29uLmVtaXNzaXZlOworICAgICAgICAgICAgICAgIGlmICgganNvbi50
eXBlICE9PSAnTWVzaFBob25nTWF0ZXJpYWwnICkgZGVsZXRlIGpzb24uc3BlY3VsYXI7CiAKLSAg
ICAgICAgdmFyIGZvdiA9IDkwLCBhc3BlY3QgPSAxOworICAgICAgICAgICAgICAgIGlmICgganNv
bi5vcGFjaXR5IDwgMSApIGpzb24udHJhbnNwYXJlbnQgPSB0cnVlOwogCi0gICAgICAgIHZhciBj
YW1lcmFQWCA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSggZm92LCBhc3BlY3QsIG5lYXIsIGZhciAp
OwotICAgICAgICBjYW1lcmFQWC51cC5zZXQoIDAsIC0gMSwgMCApOwotICAgICAgICBjYW1lcmFQ
WC5sb29rQXQoIG5ldyBWZWN0b3IzKCAxLCAwLCAwICkgKTsKLSAgICAgICAgdGhpcy5hZGQoIGNh
bWVyYVBYICk7CisgICAgICAgICAgICAgICAgbWF0ZXJpYWxMb2FkZXIuc2V0VGV4dHVyZXMoIHRl
eHR1cmVzICk7CiAKLSAgICAgICAgdmFyIGNhbWVyYU5YID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJh
KCBmb3YsIGFzcGVjdCwgbmVhciwgZmFyICk7Ci0gICAgICAgIGNhbWVyYU5YLnVwLnNldCggMCwg
LSAxLCAwICk7Ci0gICAgICAgIGNhbWVyYU5YLmxvb2tBdCggbmV3IFZlY3RvcjMoIC0gMSwgMCwg
MCApICk7Ci0gICAgICAgIHRoaXMuYWRkKCBjYW1lcmFOWCApOworICAgICAgICAgICAgICAgIHJl
dHVybiBtYXRlcmlhbExvYWRlci5wYXJzZSgganNvbiApOwogCi0gICAgICAgIHZhciBjYW1lcmFQ
WSA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSggZm92LCBhc3BlY3QsIG5lYXIsIGZhciApOwotICAg
ICAgICBjYW1lcmFQWS51cC5zZXQoIDAsIDAsIDEgKTsKLSAgICAgICAgY2FtZXJhUFkubG9va0F0
KCBuZXcgVmVjdG9yMyggMCwgMSwgMCApICk7Ci0gICAgICAgIHRoaXMuYWRkKCBjYW1lcmFQWSAp
OworICAgICAgICAgICAgfTsKIAotICAgICAgICB2YXIgY2FtZXJhTlkgPSBuZXcgUGVyc3BlY3Rp
dmVDYW1lcmEoIGZvdiwgYXNwZWN0LCBuZWFyLCBmYXIgKTsKLSAgICAgICAgY2FtZXJhTlkudXAu
c2V0KCAwLCAwLCAtIDEgKTsKLSAgICAgICAgY2FtZXJhTlkubG9va0F0KCBuZXcgVmVjdG9yMygg
MCwgLSAxLCAwICkgKTsKLSAgICAgICAgdGhpcy5hZGQoIGNhbWVyYU5ZICk7CisgICAgICAgIH0g
KSgpCiAKLSAgICAgICAgdmFyIGNhbWVyYVBaID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCBmb3Ys
IGFzcGVjdCwgbmVhciwgZmFyICk7Ci0gICAgICAgIGNhbWVyYVBaLnVwLnNldCggMCwgLSAxLCAw
ICk7Ci0gICAgICAgIGNhbWVyYVBaLmxvb2tBdCggbmV3IFZlY3RvcjMoIDAsIDAsIDEgKSApOwot
ICAgICAgICB0aGlzLmFkZCggY2FtZXJhUFogKTsKKyAgICB9ICk7CiAKLSAgICAgICAgdmFyIGNh
bWVyYU5aID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCBmb3YsIGFzcGVjdCwgbmVhciwgZmFyICk7
Ci0gICAgICAgIGNhbWVyYU5aLnVwLnNldCggMCwgLSAxLCAwICk7Ci0gICAgICAgIGNhbWVyYU5a
Lmxvb2tBdCggbmV3IFZlY3RvcjMoIDAsIDAsIC0gMSApICk7Ci0gICAgICAgIHRoaXMuYWRkKCBj
YW1lcmFOWiApOworICAgIC8qKgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9v
Yi5jb20vCisgICAgICovCiAKLSAgICAgICAgdmFyIG9wdGlvbnMgPSB7IGZvcm1hdDogUkdCRm9y
bWF0LCBtYWdGaWx0ZXI6IExpbmVhckZpbHRlciwgbWluRmlsdGVyOiBMaW5lYXJGaWx0ZXIgfTsK
KyAgICB2YXIgY29udGV4dDsKIAotICAgICAgICB0aGlzLnJlbmRlclRhcmdldCA9IG5ldyBXZWJH
TFJlbmRlclRhcmdldEN1YmUoIGN1YmVSZXNvbHV0aW9uLCBjdWJlUmVzb2x1dGlvbiwgb3B0aW9u
cyApOwotICAgICAgICB0aGlzLnJlbmRlclRhcmdldC50ZXh0dXJlLm5hbWUgPSAiQ3ViZUNhbWVy
YSI7CisgICAgdmFyIEF1ZGlvQ29udGV4dCA9IHsKIAotICAgICAgICB0aGlzLnVwZGF0ZSA9IGZ1
bmN0aW9uICggcmVuZGVyZXIsIHNjZW5lICkgeworICAgICAgICBnZXRDb250ZXh0OiBmdW5jdGlv
biAoKSB7CiAKLSAgICAgICAgICAgIGlmICggdGhpcy5wYXJlbnQgPT09IG51bGwgKSB0aGlzLnVw
ZGF0ZU1hdHJpeFdvcmxkKCk7CisgICAgICAgICAgICBpZiAoIGNvbnRleHQgPT09IHVuZGVmaW5l
ZCApIHsKIAotICAgICAgICAgICAgdmFyIHJlbmRlclRhcmdldCA9IHRoaXMucmVuZGVyVGFyZ2V0
OwotICAgICAgICAgICAgdmFyIGdlbmVyYXRlTWlwbWFwcyA9IHJlbmRlclRhcmdldC50ZXh0dXJl
LmdlbmVyYXRlTWlwbWFwczsKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gbmV3ICggd2luZG93
LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0ICkoKTsKIAotICAgICAg
ICAgICAgcmVuZGVyVGFyZ2V0LnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7CisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmVDdWJlRmFjZSA9IDA7
Ci0gICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoIHNjZW5lLCBjYW1lcmFQWCwgcmVuZGVyVGFy
Z2V0ICk7CisgICAgICAgICAgICByZXR1cm4gY29udGV4dDsKIAotICAgICAgICAgICAgcmVuZGVy
VGFyZ2V0LmFjdGl2ZUN1YmVGYWNlID0gMTsKLSAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlcigg
c2NlbmUsIGNhbWVyYU5YLCByZW5kZXJUYXJnZXQgKTsKKyAgICAgICAgfSwKIAotICAgICAgICAg
ICAgcmVuZGVyVGFyZ2V0LmFjdGl2ZUN1YmVGYWNlID0gMjsKLSAgICAgICAgICAgIHJlbmRlcmVy
LnJlbmRlciggc2NlbmUsIGNhbWVyYVBZLCByZW5kZXJUYXJnZXQgKTsKKyAgICAgICAgc2V0Q29u
dGV4dDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKIAotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LmFj
dGl2ZUN1YmVGYWNlID0gMzsKLSAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlciggc2NlbmUsIGNh
bWVyYU5ZLCByZW5kZXJUYXJnZXQgKTsKKyAgICAgICAgICAgIGNvbnRleHQgPSB2YWx1ZTsKIAot
ICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LmFjdGl2ZUN1YmVGYWNlID0gNDsKLSAgICAgICAgICAg
IHJlbmRlcmVyLnJlbmRlciggc2NlbmUsIGNhbWVyYVBaLCByZW5kZXJUYXJnZXQgKTsKKyAgICAg
ICAgfQogCi0gICAgICAgICAgICByZW5kZXJUYXJnZXQudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMg
PSBnZW5lcmF0ZU1pcG1hcHM7CisgICAgfTsKIAotICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LmFj
dGl2ZUN1YmVGYWNlID0gNTsKLSAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlciggc2NlbmUsIGNh
bWVyYU5aLCByZW5kZXJUYXJnZXQgKTsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIFJlZWNlIEFh
cm9uIExlY3JpdmFpbiAvIGh0dHA6Ly9yZWVjZW5vdGVzLmNvbS8KKyAgICAgKi8KIAotICAgICAg
ICAgICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCBudWxsICk7CisgICAgZnVuY3Rpb24gQXVk
aW9Mb2FkZXIoIG1hbmFnZXIgKSB7CiAKLSAgICAgICAgfTsKKyAgICAgICAgdGhpcy5tYW5hZ2Vy
ID0gKCBtYW5hZ2VyICE9PSB1bmRlZmluZWQgKSA/IG1hbmFnZXIgOiBEZWZhdWx0TG9hZGluZ01h
bmFnZXI7CiAKLSAgICAgICAgdGhpcy5jbGVhciA9IGZ1bmN0aW9uICggcmVuZGVyZXIsIGNvbG9y
LCBkZXB0aCwgc3RlbmNpbCApIHsKKyAgICB9CiAKLSAgICAgICAgICAgIHZhciByZW5kZXJUYXJn
ZXQgPSB0aGlzLnJlbmRlclRhcmdldDsKKyAgICBPYmplY3QuYXNzaWduKCBBdWRpb0xvYWRlci5w
cm90b3R5cGUsIHsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgNjsgaSArKyAp
IHsKKyAgICAgICAgbG9hZDogZnVuY3Rpb24gKCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25F
cnJvciApIHsKIAotICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmVDdWJlRmFjZSA9
IGk7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCByZW5kZXJUYXJn
ZXQgKTsKKyAgICAgICAgICAgIHZhciBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlciggdGhpcy5tYW5h
Z2VyICk7CisgICAgICAgICAgICBsb2FkZXIuc2V0UmVzcG9uc2VUeXBlKCAnYXJyYXlidWZmZXIn
ICk7CisgICAgICAgICAgICBsb2FkZXIuc2V0UGF0aCggdGhpcy5wYXRoICk7CisgICAgICAgICAg
ICBsb2FkZXIubG9hZCggdXJsLCBmdW5jdGlvbiAoIGJ1ZmZlciApIHsKIAotICAgICAgICAgICAg
ICAgIHJlbmRlcmVyLmNsZWFyKCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwgKTsKKyAgICAgICAgICAg
ICAgICAvLyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBidWZmZXIuIFRoZSBgZGVjb2RlQXVkaW9EYXRh
YCBtZXRob2QKKyAgICAgICAgICAgICAgICAvLyBkZXRhY2hlcyB0aGUgYnVmZmVyIHdoZW4gY29t
cGxldGUsIHByZXZlbnRpbmcgcmV1c2UuCisgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckNvcHkg
PSBidWZmZXIuc2xpY2UoIDAgKTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZh
ciBjb250ZXh0ID0gQXVkaW9Db250ZXh0LmdldENvbnRleHQoKTsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LmRlY29kZUF1ZGlvRGF0YSggYnVmZmVyQ29weSwgZnVuY3Rpb24gKCBhdWRpb0J1ZmZl
ciApIHsKIAotICAgICAgICAgICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCBudWxsICk7Cisg
ICAgICAgICAgICAgICAgICAgIG9uTG9hZCggYXVkaW9CdWZmZXIgKTsKIAotICAgICAgICB9Owor
ICAgICAgICAgICAgICAgIH0gKTsKIAotICAgIH0KKyAgICAgICAgICAgIH0sIG9uUHJvZ3Jlc3Ms
IG9uRXJyb3IgKTsKIAotICAgIEN1YmVDYW1lcmEucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSgg
T2JqZWN0M0QucHJvdG90eXBlICk7Ci0gICAgQ3ViZUNhbWVyYS5wcm90b3R5cGUuY29uc3RydWN0
b3IgPSBDdWJlQ2FtZXJhOworICAgICAgICB9LAorCisgICAgICAgIHNldFBhdGg6IGZ1bmN0aW9u
ICggdmFsdWUgKSB7CisKKyAgICAgICAgICAgIHRoaXMucGF0aCA9IHZhbHVlOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CisKKyAgICAgICAgfQorCisgICAgfSApOwogCiAgICAgLyoqCi0gICAg
ICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKiBAYXV0aG9yIGJo
b3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvCisgICAgICogQGF1dGhvciBXZXN0TGFuZ2xleSAvIGh0
dHA6Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5CisgICAgICoKKyAgICAgKiBQcmltYXJ5IHJlZmVy
ZW5jZToKKyAgICAgKiAgIGh0dHBzOi8vZ3JhcGhpY3Muc3RhbmZvcmQuZWR1L3BhcGVycy9lbnZt
YXAvZW52bWFwLnBkZgorICAgICAqCisgICAgICogU2Vjb25kYXJ5IHJlZmVyZW5jZToKKyAgICAg
KiAgIGh0dHBzOi8vd3d3LnBwc2xvYW4ub3JnL3B1YmxpY2F0aW9ucy9TdHVwaWRTSDM2LnBkZgog
ICAgICAqLwogCi0gICAgZnVuY3Rpb24gQXVkaW9MaXN0ZW5lcigpIHsKKyAgICAvLyAzLWJhbmQg
U0ggZGVmaW5lZCBieSA5IGNvZWZmaWNpZW50cwogCi0gICAgICAgIE9iamVjdDNELmNhbGwoIHRo
aXMgKTsKKyAgICBmdW5jdGlvbiBTcGhlcmljYWxIYXJtb25pY3MzKCkgewogCi0gICAgICAgIHRo
aXMudHlwZSA9ICdBdWRpb0xpc3RlbmVyJzsKKyAgICAgICAgdGhpcy5jb2VmZmljaWVudHMgPSBb
XTsKIAotICAgICAgICB0aGlzLmNvbnRleHQgPSBBdWRpb0NvbnRleHQuZ2V0Q29udGV4dCgpOwor
ICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCA5OyBpICsrICkgewogCi0gICAgICAgIHRoaXMu
Z2FpbiA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7Ci0gICAgICAgIHRoaXMuZ2Fpbi5jb25u
ZWN0KCB0aGlzLmNvbnRleHQuZGVzdGluYXRpb24gKTsKKyAgICAgICAgICAgIHRoaXMuY29lZmZp
Y2llbnRzLnB1c2goIG5ldyBWZWN0b3IzKCkgKTsKIAotICAgICAgICB0aGlzLmZpbHRlciA9IG51
bGw7CisgICAgICAgIH0KIAogICAgIH0KIAotICAgIEF1ZGlvTGlzdGVuZXIucHJvdG90eXBlID0g
T2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggT2JqZWN0M0QucHJvdG90eXBlICksIHsKKyAg
ICBPYmplY3QuYXNzaWduKCBTcGhlcmljYWxIYXJtb25pY3MzLnByb3RvdHlwZSwgewogCi0gICAg
ICAgIGNvbnN0cnVjdG9yOiBBdWRpb0xpc3RlbmVyLAorICAgICAgICBpc1NwaGVyaWNhbEhhcm1v
bmljczM6IHRydWUsCiAKLSAgICAgICAgZ2V0SW5wdXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
c2V0OiBmdW5jdGlvbiAoIGNvZWZmaWNpZW50cyApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZ2FpbjsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IDk7IGkgKysgKSB7CisK
KyAgICAgICAgICAgICAgICB0aGlzLmNvZWZmaWNpZW50c1sgaSBdLmNvcHkoIGNvZWZmaWNpZW50
c1sgaSBdICk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
ICAgICAgICAgfSwKIAotICAgICAgICByZW1vdmVGaWx0ZXI6IGZ1bmN0aW9uICggKSB7CisgICAg
ICAgIHplcm86IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLmZpbHRlciAh
PT0gbnVsbCApIHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IDk7IGkgKysgKSB7
CiAKLSAgICAgICAgICAgICAgICB0aGlzLmdhaW4uZGlzY29ubmVjdCggdGhpcy5maWx0ZXIgKTsK
LSAgICAgICAgICAgICAgICB0aGlzLmZpbHRlci5kaXNjb25uZWN0KCB0aGlzLmNvbnRleHQuZGVz
dGluYXRpb24gKTsKLSAgICAgICAgICAgICAgICB0aGlzLmdhaW4uY29ubmVjdCggdGhpcy5jb250
ZXh0LmRlc3RpbmF0aW9uICk7Ci0gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXIgPSBudWxsOwor
ICAgICAgICAgICAgICAgIHRoaXMuY29lZmZpY2llbnRzWyBpIF0uc2V0KCAwLCAwLCAwICk7CiAK
ICAgICAgICAgICAgIH0KIApAQCAtMzk1MDQsNzkgKzQwNjA3LDYxMiBAQAogCiAgICAgICAgIH0s
CiAKLSAgICAgICAgZ2V0RmlsdGVyOiBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAgIHJldHVy
biB0aGlzLmZpbHRlcjsKKyAgICAgICAgLy8gZ2V0IHRoZSByYWRpYW5jZSBpbiB0aGUgZGlyZWN0
aW9uIG9mIHRoZSBub3JtYWwKKyAgICAgICAgLy8gdGFyZ2V0IGlzIGEgVmVjdG9yMworICAgICAg
ICBnZXRBdDogZnVuY3Rpb24gKCBub3JtYWwsIHRhcmdldCApIHsKIAotICAgICAgICB9LAorICAg
ICAgICAgICAgLy8gbm9ybWFsIGlzIGFzc3VtZWQgdG8gYmUgdW5pdCBsZW5ndGgKIAotICAgICAg
ICBzZXRGaWx0ZXI6IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAgICAgICAgICB2YXIgeCA9IG5v
cm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejsKIAotICAgICAgICAgICAgaWYgKCB0
aGlzLmZpbHRlciAhPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHZhciBjb2VmZiA9IHRoaXMuY29l
ZmZpY2llbnRzOwogCi0gICAgICAgICAgICAgICAgdGhpcy5nYWluLmRpc2Nvbm5lY3QoIHRoaXMu
ZmlsdGVyICk7Ci0gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXIuZGlzY29ubmVjdCggdGhpcy5j
b250ZXh0LmRlc3RpbmF0aW9uICk7CisgICAgICAgICAgICAvLyBiYW5kIDAKKyAgICAgICAgICAg
IHRhcmdldC5jb3B5KCBjb2VmZlsgMCBdICkubXVsdGlwbHlTY2FsYXIoIDAuMjgyMDk1ICk7CiAK
LSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBiYW5kIDEKKyAgICAgICAgICAg
IHRhcmdldC5hZGRTY2FsZSggY29lZmZbIDEgXSwgMC40ODg2MDMgKiB5ICk7CisgICAgICAgICAg
ICB0YXJnZXQuYWRkU2NhbGUoIGNvZWZmWyAyIF0sIDAuNDg4NjAzICogeiApOworICAgICAgICAg
ICAgdGFyZ2V0LmFkZFNjYWxlKCBjb2VmZlsgMyBdLCAwLjQ4ODYwMyAqIHggKTsKIAotICAgICAg
ICAgICAgICAgIHRoaXMuZ2Fpbi5kaXNjb25uZWN0KCB0aGlzLmNvbnRleHQuZGVzdGluYXRpb24g
KTsKKyAgICAgICAgICAgIC8vIGJhbmQgMgorICAgICAgICAgICAgdGFyZ2V0LmFkZFNjYWxlKCBj
b2VmZlsgNCBdLCAxLjA5MjU0OCAqICggeCAqIHkgKSApOworICAgICAgICAgICAgdGFyZ2V0LmFk
ZFNjYWxlKCBjb2VmZlsgNSBdLCAxLjA5MjU0OCAqICggeSAqIHogKSApOworICAgICAgICAgICAg
dGFyZ2V0LmFkZFNjYWxlKCBjb2VmZlsgNiBdLCAwLjMxNTM5MiAqICggMy4wICogeiAqIHogLSAx
LjAgKSApOworICAgICAgICAgICAgdGFyZ2V0LmFkZFNjYWxlKCBjb2VmZlsgNyBdLCAxLjA5MjU0
OCAqICggeCAqIHogKSApOworICAgICAgICAgICAgdGFyZ2V0LmFkZFNjYWxlKCBjb2VmZlsgOCBd
LCAwLjU0NjI3NCAqICggeCAqIHggLSB5ICogeSApICk7CiAKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiB0YXJnZXQ7CiAKLSAgICAgICAgICAgIHRoaXMuZmlsdGVyID0gdmFsdWU7
Ci0gICAgICAgICAgICB0aGlzLmdhaW4uY29ubmVjdCggdGhpcy5maWx0ZXIgKTsKLSAgICAgICAg
ICAgIHRoaXMuZmlsdGVyLmNvbm5lY3QoIHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiApOworICAg
ICAgICB9LAogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgLy8gZ2V0IHRoZSBp
cnJhZGlhbmNlIChyYWRpYW5jZSBjb252b2x2ZWQgd2l0aCBjb3NpbmUgbG9iZSkgaW4gdGhlIGRp
cmVjdGlvbiBvZiB0aGUgbm9ybWFsCisgICAgICAgIC8vIHRhcmdldCBpcyBhIFZlY3RvcjMKKyAg
ICAgICAgLy8gaHR0cHM6Ly9ncmFwaGljcy5zdGFuZm9yZC5lZHUvcGFwZXJzL2Vudm1hcC9lbnZt
YXAucGRmCisgICAgICAgIGdldElycmFkaWFuY2VBdDogZnVuY3Rpb24gKCBub3JtYWwsIHRhcmdl
dCApIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgLy8gbm9ybWFsIGlzIGFzc3VtZWQgdG8g
YmUgdW5pdCBsZW5ndGgKIAotICAgICAgICBnZXRNYXN0ZXJWb2x1bWU6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHZhciB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56
OwogCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWU7CisgICAgICAgICAg
ICB2YXIgY29lZmYgPSB0aGlzLmNvZWZmaWNpZW50czsKIAotICAgICAgICB9LAorICAgICAgICAg
ICAgLy8gYmFuZCAwCisgICAgICAgICAgICB0YXJnZXQuY29weSggY29lZmZbIDAgXSApLm11bHRp
cGx5U2NhbGFyKCAwLjg4NjIyNyApOyAvLyDPgCAqIDAuMjgyMDk1CiAKLSAgICAgICAgc2V0TWFz
dGVyVm9sdW1lOiBmdW5jdGlvbiAoIHZhbHVlICkgeworICAgICAgICAgICAgLy8gYmFuZCAxCisg
ICAgICAgICAgICB0YXJnZXQuYWRkU2NhbGUoIGNvZWZmWyAxIF0sIDIuMCAqIDAuNTExNjY0ICog
eSApOyAvLyAoIDIgKiDPgCAvIDMgKSAqIDAuNDg4NjAzCisgICAgICAgICAgICB0YXJnZXQuYWRk
U2NhbGUoIGNvZWZmWyAyIF0sIDIuMCAqIDAuNTExNjY0ICogeiApOworICAgICAgICAgICAgdGFy
Z2V0LmFkZFNjYWxlKCBjb2VmZlsgMyBdLCAyLjAgKiAwLjUxMTY2NCAqIHggKTsKIAotICAgICAg
ICAgICAgdGhpcy5nYWluLmdhaW4uc2V0VGFyZ2V0QXRUaW1lKCB2YWx1ZSwgdGhpcy5jb250ZXh0
LmN1cnJlbnRUaW1lLCAwLjAxICk7CisgICAgICAgICAgICAvLyBiYW5kIDIKKyAgICAgICAgICAg
IHRhcmdldC5hZGRTY2FsZSggY29lZmZbIDQgXSwgMi4wICogMC40MjkwNDMgKiB4ICogeSApOyAv
LyAoIM+AIC8gNCApICogMS4wOTI1NDgKKyAgICAgICAgICAgIHRhcmdldC5hZGRTY2FsZSggY29l
ZmZbIDUgXSwgMi4wICogMC40MjkwNDMgKiB5ICogeiApOworICAgICAgICAgICAgdGFyZ2V0LmFk
ZFNjYWxlKCBjb2VmZlsgNiBdLCAwLjc0MzEyNSAqIHogKiB6IC0gMC4yNDc3MDggKTsgLy8gKCDP
gCAvIDQgKSAqIDAuMzE1MzkyICogMworICAgICAgICAgICAgdGFyZ2V0LmFkZFNjYWxlKCBjb2Vm
ZlsgNyBdLCAyLjAgKiAwLjQyOTA0MyAqIHggKiB6ICk7CisgICAgICAgICAgICB0YXJnZXQuYWRk
U2NhbGUoIGNvZWZmWyA4IF0sIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICkgKTsgLy8gKCDP
gCAvIDQgKSAqIDAuNTQ2Mjc0CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAg
ICAgcmV0dXJuIHRhcmdldDsKIAogICAgICAgICB9LAogCi0gICAgICAgIHVwZGF0ZU1hdHJpeFdv
cmxkOiAoIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgYWRkOiBmdW5jdGlvbiAoIHNoICkgewogCi0g
ICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgdmFy
IHF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpOwotICAgICAgICAgICAgdmFyIHNjYWxlID0g
bmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IDk7IGkgKysg
KSB7CiAKLSAgICAgICAgICAgIHZhciBvcmllbnRhdGlvbiA9IG5ldyBWZWN0b3IzKCk7CisgICAg
ICAgICAgICAgICAgdGhpcy5jb2VmZmljaWVudHNbIGkgXS5hZGQoIHNoLmNvZWZmaWNpZW50c1sg
aSBdICk7CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB1cGRhdGVNYXRyaXhXb3JsZCgg
Zm9yY2UgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBPYmplY3QzRC5wcm90
b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCggdGhpcywgZm9yY2UgKTsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVyID0gdGhpcy5jb250
ZXh0Lmxpc3RlbmVyOwotICAgICAgICAgICAgICAgIHZhciB1cCA9IHRoaXMudXA7CisgICAgICAg
IH0sCiAKLSAgICAgICAgICAgICAgICB0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZSggcG9zaXRp
b24sIHF1YXRlcm5pb24sIHNjYWxlICk7CiAKLSAgICAgICAgICAgICAgICBvcmllbnRhdGlvbi5z
ZXQoIDAsIDAsIC0gMSApLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApOworICAgICAgICBz
Y2FsZTogZnVuY3Rpb24gKCBzICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCBsaXN0ZW5lci5w
b3NpdGlvblggKSB7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCA5OyBpICsrICkg
ewogCi0gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLnBvc2l0aW9uWC5zZXRWYWx1ZUF0VGlt
ZSggcG9zaXRpb24ueCwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lICk7Ci0gICAgICAgICAgICAg
ICAgICAgIGxpc3RlbmVyLnBvc2l0aW9uWS5zZXRWYWx1ZUF0VGltZSggcG9zaXRpb24ueSwgdGhp
cy5jb250ZXh0LmN1cnJlbnRUaW1lICk7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLnBv
c2l0aW9uWi5zZXRWYWx1ZUF0VGltZSggcG9zaXRpb24ueiwgdGhpcy5jb250ZXh0LmN1cnJlbnRU
aW1lICk7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmZvcndhcmRYLnNldFZhbHVlQXRU
aW1lKCBvcmllbnRhdGlvbi54LCB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUgKTsKLSAgICAgICAg
ICAgICAgICAgICAgbGlzdGVuZXIuZm9yd2FyZFkuc2V0VmFsdWVBdFRpbWUoIG9yaWVudGF0aW9u
LnksIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSApOwotICAgICAgICAgICAgICAgICAgICBsaXN0
ZW5lci5mb3J3YXJkWi5zZXRWYWx1ZUF0VGltZSggb3JpZW50YXRpb24ueiwgdGhpcy5jb250ZXh0
LmN1cnJlbnRUaW1lICk7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLnVwWC5zZXRWYWx1
ZUF0VGltZSggdXAueCwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lICk7Ci0gICAgICAgICAgICAg
ICAgICAgIGxpc3RlbmVyLnVwWS5zZXRWYWx1ZUF0VGltZSggdXAueSwgdGhpcy5jb250ZXh0LmN1
cnJlbnRUaW1lICk7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLnVwWi5zZXRWYWx1ZUF0
VGltZSggdXAueiwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lICk7CisgICAgICAgICAgICAgICAg
dGhpcy5jb2VmZmljaWVudHNbIGkgXS5tdWx0aXBseVNjYWxhciggcyApOwogCi0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisKKyAgICAgICAgfSwKKworICAgICAgICBsZXJwOiBmdW5jdGlvbiAoIHNoLCBhbHBoYSApIHsK
KworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgOTsgaSArKyApIHsKKworICAgICAg
ICAgICAgICAgIHRoaXMuY29lZmZpY2llbnRzWyBpIF0ubGVycCggc2guY29lZmZpY2llbnRzWyBp
IF0sIGFscGhhICk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisKKyAgICAgICAgfSwKKworICAgICAgICBlcXVhbHM6IGZ1bmN0aW9uICggc2ggKSB7CisKKyAg
ICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IDk7IGkgKysgKSB7CisKKyAgICAgICAgICAg
ICAgICBpZiAoICEgdGhpcy5jb2VmZmljaWVudHNbIGkgXS5lcXVhbHMoIHNoLmNvZWZmaWNpZW50
c1sgaSBdICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgICAgIH0sCisKKyAgICAgICAgY29weTogZnVuY3Rpb24gKCBzaCApIHsKKworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuc2V0KCBzaC5jb2VmZmljaWVudHMgKTsKKworICAgICAgICB9
LAorCisgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKKworICAgICAgICB9LAorCisgICAg
ICAgIGZyb21BcnJheTogZnVuY3Rpb24gKCBhcnJheSApIHsKKworICAgICAgICAgICAgdmFyIGNv
ZWZmaWNpZW50cyA9IHRoaXMuY29lZmZpY2llbnRzOworCisgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDA7IGkgPCA5OyBpICsrICkgeworCisgICAgICAgICAgICAgICAgY29lZmZpY2llbnRzWyBp
IF0uZnJvbUFycmF5KCBhcnJheSwgaSAqIDMgKTsKKworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKKworICAgICAgICB9LAorCisgICAgICAgIHRvQXJyYXk6IGZ1bmN0
aW9uICgpIHsKKworICAgICAgICAgICAgdmFyIGFycmF5ID0gW107CisgICAgICAgICAgICB2YXIg
Y29lZmZpY2llbnRzID0gdGhpcy5jb2VmZmljaWVudHM7CisKKyAgICAgICAgICAgIGZvciAoIHZh
ciBpID0gMDsgaSA8IDk7IGkgKysgKSB7CisKKyAgICAgICAgICAgICAgICBjb2VmZmljaWVudHNb
IGkgXS50b0FycmF5KCBhcnJheSwgaSAqIDMgKTsKKworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm4gYXJyYXk7CisKKyAgICAgICAgfQorCisgICAgfSApOworCisgICAgT2JqZWN0
LmFzc2lnbiggU3BoZXJpY2FsSGFybW9uaWNzMywgeworCisgICAgICAgIC8vIGV2YWx1YXRlIHRo
ZSBiYXNpcyBmdW5jdGlvbnMKKyAgICAgICAgLy8gc2hCYXNpcyBpcyBhbiBBcnJheVsgOSBdCisg
ICAgICAgIGdldEJhc2lzQXQ6IGZ1bmN0aW9uICggbm9ybWFsLCBzaEJhc2lzICkgeworCisgICAg
ICAgICAgICAvLyBub3JtYWwgaXMgYXNzdW1lZCB0byBiZSB1bml0IGxlbmd0aAorCisgICAgICAg
ICAgICB2YXIgeCA9IG5vcm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejsKKworICAg
ICAgICAgICAgLy8gYmFuZCAwCisgICAgICAgICAgICBzaEJhc2lzWyAwIF0gPSAwLjI4MjA5NTsK
KworICAgICAgICAgICAgLy8gYmFuZCAxCisgICAgICAgICAgICBzaEJhc2lzWyAxIF0gPSAwLjQ4
ODYwMyAqIHk7CisgICAgICAgICAgICBzaEJhc2lzWyAyIF0gPSAwLjQ4ODYwMyAqIHo7CisgICAg
ICAgICAgICBzaEJhc2lzWyAzIF0gPSAwLjQ4ODYwMyAqIHg7CisKKyAgICAgICAgICAgIC8vIGJh
bmQgMgorICAgICAgICAgICAgc2hCYXNpc1sgNCBdID0gMS4wOTI1NDggKiB4ICogeTsKKyAgICAg
ICAgICAgIHNoQmFzaXNbIDUgXSA9IDEuMDkyNTQ4ICogeSAqIHo7CisgICAgICAgICAgICBzaEJh
c2lzWyA2IF0gPSAwLjMxNTM5MiAqICggMyAqIHogKiB6IC0gMSApOworICAgICAgICAgICAgc2hC
YXNpc1sgNyBdID0gMS4wOTI1NDggKiB4ICogejsKKyAgICAgICAgICAgIHNoQmFzaXNbIDggXSA9
IDAuNTQ2Mjc0ICogKCB4ICogeCAtIHkgKiB5ICk7CisKKyAgICAgICAgfQorCisgICAgfSApOwor
CisgICAgLyoqCisgICAgICogQGF1dGhvciBXZXN0TGFuZ2xleSAvIGh0dHA6Ly9naXRodWIuY29t
L1dlc3RMYW5nbGV5CisgICAgICoKKyAgICAgKiBBIExpZ2h0UHJvYmUgaXMgYSBzb3VyY2Ugb2Yg
aW5kaXJlY3QtZGlmZnVzZSBsaWdodAorICAgICAqLworCisgICAgZnVuY3Rpb24gTGlnaHRQcm9i
ZSggc2gsIGludGVuc2l0eSApIHsKKworICAgICAgICBMaWdodC5jYWxsKCB0aGlzLCB1bmRlZmlu
ZWQsIGludGVuc2l0eSApOworCisgICAgICAgIHRoaXMuc2ggPSAoIHNoICE9PSB1bmRlZmluZWQg
KSA/IHNoIDogbmV3IFNwaGVyaWNhbEhhcm1vbmljczMoKTsKKworICAgIH0KKworICAgIExpZ2h0
UHJvYmUucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggTGlnaHQucHJv
dG90eXBlICksIHsKKworICAgICAgICBjb25zdHJ1Y3RvcjogTGlnaHRQcm9iZSwKKworICAgICAg
ICBpc0xpZ2h0UHJvYmU6IHRydWUsCisKKyAgICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2Ug
KSB7CisKKyAgICAgICAgICAgIExpZ2h0LnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJj
ZSApOworCisgICAgICAgICAgICB0aGlzLnNoLmNvcHkoIHNvdXJjZS5zaCApOworICAgICAgICAg
ICAgdGhpcy5pbnRlbnNpdHkgPSBzb3VyY2UuaW50ZW5zaXR5OworCisgICAgICAgICAgICByZXR1
cm4gdGhpczsKKworICAgICAgICB9LAorCisgICAgICAgIHRvSlNPTjogZnVuY3Rpb24gKCBtZXRh
ICkgeworCisgICAgICAgICAgICB2YXIgZGF0YSA9IExpZ2h0LnByb3RvdHlwZS50b0pTT04uY2Fs
bCggdGhpcywgbWV0YSApOworCisgICAgICAgICAgICAvLyBkYXRhLnNoID0gdGhpcy5zaC50b0Fy
cmF5KCk7IC8vIHRvZG8KKworICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisKKyAgICAgICAgfQor
CisgICAgfSApOworCisgICAgLyoqCisgICAgICogQGF1dGhvciBXZXN0TGFuZ2xleSAvIGh0dHA6
Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5CisgICAgICovCisKKyAgICBmdW5jdGlvbiBIZW1pc3Bo
ZXJlTGlnaHRQcm9iZSggc2t5Q29sb3IsIGdyb3VuZENvbG9yLCBpbnRlbnNpdHkgKSB7CisKKyAg
ICAgICAgTGlnaHRQcm9iZS5jYWxsKCB0aGlzLCB1bmRlZmluZWQsIGludGVuc2l0eSApOworCisg
ICAgICAgIHZhciBjb2xvcjEgPSBuZXcgQ29sb3IoKS5zZXQoIHNreUNvbG9yICk7CisgICAgICAg
IHZhciBjb2xvcjIgPSBuZXcgQ29sb3IoKS5zZXQoIGdyb3VuZENvbG9yICk7CisKKyAgICAgICAg
dmFyIHNreSA9IG5ldyBWZWN0b3IzKCBjb2xvcjEuciwgY29sb3IxLmcsIGNvbG9yMS5iICk7Cisg
ICAgICAgIHZhciBncm91bmQgPSBuZXcgVmVjdG9yMyggY29sb3IyLnIsIGNvbG9yMi5nLCBjb2xv
cjIuYiApOworCisgICAgICAgIC8vIHdpdGhvdXQgZXh0cmEgZmFjdG9yIG9mIFBJIGluIHRoZSBz
aGFkZXIsIHNob3VsZCA9IDEgLyBNYXRoLnNxcnQoIE1hdGguUEkgKTsKKyAgICAgICAgdmFyIGMw
ID0gTWF0aC5zcXJ0KCBNYXRoLlBJICk7CisgICAgICAgIHZhciBjMSA9IGMwICogTWF0aC5zcXJ0
KCAwLjc1ICk7CisKKyAgICAgICAgdGhpcy5zaC5jb2VmZmljaWVudHNbIDAgXS5jb3B5KCBza3kg
KS5hZGQoIGdyb3VuZCApLm11bHRpcGx5U2NhbGFyKCBjMCApOworICAgICAgICB0aGlzLnNoLmNv
ZWZmaWNpZW50c1sgMSBdLmNvcHkoIHNreSApLnN1YiggZ3JvdW5kICkubXVsdGlwbHlTY2FsYXIo
IGMxICk7CisKKyAgICB9CisKKyAgICBIZW1pc3BoZXJlTGlnaHRQcm9iZS5wcm90b3R5cGUgPSBP
YmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBMaWdodFByb2JlLnByb3RvdHlwZSApLCB7CisK
KyAgICAgICAgY29uc3RydWN0b3I6IEhlbWlzcGhlcmVMaWdodFByb2JlLAorCisgICAgICAgIGlz
SGVtaXNwaGVyZUxpZ2h0UHJvYmU6IHRydWUsCisKKyAgICAgICAgY29weTogZnVuY3Rpb24gKCBz
b3VyY2UgKSB7IC8vIG1vZGlmeWluZyBjb2xvcnMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQKKwor
ICAgICAgICAgICAgTGlnaHRQcm9iZS5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2Ug
KTsKKworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAgICAgfSwKKworICAgICAgICB0
b0pTT046IGZ1bmN0aW9uICggbWV0YSApIHsKKworICAgICAgICAgICAgdmFyIGRhdGEgPSBMaWdo
dFByb2JlLnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcywgbWV0YSApOworCisgICAgICAgICAg
ICAvLyBkYXRhLnNoID0gdGhpcy5zaC50b0FycmF5KCk7IC8vIHRvZG8KKworICAgICAgICAgICAg
cmV0dXJuIGRhdGE7CisKKyAgICAgICAgfQorCisgICAgfSApOworCisgICAgLyoqCisgICAgICog
QGF1dGhvciBXZXN0TGFuZ2xleSAvIGh0dHA6Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5CisgICAg
ICovCisKKyAgICBmdW5jdGlvbiBBbWJpZW50TGlnaHRQcm9iZSggY29sb3IsIGludGVuc2l0eSAp
IHsKKworICAgICAgICBMaWdodFByb2JlLmNhbGwoIHRoaXMsIHVuZGVmaW5lZCwgaW50ZW5zaXR5
ICk7CisKKyAgICAgICAgdmFyIGNvbG9yMSA9IG5ldyBDb2xvcigpLnNldCggY29sb3IgKTsKKwor
ICAgICAgICAvLyB3aXRob3V0IGV4dHJhIGZhY3RvciBvZiBQSSBpbiB0aGUgc2hhZGVyLCB3b3Vs
ZCBiZSAyIC8gTWF0aC5zcXJ0KCBNYXRoLlBJICk7CisgICAgICAgIHRoaXMuc2guY29lZmZpY2ll
bnRzWyAwIF0uc2V0KCBjb2xvcjEuciwgY29sb3IxLmcsIGNvbG9yMS5iICkubXVsdGlwbHlTY2Fs
YXIoIDIgKiBNYXRoLnNxcnQoIE1hdGguUEkgKSApOworCisgICAgfQorCisgICAgQW1iaWVudExp
Z2h0UHJvYmUucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggTGlnaHRQ
cm9iZS5wcm90b3R5cGUgKSwgeworCisgICAgICAgIGNvbnN0cnVjdG9yOiBBbWJpZW50TGlnaHRQ
cm9iZSwKKworICAgICAgICBpc0FtYmllbnRMaWdodFByb2JlOiB0cnVlLAorCisgICAgICAgIGNv
cHk6IGZ1bmN0aW9uICggc291cmNlICkgeyAvLyBtb2RpZnlpbmcgY29sb3Igbm90IGN1cnJlbnRs
eSBzdXBwb3J0ZWQKKworICAgICAgICAgICAgTGlnaHRQcm9iZS5wcm90b3R5cGUuY29weS5jYWxs
KCB0aGlzLCBzb3VyY2UgKTsKKworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAgICAg
fSwKKworICAgICAgICB0b0pTT046IGZ1bmN0aW9uICggbWV0YSApIHsKKworICAgICAgICAgICAg
dmFyIGRhdGEgPSBMaWdodFByb2JlLnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcywgbWV0YSAp
OworCisgICAgICAgICAgICAvLyBkYXRhLnNoID0gdGhpcy5zaC50b0FycmF5KCk7IC8vIHRvZG8K
KworICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisKKyAgICAgICAgfQorCisgICAgfSApOworCisg
ICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAg
Ki8KKworICAgIGZ1bmN0aW9uIFN0ZXJlb0NhbWVyYSgpIHsKKworICAgICAgICB0aGlzLnR5cGUg
PSAnU3RlcmVvQ2FtZXJhJzsKKworICAgICAgICB0aGlzLmFzcGVjdCA9IDE7CisKKyAgICAgICAg
dGhpcy5leWVTZXAgPSAwLjA2NDsKKworICAgICAgICB0aGlzLmNhbWVyYUwgPSBuZXcgUGVyc3Bl
Y3RpdmVDYW1lcmEoKTsKKyAgICAgICAgdGhpcy5jYW1lcmFMLmxheWVycy5lbmFibGUoIDEgKTsK
KyAgICAgICAgdGhpcy5jYW1lcmFMLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTsKKworICAgICAg
ICB0aGlzLmNhbWVyYVIgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKTsKKyAgICAgICAgdGhpcy5j
YW1lcmFSLmxheWVycy5lbmFibGUoIDIgKTsKKyAgICAgICAgdGhpcy5jYW1lcmFSLm1hdHJpeEF1
dG9VcGRhdGUgPSBmYWxzZTsKKworICAgIH0KKworICAgIE9iamVjdC5hc3NpZ24oIFN0ZXJlb0Nh
bWVyYS5wcm90b3R5cGUsIHsKKworICAgICAgICB1cGRhdGU6ICggZnVuY3Rpb24gKCkgeworCisg
ICAgICAgICAgICB2YXIgaW5zdGFuY2UsIGZvY3VzLCBmb3YsIGFzcGVjdCwgbmVhciwgZmFyLCB6
b29tLCBleWVTZXA7CisKKyAgICAgICAgICAgIHZhciBleWVSaWdodCA9IG5ldyBNYXRyaXg0KCk7
CisgICAgICAgICAgICB2YXIgZXllTGVmdCA9IG5ldyBNYXRyaXg0KCk7CisKKyAgICAgICAgICAg
IHJldHVybiBmdW5jdGlvbiB1cGRhdGUoIGNhbWVyYSApIHsKKworICAgICAgICAgICAgICAgIHZh
ciBuZWVkc1VwZGF0ZSA9IGluc3RhbmNlICE9PSB0aGlzIHx8IGZvY3VzICE9PSBjYW1lcmEuZm9j
dXMgfHwgZm92ICE9PSBjYW1lcmEuZm92IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXNwZWN0ICE9PSBjYW1lcmEuYXNwZWN0ICogdGhpcy5h
c3BlY3QgfHwgbmVhciAhPT0gY2FtZXJhLm5lYXIgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXIgIT09IGNhbWVyYS5mYXIgfHwgem9vbSAh
PT0gY2FtZXJhLnpvb20gfHwgZXllU2VwICE9PSB0aGlzLmV5ZVNlcDsKKworICAgICAgICAgICAg
ICAgIGlmICggbmVlZHNVcGRhdGUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Ug
PSB0aGlzOworICAgICAgICAgICAgICAgICAgICBmb2N1cyA9IGNhbWVyYS5mb2N1czsKKyAgICAg
ICAgICAgICAgICAgICAgZm92ID0gY2FtZXJhLmZvdjsKKyAgICAgICAgICAgICAgICAgICAgYXNw
ZWN0ID0gY2FtZXJhLmFzcGVjdCAqIHRoaXMuYXNwZWN0OworICAgICAgICAgICAgICAgICAgICBu
ZWFyID0gY2FtZXJhLm5lYXI7CisgICAgICAgICAgICAgICAgICAgIGZhciA9IGNhbWVyYS5mYXI7
CisgICAgICAgICAgICAgICAgICAgIHpvb20gPSBjYW1lcmEuem9vbTsKKworICAgICAgICAgICAg
ICAgICAgICAvLyBPZmYtYXhpcyBzdGVyZW9zY29waWMgZWZmZWN0IGJhc2VkIG9uCisgICAgICAg
ICAgICAgICAgICAgIC8vIGh0dHA6Ly9wYXVsYm91cmtlLm5ldC9zdGVyZW9ncmFwaGljcy9zdGVy
ZW9yZW5kZXIvCisKKyAgICAgICAgICAgICAgICAgICAgdmFyIHByb2plY3Rpb25NYXRyaXggPSBj
YW1lcmEucHJvamVjdGlvbk1hdHJpeC5jbG9uZSgpOworICAgICAgICAgICAgICAgICAgICBleWVT
ZXAgPSB0aGlzLmV5ZVNlcCAvIDI7CisgICAgICAgICAgICAgICAgICAgIHZhciBleWVTZXBPblBy
b2plY3Rpb24gPSBleWVTZXAgKiBuZWFyIC8gZm9jdXM7CisgICAgICAgICAgICAgICAgICAgIHZh
ciB5bWF4ID0gKCBuZWFyICogTWF0aC50YW4oIF9NYXRoLkRFRzJSQUQgKiBmb3YgKiAwLjUgKSAp
IC8gem9vbTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHhtaW4sIHhtYXg7CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gdHJhbnNsYXRlIHhPZmZzZXQKKworICAgICAgICAgICAgICAgICAgICBl
eWVMZWZ0LmVsZW1lbnRzWyAxMiBdID0gLSBleWVTZXA7CisgICAgICAgICAgICAgICAgICAgIGV5
ZVJpZ2h0LmVsZW1lbnRzWyAxMiBdID0gZXllU2VwOworCisgICAgICAgICAgICAgICAgICAgIC8v
IGZvciBsZWZ0IGV5ZQorCisgICAgICAgICAgICAgICAgICAgIHhtaW4gPSAtIHltYXggKiBhc3Bl
Y3QgKyBleWVTZXBPblByb2plY3Rpb247CisgICAgICAgICAgICAgICAgICAgIHhtYXggPSB5bWF4
ICogYXNwZWN0ICsgZXllU2VwT25Qcm9qZWN0aW9uOworCisgICAgICAgICAgICAgICAgICAgIHBy
b2plY3Rpb25NYXRyaXguZWxlbWVudHNbIDAgXSA9IDIgKiBuZWFyIC8gKCB4bWF4IC0geG1pbiAp
OworICAgICAgICAgICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWyA4IF0gPSAo
IHhtYXggKyB4bWluICkgLyAoIHhtYXggLSB4bWluICk7CisKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5jYW1lcmFMLnByb2plY3Rpb25NYXRyaXguY29weSggcHJvamVjdGlvbk1hdHJpeCApOwor
CisgICAgICAgICAgICAgICAgICAgIC8vIGZvciByaWdodCBleWUKKworICAgICAgICAgICAgICAg
ICAgICB4bWluID0gLSB5bWF4ICogYXNwZWN0IC0gZXllU2VwT25Qcm9qZWN0aW9uOworICAgICAg
ICAgICAgICAgICAgICB4bWF4ID0geW1heCAqIGFzcGVjdCAtIGV5ZVNlcE9uUHJvamVjdGlvbjsK
KworICAgICAgICAgICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWyAwIF0gPSAy
ICogbmVhciAvICggeG1heCAtIHhtaW4gKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvamVjdGlv
bk1hdHJpeC5lbGVtZW50c1sgOCBdID0gKCB4bWF4ICsgeG1pbiApIC8gKCB4bWF4IC0geG1pbiAp
OworCisgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhUi5wcm9qZWN0aW9uTWF0cml4LmNv
cHkoIHByb2plY3Rpb25NYXRyaXggKTsKKworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIHRoaXMuY2FtZXJhTC5tYXRyaXhXb3JsZC5jb3B5KCBjYW1lcmEubWF0cml4V29ybGQg
KS5tdWx0aXBseSggZXllTGVmdCApOworICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhUi5tYXRy
aXhXb3JsZC5jb3B5KCBjYW1lcmEubWF0cml4V29ybGQgKS5tdWx0aXBseSggZXllUmlnaHQgKTsK
KworICAgICAgICAgICAgfTsKKworICAgICAgICB9ICkoKQorCisgICAgfSApOworCisgICAgLyoq
CisgICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KKyAg
ICAgKi8KKworICAgIGZ1bmN0aW9uIENsb2NrKCBhdXRvU3RhcnQgKSB7CisKKyAgICAgICAgdGhp
cy5hdXRvU3RhcnQgPSAoIGF1dG9TdGFydCAhPT0gdW5kZWZpbmVkICkgPyBhdXRvU3RhcnQgOiB0
cnVlOworCisgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsKKyAgICAgICAgdGhpcy5vbGRUaW1l
ID0gMDsKKyAgICAgICAgdGhpcy5lbGFwc2VkVGltZSA9IDA7CisKKyAgICAgICAgdGhpcy5ydW5u
aW5nID0gZmFsc2U7CisKKyAgICB9CisKKyAgICBPYmplY3QuYXNzaWduKCBDbG9jay5wcm90b3R5
cGUsIHsKKworICAgICAgICBzdGFydDogZnVuY3Rpb24gKCkgeworCisgICAgICAgICAgICB0aGlz
LnN0YXJ0VGltZSA9ICggdHlwZW9mIHBlcmZvcm1hbmNlID09PSAndW5kZWZpbmVkJyA/IERhdGUg
OiBwZXJmb3JtYW5jZSApLm5vdygpOyAvLyBzZWUgIzEwNzMyCisKKyAgICAgICAgICAgIHRoaXMu
b2xkVGltZSA9IHRoaXMuc3RhcnRUaW1lOworICAgICAgICAgICAgdGhpcy5lbGFwc2VkVGltZSA9
IDA7CisgICAgICAgICAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlOworCisgICAgICAgIH0sCisKKyAg
ICAgICAgc3RvcDogZnVuY3Rpb24gKCkgeworCisgICAgICAgICAgICB0aGlzLmdldEVsYXBzZWRU
aW1lKCk7CisgICAgICAgICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIHRo
aXMuYXV0b1N0YXJ0ID0gZmFsc2U7CisKKyAgICAgICAgfSwKKworICAgICAgICBnZXRFbGFwc2Vk
VGltZTogZnVuY3Rpb24gKCkgeworCisgICAgICAgICAgICB0aGlzLmdldERlbHRhKCk7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5lbGFwc2VkVGltZTsKKworICAgICAgICB9LAorCisgICAgICAg
IGdldERlbHRhOiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIHZhciBkaWZmID0gMDsKKwor
ICAgICAgICAgICAgaWYgKCB0aGlzLmF1dG9TdGFydCAmJiAhIHRoaXMucnVubmluZyApIHsKKwor
ICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHRoaXMucnVubmluZyApIHsKKwor
ICAgICAgICAgICAgICAgIHZhciBuZXdUaW1lID0gKCB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICd1
bmRlZmluZWQnID8gRGF0ZSA6IHBlcmZvcm1hbmNlICkubm93KCk7CisKKyAgICAgICAgICAgICAg
ICBkaWZmID0gKCBuZXdUaW1lIC0gdGhpcy5vbGRUaW1lICkgLyAxMDAwOworICAgICAgICAgICAg
ICAgIHRoaXMub2xkVGltZSA9IG5ld1RpbWU7CisKKyAgICAgICAgICAgICAgICB0aGlzLmVsYXBz
ZWRUaW1lICs9IGRpZmY7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGRp
ZmY7CisKKyAgICAgICAgfQorCisgICAgfSApOworCisgICAgLyoqCisgICAgICogQGF1dGhvciBt
cmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKi8KKworICAgIGZ1bmN0aW9uIEF1ZGlv
TGlzdGVuZXIoKSB7CisKKyAgICAgICAgT2JqZWN0M0QuY2FsbCggdGhpcyApOworCisgICAgICAg
IHRoaXMudHlwZSA9ICdBdWRpb0xpc3RlbmVyJzsKKworICAgICAgICB0aGlzLmNvbnRleHQgPSBB
dWRpb0NvbnRleHQuZ2V0Q29udGV4dCgpOworCisgICAgICAgIHRoaXMuZ2FpbiA9IHRoaXMuY29u
dGV4dC5jcmVhdGVHYWluKCk7CisgICAgICAgIHRoaXMuZ2Fpbi5jb25uZWN0KCB0aGlzLmNvbnRl
eHQuZGVzdGluYXRpb24gKTsKKworICAgICAgICB0aGlzLmZpbHRlciA9IG51bGw7CisKKyAgICAg
ICAgdGhpcy50aW1lRGVsdGEgPSAwOworCisgICAgfQorCisgICAgQXVkaW9MaXN0ZW5lci5wcm90
b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBPYmplY3QzRC5wcm90b3R5cGUg
KSwgeworCisgICAgICAgIGNvbnN0cnVjdG9yOiBBdWRpb0xpc3RlbmVyLAorCisgICAgICAgIGdl
dElucHV0OiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmdhaW47CisK
KyAgICAgICAgfSwKKworICAgICAgICByZW1vdmVGaWx0ZXI6IGZ1bmN0aW9uICggKSB7CisKKyAg
ICAgICAgICAgIGlmICggdGhpcy5maWx0ZXIgIT09IG51bGwgKSB7CisKKyAgICAgICAgICAgICAg
ICB0aGlzLmdhaW4uZGlzY29ubmVjdCggdGhpcy5maWx0ZXIgKTsKKyAgICAgICAgICAgICAgICB0
aGlzLmZpbHRlci5kaXNjb25uZWN0KCB0aGlzLmNvbnRleHQuZGVzdGluYXRpb24gKTsKKyAgICAg
ICAgICAgICAgICB0aGlzLmdhaW4uY29ubmVjdCggdGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uICk7
CisgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXIgPSBudWxsOworCisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHJldHVybiB0aGlzOworCisgICAgICAgIH0sCisKKyAgICAgICAgZ2V0Rmls
dGVyOiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlcjsKKwor
ICAgICAgICB9LAorCisgICAgICAgIHNldEZpbHRlcjogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKwor
ICAgICAgICAgICAgaWYgKCB0aGlzLmZpbHRlciAhPT0gbnVsbCApIHsKKworICAgICAgICAgICAg
ICAgIHRoaXMuZ2Fpbi5kaXNjb25uZWN0KCB0aGlzLmZpbHRlciApOworICAgICAgICAgICAgICAg
IHRoaXMuZmlsdGVyLmRpc2Nvbm5lY3QoIHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiApOworCisg
ICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgdGhpcy5nYWluLmRpc2Nvbm5l
Y3QoIHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiApOworCisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHRoaXMuZmlsdGVyID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLmdhaW4uY29ubmVj
dCggdGhpcy5maWx0ZXIgKTsKKyAgICAgICAgICAgIHRoaXMuZmlsdGVyLmNvbm5lY3QoIHRoaXMu
Y29udGV4dC5kZXN0aW5hdGlvbiApOworCisgICAgICAgICAgICByZXR1cm4gdGhpczsKKworICAg
ICAgICB9LAorCisgICAgICAgIGdldE1hc3RlclZvbHVtZTogZnVuY3Rpb24gKCkgeworCisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWU7CisKKyAgICAgICAgfSwKKworICAg
ICAgICBzZXRNYXN0ZXJWb2x1bWU6IGZ1bmN0aW9uICggdmFsdWUgKSB7CisKKyAgICAgICAgICAg
IHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSggdmFsdWUsIHRoaXMuY29udGV4dC5jdXJy
ZW50VGltZSwgMC4wMSApOworCisgICAgICAgICAgICByZXR1cm4gdGhpczsKKworICAgICAgICB9
LAorCisgICAgICAgIHVwZGF0ZU1hdHJpeFdvcmxkOiAoIGZ1bmN0aW9uICgpIHsKKworICAgICAg
ICAgICAgdmFyIHBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciBxdWF0
ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTsKKyAgICAgICAgICAgIHZhciBzY2FsZSA9IG5ldyBW
ZWN0b3IzKCk7CisKKyAgICAgICAgICAgIHZhciBvcmllbnRhdGlvbiA9IG5ldyBWZWN0b3IzKCk7
CisgICAgICAgICAgICB2YXIgY2xvY2sgPSBuZXcgQ2xvY2soKTsKKworICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uIHVwZGF0ZU1hdHJpeFdvcmxkKCBmb3JjZSApIHsKKworICAgICAgICAgICAg
ICAgIE9iamVjdDNELnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxsKCB0aGlzLCBmb3Jj
ZSApOworCisgICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVyID0gdGhpcy5jb250ZXh0Lmxpc3Rl
bmVyOworICAgICAgICAgICAgICAgIHZhciB1cCA9IHRoaXMudXA7CisKKyAgICAgICAgICAgICAg
ICB0aGlzLnRpbWVEZWx0YSA9IGNsb2NrLmdldERlbHRhKCk7CisKKyAgICAgICAgICAgICAgICB0
aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZSggcG9zaXRpb24sIHF1YXRlcm5pb24sIHNjYWxlICk7
CisKKyAgICAgICAgICAgICAgICBvcmllbnRhdGlvbi5zZXQoIDAsIDAsIC0gMSApLmFwcGx5UXVh
dGVybmlvbiggcXVhdGVybmlvbiApOworCisgICAgICAgICAgICAgICAgaWYgKCBsaXN0ZW5lci5w
b3NpdGlvblggKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gY29kZSBwYXRoIGZvciBDaHJv
bWUgKHNlZSAjMTQzOTMpCisKKyAgICAgICAgICAgICAgICAgICAgdmFyIGVuZFRpbWUgPSB0aGlz
LmNvbnRleHQuY3VycmVudFRpbWUgKyB0aGlzLnRpbWVEZWx0YTsKKworICAgICAgICAgICAgICAg
ICAgICBsaXN0ZW5lci5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoIHBvc2l0aW9u
LngsIGVuZFRpbWUgKTsKKyAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIucG9zaXRpb25ZLmxp
bmVhclJhbXBUb1ZhbHVlQXRUaW1lKCBwb3NpdGlvbi55LCBlbmRUaW1lICk7CisgICAgICAgICAg
ICAgICAgICAgIGxpc3RlbmVyLnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSggcG9z
aXRpb24ueiwgZW5kVGltZSApOworICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5mb3J3YXJk
WC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSggb3JpZW50YXRpb24ueCwgZW5kVGltZSApOworICAg
ICAgICAgICAgICAgICAgICBsaXN0ZW5lci5mb3J3YXJkWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGlt
ZSggb3JpZW50YXRpb24ueSwgZW5kVGltZSApOworICAgICAgICAgICAgICAgICAgICBsaXN0ZW5l
ci5mb3J3YXJkWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSggb3JpZW50YXRpb24ueiwgZW5kVGlt
ZSApOworICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci51cFgubGluZWFyUmFtcFRvVmFsdWVB
dFRpbWUoIHVwLngsIGVuZFRpbWUgKTsKKyAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIudXBZ
LmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKCB1cC55LCBlbmRUaW1lICk7CisgICAgICAgICAgICAg
ICAgICAgIGxpc3RlbmVyLnVwWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSggdXAueiwgZW5kVGlt
ZSApOworCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAogICAgICAgICAgICAgICAgICAgICBs
aXN0ZW5lci5zZXRQb3NpdGlvbiggcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueiAp
OwogICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5zZXRPcmllbnRhdGlvbiggb3JpZW50YXRp
b24ueCwgb3JpZW50YXRpb24ueSwgb3JpZW50YXRpb24ueiwgdXAueCwgdXAueSwgdXAueiApOwpA
QCAtMzk2MDAsNiArNDEyMzYsNyBAQAogCiAgICAgICAgIHRoaXMudHlwZSA9ICdBdWRpbyc7CiAK
KyAgICAgICAgdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOwogICAgICAgICB0aGlzLmNvbnRleHQg
PSBsaXN0ZW5lci5jb250ZXh0OwogCiAgICAgICAgIHRoaXMuZ2FpbiA9IHRoaXMuY29udGV4dC5j
cmVhdGVHYWluKCk7CkBAIC0zOTYwOCw2ICs0MTI0NSw3IEBACiAgICAgICAgIHRoaXMuYXV0b3Bs
YXkgPSBmYWxzZTsKIAogICAgICAgICB0aGlzLmJ1ZmZlciA9IG51bGw7CisgICAgICAgIHRoaXMu
ZGV0dW5lID0gMDsKICAgICAgICAgdGhpcy5sb29wID0gZmFsc2U7CiAgICAgICAgIHRoaXMuc3Rh
cnRUaW1lID0gMDsKICAgICAgICAgdGhpcy5vZmZzZXQgPSAwOwpAQCAtMzk2ODQsNyArNDEzMjIs
NiBAQAogICAgICAgICAgICAgc291cmNlLmJ1ZmZlciA9IHRoaXMuYnVmZmVyOwogICAgICAgICAg
ICAgc291cmNlLmxvb3AgPSB0aGlzLmxvb3A7CiAgICAgICAgICAgICBzb3VyY2Uub25lbmRlZCA9
IHRoaXMub25FbmRlZC5iaW5kKCB0aGlzICk7Ci0gICAgICAgICAgICBzb3VyY2UucGxheWJhY2tS
YXRlLnNldFZhbHVlQXRUaW1lKCB0aGlzLnBsYXliYWNrUmF0ZSwgdGhpcy5zdGFydFRpbWUgKTsK
ICAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lOwog
ICAgICAgICAgICAgc291cmNlLnN0YXJ0KCB0aGlzLnN0YXJ0VGltZSwgdGhpcy5vZmZzZXQgKTsK
IApAQCAtMzk2OTIsNiArNDEzMjksOSBAQAogCiAgICAgICAgICAgICB0aGlzLnNvdXJjZSA9IHNv
dXJjZTsKIAorICAgICAgICAgICAgdGhpcy5zZXREZXR1bmUoIHRoaXMuZGV0dW5lICk7CisgICAg
ICAgICAgICB0aGlzLnNldFBsYXliYWNrUmF0ZSggdGhpcy5wbGF5YmFja1JhdGUgKTsKKwogICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdCgpOwogCiAgICAgICAgIH0sCkBAIC0zOTcwOCw2
ICs0MTM0OCw3IEBACiAgICAgICAgICAgICBpZiAoIHRoaXMuaXNQbGF5aW5nID09PSB0cnVlICkg
ewogCiAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2Uuc3RvcCgpOworICAgICAgICAgICAgICAg
IHRoaXMuc291cmNlLm9uZW5kZWQgPSBudWxsOwogICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0
ICs9ICggdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lIC0gdGhpcy5zdGFydFRpbWUgKSAqIHRoaXMu
cGxheWJhY2tSYXRlOwogICAgICAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7CiAK
QEAgLTM5NzI3LDYgKzQxMzY4LDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdGhp
cy5zb3VyY2Uuc3RvcCgpOworICAgICAgICAgICAgdGhpcy5zb3VyY2Uub25lbmRlZCA9IG51bGw7
CiAgICAgICAgICAgICB0aGlzLm9mZnNldCA9IDA7CiAgICAgICAgICAgICB0aGlzLmlzUGxheWlu
ZyA9IGZhbHNlOwogCkBAIC0zOTgwOCw2ICs0MTQ1MCwyOCBAQAogCiAgICAgICAgIH0sCiAKKyAg
ICAgICAgc2V0RGV0dW5lOiBmdW5jdGlvbiAoIHZhbHVlICkgeworCisgICAgICAgICAgICB0aGlz
LmRldHVuZSA9IHZhbHVlOworCisgICAgICAgICAgICBpZiAoIHRoaXMuc291cmNlLmRldHVuZSA9
PT0gdW5kZWZpbmVkICkgcmV0dXJuOyAvLyBvbmx5IHNldCBkZXR1bmUgd2hlbiBhdmFpbGFibGUK
KworICAgICAgICAgICAgaWYgKCB0aGlzLmlzUGxheWluZyA9PT0gdHJ1ZSApIHsKKworICAgICAg
ICAgICAgICAgIHRoaXMuc291cmNlLmRldHVuZS5zZXRUYXJnZXRBdFRpbWUoIHRoaXMuZGV0dW5l
LCB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsIDAuMDEgKTsKKworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm4gdGhpczsKKworICAgICAgICB9LAorCisgICAgICAgIGdldERldHVu
ZTogZnVuY3Rpb24gKCkgeworCisgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXR1bmU7CisKKyAg
ICAgICAgfSwKKwogICAgICAgICBnZXRGaWx0ZXI6IGZ1bmN0aW9uICgpIHsKIAogICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZ2V0RmlsdGVycygpWyAwIF07CkBAIC0zOTgzMyw3ICs0MTQ5Nyw3IEBA
CiAKICAgICAgICAgICAgIGlmICggdGhpcy5pc1BsYXlpbmcgPT09IHRydWUgKSB7CiAKLSAgICAg
ICAgICAgICAgICB0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VmFsdWVBdFRpbWUoIHRoaXMu
cGxheWJhY2tSYXRlLCB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUgKTsKKyAgICAgICAgICAgICAg
ICB0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VGFyZ2V0QXRUaW1lKCB0aGlzLnBsYXliYWNr
UmF0ZSwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLCAwLjAxICk7CiAKICAgICAgICAgICAgIH0K
IApAQCAtMzk5MTIsNiArNDE1NzYsNyBAQAogICAgICAgICBBdWRpby5jYWxsKCB0aGlzLCBsaXN0
ZW5lciApOwogCiAgICAgICAgIHRoaXMucGFubmVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZVBhbm5l
cigpOworICAgICAgICB0aGlzLnBhbm5lci5wYW5uaW5nTW9kZWwgPSAnSFJURic7CiAgICAgICAg
IHRoaXMucGFubmVyLmNvbm5lY3QoIHRoaXMuZ2FpbiApOwogCiAgICAgfQpAQCAtNDAwMDQsMTMg
KzQxNjY5LDMzIEBACiAKICAgICAgICAgICAgICAgICBPYmplY3QzRC5wcm90b3R5cGUudXBkYXRl
TWF0cml4V29ybGQuY2FsbCggdGhpcywgZm9yY2UgKTsKIAotICAgICAgICAgICAgICAgIHZhciBw
YW5uZXIgPSB0aGlzLnBhbm5lcjsKKyAgICAgICAgICAgICAgICBpZiAoIHRoaXMuaGFzUGxheWJh
Y2tDb250cm9sID09PSB0cnVlICYmIHRoaXMuaXNQbGF5aW5nID09PSBmYWxzZSApIHJldHVybjsK
KwogICAgICAgICAgICAgICAgIHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKCBwb3NpdGlvbiwg
cXVhdGVybmlvbiwgc2NhbGUgKTsKIAogICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uLnNldCgg
MCwgMCwgMSApLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApOwogCi0gICAgICAgICAgICAg
ICAgcGFubmVyLnNldFBvc2l0aW9uKCBwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56
ICk7Ci0gICAgICAgICAgICAgICAgcGFubmVyLnNldE9yaWVudGF0aW9uKCBvcmllbnRhdGlvbi54
LCBvcmllbnRhdGlvbi55LCBvcmllbnRhdGlvbi56ICk7CisgICAgICAgICAgICAgICAgdmFyIHBh
bm5lciA9IHRoaXMucGFubmVyOworCisgICAgICAgICAgICAgICAgaWYgKCBwYW5uZXIucG9zaXRp
b25YICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIGNvZGUgcGF0aCBmb3IgQ2hyb21lIGFu
ZCBGaXJlZm94IChzZWUgIzE0MzkzKQorCisgICAgICAgICAgICAgICAgICAgIHZhciBlbmRUaW1l
ID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lICsgdGhpcy5saXN0ZW5lci50aW1lRGVsdGE7CisK
KyAgICAgICAgICAgICAgICAgICAgcGFubmVyLnBvc2l0aW9uWC5saW5lYXJSYW1wVG9WYWx1ZUF0
VGltZSggcG9zaXRpb24ueCwgZW5kVGltZSApOworICAgICAgICAgICAgICAgICAgICBwYW5uZXIu
cG9zaXRpb25ZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKCBwb3NpdGlvbi55LCBlbmRUaW1lICk7
CisgICAgICAgICAgICAgICAgICAgIHBhbm5lci5wb3NpdGlvbloubGluZWFyUmFtcFRvVmFsdWVB
dFRpbWUoIHBvc2l0aW9uLnosIGVuZFRpbWUgKTsKKyAgICAgICAgICAgICAgICAgICAgcGFubmVy
Lm9yaWVudGF0aW9uWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSggb3JpZW50YXRpb24ueCwgZW5k
VGltZSApOworICAgICAgICAgICAgICAgICAgICBwYW5uZXIub3JpZW50YXRpb25ZLmxpbmVhclJh
bXBUb1ZhbHVlQXRUaW1lKCBvcmllbnRhdGlvbi55LCBlbmRUaW1lICk7CisgICAgICAgICAgICAg
ICAgICAgIHBhbm5lci5vcmllbnRhdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoIG9yaWVu
dGF0aW9uLnosIGVuZFRpbWUgKTsKKworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgcGFubmVyLnNldFBvc2l0aW9uKCBwb3NpdGlvbi54LCBwb3NpdGlvbi55
LCBwb3NpdGlvbi56ICk7CisgICAgICAgICAgICAgICAgICAgIHBhbm5lci5zZXRPcmllbnRhdGlv
biggb3JpZW50YXRpb24ueCwgb3JpZW50YXRpb24ueSwgb3JpZW50YXRpb24ueiApOworCisgICAg
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB9OwogCkBAIC00MDMwNSw4ICs0MTk5MCw3IEBA
CiAKICAgICAgICAgICAgIHZhciBiaW5kaW5ncyA9IHRoaXMuX2JpbmRpbmdzOwogCi0gICAgICAg
ICAgICBmb3IgKCB2YXIgaSA9IHRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXywKLSAg
ICAgICAgICAgICAgICAgICAgICBuID0gYmluZGluZ3MubGVuZ3RoOyBpICE9PSBuOyArKyBpICkg
eworICAgICAgICAgICAgZm9yICggdmFyIGkgPSB0aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2Jq
ZWN0c18sIG4gPSBiaW5kaW5ncy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7CiAKICAgICAgICAg
ICAgICAgICBiaW5kaW5nc1sgaSBdLnNldFZhbHVlKCBhcnJheSwgb2Zmc2V0ICk7CiAKQEAgLTQw
MzE4LDggKzQyMDAyLDcgQEAKIAogICAgICAgICAgICAgdmFyIGJpbmRpbmdzID0gdGhpcy5fYmlu
ZGluZ3M7CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gdGhpcy5fdGFyZ2V0R3JvdXAubkNh
Y2hlZE9iamVjdHNfLAotICAgICAgICAgICAgICAgICAgICAgIG4gPSBiaW5kaW5ncy5sZW5ndGg7
IGkgIT09IG47ICsrIGkgKSB7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IHRoaXMuX3Rhcmdl
dEdyb3VwLm5DYWNoZWRPYmplY3RzXywgbiA9IGJpbmRpbmdzLmxlbmd0aDsgaSAhPT0gbjsgKysg
aSApIHsKIAogICAgICAgICAgICAgICAgIGJpbmRpbmdzWyBpIF0uYmluZCgpOwogCkBAIC00MDMz
MSw4ICs0MjAxNCw3IEBACiAKICAgICAgICAgICAgIHZhciBiaW5kaW5ncyA9IHRoaXMuX2JpbmRp
bmdzOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IHRoaXMuX3RhcmdldEdyb3VwLm5DYWNo
ZWRPYmplY3RzXywKLSAgICAgICAgICAgICAgICAgICAgICBuID0gYmluZGluZ3MubGVuZ3RoOyBp
ICE9PSBuOyArKyBpICkgeworICAgICAgICAgICAgZm9yICggdmFyIGkgPSB0aGlzLl90YXJnZXRH
cm91cC5uQ2FjaGVkT2JqZWN0c18sIG4gPSBiaW5kaW5ncy5sZW5ndGg7IGkgIT09IG47ICsrIGkg
KSB7CiAKICAgICAgICAgICAgICAgICBiaW5kaW5nc1sgaSBdLnVuYmluZCgpOwogCkBAIC00MDM3
Niw3ICs0MjA1OCw3IEBACiAgICAgICAgICAqIFJlcGxhY2VzIHNwYWNlcyB3aXRoIHVuZGVyc2Nv
cmVzIGFuZCByZW1vdmVzIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMgZnJvbQogICAgICAgICAgKiBu
b2RlIG5hbWVzLCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIHBhcnNlVHJhY2tOYW1lKCku
CiAgICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZSBOb2RlIG5hbWUg
dG8gYmUgc2FuaXRpemVkLgorICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOb2RlIG5h
bWUgdG8gYmUgc2FuaXRpemVkLgogICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICAgICAg
ICAqLwogICAgICAgICBzYW5pdGl6ZU5vZGVOYW1lOiAoIGZ1bmN0aW9uICgpIHsKQEAgLTQwODYx
LDE1ICs0MjU0MywxNSBAQAogICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHZlcnNpb25pbmcgc2No
ZW1lCiAgICAgICAgICAgICB2YXIgdmVyc2lvbmluZyA9IHRoaXMuVmVyc2lvbmluZy5Ob25lOwog
CisgICAgICAgICAgICB0aGlzLnRhcmdldE9iamVjdCA9IHRhcmdldE9iamVjdDsKKwogICAgICAg
ICAgICAgaWYgKCB0YXJnZXRPYmplY3QubmVlZHNVcGRhdGUgIT09IHVuZGVmaW5lZCApIHsgLy8g
bWF0ZXJpYWwKIAogICAgICAgICAgICAgICAgIHZlcnNpb25pbmcgPSB0aGlzLlZlcnNpb25pbmcu
TmVlZHNVcGRhdGU7Ci0gICAgICAgICAgICAgICAgdGhpcy50YXJnZXRPYmplY3QgPSB0YXJnZXRP
YmplY3Q7CiAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHRhcmdldE9iamVjdC5tYXRyaXhXb3Js
ZE5lZWRzVXBkYXRlICE9PSB1bmRlZmluZWQgKSB7IC8vIG5vZGUgdHJhbnNmb3JtCiAKICAgICAg
ICAgICAgICAgICB2ZXJzaW9uaW5nID0gdGhpcy5WZXJzaW9uaW5nLk1hdHJpeFdvcmxkTmVlZHNV
cGRhdGU7Ci0gICAgICAgICAgICAgICAgdGhpcy50YXJnZXRPYmplY3QgPSB0YXJnZXRPYmplY3Q7
CiAKICAgICAgICAgICAgIH0KIApAQCAtNDA5OTYsMjcgKzQyNjc4LDI3IEBACiAgICAgICoKICAg
ICAgKiBVc2FnZToKICAgICAgKgotICAgICAqICAtICAgQWRkIG9iamVjdHMgeW91IHdvdWxkIG90
aGVyd2lzZSBwYXNzIGFzICdyb290JyB0byB0aGUKLSAgICAgKiAgICAgIGNvbnN0cnVjdG9yIG9y
IHRoZSAuY2xpcEFjdGlvbiBtZXRob2Qgb2YgQW5pbWF0aW9uTWl4ZXIuCisgICAgICogIC0gQWRk
IG9iamVjdHMgeW91IHdvdWxkIG90aGVyd2lzZSBwYXNzIGFzICdyb290JyB0byB0aGUKKyAgICAg
KiAgICBjb25zdHJ1Y3RvciBvciB0aGUgLmNsaXBBY3Rpb24gbWV0aG9kIG9mIEFuaW1hdGlvbk1p
eGVyLgogICAgICAqCi0gICAgICogIC0gICBJbnN0ZWFkIHBhc3MgdGhpcyBvYmplY3QgYXMgJ3Jv
b3QnLgorICAgICAqICAtIEluc3RlYWQgcGFzcyB0aGlzIG9iamVjdCBhcyAncm9vdCcuCiAgICAg
ICoKLSAgICAgKiAgLSAgIFlvdSBjYW4gYWxzbyBhZGQgYW5kIHJlbW92ZSBvYmplY3RzIGxhdGVy
IHdoZW4gdGhlIG1peGVyCi0gICAgICogICAgICBpcyBydW5uaW5nLgorICAgICAqICAtIFlvdSBj
YW4gYWxzbyBhZGQgYW5kIHJlbW92ZSBvYmplY3RzIGxhdGVyIHdoZW4gdGhlIG1peGVyCisgICAg
ICogICAgaXMgcnVubmluZy4KICAgICAgKgogICAgICAqIE5vdGU6CiAgICAgICoKLSAgICAgKiAg
ICAgIE9iamVjdHMgb2YgdGhpcyBjbGFzcyBhcHBlYXIgYXMgb25lIG9iamVjdCB0byB0aGUgbWl4
ZXIsCi0gICAgICogICAgICBzbyBjYWNoZSBjb250cm9sIG9mIHRoZSBpbmRpdmlkdWFsIG9iamVj
dHMgbXVzdCBiZSBkb25lCi0gICAgICogICAgICBvbiB0aGUgZ3JvdXAuCisgICAgICogICAgT2Jq
ZWN0cyBvZiB0aGlzIGNsYXNzIGFwcGVhciBhcyBvbmUgb2JqZWN0IHRvIHRoZSBtaXhlciwKKyAg
ICAgKiAgICBzbyBjYWNoZSBjb250cm9sIG9mIHRoZSBpbmRpdmlkdWFsIG9iamVjdHMgbXVzdCBi
ZSBkb25lCisgICAgICogICAgb24gdGhlIGdyb3VwLgogICAgICAqCiAgICAgICogTGltaXRhdGlv
bjoKICAgICAgKgotICAgICAqICAtICAgVGhlIGFuaW1hdGVkIHByb3BlcnRpZXMgbXVzdCBiZSBj
b21wYXRpYmxlIGFtb25nIHRoZQotICAgICAqICAgICAgYWxsIG9iamVjdHMgaW4gdGhlIGdyb3Vw
LgorICAgICAqICAtIFRoZSBhbmltYXRlZCBwcm9wZXJ0aWVzIG11c3QgYmUgY29tcGF0aWJsZSBh
bW9uZyB0aGUKKyAgICAgKiAgICBhbGwgb2JqZWN0cyBpbiB0aGUgZ3JvdXAuCiAgICAgICoKLSAg
ICAgKiAgLSAgIEEgc2luZ2xlIHByb3BlcnR5IGNhbiBlaXRoZXIgYmUgY29udHJvbGxlZCB0aHJv
dWdoIGEKLSAgICAgKiAgICAgIHRhcmdldCBncm91cCBvciBkaXJlY3RseSwgYnV0IG5vdCBib3Ro
LgorICAgICAqICAtIEEgc2luZ2xlIHByb3BlcnR5IGNhbiBlaXRoZXIgYmUgY29udHJvbGxlZCB0
aHJvdWdoIGEKKyAgICAgKiAgICB0YXJnZXQgZ3JvdXAgb3IgZGlyZWN0bHksIGJ1dCBub3QgYm90
aC4KICAgICAgKgogICAgICAqIEBhdXRob3IgdHNjaHcKICAgICAgKi8KQEAgLTQxMDI4LDExICs0
MjcxMCwxMSBAQAogICAgICAgICAvLyBjYWNoZWQgb2JqZWN0cyBmb2xsb3dlZCBieSB0aGUgYWN0
aXZlIG9uZXMKICAgICAgICAgdGhpcy5fb2JqZWN0cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5j
YWxsKCBhcmd1bWVudHMgKTsKIAotICAgICAgICB0aGlzLm5DYWNoZWRPYmplY3RzXyA9IDA7ICAg
ICAgICAgICAvLyB0aHJlc2hvbGQKKyAgICAgICAgdGhpcy5uQ2FjaGVkT2JqZWN0c18gPSAwOyAv
LyB0aHJlc2hvbGQKICAgICAgICAgLy8gbm90ZTogcmVhZCBieSBQcm9wZXJ0eUJpbmRpbmcuQ29t
cG9zaXRlCiAKICAgICAgICAgdmFyIGluZGljZXMgPSB7fTsKLSAgICAgICAgdGhpcy5faW5kaWNl
c0J5VVVJRCA9IGluZGljZXM7ICAgICAgLy8gZm9yIGJvb2trZWVwaW5nCisgICAgICAgIHRoaXMu
X2luZGljZXNCeVVVSUQgPSBpbmRpY2VzOyAvLyBmb3IgYm9va2tlZXBpbmcKIAogICAgICAgICBm
b3IgKCB2YXIgaSA9IDAsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpICE9PSBuOyArKyBpICkgewog
CkBAIC00MTA0MCwxMCArNDI3MjIsMTAgQEAKIAogICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5f
cGF0aHMgPSBbXTsgICAgICAgICAgICAgICAgICAgLy8gaW5zaWRlOiBzdHJpbmcKLSAgICAgICAg
dGhpcy5fcGFyc2VkUGF0aHMgPSBbXTsgICAgICAgICAgICAgLy8gaW5zaWRlOiB7IHdlIGRvbid0
IGNhcmUsIGhlcmUgfQotICAgICAgICB0aGlzLl9iaW5kaW5ncyA9IFtdOyAgICAgICAgICAgICAg
ICAvLyBpbnNpZGU6IEFycmF5PCBQcm9wZXJ0eUJpbmRpbmcgPgotICAgICAgICB0aGlzLl9iaW5k
aW5nc0luZGljZXNCeVBhdGggPSB7fTsgICAvLyBpbnNpZGU6IGluZGljZXMgaW4gdGhlc2UgYXJy
YXlzCisgICAgICAgIHRoaXMuX3BhdGhzID0gW107IC8vIGluc2lkZTogc3RyaW5nCisgICAgICAg
IHRoaXMuX3BhcnNlZFBhdGhzID0gW107IC8vIGluc2lkZTogeyB3ZSBkb24ndCBjYXJlLCBoZXJl
IH0KKyAgICAgICAgdGhpcy5fYmluZGluZ3MgPSBbXTsgLy8gaW5zaWRlOiBBcnJheTwgUHJvcGVy
dHlCaW5kaW5nID4KKyAgICAgICAgdGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoID0ge307IC8v
IGluc2lkZTogaW5kaWNlcyBpbiB0aGVzZSBhcnJheXMKIAogICAgICAgICB2YXIgc2NvcGUgPSB0
aGlzOwogCkBAIC00MTE1MSw3ICs0MjgzMyw3IEBACiAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICggb2JqZWN0c1sgaW5kZXggXSAhPT0ga25vd25PYmplY3QgKSB7CiAKICAgICAgICAgICAgICAg
ICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLkFuaW1hdGlvbk9iamVjdEdyb3VwOiBEaWZmZXJl
bnQgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIFVVSUQgJyArCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ2RldGVjdGVkLiBDbGVhbiB0aGUgY2FjaGVzIG9yIHJlY3JlYXRlIHlvdXIgaW5mcmFz
dHJ1Y3R1cmUgd2hlbiByZWxvYWRpbmcgc2NlbmVzLicgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICdkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3Ry
dWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4nICk7CiAKICAgICAgICAgICAgICAgICB9IC8v
IGVsc2UgdGhlIG9iamVjdCBpcyBhbHJlYWR5IHdoZXJlIHdlIHdhbnQgaXQgdG8gYmUKIApAQCAt
NDE0MDIsMTMgKzQzMDg0LDEzIEBACiAKICAgICAgICAgdGhpcy5faW50ZXJwb2xhbnRTZXR0aW5n
cyA9IGludGVycG9sYW50U2V0dGluZ3M7CiAKLSAgICAgICAgdGhpcy5faW50ZXJwb2xhbnRzID0g
aW50ZXJwb2xhbnRzOyAgLy8gYm91bmQgYnkgdGhlIG1peGVyCisgICAgICAgIHRoaXMuX2ludGVy
cG9sYW50cyA9IGludGVycG9sYW50czsgLy8gYm91bmQgYnkgdGhlIG1peGVyCiAKICAgICAgICAg
Ly8gaW5zaWRlOiBQcm9wZXJ0eU1peGVyIChtYW5hZ2VkIGJ5IHRoZSBtaXhlcikKICAgICAgICAg
dGhpcy5fcHJvcGVydHlCaW5kaW5ncyA9IG5ldyBBcnJheSggblRyYWNrcyApOwogCi0gICAgICAg
IHRoaXMuX2NhY2hlSW5kZXggPSBudWxsOyAgICAgICAgICAgIC8vIGZvciB0aGUgbWVtb3J5IG1h
bmFnZXIKLSAgICAgICAgdGhpcy5fYnlDbGlwQ2FjaGVJbmRleCA9IG51bGw7ICAgICAgLy8gZm9y
IHRoZSBtZW1vcnkgbWFuYWdlcgorICAgICAgICB0aGlzLl9jYWNoZUluZGV4ID0gbnVsbDsgLy8g
Zm9yIHRoZSBtZW1vcnkgbWFuYWdlcgorICAgICAgICB0aGlzLl9ieUNsaXBDYWNoZUluZGV4ID0g
bnVsbDsgLy8gZm9yIHRoZSBtZW1vcnkgbWFuYWdlcgogCiAgICAgICAgIHRoaXMuX3RpbWVTY2Fs
ZUludGVycG9sYW50ID0gbnVsbDsKICAgICAgICAgdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQgPSBu
dWxsOwpAQCAtNDE0MzAsMTUgKzQzMTEyLDE1IEBACiAgICAgICAgIHRoaXMud2VpZ2h0ID0gMTsK
ICAgICAgICAgdGhpcy5fZWZmZWN0aXZlV2VpZ2h0ID0gMTsKIAotICAgICAgICB0aGlzLnJlcGV0
aXRpb25zID0gSW5maW5pdHk7ICAgICAgICAvLyBuby4gb2YgcmVwZXRpdGlvbnMgd2hlbiBsb29w
aW5nCisgICAgICAgIHRoaXMucmVwZXRpdGlvbnMgPSBJbmZpbml0eTsgLy8gbm8uIG9mIHJlcGV0
aXRpb25zIHdoZW4gbG9vcGluZwogCi0gICAgICAgIHRoaXMucGF1c2VkID0gZmFsc2U7ICAgICAg
ICAgICAgICAgIC8vIHRydWUgLT4gemVybyBlZmZlY3RpdmUgdGltZSBzY2FsZQotICAgICAgICB0
aGlzLmVuYWJsZWQgPSB0cnVlOyAgICAgICAgICAgICAgICAvLyBmYWxzZSAtPiB6ZXJvIGVmZmVj
dGl2ZSB3ZWlnaHQKKyAgICAgICAgdGhpcy5wYXVzZWQgPSBmYWxzZTsgLy8gdHJ1ZSAtPiB6ZXJv
IGVmZmVjdGl2ZSB0aW1lIHNjYWxlCisgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7IC8vIGZh
bHNlIC0+IHplcm8gZWZmZWN0aXZlIHdlaWdodAogCi0gICAgICAgIHRoaXMuY2xhbXBXaGVuRmlu
aXNoZWQgID0gZmFsc2U7ICAgIC8vIGtlZXAgZmVlZGluZyB0aGUgbGFzdCBmcmFtZT8KKyAgICAg
ICAgdGhpcy5jbGFtcFdoZW5GaW5pc2hlZCA9IGZhbHNlOy8vIGtlZXAgZmVlZGluZyB0aGUgbGFz
dCBmcmFtZT8KIAotICAgICAgICB0aGlzLnplcm9TbG9wZUF0U3RhcnQgICA9IHRydWU7ICAgICAv
LyBmb3Igc21vb3RoIGludGVycG9sYXRpb24gdy9vIHNlcGFyYXRlCi0gICAgICAgIHRoaXMuemVy
b1Nsb3BlQXRFbmQgICAgID0gdHJ1ZTsgICAgIC8vIGNsaXBzIGZvciBzdGFydCwgbG9vcCBhbmQg
ZW5kCisgICAgICAgIHRoaXMuemVyb1Nsb3BlQXRTdGFydCA9IHRydWU7Ly8gZm9yIHNtb290aCBp
bnRlcnBvbGF0aW9uIHcvbyBzZXBhcmF0ZQorICAgICAgICB0aGlzLnplcm9TbG9wZUF0RW5kID0g
dHJ1ZTsvLyBjbGlwcyBmb3Igc3RhcnQsIGxvb3AgYW5kIGVuZAogCiAgICAgfQogCkBAIC00MTQ2
Nyw5ICs0MzE0OSw5IEBACiAgICAgICAgICAgICB0aGlzLnBhdXNlZCA9IGZhbHNlOwogICAgICAg
ICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTsKIAotICAgICAgICAgICAgdGhpcy50aW1lID0gMDsg
ICAgICAgICAgLy8gcmVzdGFydCBjbGlwCi0gICAgICAgICAgICB0aGlzLl9sb29wQ291bnQgPSAt
IDE7ICAvLyBmb3JnZXQgcHJldmlvdXMgbG9vcHMKLSAgICAgICAgICAgIHRoaXMuX3N0YXJ0VGlt
ZSA9IG51bGw7IC8vIGZvcmdldCBzY2hlZHVsaW5nCisgICAgICAgICAgICB0aGlzLnRpbWUgPSAw
OyAvLyByZXN0YXJ0IGNsaXAKKyAgICAgICAgICAgIHRoaXMuX2xvb3BDb3VudCA9IC0gMTsvLyBm
b3JnZXQgcHJldmlvdXMgbG9vcHMKKyAgICAgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IG51bGw7
Ly8gZm9yZ2V0IHNjaGVkdWxpbmcKIAogICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcEZhZGlu
ZygpLnN0b3BXYXJwaW5nKCk7CiAKQEAgLTQxNDc4LDcgKzQzMTYwLDcgQEAKICAgICAgICAgaXNS
dW5uaW5nOiBmdW5jdGlvbiAoKSB7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuYWJsZWQg
JiYgISB0aGlzLnBhdXNlZCAmJiB0aGlzLnRpbWVTY2FsZSAhPT0gMCAmJgotICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPT09IG51bGwgJiYgdGhpcy5fbWl4ZXIuX2lzQWN0aXZl
QWN0aW9uKCB0aGlzICk7CisgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRUaW1lID09PSBudWxs
ICYmIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbiggdGhpcyApOwogCiAgICAgICAgIH0sCiAK
QEAgLTQxODM0LDEzICs0MzUxNiwxOSBAQAogICAgICAgICBfdXBkYXRlVGltZTogZnVuY3Rpb24g
KCBkZWx0YVRpbWUgKSB7CiAKICAgICAgICAgICAgIHZhciB0aW1lID0gdGhpcy50aW1lICsgZGVs
dGFUaW1lOworICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gdGhpcy5fY2xpcC5kdXJhdGlvbjsK
KyAgICAgICAgICAgIHZhciBsb29wID0gdGhpcy5sb29wOworICAgICAgICAgICAgdmFyIGxvb3BD
b3VudCA9IHRoaXMuX2xvb3BDb3VudDsKKworICAgICAgICAgICAgdmFyIHBpbmdQb25nID0gKCBs
b29wID09PSBMb29wUGluZ1BvbmcgKTsKIAotICAgICAgICAgICAgaWYgKCBkZWx0YVRpbWUgPT09
IDAgKSByZXR1cm4gdGltZTsKKyAgICAgICAgICAgIGlmICggZGVsdGFUaW1lID09PSAwICkgewog
Ci0gICAgICAgICAgICB2YXIgZHVyYXRpb24gPSB0aGlzLl9jbGlwLmR1cmF0aW9uLAorICAgICAg
ICAgICAgICAgIGlmICggbG9vcENvdW50ID09PSAtIDEgKSByZXR1cm4gdGltZTsKIAotICAgICAg
ICAgICAgICAgIGxvb3AgPSB0aGlzLmxvb3AsCi0gICAgICAgICAgICAgICAgbG9vcENvdW50ID0g
dGhpcy5fbG9vcENvdW50OworICAgICAgICAgICAgICAgIHJldHVybiAoIHBpbmdQb25nICYmICgg
bG9vcENvdW50ICYgMSApID09PSAxICkgPyBkdXJhdGlvbiAtIHRpbWUgOiB0aW1lOworCisgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICggbG9vcCA9PT0gTG9vcE9uY2UgKSB7CiAKQEAg
LTQxODYzLDExICs0MzU1MSwxOSBAQAogCiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lID0g
MDsKIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgYnJlYWsgaGFuZGxlX3N0b3A7CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
dGltZSA9IHRpbWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGhhbmRsZV9zdG9w
OworCisgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBpZiAoIHRo
aXMuY2xhbXBXaGVuRmluaXNoZWQgKSB0aGlzLnBhdXNlZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgdGhpcy5lbmFibGVkID0gZmFsc2U7CiAKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy50aW1lID0gdGltZTsKKwogICAgICAgICAgICAgICAgICAgICB0aGlzLl9taXhlci5kaXNw
YXRjaEV2ZW50KCB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZmluaXNoZWQnLCBh
Y3Rpb246IHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb246IGRlbHRhVGlt
ZSA8IDAgPyAtIDEgOiAxCkBAIC00MTg3Nyw4ICs0MzU3Myw2IEBACiAKICAgICAgICAgICAgIH0g
ZWxzZSB7IC8vIHJlcGV0aXRpdmUgUmVwZWF0IG9yIFBpbmdQb25nCiAKLSAgICAgICAgICAgICAg
ICB2YXIgcGluZ1BvbmcgPSAoIGxvb3AgPT09IExvb3BQaW5nUG9uZyApOwotCiAgICAgICAgICAg
ICAgICAgaWYgKCBsb29wQ291bnQgPT09IC0gMSApIHsKIAogICAgICAgICAgICAgICAgICAgICAv
LyBqdXN0IHN0YXJ0ZWQKQEAgLTQxOTIxLDYgKzQzNjE1LDggQEAKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgdGltZSA9IGRlbHRhVGltZSA+IDAgPyBkdXJhdGlvbiA6IDA7CiAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMudGltZSA9IHRpbWU7CisKICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlOiAnZmluaXNoZWQnLCBhY3Rpb246IHRoaXMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlyZWN0aW9uOiBkZWx0YVRpbWUgPiAwID8gMSA6IC0gMQpAQCAtNDE5NDUsMjYg
KzQzNjQxLDMwIEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvb3BDb3VudCA9
IGxvb3BDb3VudDsKIAorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lID0gdGltZTsK
KwogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCggewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsb29wJywgYWN0aW9uOiB0aGlzLCBs
b29wRGVsdGE6IGxvb3BEZWx0YQogICAgICAgICAgICAgICAgICAgICAgICAgfSApOwogCiAgICAg
ICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy50aW1lID0gdGltZTsKKwogICAgICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgICAgIGlmICggcGluZ1BvbmcgJiYgKCBsb29wQ291bnQgJiAxICkgPT09IDEgKSB7
CiAKICAgICAgICAgICAgICAgICAgICAgLy8gaW52ZXJ0IHRpbWUgZm9yIHRoZSAicG9uZyByb3Vu
ZCIKIAotICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWUgPSB0aW1lOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZHVyYXRpb24gLSB0aW1lOwogCiAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHRoaXMudGltZSA9IHRpbWU7CiAgICAgICAgICAg
ICByZXR1cm4gdGltZTsKIAogICAgICAgICB9LApAQCAtNDE5NzUsOCArNDM2NzUsOCBAQAogCiAg
ICAgICAgICAgICBpZiAoIHBpbmdQb25nICkgewogCi0gICAgICAgICAgICAgICAgc2V0dGluZ3Mu
ZW5kaW5nU3RhcnQgICAgPSBaZXJvU2xvcGVFbmRpbmc7Ci0gICAgICAgICAgICAgICAgc2V0dGlu
Z3MuZW5kaW5nRW5kICAgICAgPSBaZXJvU2xvcGVFbmRpbmc7CisgICAgICAgICAgICAgICAgc2V0
dGluZ3MuZW5kaW5nU3RhcnQgPSBaZXJvU2xvcGVFbmRpbmc7CisgICAgICAgICAgICAgICAgc2V0
dGluZ3MuZW5kaW5nRW5kID0gWmVyb1Nsb3BlRW5kaW5nOwogCiAgICAgICAgICAgICB9IGVsc2Ug
ewogCkBAIC00MjAyMSw4ICs0MzcyMSwxMCBAQAogICAgICAgICAgICAgdmFyIHRpbWVzID0gaW50
ZXJwb2xhbnQucGFyYW1ldGVyUG9zaXRpb25zLAogICAgICAgICAgICAgICAgIHZhbHVlcyA9IGlu
dGVycG9sYW50LnNhbXBsZVZhbHVlczsKIAotICAgICAgICAgICAgdGltZXNbIDAgXSA9IG5vdzsg
ICAgICAgICAgICAgICB2YWx1ZXNbIDAgXSA9IHdlaWdodE5vdzsKLSAgICAgICAgICAgIHRpbWVz
WyAxIF0gPSBub3cgKyBkdXJhdGlvbjsgICAgdmFsdWVzWyAxIF0gPSB3ZWlnaHRUaGVuOworICAg
ICAgICAgICAgdGltZXNbIDAgXSA9IG5vdzsKKyAgICAgICAgICAgIHZhbHVlc1sgMCBdID0gd2Vp
Z2h0Tm93OworICAgICAgICAgICAgdGltZXNbIDEgXSA9IG5vdyArIGR1cmF0aW9uOworICAgICAg
ICAgICAgdmFsdWVzWyAxIF0gPSB3ZWlnaHRUaGVuOwogCiAgICAgICAgICAgICByZXR1cm4gdGhp
czsKIApAQCAtNDIyMDEsOCArNDM5MDMsOCBAQAogICAgICAgICAgICAgdGhpcy5fYWN0aW9uc0J5
Q2xpcCA9IHt9OwogICAgICAgICAgICAgLy8gaW5zaWRlOgogICAgICAgICAgICAgLy8gewotICAg
ICAgICAgICAgLy8gICAgICBrbm93bkFjdGlvbnM6IEFycmF5PCBBbmltYXRpb25BY3Rpb24gPiAg
LSB1c2VkIGFzIHByb3RvdHlwZXMKLSAgICAgICAgICAgIC8vICAgICAgYWN0aW9uQnlSb290OiBB
bmltYXRpb25BY3Rpb24gICAgICAgICAgIC0gbG9va3VwCisgICAgICAgICAgICAvLyAga25vd25B
Y3Rpb25zOiBBcnJheTwgQW5pbWF0aW9uQWN0aW9uID4gLSB1c2VkIGFzIHByb3RvdHlwZXMKKyAg
ICAgICAgICAgIC8vICBhY3Rpb25CeVJvb3Q6IEFuaW1hdGlvbkFjdGlvbiAtIGxvb2t1cAogICAg
ICAgICAgICAgLy8gfQogCiAKQEAgLTQyNDUzLDkgKzQ0MTU1LDcgQEAKIAogICAgICAgICAgICAg
ZGVsZXRlIGJpbmRpbmdCeU5hbWVbIHRyYWNrTmFtZSBdOwogCi0gICAgICAgICAgICByZW1vdmVf
ZW1wdHlfbWFwOiB7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgXyBpbiBiaW5kaW5nQnlO
YW1lICkgYnJlYWsgcmVtb3ZlX2VtcHR5X21hcDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11
bnVzZWQtdmFycworICAgICAgICAgICAgaWYgKCBPYmplY3Qua2V5cyggYmluZGluZ0J5TmFtZSAp
Lmxlbmd0aCA9PT0gMCApIHsKIAogICAgICAgICAgICAgICAgIGRlbGV0ZSBiaW5kaW5nc0J5Um9v
dFsgcm9vdFV1aWQgXTsKIApAQCAtNDI4MDUsMjg3ICs0NDUwNSw2IEBACiAKICAgICB9OwogCi0g
ICAgLyoqCi0gICAgICogQGF1dGhvciBiZW5hYWRhbXMgLyBodHRwczovL3R3aXR0ZXIuY29tL2Jl
bl9hX2FkYW1zCi0gICAgICovCi0KLSAgICBmdW5jdGlvbiBJbnN0YW5jZWRCdWZmZXJHZW9tZXRy
eSgpIHsKLQotICAgICAgICBCdWZmZXJHZW9tZXRyeS5jYWxsKCB0aGlzICk7Ci0KLSAgICAgICAg
dGhpcy50eXBlID0gJ0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5JzsKLSAgICAgICAgdGhpcy5tYXhJ
bnN0YW5jZWRDb3VudCA9IHVuZGVmaW5lZDsKLQotICAgIH0KLQotICAgIEluc3RhbmNlZEJ1ZmZl
ckdlb21ldHJ5LnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIEJ1ZmZl
ckdlb21ldHJ5LnByb3RvdHlwZSApLCB7Ci0KLSAgICAgICAgY29uc3RydWN0b3I6IEluc3RhbmNl
ZEJ1ZmZlckdlb21ldHJ5LAotCi0gICAgICAgIGlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk6IHRy
dWUsCi0KLSAgICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UgKSB7Ci0KLSAgICAgICAgICAg
IEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOwotCi0g
ICAgICAgICAgICB0aGlzLm1heEluc3RhbmNlZENvdW50ID0gc291cmNlLm1heEluc3RhbmNlZENv
dW50OwotCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKLQotICAgICAgICB9LAotCi0gICAgICAg
IGNsb25lOiBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25z
dHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKLQotICAgICAgICB9Ci0KLSAgICB9ICk7Ci0KLSAgICAv
KioKLSAgICAgKiBAYXV0aG9yIGJlbmFhZGFtcyAvIGh0dHBzOi8vdHdpdHRlci5jb20vYmVuX2Ff
YWRhbXMKLSAgICAgKi8KLQotICAgIGZ1bmN0aW9uIEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRl
KCBpbnRlcmxlYXZlZEJ1ZmZlciwgaXRlbVNpemUsIG9mZnNldCwgbm9ybWFsaXplZCApIHsKLQot
ICAgICAgICB0aGlzLmRhdGEgPSBpbnRlcmxlYXZlZEJ1ZmZlcjsKLSAgICAgICAgdGhpcy5pdGVt
U2l6ZSA9IGl0ZW1TaXplOwotICAgICAgICB0aGlzLm9mZnNldCA9IG9mZnNldDsKLQotICAgICAg
ICB0aGlzLm5vcm1hbGl6ZWQgPSBub3JtYWxpemVkID09PSB0cnVlOwotCi0gICAgfQotCi0gICAg
T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLnByb3Rv
dHlwZSwgewotCi0gICAgICAgIGNvdW50OiB7Ci0KLSAgICAgICAgICAgIGdldDogZnVuY3Rpb24g
KCkgewotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5jb3VudDsKLQotICAgICAg
ICAgICAgfQotCi0gICAgICAgIH0sCi0KLSAgICAgICAgYXJyYXk6IHsKLQotICAgICAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmFy
cmF5OwotCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotCi0gICAgfSApOwotCi0gICAgT2Jq
ZWN0LmFzc2lnbiggSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLCB7Ci0KLSAg
ICAgICAgaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZTogdHJ1ZSwKLQotICAgICAgICBzZXRY
OiBmdW5jdGlvbiAoIGluZGV4LCB4ICkgewotCi0gICAgICAgICAgICB0aGlzLmRhdGEuYXJyYXlb
IGluZGV4ICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0IF0gPSB4OwotCi0gICAgICAg
ICAgICByZXR1cm4gdGhpczsKLQotICAgICAgICB9LAotCi0gICAgICAgIHNldFk6IGZ1bmN0aW9u
ICggaW5kZXgsIHkgKSB7Ci0KLSAgICAgICAgICAgIHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKiB0
aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZzZXQgKyAxIF0gPSB5OwotCi0gICAgICAgICAgICBy
ZXR1cm4gdGhpczsKLQotICAgICAgICB9LAotCi0gICAgICAgIHNldFo6IGZ1bmN0aW9uICggaW5k
ZXgsIHogKSB7Ci0KLSAgICAgICAgICAgIHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKiB0aGlzLmRh
dGEuc3RyaWRlICsgdGhpcy5vZmZzZXQgKyAyIF0gPSB6OwotCi0gICAgICAgICAgICByZXR1cm4g
dGhpczsKLQotICAgICAgICB9LAotCi0gICAgICAgIHNldFc6IGZ1bmN0aW9uICggaW5kZXgsIHcg
KSB7Ci0KLSAgICAgICAgICAgIHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKiB0aGlzLmRhdGEuc3Ry
aWRlICsgdGhpcy5vZmZzZXQgKyAzIF0gPSB3OwotCi0gICAgICAgICAgICByZXR1cm4gdGhpczsK
LQotICAgICAgICB9LAotCi0gICAgICAgIGdldFg6IGZ1bmN0aW9uICggaW5kZXggKSB7Ci0KLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICogdGhpcy5kYXRhLnN0cmlk
ZSArIHRoaXMub2Zmc2V0IF07Ci0KLSAgICAgICAgfSwKLQotICAgICAgICBnZXRZOiBmdW5jdGlv
biAoIGluZGV4ICkgewotCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmFycmF5WyBpbmRl
eCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldCArIDEgXTsKLQotICAgICAgICB9LAot
Ci0gICAgICAgIGdldFo6IGZ1bmN0aW9uICggaW5kZXggKSB7Ci0KLSAgICAgICAgICAgIHJldHVy
biB0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICogdGhpcy5kYXRhLnN0cmlkZSArIHRoaXMub2Zmc2V0
ICsgMiBdOwotCi0gICAgICAgIH0sCi0KLSAgICAgICAgZ2V0VzogZnVuY3Rpb24gKCBpbmRleCAp
IHsKLQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKiB0aGlzLmRh
dGEuc3RyaWRlICsgdGhpcy5vZmZzZXQgKyAzIF07Ci0KLSAgICAgICAgfSwKLQotICAgICAgICBz
ZXRYWTogZnVuY3Rpb24gKCBpbmRleCwgeCwgeSApIHsKLQotICAgICAgICAgICAgaW5kZXggPSBp
bmRleCAqIHRoaXMuZGF0YS5zdHJpZGUgKyB0aGlzLm9mZnNldDsKLQotICAgICAgICAgICAgdGhp
cy5kYXRhLmFycmF5WyBpbmRleCArIDAgXSA9IHg7Ci0gICAgICAgICAgICB0aGlzLmRhdGEuYXJy
YXlbIGluZGV4ICsgMSBdID0geTsKLQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0KLSAgICAg
ICAgfSwKLQotICAgICAgICBzZXRYWVo6IGZ1bmN0aW9uICggaW5kZXgsIHgsIHksIHogKSB7Ci0K
LSAgICAgICAgICAgIGluZGV4ID0gaW5kZXggKiB0aGlzLmRhdGEuc3RyaWRlICsgdGhpcy5vZmZz
ZXQ7Ci0KLSAgICAgICAgICAgIHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKyAwIF0gPSB4OwotICAg
ICAgICAgICAgdGhpcy5kYXRhLmFycmF5WyBpbmRleCArIDEgXSA9IHk7Ci0gICAgICAgICAgICB0
aGlzLmRhdGEuYXJyYXlbIGluZGV4ICsgMiBdID0gejsKLQotICAgICAgICAgICAgcmV0dXJuIHRo
aXM7Ci0KLSAgICAgICAgfSwKLQotICAgICAgICBzZXRYWVpXOiBmdW5jdGlvbiAoIGluZGV4LCB4
LCB5LCB6LCB3ICkgewotCi0gICAgICAgICAgICBpbmRleCA9IGluZGV4ICogdGhpcy5kYXRhLnN0
cmlkZSArIHRoaXMub2Zmc2V0OwotCi0gICAgICAgICAgICB0aGlzLmRhdGEuYXJyYXlbIGluZGV4
ICsgMCBdID0geDsKLSAgICAgICAgICAgIHRoaXMuZGF0YS5hcnJheVsgaW5kZXggKyAxIF0gPSB5
OwotICAgICAgICAgICAgdGhpcy5kYXRhLmFycmF5WyBpbmRleCArIDIgXSA9IHo7Ci0gICAgICAg
ICAgICB0aGlzLmRhdGEuYXJyYXlbIGluZGV4ICsgMyBdID0gdzsKLQotICAgICAgICAgICAgcmV0
dXJuIHRoaXM7Ci0KLSAgICAgICAgfQotCi0gICAgfSApOwotCi0gICAgLyoqCi0gICAgICogQGF1
dGhvciBiZW5hYWRhbXMgLyBodHRwczovL3R3aXR0ZXIuY29tL2Jlbl9hX2FkYW1zCi0gICAgICov
Ci0KLSAgICBmdW5jdGlvbiBJbnRlcmxlYXZlZEJ1ZmZlciggYXJyYXksIHN0cmlkZSApIHsKLQot
ICAgICAgICB0aGlzLmFycmF5ID0gYXJyYXk7Ci0gICAgICAgIHRoaXMuc3RyaWRlID0gc3RyaWRl
OwotICAgICAgICB0aGlzLmNvdW50ID0gYXJyYXkgIT09IHVuZGVmaW5lZCA/IGFycmF5Lmxlbmd0
aCAvIHN0cmlkZSA6IDA7Ci0KLSAgICAgICAgdGhpcy5keW5hbWljID0gZmFsc2U7Ci0gICAgICAg
IHRoaXMudXBkYXRlUmFuZ2UgPSB7IG9mZnNldDogMCwgY291bnQ6IC0gMSB9OwotCi0gICAgICAg
IHRoaXMudmVyc2lvbiA9IDA7Ci0KLSAgICB9Ci0KLSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
IEludGVybGVhdmVkQnVmZmVyLnByb3RvdHlwZSwgJ25lZWRzVXBkYXRlJywgewotCi0gICAgICAg
IHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKLQotICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0g
dHJ1ZSApIHRoaXMudmVyc2lvbiArKzsKLQotICAgICAgICB9Ci0KLSAgICB9ICk7Ci0KLSAgICBP
YmplY3QuYXNzaWduKCBJbnRlcmxlYXZlZEJ1ZmZlci5wcm90b3R5cGUsIHsKLQotICAgICAgICBp
c0ludGVybGVhdmVkQnVmZmVyOiB0cnVlLAotCi0gICAgICAgIG9uVXBsb2FkQ2FsbGJhY2s6IGZ1
bmN0aW9uICgpIHt9LAotCi0gICAgICAgIHNldEFycmF5OiBmdW5jdGlvbiAoIGFycmF5ICkgewot
Ci0gICAgICAgICAgICBpZiAoIEFycmF5LmlzQXJyYXkoIGFycmF5ICkgKSB7Ci0KLSAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCAnVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJh
eSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4nICk7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgdGhpcy5jb3VudCA9IGFycmF5ICE9PSB1bmRlZmluZWQgPyBhcnJheS5sZW5ndGggLyB0
aGlzLnN0cmlkZSA6IDA7Ci0gICAgICAgICAgICB0aGlzLmFycmF5ID0gYXJyYXk7Ci0KLSAgICAg
ICAgICAgIHJldHVybiB0aGlzOwotCi0gICAgICAgIH0sCi0KLSAgICAgICAgc2V0RHluYW1pYzog
ZnVuY3Rpb24gKCB2YWx1ZSApIHsKLQotICAgICAgICAgICAgdGhpcy5keW5hbWljID0gdmFsdWU7
Ci0KLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotCi0gICAgICAgIH0sCi0KLSAgICAgICAgY29w
eTogZnVuY3Rpb24gKCBzb3VyY2UgKSB7Ci0KLSAgICAgICAgICAgIHRoaXMuYXJyYXkgPSBuZXcg
c291cmNlLmFycmF5LmNvbnN0cnVjdG9yKCBzb3VyY2UuYXJyYXkgKTsKLSAgICAgICAgICAgIHRo
aXMuY291bnQgPSBzb3VyY2UuY291bnQ7Ci0gICAgICAgICAgICB0aGlzLnN0cmlkZSA9IHNvdXJj
ZS5zdHJpZGU7Ci0gICAgICAgICAgICB0aGlzLmR5bmFtaWMgPSBzb3VyY2UuZHluYW1pYzsKLQot
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0KLSAgICAgICAgfSwKLQotICAgICAgICBjb3B5QXQ6
IGZ1bmN0aW9uICggaW5kZXgxLCBhdHRyaWJ1dGUsIGluZGV4MiApIHsKLQotICAgICAgICAgICAg
aW5kZXgxICo9IHRoaXMuc3RyaWRlOwotICAgICAgICAgICAgaW5kZXgyICo9IGF0dHJpYnV0ZS5z
dHJpZGU7Ci0KLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHRoaXMuc3RyaWRlOyBp
IDwgbDsgaSArKyApIHsKLQotICAgICAgICAgICAgICAgIHRoaXMuYXJyYXlbIGluZGV4MSArIGkg
XSA9IGF0dHJpYnV0ZS5hcnJheVsgaW5kZXgyICsgaSBdOwotCi0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHJldHVybiB0aGlzOwotCi0gICAgICAgIH0sCi0KLSAgICAgICAgc2V0OiBmdW5j
dGlvbiAoIHZhbHVlLCBvZmZzZXQgKSB7Ci0KLSAgICAgICAgICAgIGlmICggb2Zmc2V0ID09PSB1
bmRlZmluZWQgKSBvZmZzZXQgPSAwOwotCi0gICAgICAgICAgICB0aGlzLmFycmF5LnNldCggdmFs
dWUsIG9mZnNldCApOwotCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKLQotICAgICAgICB9LAot
Ci0gICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcg
dGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKLQotICAgICAgICB9LAotCi0gICAgICAg
IG9uVXBsb2FkOiBmdW5jdGlvbiAoIGNhbGxiYWNrICkgewotCi0gICAgICAgICAgICB0aGlzLm9u
VXBsb2FkQ2FsbGJhY2sgPSBjYWxsYmFjazsKLQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0K
LSAgICAgICAgfQotCi0gICAgfSApOwotCiAgICAgLyoqCiAgICAgICogQGF1dGhvciBiZW5hYWRh
bXMgLyBodHRwczovL3R3aXR0ZXIuY29tL2Jlbl9hX2FkYW1zCiAgICAgICovCkBAIC00MzExNiwz
NiArNDQ1MzUsNiBAQAogCiAgICAgfSApOwogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBiZW5h
YWRhbXMgLyBodHRwczovL3R3aXR0ZXIuY29tL2Jlbl9hX2FkYW1zCi0gICAgICovCi0KLSAgICBm
dW5jdGlvbiBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSwgbWVzaFBl
ckF0dHJpYnV0ZSApIHsKLQotICAgICAgICBCdWZmZXJBdHRyaWJ1dGUuY2FsbCggdGhpcywgYXJy
YXksIGl0ZW1TaXplICk7Ci0KLSAgICAgICAgdGhpcy5tZXNoUGVyQXR0cmlidXRlID0gbWVzaFBl
ckF0dHJpYnV0ZSB8fCAxOwotCi0gICAgfQotCi0gICAgSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRl
LnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIEJ1ZmZlckF0dHJpYnV0
ZS5wcm90b3R5cGUgKSwgewotCi0gICAgICAgIGNvbnN0cnVjdG9yOiBJbnN0YW5jZWRCdWZmZXJB
dHRyaWJ1dGUsCi0KLSAgICAgICAgaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6IHRydWUsCi0K
LSAgICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UgKSB7Ci0KLSAgICAgICAgICAgIEJ1ZmZl
ckF0dHJpYnV0ZS5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKLQotICAgICAg
ICAgICAgdGhpcy5tZXNoUGVyQXR0cmlidXRlID0gc291cmNlLm1lc2hQZXJBdHRyaWJ1dGU7Ci0K
LSAgICAgICAgICAgIHJldHVybiB0aGlzOwotCi0gICAgICAgIH0KLQotICAgIH0gKTsKLQogICAg
IC8qKgogICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCiAgICAgICog
QGF1dGhvciBiaG91c3RvbiAvIGh0dHA6Ly9jbGFyYS5pby8KQEAgLTQzMjI1LDExICs0NDYxNCwx
MyBAQAogCiAgICAgICAgICAgICAgICAgdGhpcy5yYXkub3JpZ2luLnNldEZyb21NYXRyaXhQb3Np
dGlvbiggY2FtZXJhLm1hdHJpeFdvcmxkICk7CiAgICAgICAgICAgICAgICAgdGhpcy5yYXkuZGly
ZWN0aW9uLnNldCggY29vcmRzLngsIGNvb3Jkcy55LCAwLjUgKS51bnByb2plY3QoIGNhbWVyYSAp
LnN1YiggdGhpcy5yYXkub3JpZ2luICkubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAgdGhp
cy5fY2FtZXJhID0gY2FtZXJhOwogCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCAoIGNhbWVyYSAm
JiBjYW1lcmEuaXNPcnRob2dyYXBoaWNDYW1lcmEgKSApIHsKIAogICAgICAgICAgICAgICAgIHRo
aXMucmF5Lm9yaWdpbi5zZXQoIGNvb3Jkcy54LCBjb29yZHMueSwgKCBjYW1lcmEubmVhciArIGNh
bWVyYS5mYXIgKSAvICggY2FtZXJhLm5lYXIgLSBjYW1lcmEuZmFyICkgKS51bnByb2plY3QoIGNh
bWVyYSApOyAvLyBzZXQgb3JpZ2luIGluIHBsYW5lIG9mIGNhbWVyYQogICAgICAgICAgICAgICAg
IHRoaXMucmF5LmRpcmVjdGlvbi5zZXQoIDAsIDAsIC0gMSApLnRyYW5zZm9ybURpcmVjdGlvbigg
Y2FtZXJhLm1hdHJpeFdvcmxkICk7CisgICAgICAgICAgICAgICAgdGhpcy5fY2FtZXJhID0gY2Ft
ZXJhOwogCiAgICAgICAgICAgICB9IGVsc2UgewogCkBAIC00MzI3Niw5MiArNDQ2NjcsMjEgQEAK
IAogICAgIH0gKTsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8v
YWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICovCi0KLSAgICBmdW5jdGlvbiBDbG9jayggYXV0b1N0
YXJ0ICkgewotCi0gICAgICAgIHRoaXMuYXV0b1N0YXJ0ID0gKCBhdXRvU3RhcnQgIT09IHVuZGVm
aW5lZCApID8gYXV0b1N0YXJ0IDogdHJ1ZTsKLQotICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7
Ci0gICAgICAgIHRoaXMub2xkVGltZSA9IDA7Ci0gICAgICAgIHRoaXMuZWxhcHNlZFRpbWUgPSAw
OwotCi0gICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlOwotCi0gICAgfQotCi0gICAgT2JqZWN0
LmFzc2lnbiggQ2xvY2sucHJvdG90eXBlLCB7Ci0KLSAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uICgp
IHsKLQotICAgICAgICAgICAgdGhpcy5zdGFydFRpbWUgPSAoIHR5cGVvZiBwZXJmb3JtYW5jZSA9
PT0gJ3VuZGVmaW5lZCcgPyBEYXRlIDogcGVyZm9ybWFuY2UgKS5ub3coKTsgLy8gc2VlICMxMDcz
MgotCi0gICAgICAgICAgICB0aGlzLm9sZFRpbWUgPSB0aGlzLnN0YXJ0VGltZTsKLSAgICAgICAg
ICAgIHRoaXMuZWxhcHNlZFRpbWUgPSAwOwotICAgICAgICAgICAgdGhpcy5ydW5uaW5nID0gdHJ1
ZTsKLQotICAgICAgICB9LAotCi0gICAgICAgIHN0b3A6IGZ1bmN0aW9uICgpIHsKLQotICAgICAg
ICAgICAgdGhpcy5nZXRFbGFwc2VkVGltZSgpOwotICAgICAgICAgICAgdGhpcy5ydW5uaW5nID0g
ZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLmF1dG9TdGFydCA9IGZhbHNlOwotCi0gICAgICAgIH0s
Ci0KLSAgICAgICAgZ2V0RWxhcHNlZFRpbWU6IGZ1bmN0aW9uICgpIHsKLQotICAgICAgICAgICAg
dGhpcy5nZXREZWx0YSgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxhcHNlZFRpbWU7Ci0K
LSAgICAgICAgfSwKLQotICAgICAgICBnZXREZWx0YTogZnVuY3Rpb24gKCkgewotCi0gICAgICAg
ICAgICB2YXIgZGlmZiA9IDA7Ci0KLSAgICAgICAgICAgIGlmICggdGhpcy5hdXRvU3RhcnQgJiYg
ISB0aGlzLnJ1bm5pbmcgKSB7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0KCk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KCB0aGlzLnJ1bm5pbmcgKSB7Ci0KLSAgICAgICAgICAgICAgICB2YXIgbmV3VGltZSA9ICggdHlw
ZW9mIHBlcmZvcm1hbmNlID09PSAndW5kZWZpbmVkJyA/IERhdGUgOiBwZXJmb3JtYW5jZSApLm5v
dygpOwotCi0gICAgICAgICAgICAgICAgZGlmZiA9ICggbmV3VGltZSAtIHRoaXMub2xkVGltZSAp
IC8gMTAwMDsKLSAgICAgICAgICAgICAgICB0aGlzLm9sZFRpbWUgPSBuZXdUaW1lOwotCi0gICAg
ICAgICAgICAgICAgdGhpcy5lbGFwc2VkVGltZSArPSBkaWZmOwotCi0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHJldHVybiBkaWZmOwotCi0gICAgICAgIH0KLQotICAgIH0gKTsKLQogICAg
IC8qKgogICAgICAqIEBhdXRob3IgYmhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW8KICAgICAgKiBA
YXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExhbmdsZXkKICAgICAg
KgogICAgICAqIFJlZjogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3BoZXJpY2FsX2Nv
b3JkaW5hdGVfc3lzdGVtCiAgICAgICoKLSAgICAgKiBUaGUgcG9sZXMgKHBoaSkgYXJlIGF0IHRo
ZSBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgeSBheGlzLgotICAgICAqIFRoZSBlcXVhdG9yIHN0YXJ0
cyBhdCBwb3NpdGl2ZSB6LgorICAgICAqIFRoZSBwb2xhciBhbmdsZSAocGhpKSBpcyBtZWFzdXJl
ZCBmcm9tIHRoZSBwb3NpdGl2ZSB5LWF4aXMuIFRoZSBwb3NpdGl2ZSB5LWF4aXMgaXMgdXAuCisg
ICAgICogVGhlIGF6aW11dGhhbCBhbmdsZSAodGhldGEpIGlzIG1lYXN1cmVkIGZyb20gdGhlIHBv
c2l0aXZlIHotYXhpei4KICAgICAgKi8KIAogICAgIGZ1bmN0aW9uIFNwaGVyaWNhbCggcmFkaXVz
LCBwaGksIHRoZXRhICkgewogCiAgICAgICAgIHRoaXMucmFkaXVzID0gKCByYWRpdXMgIT09IHVu
ZGVmaW5lZCApID8gcmFkaXVzIDogMS4wOwotICAgICAgICB0aGlzLnBoaSA9ICggcGhpICE9PSB1
bmRlZmluZWQgKSA/IHBoaSA6IDA7IC8vIHVwIC8gZG93biB0b3dhcmRzIHRvcCBhbmQgYm90dG9t
IHBvbGUKLSAgICAgICAgdGhpcy50aGV0YSA9ICggdGhldGEgIT09IHVuZGVmaW5lZCApID8gdGhl
dGEgOiAwOyAvLyBhcm91bmQgdGhlIGVxdWF0b3Igb2YgdGhlIHNwaGVyZQorICAgICAgICB0aGlz
LnBoaSA9ICggcGhpICE9PSB1bmRlZmluZWQgKSA/IHBoaSA6IDA7IC8vIHBvbGFyIGFuZ2xlCisg
ICAgICAgIHRoaXMudGhldGEgPSAoIHRoZXRhICE9PSB1bmRlZmluZWQgKSA/IHRoZXRhIDogMDsg
Ly8gYXppbXV0aGFsIGFuZ2xlCiAKICAgICAgICAgcmV0dXJuIHRoaXM7CiAKQEAgLTQzNDA1LDkg
KzQ0NzI1LDE1IEBACiAKICAgICAgICAgfSwKIAotICAgICAgICBzZXRGcm9tVmVjdG9yMzogZnVu
Y3Rpb24gKCB2ZWMzICkgeworICAgICAgICBzZXRGcm9tVmVjdG9yMzogZnVuY3Rpb24gKCB2ICkg
eworCisgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKCB2Lngs
IHYueSwgdi56ICk7CisKKyAgICAgICAgfSwKKworICAgICAgICBzZXRGcm9tQ2FydGVzaWFuQ29v
cmRzOiBmdW5jdGlvbiAoIHgsIHksIHogKSB7CiAKLSAgICAgICAgICAgIHRoaXMucmFkaXVzID0g
dmVjMy5sZW5ndGgoKTsKKyAgICAgICAgICAgIHRoaXMucmFkaXVzID0gTWF0aC5zcXJ0KCB4ICog
eCArIHkgKiB5ICsgeiAqIHogKTsKIAogICAgICAgICAgICAgaWYgKCB0aGlzLnJhZGl1cyA9PT0g
MCApIHsKIApAQCAtNDM0MTYsOCArNDQ3NDIsOCBAQAogCiAgICAgICAgICAgICB9IGVsc2Ugewog
Ci0gICAgICAgICAgICAgICAgdGhpcy50aGV0YSA9IE1hdGguYXRhbjIoIHZlYzMueCwgdmVjMy56
ICk7IC8vIGVxdWF0b3IgYW5nbGUgYXJvdW5kIHktdXAgYXhpcwotICAgICAgICAgICAgICAgIHRo
aXMucGhpID0gTWF0aC5hY29zKCBfTWF0aC5jbGFtcCggdmVjMy55IC8gdGhpcy5yYWRpdXMsIC0g
MSwgMSApICk7IC8vIHBvbGFyIGFuZ2xlCisgICAgICAgICAgICAgICAgdGhpcy50aGV0YSA9IE1h
dGguYXRhbjIoIHgsIHogKTsKKyAgICAgICAgICAgICAgICB0aGlzLnBoaSA9IE1hdGguYWNvcygg
X01hdGguY2xhbXAoIHkgLyB0aGlzLnJhZGl1cywgLSAxLCAxICkgKTsKIAogICAgICAgICAgICAg
fQogCkBAIC00MzQ3MiwxMSArNDQ3OTgsMTcgQEAKIAogICAgICAgICB9LAogCi0gICAgICAgIHNl
dEZyb21WZWN0b3IzOiBmdW5jdGlvbiAoIHZlYzMgKSB7CisgICAgICAgIHNldEZyb21WZWN0b3Iz
OiBmdW5jdGlvbiAoIHYgKSB7CisKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnNldEZyb21DYXJ0
ZXNpYW5Db29yZHMoIHYueCwgdi55LCB2LnogKTsKIAotICAgICAgICAgICAgdGhpcy5yYWRpdXMg
PSBNYXRoLnNxcnQoIHZlYzMueCAqIHZlYzMueCArIHZlYzMueiAqIHZlYzMueiApOwotICAgICAg
ICAgICAgdGhpcy50aGV0YSA9IE1hdGguYXRhbjIoIHZlYzMueCwgdmVjMy56ICk7Ci0gICAgICAg
ICAgICB0aGlzLnkgPSB2ZWMzLnk7CisgICAgICAgIH0sCisKKyAgICAgICAgc2V0RnJvbUNhcnRl
c2lhbkNvb3JkczogZnVuY3Rpb24gKCB4LCB5LCB6ICkgeworCisgICAgICAgICAgICB0aGlzLnJh
ZGl1cyA9IE1hdGguc3FydCggeCAqIHggKyB6ICogeiApOworICAgICAgICAgICAgdGhpcy50aGV0
YSA9IE1hdGguYXRhbjIoIHgsIHogKTsKKyAgICAgICAgICAgIHRoaXMueSA9IHk7CiAKICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogCkBAIC00MzcyNCw2ICs0NTA1NiwxNTMgQEAKIAogICAgIH0g
KTsKIAorICAgIC8qKgorICAgICAqIEBhdXRob3IgYmhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW8K
KyAgICAgKi8KKworICAgIGZ1bmN0aW9uIExpbmUzKCBzdGFydCwgZW5kICkgeworCisgICAgICAg
IHRoaXMuc3RhcnQgPSAoIHN0YXJ0ICE9PSB1bmRlZmluZWQgKSA/IHN0YXJ0IDogbmV3IFZlY3Rv
cjMoKTsKKyAgICAgICAgdGhpcy5lbmQgPSAoIGVuZCAhPT0gdW5kZWZpbmVkICkgPyBlbmQgOiBu
ZXcgVmVjdG9yMygpOworCisgICAgfQorCisgICAgT2JqZWN0LmFzc2lnbiggTGluZTMucHJvdG90
eXBlLCB7CisKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoIHN0YXJ0LCBlbmQgKSB7CisKKyAgICAg
ICAgICAgIHRoaXMuc3RhcnQuY29weSggc3RhcnQgKTsKKyAgICAgICAgICAgIHRoaXMuZW5kLmNv
cHkoIGVuZCApOworCisgICAgICAgICAgICByZXR1cm4gdGhpczsKKworICAgICAgICB9LAorCisg
ICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIHJldHVybiBuZXcgdGhp
cy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKKworICAgICAgICB9LAorCisgICAgICAgIGNv
cHk6IGZ1bmN0aW9uICggbGluZSApIHsKKworICAgICAgICAgICAgdGhpcy5zdGFydC5jb3B5KCBs
aW5lLnN0YXJ0ICk7CisgICAgICAgICAgICB0aGlzLmVuZC5jb3B5KCBsaW5lLmVuZCApOworCisg
ICAgICAgICAgICByZXR1cm4gdGhpczsKKworICAgICAgICB9LAorCisgICAgICAgIGdldENlbnRl
cjogZnVuY3Rpb24gKCB0YXJnZXQgKSB7CisKKyAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1
bmRlZmluZWQgKSB7CisKKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5MaW5l
MzogLmdldENlbnRlcigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7CisgICAgICAgICAgICAg
ICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsKKworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gdGFyZ2V0LmFkZFZlY3RvcnMoIHRoaXMuc3RhcnQsIHRoaXMuZW5kICkubXVsdGlw
bHlTY2FsYXIoIDAuNSApOworCisgICAgICAgIH0sCisKKyAgICAgICAgZGVsdGE6IGZ1bmN0aW9u
ICggdGFyZ2V0ICkgeworCisgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVkICkg
eworCisgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuTGluZTM6IC5kZWx0YSgp
IHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3
IFZlY3RvcjMoKTsKKworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0
LnN1YlZlY3RvcnMoIHRoaXMuZW5kLCB0aGlzLnN0YXJ0ICk7CisKKyAgICAgICAgfSwKKworICAg
ICAgICBkaXN0YW5jZVNxOiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LnN0YXJ0LmRpc3RhbmNlVG9TcXVhcmVkKCB0aGlzLmVuZCApOworCisgICAgICAgIH0sCisKKyAg
ICAgICAgZGlzdGFuY2U6IGZ1bmN0aW9uICgpIHsKKworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
c3RhcnQuZGlzdGFuY2VUbyggdGhpcy5lbmQgKTsKKworICAgICAgICB9LAorCisgICAgICAgIGF0
OiBmdW5jdGlvbiAoIHQsIHRhcmdldCApIHsKKworICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09
IHVuZGVmaW5lZCApIHsKKworICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkxp
bmUzOiAuYXQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOworICAgICAgICAgICAgICAgIHRh
cmdldCA9IG5ldyBWZWN0b3IzKCk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZGVsdGEoIHRhcmdldCApLm11bHRpcGx5U2NhbGFyKCB0ICkuYWRkKCB0aGlzLnN0
YXJ0ICk7CisKKyAgICAgICAgfSwKKworICAgICAgICBjbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1l
dGVyOiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIHZhciBzdGFydFAgPSBuZXcgVmVjdG9y
MygpOworICAgICAgICAgICAgdmFyIHN0YXJ0RW5kID0gbmV3IFZlY3RvcjMoKTsKKworICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXIoIHBvaW50
LCBjbGFtcFRvTGluZSApIHsKKworICAgICAgICAgICAgICAgIHN0YXJ0UC5zdWJWZWN0b3JzKCBw
b2ludCwgdGhpcy5zdGFydCApOworICAgICAgICAgICAgICAgIHN0YXJ0RW5kLnN1YlZlY3RvcnMo
IHRoaXMuZW5kLCB0aGlzLnN0YXJ0ICk7CisKKyAgICAgICAgICAgICAgICB2YXIgc3RhcnRFbmQy
ID0gc3RhcnRFbmQuZG90KCBzdGFydEVuZCApOworICAgICAgICAgICAgICAgIHZhciBzdGFydEVu
ZF9zdGFydFAgPSBzdGFydEVuZC5kb3QoIHN0YXJ0UCApOworCisgICAgICAgICAgICAgICAgdmFy
IHQgPSBzdGFydEVuZF9zdGFydFAgLyBzdGFydEVuZDI7CisKKyAgICAgICAgICAgICAgICBpZiAo
IGNsYW1wVG9MaW5lICkgeworCisgICAgICAgICAgICAgICAgICAgIHQgPSBfTWF0aC5jbGFtcCgg
dCwgMCwgMSApOworCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJu
IHQ7CisKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgfSgpLAorCisgICAgICAgIGNsb3Nlc3RQ
b2ludFRvUG9pbnQ6IGZ1bmN0aW9uICggcG9pbnQsIGNsYW1wVG9MaW5lLCB0YXJnZXQgKSB7CisK
KyAgICAgICAgICAgIHZhciB0ID0gdGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKCBw
b2ludCwgY2xhbXBUb0xpbmUgKTsKKworICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVm
aW5lZCApIHsKKworICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkxpbmUzOiAu
Y2xvc2VzdFBvaW50VG9Qb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7CisgICAgICAg
ICAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsKKworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5kZWx0YSggdGFyZ2V0ICkubXVsdGlwbHlTY2FsYXIoIHQgKS5h
ZGQoIHRoaXMuc3RhcnQgKTsKKworICAgICAgICB9LAorCisgICAgICAgIGFwcGx5TWF0cml4NDog
ZnVuY3Rpb24gKCBtYXRyaXggKSB7CisKKyAgICAgICAgICAgIHRoaXMuc3RhcnQuYXBwbHlNYXRy
aXg0KCBtYXRyaXggKTsKKyAgICAgICAgICAgIHRoaXMuZW5kLmFwcGx5TWF0cml4NCggbWF0cml4
ICk7CisKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworCisgICAgICAgIH0sCisKKyAgICAgICAg
ZXF1YWxzOiBmdW5jdGlvbiAoIGxpbmUgKSB7CisKKyAgICAgICAgICAgIHJldHVybiBsaW5lLnN0
YXJ0LmVxdWFscyggdGhpcy5zdGFydCApICYmIGxpbmUuZW5kLmVxdWFscyggdGhpcy5lbmQgKTsK
KworICAgICAgICB9CisKKyAgICB9ICk7CisKICAgICAvKioKICAgICAgKiBAYXV0aG9yIGFsdGVy
ZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwogICAgICAqLwpAQCAtNDM5NTAsNyArNDU0
MjksNiBAQAogICAgIFNwb3RMaWdodEhlbHBlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24g
KCkgewogCiAgICAgICAgIHZhciB2ZWN0b3IgPSBuZXcgVmVjdG9yMygpOwotICAgICAgICB2YXIg
dmVjdG9yMiA9IG5ldyBWZWN0b3IzKCk7CiAKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0
ZSgpIHsKIApAQCAtNDM5NjEsMTAgKzQ1NDM5LDkgQEAKIAogICAgICAgICAgICAgdGhpcy5jb25l
LnNjYWxlLnNldCggY29uZVdpZHRoLCBjb25lV2lkdGgsIGNvbmVMZW5ndGggKTsKIAotICAgICAg
ICAgICAgdmVjdG9yLnNldEZyb21NYXRyaXhQb3NpdGlvbiggdGhpcy5saWdodC5tYXRyaXhXb3Js
ZCApOwotICAgICAgICAgICAgdmVjdG9yMi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIHRoaXMubGln
aHQudGFyZ2V0Lm1hdHJpeFdvcmxkICk7CisgICAgICAgICAgICB2ZWN0b3Iuc2V0RnJvbU1hdHJp
eFBvc2l0aW9uKCB0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCApOwogCi0gICAgICAgICAg
ICB0aGlzLmNvbmUubG9va0F0KCB2ZWN0b3IyLnN1YiggdmVjdG9yICkgKTsKKyAgICAgICAgICAg
IHRoaXMuY29uZS5sb29rQXQoIHZlY3RvciApOwogCiAgICAgICAgICAgICBpZiAoIHRoaXMuY29s
b3IgIT09IHVuZGVmaW5lZCApIHsKIApAQCAtNDQxMjEsNyArNDU1OTgsNyBAQAogCiAKICAgICAg
ICAgLyoKLSAgICAgICAgdmFyIGRpc3RhbmNlR2VvbWV0cnkgPSBuZXcgVEhSRUUuSWNvc2FoZWRy
b25HZW9tZXRyeSggMSwgMiApOworICAgICAgICB2YXIgZGlzdGFuY2VHZW9tZXRyeSA9IG5ldyBU
SFJFRS5JY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5KCAxLCAyICk7CiAgICAgICAgIHZhciBkaXN0
YW5jZU1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKCB7IGNvbG9yOiBoZXhD
b2xvciwgZm9nOiBmYWxzZSwgd2lyZWZyYW1lOiB0cnVlLCBvcGFjaXR5OiAwLjEsIHRyYW5zcGFy
ZW50OiB0cnVlIH0gKTsKIAogICAgICAgICB0aGlzLmxpZ2h0U3BoZXJlID0gbmV3IFRIUkVFLk1l
c2goIGJ1bGJHZW9tZXRyeSwgYnVsYk1hdGVyaWFsICk7CkBAIC00NDE4Nyw3MyArNDU2NjQsNzUg
QEAKICAgICAgKiBAYXV0aG9yIGFiZWxuYXRpb24gLyBodHRwOi8vZ2l0aHViLmNvbS9hYmVsbmF0
aW9uCiAgICAgICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cDovL2dpdGh1Yi5jb20vTXVnZW44Nwog
ICAgICAqIEBhdXRob3IgV2VzdExhbmdsZXkgLyBodHRwOi8vZ2l0aHViLmNvbS9XZXN0TGFuZ2xl
eQorICAgICAqCisgICAgICogIFRoaXMgaGVscGVyIG11c3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBv
ZiB0aGUgbGlnaHQKICAgICAgKi8KIAogICAgIGZ1bmN0aW9uIFJlY3RBcmVhTGlnaHRIZWxwZXIo
IGxpZ2h0LCBjb2xvciApIHsKIAotICAgICAgICBPYmplY3QzRC5jYWxsKCB0aGlzICk7CisgICAg
ICAgIHRoaXMudHlwZSA9ICdSZWN0QXJlYUxpZ2h0SGVscGVyJzsKIAogICAgICAgICB0aGlzLmxp
Z2h0ID0gbGlnaHQ7Ci0gICAgICAgIHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTsKIAot
ICAgICAgICB0aGlzLm1hdHJpeCA9IGxpZ2h0Lm1hdHJpeFdvcmxkOwotICAgICAgICB0aGlzLm1h
dHJpeEF1dG9VcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yOyAvLyBv
cHRpb25hbCBoYXJkd2lyZWQgY29sb3IgZm9yIHRoZSBoZWxwZXIKIAotICAgICAgICB0aGlzLmNv
bG9yID0gY29sb3I7CisgICAgICAgIHZhciBwb3NpdGlvbnMgPSBbIDEsIDEsIDAsIC0gMSwgMSwg
MCwgLSAxLCAtIDEsIDAsIDEsIC0gMSwgMCwgMSwgMSwgMCBdOworCisgICAgICAgIHZhciBnZW9t
ZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpOworICAgICAgICBnZW9tZXRyeS5hZGRBdHRyaWJ1
dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbnMsIDMg
KSApOworICAgICAgICBnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTsKIAogICAgICAg
ICB2YXIgbWF0ZXJpYWwgPSBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoIHsgZm9nOiBmYWxzZSB9ICk7
CiAKLSAgICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7CisgICAgICAg
IExpbmUuY2FsbCggdGhpcywgZ2VvbWV0cnksIG1hdGVyaWFsICk7CiAKLSAgICAgICAgZ2VvbWV0
cnkuYWRkQXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgQnVmZmVyQXR0cmlidXRlKCBuZXcgRmxv
YXQzMkFycmF5KCA1ICogMyApLCAzICkgKTsKKyAgICAgICAgLy8KIAotICAgICAgICB0aGlzLmxp
bmUgPSBuZXcgTGluZSggZ2VvbWV0cnksIG1hdGVyaWFsICk7Ci0gICAgICAgIHRoaXMuYWRkKCB0
aGlzLmxpbmUgKTsKKyAgICAgICAgdmFyIHBvc2l0aW9uczIgPSBbIDEsIDEsIDAsIC0gMSwgMSwg
MCwgLSAxLCAtIDEsIDAsIDEsIDEsIDAsIC0gMSwgLSAxLCAwLCAxLCAtIDEsIDAgXTsKIAorICAg
ICAgICB2YXIgZ2VvbWV0cnkyID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7CisgICAgICAgIGdlb21l
dHJ5Mi5hZGRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRl
KCBwb3NpdGlvbnMyLCAzICkgKTsKKyAgICAgICAgZ2VvbWV0cnkyLmNvbXB1dGVCb3VuZGluZ1Nw
aGVyZSgpOworCisgICAgICAgIHRoaXMuYWRkKCBuZXcgTWVzaCggZ2VvbWV0cnkyLCBuZXcgTWVz
aEJhc2ljTWF0ZXJpYWwoIHsgc2lkZTogQmFja1NpZGUsIGZvZzogZmFsc2UgfSApICkgKTsKIAog
ICAgICAgICB0aGlzLnVwZGF0ZSgpOwogCiAgICAgfQogCi0gICAgUmVjdEFyZWFMaWdodEhlbHBl
ci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBPYmplY3QzRC5wcm90b3R5cGUgKTsKKyAgICBS
ZWN0QXJlYUxpZ2h0SGVscGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIExpbmUucHJvdG90
eXBlICk7CiAgICAgUmVjdEFyZWFMaWdodEhlbHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBS
ZWN0QXJlYUxpZ2h0SGVscGVyOwogCi0gICAgUmVjdEFyZWFMaWdodEhlbHBlci5wcm90b3R5cGUu
ZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKLQotICAgICAgICB0aGlzLmNoaWxkcmVuWyAwIF0uZ2Vv
bWV0cnkuZGlzcG9zZSgpOwotICAgICAgICB0aGlzLmNoaWxkcmVuWyAwIF0ubWF0ZXJpYWwuZGlz
cG9zZSgpOwotCi0gICAgfTsKLQogICAgIFJlY3RBcmVhTGlnaHRIZWxwZXIucHJvdG90eXBlLnVw
ZGF0ZSA9IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAvLyBjYWxjdWxhdGUgbmV3IGRpbWVuc2lv
bnMgb2YgdGhlIGhlbHBlcgorICAgICAgICB0aGlzLnNjYWxlLnNldCggMC41ICogdGhpcy5saWdo
dC53aWR0aCwgMC41ICogdGhpcy5saWdodC5oZWlnaHQsIDEgKTsKIAotICAgICAgICB2YXIgaHgg
PSB0aGlzLmxpZ2h0LndpZHRoICogMC41OwotICAgICAgICB2YXIgaHkgPSB0aGlzLmxpZ2h0Lmhl
aWdodCAqIDAuNTsKKyAgICAgICAgaWYgKCB0aGlzLmNvbG9yICE9PSB1bmRlZmluZWQgKSB7CiAK
LSAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5saW5lLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9z
aXRpb247Ci0gICAgICAgIHZhciBhcnJheSA9IHBvc2l0aW9uLmFycmF5OworICAgICAgICAgICAg
dGhpcy5tYXRlcmlhbC5jb2xvci5zZXQoIHRoaXMuY29sb3IgKTsKKyAgICAgICAgICAgIHRoaXMu
Y2hpbGRyZW5bIDAgXS5tYXRlcmlhbC5jb2xvci5zZXQoIHRoaXMuY29sb3IgKTsKIAotICAgICAg
ICAvLyB1cGRhdGUgdmVydGljZXMKKyAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICBhcnJheVsg
MCBdID0gaHg7IGFycmF5WyAxIF0gPSAtIGh5OyBhcnJheVsgMiBdID0gMDsKLSAgICAgICAgYXJy
YXlbIDMgXSA9IGh4OyBhcnJheVsgNCBdID0gaHk7IGFycmF5WyA1IF0gPSAwOwotICAgICAgICBh
cnJheVsgNiBdID0gLSBoeDsgYXJyYXlbIDcgXSA9IGh5OyBhcnJheVsgOCBdID0gMDsKLSAgICAg
ICAgYXJyYXlbIDkgXSA9IC0gaHg7IGFycmF5WyAxMCBdID0gLSBoeTsgYXJyYXlbIDExIF0gPSAw
OwotICAgICAgICBhcnJheVsgMTIgXSA9IGh4OyBhcnJheVsgMTMgXSA9IC0gaHk7IGFycmF5WyAx
NCBdID0gMDsKKyAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwuY29sb3IuY29weSggdGhpcy5saWdo
dC5jb2xvciApLm11bHRpcGx5U2NhbGFyKCB0aGlzLmxpZ2h0LmludGVuc2l0eSApOwogCi0gICAg
ICAgIHBvc2l0aW9uLm5lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIHByZXZlbnQg
aHVlIHNoaWZ0CisgICAgICAgICAgICB2YXIgYyA9IHRoaXMubWF0ZXJpYWwuY29sb3I7CisgICAg
ICAgICAgICB2YXIgbWF4ID0gTWF0aC5tYXgoIGMuciwgYy5nLCBjLmIgKTsKKyAgICAgICAgICAg
IGlmICggbWF4ID4gMSApIGMubXVsdGlwbHlTY2FsYXIoIDEgLyBtYXggKTsKIAotICAgICAgICBp
ZiAoIHRoaXMuY29sb3IgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHRoaXMuY2hpbGRy
ZW5bIDAgXS5tYXRlcmlhbC5jb2xvci5jb3B5KCB0aGlzLm1hdGVyaWFsLmNvbG9yICk7CiAKLSAg
ICAgICAgICAgIHRoaXMubGluZS5tYXRlcmlhbC5jb2xvci5zZXQoIHRoaXMuY29sb3IgKTsKKyAg
ICAgICAgfQogCi0gICAgICAgIH0gZWxzZSB7CisgICAgfTsKIAotICAgICAgICAgICAgdGhpcy5s
aW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkoIHRoaXMubGlnaHQuY29sb3IgKTsKKyAgICBSZWN0QXJl
YUxpZ2h0SGVscGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgewogCi0gICAgICAg
IH0KKyAgICAgICAgdGhpcy5nZW9tZXRyeS5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMubWF0ZXJp
YWwuZGlzcG9zZSgpOworICAgICAgICB0aGlzLmNoaWxkcmVuWyAwIF0uZ2VvbWV0cnkuZGlzcG9z
ZSgpOworICAgICAgICB0aGlzLmNoaWxkcmVuWyAwIF0ubWF0ZXJpYWwuZGlzcG9zZSgpOwogCiAg
ICAgfTsKIApAQCAtNDQzNDIsNiArNDU4MjEsMTU2IEBACiAKICAgICB9KCk7CiAKKyAgICAvKioK
KyAgICAgKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExhbmds
ZXkKKyAgICAgKi8KKworICAgIGZ1bmN0aW9uIExpZ2h0UHJvYmVIZWxwZXIoIGxpZ2h0UHJvYmUs
IHNpemUgKSB7CisKKyAgICAgICAgdGhpcy5saWdodFByb2JlID0gbGlnaHRQcm9iZTsKKworICAg
ICAgICB0aGlzLnNpemUgPSBzaXplOworCisgICAgICAgIHZhciBkZWZpbmVzID0ge307CisgICAg
ICAgIGRlZmluZXNbICdHQU1NQV9PVVRQVVQnIF0gPSAiIjsKKworICAgICAgICAvLyBtYXRlcmlh
bAorICAgICAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgU2hhZGVyTWF0ZXJpYWwoIHsKKworICAgICAg
ICAgICAgZGVmaW5lczogZGVmaW5lcywKKworICAgICAgICAgICAgdW5pZm9ybXM6IHsKKworICAg
ICAgICAgICAgICAgIHNoOiB7IHZhbHVlOiB0aGlzLmxpZ2h0UHJvYmUuc2guY29lZmZpY2llbnRz
IH0sIC8vIGJ5IHJlZmVyZW5jZQorCisgICAgICAgICAgICAgICAgaW50ZW5zaXR5OiB7IHZhbHVl
OiB0aGlzLmxpZ2h0UHJvYmUuaW50ZW5zaXR5IH0KKworICAgICAgICAgICAgfSwKKworICAgICAg
ICAgICAgdmVydGV4U2hhZGVyOiBbCisKKyAgICAgICAgICAgICAgICAndmFyeWluZyB2ZWMzIHZO
b3JtYWw7JywKKworICAgICAgICAgICAgICAgICd2b2lkIG1haW4oKSB7JywKKworICAgICAgICAg
ICAgICAgICcgICB2Tm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTsn
LAorCisgICAgICAgICAgICAgICAgJyAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAq
IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsnLAorCisgICAgICAgICAg
ICAgICAgJ30nLAorCisgICAgICAgICAgICBdLmpvaW4oICdcbicgKSwKKworICAgICAgICAgICAg
ZnJhZ21lbnRTaGFkZXI6IFsKKworICAgICAgICAgICAgICAgICcjZGVmaW5lIFJFQ0lQUk9DQUxf
UEkgMC4zMTgzMDk4ODYnLAorCisgICAgICAgICAgICAgICAgJ3ZlYzMgaW52ZXJzZVRyYW5zZm9y
bURpcmVjdGlvbiggaW4gdmVjMyBub3JtYWwsIGluIG1hdDQgbWF0cml4ICkgeycsCisKKyAgICAg
ICAgICAgICAgICAnICAgLy8gbWF0cml4IGlzIGFzc3VtZWQgdG8gYmUgb3J0aG9nb25hbCcsCisK
KyAgICAgICAgICAgICAgICAnICAgcmV0dXJuIG5vcm1hbGl6ZSggKCB2ZWM0KCBub3JtYWwsIDAu
MCApICogbWF0cml4ICkueHl6ICk7JywKKworICAgICAgICAgICAgICAgICd9JywKKworICAgICAg
ICAgICAgICAgICd2ZWMzIGxpbmVhclRvT3V0cHV0KCBpbiB2ZWMzIGEgKSB7JywKKworICAgICAg
ICAgICAgICAgICcgICAjaWZkZWYgR0FNTUFfT1VUUFVUJywKKworICAgICAgICAgICAgICAgICcg
ICAgICAgcmV0dXJuIHBvdyggYSwgdmVjMyggMS4wIC8gZmxvYXQoIEdBTU1BX0ZBQ1RPUiApICkg
KTsnLAorCisgICAgICAgICAgICAgICAgJyAgICNlbHNlJywKKworICAgICAgICAgICAgICAgICcg
ICAgICAgcmV0dXJuIGE7JywKKworICAgICAgICAgICAgICAgICcgICAjZW5kaWYnLAorCisgICAg
ICAgICAgICAgICAgJ30nLAorCisgICAgICAgICAgICAgICAgJy8vIHNvdXJjZTogaHR0cHM6Ly9n
cmFwaGljcy5zdGFuZm9yZC5lZHUvcGFwZXJzL2Vudm1hcC9lbnZtYXAucGRmJywKKyAgICAgICAg
ICAgICAgICAndmVjMyBzaEdldElycmFkaWFuY2VBdCggaW4gdmVjMyBub3JtYWwsIGluIHZlYzMg
c2hDb2VmZmljaWVudHNbIDkgXSApIHsnLAorCisgICAgICAgICAgICAgICAgJyAgIC8vIG5vcm1h
bCBpcyBhc3N1bWVkIHRvIGhhdmUgdW5pdCBsZW5ndGgnLAorCisgICAgICAgICAgICAgICAgJyAg
IGZsb2F0IHggPSBub3JtYWwueCwgeSA9IG5vcm1hbC55LCB6ID0gbm9ybWFsLno7JywKKworICAg
ICAgICAgICAgICAgICcgICAvLyBiYW5kIDAnLAorICAgICAgICAgICAgICAgICcgICB2ZWMzIHJl
c3VsdCA9IHNoQ29lZmZpY2llbnRzWyAwIF0gKiAwLjg4NjIyNzsnLAorCisgICAgICAgICAgICAg
ICAgJyAgIC8vIGJhbmQgMScsCisgICAgICAgICAgICAgICAgJyAgIHJlc3VsdCArPSBzaENvZWZm
aWNpZW50c1sgMSBdICogMi4wICogMC41MTE2NjQgKiB5OycsCisgICAgICAgICAgICAgICAgJyAg
IHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6OycsCisg
ICAgICAgICAgICAgICAgJyAgIHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMyBdICogMi4wICog
MC41MTE2NjQgKiB4OycsCisKKyAgICAgICAgICAgICAgICAnICAgLy8gYmFuZCAyJywKKyAgICAg
ICAgICAgICAgICAnICAgcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQy
OTA0MyAqIHggKiB5OycsCisgICAgICAgICAgICAgICAgJyAgIHJlc3VsdCArPSBzaENvZWZmaWNp
ZW50c1sgNSBdICogMi4wICogMC40MjkwNDMgKiB5ICogejsnLAorICAgICAgICAgICAgICAgICcg
ICByZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAu
MjQ3NzA4ICk7JywKKyAgICAgICAgICAgICAgICAnICAgcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRz
WyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6OycsCisgICAgICAgICAgICAgICAgJyAgIHJl
c3VsdCArPSBzaENvZWZmaWNpZW50c1sgOCBdICogMC40MjkwNDMgKiAoIHggKiB4IC0geSAqIHkg
KTsnLAorCisgICAgICAgICAgICAgICAgJyAgIHJldHVybiByZXN1bHQ7JywKKworICAgICAgICAg
ICAgICAgICd9JywKKworICAgICAgICAgICAgICAgICd1bmlmb3JtIHZlYzMgc2hbIDkgXTsgLy8g
c2ggY29lZmZpY2llbnRzJywKKworICAgICAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGludGVu
c2l0eTsgLy8gbGlnaHQgcHJvYmUgaW50ZW5zaXR5JywKKworICAgICAgICAgICAgICAgICd2YXJ5
aW5nIHZlYzMgdk5vcm1hbDsnLAorCisgICAgICAgICAgICAgICAgJ3ZvaWQgbWFpbigpIHsnLAor
CisgICAgICAgICAgICAgICAgJyAgIHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCB2Tm9ybWFsICk7
JywKKworICAgICAgICAgICAgICAgICcgICB2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5z
Zm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7JywKKworICAgICAgICAgICAgICAg
ICcgICB2ZWMzIGlycmFkaWFuY2UgPSBzaEdldElycmFkaWFuY2VBdCggd29ybGROb3JtYWwsIHNo
ICk7JywKKworICAgICAgICAgICAgICAgICcgICB2ZWMzIG91dGdvaW5nTGlnaHQgPSBSRUNJUFJP
Q0FMX1BJICogaXJyYWRpYW5jZSAqIGludGVuc2l0eTsnLAorCisgICAgICAgICAgICAgICAgJyAg
IG91dGdvaW5nTGlnaHQgPSBsaW5lYXJUb091dHB1dCggb3V0Z29pbmdMaWdodCApOycsCisKKyAg
ICAgICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgMS4w
ICk7JywKKworICAgICAgICAgICAgICAgICd9JworCisgICAgICAgICAgICBdLmpvaW4oICdcbicg
KQorCisgICAgICAgIH0gKTsKKworICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgU3BoZXJlQnVm
ZmVyR2VvbWV0cnkoIDEsIDMyLCAxNiApOworCisgICAgICAgIE1lc2guY2FsbCggdGhpcywgZ2Vv
bWV0cnksIG1hdGVyaWFsICk7CisKKyAgICAgICAgdGhpcy5vbkJlZm9yZVJlbmRlcigpOworCisg
ICAgfQorCisgICAgTGlnaHRQcm9iZUhlbHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBN
ZXNoLnByb3RvdHlwZSApOworICAgIExpZ2h0UHJvYmVIZWxwZXIucHJvdG90eXBlLmNvbnN0cnVj
dG9yID0gTGlnaHRQcm9iZUhlbHBlcjsKKworICAgIExpZ2h0UHJvYmVIZWxwZXIucHJvdG90eXBl
LmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgdGhpcy5nZW9tZXRyeS5kaXNwb3Nl
KCk7CisgICAgICAgIHRoaXMubWF0ZXJpYWwuZGlzcG9zZSgpOworCisgICAgfTsKKworICAgIExp
Z2h0UHJvYmVIZWxwZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyID0gZnVuY3Rpb24gKCkgewor
CisgICAgICAgIHJldHVybiBmdW5jdGlvbiB1cGRhdGUoKSB7CisKKyAgICAgICAgICAgIHRoaXMu
cG9zaXRpb24uY29weSggdGhpcy5saWdodFByb2JlLnBvc2l0aW9uICk7CisKKyAgICAgICAgICAg
IHRoaXMuc2NhbGUuc2V0KCAxLCAxLCAxICkubXVsdGlwbHlTY2FsYXIoIHRoaXMuc2l6ZSApOwor
CisgICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLmludGVuc2l0eS52YWx1ZSA9IHRo
aXMubGlnaHRQcm9iZS5pbnRlbnNpdHk7CisKKyAgICAgICAgfTsKKworICAgIH0oKTsKKwogICAg
IC8qKgogICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCiAgICAgICov
CkBAIC00NDM4Myw4ICs0NjAxMiwyOCBAQAogCiAgICAgfQogCi0gICAgR3JpZEhlbHBlci5wcm90
b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBMaW5lU2VnbWVudHMucHJvdG90eXBlICk7Ci0gICAgR3Jp
ZEhlbHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHcmlkSGVscGVyOworICAgIEdyaWRIZWxw
ZXIucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggTGluZVNlZ21lbnRz
LnByb3RvdHlwZSApLCB7CisKKyAgICAgICAgY29uc3RydWN0b3I6IEdyaWRIZWxwZXIsCisKKyAg
ICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisKKyAgICAgICAgICAgIExpbmVTZWdt
ZW50cy5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKKworICAgICAgICAgICAg
dGhpcy5nZW9tZXRyeS5jb3B5KCBzb3VyY2UuZ2VvbWV0cnkgKTsKKyAgICAgICAgICAgIHRoaXMu
bWF0ZXJpYWwuY29weSggc291cmNlLm1hdGVyaWFsICk7CisKKyAgICAgICAgICAgIHJldHVybiB0
aGlzOworCisgICAgICAgIH0sCisKKyAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKKworICAg
ICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApOworCisg
ICAgICAgIH0KKworICAgIH0gKTsKIAogICAgIC8qKgogICAgICAqIEBhdXRob3IgbXJkb29iIC8g
aHR0cDovL21yZG9vYi5jb20vCkBAIC00NDQ3Myw2ICs0NjEyMiwxMDYgQEAKICAgICBQb2xhckdy
aWRIZWxwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTGluZVNlZ21lbnRzLnByb3RvdHlw
ZSApOwogICAgIFBvbGFyR3JpZEhlbHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2xhckdy
aWRIZWxwZXI7CiAKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIE11Z2VuODcgLyBodHRwOi8vZ2l0
aHViLmNvbS9NdWdlbjg3CisgICAgICovCisKKyAgICBmdW5jdGlvbiBQb3NpdGlvbmFsQXVkaW9I
ZWxwZXIoIGF1ZGlvLCByYW5nZSwgZGl2aXNpb25zSW5uZXJBbmdsZSwgZGl2aXNpb25zT3V0ZXJB
bmdsZSApIHsKKworICAgICAgICB0aGlzLmF1ZGlvID0gYXVkaW87CisgICAgICAgIHRoaXMucmFu
Z2UgPSByYW5nZSB8fCAxOworICAgICAgICB0aGlzLmRpdmlzaW9uc0lubmVyQW5nbGUgPSBkaXZp
c2lvbnNJbm5lckFuZ2xlIHx8IDE2OworICAgICAgICB0aGlzLmRpdmlzaW9uc091dGVyQW5nbGUg
PSBkaXZpc2lvbnNPdXRlckFuZ2xlIHx8IDI7CisKKyAgICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3
IEJ1ZmZlckdlb21ldHJ5KCk7CisgICAgICAgIHZhciBkaXZpc2lvbnMgPSB0aGlzLmRpdmlzaW9u
c0lubmVyQW5nbGUgKyB0aGlzLmRpdmlzaW9uc091dGVyQW5nbGUgKiAyOworICAgICAgICB2YXIg
cG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheSggKCBkaXZpc2lvbnMgKiAzICsgMyApICogMyAp
OworICAgICAgICBnZW9tZXRyeS5hZGRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBCdWZmZXJB
dHRyaWJ1dGUoIHBvc2l0aW9ucywgMyApICk7CisKKyAgICAgICAgdmFyIG1hdGVyaWFsSW5uZXJB
bmdsZSA9IG5ldyBMaW5lQmFzaWNNYXRlcmlhbCggeyBjb2xvcjogMHgwMGZmMDAgfSApOworICAg
ICAgICB2YXIgbWF0ZXJpYWxPdXRlckFuZ2xlID0gbmV3IExpbmVCYXNpY01hdGVyaWFsKCB7IGNv
bG9yOiAweGZmZmYwMCB9ICk7CisKKyAgICAgICAgTGluZS5jYWxsKCB0aGlzLCBnZW9tZXRyeSwg
WyBtYXRlcmlhbE91dGVyQW5nbGUsIG1hdGVyaWFsSW5uZXJBbmdsZSBdICk7CisKKyAgICAgICAg
dGhpcy51cGRhdGUoKTsKKworICAgIH0KKworICAgIFBvc2l0aW9uYWxBdWRpb0hlbHBlci5wcm90
b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBMaW5lLnByb3RvdHlwZSApOworICAgIFBvc2l0aW9uYWxB
dWRpb0hlbHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb3NpdGlvbmFsQXVkaW9IZWxwZXI7
CisKKyAgICBQb3NpdGlvbmFsQXVkaW9IZWxwZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9u
ICgpIHsKKworICAgICAgICB2YXIgYXVkaW8gPSB0aGlzLmF1ZGlvOworICAgICAgICB2YXIgcmFu
Z2UgPSB0aGlzLnJhbmdlOworICAgICAgICB2YXIgZGl2aXNpb25zSW5uZXJBbmdsZSA9IHRoaXMu
ZGl2aXNpb25zSW5uZXJBbmdsZTsKKyAgICAgICAgdmFyIGRpdmlzaW9uc091dGVyQW5nbGUgPSB0
aGlzLmRpdmlzaW9uc091dGVyQW5nbGU7CisKKyAgICAgICAgdmFyIGNvbmVJbm5lckFuZ2xlID0g
X01hdGguZGVnVG9SYWQoIGF1ZGlvLnBhbm5lci5jb25lSW5uZXJBbmdsZSApOworICAgICAgICB2
YXIgY29uZU91dGVyQW5nbGUgPSBfTWF0aC5kZWdUb1JhZCggYXVkaW8ucGFubmVyLmNvbmVPdXRl
ckFuZ2xlICk7CisKKyAgICAgICAgdmFyIGhhbGZDb25lSW5uZXJBbmdsZSA9IGNvbmVJbm5lckFu
Z2xlIC8gMjsKKyAgICAgICAgdmFyIGhhbGZDb25lT3V0ZXJBbmdsZSA9IGNvbmVPdXRlckFuZ2xl
IC8gMjsKKworICAgICAgICB2YXIgc3RhcnQgPSAwOworICAgICAgICB2YXIgY291bnQgPSAwOwor
ICAgICAgICB2YXIgaSwgc3RyaWRlOworCisgICAgICAgIHZhciBnZW9tZXRyeSA9IHRoaXMuZ2Vv
bWV0cnk7CisgICAgICAgIHZhciBwb3NpdGlvbkF0dHJpYnV0ZSA9IGdlb21ldHJ5LmF0dHJpYnV0
ZXMucG9zaXRpb247CisKKyAgICAgICAgZ2VvbWV0cnkuY2xlYXJHcm91cHMoKTsKKworICAgICAg
ICAvLworCisgICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlU2VnbWVudCggZnJvbSwgdG8sIGRpdmlz
aW9ucywgbWF0ZXJpYWxJbmRleCApIHsKKworICAgICAgICAgICAgdmFyIHN0ZXAgPSAoIHRvIC0g
ZnJvbSApIC8gZGl2aXNpb25zOworCisgICAgICAgICAgICBwb3NpdGlvbkF0dHJpYnV0ZS5zZXRY
WVooIHN0YXJ0LCAwLCAwLCAwICk7CisgICAgICAgICAgICBjb3VudCArKzsKKworICAgICAgICAg
ICAgZm9yICggaSA9IGZyb207IGkgPCB0bzsgaSArPSBzdGVwICkgeworCisgICAgICAgICAgICAg
ICAgc3RyaWRlID0gc3RhcnQgKyBjb3VudDsKKworICAgICAgICAgICAgICAgIHBvc2l0aW9uQXR0
cmlidXRlLnNldFhZWiggc3RyaWRlLCBNYXRoLnNpbiggaSApICogcmFuZ2UsIDAsIE1hdGguY29z
KCBpICkgKiByYW5nZSApOworICAgICAgICAgICAgICAgIHBvc2l0aW9uQXR0cmlidXRlLnNldFhZ
Wiggc3RyaWRlICsgMSwgTWF0aC5zaW4oIE1hdGgubWluKCBpICsgc3RlcCwgdG8gKSApICogcmFu
Z2UsIDAsIE1hdGguY29zKCBNYXRoLm1pbiggaSArIHN0ZXAsIHRvICkgKSAqIHJhbmdlICk7Cisg
ICAgICAgICAgICAgICAgcG9zaXRpb25BdHRyaWJ1dGUuc2V0WFlaKCBzdHJpZGUgKyAyLCAwLCAw
LCAwICk7CisKKyAgICAgICAgICAgICAgICBjb3VudCArPSAzOworCisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGdlb21ldHJ5LmFkZEdyb3VwKCBzdGFydCwgY291bnQsIG1hdGVyaWFsSW5k
ZXggKTsKKworICAgICAgICAgICAgc3RhcnQgKz0gY291bnQ7CisgICAgICAgICAgICBjb3VudCA9
IDA7CisKKyAgICAgICAgfQorCisgICAgICAgIC8vCisKKyAgICAgICAgZ2VuZXJhdGVTZWdtZW50
KCAtIGhhbGZDb25lT3V0ZXJBbmdsZSwgLSBoYWxmQ29uZUlubmVyQW5nbGUsIGRpdmlzaW9uc091
dGVyQW5nbGUsIDAgKTsKKyAgICAgICAgZ2VuZXJhdGVTZWdtZW50KCAtIGhhbGZDb25lSW5uZXJB
bmdsZSwgaGFsZkNvbmVJbm5lckFuZ2xlLCBkaXZpc2lvbnNJbm5lckFuZ2xlLCAxICk7CisgICAg
ICAgIGdlbmVyYXRlU2VnbWVudCggaGFsZkNvbmVJbm5lckFuZ2xlLCBoYWxmQ29uZU91dGVyQW5n
bGUsIGRpdmlzaW9uc091dGVyQW5nbGUsIDAgKTsKKworICAgICAgICAvLworCisgICAgICAgIHBv
c2l0aW9uQXR0cmlidXRlLm5lZWRzVXBkYXRlID0gdHJ1ZTsKKworICAgICAgICBpZiAoIGNvbmVJ
bm5lckFuZ2xlID09PSBjb25lT3V0ZXJBbmdsZSApIHRoaXMubWF0ZXJpYWxbIDAgXS52aXNpYmxl
ID0gZmFsc2U7CisKKyAgICB9OworCisgICAgUG9zaXRpb25hbEF1ZGlvSGVscGVyLnByb3RvdHlw
ZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworCisgICAgICAgIHRoaXMuZ2VvbWV0cnkuZGlzcG9z
ZSgpOworICAgICAgICB0aGlzLm1hdGVyaWFsWyAwIF0uZGlzcG9zZSgpOworICAgICAgICB0aGlz
Lm1hdGVyaWFsWyAxIF0uZGlzcG9zZSgpOworCisgICAgfTsKKwogICAgIC8qKgogICAgICAqIEBh
dXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCiAgICAgICogQGF1dGhvciBXZXN0TGFu
Z2xleSAvIGh0dHA6Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5CkBAIC00NDY1MCw3ICs0NjM5OSw3
IEBACiAgICAgICAgICAgICB2Mi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIHRoaXMubGlnaHQudGFy
Z2V0Lm1hdHJpeFdvcmxkICk7CiAgICAgICAgICAgICB2My5zdWJWZWN0b3JzKCB2MiwgdjEgKTsK
IAotICAgICAgICAgICAgdGhpcy5saWdodFBsYW5lLmxvb2tBdCggdjMgKTsKKyAgICAgICAgICAg
IHRoaXMubGlnaHRQbGFuZS5sb29rQXQoIHYyICk7CiAKICAgICAgICAgICAgIGlmICggdGhpcy5j
b2xvciAhPT0gdW5kZWZpbmVkICkgewogCkBAIC00NDY2NCw3ICs0NjQxMyw3IEBACiAKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgdGhpcy50YXJnZXRMaW5lLmxvb2tBdCggdjMgKTsKKyAg
ICAgICAgICAgIHRoaXMudGFyZ2V0TGluZS5sb29rQXQoIHYyICk7CiAgICAgICAgICAgICB0aGlz
LnRhcmdldExpbmUuc2NhbGUueiA9IHYzLmxlbmd0aCgpOwogCiAgICAgICAgIH07CkBAIC00NDgy
MiwxMCArNDY1NzEsMTAgQEAKIAogICAgICAgICAgICAgdmFyIHcgPSAxLCBoID0gMTsKIAotICAg
ICAgICAgICAgLy8gd2UgbmVlZCBqdXN0IGNhbWVyYSBwcm9qZWN0aW9uIG1hdHJpeAorICAgICAg
ICAgICAgLy8gd2UgbmVlZCBqdXN0IGNhbWVyYSBwcm9qZWN0aW9uIG1hdHJpeCBpbnZlcnNlCiAg
ICAgICAgICAgICAvLyB3b3JsZCBtYXRyaXggbXVzdCBiZSBpZGVudGl0eQogCi0gICAgICAgICAg
ICBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5jb3B5KCB0aGlzLmNhbWVyYS5wcm9qZWN0aW9uTWF0
cml4ICk7CisgICAgICAgICAgICBjYW1lcmEucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSgg
dGhpcy5jYW1lcmEucHJvamVjdGlvbk1hdHJpeEludmVyc2UgKTsKIAogICAgICAgICAgICAgLy8g
Y2VudGVyIC8gdGFyZ2V0CiAKQEAgLTQ0OTY3LDE3ICs0NjcxNiwzMyBAQAogCiAgICAgfTsKIAor
ICAgIEJveEhlbHBlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uICggc291cmNlICkgeworCisg
ICAgICAgIExpbmVTZWdtZW50cy5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsK
KworICAgICAgICB0aGlzLm9iamVjdCA9IHNvdXJjZS5vYmplY3Q7CisKKyAgICAgICAgcmV0dXJu
IHRoaXM7CisKKyAgICB9OworCisgICAgQm94SGVscGVyLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0
aW9uICgpIHsKKworICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0
aGlzICk7CisKKyAgICB9OworCiAgICAgLyoqCiAgICAgICogQGF1dGhvciBXZXN0TGFuZ2xleSAv
IGh0dHA6Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5CiAgICAgICovCiAKLSAgICBmdW5jdGlvbiBC
b3gzSGVscGVyKCBib3gsIGhleCApIHsKKyAgICBmdW5jdGlvbiBCb3gzSGVscGVyKCBib3gsIGNv
bG9yICkgewogCiAgICAgICAgIHRoaXMudHlwZSA9ICdCb3gzSGVscGVyJzsKIAogICAgICAgICB0
aGlzLmJveCA9IGJveDsKIAotICAgICAgICB2YXIgY29sb3IgPSAoIGhleCAhPT0gdW5kZWZpbmVk
ICkgPyBoZXggOiAweGZmZmYwMDsKKyAgICAgICAgY29sb3IgPSBjb2xvciB8fCAweGZmZmYwMDsK
IAogICAgICAgICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSggWyAwLCAxLCAxLCAyLCAy
LCAzLCAzLCAwLCA0LCA1LCA1LCA2LCA2LCA3LCA3LCA0LCAwLCA0LCAxLCA1LCAyLCA2LCAzLCA3
IF0gKTsKIApAQCAtNDUwOTEsOCArNDY4NTYsMTAgQEAKIAogICAgICAgICBPYmplY3QzRC5jYWxs
KCB0aGlzICk7CiAKLSAgICAgICAgaWYgKCBjb2xvciA9PT0gdW5kZWZpbmVkICkgY29sb3IgPSAw
eGZmZmYwMDsKKyAgICAgICAgaWYgKCBkaXIgPT09IHVuZGVmaW5lZCApIGRpciA9IG5ldyBWZWN0
b3IzKCAwLCAwLCAxICk7CisgICAgICAgIGlmICggb3JpZ2luID09PSB1bmRlZmluZWQgKSBvcmln
aW4gPSBuZXcgVmVjdG9yMyggMCwgMCwgMCApOwogICAgICAgICBpZiAoIGxlbmd0aCA9PT0gdW5k
ZWZpbmVkICkgbGVuZ3RoID0gMTsKKyAgICAgICAgaWYgKCBjb2xvciA9PT0gdW5kZWZpbmVkICkg
Y29sb3IgPSAweGZmZmYwMDsKICAgICAgICAgaWYgKCBoZWFkTGVuZ3RoID09PSB1bmRlZmluZWQg
KSBoZWFkTGVuZ3RoID0gMC4yICogbGVuZ3RoOwogICAgICAgICBpZiAoIGhlYWRXaWR0aCA9PT0g
dW5kZWZpbmVkICkgaGVhZFdpZHRoID0gMC4yICogaGVhZExlbmd0aDsKIApAQCAtNDUxNzEsOCAr
NDY5MzgsMjUgQEAKIAogICAgIEFycm93SGVscGVyLnByb3RvdHlwZS5zZXRDb2xvciA9IGZ1bmN0
aW9uICggY29sb3IgKSB7CiAKLSAgICAgICAgdGhpcy5saW5lLm1hdGVyaWFsLmNvbG9yLmNvcHko
IGNvbG9yICk7Ci0gICAgICAgIHRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5jb3B5KCBjb2xvciAp
OworICAgICAgICB0aGlzLmxpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KCBjb2xvciApOworICAgICAg
ICB0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3Iuc2V0KCBjb2xvciApOworCisgICAgfTsKKworICAg
IEFycm93SGVscGVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisKKyAg
ICAgICAgT2JqZWN0M0QucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlLCBmYWxzZSAp
OworCisgICAgICAgIHRoaXMubGluZS5jb3B5KCBzb3VyY2UubGluZSApOworICAgICAgICB0aGlz
LmNvbmUuY29weSggc291cmNlLmNvbmUgKTsKKworICAgICAgICByZXR1cm4gdGhpczsKKworICAg
IH07CisKKyAgICBBcnJvd0hlbHBlci5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CisK
KyAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApOwogCiAg
ICAgfTsKIApAQCAtNDU1NzAsNiArNDczNTQsMTcgQEAKIAogICAgIH0KIAorICAgIE9iamVjdC5h
c3NpZ24oIE9iamVjdExvYWRlci5wcm90b3R5cGUsIHsKKworICAgICAgICBzZXRUZXh0dXJlUGF0
aDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKworICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhS
RUUuT2JqZWN0TG9hZGVyOiAuc2V0VGV4dHVyZVBhdGgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5z
ZXRSZXNvdXJjZVBhdGgoKS4nICk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRSZXNvdXJj
ZVBhdGgoIHZhbHVlICk7CisKKyAgICAgICAgfQorCisgICAgfSApOworCiAgICAgLy8KIAogICAg
IE9iamVjdC5hc3NpZ24oIEJveDIucHJvdG90eXBlLCB7CkBAIC00NjEyMyw2ICs0NzkxOCwxMiBA
QAogCiAgICAgfSApOwogCisgICAgU2tpbm5lZE1lc2gucHJvdG90eXBlLmluaXRCb25lcyA9IGZ1
bmN0aW9uICgpIHsKKworICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuU2tpbm5lZE1lc2g6
IGluaXRCb25lcygpIGhhcyBiZWVuIHJlbW92ZWQuJyApOworCisgICAgfTsKKwogICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eSggQ3VydmUucHJvdG90eXBlLCAnX19hcmNMZW5ndGhEaXZpc2lvbnMn
LCB7CiAKICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CkBAIC00NjM5OSw2ICs0ODIwMCwyMCBA
QAogCiAgICAgICAgICAgICB9CiAgICAgICAgIH0sCisKKyAgICAgICAgb3ZlcmRyYXc6IHsKKyAg
ICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworCisgICAgICAgICAgICAgICAgY29uc29sZS53
YXJuKCAnVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLicgKTsKKwor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKCkgeworCisgICAgICAg
ICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVl
biByZW1vdmVkLicgKTsKKworICAgICAgICAgICAgfQorICAgICAgICB9LAorCiAgICAgICAgIHdy
YXBSR0I6IHsKICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewogCkBAIC00NjQ2NSw0MSAr
NDgyODAsNDMgQEAKIAogICAgIE9iamVjdC5hc3NpZ24oIFdlYkdMUmVuZGVyZXIucHJvdG90eXBl
LCB7CiAKKyAgICAgICAgY2xlYXJUYXJnZXQ6IGZ1bmN0aW9uICggcmVuZGVyVGFyZ2V0LCBjb2xv
ciwgZGVwdGgsIHN0ZW5jaWwgKSB7CisKKyAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVF
LldlYkdMUmVuZGVyZXI6IC5jbGVhclRhcmdldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAu
c2V0UmVuZGVyVGFyZ2V0KCkgYW5kIC5jbGVhcigpIGluc3RlYWQuJyApOworICAgICAgICAgICAg
dGhpcy5zZXRSZW5kZXJUYXJnZXQoIHJlbmRlclRhcmdldCApOworICAgICAgICAgICAgdGhpcy5j
bGVhciggY29sb3IsIGRlcHRoLCBzdGVuY2lsICk7CisKKyAgICAgICAgfSwKICAgICAgICAgYW5p
bWF0ZTogZnVuY3Rpb24gKCBjYWxsYmFjayApIHsKIAogICAgICAgICAgICAgY29uc29sZS53YXJu
KCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFuaW1hdGUoKSBpcyBub3cgLnNldEFuaW1hdGlvbkxv
b3AoKS4nICk7CiAgICAgICAgICAgICB0aGlzLnNldEFuaW1hdGlvbkxvb3AoIGNhbGxiYWNrICk7
CiAKICAgICAgICAgfSwKLQogICAgICAgICBnZXRDdXJyZW50UmVuZGVyVGFyZ2V0OiBmdW5jdGlv
biAoKSB7CiAKICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6
IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4nICk7
CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKTsKIAogICAgICAgICB9
LAotCiAgICAgICAgIGdldE1heEFuaXNvdHJvcHk6IGZ1bmN0aW9uICgpIHsKIAogICAgICAgICAg
ICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldE1heEFuaXNvdHJvcHko
KSBpcyBub3cgLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCkuJyApOwogICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKTsKIAogICAgICAg
ICB9LAotCiAgICAgICAgIGdldFByZWNpc2lvbjogZnVuY3Rpb24gKCkgewogCiAgICAgICAgICAg
ICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0UHJlY2lzaW9uKCkgaXMg
bm93IC5jYXBhYmlsaXRpZXMucHJlY2lzaW9uLicgKTsKICAgICAgICAgICAgIHJldHVybiB0aGlz
LmNhcGFiaWxpdGllcy5wcmVjaXNpb247CiAKICAgICAgICAgfSwKLQogICAgICAgICByZXNldEdM
U3RhdGU6IGZ1bmN0aW9uICgpIHsKIAogICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUu
V2ViR0xSZW5kZXJlcjogLnJlc2V0R0xTdGF0ZSgpIGlzIG5vdyAuc3RhdGUucmVzZXQoKS4nICk7
CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5yZXNldCgpOwogCiAgICAgICAgIH0sCi0K
ICAgICAgICAgc3VwcG9ydHNGbG9hdFRleHR1cmVzOiBmdW5jdGlvbiAoKSB7CiAKICAgICAgICAg
ICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0Zsb2F0VGV4
dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCBcJ09FU190ZXh0dXJlX2Zsb2F0XCcgKS4n
ICk7CkBAIC00NjU3OCw2ICs0ODM5NSwyNiBAQAogCiAgICAgICAgICAgICBjb25zb2xlLndhcm4o
ICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0RmFjZUN1bGxpbmcoKSBoYXMgYmVlbiByZW1vdmVk
LicgKTsKIAorICAgICAgICB9LAorICAgICAgICBhbGxvY1RleHR1cmVVbml0OiBmdW5jdGlvbiAo
KSB7CisKKyAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5h
bGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7CisKKyAgICAgICAgfSwKKyAg
ICAgICAgc2V0VGV4dHVyZTogZnVuY3Rpb24gKCkgeworCisgICAgICAgICAgICBjb25zb2xlLndh
cm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQu
JyApOworCisgICAgICAgIH0sCisgICAgICAgIHNldFRleHR1cmUyRDogZnVuY3Rpb24gKCkgewor
CisgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4
dHVyZTJEKCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7CisKKyAgICAgICAgfSwKKyAgICAgICAgc2V0
VGV4dHVyZUN1YmU6IGZ1bmN0aW9uICgpIHsKKworICAgICAgICAgICAgY29uc29sZS53YXJuKCAn
VEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4n
ICk7CisKICAgICAgICAgfQogCiAgICAgfSApOwpAQCAtNDY2NzEsNiArNDg1MDgsMjcgQEAKIAog
ICAgIC8vCiAKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyggV2ViR0xSZW5kZXJUYXJnZXRD
dWJlLnByb3RvdHlwZSwgeworCisgICAgICAgIGFjdGl2ZUN1YmVGYWNlOiB7CisgICAgICAgICAg
ICBzZXQ6IGZ1bmN0aW9uICggLyogdmFsdWUgKi8gKSB7CisKKyAgICAgICAgICAgICAgICBjb25z
b2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlclRhcmdldEN1YmU6IC5hY3RpdmVDdWJlRmFjZSBo
YXMgYmVlbiByZW1vdmVkLiBJdCBpcyBub3cgdGhlIHNlY29uZCBwYXJhbWV0ZXIgb2YgV2ViR0xS
ZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoKS4nICk7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSwKKyAgICAgICAgYWN0aXZlTWlwTWFwTGV2ZWw6IHsKKyAgICAgICAgICAgIHNldDogZnVuY3Rp
b24gKCAvKiB2YWx1ZSAqLyApIHsKKworICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RI
UkVFLldlYkdMUmVuZGVyVGFyZ2V0Q3ViZTogLmFjdGl2ZU1pcE1hcExldmVsIGhhcyBiZWVuIHJl
bW92ZWQuIEl0IGlzIG5vdyB0aGUgdGhpcmQgcGFyYW1ldGVyIG9mIFdlYkdMUmVuZGVyZXIuc2V0
UmVuZGVyVGFyZ2V0KCkuJyApOworCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0g
KTsKKworICAgIC8vCisKICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyggV2ViR0xSZW5kZXJU
YXJnZXQucHJvdG90eXBlLCB7CiAKICAgICAgICAgd3JhcFM6IHsKQEAgLTQ2ODI1LDYgKzQ4Njgz
LDEzIEBACiAKICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJWUk1hbmFn
ZXI6IC5zdGFuZGluZyBoYXMgYmVlbiByZW1vdmVkLicgKTsKIAorICAgICAgICAgICAgfQorICAg
ICAgICB9LAorICAgICAgICB1c2VySGVpZ2h0OiB7CisgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9u
ICggLyogdmFsdWUgKi8gKSB7CisKKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJF
RS5XZWJWUk1hbmFnZXI6IC51c2VySGVpZ2h0IGhhcyBiZWVuIHJlbW92ZWQuJyApOworCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNDY4OTMsOTMgKzQ4NzU4LDYzIEBACiAKICAgICB9
OwogCi0gICAgdmFyIEltYWdlVXRpbHMgPSB7Ci0KLSAgICAgICAgY3Jvc3NPcmlnaW46IHVuZGVm
aW5lZCwKKyAgICBJbWFnZVV0aWxzLmNyb3NzT3JpZ2luID0gdW5kZWZpbmVkOwogCi0gICAgICAg
IGxvYWRUZXh0dXJlOiBmdW5jdGlvbiAoIHVybCwgbWFwcGluZywgb25Mb2FkLCBvbkVycm9yICkg
eworICAgIEltYWdlVXRpbHMubG9hZFRleHR1cmUgPSBmdW5jdGlvbiAoIHVybCwgbWFwcGluZywg
b25Mb2FkLCBvbkVycm9yICkgewogCi0gICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5J
bWFnZVV0aWxzLmxvYWRUZXh0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5UZXh0
dXJlTG9hZGVyKCkgaW5zdGVhZC4nICk7CisgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLklt
YWdlVXRpbHMubG9hZFRleHR1cmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLlRleHR1
cmVMb2FkZXIoKSBpbnN0ZWFkLicgKTsKIAotICAgICAgICAgICAgdmFyIGxvYWRlciA9IG5ldyBU
ZXh0dXJlTG9hZGVyKCk7Ci0gICAgICAgICAgICBsb2FkZXIuc2V0Q3Jvc3NPcmlnaW4oIHRoaXMu
Y3Jvc3NPcmlnaW4gKTsKKyAgICAgICAgdmFyIGxvYWRlciA9IG5ldyBUZXh0dXJlTG9hZGVyKCk7
CisgICAgICAgIGxvYWRlci5zZXRDcm9zc09yaWdpbiggdGhpcy5jcm9zc09yaWdpbiApOwogCi0g
ICAgICAgICAgICB2YXIgdGV4dHVyZSA9IGxvYWRlci5sb2FkKCB1cmwsIG9uTG9hZCwgdW5kZWZp
bmVkLCBvbkVycm9yICk7CisgICAgICAgIHZhciB0ZXh0dXJlID0gbG9hZGVyLmxvYWQoIHVybCwg
b25Mb2FkLCB1bmRlZmluZWQsIG9uRXJyb3IgKTsKIAotICAgICAgICAgICAgaWYgKCBtYXBwaW5n
ICkgdGV4dHVyZS5tYXBwaW5nID0gbWFwcGluZzsKKyAgICAgICAgaWYgKCBtYXBwaW5nICkgdGV4
dHVyZS5tYXBwaW5nID0gbWFwcGluZzsKIAotICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7Cisg
ICAgICAgIHJldHVybiB0ZXh0dXJlOwogCi0gICAgICAgIH0sCi0KLSAgICAgICAgbG9hZFRleHR1
cmVDdWJlOiBmdW5jdGlvbiAoIHVybHMsIG1hcHBpbmcsIG9uTG9hZCwgb25FcnJvciApIHsKKyAg
ICB9OwogCi0gICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5JbWFnZVV0aWxzLmxvYWRU
ZXh0dXJlQ3ViZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ3ViZVRleHR1cmVMb2Fk
ZXIoKSBpbnN0ZWFkLicgKTsKKyAgICBJbWFnZVV0aWxzLmxvYWRUZXh0dXJlQ3ViZSA9IGZ1bmN0
aW9uICggdXJscywgbWFwcGluZywgb25Mb2FkLCBvbkVycm9yICkgewogCi0gICAgICAgICAgICB2
YXIgbG9hZGVyID0gbmV3IEN1YmVUZXh0dXJlTG9hZGVyKCk7Ci0gICAgICAgICAgICBsb2FkZXIu
c2V0Q3Jvc3NPcmlnaW4oIHRoaXMuY3Jvc3NPcmlnaW4gKTsKKyAgICAgICAgY29uc29sZS53YXJu
KCAnVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4g
VXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4nICk7CiAKLSAgICAgICAgICAg
IHZhciB0ZXh0dXJlID0gbG9hZGVyLmxvYWQoIHVybHMsIG9uTG9hZCwgdW5kZWZpbmVkLCBvbkVy
cm9yICk7CisgICAgICAgIHZhciBsb2FkZXIgPSBuZXcgQ3ViZVRleHR1cmVMb2FkZXIoKTsKKyAg
ICAgICAgbG9hZGVyLnNldENyb3NzT3JpZ2luKCB0aGlzLmNyb3NzT3JpZ2luICk7CiAKLSAgICAg
ICAgICAgIGlmICggbWFwcGluZyApIHRleHR1cmUubWFwcGluZyA9IG1hcHBpbmc7CisgICAgICAg
IHZhciB0ZXh0dXJlID0gbG9hZGVyLmxvYWQoIHVybHMsIG9uTG9hZCwgdW5kZWZpbmVkLCBvbkVy
cm9yICk7CiAKLSAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlOworICAgICAgICBpZiAoIG1hcHBp
bmcgKSB0ZXh0dXJlLm1hcHBpbmcgPSBtYXBwaW5nOwogCi0gICAgICAgIH0sCisgICAgICAgIHJl
dHVybiB0ZXh0dXJlOwogCi0gICAgICAgIGxvYWRDb21wcmVzc2VkVGV4dHVyZTogZnVuY3Rpb24g
KCkgeworICAgIH07CiAKLSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5JbWFnZVV0
aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERT
TG9hZGVyIGluc3RlYWQuJyApOworICAgIEltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJl
ID0gZnVuY3Rpb24gKCkgewogCi0gICAgICAgIH0sCisgICAgICAgIGNvbnNvbGUuZXJyb3IoICdU
SFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBV
c2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuJyApOwogCi0gICAgICAgIGxvYWRDb21wcmVzc2Vk
VGV4dHVyZUN1YmU6IGZ1bmN0aW9uICgpIHsKKyAgICB9OwogCi0gICAgICAgICAgICBjb25zb2xl
LmVycm9yKCAnVEhSRUUuSW1hZ2VVdGlscy5sb2FkQ29tcHJlc3NlZFRleHR1cmVDdWJlIGhhcyBi
ZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4nICk7CisgICAgSW1hZ2VV
dGlscy5sb2FkQ29tcHJlc3NlZFRleHR1cmVDdWJlID0gZnVuY3Rpb24gKCkgewogCi0gICAgICAg
IH0KKyAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNz
ZWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3Rl
YWQuJyApOwogCiAgICAgfTsKIAogICAgIC8vCiAKLSAgICBmdW5jdGlvbiBQcm9qZWN0b3IoKSB7
Ci0KLSAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLlByb2plY3RvciBoYXMgYmVlbiBtb3Zl
ZCB0byAvZXhhbXBsZXMvanMvcmVuZGVyZXJzL1Byb2plY3Rvci5qcy4nICk7Ci0KLSAgICAgICAg
dGhpcy5wcm9qZWN0VmVjdG9yID0gZnVuY3Rpb24gKCB2ZWN0b3IsIGNhbWVyYSApIHsKLQotICAg
ICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuUHJvamVjdG9yOiAucHJvamVjdFZlY3Rvcigp
IGlzIG5vdyB2ZWN0b3IucHJvamVjdCgpLicgKTsKLSAgICAgICAgICAgIHZlY3Rvci5wcm9qZWN0
KCBjYW1lcmEgKTsKLQotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMudW5wcm9qZWN0VmVjdG9y
ID0gZnVuY3Rpb24gKCB2ZWN0b3IsIGNhbWVyYSApIHsKLQotICAgICAgICAgICAgY29uc29sZS53
YXJuKCAnVEhSRUUuUHJvamVjdG9yOiAudW5wcm9qZWN0VmVjdG9yKCkgaXMgbm93IHZlY3Rvci51
bnByb2plY3QoKS4nICk7Ci0gICAgICAgICAgICB2ZWN0b3IudW5wcm9qZWN0KCBjYW1lcmEgKTsK
LQotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMucGlja2luZ1JheSA9IGZ1bmN0aW9uICgpIHsK
LQotICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLlByb2plY3RvcjogLnBpY2tpbmdS
YXkoKSBpcyBub3cgcmF5Y2FzdGVyLnNldEZyb21DYW1lcmEoKS4nICk7CisgICAgZnVuY3Rpb24g
Q2FudmFzUmVuZGVyZXIoKSB7CiAKLSAgICAgICAgfTsKKyAgICAgICAgY29uc29sZS5lcnJvcigg
J1RIUkVFLkNhbnZhc1JlbmRlcmVyIGhhcyBiZWVuIHJlbW92ZWQnICk7CiAKICAgICB9CiAKICAg
ICAvLwogCi0gICAgZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIoKSB7Ci0KLSAgICAgICAgY29uc29s
ZS5lcnJvciggJ1RIUkVFLkNhbnZhc1JlbmRlcmVyIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxl
cy9qcy9yZW5kZXJlcnMvQ2FudmFzUmVuZGVyZXIuanMnICk7CisgICAgZnVuY3Rpb24gSlNPTkxv
YWRlcigpIHsKIAotICAgICAgICB0aGlzLmRvbUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50TlMoICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2NhbnZhcycgKTsKLSAgICAg
ICAgdGhpcy5jbGVhciA9IGZ1bmN0aW9uICgpIHt9OwotICAgICAgICB0aGlzLnJlbmRlciA9IGZ1
bmN0aW9uICgpIHt9OwotICAgICAgICB0aGlzLnNldENsZWFyQ29sb3IgPSBmdW5jdGlvbiAoKSB7
fTsKLSAgICAgICAgdGhpcy5zZXRTaXplID0gZnVuY3Rpb24gKCkge307CisgICAgICAgIGNvbnNv
bGUuZXJyb3IoICdUSFJFRS5KU09OTG9hZGVyIGhhcyBiZWVuIHJlbW92ZWQuJyApOwogCiAgICAg
fQogCkBAIC00NzAxNSwzMzEgKzQ4ODUwLDI5MCBAQAogCiAgICAgfQogCi0gICAgZXhwb3J0cy5X
ZWJHTFJlbmRlclRhcmdldEN1YmUgPSBXZWJHTFJlbmRlclRhcmdldEN1YmU7Ci0gICAgZXhwb3J0
cy5XZWJHTFJlbmRlclRhcmdldCA9IFdlYkdMUmVuZGVyVGFyZ2V0OwotICAgIGV4cG9ydHMuV2Vi
R0xSZW5kZXJlciA9IFdlYkdMUmVuZGVyZXI7Ci0gICAgZXhwb3J0cy5TaGFkZXJMaWIgPSBTaGFk
ZXJMaWI7Ci0gICAgZXhwb3J0cy5Vbmlmb3Jtc0xpYiA9IFVuaWZvcm1zTGliOwotICAgIGV4cG9y
dHMuVW5pZm9ybXNVdGlscyA9IFVuaWZvcm1zVXRpbHM7Ci0gICAgZXhwb3J0cy5TaGFkZXJDaHVu
ayA9IFNoYWRlckNodW5rOwotICAgIGV4cG9ydHMuRm9nRXhwMiA9IEZvZ0V4cDI7Ci0gICAgZXhw
b3J0cy5Gb2cgPSBGb2c7Ci0gICAgZXhwb3J0cy5TY2VuZSA9IFNjZW5lOwotICAgIGV4cG9ydHMu
U3ByaXRlID0gU3ByaXRlOwotICAgIGV4cG9ydHMuTE9EID0gTE9EOwotICAgIGV4cG9ydHMuU2tp
bm5lZE1lc2ggPSBTa2lubmVkTWVzaDsKLSAgICBleHBvcnRzLlNrZWxldG9uID0gU2tlbGV0b247
Ci0gICAgZXhwb3J0cy5Cb25lID0gQm9uZTsKLSAgICBleHBvcnRzLk1lc2ggPSBNZXNoOwotICAg
IGV4cG9ydHMuTGluZVNlZ21lbnRzID0gTGluZVNlZ21lbnRzOwotICAgIGV4cG9ydHMuTGluZUxv
b3AgPSBMaW5lTG9vcDsKLSAgICBleHBvcnRzLkxpbmUgPSBMaW5lOwotICAgIGV4cG9ydHMuUG9p
bnRzID0gUG9pbnRzOwotICAgIGV4cG9ydHMuR3JvdXAgPSBHcm91cDsKLSAgICBleHBvcnRzLlZp
ZGVvVGV4dHVyZSA9IFZpZGVvVGV4dHVyZTsKLSAgICBleHBvcnRzLkRhdGFUZXh0dXJlID0gRGF0
YVRleHR1cmU7Ci0gICAgZXhwb3J0cy5Db21wcmVzc2VkVGV4dHVyZSA9IENvbXByZXNzZWRUZXh0
dXJlOwotICAgIGV4cG9ydHMuQ3ViZVRleHR1cmUgPSBDdWJlVGV4dHVyZTsKLSAgICBleHBvcnRz
LkNhbnZhc1RleHR1cmUgPSBDYW52YXNUZXh0dXJlOwotICAgIGV4cG9ydHMuRGVwdGhUZXh0dXJl
ID0gRGVwdGhUZXh0dXJlOwotICAgIGV4cG9ydHMuVGV4dHVyZSA9IFRleHR1cmU7Ci0gICAgZXhw
b3J0cy5Db21wcmVzc2VkVGV4dHVyZUxvYWRlciA9IENvbXByZXNzZWRUZXh0dXJlTG9hZGVyOwot
ICAgIGV4cG9ydHMuRGF0YVRleHR1cmVMb2FkZXIgPSBEYXRhVGV4dHVyZUxvYWRlcjsKLSAgICBl
eHBvcnRzLkN1YmVUZXh0dXJlTG9hZGVyID0gQ3ViZVRleHR1cmVMb2FkZXI7Ci0gICAgZXhwb3J0
cy5UZXh0dXJlTG9hZGVyID0gVGV4dHVyZUxvYWRlcjsKLSAgICBleHBvcnRzLk9iamVjdExvYWRl
ciA9IE9iamVjdExvYWRlcjsKLSAgICBleHBvcnRzLk1hdGVyaWFsTG9hZGVyID0gTWF0ZXJpYWxM
b2FkZXI7Ci0gICAgZXhwb3J0cy5CdWZmZXJHZW9tZXRyeUxvYWRlciA9IEJ1ZmZlckdlb21ldHJ5
TG9hZGVyOwotICAgIGV4cG9ydHMuRGVmYXVsdExvYWRpbmdNYW5hZ2VyID0gRGVmYXVsdExvYWRp
bmdNYW5hZ2VyOwotICAgIGV4cG9ydHMuTG9hZGluZ01hbmFnZXIgPSBMb2FkaW5nTWFuYWdlcjsK
LSAgICBleHBvcnRzLkpTT05Mb2FkZXIgPSBKU09OTG9hZGVyOwotICAgIGV4cG9ydHMuSW1hZ2VM
b2FkZXIgPSBJbWFnZUxvYWRlcjsKLSAgICBleHBvcnRzLkltYWdlQml0bWFwTG9hZGVyID0gSW1h
Z2VCaXRtYXBMb2FkZXI7Ci0gICAgZXhwb3J0cy5Gb250TG9hZGVyID0gRm9udExvYWRlcjsKLSAg
ICBleHBvcnRzLkZpbGVMb2FkZXIgPSBGaWxlTG9hZGVyOwotICAgIGV4cG9ydHMuTG9hZGVyID0g
TG9hZGVyOwotICAgIGV4cG9ydHMuTG9hZGVyVXRpbHMgPSBMb2FkZXJVdGlsczsKLSAgICBleHBv
cnRzLkNhY2hlID0gQ2FjaGU7Ci0gICAgZXhwb3J0cy5BdWRpb0xvYWRlciA9IEF1ZGlvTG9hZGVy
OwotICAgIGV4cG9ydHMuU3BvdExpZ2h0U2hhZG93ID0gU3BvdExpZ2h0U2hhZG93OwotICAgIGV4
cG9ydHMuU3BvdExpZ2h0ID0gU3BvdExpZ2h0OwotICAgIGV4cG9ydHMuUG9pbnRMaWdodCA9IFBv
aW50TGlnaHQ7Ci0gICAgZXhwb3J0cy5SZWN0QXJlYUxpZ2h0ID0gUmVjdEFyZWFMaWdodDsKLSAg
ICBleHBvcnRzLkhlbWlzcGhlcmVMaWdodCA9IEhlbWlzcGhlcmVMaWdodDsKLSAgICBleHBvcnRz
LkRpcmVjdGlvbmFsTGlnaHRTaGFkb3cgPSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93OwotICAgIGV4
cG9ydHMuRGlyZWN0aW9uYWxMaWdodCA9IERpcmVjdGlvbmFsTGlnaHQ7CisgICAgZXhwb3J0cy5B
Q0VTRmlsbWljVG9uZU1hcHBpbmcgPSBBQ0VTRmlsbWljVG9uZU1hcHBpbmc7CisgICAgZXhwb3J0
cy5BZGRFcXVhdGlvbiA9IEFkZEVxdWF0aW9uOworICAgIGV4cG9ydHMuQWRkT3BlcmF0aW9uID0g
QWRkT3BlcmF0aW9uOworICAgIGV4cG9ydHMuQWRkaXRpdmVCbGVuZGluZyA9IEFkZGl0aXZlQmxl
bmRpbmc7CisgICAgZXhwb3J0cy5BbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0OworICAgIGV4cG9y
dHMuQWx3YXlzRGVwdGggPSBBbHdheXNEZXB0aDsKICAgICBleHBvcnRzLkFtYmllbnRMaWdodCA9
IEFtYmllbnRMaWdodDsKLSAgICBleHBvcnRzLkxpZ2h0U2hhZG93ID0gTGlnaHRTaGFkb3c7Ci0g
ICAgZXhwb3J0cy5MaWdodCA9IExpZ2h0OwotICAgIGV4cG9ydHMuU3RlcmVvQ2FtZXJhID0gU3Rl
cmVvQ2FtZXJhOwotICAgIGV4cG9ydHMuUGVyc3BlY3RpdmVDYW1lcmEgPSBQZXJzcGVjdGl2ZUNh
bWVyYTsKLSAgICBleHBvcnRzLk9ydGhvZ3JhcGhpY0NhbWVyYSA9IE9ydGhvZ3JhcGhpY0NhbWVy
YTsKLSAgICBleHBvcnRzLkN1YmVDYW1lcmEgPSBDdWJlQ2FtZXJhOworICAgIGV4cG9ydHMuQW1i
aWVudExpZ2h0UHJvYmUgPSBBbWJpZW50TGlnaHRQcm9iZTsKKyAgICBleHBvcnRzLkFuaW1hdGlv
bkNsaXAgPSBBbmltYXRpb25DbGlwOworICAgIGV4cG9ydHMuQW5pbWF0aW9uTG9hZGVyID0gQW5p
bWF0aW9uTG9hZGVyOworICAgIGV4cG9ydHMuQW5pbWF0aW9uTWl4ZXIgPSBBbmltYXRpb25NaXhl
cjsKKyAgICBleHBvcnRzLkFuaW1hdGlvbk9iamVjdEdyb3VwID0gQW5pbWF0aW9uT2JqZWN0R3Jv
dXA7CisgICAgZXhwb3J0cy5BbmltYXRpb25VdGlscyA9IEFuaW1hdGlvblV0aWxzOworICAgIGV4
cG9ydHMuQXJjQ3VydmUgPSBBcmNDdXJ2ZTsKICAgICBleHBvcnRzLkFycmF5Q2FtZXJhID0gQXJy
YXlDYW1lcmE7Ci0gICAgZXhwb3J0cy5DYW1lcmEgPSBDYW1lcmE7Ci0gICAgZXhwb3J0cy5BdWRp
b0xpc3RlbmVyID0gQXVkaW9MaXN0ZW5lcjsKLSAgICBleHBvcnRzLlBvc2l0aW9uYWxBdWRpbyA9
IFBvc2l0aW9uYWxBdWRpbzsKLSAgICBleHBvcnRzLkF1ZGlvQ29udGV4dCA9IEF1ZGlvQ29udGV4
dDsKLSAgICBleHBvcnRzLkF1ZGlvQW5hbHlzZXIgPSBBdWRpb0FuYWx5c2VyOworICAgIGV4cG9y
dHMuQXJyb3dIZWxwZXIgPSBBcnJvd0hlbHBlcjsKICAgICBleHBvcnRzLkF1ZGlvID0gQXVkaW87
Ci0gICAgZXhwb3J0cy5WZWN0b3JLZXlmcmFtZVRyYWNrID0gVmVjdG9yS2V5ZnJhbWVUcmFjazsK
LSAgICBleHBvcnRzLlN0cmluZ0tleWZyYW1lVHJhY2sgPSBTdHJpbmdLZXlmcmFtZVRyYWNrOwot
ICAgIGV4cG9ydHMuUXVhdGVybmlvbktleWZyYW1lVHJhY2sgPSBRdWF0ZXJuaW9uS2V5ZnJhbWVU
cmFjazsKLSAgICBleHBvcnRzLk51bWJlcktleWZyYW1lVHJhY2sgPSBOdW1iZXJLZXlmcmFtZVRy
YWNrOwotICAgIGV4cG9ydHMuQ29sb3JLZXlmcmFtZVRyYWNrID0gQ29sb3JLZXlmcmFtZVRyYWNr
OworICAgIGV4cG9ydHMuQXVkaW9BbmFseXNlciA9IEF1ZGlvQW5hbHlzZXI7CisgICAgZXhwb3J0
cy5BdWRpb0NvbnRleHQgPSBBdWRpb0NvbnRleHQ7CisgICAgZXhwb3J0cy5BdWRpb0xpc3RlbmVy
ID0gQXVkaW9MaXN0ZW5lcjsKKyAgICBleHBvcnRzLkF1ZGlvTG9hZGVyID0gQXVkaW9Mb2FkZXI7
CisgICAgZXhwb3J0cy5BeGVzSGVscGVyID0gQXhlc0hlbHBlcjsKKyAgICBleHBvcnRzLkF4aXNI
ZWxwZXIgPSBBeGlzSGVscGVyOworICAgIGV4cG9ydHMuQmFja1NpZGUgPSBCYWNrU2lkZTsKKyAg
ICBleHBvcnRzLkJhc2ljRGVwdGhQYWNraW5nID0gQmFzaWNEZXB0aFBhY2tpbmc7CisgICAgZXhw
b3J0cy5CYXNpY1NoYWRvd01hcCA9IEJhc2ljU2hhZG93TWFwOworICAgIGV4cG9ydHMuQmluYXJ5
VGV4dHVyZUxvYWRlciA9IEJpbmFyeVRleHR1cmVMb2FkZXI7CisgICAgZXhwb3J0cy5Cb25lID0g
Qm9uZTsKICAgICBleHBvcnRzLkJvb2xlYW5LZXlmcmFtZVRyYWNrID0gQm9vbGVhbktleWZyYW1l
VHJhY2s7Ci0gICAgZXhwb3J0cy5Qcm9wZXJ0eU1peGVyID0gUHJvcGVydHlNaXhlcjsKLSAgICBl
eHBvcnRzLlByb3BlcnR5QmluZGluZyA9IFByb3BlcnR5QmluZGluZzsKLSAgICBleHBvcnRzLktl
eWZyYW1lVHJhY2sgPSBLZXlmcmFtZVRyYWNrOwotICAgIGV4cG9ydHMuQW5pbWF0aW9uVXRpbHMg
PSBBbmltYXRpb25VdGlsczsKLSAgICBleHBvcnRzLkFuaW1hdGlvbk9iamVjdEdyb3VwID0gQW5p
bWF0aW9uT2JqZWN0R3JvdXA7Ci0gICAgZXhwb3J0cy5BbmltYXRpb25NaXhlciA9IEFuaW1hdGlv
bk1peGVyOwotICAgIGV4cG9ydHMuQW5pbWF0aW9uQ2xpcCA9IEFuaW1hdGlvbkNsaXA7Ci0gICAg
ZXhwb3J0cy5Vbmlmb3JtID0gVW5pZm9ybTsKLSAgICBleHBvcnRzLkluc3RhbmNlZEJ1ZmZlckdl
b21ldHJ5ID0gSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk7Ci0gICAgZXhwb3J0cy5CdWZmZXJHZW9t
ZXRyeSA9IEJ1ZmZlckdlb21ldHJ5OwotICAgIGV4cG9ydHMuR2VvbWV0cnkgPSBHZW9tZXRyeTsK
LSAgICBleHBvcnRzLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlID0gSW50ZXJsZWF2ZWRCdWZm
ZXJBdHRyaWJ1dGU7Ci0gICAgZXhwb3J0cy5JbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlciA9IElu
c3RhbmNlZEludGVybGVhdmVkQnVmZmVyOwotICAgIGV4cG9ydHMuSW50ZXJsZWF2ZWRCdWZmZXIg
PSBJbnRlcmxlYXZlZEJ1ZmZlcjsKLSAgICBleHBvcnRzLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0
ZSA9IEluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTsKLSAgICBleHBvcnRzLkZhY2UzID0gRmFjZTM7
Ci0gICAgZXhwb3J0cy5PYmplY3QzRCA9IE9iamVjdDNEOwotICAgIGV4cG9ydHMuUmF5Y2FzdGVy
ID0gUmF5Y2FzdGVyOwotICAgIGV4cG9ydHMuTGF5ZXJzID0gTGF5ZXJzOwotICAgIGV4cG9ydHMu
RXZlbnREaXNwYXRjaGVyID0gRXZlbnREaXNwYXRjaGVyOwotICAgIGV4cG9ydHMuQ2xvY2sgPSBD
bG9jazsKLSAgICBleHBvcnRzLlF1YXRlcm5pb25MaW5lYXJJbnRlcnBvbGFudCA9IFF1YXRlcm5p
b25MaW5lYXJJbnRlcnBvbGFudDsKLSAgICBleHBvcnRzLkxpbmVhckludGVycG9sYW50ID0gTGlu
ZWFySW50ZXJwb2xhbnQ7Ci0gICAgZXhwb3J0cy5EaXNjcmV0ZUludGVycG9sYW50ID0gRGlzY3Jl
dGVJbnRlcnBvbGFudDsKLSAgICBleHBvcnRzLkN1YmljSW50ZXJwb2xhbnQgPSBDdWJpY0ludGVy
cG9sYW50OwotICAgIGV4cG9ydHMuSW50ZXJwb2xhbnQgPSBJbnRlcnBvbGFudDsKLSAgICBleHBv
cnRzLlRyaWFuZ2xlID0gVHJpYW5nbGU7Ci0gICAgZXhwb3J0cy5NYXRoID0gX01hdGg7Ci0gICAg
ZXhwb3J0cy5TcGhlcmljYWwgPSBTcGhlcmljYWw7Ci0gICAgZXhwb3J0cy5DeWxpbmRyaWNhbCA9
IEN5bGluZHJpY2FsOwotICAgIGV4cG9ydHMuUGxhbmUgPSBQbGFuZTsKLSAgICBleHBvcnRzLkZy
dXN0dW0gPSBGcnVzdHVtOwotICAgIGV4cG9ydHMuU3BoZXJlID0gU3BoZXJlOwotICAgIGV4cG9y
dHMuUmF5ID0gUmF5OwotICAgIGV4cG9ydHMuTWF0cml4NCA9IE1hdHJpeDQ7Ci0gICAgZXhwb3J0
cy5NYXRyaXgzID0gTWF0cml4MzsKLSAgICBleHBvcnRzLkJveDMgPSBCb3gzOworICAgIGV4cG9y
dHMuQm91bmRpbmdCb3hIZWxwZXIgPSBCb3VuZGluZ0JveEhlbHBlcjsKICAgICBleHBvcnRzLkJv
eDIgPSBCb3gyOwotICAgIGV4cG9ydHMuTGluZTMgPSBMaW5lMzsKLSAgICBleHBvcnRzLkV1bGVy
ID0gRXVsZXI7Ci0gICAgZXhwb3J0cy5WZWN0b3I0ID0gVmVjdG9yNDsKLSAgICBleHBvcnRzLlZl
Y3RvcjMgPSBWZWN0b3IzOwotICAgIGV4cG9ydHMuVmVjdG9yMiA9IFZlY3RvcjI7Ci0gICAgZXhw
b3J0cy5RdWF0ZXJuaW9uID0gUXVhdGVybmlvbjsKLSAgICBleHBvcnRzLkNvbG9yID0gQ29sb3I7
Ci0gICAgZXhwb3J0cy5JbW1lZGlhdGVSZW5kZXJPYmplY3QgPSBJbW1lZGlhdGVSZW5kZXJPYmpl
Y3Q7Ci0gICAgZXhwb3J0cy5WZXJ0ZXhOb3JtYWxzSGVscGVyID0gVmVydGV4Tm9ybWFsc0hlbHBl
cjsKLSAgICBleHBvcnRzLlNwb3RMaWdodEhlbHBlciA9IFNwb3RMaWdodEhlbHBlcjsKLSAgICBl
eHBvcnRzLlNrZWxldG9uSGVscGVyID0gU2tlbGV0b25IZWxwZXI7Ci0gICAgZXhwb3J0cy5Qb2lu
dExpZ2h0SGVscGVyID0gUG9pbnRMaWdodEhlbHBlcjsKLSAgICBleHBvcnRzLlJlY3RBcmVhTGln
aHRIZWxwZXIgPSBSZWN0QXJlYUxpZ2h0SGVscGVyOwotICAgIGV4cG9ydHMuSGVtaXNwaGVyZUxp
Z2h0SGVscGVyID0gSGVtaXNwaGVyZUxpZ2h0SGVscGVyOwotICAgIGV4cG9ydHMuR3JpZEhlbHBl
ciA9IEdyaWRIZWxwZXI7Ci0gICAgZXhwb3J0cy5Qb2xhckdyaWRIZWxwZXIgPSBQb2xhckdyaWRI
ZWxwZXI7Ci0gICAgZXhwb3J0cy5GYWNlTm9ybWFsc0hlbHBlciA9IEZhY2VOb3JtYWxzSGVscGVy
OwotICAgIGV4cG9ydHMuRGlyZWN0aW9uYWxMaWdodEhlbHBlciA9IERpcmVjdGlvbmFsTGlnaHRI
ZWxwZXI7Ci0gICAgZXhwb3J0cy5DYW1lcmFIZWxwZXIgPSBDYW1lcmFIZWxwZXI7Ci0gICAgZXhw
b3J0cy5Cb3hIZWxwZXIgPSBCb3hIZWxwZXI7CisgICAgZXhwb3J0cy5Cb3gzID0gQm94MzsKICAg
ICBleHBvcnRzLkJveDNIZWxwZXIgPSBCb3gzSGVscGVyOwotICAgIGV4cG9ydHMuUGxhbmVIZWxw
ZXIgPSBQbGFuZUhlbHBlcjsKLSAgICBleHBvcnRzLkFycm93SGVscGVyID0gQXJyb3dIZWxwZXI7
Ci0gICAgZXhwb3J0cy5BeGVzSGVscGVyID0gQXhlc0hlbHBlcjsKLSAgICBleHBvcnRzLlNoYXBl
ID0gU2hhcGU7Ci0gICAgZXhwb3J0cy5QYXRoID0gUGF0aDsKLSAgICBleHBvcnRzLlNoYXBlUGF0
aCA9IFNoYXBlUGF0aDsKLSAgICBleHBvcnRzLkZvbnQgPSBGb250OwotICAgIGV4cG9ydHMuQ3Vy
dmVQYXRoID0gQ3VydmVQYXRoOwotICAgIGV4cG9ydHMuQ3VydmUgPSBDdXJ2ZTsKLSAgICBleHBv
cnRzLlNoYXBlVXRpbHMgPSBTaGFwZVV0aWxzOwotICAgIGV4cG9ydHMuV2ViR0xVdGlscyA9IFdl
YkdMVXRpbHM7Ci0gICAgZXhwb3J0cy5XaXJlZnJhbWVHZW9tZXRyeSA9IFdpcmVmcmFtZUdlb21l
dHJ5OwotICAgIGV4cG9ydHMuUGFyYW1ldHJpY0dlb21ldHJ5ID0gUGFyYW1ldHJpY0dlb21ldHJ5
OwotICAgIGV4cG9ydHMuUGFyYW1ldHJpY0J1ZmZlckdlb21ldHJ5ID0gUGFyYW1ldHJpY0J1ZmZl
ckdlb21ldHJ5OwotICAgIGV4cG9ydHMuVGV0cmFoZWRyb25HZW9tZXRyeSA9IFRldHJhaGVkcm9u
R2VvbWV0cnk7Ci0gICAgZXhwb3J0cy5UZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5ID0gVGV0cmFo
ZWRyb25CdWZmZXJHZW9tZXRyeTsKLSAgICBleHBvcnRzLk9jdGFoZWRyb25HZW9tZXRyeSA9IE9j
dGFoZWRyb25HZW9tZXRyeTsKLSAgICBleHBvcnRzLk9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeSA9
IE9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeTsKLSAgICBleHBvcnRzLkljb3NhaGVkcm9uR2VvbWV0
cnkgPSBJY29zYWhlZHJvbkdlb21ldHJ5OwotICAgIGV4cG9ydHMuSWNvc2FoZWRyb25CdWZmZXJH
ZW9tZXRyeSA9IEljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnk7Ci0gICAgZXhwb3J0cy5Eb2RlY2Fo
ZWRyb25HZW9tZXRyeSA9IERvZGVjYWhlZHJvbkdlb21ldHJ5OwotICAgIGV4cG9ydHMuRG9kZWNh
aGVkcm9uQnVmZmVyR2VvbWV0cnkgPSBEb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeTsKLSAgICBl
eHBvcnRzLlBvbHloZWRyb25HZW9tZXRyeSA9IFBvbHloZWRyb25HZW9tZXRyeTsKLSAgICBleHBv
cnRzLlBvbHloZWRyb25CdWZmZXJHZW9tZXRyeSA9IFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeTsK
LSAgICBleHBvcnRzLlR1YmVHZW9tZXRyeSA9IFR1YmVHZW9tZXRyeTsKLSAgICBleHBvcnRzLlR1
YmVCdWZmZXJHZW9tZXRyeSA9IFR1YmVCdWZmZXJHZW9tZXRyeTsKLSAgICBleHBvcnRzLlRvcnVz
S25vdEdlb21ldHJ5ID0gVG9ydXNLbm90R2VvbWV0cnk7Ci0gICAgZXhwb3J0cy5Ub3J1c0tub3RC
dWZmZXJHZW9tZXRyeSA9IFRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5OwotICAgIGV4cG9ydHMuVG9y
dXNHZW9tZXRyeSA9IFRvcnVzR2VvbWV0cnk7Ci0gICAgZXhwb3J0cy5Ub3J1c0J1ZmZlckdlb21l
dHJ5ID0gVG9ydXNCdWZmZXJHZW9tZXRyeTsKLSAgICBleHBvcnRzLlRleHRHZW9tZXRyeSA9IFRl
eHRHZW9tZXRyeTsKLSAgICBleHBvcnRzLlRleHRCdWZmZXJHZW9tZXRyeSA9IFRleHRCdWZmZXJH
ZW9tZXRyeTsKLSAgICBleHBvcnRzLlNwaGVyZUdlb21ldHJ5ID0gU3BoZXJlR2VvbWV0cnk7Ci0g
ICAgZXhwb3J0cy5TcGhlcmVCdWZmZXJHZW9tZXRyeSA9IFNwaGVyZUJ1ZmZlckdlb21ldHJ5Owot
ICAgIGV4cG9ydHMuUmluZ0dlb21ldHJ5ID0gUmluZ0dlb21ldHJ5OwotICAgIGV4cG9ydHMuUmlu
Z0J1ZmZlckdlb21ldHJ5ID0gUmluZ0J1ZmZlckdlb21ldHJ5OwotICAgIGV4cG9ydHMuUGxhbmVH
ZW9tZXRyeSA9IFBsYW5lR2VvbWV0cnk7Ci0gICAgZXhwb3J0cy5QbGFuZUJ1ZmZlckdlb21ldHJ5
ID0gUGxhbmVCdWZmZXJHZW9tZXRyeTsKLSAgICBleHBvcnRzLkxhdGhlR2VvbWV0cnkgPSBMYXRo
ZUdlb21ldHJ5OwotICAgIGV4cG9ydHMuTGF0aGVCdWZmZXJHZW9tZXRyeSA9IExhdGhlQnVmZmVy
R2VvbWV0cnk7Ci0gICAgZXhwb3J0cy5TaGFwZUdlb21ldHJ5ID0gU2hhcGVHZW9tZXRyeTsKLSAg
ICBleHBvcnRzLlNoYXBlQnVmZmVyR2VvbWV0cnkgPSBTaGFwZUJ1ZmZlckdlb21ldHJ5OwotICAg
IGV4cG9ydHMuRXh0cnVkZUdlb21ldHJ5ID0gRXh0cnVkZUdlb21ldHJ5OwotICAgIGV4cG9ydHMu
RXh0cnVkZUJ1ZmZlckdlb21ldHJ5ID0gRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OwotICAgIGV4cG9y
dHMuRWRnZXNHZW9tZXRyeSA9IEVkZ2VzR2VvbWV0cnk7Ci0gICAgZXhwb3J0cy5Db25lR2VvbWV0
cnkgPSBDb25lR2VvbWV0cnk7Ci0gICAgZXhwb3J0cy5Db25lQnVmZmVyR2VvbWV0cnkgPSBDb25l
QnVmZmVyR2VvbWV0cnk7Ci0gICAgZXhwb3J0cy5DeWxpbmRlckdlb21ldHJ5ID0gQ3lsaW5kZXJH
ZW9tZXRyeTsKLSAgICBleHBvcnRzLkN5bGluZGVyQnVmZmVyR2VvbWV0cnkgPSBDeWxpbmRlckJ1
ZmZlckdlb21ldHJ5OwotICAgIGV4cG9ydHMuQ2lyY2xlR2VvbWV0cnkgPSBDaXJjbGVHZW9tZXRy
eTsKLSAgICBleHBvcnRzLkNpcmNsZUJ1ZmZlckdlb21ldHJ5ID0gQ2lyY2xlQnVmZmVyR2VvbWV0
cnk7Ci0gICAgZXhwb3J0cy5Cb3hHZW9tZXRyeSA9IEJveEdlb21ldHJ5OwogICAgIGV4cG9ydHMu
Qm94QnVmZmVyR2VvbWV0cnkgPSBCb3hCdWZmZXJHZW9tZXRyeTsKLSAgICBleHBvcnRzLlNoYWRv
d01hdGVyaWFsID0gU2hhZG93TWF0ZXJpYWw7Ci0gICAgZXhwb3J0cy5TcHJpdGVNYXRlcmlhbCA9
IFNwcml0ZU1hdGVyaWFsOwotICAgIGV4cG9ydHMuUmF3U2hhZGVyTWF0ZXJpYWwgPSBSYXdTaGFk
ZXJNYXRlcmlhbDsKLSAgICBleHBvcnRzLlNoYWRlck1hdGVyaWFsID0gU2hhZGVyTWF0ZXJpYWw7
Ci0gICAgZXhwb3J0cy5Qb2ludHNNYXRlcmlhbCA9IFBvaW50c01hdGVyaWFsOwotICAgIGV4cG9y
dHMuTWVzaFBoeXNpY2FsTWF0ZXJpYWwgPSBNZXNoUGh5c2ljYWxNYXRlcmlhbDsKLSAgICBleHBv
cnRzLk1lc2hTdGFuZGFyZE1hdGVyaWFsID0gTWVzaFN0YW5kYXJkTWF0ZXJpYWw7Ci0gICAgZXhw
b3J0cy5NZXNoUGhvbmdNYXRlcmlhbCA9IE1lc2hQaG9uZ01hdGVyaWFsOwotICAgIGV4cG9ydHMu
TWVzaFRvb25NYXRlcmlhbCA9IE1lc2hUb29uTWF0ZXJpYWw7Ci0gICAgZXhwb3J0cy5NZXNoTm9y
bWFsTWF0ZXJpYWwgPSBNZXNoTm9ybWFsTWF0ZXJpYWw7Ci0gICAgZXhwb3J0cy5NZXNoTGFtYmVy
dE1hdGVyaWFsID0gTWVzaExhbWJlcnRNYXRlcmlhbDsKLSAgICBleHBvcnRzLk1lc2hEZXB0aE1h
dGVyaWFsID0gTWVzaERlcHRoTWF0ZXJpYWw7Ci0gICAgZXhwb3J0cy5NZXNoRGlzdGFuY2VNYXRl
cmlhbCA9IE1lc2hEaXN0YW5jZU1hdGVyaWFsOwotICAgIGV4cG9ydHMuTWVzaEJhc2ljTWF0ZXJp
YWwgPSBNZXNoQmFzaWNNYXRlcmlhbDsKLSAgICBleHBvcnRzLkxpbmVEYXNoZWRNYXRlcmlhbCA9
IExpbmVEYXNoZWRNYXRlcmlhbDsKLSAgICBleHBvcnRzLkxpbmVCYXNpY01hdGVyaWFsID0gTGlu
ZUJhc2ljTWF0ZXJpYWw7Ci0gICAgZXhwb3J0cy5NYXRlcmlhbCA9IE1hdGVyaWFsOwotICAgIGV4
cG9ydHMuRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZSA9IEZsb2F0NjRCdWZmZXJBdHRyaWJ1dGU7Ci0g
ICAgZXhwb3J0cy5GbG9hdDMyQnVmZmVyQXR0cmlidXRlID0gRmxvYXQzMkJ1ZmZlckF0dHJpYnV0
ZTsKLSAgICBleHBvcnRzLlVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSA9IFVpbnQzMkJ1ZmZlckF0dHJp
YnV0ZTsKLSAgICBleHBvcnRzLkludDMyQnVmZmVyQXR0cmlidXRlID0gSW50MzJCdWZmZXJBdHRy
aWJ1dGU7Ci0gICAgZXhwb3J0cy5VaW50MTZCdWZmZXJBdHRyaWJ1dGUgPSBVaW50MTZCdWZmZXJB
dHRyaWJ1dGU7Ci0gICAgZXhwb3J0cy5JbnQxNkJ1ZmZlckF0dHJpYnV0ZSA9IEludDE2QnVmZmVy
QXR0cmlidXRlOwotICAgIGV4cG9ydHMuVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlID0gVWlu
dDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlOwotICAgIGV4cG9ydHMuVWludDhCdWZmZXJBdHRyaWJ1
dGUgPSBVaW50OEJ1ZmZlckF0dHJpYnV0ZTsKLSAgICBleHBvcnRzLkludDhCdWZmZXJBdHRyaWJ1
dGUgPSBJbnQ4QnVmZmVyQXR0cmlidXRlOworICAgIGV4cG9ydHMuQm94R2VvbWV0cnkgPSBCb3hH
ZW9tZXRyeTsKKyAgICBleHBvcnRzLkJveEhlbHBlciA9IEJveEhlbHBlcjsKICAgICBleHBvcnRz
LkJ1ZmZlckF0dHJpYnV0ZSA9IEJ1ZmZlckF0dHJpYnV0ZTsKLSAgICBleHBvcnRzLkFyY0N1cnZl
ID0gQXJjQ3VydmU7CisgICAgZXhwb3J0cy5CdWZmZXJHZW9tZXRyeSA9IEJ1ZmZlckdlb21ldHJ5
OworICAgIGV4cG9ydHMuQnVmZmVyR2VvbWV0cnlMb2FkZXIgPSBCdWZmZXJHZW9tZXRyeUxvYWRl
cjsKKyAgICBleHBvcnRzLkJ5dGVUeXBlID0gQnl0ZVR5cGU7CisgICAgZXhwb3J0cy5DYWNoZSA9
IENhY2hlOworICAgIGV4cG9ydHMuQ2FtZXJhID0gQ2FtZXJhOworICAgIGV4cG9ydHMuQ2FtZXJh
SGVscGVyID0gQ2FtZXJhSGVscGVyOworICAgIGV4cG9ydHMuQ2FudmFzUmVuZGVyZXIgPSBDYW52
YXNSZW5kZXJlcjsKKyAgICBleHBvcnRzLkNhbnZhc1RleHR1cmUgPSBDYW52YXNUZXh0dXJlOwog
ICAgIGV4cG9ydHMuQ2F0bXVsbFJvbUN1cnZlMyA9IENhdG11bGxSb21DdXJ2ZTM7CisgICAgZXhw
b3J0cy5DaW5lb25Ub25lTWFwcGluZyA9IENpbmVvblRvbmVNYXBwaW5nOworICAgIGV4cG9ydHMu
Q2lyY2xlQnVmZmVyR2VvbWV0cnkgPSBDaXJjbGVCdWZmZXJHZW9tZXRyeTsKKyAgICBleHBvcnRz
LkNpcmNsZUdlb21ldHJ5ID0gQ2lyY2xlR2VvbWV0cnk7CisgICAgZXhwb3J0cy5DbGFtcFRvRWRn
ZVdyYXBwaW5nID0gQ2xhbXBUb0VkZ2VXcmFwcGluZzsKKyAgICBleHBvcnRzLkNsb2NrID0gQ2xv
Y2s7CisgICAgZXhwb3J0cy5DbG9zZWRTcGxpbmVDdXJ2ZTMgPSBDbG9zZWRTcGxpbmVDdXJ2ZTM7
CisgICAgZXhwb3J0cy5Db2xvciA9IENvbG9yOworICAgIGV4cG9ydHMuQ29sb3JLZXlmcmFtZVRy
YWNrID0gQ29sb3JLZXlmcmFtZVRyYWNrOworICAgIGV4cG9ydHMuQ29tcHJlc3NlZFRleHR1cmUg
PSBDb21wcmVzc2VkVGV4dHVyZTsKKyAgICBleHBvcnRzLkNvbXByZXNzZWRUZXh0dXJlTG9hZGVy
ID0gQ29tcHJlc3NlZFRleHR1cmVMb2FkZXI7CisgICAgZXhwb3J0cy5Db25lQnVmZmVyR2VvbWV0
cnkgPSBDb25lQnVmZmVyR2VvbWV0cnk7CisgICAgZXhwb3J0cy5Db25lR2VvbWV0cnkgPSBDb25l
R2VvbWV0cnk7CisgICAgZXhwb3J0cy5DdWJlQ2FtZXJhID0gQ3ViZUNhbWVyYTsKKyAgICBleHBv
cnRzLkN1YmVHZW9tZXRyeSA9IEJveEdlb21ldHJ5OworICAgIGV4cG9ydHMuQ3ViZVJlZmxlY3Rp
b25NYXBwaW5nID0gQ3ViZVJlZmxlY3Rpb25NYXBwaW5nOworICAgIGV4cG9ydHMuQ3ViZVJlZnJh
Y3Rpb25NYXBwaW5nID0gQ3ViZVJlZnJhY3Rpb25NYXBwaW5nOworICAgIGV4cG9ydHMuQ3ViZVRl
eHR1cmUgPSBDdWJlVGV4dHVyZTsKKyAgICBleHBvcnRzLkN1YmVUZXh0dXJlTG9hZGVyID0gQ3Vi
ZVRleHR1cmVMb2FkZXI7CisgICAgZXhwb3J0cy5DdWJlVVZSZWZsZWN0aW9uTWFwcGluZyA9IEN1
YmVVVlJlZmxlY3Rpb25NYXBwaW5nOworICAgIGV4cG9ydHMuQ3ViZVVWUmVmcmFjdGlvbk1hcHBp
bmcgPSBDdWJlVVZSZWZyYWN0aW9uTWFwcGluZzsKICAgICBleHBvcnRzLkN1YmljQmV6aWVyQ3Vy
dmUgPSBDdWJpY0JlemllckN1cnZlOwogICAgIGV4cG9ydHMuQ3ViaWNCZXppZXJDdXJ2ZTMgPSBD
dWJpY0JlemllckN1cnZlMzsKLSAgICBleHBvcnRzLkVsbGlwc2VDdXJ2ZSA9IEVsbGlwc2VDdXJ2
ZTsKLSAgICBleHBvcnRzLkxpbmVDdXJ2ZSA9IExpbmVDdXJ2ZTsKLSAgICBleHBvcnRzLkxpbmVD
dXJ2ZTMgPSBMaW5lQ3VydmUzOwotICAgIGV4cG9ydHMuUXVhZHJhdGljQmV6aWVyQ3VydmUgPSBR
dWFkcmF0aWNCZXppZXJDdXJ2ZTsKLSAgICBleHBvcnRzLlF1YWRyYXRpY0JlemllckN1cnZlMyA9
IFF1YWRyYXRpY0JlemllckN1cnZlMzsKLSAgICBleHBvcnRzLlNwbGluZUN1cnZlID0gU3BsaW5l
Q3VydmU7Ci0gICAgZXhwb3J0cy5SRVZJU0lPTiA9IFJFVklTSU9OOwotICAgIGV4cG9ydHMuTU9V
U0UgPSBNT1VTRTsKLSAgICBleHBvcnRzLkN1bGxGYWNlTm9uZSA9IEN1bGxGYWNlTm9uZTsKKyAg
ICBleHBvcnRzLkN1YmljSW50ZXJwb2xhbnQgPSBDdWJpY0ludGVycG9sYW50OwogICAgIGV4cG9y
dHMuQ3VsbEZhY2VCYWNrID0gQ3VsbEZhY2VCYWNrOwogICAgIGV4cG9ydHMuQ3VsbEZhY2VGcm9u
dCA9IEN1bGxGYWNlRnJvbnQ7CiAgICAgZXhwb3J0cy5DdWxsRmFjZUZyb250QmFjayA9IEN1bGxG
YWNlRnJvbnRCYWNrOwotICAgIGV4cG9ydHMuRnJvbnRGYWNlRGlyZWN0aW9uQ1cgPSBGcm9udEZh
Y2VEaXJlY3Rpb25DVzsKLSAgICBleHBvcnRzLkZyb250RmFjZURpcmVjdGlvbkNDVyA9IEZyb250
RmFjZURpcmVjdGlvbkNDVzsKLSAgICBleHBvcnRzLkJhc2ljU2hhZG93TWFwID0gQmFzaWNTaGFk
b3dNYXA7Ci0gICAgZXhwb3J0cy5QQ0ZTaGFkb3dNYXAgPSBQQ0ZTaGFkb3dNYXA7Ci0gICAgZXhw
b3J0cy5QQ0ZTb2Z0U2hhZG93TWFwID0gUENGU29mdFNoYWRvd01hcDsKLSAgICBleHBvcnRzLkZy
b250U2lkZSA9IEZyb250U2lkZTsKLSAgICBleHBvcnRzLkJhY2tTaWRlID0gQmFja1NpZGU7Ci0g
ICAgZXhwb3J0cy5Eb3VibGVTaWRlID0gRG91YmxlU2lkZTsKLSAgICBleHBvcnRzLkZsYXRTaGFk
aW5nID0gRmxhdFNoYWRpbmc7Ci0gICAgZXhwb3J0cy5TbW9vdGhTaGFkaW5nID0gU21vb3RoU2hh
ZGluZzsKLSAgICBleHBvcnRzLk5vQ29sb3JzID0gTm9Db2xvcnM7Ci0gICAgZXhwb3J0cy5GYWNl
Q29sb3JzID0gRmFjZUNvbG9yczsKLSAgICBleHBvcnRzLlZlcnRleENvbG9ycyA9IFZlcnRleENv
bG9yczsKLSAgICBleHBvcnRzLk5vQmxlbmRpbmcgPSBOb0JsZW5kaW5nOwotICAgIGV4cG9ydHMu
Tm9ybWFsQmxlbmRpbmcgPSBOb3JtYWxCbGVuZGluZzsKLSAgICBleHBvcnRzLkFkZGl0aXZlQmxl
bmRpbmcgPSBBZGRpdGl2ZUJsZW5kaW5nOwotICAgIGV4cG9ydHMuU3VidHJhY3RpdmVCbGVuZGlu
ZyA9IFN1YnRyYWN0aXZlQmxlbmRpbmc7Ci0gICAgZXhwb3J0cy5NdWx0aXBseUJsZW5kaW5nID0g
TXVsdGlwbHlCbGVuZGluZzsKKyAgICBleHBvcnRzLkN1bGxGYWNlTm9uZSA9IEN1bGxGYWNlTm9u
ZTsKKyAgICBleHBvcnRzLkN1cnZlID0gQ3VydmU7CisgICAgZXhwb3J0cy5DdXJ2ZVBhdGggPSBD
dXJ2ZVBhdGg7CiAgICAgZXhwb3J0cy5DdXN0b21CbGVuZGluZyA9IEN1c3RvbUJsZW5kaW5nOwot
ICAgIGV4cG9ydHMuQWRkRXF1YXRpb24gPSBBZGRFcXVhdGlvbjsKLSAgICBleHBvcnRzLlN1YnRy
YWN0RXF1YXRpb24gPSBTdWJ0cmFjdEVxdWF0aW9uOwotICAgIGV4cG9ydHMuUmV2ZXJzZVN1YnRy
YWN0RXF1YXRpb24gPSBSZXZlcnNlU3VidHJhY3RFcXVhdGlvbjsKLSAgICBleHBvcnRzLk1pbkVx
dWF0aW9uID0gTWluRXF1YXRpb247Ci0gICAgZXhwb3J0cy5NYXhFcXVhdGlvbiA9IE1heEVxdWF0
aW9uOwotICAgIGV4cG9ydHMuWmVyb0ZhY3RvciA9IFplcm9GYWN0b3I7Ci0gICAgZXhwb3J0cy5P
bmVGYWN0b3IgPSBPbmVGYWN0b3I7Ci0gICAgZXhwb3J0cy5TcmNDb2xvckZhY3RvciA9IFNyY0Nv
bG9yRmFjdG9yOwotICAgIGV4cG9ydHMuT25lTWludXNTcmNDb2xvckZhY3RvciA9IE9uZU1pbnVz
U3JjQ29sb3JGYWN0b3I7Ci0gICAgZXhwb3J0cy5TcmNBbHBoYUZhY3RvciA9IFNyY0FscGhhRmFj
dG9yOwotICAgIGV4cG9ydHMuT25lTWludXNTcmNBbHBoYUZhY3RvciA9IE9uZU1pbnVzU3JjQWxw
aGFGYWN0b3I7CisgICAgZXhwb3J0cy5DeWxpbmRlckJ1ZmZlckdlb21ldHJ5ID0gQ3lsaW5kZXJC
dWZmZXJHZW9tZXRyeTsKKyAgICBleHBvcnRzLkN5bGluZGVyR2VvbWV0cnkgPSBDeWxpbmRlckdl
b21ldHJ5OworICAgIGV4cG9ydHMuQ3lsaW5kcmljYWwgPSBDeWxpbmRyaWNhbDsKKyAgICBleHBv
cnRzLkRhdGFUZXh0dXJlID0gRGF0YVRleHR1cmU7CisgICAgZXhwb3J0cy5EYXRhVGV4dHVyZTJE
QXJyYXkgPSBEYXRhVGV4dHVyZTJEQXJyYXk7CisgICAgZXhwb3J0cy5EYXRhVGV4dHVyZTNEID0g
RGF0YVRleHR1cmUzRDsKKyAgICBleHBvcnRzLkRhdGFUZXh0dXJlTG9hZGVyID0gRGF0YVRleHR1
cmVMb2FkZXI7CisgICAgZXhwb3J0cy5EZWZhdWx0TG9hZGluZ01hbmFnZXIgPSBEZWZhdWx0TG9h
ZGluZ01hbmFnZXI7CisgICAgZXhwb3J0cy5EZXB0aEZvcm1hdCA9IERlcHRoRm9ybWF0OworICAg
IGV4cG9ydHMuRGVwdGhTdGVuY2lsRm9ybWF0ID0gRGVwdGhTdGVuY2lsRm9ybWF0OworICAgIGV4
cG9ydHMuRGVwdGhUZXh0dXJlID0gRGVwdGhUZXh0dXJlOworICAgIGV4cG9ydHMuRGlyZWN0aW9u
YWxMaWdodCA9IERpcmVjdGlvbmFsTGlnaHQ7CisgICAgZXhwb3J0cy5EaXJlY3Rpb25hbExpZ2h0
SGVscGVyID0gRGlyZWN0aW9uYWxMaWdodEhlbHBlcjsKKyAgICBleHBvcnRzLkRpcmVjdGlvbmFs
TGlnaHRTaGFkb3cgPSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93OworICAgIGV4cG9ydHMuRGlzY3Jl
dGVJbnRlcnBvbGFudCA9IERpc2NyZXRlSW50ZXJwb2xhbnQ7CisgICAgZXhwb3J0cy5Eb2RlY2Fo
ZWRyb25CdWZmZXJHZW9tZXRyeSA9IERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OworICAgIGV4
cG9ydHMuRG9kZWNhaGVkcm9uR2VvbWV0cnkgPSBEb2RlY2FoZWRyb25HZW9tZXRyeTsKKyAgICBl
eHBvcnRzLkRvdWJsZVNpZGUgPSBEb3VibGVTaWRlOwogICAgIGV4cG9ydHMuRHN0QWxwaGFGYWN0
b3IgPSBEc3RBbHBoYUZhY3RvcjsKLSAgICBleHBvcnRzLk9uZU1pbnVzRHN0QWxwaGFGYWN0b3Ig
PSBPbmVNaW51c0RzdEFscGhhRmFjdG9yOwogICAgIGV4cG9ydHMuRHN0Q29sb3JGYWN0b3IgPSBE
c3RDb2xvckZhY3RvcjsKLSAgICBleHBvcnRzLk9uZU1pbnVzRHN0Q29sb3JGYWN0b3IgPSBPbmVN
aW51c0RzdENvbG9yRmFjdG9yOwotICAgIGV4cG9ydHMuU3JjQWxwaGFTYXR1cmF0ZUZhY3RvciA9
IFNyY0FscGhhU2F0dXJhdGVGYWN0b3I7Ci0gICAgZXhwb3J0cy5OZXZlckRlcHRoID0gTmV2ZXJE
ZXB0aDsKLSAgICBleHBvcnRzLkFsd2F5c0RlcHRoID0gQWx3YXlzRGVwdGg7Ci0gICAgZXhwb3J0
cy5MZXNzRGVwdGggPSBMZXNzRGVwdGg7Ci0gICAgZXhwb3J0cy5MZXNzRXF1YWxEZXB0aCA9IExl
c3NFcXVhbERlcHRoOworICAgIGV4cG9ydHMuRHluYW1pY0J1ZmZlckF0dHJpYnV0ZSA9IER5bmFt
aWNCdWZmZXJBdHRyaWJ1dGU7CisgICAgZXhwb3J0cy5FZGdlc0dlb21ldHJ5ID0gRWRnZXNHZW9t
ZXRyeTsKKyAgICBleHBvcnRzLkVkZ2VzSGVscGVyID0gRWRnZXNIZWxwZXI7CisgICAgZXhwb3J0
cy5FbGxpcHNlQ3VydmUgPSBFbGxpcHNlQ3VydmU7CiAgICAgZXhwb3J0cy5FcXVhbERlcHRoID0g
RXF1YWxEZXB0aDsKLSAgICBleHBvcnRzLkdyZWF0ZXJFcXVhbERlcHRoID0gR3JlYXRlckVxdWFs
RGVwdGg7Ci0gICAgZXhwb3J0cy5HcmVhdGVyRGVwdGggPSBHcmVhdGVyRGVwdGg7Ci0gICAgZXhw
b3J0cy5Ob3RFcXVhbERlcHRoID0gTm90RXF1YWxEZXB0aDsKLSAgICBleHBvcnRzLk11bHRpcGx5
T3BlcmF0aW9uID0gTXVsdGlwbHlPcGVyYXRpb247Ci0gICAgZXhwb3J0cy5NaXhPcGVyYXRpb24g
PSBNaXhPcGVyYXRpb247Ci0gICAgZXhwb3J0cy5BZGRPcGVyYXRpb24gPSBBZGRPcGVyYXRpb247
Ci0gICAgZXhwb3J0cy5Ob1RvbmVNYXBwaW5nID0gTm9Ub25lTWFwcGluZzsKLSAgICBleHBvcnRz
LkxpbmVhclRvbmVNYXBwaW5nID0gTGluZWFyVG9uZU1hcHBpbmc7Ci0gICAgZXhwb3J0cy5SZWlu
aGFyZFRvbmVNYXBwaW5nID0gUmVpbmhhcmRUb25lTWFwcGluZzsKLSAgICBleHBvcnRzLlVuY2hh
cnRlZDJUb25lTWFwcGluZyA9IFVuY2hhcnRlZDJUb25lTWFwcGluZzsKLSAgICBleHBvcnRzLkNp
bmVvblRvbmVNYXBwaW5nID0gQ2luZW9uVG9uZU1hcHBpbmc7Ci0gICAgZXhwb3J0cy5VVk1hcHBp
bmcgPSBVVk1hcHBpbmc7Ci0gICAgZXhwb3J0cy5DdWJlUmVmbGVjdGlvbk1hcHBpbmcgPSBDdWJl
UmVmbGVjdGlvbk1hcHBpbmc7Ci0gICAgZXhwb3J0cy5DdWJlUmVmcmFjdGlvbk1hcHBpbmcgPSBD
dWJlUmVmcmFjdGlvbk1hcHBpbmc7CiAgICAgZXhwb3J0cy5FcXVpcmVjdGFuZ3VsYXJSZWZsZWN0
aW9uTWFwcGluZyA9IEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOwogICAgIGV4cG9y
dHMuRXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmcgPSBFcXVpcmVjdGFuZ3VsYXJSZWZy
YWN0aW9uTWFwcGluZzsKLSAgICBleHBvcnRzLlNwaGVyaWNhbFJlZmxlY3Rpb25NYXBwaW5nID0g
U3BoZXJpY2FsUmVmbGVjdGlvbk1hcHBpbmc7Ci0gICAgZXhwb3J0cy5DdWJlVVZSZWZsZWN0aW9u
TWFwcGluZyA9IEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nOwotICAgIGV4cG9ydHMuQ3ViZVVWUmVm
cmFjdGlvbk1hcHBpbmcgPSBDdWJlVVZSZWZyYWN0aW9uTWFwcGluZzsKLSAgICBleHBvcnRzLlJl
cGVhdFdyYXBwaW5nID0gUmVwZWF0V3JhcHBpbmc7Ci0gICAgZXhwb3J0cy5DbGFtcFRvRWRnZVdy
YXBwaW5nID0gQ2xhbXBUb0VkZ2VXcmFwcGluZzsKKyAgICBleHBvcnRzLkV1bGVyID0gRXVsZXI7
CisgICAgZXhwb3J0cy5FdmVudERpc3BhdGNoZXIgPSBFdmVudERpc3BhdGNoZXI7CisgICAgZXhw
b3J0cy5FeHRydWRlQnVmZmVyR2VvbWV0cnkgPSBFeHRydWRlQnVmZmVyR2VvbWV0cnk7CisgICAg
ZXhwb3J0cy5FeHRydWRlR2VvbWV0cnkgPSBFeHRydWRlR2VvbWV0cnk7CisgICAgZXhwb3J0cy5G
YWNlMyA9IEZhY2UzOworICAgIGV4cG9ydHMuRmFjZTQgPSBGYWNlNDsKKyAgICBleHBvcnRzLkZh
Y2VDb2xvcnMgPSBGYWNlQ29sb3JzOworICAgIGV4cG9ydHMuRmFjZU5vcm1hbHNIZWxwZXIgPSBG
YWNlTm9ybWFsc0hlbHBlcjsKKyAgICBleHBvcnRzLkZpbGVMb2FkZXIgPSBGaWxlTG9hZGVyOwor
ICAgIGV4cG9ydHMuRmxhdFNoYWRpbmcgPSBGbGF0U2hhZGluZzsKKyAgICBleHBvcnRzLkZsb2F0
MzJBdHRyaWJ1dGUgPSBGbG9hdDMyQXR0cmlidXRlOworICAgIGV4cG9ydHMuRmxvYXQzMkJ1ZmZl
ckF0dHJpYnV0ZSA9IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGU7CisgICAgZXhwb3J0cy5GbG9hdDY0
QXR0cmlidXRlID0gRmxvYXQ2NEF0dHJpYnV0ZTsKKyAgICBleHBvcnRzLkZsb2F0NjRCdWZmZXJB
dHRyaWJ1dGUgPSBGbG9hdDY0QnVmZmVyQXR0cmlidXRlOworICAgIGV4cG9ydHMuRmxvYXRUeXBl
ID0gRmxvYXRUeXBlOworICAgIGV4cG9ydHMuRm9nID0gRm9nOworICAgIGV4cG9ydHMuRm9nRXhw
MiA9IEZvZ0V4cDI7CisgICAgZXhwb3J0cy5Gb250ID0gRm9udDsKKyAgICBleHBvcnRzLkZvbnRM
b2FkZXIgPSBGb250TG9hZGVyOworICAgIGV4cG9ydHMuRnJvbnRGYWNlRGlyZWN0aW9uQ0NXID0g
RnJvbnRGYWNlRGlyZWN0aW9uQ0NXOworICAgIGV4cG9ydHMuRnJvbnRGYWNlRGlyZWN0aW9uQ1cg
PSBGcm9udEZhY2VEaXJlY3Rpb25DVzsKKyAgICBleHBvcnRzLkZyb250U2lkZSA9IEZyb250U2lk
ZTsKKyAgICBleHBvcnRzLkZydXN0dW0gPSBGcnVzdHVtOworICAgIGV4cG9ydHMuR2FtbWFFbmNv
ZGluZyA9IEdhbW1hRW5jb2Rpbmc7CisgICAgZXhwb3J0cy5HZW9tZXRyeSA9IEdlb21ldHJ5Owor
ICAgIGV4cG9ydHMuR2VvbWV0cnlVdGlscyA9IEdlb21ldHJ5VXRpbHM7CisgICAgZXhwb3J0cy5H
cmVhdGVyRGVwdGggPSBHcmVhdGVyRGVwdGg7CisgICAgZXhwb3J0cy5HcmVhdGVyRXF1YWxEZXB0
aCA9IEdyZWF0ZXJFcXVhbERlcHRoOworICAgIGV4cG9ydHMuR3JpZEhlbHBlciA9IEdyaWRIZWxw
ZXI7CisgICAgZXhwb3J0cy5Hcm91cCA9IEdyb3VwOworICAgIGV4cG9ydHMuSGFsZkZsb2F0VHlw
ZSA9IEhhbGZGbG9hdFR5cGU7CisgICAgZXhwb3J0cy5IZW1pc3BoZXJlTGlnaHQgPSBIZW1pc3Bo
ZXJlTGlnaHQ7CisgICAgZXhwb3J0cy5IZW1pc3BoZXJlTGlnaHRIZWxwZXIgPSBIZW1pc3BoZXJl
TGlnaHRIZWxwZXI7CisgICAgZXhwb3J0cy5IZW1pc3BoZXJlTGlnaHRQcm9iZSA9IEhlbWlzcGhl
cmVMaWdodFByb2JlOworICAgIGV4cG9ydHMuSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeSA9IElj
b3NhaGVkcm9uQnVmZmVyR2VvbWV0cnk7CisgICAgZXhwb3J0cy5JY29zYWhlZHJvbkdlb21ldHJ5
ID0gSWNvc2FoZWRyb25HZW9tZXRyeTsKKyAgICBleHBvcnRzLkltYWdlQml0bWFwTG9hZGVyID0g
SW1hZ2VCaXRtYXBMb2FkZXI7CisgICAgZXhwb3J0cy5JbWFnZUxvYWRlciA9IEltYWdlTG9hZGVy
OworICAgIGV4cG9ydHMuSW1hZ2VVdGlscyA9IEltYWdlVXRpbHM7CisgICAgZXhwb3J0cy5JbW1l
ZGlhdGVSZW5kZXJPYmplY3QgPSBJbW1lZGlhdGVSZW5kZXJPYmplY3Q7CisgICAgZXhwb3J0cy5J
bnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUgPSBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU7CisgICAg
ZXhwb3J0cy5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSA9IEluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5
OworICAgIGV4cG9ydHMuSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIgPSBJbnN0YW5jZWRJbnRl
cmxlYXZlZEJ1ZmZlcjsKKyAgICBleHBvcnRzLkludDE2QXR0cmlidXRlID0gSW50MTZBdHRyaWJ1
dGU7CisgICAgZXhwb3J0cy5JbnQxNkJ1ZmZlckF0dHJpYnV0ZSA9IEludDE2QnVmZmVyQXR0cmli
dXRlOworICAgIGV4cG9ydHMuSW50MzJBdHRyaWJ1dGUgPSBJbnQzMkF0dHJpYnV0ZTsKKyAgICBl
eHBvcnRzLkludDMyQnVmZmVyQXR0cmlidXRlID0gSW50MzJCdWZmZXJBdHRyaWJ1dGU7CisgICAg
ZXhwb3J0cy5JbnQ4QXR0cmlidXRlID0gSW50OEF0dHJpYnV0ZTsKKyAgICBleHBvcnRzLkludDhC
dWZmZXJBdHRyaWJ1dGUgPSBJbnQ4QnVmZmVyQXR0cmlidXRlOworICAgIGV4cG9ydHMuSW50VHlw
ZSA9IEludFR5cGU7CisgICAgZXhwb3J0cy5JbnRlcmxlYXZlZEJ1ZmZlciA9IEludGVybGVhdmVk
QnVmZmVyOworICAgIGV4cG9ydHMuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUgPSBJbnRlcmxl
YXZlZEJ1ZmZlckF0dHJpYnV0ZTsKKyAgICBleHBvcnRzLkludGVycG9sYW50ID0gSW50ZXJwb2xh
bnQ7CisgICAgZXhwb3J0cy5JbnRlcnBvbGF0ZURpc2NyZXRlID0gSW50ZXJwb2xhdGVEaXNjcmV0
ZTsKKyAgICBleHBvcnRzLkludGVycG9sYXRlTGluZWFyID0gSW50ZXJwb2xhdGVMaW5lYXI7Cisg
ICAgZXhwb3J0cy5JbnRlcnBvbGF0ZVNtb290aCA9IEludGVycG9sYXRlU21vb3RoOworICAgIGV4
cG9ydHMuSlNPTkxvYWRlciA9IEpTT05Mb2FkZXI7CisgICAgZXhwb3J0cy5LZXlmcmFtZVRyYWNr
ID0gS2V5ZnJhbWVUcmFjazsKKyAgICBleHBvcnRzLkxPRCA9IExPRDsKKyAgICBleHBvcnRzLkxh
dGhlQnVmZmVyR2VvbWV0cnkgPSBMYXRoZUJ1ZmZlckdlb21ldHJ5OworICAgIGV4cG9ydHMuTGF0
aGVHZW9tZXRyeSA9IExhdGhlR2VvbWV0cnk7CisgICAgZXhwb3J0cy5MYXllcnMgPSBMYXllcnM7
CisgICAgZXhwb3J0cy5MZW5zRmxhcmUgPSBMZW5zRmxhcmU7CisgICAgZXhwb3J0cy5MZXNzRGVw
dGggPSBMZXNzRGVwdGg7CisgICAgZXhwb3J0cy5MZXNzRXF1YWxEZXB0aCA9IExlc3NFcXVhbERl
cHRoOworICAgIGV4cG9ydHMuTGlnaHQgPSBMaWdodDsKKyAgICBleHBvcnRzLkxpZ2h0UHJvYmUg
PSBMaWdodFByb2JlOworICAgIGV4cG9ydHMuTGlnaHRQcm9iZUhlbHBlciA9IExpZ2h0UHJvYmVI
ZWxwZXI7CisgICAgZXhwb3J0cy5MaWdodFNoYWRvdyA9IExpZ2h0U2hhZG93OworICAgIGV4cG9y
dHMuTGluZSA9IExpbmU7CisgICAgZXhwb3J0cy5MaW5lMyA9IExpbmUzOworICAgIGV4cG9ydHMu
TGluZUJhc2ljTWF0ZXJpYWwgPSBMaW5lQmFzaWNNYXRlcmlhbDsKKyAgICBleHBvcnRzLkxpbmVD
dXJ2ZSA9IExpbmVDdXJ2ZTsKKyAgICBleHBvcnRzLkxpbmVDdXJ2ZTMgPSBMaW5lQ3VydmUzOwor
ICAgIGV4cG9ydHMuTGluZURhc2hlZE1hdGVyaWFsID0gTGluZURhc2hlZE1hdGVyaWFsOworICAg
IGV4cG9ydHMuTGluZUxvb3AgPSBMaW5lTG9vcDsKKyAgICBleHBvcnRzLkxpbmVQaWVjZXMgPSBM
aW5lUGllY2VzOworICAgIGV4cG9ydHMuTGluZVNlZ21lbnRzID0gTGluZVNlZ21lbnRzOworICAg
IGV4cG9ydHMuTGluZVN0cmlwID0gTGluZVN0cmlwOworICAgIGV4cG9ydHMuTGluZWFyRW5jb2Rp
bmcgPSBMaW5lYXJFbmNvZGluZzsKKyAgICBleHBvcnRzLkxpbmVhckZpbHRlciA9IExpbmVhckZp
bHRlcjsKKyAgICBleHBvcnRzLkxpbmVhckludGVycG9sYW50ID0gTGluZWFySW50ZXJwb2xhbnQ7
CisgICAgZXhwb3J0cy5MaW5lYXJNaXBNYXBMaW5lYXJGaWx0ZXIgPSBMaW5lYXJNaXBNYXBMaW5l
YXJGaWx0ZXI7CisgICAgZXhwb3J0cy5MaW5lYXJNaXBNYXBOZWFyZXN0RmlsdGVyID0gTGluZWFy
TWlwTWFwTmVhcmVzdEZpbHRlcjsKKyAgICBleHBvcnRzLkxpbmVhclRvbmVNYXBwaW5nID0gTGlu
ZWFyVG9uZU1hcHBpbmc7CisgICAgZXhwb3J0cy5Mb2FkZXIgPSBMb2FkZXI7CisgICAgZXhwb3J0
cy5Mb2FkZXJVdGlscyA9IExvYWRlclV0aWxzOworICAgIGV4cG9ydHMuTG9hZGluZ01hbmFnZXIg
PSBMb2FkaW5nTWFuYWdlcjsKKyAgICBleHBvcnRzLkxvZ0x1dkVuY29kaW5nID0gTG9nTHV2RW5j
b2Rpbmc7CisgICAgZXhwb3J0cy5Mb29wT25jZSA9IExvb3BPbmNlOworICAgIGV4cG9ydHMuTG9v
cFBpbmdQb25nID0gTG9vcFBpbmdQb25nOworICAgIGV4cG9ydHMuTG9vcFJlcGVhdCA9IExvb3BS
ZXBlYXQ7CisgICAgZXhwb3J0cy5MdW1pbmFuY2VBbHBoYUZvcm1hdCA9IEx1bWluYW5jZUFscGhh
Rm9ybWF0OworICAgIGV4cG9ydHMuTHVtaW5hbmNlRm9ybWF0ID0gTHVtaW5hbmNlRm9ybWF0Owor
ICAgIGV4cG9ydHMuTU9VU0UgPSBNT1VTRTsKKyAgICBleHBvcnRzLk1hdGVyaWFsID0gTWF0ZXJp
YWw7CisgICAgZXhwb3J0cy5NYXRlcmlhbExvYWRlciA9IE1hdGVyaWFsTG9hZGVyOworICAgIGV4
cG9ydHMuTWF0aCA9IF9NYXRoOworICAgIGV4cG9ydHMuTWF0cml4MyA9IE1hdHJpeDM7CisgICAg
ZXhwb3J0cy5NYXRyaXg0ID0gTWF0cml4NDsKKyAgICBleHBvcnRzLk1heEVxdWF0aW9uID0gTWF4
RXF1YXRpb247CisgICAgZXhwb3J0cy5NZXNoID0gTWVzaDsKKyAgICBleHBvcnRzLk1lc2hCYXNp
Y01hdGVyaWFsID0gTWVzaEJhc2ljTWF0ZXJpYWw7CisgICAgZXhwb3J0cy5NZXNoRGVwdGhNYXRl
cmlhbCA9IE1lc2hEZXB0aE1hdGVyaWFsOworICAgIGV4cG9ydHMuTWVzaERpc3RhbmNlTWF0ZXJp
YWwgPSBNZXNoRGlzdGFuY2VNYXRlcmlhbDsKKyAgICBleHBvcnRzLk1lc2hGYWNlTWF0ZXJpYWwg
PSBNZXNoRmFjZU1hdGVyaWFsOworICAgIGV4cG9ydHMuTWVzaExhbWJlcnRNYXRlcmlhbCA9IE1l
c2hMYW1iZXJ0TWF0ZXJpYWw7CisgICAgZXhwb3J0cy5NZXNoTWF0Y2FwTWF0ZXJpYWwgPSBNZXNo
TWF0Y2FwTWF0ZXJpYWw7CisgICAgZXhwb3J0cy5NZXNoTm9ybWFsTWF0ZXJpYWwgPSBNZXNoTm9y
bWFsTWF0ZXJpYWw7CisgICAgZXhwb3J0cy5NZXNoUGhvbmdNYXRlcmlhbCA9IE1lc2hQaG9uZ01h
dGVyaWFsOworICAgIGV4cG9ydHMuTWVzaFBoeXNpY2FsTWF0ZXJpYWwgPSBNZXNoUGh5c2ljYWxN
YXRlcmlhbDsKKyAgICBleHBvcnRzLk1lc2hTdGFuZGFyZE1hdGVyaWFsID0gTWVzaFN0YW5kYXJk
TWF0ZXJpYWw7CisgICAgZXhwb3J0cy5NZXNoVG9vbk1hdGVyaWFsID0gTWVzaFRvb25NYXRlcmlh
bDsKKyAgICBleHBvcnRzLk1pbkVxdWF0aW9uID0gTWluRXF1YXRpb247CiAgICAgZXhwb3J0cy5N
aXJyb3JlZFJlcGVhdFdyYXBwaW5nID0gTWlycm9yZWRSZXBlYXRXcmFwcGluZzsKKyAgICBleHBv
cnRzLk1peE9wZXJhdGlvbiA9IE1peE9wZXJhdGlvbjsKKyAgICBleHBvcnRzLk11bHRpTWF0ZXJp
YWwgPSBNdWx0aU1hdGVyaWFsOworICAgIGV4cG9ydHMuTXVsdGlwbHlCbGVuZGluZyA9IE11bHRp
cGx5QmxlbmRpbmc7CisgICAgZXhwb3J0cy5NdWx0aXBseU9wZXJhdGlvbiA9IE11bHRpcGx5T3Bl
cmF0aW9uOwogICAgIGV4cG9ydHMuTmVhcmVzdEZpbHRlciA9IE5lYXJlc3RGaWx0ZXI7Ci0gICAg
ZXhwb3J0cy5OZWFyZXN0TWlwTWFwTmVhcmVzdEZpbHRlciA9IE5lYXJlc3RNaXBNYXBOZWFyZXN0
RmlsdGVyOwogICAgIGV4cG9ydHMuTmVhcmVzdE1pcE1hcExpbmVhckZpbHRlciA9IE5lYXJlc3RN
aXBNYXBMaW5lYXJGaWx0ZXI7Ci0gICAgZXhwb3J0cy5MaW5lYXJGaWx0ZXIgPSBMaW5lYXJGaWx0
ZXI7Ci0gICAgZXhwb3J0cy5MaW5lYXJNaXBNYXBOZWFyZXN0RmlsdGVyID0gTGluZWFyTWlwTWFw
TmVhcmVzdEZpbHRlcjsKLSAgICBleHBvcnRzLkxpbmVhck1pcE1hcExpbmVhckZpbHRlciA9IExp
bmVhck1pcE1hcExpbmVhckZpbHRlcjsKLSAgICBleHBvcnRzLlVuc2lnbmVkQnl0ZVR5cGUgPSBV
bnNpZ25lZEJ5dGVUeXBlOwotICAgIGV4cG9ydHMuQnl0ZVR5cGUgPSBCeXRlVHlwZTsKLSAgICBl
eHBvcnRzLlNob3J0VHlwZSA9IFNob3J0VHlwZTsKLSAgICBleHBvcnRzLlVuc2lnbmVkU2hvcnRU
eXBlID0gVW5zaWduZWRTaG9ydFR5cGU7Ci0gICAgZXhwb3J0cy5JbnRUeXBlID0gSW50VHlwZTsK
LSAgICBleHBvcnRzLlVuc2lnbmVkSW50VHlwZSA9IFVuc2lnbmVkSW50VHlwZTsKLSAgICBleHBv
cnRzLkZsb2F0VHlwZSA9IEZsb2F0VHlwZTsKLSAgICBleHBvcnRzLkhhbGZGbG9hdFR5cGUgPSBI
YWxmRmxvYXRUeXBlOwotICAgIGV4cG9ydHMuVW5zaWduZWRTaG9ydDQ0NDRUeXBlID0gVW5zaWdu
ZWRTaG9ydDQ0NDRUeXBlOwotICAgIGV4cG9ydHMuVW5zaWduZWRTaG9ydDU1NTFUeXBlID0gVW5z
aWduZWRTaG9ydDU1NTFUeXBlOwotICAgIGV4cG9ydHMuVW5zaWduZWRTaG9ydDU2NVR5cGUgPSBV
bnNpZ25lZFNob3J0NTY1VHlwZTsKLSAgICBleHBvcnRzLlVuc2lnbmVkSW50MjQ4VHlwZSA9IFVu
c2lnbmVkSW50MjQ4VHlwZTsKLSAgICBleHBvcnRzLkFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXQ7
Ci0gICAgZXhwb3J0cy5SR0JGb3JtYXQgPSBSR0JGb3JtYXQ7CisgICAgZXhwb3J0cy5OZWFyZXN0
TWlwTWFwTmVhcmVzdEZpbHRlciA9IE5lYXJlc3RNaXBNYXBOZWFyZXN0RmlsdGVyOworICAgIGV4
cG9ydHMuTmV2ZXJEZXB0aCA9IE5ldmVyRGVwdGg7CisgICAgZXhwb3J0cy5Ob0JsZW5kaW5nID0g
Tm9CbGVuZGluZzsKKyAgICBleHBvcnRzLk5vQ29sb3JzID0gTm9Db2xvcnM7CisgICAgZXhwb3J0
cy5Ob1RvbmVNYXBwaW5nID0gTm9Ub25lTWFwcGluZzsKKyAgICBleHBvcnRzLk5vcm1hbEJsZW5k
aW5nID0gTm9ybWFsQmxlbmRpbmc7CisgICAgZXhwb3J0cy5Ob3RFcXVhbERlcHRoID0gTm90RXF1
YWxEZXB0aDsKKyAgICBleHBvcnRzLk51bWJlcktleWZyYW1lVHJhY2sgPSBOdW1iZXJLZXlmcmFt
ZVRyYWNrOworICAgIGV4cG9ydHMuT2JqZWN0M0QgPSBPYmplY3QzRDsKKyAgICBleHBvcnRzLk9i
amVjdExvYWRlciA9IE9iamVjdExvYWRlcjsKKyAgICBleHBvcnRzLk9iamVjdFNwYWNlTm9ybWFs
TWFwID0gT2JqZWN0U3BhY2VOb3JtYWxNYXA7CisgICAgZXhwb3J0cy5PY3RhaGVkcm9uQnVmZmVy
R2VvbWV0cnkgPSBPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk7CisgICAgZXhwb3J0cy5PY3RhaGVk
cm9uR2VvbWV0cnkgPSBPY3RhaGVkcm9uR2VvbWV0cnk7CisgICAgZXhwb3J0cy5PbmVGYWN0b3Ig
PSBPbmVGYWN0b3I7CisgICAgZXhwb3J0cy5PbmVNaW51c0RzdEFscGhhRmFjdG9yID0gT25lTWlu
dXNEc3RBbHBoYUZhY3RvcjsKKyAgICBleHBvcnRzLk9uZU1pbnVzRHN0Q29sb3JGYWN0b3IgPSBP
bmVNaW51c0RzdENvbG9yRmFjdG9yOworICAgIGV4cG9ydHMuT25lTWludXNTcmNBbHBoYUZhY3Rv
ciA9IE9uZU1pbnVzU3JjQWxwaGFGYWN0b3I7CisgICAgZXhwb3J0cy5PbmVNaW51c1NyY0NvbG9y
RmFjdG9yID0gT25lTWludXNTcmNDb2xvckZhY3RvcjsKKyAgICBleHBvcnRzLk9ydGhvZ3JhcGhp
Y0NhbWVyYSA9IE9ydGhvZ3JhcGhpY0NhbWVyYTsKKyAgICBleHBvcnRzLlBDRlNoYWRvd01hcCA9
IFBDRlNoYWRvd01hcDsKKyAgICBleHBvcnRzLlBDRlNvZnRTaGFkb3dNYXAgPSBQQ0ZTb2Z0U2hh
ZG93TWFwOworICAgIGV4cG9ydHMuUGFyYW1ldHJpY0J1ZmZlckdlb21ldHJ5ID0gUGFyYW1ldHJp
Y0J1ZmZlckdlb21ldHJ5OworICAgIGV4cG9ydHMuUGFyYW1ldHJpY0dlb21ldHJ5ID0gUGFyYW1l
dHJpY0dlb21ldHJ5OworICAgIGV4cG9ydHMuUGFydGljbGUgPSBQYXJ0aWNsZTsKKyAgICBleHBv
cnRzLlBhcnRpY2xlQmFzaWNNYXRlcmlhbCA9IFBhcnRpY2xlQmFzaWNNYXRlcmlhbDsKKyAgICBl
eHBvcnRzLlBhcnRpY2xlU3lzdGVtID0gUGFydGljbGVTeXN0ZW07CisgICAgZXhwb3J0cy5QYXJ0
aWNsZVN5c3RlbU1hdGVyaWFsID0gUGFydGljbGVTeXN0ZW1NYXRlcmlhbDsKKyAgICBleHBvcnRz
LlBhdGggPSBQYXRoOworICAgIGV4cG9ydHMuUGVyc3BlY3RpdmVDYW1lcmEgPSBQZXJzcGVjdGl2
ZUNhbWVyYTsKKyAgICBleHBvcnRzLlBsYW5lID0gUGxhbmU7CisgICAgZXhwb3J0cy5QbGFuZUJ1
ZmZlckdlb21ldHJ5ID0gUGxhbmVCdWZmZXJHZW9tZXRyeTsKKyAgICBleHBvcnRzLlBsYW5lR2Vv
bWV0cnkgPSBQbGFuZUdlb21ldHJ5OworICAgIGV4cG9ydHMuUGxhbmVIZWxwZXIgPSBQbGFuZUhl
bHBlcjsKKyAgICBleHBvcnRzLlBvaW50Q2xvdWQgPSBQb2ludENsb3VkOworICAgIGV4cG9ydHMu
UG9pbnRDbG91ZE1hdGVyaWFsID0gUG9pbnRDbG91ZE1hdGVyaWFsOworICAgIGV4cG9ydHMuUG9p
bnRMaWdodCA9IFBvaW50TGlnaHQ7CisgICAgZXhwb3J0cy5Qb2ludExpZ2h0SGVscGVyID0gUG9p
bnRMaWdodEhlbHBlcjsKKyAgICBleHBvcnRzLlBvaW50cyA9IFBvaW50czsKKyAgICBleHBvcnRz
LlBvaW50c01hdGVyaWFsID0gUG9pbnRzTWF0ZXJpYWw7CisgICAgZXhwb3J0cy5Qb2xhckdyaWRI
ZWxwZXIgPSBQb2xhckdyaWRIZWxwZXI7CisgICAgZXhwb3J0cy5Qb2x5aGVkcm9uQnVmZmVyR2Vv
bWV0cnkgPSBQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnk7CisgICAgZXhwb3J0cy5Qb2x5aGVkcm9u
R2VvbWV0cnkgPSBQb2x5aGVkcm9uR2VvbWV0cnk7CisgICAgZXhwb3J0cy5Qb3NpdGlvbmFsQXVk
aW8gPSBQb3NpdGlvbmFsQXVkaW87CisgICAgZXhwb3J0cy5Qb3NpdGlvbmFsQXVkaW9IZWxwZXIg
PSBQb3NpdGlvbmFsQXVkaW9IZWxwZXI7CisgICAgZXhwb3J0cy5Qcm9wZXJ0eUJpbmRpbmcgPSBQ
cm9wZXJ0eUJpbmRpbmc7CisgICAgZXhwb3J0cy5Qcm9wZXJ0eU1peGVyID0gUHJvcGVydHlNaXhl
cjsKKyAgICBleHBvcnRzLlF1YWRyYXRpY0JlemllckN1cnZlID0gUXVhZHJhdGljQmV6aWVyQ3Vy
dmU7CisgICAgZXhwb3J0cy5RdWFkcmF0aWNCZXppZXJDdXJ2ZTMgPSBRdWFkcmF0aWNCZXppZXJD
dXJ2ZTM7CisgICAgZXhwb3J0cy5RdWF0ZXJuaW9uID0gUXVhdGVybmlvbjsKKyAgICBleHBvcnRz
LlF1YXRlcm5pb25LZXlmcmFtZVRyYWNrID0gUXVhdGVybmlvbktleWZyYW1lVHJhY2s7CisgICAg
ZXhwb3J0cy5RdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQgPSBRdWF0ZXJuaW9uTGluZWFySW50
ZXJwb2xhbnQ7CisgICAgZXhwb3J0cy5SRVZJU0lPTiA9IFJFVklTSU9OOworICAgIGV4cG9ydHMu
UkdCQURlcHRoUGFja2luZyA9IFJHQkFEZXB0aFBhY2tpbmc7CiAgICAgZXhwb3J0cy5SR0JBRm9y
bWF0ID0gUkdCQUZvcm1hdDsKLSAgICBleHBvcnRzLkx1bWluYW5jZUZvcm1hdCA9IEx1bWluYW5j
ZUZvcm1hdDsKLSAgICBleHBvcnRzLkx1bWluYW5jZUFscGhhRm9ybWF0ID0gTHVtaW5hbmNlQWxw
aGFGb3JtYXQ7Ci0gICAgZXhwb3J0cy5SR0JFRm9ybWF0ID0gUkdCRUZvcm1hdDsKLSAgICBleHBv
cnRzLkRlcHRoRm9ybWF0ID0gRGVwdGhGb3JtYXQ7Ci0gICAgZXhwb3J0cy5EZXB0aFN0ZW5jaWxG
b3JtYXQgPSBEZXB0aFN0ZW5jaWxGb3JtYXQ7Ci0gICAgZXhwb3J0cy5SR0JfUzNUQ19EWFQxX0Zv
cm1hdCA9IFJHQl9TM1RDX0RYVDFfRm9ybWF0OwotICAgIGV4cG9ydHMuUkdCQV9TM1RDX0RYVDFf
Rm9ybWF0ID0gUkdCQV9TM1RDX0RYVDFfRm9ybWF0OwotICAgIGV4cG9ydHMuUkdCQV9TM1RDX0RY
VDNfRm9ybWF0ID0gUkdCQV9TM1RDX0RYVDNfRm9ybWF0OwotICAgIGV4cG9ydHMuUkdCQV9TM1RD
X0RYVDVfRm9ybWF0ID0gUkdCQV9TM1RDX0RYVDVfRm9ybWF0OwotICAgIGV4cG9ydHMuUkdCX1BW
UlRDXzRCUFBWMV9Gb3JtYXQgPSBSR0JfUFZSVENfNEJQUFYxX0Zvcm1hdDsKLSAgICBleHBvcnRz
LlJHQl9QVlJUQ18yQlBQVjFfRm9ybWF0ID0gUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQ7Ci0gICAg
ZXhwb3J0cy5SR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQgPSBSR0JBX1BWUlRDXzRCUFBWMV9Gb3Jt
YXQ7Ci0gICAgZXhwb3J0cy5SR0JBX1BWUlRDXzJCUFBWMV9Gb3JtYXQgPSBSR0JBX1BWUlRDXzJC
UFBWMV9Gb3JtYXQ7Ci0gICAgZXhwb3J0cy5SR0JfRVRDMV9Gb3JtYXQgPSBSR0JfRVRDMV9Gb3Jt
YXQ7CisgICAgZXhwb3J0cy5SR0JBX0FTVENfMTB4MTBfRm9ybWF0ID0gUkdCQV9BU1RDXzEweDEw
X0Zvcm1hdDsKKyAgICBleHBvcnRzLlJHQkFfQVNUQ18xMHg1X0Zvcm1hdCA9IFJHQkFfQVNUQ18x
MHg1X0Zvcm1hdDsKKyAgICBleHBvcnRzLlJHQkFfQVNUQ18xMHg2X0Zvcm1hdCA9IFJHQkFfQVNU
Q18xMHg2X0Zvcm1hdDsKKyAgICBleHBvcnRzLlJHQkFfQVNUQ18xMHg4X0Zvcm1hdCA9IFJHQkFf
QVNUQ18xMHg4X0Zvcm1hdDsKKyAgICBleHBvcnRzLlJHQkFfQVNUQ18xMngxMF9Gb3JtYXQgPSBS
R0JBX0FTVENfMTJ4MTBfRm9ybWF0OworICAgIGV4cG9ydHMuUkdCQV9BU1RDXzEyeDEyX0Zvcm1h
dCA9IFJHQkFfQVNUQ18xMngxMl9Gb3JtYXQ7CiAgICAgZXhwb3J0cy5SR0JBX0FTVENfNHg0X0Zv
cm1hdCA9IFJHQkFfQVNUQ180eDRfRm9ybWF0OwogICAgIGV4cG9ydHMuUkdCQV9BU1RDXzV4NF9G
b3JtYXQgPSBSR0JBX0FTVENfNXg0X0Zvcm1hdDsKICAgICBleHBvcnRzLlJHQkFfQVNUQ181eDVf
Rm9ybWF0ID0gUkdCQV9BU1RDXzV4NV9Gb3JtYXQ7CkBAIC00NzM0OCw3NSArNDkxNDIsMTI4IEBA
CiAgICAgZXhwb3J0cy5SR0JBX0FTVENfOHg1X0Zvcm1hdCA9IFJHQkFfQVNUQ184eDVfRm9ybWF0
OwogICAgIGV4cG9ydHMuUkdCQV9BU1RDXzh4Nl9Gb3JtYXQgPSBSR0JBX0FTVENfOHg2X0Zvcm1h
dDsKICAgICBleHBvcnRzLlJHQkFfQVNUQ184eDhfRm9ybWF0ID0gUkdCQV9BU1RDXzh4OF9Gb3Jt
YXQ7Ci0gICAgZXhwb3J0cy5SR0JBX0FTVENfMTB4NV9Gb3JtYXQgPSBSR0JBX0FTVENfMTB4NV9G
b3JtYXQ7Ci0gICAgZXhwb3J0cy5SR0JBX0FTVENfMTB4Nl9Gb3JtYXQgPSBSR0JBX0FTVENfMTB4
Nl9Gb3JtYXQ7Ci0gICAgZXhwb3J0cy5SR0JBX0FTVENfMTB4OF9Gb3JtYXQgPSBSR0JBX0FTVENf
MTB4OF9Gb3JtYXQ7Ci0gICAgZXhwb3J0cy5SR0JBX0FTVENfMTB4MTBfRm9ybWF0ID0gUkdCQV9B
U1RDXzEweDEwX0Zvcm1hdDsKLSAgICBleHBvcnRzLlJHQkFfQVNUQ18xMngxMF9Gb3JtYXQgPSBS
R0JBX0FTVENfMTJ4MTBfRm9ybWF0OwotICAgIGV4cG9ydHMuUkdCQV9BU1RDXzEyeDEyX0Zvcm1h
dCA9IFJHQkFfQVNUQ18xMngxMl9Gb3JtYXQ7Ci0gICAgZXhwb3J0cy5Mb29wT25jZSA9IExvb3BP
bmNlOwotICAgIGV4cG9ydHMuTG9vcFJlcGVhdCA9IExvb3BSZXBlYXQ7Ci0gICAgZXhwb3J0cy5M
b29wUGluZ1BvbmcgPSBMb29wUGluZ1Bvbmc7Ci0gICAgZXhwb3J0cy5JbnRlcnBvbGF0ZURpc2Ny
ZXRlID0gSW50ZXJwb2xhdGVEaXNjcmV0ZTsKLSAgICBleHBvcnRzLkludGVycG9sYXRlTGluZWFy
ID0gSW50ZXJwb2xhdGVMaW5lYXI7Ci0gICAgZXhwb3J0cy5JbnRlcnBvbGF0ZVNtb290aCA9IElu
dGVycG9sYXRlU21vb3RoOwotICAgIGV4cG9ydHMuWmVyb0N1cnZhdHVyZUVuZGluZyA9IFplcm9D
dXJ2YXR1cmVFbmRpbmc7Ci0gICAgZXhwb3J0cy5aZXJvU2xvcGVFbmRpbmcgPSBaZXJvU2xvcGVF
bmRpbmc7Ci0gICAgZXhwb3J0cy5XcmFwQXJvdW5kRW5kaW5nID0gV3JhcEFyb3VuZEVuZGluZzsK
LSAgICBleHBvcnRzLlRyaWFuZ2xlc0RyYXdNb2RlID0gVHJpYW5nbGVzRHJhd01vZGU7Ci0gICAg
ZXhwb3J0cy5UcmlhbmdsZVN0cmlwRHJhd01vZGUgPSBUcmlhbmdsZVN0cmlwRHJhd01vZGU7Ci0g
ICAgZXhwb3J0cy5UcmlhbmdsZUZhbkRyYXdNb2RlID0gVHJpYW5nbGVGYW5EcmF3TW9kZTsKLSAg
ICBleHBvcnRzLkxpbmVhckVuY29kaW5nID0gTGluZWFyRW5jb2Rpbmc7Ci0gICAgZXhwb3J0cy5z
UkdCRW5jb2RpbmcgPSBzUkdCRW5jb2Rpbmc7Ci0gICAgZXhwb3J0cy5HYW1tYUVuY29kaW5nID0g
R2FtbWFFbmNvZGluZzsKKyAgICBleHBvcnRzLlJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdCA9IFJH
QkFfUFZSVENfMkJQUFYxX0Zvcm1hdDsKKyAgICBleHBvcnRzLlJHQkFfUFZSVENfNEJQUFYxX0Zv
cm1hdCA9IFJHQkFfUFZSVENfNEJQUFYxX0Zvcm1hdDsKKyAgICBleHBvcnRzLlJHQkFfUzNUQ19E
WFQxX0Zvcm1hdCA9IFJHQkFfUzNUQ19EWFQxX0Zvcm1hdDsKKyAgICBleHBvcnRzLlJHQkFfUzNU
Q19EWFQzX0Zvcm1hdCA9IFJHQkFfUzNUQ19EWFQzX0Zvcm1hdDsKKyAgICBleHBvcnRzLlJHQkFf
UzNUQ19EWFQ1X0Zvcm1hdCA9IFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdDsKKyAgICBleHBvcnRzLlJH
QkRFbmNvZGluZyA9IFJHQkRFbmNvZGluZzsKICAgICBleHBvcnRzLlJHQkVFbmNvZGluZyA9IFJH
QkVFbmNvZGluZzsKLSAgICBleHBvcnRzLkxvZ0x1dkVuY29kaW5nID0gTG9nTHV2RW5jb2Rpbmc7
Ci0gICAgZXhwb3J0cy5SR0JNN0VuY29kaW5nID0gUkdCTTdFbmNvZGluZzsKKyAgICBleHBvcnRz
LlJHQkVGb3JtYXQgPSBSR0JFRm9ybWF0OworICAgIGV4cG9ydHMuUkdCRm9ybWF0ID0gUkdCRm9y
bWF0OwogICAgIGV4cG9ydHMuUkdCTTE2RW5jb2RpbmcgPSBSR0JNMTZFbmNvZGluZzsKLSAgICBl
eHBvcnRzLlJHQkRFbmNvZGluZyA9IFJHQkRFbmNvZGluZzsKLSAgICBleHBvcnRzLkJhc2ljRGVw
dGhQYWNraW5nID0gQmFzaWNEZXB0aFBhY2tpbmc7Ci0gICAgZXhwb3J0cy5SR0JBRGVwdGhQYWNr
aW5nID0gUkdCQURlcHRoUGFja2luZzsKKyAgICBleHBvcnRzLlJHQk03RW5jb2RpbmcgPSBSR0JN
N0VuY29kaW5nOworICAgIGV4cG9ydHMuUkdCX0VUQzFfRm9ybWF0ID0gUkdCX0VUQzFfRm9ybWF0
OworICAgIGV4cG9ydHMuUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQgPSBSR0JfUFZSVENfMkJQUFYx
X0Zvcm1hdDsKKyAgICBleHBvcnRzLlJHQl9QVlJUQ180QlBQVjFfRm9ybWF0ID0gUkdCX1BWUlRD
XzRCUFBWMV9Gb3JtYXQ7CisgICAgZXhwb3J0cy5SR0JfUzNUQ19EWFQxX0Zvcm1hdCA9IFJHQl9T
M1RDX0RYVDFfRm9ybWF0OworICAgIGV4cG9ydHMuUmF3U2hhZGVyTWF0ZXJpYWwgPSBSYXdTaGFk
ZXJNYXRlcmlhbDsKKyAgICBleHBvcnRzLlJheSA9IFJheTsKKyAgICBleHBvcnRzLlJheWNhc3Rl
ciA9IFJheWNhc3RlcjsKKyAgICBleHBvcnRzLlJlY3RBcmVhTGlnaHQgPSBSZWN0QXJlYUxpZ2h0
OworICAgIGV4cG9ydHMuUmVjdEFyZWFMaWdodEhlbHBlciA9IFJlY3RBcmVhTGlnaHRIZWxwZXI7
CisgICAgZXhwb3J0cy5SZWRGb3JtYXQgPSBSZWRGb3JtYXQ7CisgICAgZXhwb3J0cy5SZWluaGFy
ZFRvbmVNYXBwaW5nID0gUmVpbmhhcmRUb25lTWFwcGluZzsKKyAgICBleHBvcnRzLlJlcGVhdFdy
YXBwaW5nID0gUmVwZWF0V3JhcHBpbmc7CisgICAgZXhwb3J0cy5SZXZlcnNlU3VidHJhY3RFcXVh
dGlvbiA9IFJldmVyc2VTdWJ0cmFjdEVxdWF0aW9uOworICAgIGV4cG9ydHMuUmluZ0J1ZmZlckdl
b21ldHJ5ID0gUmluZ0J1ZmZlckdlb21ldHJ5OworICAgIGV4cG9ydHMuUmluZ0dlb21ldHJ5ID0g
UmluZ0dlb21ldHJ5OworICAgIGV4cG9ydHMuU2NlbmUgPSBTY2VuZTsKKyAgICBleHBvcnRzLlNj
ZW5lVXRpbHMgPSBTY2VuZVV0aWxzOworICAgIGV4cG9ydHMuU2hhZGVyQ2h1bmsgPSBTaGFkZXJD
aHVuazsKKyAgICBleHBvcnRzLlNoYWRlckxpYiA9IFNoYWRlckxpYjsKKyAgICBleHBvcnRzLlNo
YWRlck1hdGVyaWFsID0gU2hhZGVyTWF0ZXJpYWw7CisgICAgZXhwb3J0cy5TaGFkb3dNYXRlcmlh
bCA9IFNoYWRvd01hdGVyaWFsOworICAgIGV4cG9ydHMuU2hhcGUgPSBTaGFwZTsKKyAgICBleHBv
cnRzLlNoYXBlQnVmZmVyR2VvbWV0cnkgPSBTaGFwZUJ1ZmZlckdlb21ldHJ5OworICAgIGV4cG9y
dHMuU2hhcGVHZW9tZXRyeSA9IFNoYXBlR2VvbWV0cnk7CisgICAgZXhwb3J0cy5TaGFwZVBhdGgg
PSBTaGFwZVBhdGg7CisgICAgZXhwb3J0cy5TaGFwZVV0aWxzID0gU2hhcGVVdGlsczsKKyAgICBl
eHBvcnRzLlNob3J0VHlwZSA9IFNob3J0VHlwZTsKKyAgICBleHBvcnRzLlNrZWxldG9uID0gU2tl
bGV0b247CisgICAgZXhwb3J0cy5Ta2VsZXRvbkhlbHBlciA9IFNrZWxldG9uSGVscGVyOworICAg
IGV4cG9ydHMuU2tpbm5lZE1lc2ggPSBTa2lubmVkTWVzaDsKKyAgICBleHBvcnRzLlNtb290aFNo
YWRpbmcgPSBTbW9vdGhTaGFkaW5nOworICAgIGV4cG9ydHMuU3BoZXJlID0gU3BoZXJlOworICAg
IGV4cG9ydHMuU3BoZXJlQnVmZmVyR2VvbWV0cnkgPSBTcGhlcmVCdWZmZXJHZW9tZXRyeTsKKyAg
ICBleHBvcnRzLlNwaGVyZUdlb21ldHJ5ID0gU3BoZXJlR2VvbWV0cnk7CisgICAgZXhwb3J0cy5T
cGhlcmljYWwgPSBTcGhlcmljYWw7CisgICAgZXhwb3J0cy5TcGhlcmljYWxIYXJtb25pY3MzID0g
U3BoZXJpY2FsSGFybW9uaWNzMzsKKyAgICBleHBvcnRzLlNwaGVyaWNhbFJlZmxlY3Rpb25NYXBw
aW5nID0gU3BoZXJpY2FsUmVmbGVjdGlvbk1hcHBpbmc7CisgICAgZXhwb3J0cy5TcGxpbmUgPSBT
cGxpbmU7CisgICAgZXhwb3J0cy5TcGxpbmVDdXJ2ZSA9IFNwbGluZUN1cnZlOworICAgIGV4cG9y
dHMuU3BsaW5lQ3VydmUzID0gU3BsaW5lQ3VydmUzOworICAgIGV4cG9ydHMuU3BvdExpZ2h0ID0g
U3BvdExpZ2h0OworICAgIGV4cG9ydHMuU3BvdExpZ2h0SGVscGVyID0gU3BvdExpZ2h0SGVscGVy
OworICAgIGV4cG9ydHMuU3BvdExpZ2h0U2hhZG93ID0gU3BvdExpZ2h0U2hhZG93OworICAgIGV4
cG9ydHMuU3ByaXRlID0gU3ByaXRlOworICAgIGV4cG9ydHMuU3ByaXRlTWF0ZXJpYWwgPSBTcHJp
dGVNYXRlcmlhbDsKKyAgICBleHBvcnRzLlNyY0FscGhhRmFjdG9yID0gU3JjQWxwaGFGYWN0b3I7
CisgICAgZXhwb3J0cy5TcmNBbHBoYVNhdHVyYXRlRmFjdG9yID0gU3JjQWxwaGFTYXR1cmF0ZUZh
Y3RvcjsKKyAgICBleHBvcnRzLlNyY0NvbG9yRmFjdG9yID0gU3JjQ29sb3JGYWN0b3I7CisgICAg
ZXhwb3J0cy5TdGVyZW9DYW1lcmEgPSBTdGVyZW9DYW1lcmE7CisgICAgZXhwb3J0cy5TdHJpbmdL
ZXlmcmFtZVRyYWNrID0gU3RyaW5nS2V5ZnJhbWVUcmFjazsKKyAgICBleHBvcnRzLlN1YnRyYWN0
RXF1YXRpb24gPSBTdWJ0cmFjdEVxdWF0aW9uOworICAgIGV4cG9ydHMuU3VidHJhY3RpdmVCbGVu
ZGluZyA9IFN1YnRyYWN0aXZlQmxlbmRpbmc7CiAgICAgZXhwb3J0cy5UYW5nZW50U3BhY2VOb3Jt
YWxNYXAgPSBUYW5nZW50U3BhY2VOb3JtYWxNYXA7Ci0gICAgZXhwb3J0cy5PYmplY3RTcGFjZU5v
cm1hbE1hcCA9IE9iamVjdFNwYWNlTm9ybWFsTWFwOwotICAgIGV4cG9ydHMuQ3ViZUdlb21ldHJ5
ID0gQm94R2VvbWV0cnk7Ci0gICAgZXhwb3J0cy5GYWNlNCA9IEZhY2U0OwotICAgIGV4cG9ydHMu
TGluZVN0cmlwID0gTGluZVN0cmlwOwotICAgIGV4cG9ydHMuTGluZVBpZWNlcyA9IExpbmVQaWVj
ZXM7Ci0gICAgZXhwb3J0cy5NZXNoRmFjZU1hdGVyaWFsID0gTWVzaEZhY2VNYXRlcmlhbDsKLSAg
ICBleHBvcnRzLk11bHRpTWF0ZXJpYWwgPSBNdWx0aU1hdGVyaWFsOwotICAgIGV4cG9ydHMuUG9p
bnRDbG91ZCA9IFBvaW50Q2xvdWQ7Ci0gICAgZXhwb3J0cy5QYXJ0aWNsZSA9IFBhcnRpY2xlOwot
ICAgIGV4cG9ydHMuUGFydGljbGVTeXN0ZW0gPSBQYXJ0aWNsZVN5c3RlbTsKLSAgICBleHBvcnRz
LlBvaW50Q2xvdWRNYXRlcmlhbCA9IFBvaW50Q2xvdWRNYXRlcmlhbDsKLSAgICBleHBvcnRzLlBh
cnRpY2xlQmFzaWNNYXRlcmlhbCA9IFBhcnRpY2xlQmFzaWNNYXRlcmlhbDsKLSAgICBleHBvcnRz
LlBhcnRpY2xlU3lzdGVtTWF0ZXJpYWwgPSBQYXJ0aWNsZVN5c3RlbU1hdGVyaWFsOwotICAgIGV4
cG9ydHMuVmVydGV4ID0gVmVydGV4OwotICAgIGV4cG9ydHMuRHluYW1pY0J1ZmZlckF0dHJpYnV0
ZSA9IER5bmFtaWNCdWZmZXJBdHRyaWJ1dGU7Ci0gICAgZXhwb3J0cy5JbnQ4QXR0cmlidXRlID0g
SW50OEF0dHJpYnV0ZTsKLSAgICBleHBvcnRzLlVpbnQ4QXR0cmlidXRlID0gVWludDhBdHRyaWJ1
dGU7Ci0gICAgZXhwb3J0cy5VaW50OENsYW1wZWRBdHRyaWJ1dGUgPSBVaW50OENsYW1wZWRBdHRy
aWJ1dGU7Ci0gICAgZXhwb3J0cy5JbnQxNkF0dHJpYnV0ZSA9IEludDE2QXR0cmlidXRlOworICAg
IGV4cG9ydHMuVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeSA9IFRldHJhaGVkcm9uQnVmZmVyR2Vv
bWV0cnk7CisgICAgZXhwb3J0cy5UZXRyYWhlZHJvbkdlb21ldHJ5ID0gVGV0cmFoZWRyb25HZW9t
ZXRyeTsKKyAgICBleHBvcnRzLlRleHRCdWZmZXJHZW9tZXRyeSA9IFRleHRCdWZmZXJHZW9tZXRy
eTsKKyAgICBleHBvcnRzLlRleHRHZW9tZXRyeSA9IFRleHRHZW9tZXRyeTsKKyAgICBleHBvcnRz
LlRleHR1cmUgPSBUZXh0dXJlOworICAgIGV4cG9ydHMuVGV4dHVyZUxvYWRlciA9IFRleHR1cmVM
b2FkZXI7CisgICAgZXhwb3J0cy5Ub3J1c0J1ZmZlckdlb21ldHJ5ID0gVG9ydXNCdWZmZXJHZW9t
ZXRyeTsKKyAgICBleHBvcnRzLlRvcnVzR2VvbWV0cnkgPSBUb3J1c0dlb21ldHJ5OworICAgIGV4
cG9ydHMuVG9ydXNLbm90QnVmZmVyR2VvbWV0cnkgPSBUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTsK
KyAgICBleHBvcnRzLlRvcnVzS25vdEdlb21ldHJ5ID0gVG9ydXNLbm90R2VvbWV0cnk7CisgICAg
ZXhwb3J0cy5UcmlhbmdsZSA9IFRyaWFuZ2xlOworICAgIGV4cG9ydHMuVHJpYW5nbGVGYW5EcmF3
TW9kZSA9IFRyaWFuZ2xlRmFuRHJhd01vZGU7CisgICAgZXhwb3J0cy5UcmlhbmdsZVN0cmlwRHJh
d01vZGUgPSBUcmlhbmdsZVN0cmlwRHJhd01vZGU7CisgICAgZXhwb3J0cy5UcmlhbmdsZXNEcmF3
TW9kZSA9IFRyaWFuZ2xlc0RyYXdNb2RlOworICAgIGV4cG9ydHMuVHViZUJ1ZmZlckdlb21ldHJ5
ID0gVHViZUJ1ZmZlckdlb21ldHJ5OworICAgIGV4cG9ydHMuVHViZUdlb21ldHJ5ID0gVHViZUdl
b21ldHJ5OworICAgIGV4cG9ydHMuVVZNYXBwaW5nID0gVVZNYXBwaW5nOwogICAgIGV4cG9ydHMu
VWludDE2QXR0cmlidXRlID0gVWludDE2QXR0cmlidXRlOwotICAgIGV4cG9ydHMuSW50MzJBdHRy
aWJ1dGUgPSBJbnQzMkF0dHJpYnV0ZTsKKyAgICBleHBvcnRzLlVpbnQxNkJ1ZmZlckF0dHJpYnV0
ZSA9IFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZTsKICAgICBleHBvcnRzLlVpbnQzMkF0dHJpYnV0ZSA9
IFVpbnQzMkF0dHJpYnV0ZTsKLSAgICBleHBvcnRzLkZsb2F0MzJBdHRyaWJ1dGUgPSBGbG9hdDMy
QXR0cmlidXRlOwotICAgIGV4cG9ydHMuRmxvYXQ2NEF0dHJpYnV0ZSA9IEZsb2F0NjRBdHRyaWJ1
dGU7Ci0gICAgZXhwb3J0cy5DbG9zZWRTcGxpbmVDdXJ2ZTMgPSBDbG9zZWRTcGxpbmVDdXJ2ZTM7
Ci0gICAgZXhwb3J0cy5TcGxpbmVDdXJ2ZTMgPSBTcGxpbmVDdXJ2ZTM7Ci0gICAgZXhwb3J0cy5T
cGxpbmUgPSBTcGxpbmU7Ci0gICAgZXhwb3J0cy5BeGlzSGVscGVyID0gQXhpc0hlbHBlcjsKLSAg
ICBleHBvcnRzLkJvdW5kaW5nQm94SGVscGVyID0gQm91bmRpbmdCb3hIZWxwZXI7Ci0gICAgZXhw
b3J0cy5FZGdlc0hlbHBlciA9IEVkZ2VzSGVscGVyOworICAgIGV4cG9ydHMuVWludDMyQnVmZmVy
QXR0cmlidXRlID0gVWludDMyQnVmZmVyQXR0cmlidXRlOworICAgIGV4cG9ydHMuVWludDhBdHRy
aWJ1dGUgPSBVaW50OEF0dHJpYnV0ZTsKKyAgICBleHBvcnRzLlVpbnQ4QnVmZmVyQXR0cmlidXRl
ID0gVWludDhCdWZmZXJBdHRyaWJ1dGU7CisgICAgZXhwb3J0cy5VaW50OENsYW1wZWRBdHRyaWJ1
dGUgPSBVaW50OENsYW1wZWRBdHRyaWJ1dGU7CisgICAgZXhwb3J0cy5VaW50OENsYW1wZWRCdWZm
ZXJBdHRyaWJ1dGUgPSBVaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1dGU7CisgICAgZXhwb3J0cy5V
bmNoYXJ0ZWQyVG9uZU1hcHBpbmcgPSBVbmNoYXJ0ZWQyVG9uZU1hcHBpbmc7CisgICAgZXhwb3J0
cy5Vbmlmb3JtID0gVW5pZm9ybTsKKyAgICBleHBvcnRzLlVuaWZvcm1zTGliID0gVW5pZm9ybXNM
aWI7CisgICAgZXhwb3J0cy5Vbmlmb3Jtc1V0aWxzID0gVW5pZm9ybXNVdGlsczsKKyAgICBleHBv
cnRzLlVuc2lnbmVkQnl0ZVR5cGUgPSBVbnNpZ25lZEJ5dGVUeXBlOworICAgIGV4cG9ydHMuVW5z
aWduZWRJbnQyNDhUeXBlID0gVW5zaWduZWRJbnQyNDhUeXBlOworICAgIGV4cG9ydHMuVW5zaWdu
ZWRJbnRUeXBlID0gVW5zaWduZWRJbnRUeXBlOworICAgIGV4cG9ydHMuVW5zaWduZWRTaG9ydDQ0
NDRUeXBlID0gVW5zaWduZWRTaG9ydDQ0NDRUeXBlOworICAgIGV4cG9ydHMuVW5zaWduZWRTaG9y
dDU1NTFUeXBlID0gVW5zaWduZWRTaG9ydDU1NTFUeXBlOworICAgIGV4cG9ydHMuVW5zaWduZWRT
aG9ydDU2NVR5cGUgPSBVbnNpZ25lZFNob3J0NTY1VHlwZTsKKyAgICBleHBvcnRzLlVuc2lnbmVk
U2hvcnRUeXBlID0gVW5zaWduZWRTaG9ydFR5cGU7CisgICAgZXhwb3J0cy5WZWN0b3IyID0gVmVj
dG9yMjsKKyAgICBleHBvcnRzLlZlY3RvcjMgPSBWZWN0b3IzOworICAgIGV4cG9ydHMuVmVjdG9y
NCA9IFZlY3RvcjQ7CisgICAgZXhwb3J0cy5WZWN0b3JLZXlmcmFtZVRyYWNrID0gVmVjdG9yS2V5
ZnJhbWVUcmFjazsKKyAgICBleHBvcnRzLlZlcnRleCA9IFZlcnRleDsKKyAgICBleHBvcnRzLlZl
cnRleENvbG9ycyA9IFZlcnRleENvbG9yczsKKyAgICBleHBvcnRzLlZlcnRleE5vcm1hbHNIZWxw
ZXIgPSBWZXJ0ZXhOb3JtYWxzSGVscGVyOworICAgIGV4cG9ydHMuVmlkZW9UZXh0dXJlID0gVmlk
ZW9UZXh0dXJlOworICAgIGV4cG9ydHMuV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCA9IFdl
YkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ7CisgICAgZXhwb3J0cy5XZWJHTFJlbmRlclRhcmdl
dCA9IFdlYkdMUmVuZGVyVGFyZ2V0OworICAgIGV4cG9ydHMuV2ViR0xSZW5kZXJUYXJnZXRDdWJl
ID0gV2ViR0xSZW5kZXJUYXJnZXRDdWJlOworICAgIGV4cG9ydHMuV2ViR0xSZW5kZXJlciA9IFdl
YkdMUmVuZGVyZXI7CisgICAgZXhwb3J0cy5XZWJHTFV0aWxzID0gV2ViR0xVdGlsczsKKyAgICBl
eHBvcnRzLldpcmVmcmFtZUdlb21ldHJ5ID0gV2lyZWZyYW1lR2VvbWV0cnk7CiAgICAgZXhwb3J0
cy5XaXJlZnJhbWVIZWxwZXIgPSBXaXJlZnJhbWVIZWxwZXI7CisgICAgZXhwb3J0cy5XcmFwQXJv
dW5kRW5kaW5nID0gV3JhcEFyb3VuZEVuZGluZzsKICAgICBleHBvcnRzLlhIUkxvYWRlciA9IFhI
UkxvYWRlcjsKLSAgICBleHBvcnRzLkJpbmFyeVRleHR1cmVMb2FkZXIgPSBCaW5hcnlUZXh0dXJl
TG9hZGVyOwotICAgIGV4cG9ydHMuR2VvbWV0cnlVdGlscyA9IEdlb21ldHJ5VXRpbHM7Ci0gICAg
ZXhwb3J0cy5JbWFnZVV0aWxzID0gSW1hZ2VVdGlsczsKLSAgICBleHBvcnRzLlByb2plY3RvciA9
IFByb2plY3RvcjsKLSAgICBleHBvcnRzLkNhbnZhc1JlbmRlcmVyID0gQ2FudmFzUmVuZGVyZXI7
Ci0gICAgZXhwb3J0cy5TY2VuZVV0aWxzID0gU2NlbmVVdGlsczsKLSAgICBleHBvcnRzLkxlbnNG
bGFyZSA9IExlbnNGbGFyZTsKKyAgICBleHBvcnRzLlplcm9DdXJ2YXR1cmVFbmRpbmcgPSBaZXJv
Q3VydmF0dXJlRW5kaW5nOworICAgIGV4cG9ydHMuWmVyb0ZhY3RvciA9IFplcm9GYWN0b3I7Cisg
ICAgZXhwb3J0cy5aZXJvU2xvcGVFbmRpbmcgPSBaZXJvU2xvcGVFbmRpbmc7CisgICAgZXhwb3J0
cy5zUkdCRW5jb2RpbmcgPSBzUkdCRW5jb2Rpbmc7CiAKICAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pOwogCi19KSkpOworfSkp
OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xheWVyczNEQ29udGVudFZpZXcuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9MYXllcnMzRENvbnRlbnRWaWV3
LmpzCmluZGV4IDQ5ZjcxYWE2YTRkNGZmZDE1OGVhOGUwZjlhNGViODI0YTJlNTZkYjQuLjgyNmE4
ZGVhZjk2MjBjNTk2YmRkYzJlNDEzYTFmYTBjYzVlOGVkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xheWVyczNEQ29udGVudFZpZXcuanMK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvTGF5ZXJzM0RD
b250ZW50Vmlldy5qcwpAQCAtMjY3LDYgKzI2NywyMSBAQCBXSS5MYXllcnMzRENvbnRlbnRWaWV3
ID0gY2xhc3MgTGF5ZXJzM0RDb250ZW50VmlldyBleHRlbmRzIFdJLkNvbnRlbnRWaWV3CiAgICAg
ICAgICAgICBsYXllckdyb3VwLnBvc2l0aW9uLnNldChsYXllci5ib3VuZHMueCwgLWxheWVyLmJv
dW5kcy55LCBpbmRleCAqIHpJbnRlcnZhbCk7CiAgICAgICAgIH0pOwogCisgICAgICAgIG5ld0xh
eWVycy5mb3JFYWNoKChsYXllcikgPT4geworICAgICAgICAgICAgV0kubGF5ZXJUcmVlTWFuYWdl
ci5pbWFnZUZvckxheWVyQ29udGVudHMobGF5ZXIsIChkYXRhVVJJKSA9PiB7CisKKyAgICAgICAg
ICAgICAgICBsZXQgbGF5ZXJHcm91cCA9IHRoaXMuX2xheWVyR3JvdXBzQnlJZC5nZXQobGF5ZXIu
bGF5ZXJJZCk7CisgICAgICAgICAgICAgICAgbGV0IFtwbGFuZSwgb3V0bGluZV0gPSBsYXllckdy
b3VwLmNoaWxkcmVuOworCisgICAgICAgICAgICAgICAgbGV0IHRleHR1cmVJbWFnZSA9IG5ldyBJ
bWFnZSgpOworICAgICAgICAgICAgICAgIHRleHR1cmVJbWFnZS5vbmxvYWQgPSAoKSA9PiB7Cisg
ICAgICAgICAgICAgICAgICAgIHBsYW5lLm1hdGVyaWFsLm1hcC5pbWFnZSA9IHRleHR1cmVJbWFn
ZTsKKyAgICAgICAgICAgICAgICAgICAgcGxhbmUubWF0ZXJpYWwubWFwLm5lZWRzVXBkYXRlID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIHRleHR1cmVJbWFnZS5z
cmMgPSBkYXRhVVJJOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCiAgICAgICAgIHRo
aXMuX2JvdW5kaW5nQm94LnNldEZyb21PYmplY3QodGhpcy5fc2NlbmUpOwogICAgICAgICB0aGlz
Ll9jb250cm9scy5tYXhEaXN0YW5jZSA9IHRoaXMuX2JvdW5kaW5nQm94Lm1heC56ICsgV0kuTGF5
ZXJzM0RDb250ZW50Vmlldy5felBhZGRpbmc7CiAKQEAgLTI5MSw3ICszMDYsMjMgQEAgV0kuTGF5
ZXJzM0RDb250ZW50VmlldyA9IGNsYXNzIExheWVyczNEQ29udGVudFZpZXcgZXh0ZW5kcyBXSS5D
b250ZW50VmlldwogICAgICAgICAgICAgbmV3IFRIUkVFLlZlY3RvcjMod2lkdGgsIC1oZWlnaHQs
IDApLAogICAgICAgICAgICAgbmV3IFRIUkVFLlZlY3RvcjMod2lkdGgsIDAsICAgICAgIDApLAog
ICAgICAgICApOwotICAgICAgICAKKworICAgICAgICBnZW9tZXRyeS5mYWNlcy5wdXNoKG5ldyBU
SFJFRS5GYWNlMygwLCAxLCAyKSwgbmV3IFRIUkVFLkZhY2UzKDAsIDIsIDMpKTsKKyAgICAgICAg
Z2VvbWV0cnkuZmFjZVZlcnRleFV2c1swXS5wdXNoKFsKKyAgICAgICAgICAgIG5ldyBUSFJFRS5W
ZWN0b3IyKDAsIDEpLAorICAgICAgICAgICAgbmV3IFRIUkVFLlZlY3RvcjIoMCwgMCksCisgICAg
ICAgICAgICBuZXcgVEhSRUUuVmVjdG9yMigxLCAwKSwKKyAgICAgICAgXSk7CisKKyAgICAgICAg
Z2VvbWV0cnkuZmFjZVZlcnRleFV2c1swXS5wdXNoKFsKKyAgICAgICAgICAgIG5ldyBUSFJFRS5W
ZWN0b3IyKDAsIDEpLAorICAgICAgICAgICAgbmV3IFRIUkVFLlZlY3RvcjIoMSwgMCksCisgICAg
ICAgICAgICBuZXcgVEhSRUUuVmVjdG9yMigxLCAxKSwKKyAgICAgICAgXSk7CisKKyAgICAgICAg
Z2VvbWV0cnkuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTsKKyAgICAgICAgZ2VvbWV0cnkuY29tcHV0
ZUZhY2VOb3JtYWxzKCk7CisKICAgICAgICAgbGV0IGxheWVyQ29sb3JzID0gdGhpcy5fY29sb3Jz
Rm9yTGF5ZXIobGF5ZXIpOwogICAgICAgICBpZiAoaXNPdXRsaW5lKSB7CiAgICAgICAgICAgICBs
ZXQgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuTGluZUJhc2ljTWF0ZXJpYWwoewpAQCAtMzAyLDExICsz
MzMsMTEgQEAgV0kuTGF5ZXJzM0RDb250ZW50VmlldyA9IGNsYXNzIExheWVyczNEQ29udGVudFZp
ZXcgZXh0ZW5kcyBXSS5Db250ZW50VmlldwogICAgICAgICAgICAgcmV0dXJuIG5ldyBUSFJFRS5M
aW5lTG9vcChnZW9tZXRyeSwgbWF0ZXJpYWwpOwogICAgICAgICB9CiAKLSAgICAgICAgZ2VvbWV0
cnkuZmFjZXMucHVzaChuZXcgVEhSRUUuRmFjZTMoMCwgMSwgMyksIG5ldyBUSFJFRS5GYWNlMygx
LCAyLCAzKSk7Ci0KKyAgICAgICAgbGV0IHRleHR1cmUgPSBuZXcgVEhSRUUuVGV4dHVyZSgpOwog
ICAgICAgICBsZXQgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoewotICAg
ICAgICAgICAgY29sb3I6IGxheWVyQ29sb3JzLmZpbGwsCisgICAgICAgICAgICAvLyBjb2xvcjog
bGF5ZXJDb2xvcnMuZmlsbCwKICAgICAgICAgICAgIG9wYWNpdHk6IGxheWVyQ29sb3JzLmZpbGxP
cGFjaXR5LAorICAgICAgICAgICAgbWFwOiB0ZXh0dXJlLAogICAgICAgICAgICAgdHJhbnNwYXJl
bnQ6IHRydWUsCiAgICAgICAgICAgICBzaWRlOiBUSFJFRS5Eb3VibGVTaWRlLAogICAgICAgICAg
ICAgZGVwdGhXcml0ZTogZmFsc2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
V2ViSW5zcGVjdG9yVUkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9XZWJJbnNwZWN0b3JVSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGZk
OGMxNzgxZTcxMmMwNGZkZmIyOTI0ZTc0NGZmMTY2MTIxZjRhZTkuLjAwMjYzYTAwMDBmYjk3ZGZh
OThmZDQ3NDA4ZmY1NWEyYTA2ZjdlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9XZWJJbnNwZWN0b3JVSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9XZWJJbnNwZWN0b3JVSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xNDQsNyArMTQ0LDcgQEAKIAkJCW5hbWUgPSAiQ29weSBVc2VyIEludGVyZmFjZSBSZXNvdXJj
ZXMiOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCQlzaGVs
bFBhdGggPSAvYmluL3NoOwotCQkJc2hlbGxTY3JpcHQgPSAiL3Vzci9iaW4vcGVybCBcIiR7U1JD
Uk9PVH0vU2NyaXB0cy9jb3B5LXVzZXItaW50ZXJmYWNlLXJlc291cmNlcy5wbFwiIjsKKwkJCXNo
ZWxsU2NyaXB0ID0gIi91c3IvYmluL3BlcmwgXCIke1NSQ1JPT1R9L1NjcmlwdHMvY29weS11c2Vy
LWludGVyZmFjZS1yZXNvdXJjZXMucGxcIlxuIjsKIAkJfTsKIC8qIEVuZCBQQlhTaGVsbFNjcmlw
dEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431555</attachid>
            <date>2021-06-16 09:36:27 -0700</date>
            <delta_ts>2021-06-16 09:36:27 -0700</delta_ts>
            <desc>WIP v0.1 - Rebase smfr patch, adjust texture UVs</desc>
            <filename>bug-199544-20210616093626.patch</filename>
            <type>text/plain</type>
            <size>10216</size>
            <attacher name="Patrick Angle">pangle</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4OTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
NjZlNWZjZTVkNDY4OTU3NDdmOThlZjkyMTBkNzRkZDczN2FkNThjLi5hZjAxODg4NDFlNjkxMmMw
ZmFhOWRlMzdmZjNmYjdiMWI3NDU0MjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMS0wNi0xNiAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+
CisKKyAgICAgICAgTGF5ZXJzIHZpc3VhbGl6YXRpb24gc2hvdWxkIHNob3cgbGF5ZXIgY29udGVu
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTU0
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5z
cGVjdG9yL3Byb3RvY29sL0xheWVyVHJlZS5qc29uOgorCiAyMDIxLTA2LTE1ICBLZWl0aCBNaWxs
ZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFNob3VsZG4ndCBkcmFpbiB0
aGUgbWljcm8gdGFzayBxdWV1ZSB3aGVuIGNhbGxpbmcgb3V0IHRvIE9iakMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA0MjNjOTFhZDBhYjgwM2YwYjBiMTJmZTBjNWZjYzMzYWQ1MzRlM2M2Li44ZTM1ODQ4MmEwMDFk
ZjMwYWZhOGNhZGE4ZWFmNDI3MzI5NzU5MGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMjEtMDYtMTYgIFBhdHJpY2sgQW5nbGUgIDxwYW5nbGVAYXBwbGUuY29tPgorCisgICAgICAg
IExheWVycyB2aXN1YWxpemF0aW9uIHNob3VsZCBzaG93IGxheWVyIGNvbnRlbnRzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTk1NDQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9P
UFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmltYWdl
Rm9yTGF5ZXJDb250ZW50cyk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JM
YXllclRyZWVBZ2VudC5oOgorCiAyMDIxLTA2LTE1ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRA
YXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gQ29uY3JldGVJbWFnZUJ1ZmZlcjo6
YmFzZVRyYW5zZm9ybSgpIHJldHVybnMgaW5jb3JyZWN0IHRyYW5zZm9ybSBmb3IgdW5hY2NlbGVy
YXRlZCBJbWFnZUJ1ZmZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKaW5kZXggOTY4YTUxNmE5NDBi
ODE1ZTcyNDcwYzlhN2NiYTdhMjk0MzY0MzRlYS4uNjJmNWMwMzIxMGE1MjQyM2IwNzNmZGMzNjhl
ZGNjMTM5NDk1YjRjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMjEtMDYtMTYgIFBhdHJpY2sgQW5nbGUgIDxwYW5nbGVAYXBwbGUuY29tPgorCisgICAgICAg
IExheWVycyB2aXN1YWxpemF0aW9uIHNob3VsZCBzaG93IGxheWVyIGNvbnRlbnRzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTk1NDQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvTGF5ZXJUcmVlTWFuYWdlci5qczoKKyAgICAgICAgKFdJLkxheWVyVHJlZU1h
bmFnZXIucHJvdG90eXBlLmltYWdlRm9yTGF5ZXJDb250ZW50cyk6CisgICAgICAgICogVXNlcklu
dGVyZmFjZS9WaWV3cy9MYXllcnMzRENvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV0kuTGF5ZXJz
M0RDb250ZW50Vmlldy5wcm90b3R5cGUuX3VwZGF0ZUxheWVycyk6CisgICAgICAgIChXSS5MYXll
cnMzRENvbnRlbnRWaWV3LnByb3RvdHlwZS5fY3JlYXRlTGF5ZXJHcm91cCk6CisgICAgICAgIChX
SS5MYXllcnMzRENvbnRlbnRWaWV3LnByb3RvdHlwZS5fY3JlYXRlTGF5ZXJNZXNoKToKKwogMjAy
MS0wNi0xNCAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW1JF
R1JFU1NJT046IHIyNzY2MTZdIFVuY2F1Z2h0IEV4Y2VwdGlvbjogVHlwZUVycm9yOiB1bmRlZmlu
ZWQgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGluZyAndGhpcy5fc2V0dXBDb2RlTWlycm9yLmdl
dFZhbHVlJykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJv
dG9jb2wvTGF5ZXJUcmVlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3By
b3RvY29sL0xheWVyVHJlZS5qc29uCmluZGV4IGY2ODk2OThhNzg1ZWFhMWIzODYwMWE1MDg0YmI0
ZmFmYjU4NmI3NDUuLjZlMjM2YzhlMjAyZWU5NmJmNzYxNWNkYTU1ZGExYWZhODIxNDhmNDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTGF5ZXJU
cmVlLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9M
YXllclRyZWUuanNvbgpAQCAtMTA3LDYgKzEwNywxNiBAQAogICAgICAgICAgICAgInJldHVybnMi
OiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb21wb3NpdGluZ1JlYXNvbnMiLCAiJHJl
ZiI6ICJDb21wb3NpdGluZ1JlYXNvbnMiLCAiZGVzY3JpcHRpb24iOiAiQW4gb2JqZWN0IGNvbnRh
aW5pbmcgdGhlIHJlYXNvbnMgd2h5IHRoZSBsYXllciB3YXMgY29tcG9zaXRlZCBhcyBwcm9wZXJ0
aWVzLiIgfQogICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAibmFtZSI6ICJpbWFnZUZvckxheWVyQ29udGVudHMiLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIlByb3ZpZGVzIGFuIGltYWdlIHNuYXBzaG90IG9mIHRoZSBsYXllciBjb250ZW50cy4i
LAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJsYXllcklkIiwgIiRyZWYiOiAiTGF5ZXJJZCIsICJkZXNjcmlwdGlvbiI6ICJUaGUgaWQgb2Yg
dGhlIGxheWVyIGZvciB3aGljaCB3ZSB3YW50IHRvIGdldCBhbiBpbWFnZSBvZiBpdHMgY29udGVu
dHMuIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJpbWFnZURhdGEiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3Jp
cHRpb24iOiAiQmFzZTY0LWVuY29kZWQgZGF0YSBvZiB0aGUgbGF5ZXIncyBjb250ZW50cy4iIH0K
KyAgICAgICAgICAgIF0KICAgICAgICAgfQogICAgIF0sCiAgICAgImV2ZW50cyI6IFsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVl
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXll
clRyZWVBZ2VudC5jcHAKaW5kZXggZTNjZTU1YzNlZDVlYjI1NDM1Mzc0MTYzNWFhN2E1Y2MyOWFl
N2E4NC4uYWNjN2QzOGMwM2U4ZTI4MWYzMzMyNmM5NmI5ZjZmZDBkZmYzZGEzYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXllclRyZWVBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXll
clRyZWVBZ2VudC5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oIgogCisjaW5jbHVkZSAiRnJhbWVTbmFw
c2hvdHRpbmcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckRPTUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKQEAgLTMyOCw2ICszMzAsMjQgQEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
UmVmPFByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29ucz4+IEluc3BlY3RvckwK
ICAgICByZXR1cm4gY29tcG9zaXRpbmdSZWFzb25zOwogfQogCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxTdHJpbmc+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjppbWFnZUZvckxheWVyQ29udGVu
dHMoY29uc3QgUHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXJJZCYgbGF5ZXJJZCkKK3sKKyAgICBj
b25zdCBSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIgPSBtX2lkVG9MYXllci5nZXQobGF5ZXJJZCk7
CisgICAgaWYgKCFyZW5kZXJMYXllcikKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJN
aXNzaW5nIHJlbmRlciBsYXllciBmb3IgZ2l2ZW4gbGF5ZXJJZCJfcyk7CisKKyAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gJnJlbmRlckxheWVyLT5yZW5kZXJlcigpOworICAgIE5vZGUqIG5v
ZGUgPSByZW5kZXJlci0+bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJNaXNzaW5nIG5vZGUgZm9yIHJlbmRlciBsYXllciJfcyk7CisKKyAgICBh
dXRvIHNuYXBzaG90ID0gV2ViQ29yZTo6c25hcHNob3ROb2RlKHJlbmRlcmVyLT5mcmFtZSgpLCAq
bm9kZSwgeyB7IFNuYXBzaG90RmxhZ3M6OkV4Y2x1ZGVTZWxlY3Rpb25IaWdobGlnaHRpbmcsIFNu
YXBzaG90RmxhZ3M6OlBhaW50RXZlcnl0aGluZ0V4Y2x1ZGluZ1NlbGVjdGlvbiB9LCBQaXhlbEZv
cm1hdDo6QkdSQTgsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpIH0pOworICAgIGlmICgh
c25hcHNob3QpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGNhcHR1
cmUgc25hcHNob3QgZm9yIHJlbmRlciBsYXllciJfcyk7CisKKyAgICByZXR1cm4gc25hcHNob3Qt
PnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBzdGQ6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlv
bjo6WWVzKTsKK30KKwogU3RyaW5nIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpiaW5kKGNvbnN0
IFJlbmRlckxheWVyKiBsYXllcikKIHsKICAgICBpZiAoIWxheWVyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5o
CmluZGV4IDVmMTE1MzFjYzY0NDQyOWY0OGQxZDZkODE1NTFkZDg0YjlmOTRjY2MuLmQzMTc0ZTc4
MWFmNWFkNGUzNGY4NzJmY2VjNzA2ZTNjNTI5NmM0ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmgKQEAg
LTU4LDYgKzU4LDcgQEAgcHVibGljOgogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gZGlzYWJsZSgpOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpM
YXllcj4+PiBsYXllcnNGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsK
ICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29ucz4+IHJlYXNvbnNGb3JDb21wb3Np
dGluZ0xheWVyKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXJJZCYp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBpbWFnZUZv
ckxheWVyQ29udGVudHMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXll
cklkJik7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGxheWVy
VHJlZURpZENoYW5nZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvTGF5ZXJUcmVlTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0xheWVyVHJlZU1hbmFnZXIuanMKaW5k
ZXggYmYyMzEyN2Q1ZTkyZWIzY2IyOTU3M2JmY2FhNTNjMDE1YzhhZjIxOS4uZWZiNDgxMzYxYmRm
NDM2ZDFhOTc5ODhhNTY2NTdhMjExMzIzNjIyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvTGF5ZXJUcmVlTWFuYWdlci5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9MYXllclRy
ZWVNYW5hZ2VyLmpzCkBAIC0xOTYsNiArMTk2LDE2IEBAIFdJLkxheWVyVHJlZU1hbmFnZXIgPSBj
bGFzcyBMYXllclRyZWVNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIH0pOwogICAg
IH0KIAorICAgIGltYWdlRm9yTGF5ZXJDb250ZW50cyhsYXllciwgY2FsbGJhY2spCisgICAgewor
ICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnN1cHBvcnRlZCk7CisKKyAgICAgICAgbGV0IHRh
cmdldCA9IFdJLmFzc3VtaW5nTWFpblRhcmdldCgpOworICAgICAgICB0YXJnZXQuTGF5ZXJUcmVl
QWdlbnQuaW1hZ2VGb3JMYXllckNvbnRlbnRzKGxheWVyLmxheWVySWQsIGZ1bmN0aW9uKGVycm9y
LCBpbWFnZSkgeworICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IgPyBudWxsIDogaW1hZ2UpOwor
ICAgICAgICB9KTsKKyAgICB9CisKICAgICAvLyBMYXllclRyZWVPYnNlcnZlcgogCiAgICAgbGF5
ZXJUcmVlRGlkQ2hhbmdlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL0xheWVyczNEQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9MYXllcnMzRENvbnRlbnRWaWV3LmpzCmluZGV4IDI1
MzkzMmMyOGE4Nzk2YjFlMmQ3MmM3OGI1OGRjMTk4OTA2YmVjNTUuLjI3MTk2Mjk4MTFlOGNhZDMy
ODVlY2MyZDQ1NmY3MDYyNGMwYTZmY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xheWVyczNEQ29udGVudFZpZXcuanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvTGF5ZXJzM0RDb250ZW50Vmlldy5q
cwpAQCAtMjcwLDYgKzI3MCwxOCBAQCBXSS5MYXllcnMzRENvbnRlbnRWaWV3ID0gY2xhc3MgTGF5
ZXJzM0RDb250ZW50VmlldyBleHRlbmRzIFdJLkNvbnRlbnRWaWV3CiAgICAgICAgIG5ld0xheWVy
cy5mb3JFYWNoKChsYXllciwgaW5kZXgpID0+IHsKICAgICAgICAgICAgIGxldCBsYXllckdyb3Vw
ID0gdGhpcy5fbGF5ZXJHcm91cHNCeUlkLmdldChsYXllci5sYXllcklkKTsKICAgICAgICAgICAg
IGxheWVyR3JvdXAucG9zaXRpb24uc2V0KGxheWVyLmJvdW5kcy54LCAtbGF5ZXIuYm91bmRzLnks
IGluZGV4ICogekludGVydmFsKTsKKworICAgICAgICAgICAgV0kubGF5ZXJUcmVlTWFuYWdlci5p
bWFnZUZvckxheWVyQ29udGVudHMobGF5ZXIsIChkYXRhVVJJKSA9PiB7CisgICAgICAgICAgICAg
ICAgbGV0IFtwbGFuZSwgb3V0bGluZV0gPSBsYXllckdyb3VwLmNoaWxkcmVuOworCisgICAgICAg
ICAgICAgICAgbGV0IHRleHR1cmVJbWFnZSA9IG5ldyBJbWFnZSgpOworICAgICAgICAgICAgICAg
IHRleHR1cmVJbWFnZS5vbmxvYWQgPSAoKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIHBsYW5l
Lm1hdGVyaWFsLnNpZGUgPSBUSFJFRS5kb3VibGVTaWRlZDsKKyAgICAgICAgICAgICAgICAgICAg
cGxhbmUubWF0ZXJpYWwubWFwLmltYWdlID0gdGV4dHVyZUltYWdlOworICAgICAgICAgICAgICAg
ICAgICBwbGFuZS5tYXRlcmlhbC5tYXAubmVlZHNVcGRhdGUgPSB0cnVlOworICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgdGV4dHVyZUltYWdlLnNyYyA9IGRhdGFVUkk7CisgICAg
ICAgICAgICB9KTsKICAgICAgICAgfSk7CiAKICAgICAgICAgdGhpcy5fYm91bmRpbmdCb3guc2V0
RnJvbU9iamVjdCh0aGlzLl9zY2VuZSk7CkBAIC0yODIsNyArMjk0LDcgQEAgV0kuTGF5ZXJzM0RD
b250ZW50VmlldyA9IGNsYXNzIExheWVyczNEQ29udGVudFZpZXcgZXh0ZW5kcyBXSS5Db250ZW50
VmlldwogICAgIF9jcmVhdGVMYXllckdyb3VwKGxheWVyKSB7CiAgICAgICAgIGxldCBsYXllckdy
b3VwID0gbmV3IFRIUkVFLkdyb3VwOwogICAgICAgICBsYXllckdyb3VwLnVzZXJEYXRhLmxheWVy
ID0gbGF5ZXI7Ci0gICAgICAgIGxheWVyR3JvdXAuYWRkKHRoaXMuX2NyZWF0ZUxheWVyTWVzaChs
YXllci5ib3VuZHMpLCB0aGlzLl9jcmVhdGVMYXllck1lc2gobGF5ZXIuY29tcG9zaXRlZEJvdW5k
cywgdHJ1ZSkpOworICAgICAgICBsYXllckdyb3VwLmFkZCh0aGlzLl9jcmVhdGVMYXllck1lc2go
bGF5ZXIuY29tcG9zaXRlZEJvdW5kcyksIHRoaXMuX2NyZWF0ZUxheWVyTWVzaChsYXllci5jb21w
b3NpdGVkQm91bmRzLCB0cnVlKSk7CiAgICAgICAgIHJldHVybiBsYXllckdyb3VwOwogICAgIH0K
IApAQCAtMjk2LDE1ICszMDgsMzUgQEAgV0kuTGF5ZXJzM0RDb250ZW50VmlldyA9IGNsYXNzIExh
eWVyczNEQ29udGVudFZpZXcgZXh0ZW5kcyBXSS5Db250ZW50VmlldwogICAgICAgICAgICAgbmV3
IFRIUkVFLlZlY3RvcjMod2lkdGgsIDAsICAgICAgIDApLAogICAgICAgICApOwogCisgICAgICAg
IC8vIGdlb21ldHJ5LmZhY2VzLnB1c2gobmV3IFRIUkVFLkZhY2UzKDAsIDEsIDIpLCBuZXcgVEhS
RUUuRmFjZTMoMCwgMiwgMykpOworICAgICAgICAKKyAgICAgICAgZ2VvbWV0cnkuY29tcHV0ZVZl
cnRleE5vcm1hbHMoKTsKKyAgICAgICAgZ2VvbWV0cnkuY29tcHV0ZUZhY2VOb3JtYWxzKCk7CisK
ICAgICAgICAgaWYgKGlzT3V0bGluZSkgewogICAgICAgICAgICAgbGV0IG1hdGVyaWFsID0gbmV3
IFRIUkVFLkxpbmVCYXNpY01hdGVyaWFsKHtjb2xvcjogV0kuTGF5ZXJzM0RDb250ZW50Vmlldy5f
bGF5ZXJDb2xvci5zdHJva2V9KTsKICAgICAgICAgICAgIHJldHVybiBuZXcgVEhSRUUuTGluZUxv
b3AoZ2VvbWV0cnksIG1hdGVyaWFsKTsKICAgICAgICAgfQogCisgICAgICAgIGdlb21ldHJ5LmZh
Y2VWZXJ0ZXhVdnNbMF0ucHVzaChbCisgICAgICAgICAgICBuZXcgVEhSRUUuVmVjdG9yMigwLCAx
KSwKKyAgICAgICAgICAgIG5ldyBUSFJFRS5WZWN0b3IyKDAsIDApLAorICAgICAgICAgICAgbmV3
IFRIUkVFLlZlY3RvcjIoMSwgMSksCisgICAgICAgIF0pOworCisgICAgICAgIGdlb21ldHJ5LmZh
Y2VWZXJ0ZXhVdnNbMF0ucHVzaChbCisgICAgICAgICAgICBuZXcgVEhSRUUuVmVjdG9yMigwLCAw
KSwKKyAgICAgICAgICAgIG5ldyBUSFJFRS5WZWN0b3IyKDEsIDApLAorICAgICAgICAgICAgbmV3
IFRIUkVFLlZlY3RvcjIoMSwgMSksCisgICAgICAgIF0pOworCisKICAgICAgICAgZ2VvbWV0cnku
ZmFjZXMucHVzaChuZXcgVEhSRUUuRmFjZTMoMCwgMSwgMyksIG5ldyBUSFJFRS5GYWNlMygxLCAy
LCAzKSk7CiAKKyAgICAgICAgbGV0IHRleHR1cmUgPSBuZXcgVEhSRUUuVGV4dHVyZSgpOwogICAg
ICAgICBsZXQgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoewotICAgICAg
ICAgICAgY29sb3I6IFdJLkxheWVyczNEQ29udGVudFZpZXcuX2xheWVyQ29sb3IuZmlsbCwKKyAg
ICAgICAgICAgIC8vIGNvbG9yOiBXSS5MYXllcnMzRENvbnRlbnRWaWV3Ll9sYXllckNvbG9yLmZp
bGwsCisgICAgICAgICAgICBtYXA6IHRleHR1cmUsCiAgICAgICAgICAgICB0cmFuc3BhcmVudDog
dHJ1ZSwKICAgICAgICAgICAgIG9wYWNpdHk6IDAuNCwKICAgICAgICAgICAgIHNpZGU6IFRIUkVF
LkRvdWJsZVNpZGUsCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>