<?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>155571</bug_id>
          
          <creation_ts>2016-03-16 18:21:49 -0700</creation_ts>
          <short_desc>Web Inspector: HeapSnapshots are slow and use too much memory</short_desc>
          <delta_ts>2016-03-17 15:18:21 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>bburg</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1175594</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-16 18:21:49 -0700</bug_when>
    <thetext>* SUMMARY
Operate on HeapSnapshot data within Workers.

Processing very large HeapSnapshots could cause long UI Hangs in the Inspector while recording a Timeline. Just the JSON.parse time for a 30MB JSON string could be 100ms, and then allocating objects per-Node and per-Edge could result in a 1.5-2s hang during a recording. This would result in a poor experience while recording. Move that work into a Worker and communicate with the worker in chunks where appropriate.

Likewise, we were creating many many objects (1 per Node, 1 per Edge) while processing the snapshot. We can reduce the number of allocations by instead having a number of large arrays of data. Blink / Legacy WebKit Heap Snapshot code used this approach. We can adopt that approach and also make use of the already implemented dominator calculation using that format.

May plan for workers is:

UserInterface/Proxies (not Models, because it depends on Workers and should be constructed with that in mind)
  - HeapSnapshotWorkerProxy - singleton that spawns the Web Worker and sends/receives messages
  - HeapSnapshotProxy - data for the snapshot, and async methods for querying for nodes
  - HeapSnapshotNodeProxy - data for the node, and async methods for querying relations
  - HeapSnapshotEdgeProxy - data for the edge
  - HeapSnapshotDiffProxy - behaves like a HeapSnapshotProxy with a little extra data

UserInterface/Workers/HeapSnapshot (this code is only loaded in the Worker, not the Page. e.g. new Worker(&quot;Workers/HeapSnapshot/HeapSnapshotWorker.js&quot;) and importScripts)
  - HeapSnapshotWorker.js - Worker main, sends/receives messages to the WorkerProxy
  - HeapSnapshot.js - actual impl of a HeapSnapshot logic

* WORKER INTERFACE
There is a simple RPC with callback mechanism between the Main (Proxy) and Worker objects.

WorkerProxy: (Main side)
  - performAction =&gt; sendMessage with actionName + actionArguments =&gt; call callback
  - callMethod =&gt; sendMessage with objectId + methodName + methodArguments =&gt; call callback

Worker:
  - sendEvent =&gt; sendMessage with eventName + eventData =&gt; dispatchEvent on the WorkerProxy

Proxy methods end up being simple boilerplate for dispatching and deserialization. No caching at this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175595</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-03-16 18:22:44 -0700</bug_when>
    <thetext>&lt;rdar://problem/25207991&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175599</commentid>
    <comment_count>2</comment_count>
      <attachid>274252</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-16 18:49:55 -0700</bug_when>
    <thetext>Created attachment 274252
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175601</commentid>
    <comment_count>3</comment_count>
      <attachid>274252</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-16 18:55:44 -0700</bug_when>
    <thetext>Comment on attachment 274252
[PATCH] Proposed Fix

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

&gt; Source/WebInspectorUI/UserInterface/Workers/HeapSnapshot/HeapSnapshot.js:172
&gt; +outer:  for (let nodeIndex = 0; nodeIndex &lt; nodes.length; nodeIndex += nodeFieldCount) {

I don&apos;t know the best style for this. The outer could be indented and basically be &quot;outer: for&quot; instead of the weirdness here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175784</commentid>
    <comment_count>4</comment_count>
      <attachid>274252</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2016-03-17 11:26:35 -0700</bug_when>
    <thetext>Comment on attachment 274252
[PATCH] Proposed Fix

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

Very clean! We should consider this model for making new workers.

&gt; LayoutTests/inspector/heap/getPreview.html:56
&gt; +                    workerProxy.createSnapshot(snapshotStringData, ({objectId, snapshot: serializedSnapshot}) =&gt; {

Slick destructuring.

&gt;&gt; Source/WebInspectorUI/UserInterface/Workers/HeapSnapshot/HeapSnapshot.js:172
&gt;&gt; +outer:  for (let nodeIndex = 0; nodeIndex &lt; nodes.length; nodeIndex += nodeFieldCount) {
&gt; 
&gt; I don&apos;t know the best style for this. The outer could be indented and basically be &quot;outer: for&quot; instead of the weirdness here.

I would put them on separate lines and indent outer:.

&gt; Source/WebInspectorUI/UserInterface/Workers/HeapSnapshot/HeapSnapshot.js:180
&gt; +                    continue outer;

Mind = Blown</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175854</commentid>
    <comment_count>5</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-17 14:03:16 -0700</bug_when>
    <thetext>&lt;http://trac.webkit.org/changeset/198353&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175864</commentid>
    <comment_count>6</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-17 15:18:21 -0700</bug_when>
    <thetext>Follow-up fix for the test after some post-review handling of &lt;root&gt;:
&lt;https://trac.webkit.org/changeset/198355&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274252</attachid>
            <date>2016-03-16 18:49:55 -0700</date>
            <delta_ts>2016-03-17 14:01:32 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>heap-snapshot-worker.patch</filename>
            <type>text/plain</type>
            <size>141998</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBhMzBkMTBhLi4wMDUyZjhhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTYtMDMt
MTYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIg
SW5zcGVjdG9yOiBPcGVyYXRlIG9uIEhlYXBTbmFwc2hvdCBkYXRhIHdpdGhpbiBXb3JrZXJzIGFu
ZCByZWR1Y2UgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NTU3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogaW5zcGVjdG9yL2hlYXAvZ2V0UHJldmlldy5odG1sOgorICAgICAgICAq
IGluc3BlY3Rvci9oZWFwL2dldFJlbW90ZU9iamVjdC5odG1sOgorICAgICAgICAqIGluc3BlY3Rv
ci9oZWFwL3NuYXBzaG90Lmh0bWw6CisgICAgICAgIFVwZGF0ZSB0ZXN0cyB0byB1c2UgdGhlIG5l
dyBIZWFwU25hcHNob3RXb3JrZXIgZnJvbnRlbmQgY29kZS4KKworICAgICAgICAqIGluc3BlY3Rv
ci91bml0LXRlc3RzL2hlYXAtc25hcHNob3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBpbnNwZWN0b3IvdW5pdC10ZXN0cy9oZWFwLXNuYXBzaG90Lmh0bWw6IEFkZGVkLgorICAgICAg
ICBWZXJpZnkgdGhlIGRhdGEgcHJvY2Vzc2luZyBpbiBhbmQgd29ya2VyIGNvbW11bmljYXRpb24g
d29yayBIZWFwU25hcHNob3RXb3JrZXIKKyAgICAgICAgcHJvZHVjZXMgZXhwZWN0ZWQgdmFsdWVz
IHdoZW4gY29tcGFyZWQgd2l0aCB0aGUgc2ltcGxlIEhlYXBTbmFwc2hvdC9Ob2RlL0VkZ2UKKyAg
ICAgICAgaW1wbGVudGF0aW9uLgorCiAyMDE2LTAzLTE1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNv
cmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTjogQVNTRVJUSU9OIEZBSUxFRDog
IW1fbGFzdEFjdGl2ZUJsb2NrIG9uIGpzL2Z1bmN0aW9uLWFwcGx5Lmh0bWwKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci9oZWFwL2dldFByZXZpZXcuaHRtbCBiL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9oZWFwL2dldFByZXZpZXcuaHRtbAppbmRleCBkOWZhMjk2Li4xMDYxMzg2IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvaGVhcC9nZXRQcmV2aWV3Lmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2hlYXAvZ2V0UHJldmlldy5odG1sCkBAIC01MiwxNSAr
NTIsMTcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5l
dmFsdWF0ZUluUGFnZSgidHJpZ2dlckNyZWF0ZVN0cmluZ09iamVjdCgpIik7CiAgICAgICAgICAg
ICAgICAgSGVhcEFnZW50LnNuYXBzaG90KChlcnJvciwgdGltZXN0YW1wLCBzbmFwc2hvdFN0cmlu
Z0RhdGEpID0+IHsgLy8gTmV3bHkgY3JlYXRlZCBvYmplY3RzLgogICAgICAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoIWVycm9yLCAiU2hvdWxkIG5vdCBoYXZlIGFuIGVy
cm9yIGNyZWF0aW5nIGEgc25hcHNob3QuIik7Ci0gICAgICAgICAgICAgICAgICAgIGxldCBwYXls
b2FkID0gSlNPTi5wYXJzZShzbmFwc2hvdFN0cmluZ0RhdGEpOwotICAgICAgICAgICAgICAgICAg
ICBsZXQgc25hcHNob3QgPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LmZyb21QYXlsb2FkKHBh
eWxvYWQpOwotCi0gICAgICAgICAgICAgICAgICAgIGxldCBzdHJpbmdzID0gc25hcHNob3QuaW5z
dGFuY2VzV2l0aENsYXNzTmFtZSgic3RyaW5nIik7Ci0gICAgICAgICAgICAgICAgICAgIGxldCBo
ZWFwU25hcHNob3ROb2RlID0gc3RyaW5ncy5yZWR1Y2UoKHJlc3VsdCwgeCkgPT4gcmVzdWx0Lmlk
IDwgeC5pZCA/IHggOiByZXN1bHQsIHN0cmluZ3NbMF0pOwotICAgICAgICAgICAgICAgICAgICBI
ZWFwQWdlbnQuZ2V0UHJldmlldyhoZWFwU25hcHNob3ROb2RlLmlkLCAoZXJyb3IsIHN0cmluZywg
ZnVuY3Rpb25EZXRhaWxzLCBvYmplY3RQcmV2aWV3UGF5bG9hZCkgPT4gewotICAgICAgICAgICAg
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0KCFlcnJvciwgIlNob3VsZCBub3Qg
aGF2ZSBhbiBlcnJvciBnZXR0aW5nIHByZXZpZXcuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmxvZygiU1RSSU5HOiAiICsgc3RyaW5nKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IHdvcmtlclByb3h5
ID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFdvcmtlclByb3h5LnNpbmdsZXRvbigpOworICAg
ICAgICAgICAgICAgICAgICB3b3JrZXJQcm94eS5jcmVhdGVTbmFwc2hvdChzbmFwc2hvdFN0cmlu
Z0RhdGEsICh7b2JqZWN0SWQsIHNuYXBzaG90OiBzZXJpYWxpemVkU25hcHNob3R9KSA9PiB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsZXQgc25hcHNob3QgPSBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90UHJveHkuZGVzZXJpYWxpemUob2JqZWN0SWQsIHNlcmlhbGl6ZWRTbmFwc2hvdCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdC5pbnN0YW5jZXNXaXRoQ2xhc3NOYW1lKCJz
dHJpbmciLCAoc3RyaW5ncykgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBo
ZWFwU25hcHNob3ROb2RlID0gc3RyaW5ncy5yZWR1Y2UoKHJlc3VsdCwgeCkgPT4gcmVzdWx0Lmlk
IDwgeC5pZCA/IHggOiByZXN1bHQsIHN0cmluZ3NbMF0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEhlYXBBZ2VudC5nZXRQcmV2aWV3KGhlYXBTbmFwc2hvdE5vZGUuaWQsIChlcnJvciwg
c3RyaW5nLCBmdW5jdGlvbkRldGFpbHMsIG9iamVjdFByZXZpZXdQYXlsb2FkKSA9PiB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VGhhdCghZXJy
b3IsICJTaG91bGQgbm90IGhhdmUgYW4gZXJyb3IgZ2V0dGluZyBwcmV2aWV3LiIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiU1RSSU5HOiAiICsg
c3RyaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgfSk7CkBAIC03NSwxNSArNzcsMTcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgICAgICAg
ICAgSW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUluUGFnZSgidHJpZ2dlckNyZWF0ZUZ1bmN0aW9uT2Jq
ZWN0KCkiKTsKICAgICAgICAgICAgICAgICBIZWFwQWdlbnQuc25hcHNob3QoKGVycm9yLCB0aW1l
c3RhbXAsIHNuYXBzaG90U3RyaW5nRGF0YSkgPT4geyAvLyBOZXdseSBjcmVhdGVkIG9iamVjdHMu
CiAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VGhhdCghZXJyb3IsICJT
aG91bGQgbm90IGhhdmUgYW4gZXJyb3IgY3JlYXRpbmcgYSBzbmFwc2hvdC4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgbGV0IHBheWxvYWQgPSBKU09OLnBhcnNlKHNuYXBzaG90U3RyaW5nRGF0YSk7
Ci0gICAgICAgICAgICAgICAgICAgIGxldCBzbmFwc2hvdCA9IFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3QuZnJvbVBheWxvYWQocGF5bG9hZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbGV0IGZ1
bmN0aW9ucyA9IHNuYXBzaG90Lmluc3RhbmNlc1dpdGhDbGFzc05hbWUoIkZ1bmN0aW9uIik7Ci0g
ICAgICAgICAgICAgICAgICAgIGxldCBoZWFwU25hcHNob3ROb2RlID0gZnVuY3Rpb25zLnJlZHVj
ZSgocmVzdWx0LCB4KSA9PiByZXN1bHQuaWQgPCB4LmlkID8geCA6IHJlc3VsdCwgZnVuY3Rpb25z
WzBdKTsKLSAgICAgICAgICAgICAgICAgICAgSGVhcEFnZW50LmdldFByZXZpZXcoaGVhcFNuYXBz
aG90Tm9kZS5pZCwgKGVycm9yLCBzdHJpbmcsIGZ1bmN0aW9uRGV0YWlscywgb2JqZWN0UHJldmll
d1BheWxvYWQpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhw
ZWN0VGhhdCghZXJyb3IsICJTaG91bGQgbm90IGhhdmUgYW4gZXJyb3IgZ2V0dGluZyBwcmV2aWV3
LiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkZVTkNUSU9O
IERFVEFJTFM6ICIgKyBKU09OLnN0cmluZ2lmeShmdW5jdGlvbkRldGFpbHMsIGpzb25GaWx0ZXIs
IDQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgbGV0IHdvcmtlclByb3h5ID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFdvcmtlclBy
b3h5LnNpbmdsZXRvbigpOworICAgICAgICAgICAgICAgICAgICB3b3JrZXJQcm94eS5jcmVhdGVT
bmFwc2hvdChzbmFwc2hvdFN0cmluZ0RhdGEsICh7b2JqZWN0SWQsIHNuYXBzaG90OiBzZXJpYWxp
emVkU25hcHNob3R9KSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc25hcHNob3Qg
PSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHkuZGVzZXJpYWxpemUob2JqZWN0SWQsIHNl
cmlhbGl6ZWRTbmFwc2hvdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdC5pbnN0
YW5jZXNXaXRoQ2xhc3NOYW1lKCJGdW5jdGlvbiIsIChmdW5jdGlvbnMpID0+IHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsZXQgaGVhcFNuYXBzaG90Tm9kZSA9IGZ1bmN0aW9ucy5yZWR1
Y2UoKHJlc3VsdCwgeCkgPT4gcmVzdWx0LmlkIDwgeC5pZCA/IHggOiByZXN1bHQsIGZ1bmN0aW9u
c1swXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVhcEFnZW50LmdldFByZXZpZXco
aGVhcFNuYXBzaG90Tm9kZS5pZCwgKGVycm9yLCBzdHJpbmcsIGZ1bmN0aW9uRGV0YWlscywgb2Jq
ZWN0UHJldmlld1BheWxvYWQpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0KCFlcnJvciwgIlNob3VsZCBub3QgaGF2ZSBhbiBlcnJv
ciBnZXR0aW5nIHByZXZpZXcuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu
c3BlY3RvclRlc3QubG9nKCJGVU5DVElPTiBERVRBSUxTOiAiICsgSlNPTi5zdHJpbmdpZnkoZnVu
Y3Rpb25EZXRhaWxzLCBqc29uRmlsdGVyLCA0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwpAQCAtOTgsMTUgKzEwMiwxNyBAQCBmdW5jdGlv
biB0ZXN0KCkKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKCJ0
cmlnZ2VyQ3JlYXRlTWFwT2JqZWN0KCkiKTsKICAgICAgICAgICAgICAgICBIZWFwQWdlbnQuc25h
cHNob3QoKGVycm9yLCB0aW1lc3RhbXAsIHNuYXBzaG90U3RyaW5nRGF0YSkgPT4geyAvLyBOZXds
eSBjcmVhdGVkIG9iamVjdHMuCiAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhw
ZWN0VGhhdCghZXJyb3IsICJTaG91bGQgbm90IGhhdmUgYW4gZXJyb3IgY3JlYXRpbmcgYSBzbmFw
c2hvdC4iKTsKLSAgICAgICAgICAgICAgICAgICAgbGV0IHBheWxvYWQgPSBKU09OLnBhcnNlKHNu
YXBzaG90U3RyaW5nRGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGxldCBzbmFwc2hvdCA9IFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3QuZnJvbVBheWxvYWQocGF5bG9hZCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgbGV0IG1hcHMgPSBzbmFwc2hvdC5pbnN0YW5jZXNXaXRoQ2xhc3NOYW1lKCJN
YXAiKTsKLSAgICAgICAgICAgICAgICAgICAgbGV0IGhlYXBTbmFwc2hvdE5vZGUgPSBtYXBzLnJl
ZHVjZSgocmVzdWx0LCB4KSA9PiByZXN1bHQuaWQgPCB4LmlkID8geCA6IHJlc3VsdCwgbWFwc1sw
XSk7Ci0gICAgICAgICAgICAgICAgICAgIEhlYXBBZ2VudC5nZXRQcmV2aWV3KGhlYXBTbmFwc2hv
dE5vZGUuaWQsIChlcnJvciwgc3RyaW5nLCBmdW5jdGlvbkRldGFpbHMsIG9iamVjdFByZXZpZXdQ
YXlsb2FkKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVj
dFRoYXQoIWVycm9yLCAiU2hvdWxkIG5vdCBoYXZlIGFuIGVycm9yIGdldHRpbmcgcHJldmlldy4i
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJPQkpFQ1QgUFJF
VklFVzogIiArIEpTT04uc3RyaW5naWZ5KG9iamVjdFByZXZpZXdQYXlsb2FkLCBqc29uRmlsdGVy
LCA0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICAg
ICAgICAgIGxldCB3b3JrZXJQcm94eSA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RXb3JrZXJQ
cm94eS5zaW5nbGV0b24oKTsKKyAgICAgICAgICAgICAgICAgICAgd29ya2VyUHJveHkuY3JlYXRl
U25hcHNob3Qoc25hcHNob3RTdHJpbmdEYXRhLCAoe29iamVjdElkLCBzbmFwc2hvdDogc2VyaWFs
aXplZFNuYXBzaG90fSkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNuYXBzaG90
ID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5LmRlc2VyaWFsaXplKG9iamVjdElkLCBz
ZXJpYWxpemVkU25hcHNob3QpOworICAgICAgICAgICAgICAgICAgICAgICAgc25hcHNob3QuaW5z
dGFuY2VzV2l0aENsYXNzTmFtZSgiTWFwIiwgKG1hcHMpID0+IHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsZXQgaGVhcFNuYXBzaG90Tm9kZSA9IG1hcHMucmVkdWNlKChyZXN1bHQsIHgp
ID0+IHJlc3VsdC5pZCA8IHguaWQgPyB4IDogcmVzdWx0LCBtYXBzWzBdKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBIZWFwQWdlbnQuZ2V0UHJldmlldyhoZWFwU25hcHNob3ROb2RlLmlk
LCAoZXJyb3IsIHN0cmluZywgZnVuY3Rpb25EZXRhaWxzLCBvYmplY3RQcmV2aWV3UGF5bG9hZCkg
PT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVj
dFRoYXQoIWVycm9yLCAiU2hvdWxkIG5vdCBoYXZlIGFuIGVycm9yIGdldHRpbmcgcHJldmlldy4i
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIk9C
SkVDVCBQUkVWSUVXOiAiICsgSlNPTi5zdHJpbmdpZnkob2JqZWN0UHJldmlld1BheWxvYWQsIGpz
b25GaWx0ZXIsIDQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgfSk7CkBAIC0xMzYsMTggKzE0MiwyMSBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKCJ0cmlnZ2VyQ3JlYXRlTWFw
T2JqZWN0KCkiKTsKICAgICAgICAgICAgICAgICBIZWFwQWdlbnQuc25hcHNob3QoKGVycm9yLCB0
aW1lc3RhbXAsIHNuYXBzaG90U3RyaW5nRGF0YSkgPT4geyAvLyBOZXdseSBjcmVhdGVkIG9iamVj
dHMuCiAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VGhhdCghZXJyb3Is
ICJTaG91bGQgbm90IGhhdmUgYW4gZXJyb3IgY3JlYXRpbmcgYSBzbmFwc2hvdC4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgbGV0IHBheWxvYWQgPSBKU09OLnBhcnNlKHNuYXBzaG90U3RyaW5nRGF0
YSk7Ci0gICAgICAgICAgICAgICAgICAgIGxldCBzbmFwc2hvdCA9IFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3QuZnJvbVBheWxvYWQocGF5bG9hZCk7CisgICAgICAgICAgICAgICAgICAgIGxldCB3
b3JrZXJQcm94eSA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RXb3JrZXJQcm94eS5zaW5nbGV0
b24oKTsKKyAgICAgICAgICAgICAgICAgICAgd29ya2VyUHJveHkuY3JlYXRlU25hcHNob3Qoc25h
cHNob3RTdHJpbmdEYXRhLCAoe29iamVjdElkLCBzbmFwc2hvdDogc2VyaWFsaXplZFNuYXBzaG90
fSkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNuYXBzaG90ID0gV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdFByb3h5LmRlc2VyaWFsaXplKG9iamVjdElkLCBzZXJpYWxpemVkU25h
cHNob3QpOwogCi0gICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBh
Z2UoInRyaWdnZXJEZWxldGVNYXBPYmplY3QoKSIpOwotICAgICAgICAgICAgICAgICAgICBIZWFw
QWdlbnQuZ2MoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXZhbHVh
dGVJblBhZ2UoInRyaWdnZXJEZWxldGVNYXBPYmplY3QoKSIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgSGVhcEFnZW50LmdjKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgbGV0IG1hcHMgPSBz
bmFwc2hvdC5pbnN0YW5jZXNXaXRoQ2xhc3NOYW1lKCJNYXAiKTsKLSAgICAgICAgICAgICAgICAg
ICAgbGV0IGhlYXBTbmFwc2hvdE5vZGUgPSBtYXBzLnJlZHVjZSgocmVzdWx0LCB4KSA9PiByZXN1
bHQuaWQgPCB4LmlkID8geCA6IHJlc3VsdCwgbWFwc1swXSk7Ci0gICAgICAgICAgICAgICAgICAg
IEhlYXBBZ2VudC5nZXRQcmV2aWV3KGhlYXBTbmFwc2hvdE5vZGUuaWQsIChlcnJvciwgc3RyaW5n
LCBmdW5jdGlvbkRldGFpbHMsIG9iamVjdFByZXZpZXdQYXlsb2FkKSA9PiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoZXJyb3IsICJTaG91bGQgZ2V0
IGFuIGVycm9yIHdoZW4gb2JqZWN0IGhhcyBiZWVuIGNvbGxlY3RlZC4iKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEluc3BlY3RvclRlc3QucGFzcyhlcnJvcik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdC5pbnN0
YW5jZXNXaXRoQ2xhc3NOYW1lKCJNYXAiLCAobWFwcykgPT4geworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCBoZWFwU25hcHNob3ROb2RlID0gbWFwcy5yZWR1Y2UoKHJlc3VsdCwgeCkg
PT4gcmVzdWx0LmlkIDwgeC5pZCA/IHggOiByZXN1bHQsIG1hcHNbMF0pOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEhlYXBBZ2VudC5nZXRQcmV2aWV3KGhlYXBTbmFwc2hvdE5vZGUuaWQs
IChlcnJvciwgc3RyaW5nLCBmdW5jdGlvbkRldGFpbHMsIG9iamVjdFByZXZpZXdQYXlsb2FkKSA9
PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0
VGhhdChlcnJvciwgIlNob3VsZCBnZXQgYW4gZXJyb3Igd2hlbiBvYmplY3QgaGFzIGJlZW4gY29s
bGVjdGVkLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LnBhc3MoZXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9oZWFwL2dldFJl
bW90ZU9iamVjdC5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2hlYXAvZ2V0UmVtb3RlT2Jq
ZWN0Lmh0bWwKaW5kZXggZGRkN2JhMC4uMWVkZDFmOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2hlYXAvZ2V0UmVtb3RlT2JqZWN0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2hlYXAvZ2V0UmVtb3RlT2JqZWN0Lmh0bWwKQEAgLTMzLDE2ICszMywyMCBAQCBmdW5j
dGlvbiB0ZXN0KCkKICAgICAgICAgdGVzdDogKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAg
ICAgICAgSGVhcEFnZW50LnNuYXBzaG90KChlcnJvciwgdGltZXN0YW1wLCBzbmFwc2hvdFN0cmlu
Z0RhdGEpID0+IHsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoIWVy
cm9yLCAiU2hvdWxkIG5vdCBoYXZlIGFuIGVycm9yIGNyZWF0aW5nIGEgc25hcHNob3QuIik7Ci0g
ICAgICAgICAgICAgICAgbGV0IHBheWxvYWQgPSBKU09OLnBhcnNlKHNuYXBzaG90U3RyaW5nRGF0
YSk7Ci0gICAgICAgICAgICAgICAgbGV0IHNuYXBzaG90ID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdC5mcm9tUGF5bG9hZChwYXlsb2FkKTsKLSAgICAgICAgICAgICAgICBsZXQgaGVhcFNuYXBz
aG90Tm9kZSA9IHNuYXBzaG90Lmluc3RhbmNlc1dpdGhDbGFzc05hbWUoIldpbmRvdyIpWzBdOwot
ICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VGhhdChoZWFwU25hcHNob3ROb2Rl
LCAiU2hvdWxkIHNob3VsZCBpbmNsdWRlIGF0IGxlYXN0IG9uZSAnV2luZG93JyBpbnN0YW5jZS4i
KTsKKyAgICAgICAgICAgICAgICBsZXQgd29ya2VyUHJveHkgPSBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90V29ya2VyUHJveHkuc2luZ2xldG9uKCk7CisgICAgICAgICAgICAgICAgd29ya2VyUHJv
eHkuY3JlYXRlU25hcHNob3Qoc25hcHNob3RTdHJpbmdEYXRhLCAoe29iamVjdElkLCBzbmFwc2hv
dDogc2VyaWFsaXplZFNuYXBzaG90fSkgPT4geworICAgICAgICAgICAgICAgICAgICBsZXQgc25h
cHNob3QgPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHkuZGVzZXJpYWxpemUob2JqZWN0
SWQsIHNlcmlhbGl6ZWRTbmFwc2hvdCk7CisgICAgICAgICAgICAgICAgICAgIHNuYXBzaG90Lmlu
c3RhbmNlc1dpdGhDbGFzc05hbWUoIldpbmRvdyIsICh3aW5kb3dzKSA9PiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBsZXQgaGVhcFNuYXBzaG90Tm9kZSA9IHdpbmRvd3NbMF07CisgICAgICAg
ICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoaGVhcFNuYXBzaG90Tm9k
ZSwgIlNob3VsZCBzaG91bGQgaW5jbHVkZSBhdCBsZWFzdCBvbmUgJ1dpbmRvdycgaW5zdGFuY2Uu
Iik7CiAKLSAgICAgICAgICAgICAgICBIZWFwQWdlbnQuZ2V0UmVtb3RlT2JqZWN0KGhlYXBTbmFw
c2hvdE5vZGUuaWQsICJ0ZXN0IiwgKGVycm9yLCByZW1vdGVPYmplY3RQYXlsb2FkKSA9PiB7Ci0g
ICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VGhhdCghZXJyb3IsICJTaG91
bGQgbm90IGhhdmUgYW4gZXJyb3IgZ2V0dGluZyByZW1vdGUgb2JqZWN0LiIpOwotICAgICAgICAg
ICAgICAgICAgICBsZXQgcmVtb3RlT2JqZWN0ID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5m
cm9tUGF5bG9hZChyZW1vdGVPYmplY3RQYXlsb2FkKTsKLSAgICAgICAgICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5sb2cocmVtb3RlT2JqZWN0LmRlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgSGVhcEFnZW50LmdldFJl
bW90ZU9iamVjdChoZWFwU25hcHNob3ROb2RlLmlkLCAidGVzdCIsIChlcnJvciwgcmVtb3RlT2Jq
ZWN0UGF5bG9hZCkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRl
c3QuZXhwZWN0VGhhdCghZXJyb3IsICJTaG91bGQgbm90IGhhdmUgYW4gZXJyb3IgZ2V0dGluZyBy
ZW1vdGUgb2JqZWN0LiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZW1vdGVP
YmplY3QgPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKHJlbW90ZU9iamVj
dFBheWxvYWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9n
KHJlbW90ZU9iamVjdC5kZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzb2x2ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0K
QEAgLTcxLDE5ICs3NSwyMiBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKCJ0cmlnZ2VyQ3JlYXRlTWFwT2JqZWN0KCkiKTsKICAg
ICAgICAgICAgICAgICBIZWFwQWdlbnQuc25hcHNob3QoKGVycm9yLCB0aW1lc3RhbXAsIHNuYXBz
aG90U3RyaW5nRGF0YSkgPT4geyAvLyBOZXdseSBjcmVhdGVkIG9iamVjdHMuCiAgICAgICAgICAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VGhhdCghZXJyb3IsICJTaG91bGQgbm90IGhh
dmUgYW4gZXJyb3IgY3JlYXRpbmcgYSBzbmFwc2hvdC4iKTsKLSAgICAgICAgICAgICAgICAgICAg
bGV0IHBheWxvYWQgPSBKU09OLnBhcnNlKHNuYXBzaG90U3RyaW5nRGF0YSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGxldCBzbmFwc2hvdCA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QuZnJvbVBh
eWxvYWQocGF5bG9hZCk7Ci0gICAgICAgICAgICAgICAgICAgIGxldCBtYXBzID0gc25hcHNob3Qu
aW5zdGFuY2VzV2l0aENsYXNzTmFtZSgiTWFwIik7Ci0gICAgICAgICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QuZXhwZWN0VGhhdChtYXBzLmxlbmd0aCwgIlNob3VsZCBzaG91bGQgaW5jbHVkZSBh
dCBsZWFzdCBvbmUgJ01hcCcgaW5zdGFuY2UuIik7CisgICAgICAgICAgICAgICAgICAgIGxldCB3
b3JrZXJQcm94eSA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RXb3JrZXJQcm94eS5zaW5nbGV0
b24oKTsKKyAgICAgICAgICAgICAgICAgICAgd29ya2VyUHJveHkuY3JlYXRlU25hcHNob3Qoc25h
cHNob3RTdHJpbmdEYXRhLCAoe29iamVjdElkLCBzbmFwc2hvdDogc2VyaWFsaXplZFNuYXBzaG90
fSkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNuYXBzaG90ID0gV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdFByb3h5LmRlc2VyaWFsaXplKG9iamVjdElkLCBzZXJpYWxpemVkU25h
cHNob3QpOworICAgICAgICAgICAgICAgICAgICAgICAgc25hcHNob3QuaW5zdGFuY2VzV2l0aENs
YXNzTmFtZSgiTWFwIiwgKG1hcHMpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQobWFwcy5sZW5ndGgsICJTaG91bGQgc2hvdWxkIGluY2x1
ZGUgYXQgbGVhc3Qgb25lICdNYXAnIGluc3RhbmNlLiIpOwogCi0gICAgICAgICAgICAgICAgICAg
IEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2UoInRyaWdnZXJEZWxldGVNYXBPYmplY3QoKSIp
OwotICAgICAgICAgICAgICAgICAgICBIZWFwQWdlbnQuZ2MoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKCJ0cmlnZ2VyRGVsZXRlTWFw
T2JqZWN0KCkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWFwQWdlbnQuZ2MoKTsK
IAotICAgICAgICAgICAgICAgICAgICBsZXQgaGVhcFNuYXBzaG90Tm9kZSA9IG1hcHMucmVkdWNl
KChyZXN1bHQsIHgpID0+IHJlc3VsdC5pZCA8IHguaWQgPyB4IDogcmVzdWx0LCBtYXBzWzBdKTsK
LSAgICAgICAgICAgICAgICAgICAgSGVhcEFnZW50LmdldFJlbW90ZU9iamVjdChoZWFwU25hcHNo
b3ROb2RlLmlkLCAidGVzdCIsIChlcnJvciwgcmVtb3RlT2JqZWN0UGF5bG9hZCkgPT4gewotICAg
ICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0KGVycm9yLCAiU2hv
dWxkIGdldCBhbiBlcnJvciB3aGVuIG9iamVjdCBoYXMgYmVlbiBjb2xsZWN0ZWQuIik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LnBhc3MoZXJyb3IpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxl
dCBoZWFwU25hcHNob3ROb2RlID0gbWFwcy5yZWR1Y2UoKHJlc3VsdCwgeCkgPT4gcmVzdWx0Lmlk
IDwgeC5pZCA/IHggOiByZXN1bHQsIG1hcHNbMF0pOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEhlYXBBZ2VudC5nZXRSZW1vdGVPYmplY3QoaGVhcFNuYXBzaG90Tm9kZS5pZCwgInRlc3Qi
LCAoZXJyb3IsIHJlbW90ZU9iamVjdFBheWxvYWQpID0+IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0KGVycm9yLCAiU2hvdWxkIGdldCBh
biBlcnJvciB3aGVuIG9iamVjdCBoYXMgYmVlbiBjb2xsZWN0ZWQuIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QucGFzcyhlcnJvcik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2hlYXAvc25hcHNob3QuaHRtbCBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9oZWFwL3NuYXBzaG90Lmh0bWwKaW5kZXggMzkxNmQyYS4uMjI0ODkxMyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2hlYXAvc25hcHNob3QuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvaGVhcC9zbmFwc2hvdC5odG1sCkBAIC0xMywxMyArMTMsMTcgQEAg
ZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgIHRlc3Q6IChyZXNvbHZlLCByZWplY3QpID0+IHsKICAg
ICAgICAgICAgIEhlYXBBZ2VudC5zbmFwc2hvdCgoZXJyb3IsIHRpbWVzdGFtcCwgc25hcHNob3RT
dHJpbmdEYXRhKSA9PiB7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0
KCFlcnJvciwgIlNob3VsZCBub3QgaGF2ZSBhbiBlcnJvciBjcmVhdGluZyBhIHNuYXBzaG90LiIp
OwotICAgICAgICAgICAgICAgIGxldCBwYXlsb2FkID0gSlNPTi5wYXJzZShzbmFwc2hvdFN0cmlu
Z0RhdGEpOwotICAgICAgICAgICAgICAgIGxldCBzbmFwc2hvdCA9IFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3QuZnJvbVBheWxvYWQocGF5bG9hZCk7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5leHBlY3RUaGF0KHNuYXBzaG90LnRvdGFsU2l6ZSA+IDEwMjQsICJTbmFwc2hvdCBzaXpl
IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMWtiLiIpOwotICAgICAgICAgICAgICAgIEluc3BlY3Rv
clRlc3QuZXhwZWN0VGhhdChzbmFwc2hvdC50b3RhbE9iamVjdENvdW50ID4gMTAwLCAiU25hcHNo
b3Qgb2JqZWN0IGNvdW50IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMTAwLiIpOwotICAgICAgICAg
ICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VGhhdChzbmFwc2hvdC5jYXRlZ29yaWVzLmdldCgi
V2luZG93IiksICJTbmFwc2hvdCBzaG91bGQgaW5jbHVkZSBhIGNsYXNzIGNhdGVnb3J5IGZvciAn
V2luZG93Jy4iKTsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoc25h
cHNob3QuaW5zdGFuY2VzV2l0aENsYXNzTmFtZSgiV2luZG93IikubGVuZ3RoID4gMCwgIlNuYXBz
aG90IHNob3VsZCBpbmNsdWRlIGF0IGxlYXN0IG9uZSAnV2luZG93JyBpbnN0YW5jZS4iKTsKLSAg
ICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICAgICAgbGV0IHdvcmtlclByb3h5
ID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFdvcmtlclByb3h5LnNpbmdsZXRvbigpOworICAg
ICAgICAgICAgICAgIHdvcmtlclByb3h5LmNyZWF0ZVNuYXBzaG90KHNuYXBzaG90U3RyaW5nRGF0
YSwgKHtvYmplY3RJZCwgc25hcHNob3Q6IHNlcmlhbGl6ZWRTbmFwc2hvdH0pID0+IHsKKyAgICAg
ICAgICAgICAgICAgICAgbGV0IHNuYXBzaG90ID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBy
b3h5LmRlc2VyaWFsaXplKG9iamVjdElkLCBzZXJpYWxpemVkU25hcHNob3QpOworICAgICAgICAg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoc25hcHNob3QudG90YWxTaXplID4g
MTAyNCwgIlNuYXBzaG90IHNpemUgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAxa2IuIik7CisgICAg
ICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VGhhdChzbmFwc2hvdC50b3RhbE9i
amVjdENvdW50ID4gMTAwLCAiU25hcHNob3Qgb2JqZWN0IGNvdW50IHNob3VsZCBiZSBncmVhdGVy
IHRoYW4gMTAwLiIpOworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRo
YXQoc25hcHNob3QuY2F0ZWdvcmllcy5nZXQoIldpbmRvdyIpLCAiU25hcHNob3Qgc2hvdWxkIGlu
Y2x1ZGUgYSBjbGFzcyBjYXRlZ29yeSBmb3IgJ1dpbmRvdycuIik7CisgICAgICAgICAgICAgICAg
ICAgIHNuYXBzaG90Lmluc3RhbmNlc1dpdGhDbGFzc05hbWUoIldpbmRvdyIsICh3aW5kb3dzKSA9
PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQod2lu
ZG93cy5sZW5ndGggPiAwLCAiU25hcHNob3Qgc2hvdWxkIGluY2x1ZGUgYXQgbGVhc3Qgb25lICdX
aW5kb3cnIGluc3RhbmNlLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOwor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9CiAgICAgfSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvdW5pdC10ZXN0cy9oZWFwLXNuYXBzaG90LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci91bml0LXRlc3RzL2hlYXAtc25hcHNob3QtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NmM5ODEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvdW5pdC10ZXN0cy9oZWFwLXNuYXBzaG90LWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDQyIEBACitUZXN0aW5nIEhlYXBTbmFwc2hvdCBXb3JrZXIgYW5kIFByb3h5IG9i
amVjdHMuCisKKworPT0gUnVubmluZyB0ZXN0IHN1aXRlOiBIZWFwU25hcHNob3QKKy0tIFJ1bm5p
bmcgdGVzdCBjYXNlOiBIZWFwU25hcHNob3RQcm94eSBkYXRhCitQQVNTOiBTaG91bGQgbm90IGhh
dmUgYW4gZXJyb3IgY3JlYXRpbmcgYSBzbmFwc2hvdC4KK1BBU1M6IFNuYXBzaG90cyB0b3RhbFNp
emUgc2hvdWxkIG1hdGNoLgorUEFTUzogU25hcHNob3RzIHRvdGFsT2JqZWN0Q291bnQgc2hvdWxk
IG1hdGNoLgorCistLSBSdW5uaW5nIHRlc3QgY2FzZTogSGVhcFNuYXBzaG90UHJveHkucHJvdG90
eXBlLmluc3RhbmNlc1dpdGhDbGFzc05hbWUKK1BBU1M6IFNob3VsZCBiZSBhdCBsZWFzdCAxIFdp
bmRvdy4KK1BBU1M6IFdpbmRvdyBvYmplY3QgY291bnQgaXMgZXhwZWN0ZWQuCitQQVNTOiBFdmVy
eSBjbGFzc05hbWUgc2hvdWxkIGJlICdXaW5kb3cnLgorUEFTUzogU2hvdWxkIGJlIGF0IGxlYXN0
IDEgRnVuY3Rpb24uCitQQVNTOiBGdW5jdGlvbiBvYmplY3QgY291bnQgaXMgZXhwZWN0ZWQuCitQ
QVNTOiBFdmVyeSBjbGFzc05hbWUgc2hvdWxkIGJlICdGdW5jdGlvbicuCitQQVNTOiBTaG91bGQg
YmUgYXQgbGVhc3QgMSBzdHJpbmcuCitQQVNTOiBzdHJpbmcgY291bnQgaXMgZXhwZWN0ZWQuCitQ
QVNTOiBFdmVyeSBjbGFzc05hbWUgc2hvdWxkIGJlICdzdHJpbmcnLgorCistLSBSdW5uaW5nIHRl
c3QgY2FzZTogSGVhcFNuYXBzaG90UHJveHkucHJvdG90eXBlLm5vZGVXaXRoSWRlbnRpZmllciBh
bmQgSGVhcFNuYXBzaG90Tm9kZVByb3h5IGRhdGEKK1BBU1M6IE5vZGUgY2xhc3NOYW1lIHNob3Vs
ZCBiZSAnV2luZG93Jy4KK1BBU1M6IE5vZGUgaWRlbnRpZmllciBzaG91bGQgbWF0Y2guCitQQVNT
OiBOb2RlIHNpemUgc2hvdWxkIG1hdGNoLgorUEFTUzogTm9kZSBpbnRlcm5hbCBzdGF0ZSBzaG91
bGQgbWF0Y2guCitQQVNTOiBOb2RlIGdjUm9vdCBzdGF0ZSBzaG91bGQgbWF0Y2guCitQQVNTOiBO
b2RlIHJldGFpbmVkU2l6ZSBzaG91bGQgYXQgbGVhc3QgYmUgdGhlIHNpemUuCisKKy0tIFJ1bm5p
bmcgdGVzdCBjYXNlOiBIZWFwU25hcHNob3RQcm94eS5wcm90b3R5cGUuYWxsb2NhdGlvbkJ1Y2tl
dENvdW50cworUEFTUzogUmVzdWx0IHNob3VsZCBoYXZlIDMgYnVja2V0cywgZm9yIHNtYWxsL21l
ZGl1bS9sYXJnZS4KK1BBU1M6IFNtYWxsIGNvdW50IHNob3VsZCBtYXRjaC4KK1BBU1M6IE1lZGl1
bSBjb3VudCBzaG91bGQgbWF0Y2guCitQQVNTOiBMYXJnZSBjb3VudCBzaG91bGQgbWF0Y2guCisK
Ky0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBIZWFwU25hcHNob3ROb2RlUHJveHkucHJvdG90eXBlLnJl
dGFpbmVkTm9kZXMKK1BBU1M6IE51bWJlciBvZiByZXRhaW5lZCBub2RlcyBzaG91bGQgbWF0Y2gu
CitQQVNTOiBOb2RlIHZhbHVlcyBzaG91bGQgbWF0Y2guCisKKy0tIFJ1bm5pbmcgdGVzdCBjYXNl
OiBIZWFwU25hcHNob3ROb2RlUHJveHkucHJvdG90eXBlLnJldGFpbmVycworUEFTUzogTnVtYmVy
IG9mIHJldGFpbmVyIG5vZGVzIHNob3VsZCBtYXRjaC4KK1BBU1M6IE5vZGUgdmFsdWVzIHNob3Vs
ZCBtYXRjaC4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMv
aGVhcC1zbmFwc2hvdC5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvaGVh
cC1zbmFwc2hvdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OGJi
OWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdW5pdC10ZXN0cy9o
ZWFwLXNuYXBzaG90Lmh0bWwKQEAgLTAsMCArMSwyNjIgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNv
dXJjZXMvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0aW9uIHRl
c3QoKQoreworICAgIC8vIFNpbXBsZSBIZWFwU25hcHNob3QgcmVwcmVzZW50YXRpb24uCisKKyAg
ICBXZWJJbnNwZWN0b3IuVGVzdEhlYXBTbmFwc2hvdE5vZGUgPSBjbGFzcyBUZXN0SGVhcFNuYXBz
aG90Tm9kZQorICAgIHsKKyAgICAgICAgY29uc3RydWN0b3IoaWRlbnRpZmllciwgY2xhc3NOYW1l
LCBzaXplLCBpbnRlcm5hbCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5pZCA9IGlkZW50
aWZpZXI7CisgICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKKyAgICAgICAg
ICAgIHRoaXMuc2l6ZSA9IHNpemU7IAorICAgICAgICAgICAgdGhpcy5pbnRlcm5hbCA9IGludGVy
bmFsOworICAgICAgICAgICAgdGhpcy5nY1Jvb3QgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMu
b3V0Z29pbmdFZGdlcyA9IFtdOworICAgICAgICAgICAgdGhpcy5pbmNvbWluZ0VkZ2VzID0gW107
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBXZWJJbnNwZWN0b3IuVGVzdEhlYXBTbmFwc2hvdEVk
Z2UgPSBjbGFzcyBUZXN0SGVhcFNuYXBzaG90RWRnZQorICAgIHsKKyAgICAgICAgY29uc3RydWN0
b3IoZnJvbSwgdG8sIHR5cGUsIGRhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuZnJv
bSA9IGZyb207CisgICAgICAgICAgICB0aGlzLnRvID0gdG87CisgICAgICAgICAgICB0aGlzLnR5
cGUgPSB0eXBlOworICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBXZWJJbnNwZWN0b3IuVGVzdEhlYXBTbmFwc2hvdCA9IGNsYXNzIFRlc3RIZWFw
U25hcHNob3QKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdG9yKHJvb3ROb2RlLCBub2Rlcywgbm9k
ZU1hcCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQocm9vdE5vZGUgaW5z
dGFuY2VvZiBXZWJJbnNwZWN0b3IuVGVzdEhlYXBTbmFwc2hvdE5vZGUpOworICAgICAgICAgICAg
Y29uc29sZS5hc3NlcnQobm9kZXMuZXZlcnkoKG4pID0+IG4gaW5zdGFuY2VvZiBXZWJJbnNwZWN0
b3IuVGVzdEhlYXBTbmFwc2hvdE5vZGUpKTsKKworICAgICAgICAgICAgdGhpcy5yb290Tm9kZSA9
IHJvb3ROb2RlOworICAgICAgICAgICAgdGhpcy5ub2RlcyA9IG5vZGVzOworICAgICAgICAgICAg
dGhpcy5ub2RlTWFwID0gbm9kZU1hcDsKKyAgICAgICAgICAgIHRoaXMudG90YWxTaXplID0gbm9k
ZXMucmVkdWNlKChzdW0sIG5vZGUpID0+IHN1bSArPSBub2RlLnNpemUsIDApOworICAgICAgICAg
ICAgdGhpcy50b3RhbE9iamVjdENvdW50ID0gbm9kZXMubGVuZ3RoOworICAgICAgICB9CisKKyAg
ICAgICAgc3RhdGljIGZyb21QYXlsb2FkKHBheWxvYWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGxldCB7dmVyc2lvbiwgbm9kZXMsIG5vZGVDbGFzc05hbWVzLCBlZGdlcywgZWRnZVR5cGVzLCBl
ZGdlTmFtZXN9ID0gcGF5bG9hZDsKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHZlcnNpb24g
PT09IDEsICJPbmx5IGtub3cgaG93IHRvIGhhbmRsZSBKYXZhU2NyaXB0Q29yZSBIZWFwIFNuYXBz
aG90IEZvcm1hdCBWZXJzaW9uIDEiKTsKKworICAgICAgICAgICAgbGV0IG5vZGVNYXAgPSBuZXcg
TWFwOworCisgICAgICAgICAgICAvLyBUdXJuIG5vZGVzIGludG8gcmVhbCBub2Rlcy4KKyAgICAg
ICAgICAgIGxldCBwcm9jZXNzZWROb2RlcyA9IFtdOworICAgICAgICAgICAgZm9yIChsZXQgaSA9
IDAsIGxlbmd0aCA9IG5vZGVzLmxlbmd0aDsgaSA8IGxlbmd0aDspIHsKKyAgICAgICAgICAgICAg
ICBsZXQgaWQgPSBub2Rlc1tpKytdOworICAgICAgICAgICAgICAgIGxldCBzaXplID0gbm9kZXNb
aSsrXTsKKyAgICAgICAgICAgICAgICBsZXQgY2xhc3NOYW1lSW5kZXggPSBub2Rlc1tpKytdOwor
ICAgICAgICAgICAgICAgIGxldCBpbnRlcm5hbCA9IG5vZGVzW2krK107CisKKyAgICAgICAgICAg
ICAgICBsZXQgbm9kZSA9IG5ldyBXZWJJbnNwZWN0b3IuVGVzdEhlYXBTbmFwc2hvdE5vZGUoaWQs
IG5vZGVDbGFzc05hbWVzW2NsYXNzTmFtZUluZGV4XSwgc2l6ZSwgISFpbnRlcm5hbCk7CisgICAg
ICAgICAgICAgICAgbm9kZU1hcC5zZXQoaWQsIG5vZGUpOworICAgICAgICAgICAgICAgIHByb2Nl
c3NlZE5vZGVzLnB1c2gobm9kZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFR1
cm4gZWRnZXMgaW50byByZWFsIGVkZ2VzIGFuZCBzZXQgdGhlbSBvbiB0aGUgbm9kZXMuCisgICAg
ICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gZWRnZXMubGVuZ3RoOyBpIDwgbGVuZ3Ro
OykgeworICAgICAgICAgICAgICAgIGxldCBmcm9tSWRlbnRpZmllciA9IGVkZ2VzW2krK107Cisg
ICAgICAgICAgICAgICAgbGV0IHRvSWRlbnRpZmllciA9IGVkZ2VzW2krK107CisgICAgICAgICAg
ICAgICAgbGV0IGVkZ2VUeXBlSW5kZXggPSBlZGdlc1tpKytdOworICAgICAgICAgICAgICAgIGxl
dCBkYXRhID0gZWRnZXNbaSsrXTsKKworICAgICAgICAgICAgICAgIGxldCBmcm9tID0gbm9kZU1h
cC5nZXQoZnJvbUlkZW50aWZpZXIpOworICAgICAgICAgICAgICAgIGxldCB0byA9IG5vZGVNYXAu
Z2V0KHRvSWRlbnRpZmllcik7CisgICAgICAgICAgICAgICAgbGV0IHR5cGUgPSBlZGdlVHlwZXNb
ZWRnZVR5cGVJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICJQcm9wZXJ0eSIg
fHwgdHlwZSA9PT0gIlZhcmlhYmxlIikKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGVkZ2VO
YW1lc1tkYXRhXTsKKworICAgICAgICAgICAgICAgIGxldCBlZGdlID0gbmV3IFdlYkluc3BlY3Rv
ci5UZXN0SGVhcFNuYXBzaG90RWRnZShmcm9tLCB0bywgdHlwZSwgZGF0YSk7CisgICAgICAgICAg
ICAgICAgZnJvbS5vdXRnb2luZ0VkZ2VzLnB1c2goZWRnZSk7CisgICAgICAgICAgICAgICAgdG8u
aW5jb21pbmdFZGdlcy5wdXNoKGVkZ2UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBSb290IG5vZGUuCisgICAgICAgICAgICBsZXQgcm9vdE5vZGUgPSBub2RlTWFwLmdldCgwKTsK
KyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHJvb3ROb2RlLCAiTm9kZSB3aXRoIGlkZW50aWZp
ZXIgMCBpcyB0aGUgc3ludGhldGljIDxyb290PiBub2RlLiIpOworICAgICAgICAgICAgY29uc29s
ZS5hc3NlcnQocm9vdE5vZGUub3V0Z29pbmdFZGdlcy5sZW5ndGggPiAwLCAiVGhpcyBoYWQgYmV0
dGVyIGhhdmUgY2hpbGRyZW4hIik7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChyb290Tm9k
ZS5pbmNvbWluZ0VkZ2VzLmxlbmd0aCA9PT0gMCwgIlRoaXMgaGFkIGJldHRlciBub3QgaGF2ZSBi
YWNrIHJlZmVyZW5jZXMhIik7CisKKyAgICAgICAgICAgIC8vIE1hcmsgR0Mgcm9vdHMuCisgICAg
ICAgICAgICBsZXQgcm9vdE5vZGVFZGdlcyA9IHJvb3ROb2RlLm91dGdvaW5nRWRnZXM7CisgICAg
ICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gcm9vdE5vZGVFZGdlcy5sZW5ndGg7IGkg
PCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICByb290Tm9kZUVkZ2VzW2ldLnRvLmdjUm9v
dCA9IHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlRlc3RIZWFw
U25hcHNob3Qocm9vdE5vZGUsIHByb2Nlc3NlZE5vZGVzLCBub2RlTWFwKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFB1YmxpYworCisgICAgICAgIGluc3RhbmNlc1dpdGhDbGFzc05hbWUoY2xh
c3NOYW1lKQorICAgICAgICB7CisgICAgICAgICAgICBsZXQgcmVzdWx0cyA9IFtdOworICAgICAg
ICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICAgICAgbGV0IG5vZGUgPSB0aGlzLm5vZGVzW2ldOworICAgICAgICAgICAgICAgIGlm
IChub2RlLmNsYXNzTmFtZSA9PT0gY2xhc3NOYW1lKQorICAgICAgICAgICAgICAgICAgICByZXN1
bHRzLnB1c2gobm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
czsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyAtLS0tLS0KKworICAgIGxldCBzdWl0ZSA9
IEluc3BlY3RvclRlc3QuY3JlYXRlQXN5bmNTdWl0ZSgiSGVhcFNuYXBzaG90Iik7CisKKyAgICBs
ZXQgc25hcHNob3QgPSBudWxsOworICAgIGxldCBzbmFwc2hvdE5vZGVGb3JXaW5kb3dPYmplY3Qg
PSBudWxsOworICAgIGxldCB0ZXN0U25hcHNob3QgPSBudWxsOworICAgIGxldCB0ZXN0U25hcHNo
b3ROb2RlRm9yV2luZG93T2JqZWN0ID0gbnVsbDsKKworICAgIGZ1bmN0aW9uIGNvbXBhcmVOb2Rl
cyhub2RlMSwgbm9kZTIpIHsKKyAgICAgICAgcmV0dXJuIG5vZGUxLmlkID09PSBub2RlMi5pZAor
ICAgICAgICAgICAgJiYgbm9kZTEuc2l6ZSA9PT0gbm9kZTIuc2l6ZQorICAgICAgICAgICAgJiYg
bm9kZTEuY2xhc3NOYW1lID09PSBub2RlMi5jbGFzc05hbWUKKyAgICAgICAgICAgICYmIG5vZGUx
LmludGVybmFsID09PSBub2RlMi5pbnRlcm5hbAorICAgICAgICAgICAgJiYgbm9kZTEuZ2NSb290
ID09PSBub2RlMi5nY1Jvb3Q7CisgICAgfQorCisgICAgc3VpdGUuYWRkVGVzdENhc2UoeworICAg
ICAgICBuYW1lOiAiSGVhcFNuYXBzaG90UHJveHkgZGF0YSIsCisgICAgICAgIHRlc3Q6IChyZXNv
bHZlLCByZWplY3QpID0+IHsKKyAgICAgICAgICAgIEhlYXBBZ2VudC5zbmFwc2hvdCgoZXJyb3Is
IHRpbWVzdGFtcCwgc25hcHNob3RTdHJpbmdEYXRhKSA9PiB7CisgICAgICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5leHBlY3RUaGF0KCFlcnJvciwgIlNob3VsZCBub3QgaGF2ZSBhbiBlcnJvciBj
cmVhdGluZyBhIHNuYXBzaG90LiIpOworICAgICAgICAgICAgICAgIHRlc3RTbmFwc2hvdCA9IFdl
Ykluc3BlY3Rvci5UZXN0SGVhcFNuYXBzaG90LmZyb21QYXlsb2FkKEpTT04ucGFyc2Uoc25hcHNo
b3RTdHJpbmdEYXRhKSk7CisgICAgICAgICAgICAgICAgbGV0IHdvcmtlclByb3h5ID0gV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFdvcmtlclByb3h5LnNpbmdsZXRvbigpOworICAgICAgICAgICAg
ICAgIHdvcmtlclByb3h5LmNyZWF0ZVNuYXBzaG90KHNuYXBzaG90U3RyaW5nRGF0YSwgKHtvYmpl
Y3RJZCwgc25hcHNob3Q6IHNlcmlhbGl6ZWRTbmFwc2hvdH0pID0+IHsKKyAgICAgICAgICAgICAg
ICAgICAgc25hcHNob3QgPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHkuZGVzZXJpYWxp
emUob2JqZWN0SWQsIHNlcmlhbGl6ZWRTbmFwc2hvdCk7CisgICAgICAgICAgICAgICAgICAgIElu
c3BlY3RvclRlc3QuYXNzZXJ0KHRlc3RTbmFwc2hvdCwgIkNyZWF0ZWQgVGVzdEhlYXBTbmFwc2hv
dCIpOworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChzbmFwc2hvdCwg
IkNyZWF0ZWQgSGVhcFNuYXBzaG90UHJveHkiKTsKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5leHBlY3RUaGF0KHNuYXBzaG90LnRvdGFsU2l6ZSA9PT0gdGVzdFNuYXBzaG90LnRv
dGFsU2l6ZSwgIlNuYXBzaG90cyB0b3RhbFNpemUgc2hvdWxkIG1hdGNoLiIpOworICAgICAgICAg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoc25hcHNob3QudG90YWxPYmplY3RD
b3VudCA9PT0gdGVzdFNuYXBzaG90LnRvdGFsT2JqZWN0Q291bnQsICJTbmFwc2hvdHMgdG90YWxP
YmplY3RDb3VudCBzaG91bGQgbWF0Y2guIik7CisgICAgICAgICAgICAgICAgICAgIHJlc29sdmUo
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAg
fSk7CisKKyAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7CisgICAgICAgIG5hbWU6ICJIZWFwU25hcHNo
b3RQcm94eS5wcm90b3R5cGUuaW5zdGFuY2VzV2l0aENsYXNzTmFtZSIsCisgICAgICAgIHRlc3Q6
IChyZXNvbHZlLCByZWplY3QpID0+IHsKKyAgICAgICAgICAgIGxldCB3aW5kb3dPYmplY3RzID0g
dGVzdFNuYXBzaG90Lmluc3RhbmNlc1dpdGhDbGFzc05hbWUoIldpbmRvdyIpCisgICAgICAgICAg
ICBsZXQgd2luZG93T2JqZWN0Q291bnQgPSB3aW5kb3dPYmplY3RzLmxlbmd0aDsKKyAgICAgICAg
ICAgIGxldCBmdW5jdGlvbk9iamVjdENvdW50ID0gdGVzdFNuYXBzaG90Lmluc3RhbmNlc1dpdGhD
bGFzc05hbWUoIkZ1bmN0aW9uIikubGVuZ3RoOworICAgICAgICAgICAgbGV0IHN0cmluZ0NvdW50
ID0gdGVzdFNuYXBzaG90Lmluc3RhbmNlc1dpdGhDbGFzc05hbWUoInN0cmluZyIpLmxlbmd0aDsK
KworICAgICAgICAgICAgc25hcHNob3QuaW5zdGFuY2VzV2l0aENsYXNzTmFtZSgiV2luZG93Iiwg
KHdpbmRvd3MpID0+IHsKKyAgICAgICAgICAgICAgICB0ZXN0U25hcHNob3ROb2RlRm9yV2luZG93
T2JqZWN0ID0gd2luZG93T2JqZWN0c1swXTsgLy8gVXNlZCBieSBsYXRlciB0ZXN0cy4KKyAgICAg
ICAgICAgICAgICBzbmFwc2hvdE5vZGVGb3JXaW5kb3dPYmplY3QgPSB3aW5kb3dzWzBdOyAvLyBV
c2VkIGJ5IGxhdGVyIHRlc3RzLgorCisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBl
Y3RUaGF0KHdpbmRvd3MubGVuZ3RoID4gMCwgIlNob3VsZCBiZSBhdCBsZWFzdCAxIFdpbmRvdy4i
KTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQod2luZG93cy5sZW5n
dGggPT09IHdpbmRvd09iamVjdENvdW50LCAiV2luZG93IG9iamVjdCBjb3VudCBpcyBleHBlY3Rl
ZC4iKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQod2luZG93cy5l
dmVyeSgobm9kZSkgPT4gbm9kZS5jbGFzc05hbWUgPT09ICJXaW5kb3ciKSwgIkV2ZXJ5IGNsYXNz
TmFtZSBzaG91bGQgYmUgJ1dpbmRvdycuIik7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgc25hcHNob3QuaW5zdGFuY2VzV2l0aENsYXNzTmFtZSgiRnVuY3Rpb24iLCAoZnVuY3Rpb25z
KSA9PiB7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0KGZ1bmN0aW9u
cy5sZW5ndGggPiAwLCAiU2hvdWxkIGJlIGF0IGxlYXN0IDEgRnVuY3Rpb24uIik7CisgICAgICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0KGZ1bmN0aW9ucy5sZW5ndGggPT09IGZ1
bmN0aW9uT2JqZWN0Q291bnQsICJGdW5jdGlvbiBvYmplY3QgY291bnQgaXMgZXhwZWN0ZWQuIik7
CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0KGZ1bmN0aW9ucy5ldmVy
eSgobm9kZSkgPT4gbm9kZS5jbGFzc05hbWUgPT09ICJGdW5jdGlvbiIpLCAiRXZlcnkgY2xhc3NO
YW1lIHNob3VsZCBiZSAnRnVuY3Rpb24nLiIpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICAgIHNuYXBzaG90Lmluc3RhbmNlc1dpdGhDbGFzc05hbWUoInN0cmluZyIsIChzdHJpbmdzKSA9
PiB7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0KHN0cmluZ3MubGVu
Z3RoID4gMCwgIlNob3VsZCBiZSBhdCBsZWFzdCAxIHN0cmluZy4iKTsKKyAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoc3RyaW5ncy5sZW5ndGggPT09IHN0cmluZ0NvdW50
LCAic3RyaW5nIGNvdW50IGlzIGV4cGVjdGVkLiIpOworICAgICAgICAgICAgICAgIEluc3BlY3Rv
clRlc3QuZXhwZWN0VGhhdChzdHJpbmdzLmV2ZXJ5KChub2RlKSA9PiBub2RlLmNsYXNzTmFtZSA9
PT0gInN0cmluZyIpLCAiRXZlcnkgY2xhc3NOYW1lIHNob3VsZCBiZSAnc3RyaW5nJy4iKTsKKyAg
ICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAg
IH0pOworCisgICAgc3VpdGUuYWRkVGVzdENhc2UoeworICAgICAgICBuYW1lOiAiSGVhcFNuYXBz
aG90UHJveHkucHJvdG90eXBlLm5vZGVXaXRoSWRlbnRpZmllciBhbmQgSGVhcFNuYXBzaG90Tm9k
ZVByb3h5IGRhdGEiLAorICAgICAgICB0ZXN0OiAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAg
ICAgICAgICBzbmFwc2hvdC5ub2RlV2l0aElkZW50aWZpZXIodGVzdFNuYXBzaG90Tm9kZUZvcldp
bmRvd09iamVjdC5pZCwgKGhlYXBTbmFwc2hvdE5vZGUpID0+IHsKKyAgICAgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoaGVhcFNuYXBzaG90Tm9kZS5jbGFzc05hbWUgPT09ICJX
aW5kb3ciLCAiTm9kZSBjbGFzc05hbWUgc2hvdWxkIGJlICdXaW5kb3cnLiIpOworICAgICAgICAg
ICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VGhhdChoZWFwU25hcHNob3ROb2RlLmlkID09PSB0
ZXN0U25hcHNob3ROb2RlRm9yV2luZG93T2JqZWN0LmlkLCAiTm9kZSBpZGVudGlmaWVyIHNob3Vs
ZCBtYXRjaC4iKQorICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VGhhdChoZWFw
U25hcHNob3ROb2RlLnNpemUgPT09IHRlc3RTbmFwc2hvdE5vZGVGb3JXaW5kb3dPYmplY3Quc2l6
ZSwgIk5vZGUgc2l6ZSBzaG91bGQgbWF0Y2guIik7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5leHBlY3RUaGF0KGhlYXBTbmFwc2hvdE5vZGUuaW50ZXJuYWwgPT09IHRlc3RTbmFwc2hv
dE5vZGVGb3JXaW5kb3dPYmplY3QuaW50ZXJuYWwsICJOb2RlIGludGVybmFsIHN0YXRlIHNob3Vs
ZCBtYXRjaC4iKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoaGVh
cFNuYXBzaG90Tm9kZS5nY1Jvb3QgPT09IHRlc3RTbmFwc2hvdE5vZGVGb3JXaW5kb3dPYmplY3Qu
Z2NSb290LCAiTm9kZSBnY1Jvb3Qgc3RhdGUgc2hvdWxkIG1hdGNoLiIpOworICAgICAgICAgICAg
ICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VGhhdChoZWFwU25hcHNob3ROb2RlLnJldGFpbmVkU2l6
ZSA+PSBoZWFwU25hcHNob3ROb2RlLnNpemUsICJOb2RlIHJldGFpbmVkU2l6ZSBzaG91bGQgYXQg
bGVhc3QgYmUgdGhlIHNpemUuIik7CisgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsK
KyAgICAgICAgbmFtZTogIkhlYXBTbmFwc2hvdFByb3h5LnByb3RvdHlwZS5hbGxvY2F0aW9uQnVj
a2V0Q291bnRzIiwKKyAgICAgICAgdGVzdDogKHJlc29sdmUsIHJlamVjdCkgPT4geworICAgICAg
ICAgICAgbGV0IHRlc3RTbWFsbCA9IDAsIHRlc3RNZWRpdW0gPSAwLCB0ZXN0TGFyZ2UgPSAwOwor
ICAgICAgICAgICAgY29uc3Qgc21hbGxTaXplID0gMzIsIG1lZGl1bVNpemUgPSAxMjg7CisgICAg
ICAgICAgICBmb3IgKGxldCB7c2l6ZX0gb2YgdGVzdFNuYXBzaG90Lm5vZGVzKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHNpemUgPCBzbWFsbFNpemUpCisgICAgICAgICAgICAgICAgICAgIHRlc3RT
bWFsbCsrOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemUgPCBtZWRpdW1TaXplKQorICAg
ICAgICAgICAgICAgICAgICB0ZXN0TWVkaXVtKys7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICB0ZXN0TGFyZ2UrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgc25hcHNob3QuYWxsb2NhdGlvbkJ1Y2tldENvdW50cyhbc21hbGxTaXplLCBtZWRpdW1TaXpl
XSwgKHJlc3VsdHMpID0+IHsKKyAgICAgICAgICAgICAgICBsZXQgW3NtYWxsLCBtZWRpdW0sIGxh
cmdlXSA9IHJlc3VsdHM7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0
KHJlc3VsdHMubGVuZ3RoID09PSAzLCAiUmVzdWx0IHNob3VsZCBoYXZlIDMgYnVja2V0cywgZm9y
IHNtYWxsL21lZGl1bS9sYXJnZS4iKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4
cGVjdFRoYXQoc21hbGwgPT09IHRlc3RTbWFsbCwgIlNtYWxsIGNvdW50IHNob3VsZCBtYXRjaC4i
KTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQobWVkaXVtID09PSB0
ZXN0TWVkaXVtLCAiTWVkaXVtIGNvdW50IHNob3VsZCBtYXRjaC4iKTsKKyAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQobGFyZ2UgPT09IHRlc3RMYXJnZSwgIkxhcmdlIGNv
dW50IHNob3VsZCBtYXRjaC4iKTsKKyAgICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgc3VpdGUuYWRkVGVzdENhc2Uoewor
ICAgICAgICBuYW1lOiAiSGVhcFNuYXBzaG90Tm9kZVByb3h5LnByb3RvdHlwZS5yZXRhaW5lZE5v
ZGVzIiwKKyAgICAgICAgdGVzdDogKHJlc29sdmUsIHJlamVjdCkgPT4geworICAgICAgICAgICAg
bGV0IGV4cGVjdGVkTm9kZXMgPSB0ZXN0U25hcHNob3ROb2RlRm9yV2luZG93T2JqZWN0Lm91dGdv
aW5nRWRnZXMubWFwKChlZGdlKSA9PiBlZGdlLnRvKTsKKyAgICAgICAgICAgIGV4cGVjdGVkTm9k
ZXMuc29ydCgoYSwgYikgPT4gYS5pZCAtIGIuaWQpOworCisgICAgICAgICAgICBzbmFwc2hvdE5v
ZGVGb3JXaW5kb3dPYmplY3QucmV0YWluZWROb2Rlcygobm9kZXMpID0+IHsKKyAgICAgICAgICAg
ICAgICBub2Rlcy5zb3J0KChhLCBiKSA9PiBhLmlkIC0gYi5pZCk7CisgICAgICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZXMubGVuZ3RoID4gMCwgIlRlc3Qgb25seSBtYWtlcyBz
aW5jZSBpZiB0aGVyZSBhcmUgcmV0YWluZWQgbm9kZXMiKTsKKyAgICAgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmV4cGVjdFRoYXQobm9kZXMubGVuZ3RoID09PSBleHBlY3RlZE5vZGVzLmxlbmd0
aCwgIk51bWJlciBvZiByZXRhaW5lZCBub2RlcyBzaG91bGQgbWF0Y2guIik7CisgICAgICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0KG5vZGVzLmV2ZXJ5KChub2RlLCBpKSA9PiBj
b21wYXJlTm9kZXMobm9kZSwgZXhwZWN0ZWROb2Rlc1tpXSkpLCAiTm9kZSB2YWx1ZXMgc2hvdWxk
IG1hdGNoLiIpOworICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisgICAgfSk7CisKKyAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7CisgICAgICAgIG5h
bWU6ICJIZWFwU25hcHNob3ROb2RlUHJveHkucHJvdG90eXBlLnJldGFpbmVycyIsCisgICAgICAg
IHRlc3Q6IChyZXNvbHZlLCByZWplY3QpID0+IHsKKyAgICAgICAgICAgIGxldCBleHBlY3RlZE5v
ZGVzID0gdGVzdFNuYXBzaG90Tm9kZUZvcldpbmRvd09iamVjdC5pbmNvbWluZ0VkZ2VzLm1hcCgo
ZWRnZSkgPT4gZWRnZS5mcm9tKTsKKyAgICAgICAgICAgIGV4cGVjdGVkTm9kZXMuc29ydCgoYSwg
YikgPT4gYS5pZCAtIGIuaWQpOworCisgICAgICAgICAgICBzbmFwc2hvdE5vZGVGb3JXaW5kb3dP
YmplY3QucmV0YWluZXJzKChub2RlcykgPT4geworICAgICAgICAgICAgICAgIG5vZGVzLnNvcnQo
KGEsIGIpID0+IGEuaWQgLSBiLmlkKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFz
c2VydChub2Rlcy5sZW5ndGggPiAwLCAiVGVzdCBvbmx5IG1ha2VzIHNpbmNlIGlmIHRoZXJlIGFy
ZSByZXRhaW5lciBub2RlcyIpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0
VGhhdChub2Rlcy5sZW5ndGggPT09IGV4cGVjdGVkTm9kZXMubGVuZ3RoLCAiTnVtYmVyIG9mIHJl
dGFpbmVyIG5vZGVzIHNob3VsZCBtYXRjaC4iKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JU
ZXN0LmV4cGVjdFRoYXQobm9kZXMuZXZlcnkoKG5vZGUsIGkpID0+IGNvbXBhcmVOb2Rlcyhub2Rl
LCBleHBlY3RlZE5vZGVzW2ldKSksICJOb2RlIHZhbHVlcyBzaG91bGQgbWF0Y2guIik7CisgICAg
ICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9
KTsKKworICAgIHN1aXRlLnJ1blRlc3RDYXNlc0FuZEZpbmlzaCgpOworfQorPC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CisgICAgPHA+VGVzdGluZyBIZWFwU25h
cHNob3QgV29ya2VyIGFuZCBQcm94eSBvYmplY3RzLjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDhhZGEwYmUuLjYzN2NhZTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwMCBAQAorMjAxNi0wMy0xNiAgSm9zZXBoIFBlY29yYXJv
ICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE9wZXJhdGUg
b24gSGVhcFNuYXBzaG90IGRhdGEgd2l0aGluIFdvcmtlcnMgYW5kIHJlZHVjZSBhbGxvY2F0aW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NTcx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBp
cyB0aGUgZmlyc3QgaW5jbHVzaW9uIG9mIFdvcmtlcnMgaW50byBXZWIgSW5zcGVjdG9yLiBJbiB0
aGlzIGNhc2UKKyAgICAgICAgdGhlIE1haW4gc2lkZSBtZXJlbHkgbmVlZHMgdG8gbWFrZSByZXF1
ZXN0cyBvZiB0aGUgV29ya2VyIGFuZCBnZXQgYmFjaworICAgICAgICBvYmplY3RzIHRoYXQgaXQg
Y2FuIGludGVyYWN0IHdpdGggbW9yZS4KKyAgICAgICAgCisgICAgICAgIE5ldyBmaWxlIGhlaXJh
cmNoaWVzOgorCisgICAgICAgICAgICBVc2VySW50ZXJmYWNlL1Byb3hpZXMKKyAgICAgICAgICAg
ICAgICAtIG5ldyBQcm94eSBjbGFzc2VzIGluIHRoZSBNYWluIHBhZ2UuCisgICAgICAgICAgICAg
ICAgLSB0cmVhdCBsaWtlIE1vZGVsIGNsYXNzZXMsIGJ1dCBub3QgcXVpdGUgbW9kZWwuCisKKyAg
ICAgICAgICAgIFVzZXJJbnRlcmZhY2UvV29ya2Vycy9IZWFwU25hcHNob3RXb3JrZXIKKyAgICAg
ICAgICAgICAgICAtIG5ldyBXb3JrZXIgY2xhc3NlcyBmb3IgV29ya2Vycy4gTm8gV2ViSW5zcGVj
dG9yIG5hbWVzcGFjZS4KKyAgICAgICAgICAgICAgICAtIG5vIG1pbmlmaWNhdGlvbiBvZiB0aGVz
ZSByZXNvdXJjZXMsIHRoZXkgYXJlIHNpbXBseSBjb3BpZWQuCisKKyAgICAgICAgUmVtb3RlIHBy
b2NlZHVyZSBjYWxsIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBNYWluL1dvcmtlciBwYWdlIGhhcHBl
bnMKKyAgICAgICAgdGhyb3VnaCB0aGUgV29ya2VyUHJveHkgYW5kIFdvcmtlciBjbGFzc2VzLiBU
aGVyZSBhcmUgc2ltcGxlIHdheXMKKyAgICAgICAgdG8gcGVyZm9ybSBmYWN0b3J5IHN0eWxlIG1l
dGhvZHMgYW5kIGNhbGwgbWV0aG9kcyBvbiBvYmplY3RzLCBhbmQKKyAgICAgICAgZ2V0IHRoZSBy
ZXN1bHQgaW4gYSBjYWxsYmFjay4gU2ltaWxpYXIgdG8gZnJvbnRlbmQgPC0+IGJhY2tlbmQgYWdl
bnQKKyAgICAgICAgY29tbXVuaWNhdGlvbjoKKworICAgICAgICAgICAgSGVhcFNuYXBzaG90V29y
a2VyUHJveHk6IChNYWluIHdvcmxkKQorICAgICAgICAgICAgICAgIC0gY3JlYXRlcyB0aGUgd29y
a2VyCisgICAgICAgICAgICAgICAgLSBwZXJmb3JtQWN0aW9uKCJhY3Rpb25OYW1lIiwgYXJndW1l
bnRzLCBjYWxsYmFjaykKKyAgICAgICAgICAgICAgICAtIGNhbGxNZXRob2Qob2JqZWN0SWQsICJt
ZXRob2ROYW1lIiwgYXJndW1lbnRzLCBjYWxsYmFjaykKKyAgICAgICAgICAgICAgICAtIGhhbmRs
ZSBtZXNzYWdlID0+IGRpc3BhdGNoIGV2ZW50IG9yIGludm9rZSBjYWxsYmFjaworCisgICAgICAg
ICAgICBIZWFwU25hcHNob3RXb3JrZXI6IChXb3JrZXIgd29ybGQpCisgICAgICAgICAgICAgICAg
LSBzZW5kRXZlbnQoImV2ZW50TmFtZSIsIGV2ZW50RGF0YSkKKyAgICAgICAgICAgICAgICAtIGhh
bmRsZSBtZXNzYWdlID0+IGRpc3BhdGNoIGFjdGlvbiBvciBtZXRob2Qgb24gb2JqZWN0CisgICAg
ICAgIAorICAgICAgICBQcm94eSBvYmplY3QgbWV0aG9kcyBhcmUgYm9pbGVycGxhdGUgY2FsbHMg
dG8gcGVyZm9ybUFjdGlvbi9jYWxsTWV0aG9kCisgICAgICAgIHdpdGggZGVzZXJpYWxpemF0aW9u
IG9mIHJlc3BvbnNlcy4gVGhlIHJlc3Qgb2YgdGhlIGZyb250ZW5kIGNhbiBqdXN0CisgICAgICAg
IHRyZWF0IFByb3h5IG9iamVjdHMgYXMgTW9kZWwgb2JqZWN0cyB3aXRoIHNvbWUgZGF0YSBhbmQg
YXN5bmMgbWV0aG9kcy4KKworICAgICAgICBCZWNhdXNlIHRoZSBOb2RlL0VkZ2UgZGF0YSBpcyBz
byBzbWFsbCwgb2JqZWN0cyBhcmUgY2hlYXBseSBjcmVhdGVkCisgICAgICAgIHdoZW4gbmVlZGVk
IGFuZCBub3QgY2FjaGVkLiBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgbWF5IGJlIGR1cGxpY2F0ZQor
ICAgICAgICBIZWFwU25hcHNob3ROb2RlJ3MgZm9yIHRoZSBzYW1lIG5vZGUuIEZvciBleGFtcGxl
IGlmIGRpZmZlcmVudCBWaWV3cworICAgICAgICBib3RoIHJlcXVlc3QgaW5zdGFuY2VzV2l0aENs
YXNzTmFtZSgiRm9vIikuIFRoaXMgaXMgZmluZSwgYXMgbm9uZQorICAgICAgICBvZiBvdXIgVmll
d3MgcmVhbGx5IGNhcmUgYWJvdXQgb2JqZWN0IHVuaXF1ZW5lc3MsIHRoZXkgYXJlIG9ubHkKKyAg
ICAgICAgaW50ZXJlc3RlZCBpbiB0aGUgZGF0YSBvciBxdWVyeWluZyBmb3IgbW9yZSBkYXRhLgor
CisgICAgICAgICogU2NyaXB0cy9jb21iaW5lLXJlc291cmNlcy5wbDoKKyAgICAgICAgKiBTY3Jp
cHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVzb3VyY2VzLnBsOgorICAgICAgICBDb3B5IHRoZSBX
b3JrZXJzIGRpcmVjdG9yeSB0byB0aGUgcmVzb3VyY2VzIGRpcmVjdG9yeS4KKyAgICAgICAgSXRz
IGNvZGUgaXMgb25seSBtZWFudCB0byBiZSBsb2FkZWQgYnkgV29ya2Vycywgc28gaXQKKyAgICAg
ICAgc2hvdWxkbid0IGJlIGluY2x1ZGVkIGluIHRoZSBNYWluIHBhZ2UuCisKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL01haW4uaHRtbDoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Rlc3QuaHRt
bDoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9IZWFwU25hcHNob3QuanM6IFJlbW92
ZWQuCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvSGVhcFNuYXBzaG90RGlmZi5qczog
UmVtb3ZlZC4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9IZWFwU25hcHNob3RFZGdl
LmpzOiBSZW1vdmVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL0hlYXBTbmFwc2hv
dE5vZGUuanM6IFJlbW92ZWQuCisgICAgICAgIFJlcGxhY2UgdGhlIG9sZCBzaW1wbGUgTW9kZWwg
Y2xhc3NlcyB3aXRoIFByb3h5IGNsYXNzZXMgdGhhdCBpbnRlcmFjdAorICAgICAgICB3aXRoIHRo
ZSBXb3JrZXIuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9IZWFwQWxsb2NhdGlv
bnNJbnN0cnVtZW50LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBBbGxvY2F0aW9uc0lu
c3RydW1lbnQucHJvdG90eXBlLl90YWtlSGVhcFNuYXBzaG90KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwQWxsb2NhdGlvbnNJbnN0cnVtZW50KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNl
L01vZGVscy9IZWFwQWxsb2NhdGlvbnNUaW1lbGluZVJlY29yZC5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwQWxsb2NhdGlvbnNUaW1lbGluZVJlY29yZCk6CisgICAgICAgICogVXNlcklu
dGVyZmFjZS9Nb2RlbHMvSGVhcFNuYXBzaG90Um9vdFBhdGguanM6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90Um9vdFBhdGgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFJvb3RQYXRoLnByb3RvdHlwZS5hcHBlbmRFZGdlKToKKyAgICAgICAgKiBVc2VySW50
ZXJmYWNlL1Byb3RvY29sL0hlYXBPYnNlcnZlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwT2JzZXJ2ZXIucHJvdG90eXBlLnRyYWNraW5nU3RhcnQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBPYnNlcnZlci5wcm90b3R5cGUudHJhY2tpbmdDb21wbGV0ZSk6CisgICAgICAgICog
VXNlckludGVyZmFjZS9WaWV3cy9Db250ZW50Vmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Db250ZW50Vmlldy5jcmVhdGVGcm9tUmVwcmVzZW50ZWRPYmplY3QpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNvbnRlbnRWaWV3LmlzVmlld2FibGUpOgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvVmlld3MvSGVhcEFsbG9jYXRpb25zVGltZWxpbmVWaWV3LmpzOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBBbGxvY2F0aW9uc1RpbWVsaW5lVmlldy5wcm90b3R5cGUuc2hvd0hlYXBTbmFw
c2hvdERpZmYpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBBbGxvY2F0aW9uc1RpbWVsaW5l
Vmlldy5wcm90b3R5cGUuX3Rha2VIZWFwU25hcHNob3RDbGlja2VkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwQWxsb2NhdGlvbnNUaW1lbGluZVZpZXcucHJvdG90eXBlLl9kYXRhR3JpZE5v
ZGVTZWxlY3RlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcEFsbG9jYXRpb25zVGltZWxp
bmVWaWV3KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0hlYXBTbmFwc2hvdENsYXNz
RGF0YUdyaWROb2RlLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENsYXNz
RGF0YUdyaWROb2RlLnByb3RvdHlwZS5fcG9wdWxhdGUpOgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvVmlld3MvSGVhcFNuYXBzaG90Q2x1c3RlckNvbnRlbnRWaWV3LmpzOgorICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvVmlld3MvSGVhcFNuYXBzaG90SW5zdGFuY2VEYXRhR3JpZE5vZGUuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90SW5zdGFuY2VEYXRhR3JpZE5vZGUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEluc3RhbmNlRGF0YUdyaWROb2RlLmxv
Z0hlYXBTbmFwc2hvdE5vZGUubm9kZS5zaG9ydGVzdEdDUm9vdFBhdGguKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RJbnN0YW5jZURhdGFHcmlkTm9kZS5sb2dIZWFwU25hcHNo
b3ROb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RJbnN0YW5jZURhdGFH
cmlkTm9kZS5wcm90b3R5cGUuX21vdXNlb3ZlckhhbmRsZXIuYXBwZW5kUGF0aCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90SW5zdGFuY2VEYXRhR3JpZE5vZGUucHJvdG90eXBl
Ll9tb3VzZW92ZXJIYW5kbGVyLnN0cmluZ2lmeUVkZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdEluc3RhbmNlRGF0YUdyaWROb2RlLnByb3RvdHlwZS5fbW91c2VvdmVySGFu
ZGxlcik6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9IZWFwU25hcHNob3RJbnN0YW5j
ZXNDb250ZW50Vmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RJbnN0
YW5jZXNDb250ZW50Vmlldyk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9IZWFwU25h
cHNob3RJbnN0YW5jZXNEYXRhR3JpZFRyZWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90SW5zdGFuY2VzRGF0YUdyaWRUcmVlKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNl
L1ZpZXdzL0hlYXBTbmFwc2hvdFN1bW1hcnlDb250ZW50Vmlldy5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RTdW1tYXJ5Q29udGVudFZpZXcpOgorICAgICAgICBVcGRhdGUg
ZXhpc3RpbmcgY29kZSB0byBleHBlY3QgdGhlIG5ldyBQcm94eSBvYmplY3RzIG9yIGNyZWF0ZQor
ICAgICAgICB0aGUgbmV3IEhlYXBTbmFwc2hvdCB1c2luZyB3b3JrZXJzLgorCisgICAgICAgICog
VXNlckludGVyZmFjZS9Qcm94aWVzL0hlYXBTbmFwc2hvdERpZmZQcm94eS5qczogQWRkZWQuCisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZlByb3h5KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmUHJveHkuZGVzZXJpYWxpemUpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZQcm94eS5wcm90b3R5cGUuZ2V0IHNuYXBzaG90
MSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZlByb3h5LnByb3RvdHlw
ZS5nZXQgc25hcHNob3QyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZm
UHJveHkucHJvdG90eXBlLmdldCB0b3RhbFNpemUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdERpZmZQcm94eS5wcm90b3R5cGUuZ2V0IHRvdGFsT2JqZWN0Q291bnQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZQcm94eS5wcm90b3R5cGUuZ2V0IGNh
dGVnb3JpZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZQcm94eS5w
cm90b3R5cGUuYWxsb2NhdGlvbkJ1Y2tldENvdW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90RGlmZlByb3h5LnByb3RvdHlwZS5pbnN0YW5jZXNXaXRoQ2xhc3NOYW1lKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmUHJveHkucHJvdG90eXBlLm5v
ZGVXaXRoSWRlbnRpZmllcik6CisgICAgICAgIEEgSGVhcFNuYXBzaG90RGlmZlByb3h5IGxvb2tz
IGxpa2UgYSBIZWFwU25hcHNob3RQcm94eSBhbmQgcmVzcG9uZHMgdG8KKyAgICAgICAgdGhlIHNh
bWUgbWV0aG9kcywgYnV0IGhhcyB0aGUgZXh0cmEgc25hcHNob3QxLzIgcG9pbnRlcnMuCisKKyAg
ICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb3hpZXMvSGVhcFNuYXBzaG90RWRnZVByb3h5LmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VQcm94eSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVByb3h5LmRlc2VyaWFsaXplKToKKyAgICAgICAg
RWRnZSBkYXRhLiBObyBtZXRob2RzIGFyZSBwcm94aWVkIGF0IHRoaXMgcG9pbnQuCisKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL1Byb3hpZXMvSGVhcFNuYXBzaG90Tm9kZVByb3h5LmpzOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlUHJveHkpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVQcm94eS5kZXNlcmlhbGl6ZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVByb3h5LnByb3RvdHlwZS5zaG9ydGVz
dEdDUm9vdFBhdGgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVQcm94
eS5wcm90b3R5cGUuZG9taW5hdGVkTm9kZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdE5vZGVQcm94eS5wcm90b3R5cGUucmV0YWluZWROb2Rlcyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVByb3h5LnByb3RvdHlwZS5yZXRhaW5lcnMpOgorICAg
ICAgICBOb2RlIGRhdGEgYW5kIG1ldGhvZHMgdG8gcXVlcnkgZm9yIG5vZGUgcmVsYXRpb25zaGlw
cy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJveGllcy9IZWFwU25hcHNob3RQcm94eS5q
czogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHkpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5LmRlc2VyaWFsaXplKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eS5wcm90b3R5cGUuZ2V0IHByb3h5T2Jq
ZWN0SWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5LnByb3RvdHlw
ZS5nZXQgaWRlbnRpZmllcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJv
eHkucHJvdG90eXBlLmdldCB0b3RhbFNpemUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFByb3h5LnByb3RvdHlwZS5nZXQgdG90YWxPYmplY3RDb3VudCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHkucHJvdG90eXBlLmdldCBjYXRlZ29yaWVzKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eS5wcm90b3R5cGUuYWxsb2Nh
dGlvbkJ1Y2tldENvdW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJv
eHkucHJvdG90eXBlLmluc3RhbmNlc1dpdGhDbGFzc05hbWUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdFByb3h5LnByb3RvdHlwZS5ub2RlV2l0aElkZW50aWZpZXIpOgorICAg
ICAgICBTbmFwc2hvdCBkYXRhIGFuZCBtZXRob2RzIHRvIHF1ZXJ5IGZvciBub2Rlcy4KKworICAg
ICAgICAqIFVzZXJJbnRlcmZhY2UvUHJveGllcy9IZWFwU25hcHNob3RXb3JrZXJQcm94eS5qczog
QWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90V29ya2VyUHJveHkpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFdvcmtlclByb3h5LnNpbmdsZXRvbik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90V29ya2VyUHJveHkucHJvdG90eXBl
LmNyZWF0ZVNuYXBzaG90KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RXb3Jr
ZXJQcm94eS5wcm90b3R5cGUuY3JlYXRlU25hcHNob3REaWZmKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RXb3JrZXJQcm94eS5wcm90b3R5cGUucGVyZm9ybUFjdGlvbik6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90V29ya2VyUHJveHkucHJvdG90eXBlLmNh
bGxNZXRob2QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFdvcmtlclByb3h5
LnByb3RvdHlwZS5fcG9zdE1lc3NhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdFdvcmtlclByb3h5LnByb3RvdHlwZS5faGFuZGxlTWVzc2FnZSk6CisgICAgICAgIFNpbmds
ZXRvbiBmYWN0b3J5IGZvciB0aGUgd29ya2VyIGFuZCBwcm94aWVkIGNvbW11bmljYXRpb24gd2l0
aCB0aGUgd29ya2VyLgorICAgICAgICBQcm92aWRlIG1lYW5zIGZvciBpbnZva2luZyAiZmFjdG9y
eSBhY3Rpb25zIiBhbmQgIm9iamVjdCBtZXRob2RzIi4KKworICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvV29ya2Vycy9IZWFwU25hcHNob3QvSGVhcFNuYXBzaG90V29ya2VyLmpzOiBBZGRlZC4KKyAg
ICAgICAgKEhlYXBTbmFwc2hvdFdvcmtlcik6CisgICAgICAgIChIZWFwU25hcHNob3RXb3JrZXIu
cHJvdG90eXBlLmNyZWF0ZVNuYXBzaG90KToKKyAgICAgICAgKEhlYXBTbmFwc2hvdFdvcmtlci5w
cm90b3R5cGUuY3JlYXRlU25hcHNob3REaWZmKToKKyAgICAgICAgKEhlYXBTbmFwc2hvdFdvcmtl
ci5wcm90b3R5cGUuc2VuZEV2ZW50KToKKyAgICAgICAgKEhlYXBTbmFwc2hvdFdvcmtlci5wcm90
b3R5cGUuX2hhbmRsZU1lc3NhZ2UpOgorICAgICAgICBNYWluIHdvcmtlciBjb2RlLiBIYW5kbGUg
ZGlzcGF0Y2hpbmcgYWN0aW9ucyBhbmQgbWV0aG9kcy4KKworICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvV29ya2Vycy9IZWFwU25hcHNob3QvSGVhcFNuYXBzaG90LmpzOiBBZGRlZC4KKyAgICAgICAg
KEhlYXBTbmFwc2hvdCk6CisgICAgICAgIChIZWFwU25hcHNob3QuYnVpbGRDYXRlZ29yaWVzKToK
KyAgICAgICAgKEhlYXBTbmFwc2hvdC5hbGxvY2F0aW9uQnVja2V0Q291bnRzKToKKyAgICAgICAg
KEhlYXBTbmFwc2hvdC5pbnN0YW5jZXNXaXRoQ2xhc3NOYW1lKToKKyAgICAgICAgKEhlYXBTbmFw
c2hvdC5wcm90b3R5cGUuYWxsb2NhdGlvbkJ1Y2tldENvdW50cyk6CisgICAgICAgIChIZWFwU25h
cHNob3QucHJvdG90eXBlLmluc3RhbmNlc1dpdGhDbGFzc05hbWUpOgorICAgICAgICAoSGVhcFNu
YXBzaG90LnByb3RvdHlwZS5ub2RlV2l0aElkZW50aWZpZXIpOgorICAgICAgICAoSGVhcFNuYXBz
aG90LnByb3RvdHlwZS5zaG9ydGVzdEdDUm9vdFBhdGgpOgorICAgICAgICAoSGVhcFNuYXBzaG90
LnByb3RvdHlwZS5kb21pbmF0ZWROb2Rlcyk6CisgICAgICAgIChIZWFwU25hcHNob3QucHJvdG90
eXBlLnJldGFpbmVkTm9kZXMpOgorICAgICAgICAoSGVhcFNuYXBzaG90LnByb3RvdHlwZS5yZXRh
aW5lcnMpOgorICAgICAgICAoSGVhcFNuYXBzaG90LnByb3RvdHlwZS5zZXJpYWxpemUpOgorICAg
ICAgICAoSGVhcFNuYXBzaG90LnByb3RvdHlwZS5zZXJpYWxpemVOb2RlKToKKyAgICAgICAgKEhl
YXBTbmFwc2hvdC5wcm90b3R5cGUuc2VyaWFsaXplRWRnZSk6CisgICAgICAgIChIZWFwU25hcHNo
b3QucHJvdG90eXBlLl9idWlsZE91dGdvaW5nRWRnZXMpOgorICAgICAgICAoSGVhcFNuYXBzaG90
LnByb3RvdHlwZS5fYnVpbGRJbmNvbWluZ0VkZ2VzKToKKyAgICAgICAgKEhlYXBTbmFwc2hvdC5w
cm90b3R5cGUuX2J1aWxkUG9zdE9yZGVySW5kZXhlcyk6CisgICAgICAgIChIZWFwU25hcHNob3Qu
cHJvdG90eXBlLl9idWlsZERvbWluYXRvckluZGV4ZXMpOgorICAgICAgICAoSGVhcFNuYXBzaG90
LnByb3RvdHlwZS5fYnVpbGRSZXRhaW5lZFNpemVzKToKKyAgICAgICAgKEhlYXBTbmFwc2hvdC5w
cm90b3R5cGUuX2djUm9vdFBhdGhlcy52aXNpdE5vZGUpOgorICAgICAgICAoSGVhcFNuYXBzaG90
LnByb3RvdHlwZS5fZ2NSb290UGF0aGVzKToKKyAgICAgICAgKEhlYXBTbmFwc2hvdERpZmYpOgor
ICAgICAgICAoSGVhcFNuYXBzaG90RGlmZi5wcm90b3R5cGUuYWxsb2NhdGlvbkJ1Y2tldENvdW50
cyk6CisgICAgICAgIChIZWFwU25hcHNob3REaWZmLnByb3RvdHlwZS5pbnN0YW5jZXNXaXRoQ2xh
c3NOYW1lKToKKyAgICAgICAgKEhlYXBTbmFwc2hvdERpZmYucHJvdG90eXBlLm5vZGVXaXRoSWRl
bnRpZmllcik6CisgICAgICAgIChIZWFwU25hcHNob3REaWZmLnByb3RvdHlwZS5zaG9ydGVzdEdD
Um9vdFBhdGgpOgorICAgICAgICAoSGVhcFNuYXBzaG90RGlmZi5wcm90b3R5cGUuZG9taW5hdGVk
Tm9kZXMpOgorICAgICAgICAoSGVhcFNuYXBzaG90RGlmZi5wcm90b3R5cGUucmV0YWluZWROb2Rl
cyk6CisgICAgICAgIChIZWFwU25hcHNob3REaWZmLnByb3RvdHlwZS5yZXRhaW5lcnMpOgorICAg
ICAgICAoSGVhcFNuYXBzaG90RGlmZi5wcm90b3R5cGUuc2VyaWFsaXplKToKKyAgICAgICAgTmV3
IEhlYXBTbmFwc2hvdCBkYXRhIHByb2Nlc3NpbmcgaW1wbGVtZW50YXRpb24uIEluc3RlYWQgb2Yg
Y3JlYXRpbmcKKyAgICAgICAgYSBuZXcgb2JqZWN0IHBlciBOb2RlIG9yIHBlciBFZGdlIGNyZWF0
ZSBkYXRhIGFycmF5cyBjb250YWluaW5nIGRhdGEKKyAgICAgICAgcGVyLU5vZGUuIE9wZXJhdGUg
b24gdGhlc2UgbGlzdHMgb2YgZGF0YSBpbnN0ZWFkIG9mIGNyZWF0aW5nIG1hbnkgb2JqZWN0cy4K
KwogMjAxNi0wMy0xNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IFNob3cgcGF0aCBmcm9tIHJvb3QgdG8gaW5zdGFuY2VzIGlu
IHRoZSBIZWFwIFNuYXBzaG90IGNvbnRlbnQgdmlldwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1NjcmlwdHMvY29tYmluZS1yZXNvdXJjZXMucGwgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvU2NyaXB0cy9jb21iaW5lLXJlc291cmNlcy5wbAppbmRleCBiYzFhMjMxLi42ZDJjZjQ0
IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvU2NyaXB0cy9jb21iaW5lLXJlc291
cmNlcy5wbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvU2NyaXB0cy9jb21iaW5lLXJlc291
cmNlcy5wbApAQCAtMTAzLDcgKzEwMyw3IEBAIHN1YiBjb25jYXRlbmF0ZUZpbGVzKCQkJCkKICAg
ICB9CiB9CiAKLW15ICRpbnB1dERpcmVjdG9yeVBhdHRlcm4gPSAiKD8hRXh0ZXJuYWxcLylbXlwi
XSoiOworbXkgJGlucHV0RGlyZWN0b3J5UGF0dGVybiA9ICIoPyFFeHRlcm5hbFwvKSg/IVdvcmtl
cnNcLylbXlwiXSoiOwogJGlucHV0RGlyZWN0b3J5UGF0dGVybiA9ICRpbnB1dERpcmVjdG9yeSAu
ICJcL1teXCJdKiIgaWYgJGlucHV0RGlyZWN0b3J5OwogCiBjb25jYXRlbmF0ZUZpbGVzKCRvdXRw
dXRTdHlsZXNoZWV0TmFtZSwgIjxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiKCRpbnB1
dERpcmVjdG9yeVBhdHRlcm4pXCI+IiwgIjxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwi
JG91dHB1dFN0eWxlc2hlZXROYW1lXCI+IikgaWYgZGVmaW5lZCAkb3V0cHV0U3R5bGVzaGVldE5h
bWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvU2NyaXB0cy9jb3B5LXVzZXIt
aW50ZXJmYWNlLXJlc291cmNlcy5wbCBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL2Nv
cHktdXNlci1pbnRlcmZhY2UtcmVzb3VyY2VzLnBsCmluZGV4IGMzMTA4YjguLjYwZjU4MjIgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL2NvcHktdXNlci1pbnRlcmZh
Y2UtcmVzb3VyY2VzLnBsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL2NvcHkt
dXNlci1pbnRlcmZhY2UtcmVzb3VyY2VzLnBsCkBAIC0xMjUsNiArMTI1LDcgQEAgbXkgJHNjcmlw
dHNSb290ID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCRFTlZ7J1NSQ1JPT1QnfSwgJ1NjcmlwdHMnKTsK
IG15ICR1aVJvb3QgPSBGaWxlOjpTcGVjLT5jYXRkaXIoJEVOVnsnU1JDUk9PVCd9LCAnVXNlcklu
dGVyZmFjZScpOwogbXkgJHRhcmdldFJlc291cmNlUGF0aCA9IEZpbGU6OlNwZWMtPmNhdGRpcigk
RU5WeydUQVJHRVRfQlVJTERfRElSJ30sICRFTlZ7J1VOTE9DQUxJWkVEX1JFU09VUkNFU19GT0xE
RVJfUEFUSCd9KTsKIG15ICRwcm90b2NvbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcigkdGFyZ2V0
UmVzb3VyY2VQYXRoLCAnUHJvdG9jb2wnKTsKK215ICR3b3JrZXJzRGlyID0gRmlsZTo6U3BlYy0+
Y2F0ZGlyKCR0YXJnZXRSZXNvdXJjZVBhdGgsICdXb3JrZXJzJyk7CiBteSAkY29kZU1pcnJvclBh
dGggPSBGaWxlOjpTcGVjLT5jYXRkaXIoJHVpUm9vdCwgJ0V4dGVybmFsJywgJ0NvZGVNaXJyb3In
KTsKIG15ICRlc3ByaW1hUGF0aCA9IEZpbGU6OlNwZWMtPmNhdGRpcigkdWlSb290LCAnRXh0ZXJu
YWwnLCAnRXNwcmltYScpOwogbXkgJGVzbGludFBhdGggPSBGaWxlOjpTcGVjLT5jYXRkaXIoJHVp
Um9vdCwgJ0V4dGVybmFsJywgJ0VTTGludCcpOwpAQCAtMjM4LDggKzIzOSw5IEBAIGlmICgkc2hv
dWxkQ29tYmluZU1haW4pIHsKICAgICAjIFJlbW92ZSBFU0xpbnQgdW50aWwgbmVlZGVkOiA8aHR0
cHM6Ly93ZWJraXQub3JnL2IvMTM2NTE1PiBXZWIgSW5zcGVjdG9yOiBKYXZhU2NyaXB0IHNvdXJj
ZSB0ZXh0IGVkaXRvciBzaG91bGQgaGF2ZSBhIGxpbnRlcgogICAgIHVubGluayAkdGFyZ2V0RVNM
aW50SlM7CiAKLSAgICAjIENvcHkgdGhlIExlZ2FjeSBkaXJlY3RvcnkuCisgICAgIyBDb3B5IHRo
ZSBQcm90b2NvbC9MZWdhY3kgYW5kIFdvcmtlcnMgZGlyZWN0b3JpZXMuCiAgICAgZGl0dG8oRmls
ZTo6U3BlYy0+Y2F0ZmlsZSgkdWlSb290LCAnUHJvdG9jb2wnLCAnTGVnYWN5JyksIEZpbGU6OlNw
ZWMtPmNhdGZpbGUoJHByb3RvY29sRGlyLCAnTGVnYWN5JykpOworICAgIGRpdHRvKEZpbGU6OlNw
ZWMtPmNhdGZpbGUoJHVpUm9vdCwgJ1dvcmtlcnMnKSwgJHdvcmtlcnNEaXIpOwogfSBlbHNlIHsK
ICAgICAjIEtlZXAgdGhlIGZpbGVzIHNlcGFyYXRlIGZvciBlbmdpbmVlcmluZyBidWlsZHMuCiAg
ICAgZGl0dG8oJHVpUm9vdCwgJHRhcmdldFJlc291cmNlUGF0aCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKaW5kZXggMjJkY2RlNy4uMzNmNTJmYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1s
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbApAQCAt
MzE1LDEwICszMTUsNiBAQAogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvR3JhZGllbnQuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvSGVhcEFsbG9jYXRpb25zSW5zdHJ1bWVu
dC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9IZWFwQWxsb2NhdGlvbnNU
aW1lbGluZVJlY29yZC5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9IZWFw
U25hcHNob3QuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvSGVhcFNuYXBz
aG90RGlmZi5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9IZWFwU25hcHNo
b3RFZGdlLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0hlYXBTbmFwc2hv
dE5vZGUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvSGVhcFNuYXBzaG90
Um9vdFBhdGguanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvSW5kZXhlZERh
dGFiYXNlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0luZGV4ZWREYXRh
YmFzZU9iamVjdFN0b3JlLmpzIj48L3NjcmlwdD4KQEAgLTM3OSw2ICszNzUsMTIgQEAKICAgICA8
c2NyaXB0IHNyYz0iTW9kZWxzL1R5cGVTZXQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3Jj
PSJNb2RlbHMvV3JhcHBlZFByb21pc2UuanMiPjwvc2NyaXB0PgogCisgICAgPHNjcmlwdCBzcmM9
IlByb3hpZXMvSGVhcFNuYXBzaG90RGlmZlByb3h5LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iUHJveGllcy9IZWFwU25hcHNob3RFZGdlUHJveHkuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSJQcm94aWVzL0hlYXBTbmFwc2hvdE5vZGVQcm94eS5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9IlByb3hpZXMvSGVhcFNuYXBzaG90UHJveHkuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJQcm94aWVzL0hlYXBTbmFwc2hvdFdvcmtlclByb3h5LmpzIj48L3Nj
cmlwdD4KKwogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9WaWV3LmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iVmlld3MvRGlhbG9nLmpzIj48L3NjcmlwdD4KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0hlYXBBbGxvY2F0aW9uc0lu
c3RydW1lbnQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMv
SGVhcEFsbG9jYXRpb25zSW5zdHJ1bWVudC5qcwppbmRleCA0Y2Q0MTc4Li4xNWJkMWViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvSGVhcEFs
bG9jYXRpb25zSW5zdHJ1bWVudC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Nb2RlbHMvSGVhcEFsbG9jYXRpb25zSW5zdHJ1bWVudC5qcwpAQCAtNzQsOSArNzQs
MTEgQEAgV2ViSW5zcGVjdG9yLkhlYXBBbGxvY2F0aW9uc0luc3RydW1lbnQgPSBjbGFzcyBIZWFw
QWxsb2NhdGlvbnNJbnN0cnVtZW50IGV4dGVuZHMKICAgICBfdGFrZUhlYXBTbmFwc2hvdCgpCiAg
ICAgewogICAgICAgICBIZWFwQWdlbnQuc25hcHNob3QoZnVuY3Rpb24oZXJyb3IsIHRpbWVzdGFt
cCwgc25hcHNob3RTdHJpbmdEYXRhKSB7Ci0gICAgICAgICAgICBsZXQgcGF5bG9hZCA9IEpTT04u
cGFyc2Uoc25hcHNob3RTdHJpbmdEYXRhKTsKLSAgICAgICAgICAgIGxldCBzbmFwc2hvdCA9IFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3QuZnJvbVBheWxvYWQocGF5bG9hZCk7Ci0gICAgICAgICAg
ICBXZWJJbnNwZWN0b3IudGltZWxpbmVNYW5hZ2VyLmhlYXBTbmFwc2hvdEFkZGVkKHRpbWVzdGFt
cCwgc25hcHNob3QpOworICAgICAgICAgICAgbGV0IHdvcmtlclByb3h5ID0gV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFdvcmtlclByb3h5LnNpbmdsZXRvbigpOworICAgICAgICAgICAgd29ya2Vy
UHJveHkuY3JlYXRlU25hcHNob3Qoc25hcHNob3RTdHJpbmdEYXRhLCAoe29iamVjdElkLCBzbmFw
c2hvdDogc2VyaWFsaXplZFNuYXBzaG90fSkgPT4geworICAgICAgICAgICAgICAgIGxldCBzbmFw
c2hvdCA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eS5kZXNlcmlhbGl6ZShvYmplY3RJ
ZCwgc2VyaWFsaXplZFNuYXBzaG90KTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IudGlt
ZWxpbmVNYW5hZ2VyLmhlYXBTbmFwc2hvdEFkZGVkKHRpbWVzdGFtcCwgc25hcHNob3QpOworICAg
ICAgICAgICAgfSk7CiAgICAgICAgIH0pOwogICAgIH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvSGVhcEFsbG9jYXRpb25zVGltZWxp
bmVSZWNvcmQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMv
SGVhcEFsbG9jYXRpb25zVGltZWxpbmVSZWNvcmQuanMKaW5kZXggYzY5NjA0NC4uODUzZmUzZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0hl
YXBBbGxvY2F0aW9uc1RpbWVsaW5lUmVjb3JkLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL01vZGVscy9IZWFwQWxsb2NhdGlvbnNUaW1lbGluZVJlY29yZC5qcwpA
QCAtMzAsNyArMzAsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcEFsbG9jYXRpb25zVGltZWxpbmVSZWNv
cmQgPSBjbGFzcyBIZWFwQWxsb2NhdGlvbnNUaW1lbGluZVJlY29yZAogICAgICAgICBzdXBlcihX
ZWJJbnNwZWN0b3IuVGltZWxpbmVSZWNvcmQuVHlwZS5IZWFwQWxsb2NhdGlvbnMsIHRpbWVzdGFt
cCwgdGltZXN0YW1wKTsKIAogICAgICAgICBjb25zb2xlLmFzc2VydCh0eXBlb2YgdGltZXN0YW1w
ID09PSAibnVtYmVyIik7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KGhlYXBTbmFwc2hvdCBpbnN0
YW5jZW9mIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QpOworICAgICAgICBjb25zb2xlLmFzc2Vy
dChoZWFwU25hcHNob3QgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHkp
OwogCiAgICAgICAgIHRoaXMuX3RpbWVzdGFtcCA9IHRpbWVzdGFtcDsKICAgICAgICAgdGhpcy5f
aGVhcFNuYXBzaG90ID0gaGVhcFNuYXBzaG90OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0hlYXBTbmFwc2hvdC5qcyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9IZWFwU25hcHNob3QuanMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMmVkMDcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0hlYXBTbmFwc2hvdC5qcworKysgL2Rldi9u
dWxsCkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdENsYXNzQ2F0ZWdvcnkgPSBjbGFzcyBIZWFwU25hcHNob3RDbGFzc0NhdGVnb3J5Ci17Ci0g
ICAgY29uc3RydWN0b3IoY2xhc3NOYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5jbGFzc05hbWUg
PSBjbGFzc05hbWU7Ci0gICAgICAgIHRoaXMuc2l6ZSA9IDA7Ci0gICAgICAgIHRoaXMuY291bnQg
PSAwOwotICAgICAgICB0aGlzLmludGVybmFsQ291bnQgPSAwOwotICAgIH0KLX07Ci0KLVdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3QgPSBjbGFzcyBIZWFwU25hcHNob3QgZXh0ZW5kcyBXZWJJbnNw
ZWN0b3IuT2JqZWN0Ci17Ci0gICAgY29uc3RydWN0b3Iocm9vdE5vZGUsIG5vZGVzLCBub2RlTWFw
KQotICAgIHsKLSAgICAgICAgc3VwZXIoKTsKLQotICAgICAgICBjb25zb2xlLmFzc2VydCghcm9v
dE5vZGUgfHwgcm9vdE5vZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9k
ZSk7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KG5vZGVzIGluc3RhbmNlb2YgQXJyYXkpOwotCi0g
ICAgICAgIHRoaXMuX3Jvb3ROb2RlID0gcm9vdE5vZGU7Ci0gICAgICAgIHRoaXMuX25vZGVzID0g
bm9kZXM7Ci0gICAgICAgIHRoaXMuX25vZGVNYXAgPSBub2RlTWFwOwotCi0gICAgICAgIHRoaXMu
X2lkZW50aWZpZXIgPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Ll9uZXh0QXZhaWxhYmxlU25h
cHNob3RJZGVudGlmaWVyKys7Ci0gICAgICAgIHRoaXMuX2luc3RhbmNlcyA9IG5vZGVzOwotCi0g
ICAgICAgIGxldCBjYXRlZ29yaWVzID0ge307Ci0gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
bm9kZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGxldCB7Y2xhc3NOYW1lLCBzaXplLCBp
bnRlcm5hbH0gPSBub2Rlc1tpXTsKLQotICAgICAgICAgICAgbGV0IGNhdGVnb3J5ID0gY2F0ZWdv
cmllc1tjbGFzc05hbWVdOwotICAgICAgICAgICAgaWYgKCFjYXRlZ29yeSkKLSAgICAgICAgICAg
ICAgICBjYXRlZ29yeSA9IGNhdGVnb3JpZXNbY2xhc3NOYW1lXSA9IG5ldyBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Q2xhc3NDYXRlZ29yeShjbGFzc05hbWUpOwotCi0gICAgICAgICAgICBjYXRl
Z29yeS5zaXplICs9IHNpemU7Ci0gICAgICAgICAgICBjYXRlZ29yeS5jb3VudCsrOwotICAgICAg
ICAgICAgaWYgKGludGVybmFsKQotICAgICAgICAgICAgICAgIGNhdGVnb3J5LmludGVybmFsQ291
bnQrKzsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9jYXRlZ29yaWVzID0gTWFwLmZyb21PYmpl
Y3QoY2F0ZWdvcmllcyk7Ci0KLSAgICAgICAgdGhpcy5fdG90YWxTaXplID0gMDsKLSAgICAgICAg
dGhpcy5fdG90YWxPYmplY3RDb3VudCA9IDA7Ci0gICAgICAgIGZvciAobGV0IHtjb3VudCwgc2l6
ZX0gb2YgdGhpcy5fY2F0ZWdvcmllcy52YWx1ZXMoKSkgewotICAgICAgICAgICAgdGhpcy5fdG90
YWxTaXplICs9IHNpemU7Ci0gICAgICAgICAgICB0aGlzLl90b3RhbE9iamVjdENvdW50ICs9IGNv
dW50OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gU3RhdGljCi0KLSAgICBzdGF0aWMgZnJv
bVBheWxvYWQocGF5bG9hZCkKLSAgICB7Ci0gICAgICAgIGxldCB7dmVyc2lvbiwgbm9kZXMsIG5v
ZGVDbGFzc05hbWVzLCBlZGdlcywgZWRnZVR5cGVzLCBlZGdlTmFtZXN9ID0gcGF5bG9hZDsKLSAg
ICAgICAgY29uc29sZS5hc3NlcnQodmVyc2lvbiA9PT0gMSwgIk9ubHkga25vdyBob3cgdG8gaGFu
ZGxlIEphdmFTY3JpcHRDb3JlIEhlYXAgU25hcHNob3QgRm9ybWF0IFZlcnNpb24gMSIpOwotICAg
ICAgICBjb25zb2xlLmFzc2VydChlZGdlVHlwZXMuZXZlcnkoKHR5cGUpID0+IHR5cGUgaW4gV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2UuRWRnZVR5cGUpLCAiVW5leHBlY3RlZCBlZGdlIHR5
cGUiLCBlZGdlVHlwZXMpOwotCi0gICAgICAgIGxldCBub2RlTWFwID0gbmV3IE1hcDsKLQotICAg
ICAgICAvLyBUdXJuIG5vZGVzIGludG8gcmVhbCBub2Rlcy4KLSAgICAgICAgbGV0IHByb2Nlc3Nl
ZE5vZGVzID0gW107Ci0gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBub2Rlcy5sZW5n
dGg7IGkgPCBsZW5ndGg7KSB7Ci0gICAgICAgICAgICBsZXQgaWQgPSBub2Rlc1tpKytdOwotICAg
ICAgICAgICAgbGV0IHNpemUgPSBub2Rlc1tpKytdOwotICAgICAgICAgICAgbGV0IGNsYXNzTmFt
ZUluZGV4ID0gbm9kZXNbaSsrXTsKLSAgICAgICAgICAgIGxldCBpbnRlcm5hbCA9IG5vZGVzW2kr
K107Ci0KLSAgICAgICAgICAgIGxldCBub2RlID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3ROb2RlKGlkLCBub2RlQ2xhc3NOYW1lc1tjbGFzc05hbWVJbmRleF0sIHNpemUsICEhaW50ZXJu
YWwpOwotICAgICAgICAgICAgbm9kZU1hcC5zZXQoaWQsIG5vZGUpOwotICAgICAgICAgICAgcHJv
Y2Vzc2VkTm9kZXMucHVzaChub2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFR1cm4gZWRn
ZXMgaW50byByZWFsIGVkZ2VzIGFuZCBzZXQgdGhlbSBvbiB0aGUgbm9kZXMuCi0gICAgICAgIGZv
ciAobGV0IGkgPSAwLCBsZW5ndGggPSBlZGdlcy5sZW5ndGg7IGkgPCBsZW5ndGg7KSB7Ci0gICAg
ICAgICAgICBsZXQgZnJvbUlkZW50aWZpZXIgPSBlZGdlc1tpKytdOwotICAgICAgICAgICAgbGV0
IHRvSWRlbnRpZmllciA9IGVkZ2VzW2krK107Ci0gICAgICAgICAgICBsZXQgZWRnZVR5cGVJbmRl
eCA9IGVkZ2VzW2krK107Ci0gICAgICAgICAgICBsZXQgZGF0YSA9IGVkZ2VzW2krK107Ci0KLSAg
ICAgICAgICAgIGxldCBmcm9tID0gbm9kZU1hcC5nZXQoZnJvbUlkZW50aWZpZXIpOwotICAgICAg
ICAgICAgbGV0IHRvID0gbm9kZU1hcC5nZXQodG9JZGVudGlmaWVyKTsKLSAgICAgICAgICAgIGxl
dCB0eXBlID0gZWRnZVR5cGVzW2VkZ2VUeXBlSW5kZXhdOwotICAgICAgICAgICAgaWYgKHR5cGUg
PT09IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlLkVkZ2VUeXBlLlByb3BlcnR5IHx8IHR5
cGUgPT09IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlLkVkZ2VUeXBlLlZhcmlhYmxlKQot
ICAgICAgICAgICAgICAgIGRhdGEgPSBlZGdlTmFtZXNbZGF0YV07Ci0KLSAgICAgICAgICAgIGxl
dCBlZGdlID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlKGZyb20sIHRvLCB0eXBl
LCBkYXRhKTsKLSAgICAgICAgICAgIGZyb20ub3V0Z29pbmdFZGdlcy5wdXNoKGVkZ2UpOwotICAg
ICAgICAgICAgdG8uaW5jb21pbmdFZGdlcy5wdXNoKGVkZ2UpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gUm9vdCBub2RlLgotICAgICAgICBsZXQgcm9vdE5vZGUgPSBub2RlTWFwLmdldCgwKTsK
LSAgICAgICAgY29uc29sZS5hc3NlcnQocm9vdE5vZGUsICJOb2RlIHdpdGggaWRlbnRpZmllciAw
IGlzIHRoZSBzeW50aGV0aWMgPHJvb3Q+IG5vZGUuIik7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0
KHJvb3ROb2RlLm91dGdvaW5nRWRnZXMubGVuZ3RoID4gMCwgIlRoaXMgaGFkIGJldHRlciBoYXZl
IGNoaWxkcmVuISIpOwotICAgICAgICBjb25zb2xlLmFzc2VydChyb290Tm9kZS5pbmNvbWluZ0Vk
Z2VzLmxlbmd0aCA9PT0gMCwgIlRoaXMgaGFkIGJldHRlciBub3QgaGF2ZSBiYWNrIHJlZmVyZW5j
ZXMhIik7Ci0KLSAgICAgICAgLy8gTWFyayBHQyByb290cy4KLSAgICAgICAgbGV0IHJvb3ROb2Rl
RWRnZXMgPSByb290Tm9kZS5vdXRnb2luZ0VkZ2VzOwotICAgICAgICBmb3IgKGxldCBpID0gMCwg
bGVuZ3RoID0gcm9vdE5vZGVFZGdlcy5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAg
ICAgIHJvb3ROb2RlRWRnZXNbaV0udG8uZ2NSb290ID0gdHJ1ZTsKLQotICAgICAgICByZXR1cm4g
bmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3Qocm9vdE5vZGUsIHByb2Nlc3NlZE5vZGVzLCBu
b2RlTWFwKTsKLSAgICB9Ci0KLSAgICAvLyBQdWJsaWMKLQotICAgIGdldCByb290Tm9kZSgpIHsg
cmV0dXJuIHRoaXMuX3Jvb3ROb2RlOyB9Ci0gICAgZ2V0IG5vZGVzKCkgeyByZXR1cm4gdGhpcy5f
bm9kZXM7IH0KLSAgICBnZXQgaWRlbnRpZmllcigpIHsgcmV0dXJuIHRoaXMuX2lkZW50aWZpZXI7
IH0KLSAgICBnZXQgaW5zdGFuY2VzKCkgeyByZXR1cm4gdGhpcy5faW5zdGFuY2VzOyB9Ci0gICAg
Z2V0IGNhdGVnb3JpZXMoKSB7IHJldHVybiB0aGlzLl9jYXRlZ29yaWVzOyB9Ci0gICAgZ2V0IHRv
dGFsU2l6ZSgpIHsgcmV0dXJuIHRoaXMuX3RvdGFsU2l6ZTsgfQotICAgIGdldCB0b3RhbE9iamVj
dENvdW50KCkgeyByZXR1cm4gdGhpcy5fdG90YWxPYmplY3RDb3VudDsgfQotCi0gICAgaW5zdGFu
Y2VzV2l0aENsYXNzTmFtZShjbGFzc05hbWUpCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0cyA9
IFtdOwotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2luc3RhbmNlcy5sZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgbGV0IGNlbGwgPSB0aGlzLl9pbnN0YW5jZXNbaV07Ci0gICAg
ICAgICAgICBpZiAoY2VsbC5jbGFzc05hbWUgPT09IGNsYXNzTmFtZSkKLSAgICAgICAgICAgICAg
ICByZXN1bHRzLnB1c2goY2VsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7
Ci0gICAgfQotCi0gICAgbm9kZVdpdGhPYmplY3RJZGVudGlmaWVyKGlkKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX25vZGVNYXAuZ2V0KGlkKTsKLSAgICB9Ci19OwotCi1XZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90Ll9uZXh0QXZhaWxhYmxlU25hcHNob3RJZGVudGlmaWVyID0gMTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9IZWFw
U25hcHNob3REaWZmLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL0hlYXBTbmFwc2hvdERpZmYuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1
NWIzOGUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TW9kZWxzL0hlYXBTbmFwc2hvdERpZmYuanMKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmYgPSBjbGFzcyBIZWFw
U25hcHNob3REaWZmIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAotewotICAgIGNvbnN0cnVj
dG9yKHNuYXBzaG90MSwgc25hcHNob3QyKQotICAgIHsKLSAgICAgICAgc3VwZXIoKTsKLQotICAg
ICAgICBjb25zb2xlLmFzc2VydChzbmFwc2hvdDEgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90KTsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoc25hcHNob3QyIGluc3RhbmNlb2Yg
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdCk7Ci0KLSAgICAgICAgdGhpcy5fc25hcHNob3QxID0g
c25hcHNob3QxOwotICAgICAgICB0aGlzLl9zbmFwc2hvdDIgPSBzbmFwc2hvdDI7Ci0KLSAgICAg
ICAgbGV0IGtub3duID0gbmV3IE1hcDsKLSAgICAgICAgZm9yIChsZXQgaW5zdGFuY2Ugb2Ygc25h
cHNob3QxLmluc3RhbmNlcykKLSAgICAgICAgICAgIGtub3duLnNldChpbnN0YW5jZS5pZCwgaW5z
dGFuY2UpOwotCi0gICAgICAgIGxldCBhZGRlZCA9IFtdOwotICAgICAgICBmb3IgKGxldCBpbnN0
YW5jZSBvZiBzbmFwc2hvdDIuaW5zdGFuY2VzKSB7Ci0gICAgICAgICAgICBpZiAoa25vd24uaGFz
KGluc3RhbmNlLmlkKSkKLSAgICAgICAgICAgICAgICBrbm93bi5kZWxldGUoaW5zdGFuY2UuaWQp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFkZGVkLnB1c2goaW5zdGFuY2Up
OwotICAgICAgICB9Ci0KLSAgICAgICAgbGV0IHJlbW92ZWQgPSBbLi4ua25vd24udmFsdWVzKCld
OwotCi0gICAgICAgIHRoaXMuX2FkZGVkSW5zdGFuY2VzID0gYWRkZWQ7Ci0gICAgICAgIHRoaXMu
X3JlbW92ZWRJbnN0YW5jZXMgPSByZW1vdmVkOwotICAgIH0KLQotICAgIC8vIFB1YmxpYwotCi0g
ICAgZ2V0IHNuYXBzaG90MSgpIHsgcmV0dXJuIHRoaXMuX3NuYXBzaG90MTsgfQotICAgIGdldCBz
bmFwc2hvdDIoKSB7IHJldHVybiB0aGlzLl9zbmFwc2hvdDI7IH0KLSAgICBnZXQgYWRkZWRJbnN0
YW5jZXMoKSB7IHJldHVybiB0aGlzLl9hZGRlZEluc3RhbmNlczsgfQotICAgIGdldCByZW1vdmVk
SW5zdGFuY2VzKCkgeyByZXR1cm4gdGhpcy5fcmVtb3ZlZEluc3RhbmNlczsgfQotCi0gICAgZ2V0
IHNpemVEaWZmZXJlbmNlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zbmFwc2hvdDIu
dG90YWxTaXplIC0gdGhpcy5fc25hcHNob3QxLnRvdGFsU2l6ZTsKLSAgICB9Ci0KLSAgICBnZXQg
Z3Jvd3RoKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9hZGRlZEluc3RhbmNlcy5yZWR1
Y2UoKHN1bSwgeCkgPT4gc3VtICs9IHguc2l6ZSwgMCk7Ci0gICAgfQotCi0gICAgc25hcHNob3RG
b3JEaWZmKCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIG9ubHkgaW5jbHVkZXMgdGhl
IG5ld2x5IGFkZGVkIGluc3RhbmNlcy4gU2hvdWxkIHdlIGRvIGFueXRoaW5nIHdpdGggdGhlIHJl
bW92ZWQgaW5zdGFuY2VzPwotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3QobnVsbCwgdGhpcy5fYWRkZWRJbnN0YW5jZXMsIHRoaXMuX3NuYXBzaG90Mi5ub2RlTWFw
KTsKLSAgICB9Ci19OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvTW9kZWxzL0hlYXBTbmFwc2hvdE5vZGUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Nb2RlbHMvSGVhcFNuYXBzaG90Tm9kZS5qcwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTljMjBhMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Nb2RlbHMvSGVhcFNuYXBzaG90Tm9kZS5qcworKysgL2Rldi9udWxs
CkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
Tm9kZSA9IGNsYXNzIEhlYXBTbmFwc2hvdE5vZGUKLXsKLSAgICBjb25zdHJ1Y3RvcihpZGVudGlm
aWVyLCBjbGFzc05hbWUsIHNpemUsIGludGVybmFsKQotICAgIHsKLSAgICAgICAgdGhpcy5pZCA9
IGlkZW50aWZpZXI7Ci0gICAgICAgIHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lOwotICAgICAg
ICB0aGlzLnNpemUgPSBzaXplOyAKLSAgICAgICAgdGhpcy5pbnRlcm5hbCA9IGludGVybmFsOwot
ICAgICAgICB0aGlzLmdjUm9vdCA9IGZhbHNlOwotICAgICAgICB0aGlzLm91dGdvaW5nRWRnZXMg
PSBbXTsKLSAgICAgICAgdGhpcy5pbmNvbWluZ0VkZ2VzID0gW107Ci0gICAgfQotCi0gICAgLy8g
UHVibGljCi0KLSAgICBnZXQgc2hvcnRlc3RHQ1Jvb3RQYXRoKCkKLSAgICB7Ci0gICAgICAgIC8v
IFJldHVybnMgYW4gYXJyYXkgZnJvbSB0aGlzIG5vZGUgdG8gYSBnY1Jvb3Qgbm9kZS4KLSAgICAg
ICAgLy8gRS5nLiBbTm9kZSwgRWRnZSwgTm9kZSwgRWRnZSwgTm9kZV0uCi0gICAgICAgIC8vIElu
dGVybmFsIG5vZGVzIGFyZSBhdm9pZGVkLCBzbyBpZiB0aGUgcGF0aCBpcyBlbXB0eSB0aGlzCi0g
ICAgICAgIC8vIG5vZGUgaXMgZWl0aGVyIGEgZ2NSb290IG9yIG9ubHkgcmVhY2hhYmxlIHZpYSBJ
bnRlcm5hbCBub2Rlcy4KLQotICAgICAgICBpZiAodGhpcy5fc2hvcnRlc3RHQ1Jvb3RQYXRoICE9
PSB1bmRlZmluZWQpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hvcnRlc3RHQ1Jvb3RQYXRo
OwotCi0gICAgICAgIGxldCBwYXRocyA9IHRoaXMuX2djUm9vdFBhdGhzKCk7Ci0gICAgICAgIHBh
dGhzLnNvcnQoKGEsIGIpID0+IGEubGVuZ3RoIC0gYi5sZW5ndGgpOwotICAgICAgICB0aGlzLl9z
aG9ydGVzdEdDUm9vdFBhdGggPSBwYXRoc1swXSB8fCBudWxsOwotCi0gICAgICAgIHJldHVybiB0
aGlzLl9zaG9ydGVzdEdDUm9vdFBhdGg7Ci0gICAgfQotCi0gICAgLy8gUHJpdmF0ZQotCi0gICAg
X2djUm9vdFBhdGhzKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmdjUm9vdCkKLSAgICAgICAg
ICAgIHJldHVybiBbXTsKLQotICAgICAgICBsZXQgcGF0aHMgPSBbXTsKLSAgICAgICAgbGV0IGN1
cnJlbnRQYXRoID0gW107Ci0gICAgICAgIGxldCB2aXNpdGVkU2V0ID0gbmV3IFNldDsKLQotICAg
ICAgICBmdW5jdGlvbiB2aXNpdE5vZGUobm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUuZ2NS
b290KSB7Ci0gICAgICAgICAgICAgICAgbGV0IGZ1bGxQYXRoID0gY3VycmVudFBhdGguc2xpY2Uo
KTsKLSAgICAgICAgICAgICAgICBmdWxsUGF0aC5wdXNoKG5vZGUpOwotICAgICAgICAgICAgICAg
IHBhdGhzLnB1c2goZnVsbFBhdGgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKHZpc2l0ZWRTZXQuaGFzKG5vZGUpKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHZpc2l0ZWRTZXQuYWRkKG5vZGUpOwotCi0gICAg
ICAgICAgICBjdXJyZW50UGF0aC5wdXNoKG5vZGUpOwotICAgICAgICAgICAgZm9yIChsZXQgcGFy
ZW50RWRnZSBvZiBub2RlLmluY29taW5nRWRnZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAocGFy
ZW50RWRnZS5mcm9tLmludGVybmFsKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBjdXJyZW50UGF0aC5wdXNoKHBhcmVudEVkZ2UpOwotICAgICAgICAgICAg
ICAgIHZpc2l0Tm9kZShwYXJlbnRFZGdlLmZyb20pOwotICAgICAgICAgICAgICAgIGN1cnJlbnRQ
YXRoLnBvcCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VycmVudFBhdGgucG9wKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2aXNpdE5vZGUodGhpcyk7Ci0KLSAgICAgICAgcmV0dXJu
IHBhdGhzOwotICAgIH0KLX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Nb2RlbHMvSGVhcFNuYXBzaG90Um9vdFBhdGguanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvSGVhcFNuYXBzaG90Um9vdFBhdGguanMKaW5k
ZXggNDAzZDJkZC4uNThkMmY0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTW9kZWxzL0hlYXBTbmFwc2hvdFJvb3RQYXRoLmpzCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9IZWFwU25hcHNob3RSb290UGF0aC5q
cwpAQCAtMjksNyArMjksNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Um9vdFBhdGggPSBj
bGFzcyBIZWFwU25hcHNob3RSb290UGF0aCBleHRlbmRzIFdlYkluc3BlYwogICAgIHsKICAgICAg
ICAgc3VwZXIoKTsKIAotICAgICAgICBjb25zb2xlLmFzc2VydCghbm9kZSB8fCBub2RlIGluc3Rh
bmNlb2YgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUpOworICAgICAgICBjb25zb2xlLmFz
c2VydCghbm9kZSB8fCBub2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5v
ZGVQcm94eSk7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFwYXRoQ29tcG9uZW50IHx8IHR5cGVv
ZiBwYXRoQ29tcG9uZW50ID09PSAic3RyaW5nIik7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFw
YXJlbnQgfHwgcGFyZW50IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJvb3RQ
YXRoKTsKIApAQCAtMTM2LDE2ICsxMzYsMTYgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJv
b3RQYXRoID0gY2xhc3MgSGVhcFNuYXBzaG90Um9vdFBhdGggZXh0ZW5kcyBXZWJJbnNwZWMKIAog
ICAgIGFwcGVuZEVkZ2UoZWRnZSkKICAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KGVkZ2Ug
aW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZSk7CisgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KGVkZ2UgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVBy
b3h5KTsKIAogICAgICAgICBzd2l0Y2ggKGVkZ2UudHlwZSkgewotICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RFZGdlLkVkZ2VUeXBlLkludGVybmFsOgorICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlUHJveHkuRWRnZVR5cGUuSW50ZXJuYWw6CiAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmRJbnRlcm5hbChlZGdlLnRvKTsKLSAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZS5FZGdlVHlwZS5JbmRleDoKKyAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVByb3h5LkVkZ2VUeXBlLkluZGV4
OgogICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwZW5kQXJyYXlJbmRleChlZGdlLnRvLCBlZGdl
LmRhdGEpOwotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlLkVkZ2VU
eXBlLlByb3BlcnR5OgorICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdl
UHJveHkuRWRnZVR5cGUuUHJvcGVydHk6CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmRQ
cm9wZXJ0eU5hbWUoZWRnZS50bywgZWRnZS5kYXRhKTsKLSAgICAgICAgY2FzZSBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90RWRnZS5FZGdlVHlwZS5WYXJpYWJsZToKKyAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVByb3h5LkVkZ2VUeXBlLlZhcmlhYmxlOgogICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuYXBwZW5kVmFyaWFibGVOYW1lKGVkZ2UudG8sIGVkZ2UuZGF0YSk7
CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvUHJvdG9jb2wvSGVhcE9ic2VydmVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvUHJvdG9jb2wvSGVhcE9ic2VydmVyLmpzCmluZGV4IDJmYTE2MDguLjNmZDQx
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3Rv
Y29sL0hlYXBPYnNlcnZlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Qcm90b2NvbC9IZWFwT2JzZXJ2ZXIuanMKQEAgLTMyLDE3ICszMiwyMSBAQCBXZWJJbnNw
ZWN0b3IuSGVhcE9ic2VydmVyID0gY2xhc3MgSGVhcE9ic2VydmVyCiAgICAgICAgIFdlYkluc3Bl
Y3Rvci5oZWFwTWFuYWdlci5nYXJiYWdlQ29sbGVjdGVkKGNvbGxlY3Rpb24pOwogICAgIH0KIAot
ICAgIHRyYWNraW5nU3RhcnQodGltZXN0YW1wLCBzbmFwc2hvdERhdGEpCisgICAgdHJhY2tpbmdT
dGFydCh0aW1lc3RhbXAsIHNuYXBzaG90U3RyaW5nRGF0YSkKICAgICB7Ci0gICAgICAgIGxldCBw
YXlsb2FkID0gSlNPTi5wYXJzZShzbmFwc2hvdERhdGEpOwotICAgICAgICBsZXQgc25hcHNob3Qg
PSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LmZyb21QYXlsb2FkKHBheWxvYWQpOwotICAgICAg
ICBXZWJJbnNwZWN0b3IudGltZWxpbmVNYW5hZ2VyLmhlYXBUcmFja2luZ1N0YXJ0ZWQodGltZXN0
YW1wLCBzbmFwc2hvdCk7CisgICAgICAgIGxldCB3b3JrZXJQcm94eSA9IFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RXb3JrZXJQcm94eS5zaW5nbGV0b24oKTsKKyAgICAgICAgd29ya2VyUHJveHku
Y3JlYXRlU25hcHNob3Qoc25hcHNob3RTdHJpbmdEYXRhLCAoe29iamVjdElkLCBzbmFwc2hvdDog
c2VyaWFsaXplZFNuYXBzaG90fSkgPT4geworICAgICAgICAgICAgbGV0IHNuYXBzaG90ID0gV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5LmRlc2VyaWFsaXplKG9iamVjdElkLCBzZXJpYWxp
emVkU25hcHNob3QpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnRpbWVsaW5lTWFuYWdlci5o
ZWFwVHJhY2tpbmdTdGFydGVkKHRpbWVzdGFtcCwgc25hcHNob3QpOworICAgICAgICB9KTsKICAg
ICB9CiAKLSAgICB0cmFja2luZ0NvbXBsZXRlKHRpbWVzdGFtcCwgc25hcHNob3REYXRhKQorICAg
IHRyYWNraW5nQ29tcGxldGUodGltZXN0YW1wLCBzbmFwc2hvdFN0cmluZ0RhdGEpCiAgICAgewot
ICAgICAgICBsZXQgcGF5bG9hZCA9IEpTT04ucGFyc2Uoc25hcHNob3REYXRhKTsKLSAgICAgICAg
bGV0IHNuYXBzaG90ID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5mcm9tUGF5bG9hZChwYXls
b2FkKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnRpbWVsaW5lTWFuYWdlci5oZWFwVHJhY2tpbmdD
b21wbGV0ZWQodGltZXN0YW1wLCBzbmFwc2hvdCk7CisgICAgICAgIGxldCB3b3JrZXJQcm94eSA9
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RXb3JrZXJQcm94eS5zaW5nbGV0b24oKTsKKyAgICAg
ICAgd29ya2VyUHJveHkuY3JlYXRlU25hcHNob3Qoc25hcHNob3RTdHJpbmdEYXRhLCAoe29iamVj
dElkLCBzbmFwc2hvdDogc2VyaWFsaXplZFNuYXBzaG90fSkgPT4geworICAgICAgICAgICAgbGV0
IHNuYXBzaG90ID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5LmRlc2VyaWFsaXplKG9i
amVjdElkLCBzZXJpYWxpemVkU25hcHNob3QpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnRp
bWVsaW5lTWFuYWdlci5oZWFwVHJhY2tpbmdDb21wbGV0ZWQodGltZXN0YW1wLCBzbmFwc2hvdCk7
CisgICAgICAgIH0pOwogICAgIH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Qcm94aWVzL0hlYXBTbmFwc2hvdERpZmZQcm94eS5qcyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3hpZXMvSGVhcFNuYXBzaG90RGlmZlBy
b3h5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZDNiZTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm94aWVz
L0hlYXBTbmFwc2hvdERpZmZQcm94eS5qcwpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZQcm94eSA9IGNsYXNzIEhlYXBTbmFwc2hvdERp
ZmZQcm94eSBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QKK3sKKyAgICBjb25zdHJ1Y3Rvcihz
bmFwc2hvdERpZmZPYmplY3RJZCwgc25hcHNob3QxLCBzbmFwc2hvdDIsIHRvdGFsU2l6ZSwgdG90
YWxPYmplY3RDb3VudCwgY2F0ZWdvcmllcykKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisKKyAg
ICAgICAgdGhpcy5fcHJveHlPYmplY3RJZCA9IHNuYXBzaG90RGlmZk9iamVjdElkOworCisgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KHNuYXBzaG90MSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RQcm94eSk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNuYXBzaG90MiBpbnN0YW5j
ZW9mIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eSk7CisKKyAgICAgICAgdGhpcy5fc25h
cHNob3QxID0gc25hcHNob3QxOworICAgICAgICB0aGlzLl9zbmFwc2hvdDIgPSBzbmFwc2hvdDI7
CisgICAgICAgIHRoaXMuX3RvdGFsU2l6ZSA9IHRvdGFsU2l6ZTsKKyAgICAgICAgdGhpcy5fdG90
YWxPYmplY3RDb3VudCA9IHRvdGFsT2JqZWN0Q291bnQ7CisgICAgICAgIHRoaXMuX2NhdGVnb3Jp
ZXMgPSBNYXAuZnJvbU9iamVjdChjYXRlZ29yaWVzKTsKKyAgICB9CisKKyAgICAvLyBTdGF0aWMK
KworICAgIHN0YXRpYyBkZXNlcmlhbGl6ZShvYmplY3RJZCwgc2VyaWFsaXplZFNuYXBzaG90RGlm
ZikKKyAgICB7CisgICAgICAgIGxldCB7c25hcHNob3QxOiBzZXJpYWxpemVkU25hcHNob3QxLCBz
bmFwc2hvdDI6IHNlcmlhbGl6ZWRTbmFwc2hvdDIsIHRvdGFsU2l6ZSwgdG90YWxPYmplY3RDb3Vu
dCwgY2F0ZWdvcmllc30gPSBzZXJpYWxpemVkU25hcHNob3REaWZmOworICAgICAgICAvLyBGSVhN
RTogVGhlIG9iamVjdElkIGZvciB0aGVzZSBzbmFwc2hvdHMgaXMgdGhlIHNuYXBzaG90RGlmZidz
IG9iamVjdElkLiBDdXJyZW50bHkgdGhlc2UKKyAgICAgICAgLy8gc25hcHNob3RzIGFyZSBvbmx5
IHVzZWQgZm9yIHN0YXRpYyBkYXRhIHNvIHRoZSBwcm94aW5nIGRvZXNuJ3QgbWF0dGVyLiBIb3dl
dmVyLAorICAgICAgICAvLyBzaG91bGQgd2Ugc2VyaWFsaXplIHRoZSBvYmplY3RJZCB3aXRoIHRo
ZSBzbmFwc2hvdCBzbyB3ZSBoYXZlIHRoZSByaWdodCBvYmplY3RJZD8KKyAgICAgICAgbGV0IHNu
YXBzaG90MSA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eS5kZXNlcmlhbGl6ZShvYmpl
Y3RJZCwgc2VyaWFsaXplZFNuYXBzaG90MSk7CisgICAgICAgIGxldCBzbmFwc2hvdDIgPSBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHkuZGVzZXJpYWxpemUob2JqZWN0SWQsIHNlcmlhbGl6
ZWRTbmFwc2hvdDIpOworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3REaWZmUHJveHkob2JqZWN0SWQsIHNuYXBzaG90MSwgc25hcHNob3QyLCB0b3RhbFNpemUsIHRv
dGFsT2JqZWN0Q291bnQsIGNhdGVnb3JpZXMpOworICAgIH0KKworICAgIC8vIFB1YmxpYworCisg
ICAgZ2V0IHNuYXBzaG90MSgpIHsgcmV0dXJuIHRoaXMuX3NuYXBzaG90MTsgfQorICAgIGdldCBz
bmFwc2hvdDIoKSB7IHJldHVybiB0aGlzLl9zbmFwc2hvdDI7IH0KKyAgICBnZXQgdG90YWxTaXpl
KCkgeyByZXR1cm4gdGhpcy5fdG90YWxTaXplOyB9CisgICAgZ2V0IHRvdGFsT2JqZWN0Q291bnQo
KSB7IHJldHVybiB0aGlzLl90b3RhbE9iamVjdENvdW50OyB9CisgICAgZ2V0IGNhdGVnb3JpZXMo
KSB7IHJldHVybiB0aGlzLl9jYXRlZ29yaWVzOyB9CisKKyAgICBhbGxvY2F0aW9uQnVja2V0Q291
bnRzKGJ1Y2tldFNpemVzLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RXb3JrZXJQcm94eS5zaW5nbGV0b24oKS5jYWxsTWV0aG9kKHRoaXMuX3Byb3h5
T2JqZWN0SWQsICJhbGxvY2F0aW9uQnVja2V0Q291bnRzIiwgYnVja2V0U2l6ZXMsIGNhbGxiYWNr
KTsKKyAgICB9CisKKyAgICBpbnN0YW5jZXNXaXRoQ2xhc3NOYW1lKGNsYXNzTmFtZSwgY2FsbGJh
Y2spCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90V29ya2VyUHJveHku
c2luZ2xldG9uKCkuY2FsbE1ldGhvZCh0aGlzLl9wcm94eU9iamVjdElkLCAiaW5zdGFuY2VzV2l0
aENsYXNzTmFtZSIsIGNsYXNzTmFtZSwgKHNlcmlhbGl6ZWROb2RlcykgPT4geworICAgICAgICAg
ICAgY2FsbGJhY2soc2VyaWFsaXplZE5vZGVzLm1hcChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
Tm9kZVByb3h5LmRlc2VyaWFsaXplLmJpbmQobnVsbCwgdGhpcy5fcHJveHlPYmplY3RJZCkpKTsK
KyAgICAgICAgfSk7CisgICAgfQorCisgICAgbm9kZVdpdGhJZGVudGlmaWVyKG5vZGVJZGVudGlm
aWVyLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RX
b3JrZXJQcm94eS5zaW5nbGV0b24oKS5jYWxsTWV0aG9kKHRoaXMuX3Byb3h5T2JqZWN0SWQsICJu
b2RlV2l0aElkZW50aWZpZXIiLCBub2RlSWRlbnRpZmllciwgKHNlcmlhbGl6ZWROb2RlKSA9PiB7
CisgICAgICAgICAgICBjYWxsYmFjayhXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVByb3h5
LmRlc2VyaWFsaXplKHRoaXMuX3Byb3h5T2JqZWN0SWQsIHNlcmlhbGl6ZWROb2RlKSk7CisgICAg
ICAgIH0pOworICAgIH0KK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Nb2RlbHMvSGVhcFNuYXBzaG90RWRnZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3hpZXMvSGVhcFNuYXBzaG90RWRnZVByb3h5LmpzCnNpbWls
YXJpdHkgaW5kZXggNzIlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01vZGVscy9IZWFwU25hcHNob3RFZGdlLmpzCnJlbmFtZSB0byBTb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm94aWVzL0hlYXBTbmFwc2hvdEVkZ2VQcm94eS5qcwpp
bmRleCAyMjgyZWJjLi42YTY5ZDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Nb2RlbHMvSGVhcFNuYXBzaG90RWRnZS5qcworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm94aWVzL0hlYXBTbmFwc2hvdEVkZ2VQcm94eS5q
cwpAQCAtMjUsMTggKzI1LDMzIEBACiAKIC8vIERpcmVjdGVkIGVkZ2UgYmV0d2VlbiB0d28gSGVh
cFNuYXBzaG90Tm9kZXMgJ2Zyb20nIGFuZCAndG8nLgogCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RWRnZSA9IGNsYXNzIEhlYXBTbmFwc2hvdEVkZ2UKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RFZGdlUHJveHkgPSBjbGFzcyBIZWFwU25hcHNob3RFZGdlUHJveHkKIHsKLSAgICBjb25zdHJ1
Y3Rvcihmcm9tLCB0bywgdHlwZSwgZGF0YSkKKyAgICBjb25zdHJ1Y3RvcihvYmplY3RJZCwgZnJv
bUlkZW50aWZpZXIsIHRvSWRlbnRpZmllciwgdHlwZSwgZGF0YSkKICAgICB7Ci0gICAgICAgIHRo
aXMuZnJvbSA9IGZyb207Ci0gICAgICAgIHRoaXMudG8gPSB0bzsKKyAgICAgICAgdGhpcy5fcHJv
eHlPYmplY3RJZCA9IG9iamVjdElkOworCisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHR5cGUgaW4g
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VQcm94eS5FZGdlVHlwZSk7CisKKyAgICAgICAg
dGhpcy5mcm9tSWRlbnRpZmllciA9IGZyb21JZGVudGlmaWVyOworICAgICAgICB0aGlzLnRvSWRl
bnRpZmllciA9IHRvSWRlbnRpZmllcjsKICAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKICAgICAg
ICAgdGhpcy5kYXRhID0gZGF0YTsKKworICAgICAgICB0aGlzLmZyb20gPSBudWxsOworICAgICAg
ICB0aGlzLnRvID0gbnVsbDsKKyAgICB9CisKKyAgICAvLyBTdGF0aWMKKworICAgIHN0YXRpYyBk
ZXNlcmlhbGl6ZShvYmplY3RJZCwgc2VyaWFsaXplZEVkZ2UpCisgICAgeworICAgICAgICBsZXQg
e2Zyb20sIHRvLCB0eXBlLCBkYXRhfSA9IHNlcmlhbGl6ZWRFZGdlOworICAgICAgICByZXR1cm4g
bmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlUHJveHkob2JqZWN0SWQsIGZyb20sIHRv
LCB0eXBlLCBkYXRhKTsKICAgICB9CiB9OwogCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRn
ZS5FZGdlVHlwZSA9IHsKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlUHJveHkuRWRnZVR5
cGUgPSB7CiAgICAgSW50ZXJuYWw6ICJJbnRlcm5hbCIsICAgICAgIC8vIE5vIGRhdGEuCiAgICAg
UHJvcGVydHk6ICJQcm9wZXJ0eSIsICAgICAgIC8vIGRhdGEgaXMgc3RyaW5nIHByb3BlcnR5IG5h
bWUuCiAgICAgSW5kZXg6ICJJbmRleCIsICAgICAgICAgICAgIC8vIGRhdGEgaXMgbnVtZXJpYyBp
bmRleC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1By
b3hpZXMvSGVhcFNuYXBzaG90Tm9kZVByb3h5LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvUHJveGllcy9IZWFwU25hcHNob3ROb2RlUHJveHkuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwOTdiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3hpZXMvSGVhcFNuYXBzaG90Tm9kZVBy
b3h5LmpzCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90Tm9kZVByb3h5ID0gY2xhc3MgSGVhcFNuYXBzaG90Tm9kZVByb3h5Cit7CisgICAgY29u
c3RydWN0b3Ioc25hcHNob3RPYmplY3RJZCwgaWRlbnRpZmllciwgY2xhc3NOYW1lLCBzaXplLCBy
ZXRhaW5lZFNpemUsIGludGVybmFsLCBnY1Jvb3QpCisgICAgeworICAgICAgICB0aGlzLl9wcm94
eU9iamVjdElkID0gc25hcHNob3RPYmplY3RJZDsKKworICAgICAgICB0aGlzLmlkID0gaWRlbnRp
ZmllcjsKKyAgICAgICAgdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7CisgICAgICAgIHRoaXMu
c2l6ZSA9IHNpemU7CisgICAgICAgIHRoaXMucmV0YWluZWRTaXplID0gcmV0YWluZWRTaXplOwor
ICAgICAgICB0aGlzLmludGVybmFsID0gaW50ZXJuYWw7CisgICAgICAgIHRoaXMuZ2NSb290ID0g
Z2NSb290OworICAgIH0KKworICAgIC8vIFN0YXRpYworCisgICAgc3RhdGljIGRlc2VyaWFsaXpl
KG9iamVjdElkLCBzZXJpYWxpemVkTm9kZSkKKyAgICB7CisgICAgICAgIGxldCB7aWQsIGNsYXNz
TmFtZSwgc2l6ZSwgcmV0YWluZWRTaXplLCBpbnRlcm5hbCwgZ2NSb290fSA9IHNlcmlhbGl6ZWRO
b2RlOworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlUHJv
eHkob2JqZWN0SWQsIGlkLCBjbGFzc05hbWUsIHNpemUsIHJldGFpbmVkU2l6ZSwgaW50ZXJuYWws
IGdjUm9vdCk7CisgICAgfQorCisgICAgLy8gUHJveGllZAorCisgICAgc2hvcnRlc3RHQ1Jvb3RQ
YXRoKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFdv
cmtlclByb3h5LnNpbmdsZXRvbigpLmNhbGxNZXRob2QodGhpcy5fcHJveHlPYmplY3RJZCwgInNo
b3J0ZXN0R0NSb290UGF0aCIsIHRoaXMuaWQsIChzZXJpYWxpemVkUGF0aCkgPT4geworICAgICAg
ICAgICAgbGV0IGlzTm9kZSA9IGZhbHNlOworICAgICAgICAgICAgbGV0IHBhdGggPSBzZXJpYWxp
emVkUGF0aC5tYXAoKGNvbXBvbmVudCkgPT4geworICAgICAgICAgICAgICAgIGlzTm9kZSA9ICFp
c05vZGU7CisgICAgICAgICAgICAgICAgaWYgKGlzTm9kZSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlUHJveHkuZGVzZXJpYWxpemUodGhp
cy5fcHJveHlPYmplY3RJZCwgY29tcG9uZW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VQcm94eS5kZXNlcmlhbGl6ZSh0aGlzLl9wcm94eU9i
amVjdElkLCBjb21wb25lbnQpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGZvciAo
bGV0IGkgPSAxOyBpIDwgcGF0aC5sZW5ndGg7IGkgKz0gMikgeworICAgICAgICAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KHBhdGhbaV0gaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
RWRnZVByb3h5KTsKKyAgICAgICAgICAgICAgICBsZXQgZWRnZSA9IHBhdGhbaV07CisgICAgICAg
ICAgICAgICAgZWRnZS5mcm9tID0gcGF0aFtpIC0gMV07CisgICAgICAgICAgICAgICAgZWRnZS50
byA9IHBhdGhbaSArIDFdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYWxsYmFjayhw
YXRoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgZG9taW5hdGVkTm9kZXMoY2FsbGJhY2sp
CisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90V29ya2VyUHJveHkuc2lu
Z2xldG9uKCkuY2FsbE1ldGhvZCh0aGlzLl9wcm94eU9iamVjdElkLCAiZG9taW5hdGVkTm9kZXMi
LCB0aGlzLmlkLCAoc2VyaWFsaXplZE5vZGVzKSA9PiB7CisgICAgICAgICAgICBjYWxsYmFjayhz
ZXJpYWxpemVkTm9kZXMubWFwKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlUHJveHkuZGVz
ZXJpYWxpemUuYmluZChudWxsLCB0aGlzLl9wcm94eU9iamVjdElkKSkpOworICAgICAgICB9KTsK
KyAgICB9CisKKyAgICByZXRhaW5lZE5vZGVzKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFdvcmtlclByb3h5LnNpbmdsZXRvbigpLmNhbGxNZXRob2Qo
dGhpcy5fcHJveHlPYmplY3RJZCwgInJldGFpbmVkTm9kZXMiLCB0aGlzLmlkLCAoc2VyaWFsaXpl
ZE5vZGVzKSA9PiB7CisgICAgICAgICAgICBjYWxsYmFjayhzZXJpYWxpemVkTm9kZXMubWFwKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlUHJveHkuZGVzZXJpYWxpemUuYmluZChudWxsLCB0
aGlzLl9wcm94eU9iamVjdElkKSkpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXRhaW5l
cnMoY2FsbGJhY2spCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90V29y
a2VyUHJveHkuc2luZ2xldG9uKCkuY2FsbE1ldGhvZCh0aGlzLl9wcm94eU9iamVjdElkLCAicmV0
YWluZXJzIiwgdGhpcy5pZCwgKHNlcmlhbGl6ZWROb2RlcykgPT4geworICAgICAgICAgICAgY2Fs
bGJhY2soc2VyaWFsaXplZE5vZGVzLm1hcChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVBy
b3h5LmRlc2VyaWFsaXplLmJpbmQobnVsbCwgdGhpcy5fcHJveHlPYmplY3RJZCkpKTsKKyAgICAg
ICAgfSk7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1Byb3hpZXMvSGVhcFNuYXBzaG90UHJveHkuanMgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Qcm94aWVzL0hlYXBTbmFwc2hvdFByb3h5LmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZTY2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm94aWVzL0hlYXBTbmFwc2hvdFBy
b3h5LmpzCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90UHJveHkgPSBjbGFzcyBIZWFwU25hcHNob3RQcm94eSBleHRlbmRzIFdlYkluc3BlY3Rv
ci5PYmplY3QKK3sKKyAgICBjb25zdHJ1Y3RvcihzbmFwc2hvdE9iamVjdElkLCBpZGVudGlmaWVy
LCB0b3RhbFNpemUsIHRvdGFsT2JqZWN0Q291bnQsIGNhdGVnb3JpZXMpCisgICAgeworICAgICAg
ICBzdXBlcigpOworCisgICAgICAgIHRoaXMuX3Byb3h5T2JqZWN0SWQgPSBzbmFwc2hvdE9iamVj
dElkOworCisgICAgICAgIHRoaXMuX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOworICAgICAgICB0
aGlzLl90b3RhbFNpemUgPSB0b3RhbFNpemU7CisgICAgICAgIHRoaXMuX3RvdGFsT2JqZWN0Q291
bnQgPSB0b3RhbE9iamVjdENvdW50OworICAgICAgICB0aGlzLl9jYXRlZ29yaWVzID0gTWFwLmZy
b21PYmplY3QoY2F0ZWdvcmllcyk7CisgICAgfQorCisgICAgLy8gU3RhdGljCisKKyAgICBzdGF0
aWMgZGVzZXJpYWxpemUob2JqZWN0SWQsIHNlcmlhbGl6ZWRTbmFwc2hvdCkKKyAgICB7CisgICAg
ICAgIGxldCB7aWRlbnRpZmllciwgdG90YWxTaXplLCB0b3RhbE9iamVjdENvdW50LCBjYXRlZ29y
aWVzfSA9IHNlcmlhbGl6ZWRTbmFwc2hvdDsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90UHJveHkob2JqZWN0SWQsIGlkZW50aWZpZXIsIHRvdGFsU2l6ZSwgdG90
YWxPYmplY3RDb3VudCwgY2F0ZWdvcmllcyk7CisgICAgfQorCisgICAgLy8gUHVibGljCisKKyAg
ICBnZXQgcHJveHlPYmplY3RJZCgpIHsgcmV0dXJuIHRoaXMuX3Byb3h5T2JqZWN0SWQ7IH0KKyAg
ICBnZXQgaWRlbnRpZmllcigpIHsgcmV0dXJuIHRoaXMuX2lkZW50aWZpZXI7IH0KKyAgICBnZXQg
dG90YWxTaXplKCkgeyByZXR1cm4gdGhpcy5fdG90YWxTaXplOyB9CisgICAgZ2V0IHRvdGFsT2Jq
ZWN0Q291bnQoKSB7IHJldHVybiB0aGlzLl90b3RhbE9iamVjdENvdW50OyB9CisgICAgZ2V0IGNh
dGVnb3JpZXMoKSB7IHJldHVybiB0aGlzLl9jYXRlZ29yaWVzOyB9CisKKyAgICBhbGxvY2F0aW9u
QnVja2V0Q291bnRzKGJ1Y2tldFNpemVzLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RXb3JrZXJQcm94eS5zaW5nbGV0b24oKS5jYWxsTWV0aG9kKHRo
aXMuX3Byb3h5T2JqZWN0SWQsICJhbGxvY2F0aW9uQnVja2V0Q291bnRzIiwgYnVja2V0U2l6ZXMs
IGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICBpbnN0YW5jZXNXaXRoQ2xhc3NOYW1lKGNsYXNzTmFt
ZSwgY2FsbGJhY2spCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90V29y
a2VyUHJveHkuc2luZ2xldG9uKCkuY2FsbE1ldGhvZCh0aGlzLl9wcm94eU9iamVjdElkLCAiaW5z
dGFuY2VzV2l0aENsYXNzTmFtZSIsIGNsYXNzTmFtZSwgKHNlcmlhbGl6ZWROb2RlcykgPT4gewor
ICAgICAgICAgICAgY2FsbGJhY2soc2VyaWFsaXplZE5vZGVzLm1hcChXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90Tm9kZVByb3h5LmRlc2VyaWFsaXplLmJpbmQobnVsbCwgdGhpcy5fcHJveHlPYmpl
Y3RJZCkpKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgbm9kZVdpdGhJZGVudGlmaWVyKG5v
ZGVJZGVudGlmaWVyLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RXb3JrZXJQcm94eS5zaW5nbGV0b24oKS5jYWxsTWV0aG9kKHRoaXMuX3Byb3h5T2Jq
ZWN0SWQsICJub2RlV2l0aElkZW50aWZpZXIiLCBub2RlSWRlbnRpZmllciwgKHNlcmlhbGl6ZWRO
b2RlKSA9PiB7CisgICAgICAgICAgICBjYWxsYmFjayhXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
Tm9kZVByb3h5LmRlc2VyaWFsaXplKHRoaXMuX3Byb3h5T2JqZWN0SWQsIHNlcmlhbGl6ZWROb2Rl
KSk7CisgICAgICAgIH0pOworICAgIH0KK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Qcm94aWVzL0hlYXBTbmFwc2hvdFdvcmtlclByb3h5LmpzIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJveGllcy9IZWFwU25hcHNob3RX
b3JrZXJQcm94eS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjMwY2Y2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
UHJveGllcy9IZWFwU25hcHNob3RXb3JrZXJQcm94eS5qcwpAQCAtMCwwICsxLDExNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RXb3JrZXJQcm94eSA9IGNsYXNzIEhl
YXBTbmFwc2hvdFdvcmtlclByb3h5IGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAoreworICAg
IGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisKKyAgICAgICAgdGhpcy5f
aGVhcFNuYXBzaG90V29ya2VyID0gbmV3IFdvcmtlcigiV29ya2Vycy9IZWFwU25hcHNob3QvSGVh
cFNuYXBzaG90V29ya2VyLmpzIik7CisgICAgICAgIHRoaXMuX2hlYXBTbmFwc2hvdFdvcmtlci5h
ZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgdGhpcy5faGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMp
KTsKKworICAgICAgICB0aGlzLl9uZXh0Q2FsbElkID0gMTsKKyAgICAgICAgdGhpcy5fY2FsbGJh
Y2tzID0gbmV3IE1hcDsKKyAgICB9CisKKyAgICAvLyBTdGF0aWMKKworICAgIHN0YXRpYyBzaW5n
bGV0b24oKQorICAgIHsKKyAgICAgICAgaWYgKCFIZWFwU25hcHNob3RXb3JrZXJQcm94eS5pbnN0
YW5jZSkKKyAgICAgICAgICAgIEhlYXBTbmFwc2hvdFdvcmtlclByb3h5Lmluc3RhbmNlID0gbmV3
IEhlYXBTbmFwc2hvdFdvcmtlclByb3h5OworICAgICAgICByZXR1cm4gSGVhcFNuYXBzaG90V29y
a2VyUHJveHkuaW5zdGFuY2U7CisgICAgfQorCisgICAgLy8gQWN0aW9ucworCisgICAgY3JlYXRl
U25hcHNob3Qoc25hcHNob3RTdHJpbmdEYXRhLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHRo
aXMucGVyZm9ybUFjdGlvbigiY3JlYXRlU25hcHNob3QiLCAuLi5hcmd1bWVudHMpOworICAgIH0K
KworICAgIGNyZWF0ZVNuYXBzaG90RGlmZihvYmplY3RJZDEsIG9iamVjdElkMiwgY2FsbGJhY2sp
CisgICAgeworICAgICAgICB0aGlzLnBlcmZvcm1BY3Rpb24oImNyZWF0ZVNuYXBzaG90RGlmZiIs
IC4uLmFyZ3VtZW50cyk7CisgICAgfQorCisgICAgLy8gUHVibGljCisKKyAgICBwZXJmb3JtQWN0
aW9uKGFjdGlvbk5hbWUpCisgICAgeworICAgICAgICBsZXQgY2FsbElkID0gdGhpcy5fbmV4dENh
bGxJZCsrOworICAgICAgICBsZXQgY2FsbGJhY2sgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0
aCAtIDFdOworICAgICAgICBsZXQgYWN0aW9uQXJndW1lbnRzID0gQXJyYXkucHJvdG90eXBlLnNs
aWNlLmNhbGwoYXJndW1lbnRzLCAxLCBhcmd1bWVudHMubGVuZ3RoIC0gMSk7CisKKyAgICAgICAg
Y29uc29sZS5hc3NlcnQodHlwZW9mIGFjdGlvbk5hbWUgPT09ICJzdHJpbmciLCAicGVyZm9ybUFj
dGlvbiBzaG91bGQgYWx3YXlzIGhhdmUgYW4gYWN0aW9uTmFtZSIpOworICAgICAgICBjb25zb2xl
LmFzc2VydCh0eXBlb2YgY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIsICJwZXJmb3JtQWN0aW9uIHNo
b3VsZCBhbHdheXMgaGF2ZSBhIGNhbGxiYWNrIik7CisKKyAgICAgICAgdGhpcy5fY2FsbGJhY2tz
LnNldChjYWxsSWQsIGNhbGxiYWNrKTsKKyAgICAgICAgdGhpcy5fcG9zdE1lc3NhZ2Uoe2NhbGxJ
ZCwgYWN0aW9uTmFtZSwgYWN0aW9uQXJndW1lbnRzfSk7CisgICAgfQorCisgICAgY2FsbE1ldGhv
ZChvYmplY3RJZCwgbWV0aG9kTmFtZSkKKyAgICB7CisgICAgICAgIGxldCBjYWxsSWQgPSB0aGlz
Ll9uZXh0Q2FsbElkKys7CisgICAgICAgIGxldCBjYWxsYmFjayA9IGFyZ3VtZW50c1thcmd1bWVu
dHMubGVuZ3RoIC0gMV07CisgICAgICAgIGxldCBtZXRob2RBcmd1bWVudHMgPSBBcnJheS5wcm90
b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIsIGFyZ3VtZW50cy5sZW5ndGggLSAxKTsKKwor
ICAgICAgICBjb25zb2xlLmFzc2VydCh0eXBlb2Ygb2JqZWN0SWQgPT09ICJudW1iZXIiLCAiY2Fs
bE1ldGhvZCBzaG91bGQgYWx3YXlzIGhhdmUgYW4gb2JqZWN0SWQiKTsKKyAgICAgICAgY29uc29s
ZS5hc3NlcnQodHlwZW9mIG1ldGhvZE5hbWUgPT09ICJzdHJpbmciLCAiY2FsbE1ldGhvZCBzaG91
bGQgYWx3YXlzIGhhdmUgYSBtZXRob2ROYW1lIik7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHR5
cGVvZiBjYWxsYmFjayA9PT0gImZ1bmN0aW9uIiwgImNhbGxNZXRob2Qgc2hvdWxkIGFsd2F5cyBo
YXZlIGEgY2FsbGJhY2siKTsKKworICAgICAgICB0aGlzLl9jYWxsYmFja3Muc2V0KGNhbGxJZCwg
Y2FsbGJhY2spOworICAgICAgICB0aGlzLl9wb3N0TWVzc2FnZSh7Y2FsbElkLCBvYmplY3RJZCwg
bWV0aG9kTmFtZSwgbWV0aG9kQXJndW1lbnRzfSk7CisgICAgfQorCisgICAgLy8gUHJpdmF0ZQor
CisgICAgX3Bvc3RNZXNzYWdlKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2hlYXBTbmFwc2hvdFdv
cmtlci5wb3N0TWVzc2FnZSguLi5hcmd1bWVudHMpOworICAgIH0KKworICAgIF9oYW5kbGVNZXNz
YWdlKGV2ZW50KQorICAgIHsKKyAgICAgICAgbGV0IGRhdGEgPSBldmVudC5kYXRhOworCisgICAg
ICAgIC8vIEV2ZW50LgorICAgICAgICBpZiAoZGF0YS5ldmVudE5hbWUpIHsKKyAgICAgICAgICAg
IHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKGRhdGEuZXZlbnROYW1lLCBkYXRhLmV2ZW50
RGF0YSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBBY3Rp
b24gb3IgTWV0aG9kIFJlc3BvbnNlLgorICAgICAgICBpZiAoZGF0YS5jYWxsSWQpIHsKKyAgICAg
ICAgICAgIGxldCBjYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrcy5nZXQoZGF0YS5jYWxsSWQpOwor
ICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tzLmRlbGV0ZShkYXRhLmNhbGxJZCk7CisgICAgICAg
ICAgICBjYWxsYmFjayhkYXRhLnJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBjb25zb2xlLmVycm9yKCJVbmV4cGVjdGVkIEhlYXBTbmFwc2hvdFdvcmtl
ciBtZXNzYWdlIiwgZGF0YSk7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Rlc3QuaHRtbCBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1Rlc3QuaHRtbAppbmRleCAxMTNiZmJlLi4yMzExNGZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0Lmh0bWwKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdC5odG1sCkBAIC0xMTQsMTAgKzEx
NCw2IEBACiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9HZW9tZXRyeS5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9IZWFwQWxsb2NhdGlvbnNJbnN0cnVtZW50LmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0hlYXBBbGxvY2F0aW9uc1RpbWVsaW5lUmVj
b3JkLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0hlYXBTbmFwc2hvdC5q
cyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9IZWFwU25hcHNob3REaWZmLmpz
Ij48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0hlYXBTbmFwc2hvdEVkZ2UuanMi
Pjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvSGVhcFNuYXBzaG90Tm9kZS5qcyI+
PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9JbmRleGVkRGF0YWJhc2UuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvSW5kZXhlZERhdGFiYXNlT2JqZWN0U3Rv
cmUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvSW5kZXhlZERhdGFiYXNl
T2JqZWN0U3RvcmVJbmRleC5qcyI+PC9zY3JpcHQ+CkBAIC0xNjIsNiArMTU4LDEyIEBACiAgICAg
PHNjcmlwdCBzcmM9Ik1vZGVscy9UaW1lbGluZU1hcmtlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCBzcmM9Ik1vZGVscy9UaW1lbGluZVJlY29yZGluZy5qcyI+PC9zY3JpcHQ+CiAKKyAgICA8
c2NyaXB0IHNyYz0iUHJveGllcy9IZWFwU25hcHNob3REaWZmUHJveHkuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJQcm94aWVzL0hlYXBTbmFwc2hvdEVkZ2VQcm94eS5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9IlByb3hpZXMvSGVhcFNuYXBzaG90Tm9kZVByb3h5LmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUHJveGllcy9IZWFwU25hcHNob3RQcm94eS5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlByb3hpZXMvSGVhcFNuYXBzaG90V29ya2VyUHJv
eHkuanMiPjwvc2NyaXB0PgorCiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0NTU1N0eWxl
TWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0RPTVRy
ZWVNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvRGVi
dWdnZXJNYW5hZ2VyLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnRlbnRWaWV3LmpzIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29udGVudFZpZXcuanMKaW5kZXggNDEzZmE2OC4u
MDRhZTliMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvQ29udGVudFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvQ29udGVudFZpZXcuanMKQEAgLTEzOCw3ICsxMzgsNyBAQCBXZWJJbnNwZWN0
b3IuQ29udGVudFZpZXcgPSBjbGFzcyBDb250ZW50VmlldyBleHRlbmRzIFdlYkluc3BlY3Rvci5W
aWV3CiAgICAgICAgIGlmIChyZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rv
ci5DYWxsaW5nQ29udGV4dFRyZWUpCiAgICAgICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rv
ci5Qcm9maWxlVmlldyhyZXByZXNlbnRlZE9iamVjdCwgZXh0cmFBcmd1bWVudHMpOwogCi0gICAg
ICAgIGlmIChyZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3QpCisgICAgICAgIGlmIChyZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RQcm94eSB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmUHJveHkpCiAgICAgICAgICAgICByZXR1cm4gbmV3
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDbHVzdGVyQ29udGVudFZpZXcocmVwcmVzZW50ZWRP
YmplY3QsIGV4dHJhQXJndW1lbnRzKTsKIAogICAgICAgICBpZiAodHlwZW9mIHJlcHJlc2VudGVk
T2JqZWN0ID09PSAic3RyaW5nIiB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFN0cmlu
ZykKQEAgLTIzNyw3ICsyMzcsNyBAQCBXZWJJbnNwZWN0b3IuQ29udGVudFZpZXcgPSBjbGFzcyBD
b250ZW50VmlldyBleHRlbmRzIFdlYkluc3BlY3Rvci5WaWV3CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgaWYgKHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV2ViSW5zcGVj
dG9yLkNhbGxpbmdDb250ZXh0VHJlZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBpZiAocmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90KQorICAgICAgICBpZiAocmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90UHJveHkgfHwgcmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZlByb3h5KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIGlmICh0eXBlb2YgcmVwcmVzZW50ZWRPYmplY3QgPT09ICJzdHJpbmciIHx8IHJl
cHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9IZWFwQWxsb2NhdGlvbnNUaW1lbGluZVZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9IZWFwQWxsb2NhdGlvbnNUaW1lbGluZVZpZXcuanMKaW5kZXgg
MmRhZmNjYi4uYzM3NzI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvSGVhcEFsbG9jYXRpb25zVGltZWxpbmVWaWV3LmpzCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0hlYXBBbGxvY2F0aW9uc1RpbWVs
aW5lVmlldy5qcwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIFdlYkluc3BlY3Rvci5IZWFwQWxsb2NhdGlv
bnNUaW1lbGluZVZpZXcgPSBjbGFzcyBIZWFwQWxsb2NhdGlvbnNUaW1lbGluZVZpZXcgZXh0CiAg
ICAgICAgIHRoaXMuX3Nob3dpbmdTbmFwc2hvdExpc3QgPSBmYWxzZTsKICAgICAgICAgdGhpcy5f
aGVhcFNuYXBzaG90RGlmZiA9IGhlYXBTbmFwc2hvdERpZmY7CiAKLSAgICAgICAgdGhpcy5fY29u
dGVudFZpZXdDb250YWluZXIuc2hvd0NvbnRlbnRWaWV3Rm9yUmVwcmVzZW50ZWRPYmplY3QoaGVh
cFNuYXBzaG90RGlmZi5zbmFwc2hvdEZvckRpZmYoKSk7CisgICAgICAgIHRoaXMuX2NvbnRlbnRW
aWV3Q29udGFpbmVyLnNob3dDb250ZW50Vmlld0ZvclJlcHJlc2VudGVkT2JqZWN0KGhlYXBTbmFw
c2hvdERpZmYpOwogICAgIH0KIAogICAgIC8vIFByb3RlY3RlZApAQCAtMjkzLDkgKzI5MywxMSBA
QCBXZWJJbnNwZWN0b3IuSGVhcEFsbG9jYXRpb25zVGltZWxpbmVWaWV3ID0gY2xhc3MgSGVhcEFs
bG9jYXRpb25zVGltZWxpbmVWaWV3IGV4dAogICAgIF90YWtlSGVhcFNuYXBzaG90Q2xpY2tlZCgp
CiAgICAgewogICAgICAgICBIZWFwQWdlbnQuc25hcHNob3QoZnVuY3Rpb24oZXJyb3IsIHRpbWVz
dGFtcCwgc25hcHNob3RTdHJpbmdEYXRhKSB7Ci0gICAgICAgICAgICBsZXQgcGF5bG9hZCA9IEpT
T04ucGFyc2Uoc25hcHNob3RTdHJpbmdEYXRhKTsKLSAgICAgICAgICAgIGxldCBzbmFwc2hvdCA9
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QuZnJvbVBheWxvYWQocGF5bG9hZCk7Ci0gICAgICAg
ICAgICBXZWJJbnNwZWN0b3IudGltZWxpbmVNYW5hZ2VyLmhlYXBTbmFwc2hvdEFkZGVkKHRpbWVz
dGFtcCwgc25hcHNob3QpOworICAgICAgICAgICAgbGV0IHdvcmtlclByb3h5ID0gV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdFdvcmtlclByb3h5LnNpbmdsZXRvbigpOworICAgICAgICAgICAgd29y
a2VyUHJveHkuY3JlYXRlU25hcHNob3Qoc25hcHNob3RTdHJpbmdEYXRhLCAoe29iamVjdElkLCBz
bmFwc2hvdDogc2VyaWFsaXplZFNuYXBzaG90fSkgPT4geworICAgICAgICAgICAgICAgIGxldCBz
bmFwc2hvdCA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eS5kZXNlcmlhbGl6ZShvYmpl
Y3RJZCwgc2VyaWFsaXplZFNuYXBzaG90KTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iu
dGltZWxpbmVNYW5hZ2VyLmhlYXBTbmFwc2hvdEFkZGVkKHRpbWVzdGFtcCwgc25hcHNob3QpOwor
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzYzLDggKzM2NSwxMyBA
QCBXZWJJbnNwZWN0b3IuSGVhcEFsbG9jYXRpb25zVGltZWxpbmVWaWV3ID0gY2xhc3MgSGVhcEFs
bG9jYXRpb25zVGltZWxpbmVWaWV3IGV4dAogICAgICAgICB9CiAKICAgICAgICAgLy8gU2VsZWN0
ZWQgQ29tcGFyaXNvbi4KLSAgICAgICAgbGV0IGRpZmYgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdERpZmYodGhpcy5fYmFzZWxpbmVIZWFwU25hcHNob3RUaW1lbGluZVJlY29yZC5oZWFw
U25hcHNob3QsIGhlYXBBbGxvY2F0aW9uc1RpbWVsaW5lUmVjb3JkLmhlYXBTbmFwc2hvdCk7Ci0g
ICAgICAgIHRoaXMuc2hvd0hlYXBTbmFwc2hvdERpZmYoZGlmZik7CisgICAgICAgIGxldCBzbmFw
c2hvdDEgPSB0aGlzLl9iYXNlbGluZUhlYXBTbmFwc2hvdFRpbWVsaW5lUmVjb3JkLmhlYXBTbmFw
c2hvdDsKKyAgICAgICAgbGV0IHNuYXBzaG90MiA9IGhlYXBBbGxvY2F0aW9uc1RpbWVsaW5lUmVj
b3JkLmhlYXBTbmFwc2hvdDsKKyAgICAgICAgbGV0IHdvcmtlclByb3h5ID0gV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFdvcmtlclByb3h5LnNpbmdsZXRvbigpOworICAgICAgICB3b3JrZXJQcm94
eS5jcmVhdGVTbmFwc2hvdERpZmYoc25hcHNob3QxLnByb3h5T2JqZWN0SWQsIHNuYXBzaG90Mi5w
cm94eU9iamVjdElkLCAoe29iamVjdElkLCBzbmFwc2hvdERpZmY6IHNlcmlhbGl6ZWRTbmFwc2hv
dERpZmZ9KSA9PiB7CisgICAgICAgICAgICBsZXQgZGlmZiA9IFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3REaWZmUHJveHkuZGVzZXJpYWxpemUob2JqZWN0SWQsIHNlcmlhbGl6ZWRTbmFwc2hvdERp
ZmYpOworICAgICAgICAgICAgdGhpcy5zaG93SGVhcFNuYXBzaG90RGlmZihkaWZmKTsKKyAgICAg
ICAgfSk7CiAKICAgICAgICAgdGhpcy5fYmFzZWxpbmVEYXRhR3JpZE5vZGUuY2xlYXJCYXNlbGlu
ZSgpOwogICAgICAgICB0aGlzLl9zZWxlY3RpbmdDb21wYXJpc29uSGVhcFNuYXBzaG90cyA9IGZh
bHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvSGVhcFNuYXBzaG90Q2xhc3NEYXRhR3JpZE5vZGUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9IZWFwU25hcHNob3RDbGFzc0RhdGFHcmlkTm9kZS5qcwpp
bmRleCAwYjI3ZGU0Li41NWIzMzZmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvSGVhcFNuYXBzaG90Q2xhc3NEYXRhR3JpZE5vZGUuanMKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvSGVhcFNuYXBzaG90
Q2xhc3NEYXRhR3JpZE5vZGUuanMKQEAgLTk1LDI1ICs5NSwyNSBAQCBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90Q2xhc3NEYXRhR3JpZE5vZGUgPSBjbGFzcyBIZWFwU25hcHNob3RDbGFzc0RhdGFH
cmlkTm9kZQogICAgIHsKICAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3B1bGF0
ZSIsIHRoaXMuX3BvcHVsYXRlLCB0aGlzKTsKIAotICAgICAgICBsZXQgaW5zdGFuY2VzID0gdGhp
cy5fdHJlZS5oZWFwU25hcHNob3QuaW5zdGFuY2VzV2l0aENsYXNzTmFtZSh0aGlzLl9kYXRhLmNs
YXNzTmFtZSk7CisgICAgICAgIHRoaXMuX3RyZWUuaGVhcFNuYXBzaG90Lmluc3RhbmNlc1dpdGhD
bGFzc05hbWUodGhpcy5fZGF0YS5jbGFzc05hbWUsIChpbnN0YW5jZXMpID0+IHsKKyAgICAgICAg
ICAgIC8vIEJhdGNoLgorICAgICAgICAgICAgaWYgKGluc3RhbmNlcy5sZW5ndGggPiBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90Q2xhc3NEYXRhR3JpZE5vZGUuQ2hpbGRyZW5CYXRjaExpbWl0KSB7
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlc3BlY3QgdGhlIHRoaXMu
X3RyZWUuaW5jbHVkZUludGVybmFsT2JqZWN0cyBzZXR0aW5nLgorICAgICAgICAgICAgICAgIHRo
aXMuX2luc3RhbmNlcyA9IGluc3RhbmNlczsKKyAgICAgICAgICAgICAgICB0aGlzLl9iYXRjaGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVCYXRjaGVkU29ydCgpOworICAg
ICAgICAgICAgICAgIHRoaXMuX2ZldGNoQmF0Y2goV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENs
YXNzRGF0YUdyaWROb2RlLkNoaWxkcmVuQmF0Y2hMaW1pdCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQogCi0gICAgICAgIC8vIEJhdGNoLgotICAgICAgICBpZiAoaW5z
dGFuY2VzLmxlbmd0aCA+IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDbGFzc0RhdGFHcmlkTm9k
ZS5DaGlsZHJlbkJhdGNoTGltaXQpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCByZXNwZWN0IHRoZSB0aGlzLl90cmVlLmluY2x1ZGVJbnRlcm5hbE9iamVjdHMgc2V0dGluZy4K
LSAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlcyA9IGluc3RhbmNlczsKLSAgICAgICAgICAgIHRo
aXMuX2JhdGNoZWQgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5fdXBkYXRlQmF0Y2hlZFNvcnQo
KTsKLSAgICAgICAgICAgIHRoaXMuX2ZldGNoQmF0Y2goV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dENsYXNzRGF0YUdyaWROb2RlLkNoaWxkcmVuQmF0Y2hMaW1pdCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGZvciAobGV0IGluc3RhbmNlIG9mIGluc3RhbmNl
cykgeworICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5pbnRlcm5hbCAmJiAhdGhpcy5fdHJl
ZS5pbmNsdWRlSW50ZXJuYWxPYmplY3RzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90SW5zdGFuY2VEYXRhR3JpZE5vZGUoaW5zdGFuY2UsIHRoaXMuX3RyZWUpKTsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICBmb3IgKGxldCBpbnN0YW5jZSBvZiBpbnN0YW5jZXMpIHsKLSAg
ICAgICAgICAgIGlmIChpbnN0YW5jZS5pbnRlcm5hbCAmJiAhdGhpcy5fdHJlZS5pbmNsdWRlSW50
ZXJuYWxPYmplY3RzKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdGhp
cy5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEluc3RhbmNlRGF0YUdy
aWROb2RlKGluc3RhbmNlLCB0aGlzLl90cmVlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlz
LnNvcnQoKTsKKyAgICAgICAgICAgIHRoaXMuc29ydCgpOworICAgICAgICB9KTsKICAgICB9CiAK
ICAgICBfZmV0Y2hCYXRjaChiYXRjaFNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9IZWFwU25hcHNob3RDbHVzdGVyQ29udGVudFZpZXcu
anMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9IZWFwU25hcHNo
b3RDbHVzdGVyQ29udGVudFZpZXcuanMKaW5kZXggNTdjMzA3MS4uNTE5MDQ4MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvSGVhcFNuYXBzaG90
Q2x1c3RlckNvbnRlbnRWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL0hlYXBTbmFwc2hvdENsdXN0ZXJDb250ZW50Vmlldy5qcwpAQCAtMjksNyAr
MjksNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Q2x1c3RlckNvbnRlbnRWaWV3ID0gY2xh
c3MgSGVhcFNuYXBzaG90Q2x1c3RlckNvbnRlbnRWaQogICAgIHsKICAgICAgICAgc3VwZXIoaGVh
cFNuYXBzaG90KTsKIAotICAgICAgICBjb25zb2xlLmFzc2VydChoZWFwU25hcHNob3QgaW5zdGFu
Y2VvZiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90KTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQo
aGVhcFNuYXBzaG90IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5IHx8
IGhlYXBTbmFwc2hvdCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmUHJv
eHkpOwogCiAgICAgICAgIHRoaXMuX2hlYXBTbmFwc2hvdCA9IGhlYXBTbmFwc2hvdDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvSGVhcFNu
YXBzaG90SW5zdGFuY2VEYXRhR3JpZE5vZGUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9IZWFwU25hcHNob3RJbnN0YW5jZURhdGFHcmlkTm9kZS5qcwppbmRl
eCBiOTk3NTI4Li4zZjdjODI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9IZWFwU25hcHNob3RJbnN0YW5jZURhdGFHcmlkTm9kZS5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9IZWFwU25hcHNob3RJ
bnN0YW5jZURhdGFHcmlkTm9kZS5qcwpAQCAtMjksNyArMjksNyBAQCBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90SW5zdGFuY2VEYXRhR3JpZE5vZGUgPSBjbGFzcyBIZWFwU25hcHNob3RJbnN0YW5j
ZURhdGFHcgogICAgIHsKICAgICAgICAgc3VwZXIobm9kZSwgZmFsc2UpOwogCi0gICAgICAgIGNv
bnNvbGUuYXNzZXJ0KG5vZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9k
ZSk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KG5vZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Tm9kZVByb3h5KTsKIAogICAgICAgICB0aGlzLl9ub2RlID0gbm9kZTsKICAg
ICAgICAgdGhpcy5fdHJlZSA9IHRyZWU7CkBAIC00NSw0NCArNDUsNDQgQEAgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdEluc3RhbmNlRGF0YUdyaWROb2RlID0gY2xhc3MgSGVhcFNuYXBzaG90SW5z
dGFuY2VEYXRhR3IKICAgICBzdGF0aWMgbG9nSGVhcFNuYXBzaG90Tm9kZShub2RlKQogICAgIHsK
ICAgICAgICAgbGV0IGhlYXBPYmplY3RJZGVudGlmaWVyID0gbm9kZS5pZDsKLQogICAgICAgICBs
ZXQgc3ludGhldGljID0gdHJ1ZTsKICAgICAgICAgbGV0IHRleHQgPSBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIkhlYXAgU25hcHNob3QgT2JqZWN0IChAJWQpIikuZm9ybWF0KGhlYXBPYmplY3RJZGVu
dGlmaWVyKTsKIAotICAgICAgICBsZXQgZ2NSb290UGF0aCA9IG5vZGUuc2hvcnRlc3RHQ1Jvb3RQ
YXRoOwotICAgICAgICBpZiAoZ2NSb290UGF0aCkgewotICAgICAgICAgICAgZ2NSb290UGF0aCA9
IGdjUm9vdFBhdGguc2xpY2UoKS5yZXZlcnNlKCk7Ci0gICAgICAgICAgICBsZXQgd2luZG93SW5k
ZXggPSBnY1Jvb3RQYXRoLmZpbmRJbmRleCgoeCkgPT4gewotICAgICAgICAgICAgICAgIHJldHVy
biB4IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUgJiYgeC5jbGFzc05h
bWUgPT09ICJXaW5kb3ciOwotICAgICAgICAgICAgfSk7CisgICAgICAgIG5vZGUuc2hvcnRlc3RH
Q1Jvb3RQYXRoKChnY1Jvb3RQYXRoKSA9PiB7CisgICAgICAgICAgICBpZiAoZ2NSb290UGF0aC5s
ZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBnY1Jvb3RQYXRoID0gZ2NSb290UGF0aC5zbGljZSgp
LnJldmVyc2UoKTsKKyAgICAgICAgICAgICAgICBsZXQgd2luZG93SW5kZXggPSBnY1Jvb3RQYXRo
LmZpbmRJbmRleCgoeCkgPT4geworICAgICAgICAgICAgICAgICAgICByZXR1cm4geCBpbnN0YW5j
ZW9mIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlUHJveHkgJiYgeC5jbGFzc05hbWUgPT09
ICJXaW5kb3ciOworICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICBsZXQgaGVhcFNu
YXBzaG90Um9vdFBhdGggPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Um9vdFBhdGguZW1wdHlQ
YXRoKCk7Ci0gICAgICAgICAgICBmb3IgKGxldCBpID0gd2luZG93SW5kZXggPT09IC0xID8gMCA6
IHdpbmRvd0luZGV4OyBpIDwgZ2NSb290UGF0aC5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
ICAgIGxldCBjb21wb25lbnQgPSBnY1Jvb3RQYXRoW2ldOwotICAgICAgICAgICAgICAgIGlmIChj
b21wb25lbnQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmNsYXNzTmFtZSA9PT0gIldpbmRvdyIpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBoZWFwU25hcHNob3RSb290UGF0aCA9IGhlYXBTbmFwc2hv
dFJvb3RQYXRoLmFwcGVuZEdsb2JhbFNjb3BlTmFtZShjb21wb25lbnQsICJ3aW5kb3ciKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RFZGdlKQotICAgICAgICAgICAgICAgICAgICBoZWFwU25hcHNob3RSb290
UGF0aCA9IGhlYXBTbmFwc2hvdFJvb3RQYXRoLmFwcGVuZEVkZ2UoY29tcG9uZW50KTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBsZXQgaGVhcFNuYXBzaG90Um9vdFBhdGggPSBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90Um9vdFBhdGguZW1wdHlQYXRoKCk7CisgICAgICAgICAgICAg
ICAgZm9yIChsZXQgaSA9IHdpbmRvd0luZGV4ID09PSAtMSA/IDAgOiB3aW5kb3dJbmRleDsgaSA8
IGdjUm9vdFBhdGgubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXBv
bmVudCA9IGdjUm9vdFBhdGhbaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQg
aW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVByb3h5KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmNsYXNzTmFtZSA9PT0gIldpbmRvdyIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90Um9vdFBhdGggPSBoZWFwU25h
cHNob3RSb290UGF0aC5hcHBlbmRHbG9iYWxTY29wZU5hbWUoY29tcG9uZW50LCAid2luZG93Iik7
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VQcm94eSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGhlYXBTbmFwc2hvdFJvb3RQYXRoID0gaGVhcFNuYXBzaG90Um9vdFBhdGguYXBwZW5kRWRnZShj
b21wb25lbnQpOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFoZWFwU25h
cHNob3RSb290UGF0aC5pc0Z1bGxQYXRoSW1wb3NzaWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAg
c3ludGhldGljID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgdGV4dCA9IGhlYXBTbmFwc2hvdFJv
b3RQYXRoLmZ1bGxQYXRoOworICAgICAgICAgICAgICAgIGlmICghaGVhcFNuYXBzaG90Um9vdFBh
dGguaXNGdWxsUGF0aEltcG9zc2libGUoKSkgeworICAgICAgICAgICAgICAgICAgICBzeW50aGV0
aWMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGhlYXBTbmFwc2hvdFJvb3RQ
YXRoLmZ1bGxQYXRoOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
fQogCi0gICAgICAgIGlmIChub2RlLmNsYXNzTmFtZSA9PT0gInN0cmluZyIpIHsKLSAgICAgICAg
ICAgIEhlYXBBZ2VudC5nZXRQcmV2aWV3KGhlYXBPYmplY3RJZGVudGlmaWVyLCBmdW5jdGlvbihl
cnJvciwgc3RyaW5nLCBmdW5jdGlvbkRldGFpbHMsIG9iamVjdFByZXZpZXdQYXlsb2FkKSB7Ci0g
ICAgICAgICAgICAgICAgbGV0IHJlbW90ZU9iamVjdCA9IGVycm9yID8gV2ViSW5zcGVjdG9yLlJl
bW90ZU9iamVjdC5mcm9tUHJpbWl0aXZlVmFsdWUodW5kZWZpbmVkKSA6IFdlYkluc3BlY3Rvci5S
ZW1vdGVPYmplY3QuZnJvbVByaW1pdGl2ZVZhbHVlKHN0cmluZyk7Ci0gICAgICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLmNvbnNvbGVMb2dWaWV3Q29udHJvbGxlci5hcHBlbmRJbW1lZGlhdGVFeGVj
dXRpb25XaXRoUmVzdWx0KHRleHQsIHJlbW90ZU9iamVjdCwgc3ludGhldGljKTsgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEhl
YXBBZ2VudC5nZXRSZW1vdGVPYmplY3QoaGVhcE9iamVjdElkZW50aWZpZXIsIFdlYkluc3BlY3Rv
ci5SdW50aW1lTWFuYWdlci5Db25zb2xlT2JqZWN0R3JvdXAsIGZ1bmN0aW9uKGVycm9yLCByZW1v
dGVPYmplY3RQYXlsb2FkKSB7Ci0gICAgICAgICAgICAgICAgbGV0IHJlbW90ZU9iamVjdCA9IGVy
cm9yID8gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUHJpbWl0aXZlVmFsdWUodW5kZWZp
bmVkKSA6IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVBheWxvYWQocmVtb3RlT2JqZWN0
UGF5bG9hZCk7Ci0gICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmNvbnNvbGVMb2dWaWV3Q29u
dHJvbGxlci5hcHBlbmRJbW1lZGlhdGVFeGVjdXRpb25XaXRoUmVzdWx0KHRleHQsIHJlbW90ZU9i
amVjdCwgc3ludGhldGljKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9CisgICAgICAgICAg
ICBpZiAobm9kZS5jbGFzc05hbWUgPT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICAgICAgSGVh
cEFnZW50LmdldFByZXZpZXcoaGVhcE9iamVjdElkZW50aWZpZXIsIGZ1bmN0aW9uKGVycm9yLCBz
dHJpbmcsIGZ1bmN0aW9uRGV0YWlscywgb2JqZWN0UHJldmlld1BheWxvYWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbGV0IHJlbW90ZU9iamVjdCA9IGVycm9yID8gV2ViSW5zcGVjdG9yLlJlbW90
ZU9iamVjdC5mcm9tUHJpbWl0aXZlVmFsdWUodW5kZWZpbmVkKSA6IFdlYkluc3BlY3Rvci5SZW1v
dGVPYmplY3QuZnJvbVByaW1pdGl2ZVZhbHVlKHN0cmluZyk7CisgICAgICAgICAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5jb25zb2xlTG9nVmlld0NvbnRyb2xsZXIuYXBwZW5kSW1tZWRpYXRlRXhl
Y3V0aW9uV2l0aFJlc3VsdCh0ZXh0LCByZW1vdGVPYmplY3QsIHN5bnRoZXRpYyk7ICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBIZWFwQWdlbnQuZ2V0UmVtb3RlT2JqZWN0KGhlYXBPYmplY3RJZGVudGlmaWVy
LCBXZWJJbnNwZWN0b3IuUnVudGltZU1hbmFnZXIuQ29uc29sZU9iamVjdEdyb3VwLCBmdW5jdGlv
bihlcnJvciwgcmVtb3RlT2JqZWN0UGF5bG9hZCkgeworICAgICAgICAgICAgICAgICAgICBsZXQg
cmVtb3RlT2JqZWN0ID0gZXJyb3IgPyBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21Qcmlt
aXRpdmVWYWx1ZSh1bmRlZmluZWQpIDogV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5
bG9hZChyZW1vdGVPYmplY3RQYXlsb2FkKTsKKyAgICAgICAgICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLmNvbnNvbGVMb2dWaWV3Q29udHJvbGxlci5hcHBlbmRJbW1lZGlhdGVFeGVjdXRpb25XaXRo
UmVzdWx0KHRleHQsIHJlbW90ZU9iamVjdCwgc3ludGhldGljKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CiAgICAgfQogCiAgICAgLy8gUHJvdGVjdGVk
CkBAIC0yMTEsMTMgKzIxMSwxMyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90SW5zdGFuY2VE
YXRhR3JpZE5vZGUgPSBjbGFzcyBIZWFwU25hcHNob3RJbnN0YW5jZURhdGFHcgogCiAgICAgICAg
ICAgICBwYXRoID0gcGF0aC5zbGljZSgpLnJldmVyc2UoKTsKICAgICAgICAgICAgIGxldCB3aW5k
b3dJbmRleCA9IHBhdGguZmluZEluZGV4KCh4KSA9PiB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHggaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZSAmJiB4LmNsYXNzTmFt
ZSA9PT0gIldpbmRvdyI7CisgICAgICAgICAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVByb3h5ICYmIHguY2xhc3NOYW1lID09PSAiV2luZG93
IjsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBsZXQgZWRnZSA9IG51bGw7CiAgICAg
ICAgICAgICBmb3IgKGxldCBpID0gd2luZG93SW5kZXggPT09IC0xID8gMCA6IHdpbmRvd0luZGV4
OyBpIDwgcGF0aC5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgIGxldCBjb21wb25lbnQg
PSBwYXRoW2ldOwotICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZSkgeworICAgICAgICAgICAgICAgIGlmIChjb21wb25l
bnQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVByb3h5KSB7CiAgICAg
ICAgICAgICAgICAgICAgIGVkZ2UgPSBjb21wb25lbnQ7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTI3MSwzMiArMjcxLDMxIEBAIFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RJbnN0YW5jZURhdGFHcmlkTm9kZSA9IGNsYXNzIEhlYXBTbmFwc2hv
dEluc3RhbmNlRGF0YUdyCiAKICAgICAgICAgZnVuY3Rpb24gc3RyaW5naWZ5RWRnZShlZGdlKSB7
CiAgICAgICAgICAgICBzd2l0Y2goZWRnZS50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RFZGdlLkVkZ2VUeXBlLlByb3BlcnR5OgotICAgICAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZS5FZGdlVHlwZS5WYXJpYWJsZToKKyAg
ICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VQcm94eS5FZGdlVHlw
ZS5Qcm9wZXJ0eToKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVk
Z2VQcm94eS5FZGdlVHlwZS5WYXJpYWJsZToKICAgICAgICAgICAgICAgICBpZiAoL14oPyFbMC05
XSlcdyskLy50ZXN0KGVkZ2UuZGF0YSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlZGdl
LmRhdGE7CiAgICAgICAgICAgICAgICAgcmV0dXJuICJbIiArIGRvdWJsZVF1b3RlZFN0cmluZyhl
ZGdlLmRhdGEpICsgIl0iOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RWRnZS5FZGdlVHlwZS5JbmRleDoKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdEVkZ2VQcm94eS5FZGdlVHlwZS5JbmRleDoKICAgICAgICAgICAgICAgICByZXR1
cm4gIlsiICsgZWRnZS5kYXRhICsgIl0iOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90RWRnZS5FZGdlVHlwZS5JbnRlcm5hbDoKKyAgICAgICAgICAgIGNhc2UgV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VQcm94eS5FZGdlVHlwZS5JbnRlcm5hbDoKICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodGhpcy5fbm9kZS5nY1Jvb3QpIHsKLSAgICAg
ICAgICAgIGxldCB0ZXh0RWxlbWVudCA9IHBvcG92ZXJDb250ZW50RWxlbWVudC5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7Ci0gICAgICAgICAgICB0ZXh0RWxlbWVu
dC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGhpcyBvYmplY3QgaXMgYSBy
b290Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsZXQgcGF0aCA9IHRoaXMuX25v
ZGUuc2hvcnRlc3RHQ1Jvb3RQYXRoOwotICAgICAgICAgICAgaWYgKHBhdGgpCisgICAgICAgIHRo
aXMuX25vZGUuc2hvcnRlc3RHQ1Jvb3RQYXRoKChwYXRoKSA9PiB7CisgICAgICAgICAgICBpZiAo
cGF0aC5sZW5ndGgpCiAgICAgICAgICAgICAgICAgYXBwZW5kUGF0aChwYXRoKTsKLSAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fbm9kZS5nY1Jvb3QpIHsKKyAg
ICAgICAgICAgICAgICBsZXQgdGV4dEVsZW1lbnQgPSBwb3BvdmVyQ29udGVudEVsZW1lbnQuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOworICAgICAgICAgICAgICAg
IHRleHRFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUaGlzIG9i
amVjdCBpcyBhIHJvb3QiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
bGV0IGVtcHR5RWxlbWVudCA9IHBvcG92ZXJDb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7CiAgICAgICAgICAgICAgICAgZW1wdHlFbGVtZW50
LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUaGlzIG9iamVjdCBpcyByZWZl
cmVuY2VkIGJ5IGludGVybmFsIG9iamVjdHMiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIHRoaXMuX3RyZWUucG9wb3Zlci5wcmVzZW50TmV3Q29udGVudFdpdGhGcmFtZShw
b3BvdmVyQ29udGVudEVsZW1lbnQsIHRhcmdldEZyYW1lLnBhZCgyKSwgW1dlYkluc3BlY3Rvci5S
ZWN0RWRnZS5NQVhfWSwgV2ViSW5zcGVjdG9yLlJlY3RFZGdlLk1JTl9ZLCBXZWJJbnNwZWN0b3Iu
UmVjdEVkZ2UuTUFYX1hdKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdGhpcy5fdHJlZS5w
b3BvdmVyLnByZXNlbnROZXdDb250ZW50V2l0aEZyYW1lKHBvcG92ZXJDb250ZW50RWxlbWVudCwg
dGFyZ2V0RnJhbWUucGFkKDIpLCBbV2ViSW5zcGVjdG9yLlJlY3RFZGdlLk1BWF9ZLCBXZWJJbnNw
ZWN0b3IuUmVjdEVkZ2UuTUlOX1ksIFdlYkluc3BlY3Rvci5SZWN0RWRnZS5NQVhfWF0pOworICAg
ICAgICB9KTsKICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvSGVhcFNuYXBzaG90SW5zdGFuY2VzQ29udGVudFZpZXcuanMgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9IZWFwU25hcHNob3RJbnN0
YW5jZXNDb250ZW50Vmlldy5qcwppbmRleCA4YzcwZTU4Li45NzdiOTNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9IZWFwU25hcHNob3RJbnN0
YW5jZXNDb250ZW50Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9IZWFwU25hcHNob3RJbnN0YW5jZXNDb250ZW50Vmlldy5qcwpAQCAtMjcsNyAr
MjcsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90SW5zdGFuY2VzQ29udGVudFZpZXcgPSBj
bGFzcyBIZWFwU25hcHNob3RJbnN0YW5jZXNDb250ZQogewogICAgIGNvbnN0cnVjdG9yKHJlcHJl
c2VudGVkT2JqZWN0LCBleHRyYUFyZ3VtZW50cykKICAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dCk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2Yg
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5IHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3Rh
bmNlb2YgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZQcm94eSk7CiAKICAgICAgICAgc3Vw
ZXIocmVwcmVzZW50ZWRPYmplY3QpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9IZWFwU25hcHNob3RJbnN0YW5jZXNEYXRhR3JpZFRyZWUu
anMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9IZWFwU25hcHNo
b3RJbnN0YW5jZXNEYXRhR3JpZFRyZWUuanMKaW5kZXggNTAxMzRjNS4uMzYxNDUzMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvSGVhcFNuYXBz
aG90SW5zdGFuY2VzRGF0YUdyaWRUcmVlLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1ZpZXdzL0hlYXBTbmFwc2hvdEluc3RhbmNlc0RhdGFHcmlkVHJlZS5qcwpA
QCAtMjksNyArMjksNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90SW5zdGFuY2VzRGF0YUdy
aWRUcmVlID0gY2xhc3MgSGVhcFNuYXBzaG90SW5zdGFuY2VzRGF0YQogICAgIHsKICAgICAgICAg
c3VwZXIoKTsKIAotICAgICAgICBjb25zb2xlLmFzc2VydChoZWFwU25hcHNob3QgaW5zdGFuY2Vv
ZiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90KTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoaGVh
cFNuYXBzaG90IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5IHx8IGhl
YXBTbmFwc2hvdCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmUHJveHkp
OwogCiAgICAgICAgIHRoaXMuX2hlYXBTbmFwc2hvdCA9IGhlYXBTbmFwc2hvdDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvSGVhcFNuYXBz
aG90U3VtbWFyeUNvbnRlbnRWaWV3LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvSGVhcFNuYXBzaG90U3VtbWFyeUNvbnRlbnRWaWV3LmpzCmluZGV4IDBhZTc4
MDIuLjdhMDZlNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL0hlYXBTbmFwc2hvdFN1bW1hcnlDb250ZW50Vmlldy5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9IZWFwU25hcHNob3RTdW1tYXJ5Q29u
dGVudFZpZXcuanMKQEAgLTI3LDcgKzI3LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFN1
bW1hcnlDb250ZW50VmlldyA9IGNsYXNzIEhlYXBTbmFwc2hvdFN1bW1hcnlDb250ZW50VmkKIHsK
ICAgICBjb25zdHJ1Y3RvcihoZWFwU25hcHNob3QsIGV4dHJhQXJndW1lbnRzKQogICAgIHsKLSAg
ICAgICAgY29uc29sZS5hc3NlcnQoaGVhcFNuYXBzaG90IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdCk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGhlYXBTbmFwc2hvdCBpbnN0
YW5jZW9mIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eSB8fCBoZWFwU25hcHNob3QgaW5z
dGFuY2VvZiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZlByb3h5KTsKIAogICAgICAgICBz
dXBlcihoZWFwU25hcHNob3QpOwogCkBAIC0xODcsNDIgKzE4NywzMCBAQCBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90U3VtbWFyeUNvbnRlbnRWaWV3ID0gY2xhc3MgSGVhcFNuYXBzaG90U3VtbWFy
eUNvbnRlbnRWaQogICAgICAgICAgICAgYXBwZW5kRW1wdHlNZXNzYWdlLmNhbGwodGhpcywgdGhp
cy5fY2xhc3NDb3VudEJyZWFrZG93bkxlZ2VuZEVsZW1lbnQsIFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiTm8gb2JqZWN0cyIpKTsKIAogICAgICAgICAvLyBBbGxvY2F0aW9uIHNpemUgZ3JvdXBzLgot
ICAgICAgICBsZXQgc21hbGwgPSAwOwotICAgICAgICBsZXQgbWVkaXVtID0gMDsKLSAgICAgICAg
bGV0IGxhcmdlID0gMDsKLSAgICAgICAgbGV0IHZlcnlMYXJnZSA9IDA7Ci0KICAgICAgICAgY29u
c3Qgc21hbGxBbGxvY2F0aW9uU2l6ZSA9IDQ4OwogICAgICAgICBjb25zdCBtZWRpdW1BbGxvY2F0
aW9uU2l6ZSA9IDEyODsKICAgICAgICAgY29uc3QgbGFyZ2VBbGxvY2F0aW9uU2l6ZSA9IDUxMjsK
IAotICAgICAgICB0aGlzLl9oZWFwU25hcHNob3QuaW5zdGFuY2VzLmZvckVhY2goKHtzaXplfSkg
PT4gewotICAgICAgICAgICAgaWYgKHNpemUgPCBzbWFsbEFsbG9jYXRpb25TaXplKQotICAgICAg
ICAgICAgICAgIHNtYWxsKys7Ci0gICAgICAgICAgICBlbHNlIGlmIChzaXplIDwgbWVkaXVtQWxs
b2NhdGlvblNpemUpCi0gICAgICAgICAgICAgICAgbWVkaXVtKys7Ci0gICAgICAgICAgICBlbHNl
IGlmIChzaXplIDwgbGFyZ2VBbGxvY2F0aW9uU2l6ZSkKLSAgICAgICAgICAgICAgICBsYXJnZSsr
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHZlcnlMYXJnZSsrOworICAgICAg
ICB0aGlzLl9oZWFwU25hcHNob3QuYWxsb2NhdGlvbkJ1Y2tldENvdW50cyhbc21hbGxBbGxvY2F0
aW9uU2l6ZSwgbWVkaXVtQWxsb2NhdGlvblNpemUsIGxhcmdlQWxsb2NhdGlvblNpemVdLCAocmVz
dWx0cykgPT4geworICAgICAgICAgICAgbGV0IFtzbWFsbCwgbWVkaXVtLCBsYXJnZSwgdmVyeUxh
cmdlXSA9IHJlc3VsdHM7CisKKyAgICAgICAgICAgIGlmIChzbWFsbCArIG1lZGl1bSArIGxhcmdl
ICsgdmVyeUxhcmdlKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kTGVnZW5kUm93LmNhbGwodGhp
cywgdGhpcy5fYWxsb2NhdGlvblNpemVCcmVha2Rvd25MZWdlbmRFbGVtZW50LCAic21hbGwiLCBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNtYWxsICVzIikuZm9ybWF0KE51bWJlci5ieXRlc1RvU3Ry
aW5nKHNtYWxsQWxsb2NhdGlvblNpemUpKSwgc21hbGwpOworICAgICAgICAgICAgICAgIGFwcGVu
ZExlZ2VuZFJvdy5jYWxsKHRoaXMsIHRoaXMuX2FsbG9jYXRpb25TaXplQnJlYWtkb3duTGVnZW5k
RWxlbWVudCwgIm1lZGl1bSIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiTWVkaXVtICVzIikuZm9y
bWF0KE51bWJlci5ieXRlc1RvU3RyaW5nKG1lZGl1bUFsbG9jYXRpb25TaXplKSksIG1lZGl1bSk7
CisgICAgICAgICAgICAgICAgYXBwZW5kTGVnZW5kUm93LmNhbGwodGhpcywgdGhpcy5fYWxsb2Nh
dGlvblNpemVCcmVha2Rvd25MZWdlbmRFbGVtZW50LCAibGFyZ2UiLCBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIkxhcmdlICVzIikuZm9ybWF0KE51bWJlci5ieXRlc1RvU3RyaW5nKGxhcmdlQWxsb2Nh
dGlvblNpemUpKSwgbGFyZ2UpOworICAgICAgICAgICAgICAgIGFwcGVuZExlZ2VuZFJvdy5jYWxs
KHRoaXMsIHRoaXMuX2FsbG9jYXRpb25TaXplQnJlYWtkb3duTGVnZW5kRWxlbWVudCwgInZlcnkt
bGFyZ2UiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlZlcnkgTGFyZ2UiKSwgdmVyeUxhcmdlKTsK
KworICAgICAgICAgICAgICAgIHRoaXMuX2FsbG9jYXRpb25TaXplQnJlYWtkb3duQ2lyY2xlQ2hh
cnQuc2VnbWVudHMgPSBbInNtYWxsIiwgIm1lZGl1bSIsICJsYXJnZSIsICJ2ZXJ5LWxhcmdlIl07
CisgICAgICAgICAgICAgICAgdGhpcy5fYWxsb2NhdGlvblNpemVCcmVha2Rvd25DaXJjbGVDaGFy
dC52YWx1ZXMgPSBbc21hbGwsIG1lZGl1bSwgbGFyZ2UsIHZlcnlMYXJnZV07CisgICAgICAgICAg
ICAgICAgdGhpcy5fYWxsb2NhdGlvblNpemVCcmVha2Rvd25DaXJjbGVDaGFydC51cGRhdGVMYXlv
dXQoKTsKKworICAgICAgICAgICAgICAgIGxldCBhdmVyYWdlQWxsb2NhdGlvblNpemVFbGVtZW50
ID0gdGhpcy5fYWxsb2NhdGlvblNpemVCcmVha2Rvd25DaXJjbGVDaGFydC5jZW50ZXJFbGVtZW50
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsKKyAgICAgICAgICAg
ICAgICBhdmVyYWdlQWxsb2NhdGlvblNpemVFbGVtZW50LmNsYXNzTGlzdC5hZGQoImF2ZXJhZ2Ut
YWxsb2NhdGlvbi1zaXplIik7CisgICAgICAgICAgICAgICAgYXZlcmFnZUFsbG9jYXRpb25TaXpl
RWxlbWVudC50ZXh0Q29udGVudCA9IE51bWJlci5ieXRlc1RvU3RyaW5nKHRoaXMuX2hlYXBTbmFw
c2hvdC50b3RhbFNpemUgLyB0aGlzLl9oZWFwU25hcHNob3QudG90YWxPYmplY3RDb3VudCk7Cisg
ICAgICAgICAgICAgICAgYXZlcmFnZUFsbG9jYXRpb25TaXplRWxlbWVudC50aXRsZSA9IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiQXZlcmFnZSBhbGxvY2F0aW9uIHNpemUiKTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIGFwcGVuZEVtcHR5TWVzc2FnZS5jYWxsKHRoaXMsIHRo
aXMuX2FsbG9jYXRpb25TaXplQnJlYWtkb3duTGVnZW5kRWxlbWVudCwgV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJObyBvYmplY3RzIikpOwogICAgICAgICB9KTsKLQotICAgICAgICBpZiAoc21hbGwg
KyBtZWRpdW0gKyBsYXJnZSArIHZlcnlMYXJnZSkgewotICAgICAgICAgICAgYXBwZW5kTGVnZW5k
Um93LmNhbGwodGhpcywgdGhpcy5fYWxsb2NhdGlvblNpemVCcmVha2Rvd25MZWdlbmRFbGVtZW50
LCAic21hbGwiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNtYWxsICVzIikuZm9ybWF0KE51bWJl
ci5ieXRlc1RvU3RyaW5nKHNtYWxsQWxsb2NhdGlvblNpemUpKSwgc21hbGwpOwotICAgICAgICAg
ICAgYXBwZW5kTGVnZW5kUm93LmNhbGwodGhpcywgdGhpcy5fYWxsb2NhdGlvblNpemVCcmVha2Rv
d25MZWdlbmRFbGVtZW50LCAibWVkaXVtIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJNZWRpdW0g
JXMiKS5mb3JtYXQoTnVtYmVyLmJ5dGVzVG9TdHJpbmcobWVkaXVtQWxsb2NhdGlvblNpemUpKSwg
bWVkaXVtKTsKLSAgICAgICAgICAgIGFwcGVuZExlZ2VuZFJvdy5jYWxsKHRoaXMsIHRoaXMuX2Fs
bG9jYXRpb25TaXplQnJlYWtkb3duTGVnZW5kRWxlbWVudCwgImxhcmdlIiwgV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJMYXJnZSAlcyIpLmZvcm1hdChOdW1iZXIuYnl0ZXNUb1N0cmluZyhsYXJnZUFs
bG9jYXRpb25TaXplKSksIGxhcmdlKTsKLSAgICAgICAgICAgIGFwcGVuZExlZ2VuZFJvdy5jYWxs
KHRoaXMsIHRoaXMuX2FsbG9jYXRpb25TaXplQnJlYWtkb3duTGVnZW5kRWxlbWVudCwgInZlcnkt
bGFyZ2UiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlZlcnkgTGFyZ2UiKSwgdmVyeUxhcmdlKTsK
LQotICAgICAgICAgICAgdGhpcy5fYWxsb2NhdGlvblNpemVCcmVha2Rvd25DaXJjbGVDaGFydC5z
ZWdtZW50cyA9IFsic21hbGwiLCAibWVkaXVtIiwgImxhcmdlIiwgInZlcnktbGFyZ2UiXTsKLSAg
ICAgICAgICAgIHRoaXMuX2FsbG9jYXRpb25TaXplQnJlYWtkb3duQ2lyY2xlQ2hhcnQudmFsdWVz
ID0gW3NtYWxsLCBtZWRpdW0sIGxhcmdlLCB2ZXJ5TGFyZ2VdOwotICAgICAgICAgICAgdGhpcy5f
YWxsb2NhdGlvblNpemVCcmVha2Rvd25DaXJjbGVDaGFydC51cGRhdGVMYXlvdXQoKTsKLQotICAg
ICAgICAgICAgbGV0IGF2ZXJhZ2VBbGxvY2F0aW9uU2l6ZUVsZW1lbnQgPSB0aGlzLl9hbGxvY2F0
aW9uU2l6ZUJyZWFrZG93bkNpcmNsZUNoYXJ0LmNlbnRlckVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOwotICAgICAgICAgICAgYXZlcmFnZUFsbG9jYXRp
b25TaXplRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJhdmVyYWdlLWFsbG9jYXRpb24tc2l6ZSIpOwot
ICAgICAgICAgICAgYXZlcmFnZUFsbG9jYXRpb25TaXplRWxlbWVudC50ZXh0Q29udGVudCA9IE51
bWJlci5ieXRlc1RvU3RyaW5nKHRoaXMuX2hlYXBTbmFwc2hvdC50b3RhbFNpemUgLyB0aGlzLl9o
ZWFwU25hcHNob3QudG90YWxPYmplY3RDb3VudCk7Ci0gICAgICAgICAgICBhdmVyYWdlQWxsb2Nh
dGlvblNpemVFbGVtZW50LnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBdmVyYWdlIGFs
bG9jYXRpb24gc2l6ZSIpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGFwcGVuZEVtcHR5
TWVzc2FnZS5jYWxsKHRoaXMsIHRoaXMuX2FsbG9jYXRpb25TaXplQnJlYWtkb3duTGVnZW5kRWxl
bWVudCwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJObyBvYmplY3RzIikpOwogICAgIH0KIAogICAg
IC8vIFByb3RlY3RlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvV29ya2Vycy9IZWFwU25hcHNob3QvSGVhcFNuYXBzaG90LmpzIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvV29ya2Vycy9IZWFwU25hcHNob3QvSGVhcFNuYXBzaG90
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MTVhMmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Xb3JrZXJzL0hl
YXBTbmFwc2hvdC9IZWFwU25hcHNob3QuanMKQEAgLTAsMCArMSw2OTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gbm9kZXMKKy8vIFs8
MDppZD4sIDwxOnNpemU+LCA8MjpjbGFzc05hbWVUYWJsZUluZGV4PiwgPDM6aW50ZXJuYWw+XTsK
K2NvbnN0IG5vZGVGaWVsZENvdW50ID0gNDsKK2NvbnN0IG5vZGVJZE9mZnNldCA9IDA7Citjb25z
dCBub2RlU2l6ZU9mZnNldCA9IDE7Citjb25zdCBub2RlQ2xhc3NOYW1lT2Zmc2V0ID0gMjsKK2Nv
bnN0IG5vZGVJbnRlcm5hbE9mZnNldCA9IDM7CisKKy8vIGVkZ2VzCisvLyBbPDA6ZnJvbUlkPiwg
PDE6dG9JZD4sIDwyOnR5cGVUYWJsZUluZGV4PiwgPDM6ZWRnZURhdGFJbmRleE9yRWRnZU5hbWVJ
bmRleD5dCitjb25zdCBlZGdlRmllbGRDb3VudCA9IDQ7Citjb25zdCBlZGdlRnJvbUlkT2Zmc2V0
ID0gMDsKK2NvbnN0IGVkZ2VUb0lkT2Zmc2V0ID0gMTsKK2NvbnN0IGVkZ2VUeXBlT2Zmc2V0ID0g
MjsKK2NvbnN0IGVkZ2VEYXRhT2Zmc2V0ID0gMzsKKworLy8gT3RoZXIgY29uc3RhbnRzLgorY29u
c3Qgcm9vdE5vZGVJbmRleCA9IDA7Citjb25zdCByb290Tm9kZU9yZGluYWwgPSAwOworY29uc3Qg
cm9vdE5vZGVJZGVudGlmaWVyID0gMDsKKworLy8gVGVybWlub2xvZ3k6CisvLyAgIC0gYG5vZGVJ
bmRleGAgaXMgYW4gaW5kZXggaW50byB0aGUgYG5vZGVzYCBsaXN0LgorLy8gICAtIGBub2RlT3Jk
aW5hbGAgaXMgdGhlIG9yZGVyIG9mIHRoZSBub2RlIGluIHRoZSBgbm9kZXNgIGxpc3QuIChub2Rl
SW5kZXggLyBub2RlRmllbGRDb3VudCkKKy8vICAgLSBgbm9kZUlkZW50aWZpZXJgIGlzIHRoZSBu
b2RlJ3MgaWQgdmFsdWUuIChub2Rlc1tub2RlSW5kZXggKyBub2RlSWRPZmZzZXRdKS4KKy8vICAg
LSBgZWRnZUluZGV4YCBpcyBhbiBpbmRleCBpbnRvIHRoZSBgZWRnZXNgIGxpc3QuCisvLworLy8g
TGlzdHM6CisvLyAgIC0gX25vZGVPcmRpbmFsVG9GaXJzdE91dGdvaW5nRWRnZSAtIGBub2RlT3Jk
aW5hbGAgdG8gYGVkZ2VJbmRleGAgaW4gYGVkZ2VzYC4KKy8vICAgICBJdGVyYXRlIGVkZ2VzIGJ5
IHdhbGtpbmcgYGVkZ2VzYCAoZWRnZUZpZWxkQ291bnQpIGFuZCBjaGVja2luZyBpZiBmcm9tSWRl
bnRpZmllciBpcyBjdXJyZW50LgorLy8gICAtIF9ub2RlT3JkaW5hbFRvRmlyc3RJbmNvbWluZ0Vk
Z2UgLSBgbm9kZU9yZGluYWxgIHRvIGBpbmNvbWluZ0VkZ2VJbmRleGAgaW4gYGluY29taW5nRWRn
ZXNgLgorLy8gICAgIEl0ZXJhdGUgZWRnZXMgYnkgd2Fsa2luZyBgaW5jb21pbmdFZGdlc2AgdW50
aWwgYG5vZGVPcmRpbmFsKzFgJ3MgZmlyc3QgaW5jb21pbmcgZWRnZSBpbmRleC4KKy8vICAgLSBf
bm9kZU9yZGluYWxUb0RvbWluYXRvck5vZGVPcmRpbmFsIC0gYG5vZGVPcmRpbmFsYCB0byBgbm9k
ZU9yZGluYWxgIG9mIGRvbWluYXRvcgorLy8gICAtIF9ub2RlT3JkaW5hbFRvUmV0YWluZWRTaXpl
cyAtIGBub2RlT3JkaW5hbGAgdG8gcmV0YWluIHNpemUgdmFsdWUKKy8vCisvLyBUZW1wb3Jhcnkg
TGlzdHM6CisvLyAgIC0gbm9kZU9yZGluYWxUb1Bvc3RPcmRlckluZGV4IC0gYG5vZGVPcmRpbmFs
YCB0byBhIGBwb3N0T3JkZXJJbmRleGAuCisvLyAgIC0gcG9zdE9yZGVySW5kZXhUb05vZGVPcmRp
bmFsIC0gYHBvc3RPcmRlckluZGV4YCB0byBhIGBub2RlT3JkaW5hbGAuCisKK2xldCBuZXh0U25h
cHNob3RJZGVudGlmaWVyID0gMTsKKworSGVhcFNuYXBzaG90ID0gY2xhc3MgSGVhcFNuYXBzaG90
Cit7CisgICAgY29uc3RydWN0b3Iob2JqZWN0SWQsIHNuYXBzaG90RGF0YVN0cmluZykKKyAgICB7
CisgICAgICAgIHRoaXMuX2lkZW50aWZpZXIgPSBuZXh0U25hcHNob3RJZGVudGlmaWVyKys7Cisg
ICAgICAgIHRoaXMuX29iamVjdElkID0gb2JqZWN0SWQ7CisKKyAgICAgICAgbGV0IGpzb24gPSBK
U09OLnBhcnNlKHNuYXBzaG90RGF0YVN0cmluZyk7CisgICAgICAgIHNuYXBzaG90RGF0YVN0cmlu
ZyA9IG51bGw7CisKKyAgICAgICAgbGV0IHt2ZXJzaW9uLCBub2Rlcywgbm9kZUNsYXNzTmFtZXMs
IGVkZ2VzLCBlZGdlVHlwZXMsIGVkZ2VOYW1lc30gPSBqc29uOworICAgICAgICBjb25zb2xlLmFz
c2VydCh2ZXJzaW9uID09PSAxLCAiRXhwZWN0IEphdmFTY3JpcHRDb3JlIEhlYXAgU25hcHNob3Qg
dmVyc2lvbiAxIik7CisKKyAgICAgICAgdGhpcy5fbm9kZXMgPSBub2RlczsKKyAgICAgICAgdGhp
cy5fbm9kZUNvdW50ID0gbm9kZXMubGVuZ3RoIC8gbm9kZUZpZWxkQ291bnQ7CisKKyAgICAgICAg
dGhpcy5fZWRnZXMgPSBlZGdlczsKKyAgICAgICAgdGhpcy5fZWRnZUNvdW50ID0gZWRnZXMubGVu
Z3RoIC8gZWRnZUZpZWxkQ291bnQ7CisKKyAgICAgICAgdGhpcy5fZWRnZVR5cGVzVGFibGUgPSBl
ZGdlVHlwZXM7CisgICAgICAgIHRoaXMuX2VkZ2VOYW1lc1RhYmxlID0gZWRnZU5hbWVzOworICAg
ICAgICB0aGlzLl9ub2RlQ2xhc3NOYW1lc1RhYmxlID0gbm9kZUNsYXNzTmFtZXM7CisKKyAgICAg
ICAgdGhpcy5fdG90YWxTaXplID0gMDsKKyAgICAgICAgdGhpcy5fbm9kZUlkZW50aWZpZXJUb09y
ZGluYWwgPSBuZXcgTWFwOyAvLyA8bm9kZSBpZGVudGlmaWVyPiA9PiBub2RlT3JkaW5hbAorICAg
ICAgICBmb3IgKGxldCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBub2Rlcy5sZW5ndGg7IG5v
ZGVJbmRleCArPSBub2RlRmllbGRDb3VudCkgeworICAgICAgICAgICAgbGV0IG5vZGVPcmRpbmFs
ID0gbm9kZUluZGV4IC8gbm9kZUZpZWxkQ291bnQ7CisgICAgICAgICAgICB0aGlzLl9ub2RlSWRl
bnRpZmllclRvT3JkaW5hbC5zZXQobm9kZXNbbm9kZUluZGV4ICsgbm9kZUlkT2Zmc2V0XSwgbm9k
ZU9yZGluYWwpOworICAgICAgICAgICAgdGhpcy5fdG90YWxTaXplICs9IG5vZGVzW25vZGVJbmRl
eCArIG5vZGVTaXplT2Zmc2V0XTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBSZXBs
YWNlIHRvSWRlbnRpZmllciBhbmQgZnJvbUlkZW50aWZpZXIgaW4gZWRnZXMgd2l0aCBub2RlSW5k
ZXggdG8gcmVkdWNlIGhhc2ggbG9va3Vwcz8KKworICAgICAgICB0aGlzLl9ub2RlT3JkaW5hbFRv
Rmlyc3RPdXRnb2luZ0VkZ2UgPSBuZXcgVWludDMyQXJyYXkodGhpcy5fbm9kZUNvdW50KTsgLy8g
bm9kZU9yZGluYWwgPT4gZWRnZUluZGV4CisgICAgICAgIHRoaXMuX2J1aWxkT3V0Z29pbmdFZGdl
cygpOworCisgICAgICAgIHRoaXMuX25vZGVPcmRpbmFsVG9GaXJzdEluY29taW5nRWRnZSA9IG5l
dyBVaW50MzJBcnJheSh0aGlzLl9ub2RlQ291bnQgKyAxKTsgLy8gbm9kZU9yZGluYWwgPT4gaW5j
b21pbmdOb2Rlcy9pbmNvbWluZ0VkZ2VzIGluZGV4CisgICAgICAgIHRoaXMuX2luY29taW5nTm9k
ZXMgPSBuZXcgVWludDMyQXJyYXkodGhpcy5fZWRnZUNvdW50KTsgLy8gZnJvbSBub2RlT3JkaW5h
bHMuCisgICAgICAgIHRoaXMuX2luY29taW5nRWRnZXMgPSBuZXcgVWludDMyQXJyYXkodGhpcy5f
ZWRnZUNvdW50KTsgLy8gZWRnZUluZGV4LgorICAgICAgICB0aGlzLl9idWlsZEluY29taW5nRWRn
ZXMoKTsKKworICAgICAgICBsZXQge25vZGVPcmRpbmFsVG9Qb3N0T3JkZXJJbmRleCwgcG9zdE9y
ZGVySW5kZXhUb05vZGVPcmRpbmFsfSA9IHRoaXMuX2J1aWxkUG9zdE9yZGVySW5kZXhlcygpOwor
CisgICAgICAgIHRoaXMuX25vZGVPcmRpbmFsVG9Eb21pbmF0b3JOb2RlT3JkaW5hbCA9IG5ldyBV
aW50MzJBcnJheSh0aGlzLl9ub2RlQ291bnQpOworICAgICAgICB0aGlzLl9ub2RlT3JkaW5hbElz
R0NSb290ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5fbm9kZUNvdW50KTsKKyAgICAgICAgdGhpcy5f
YnVpbGREb21pbmF0b3JJbmRleGVzKG5vZGVPcmRpbmFsVG9Qb3N0T3JkZXJJbmRleCwgcG9zdE9y
ZGVySW5kZXhUb05vZGVPcmRpbmFsKTsKKworICAgICAgICBub2RlT3JkaW5hbFRvUG9zdE9yZGVy
SW5kZXggPSBudWxsOworCisgICAgICAgIHRoaXMuX25vZGVPcmRpbmFsVG9SZXRhaW5lZFNpemVz
ID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuX25vZGVDb3VudCk7CisgICAgICAgIHRoaXMuX2J1aWxk
UmV0YWluZWRTaXplcyhwb3N0T3JkZXJJbmRleFRvTm9kZU9yZGluYWwpOworCisgICAgICAgIHBv
c3RPcmRlckluZGV4VG9Ob2RlT3JkaW5hbCA9IG51bGw7CisKKyAgICAgICAgdGhpcy5fY2F0ZWdv
cmllcyA9IEhlYXBTbmFwc2hvdC5idWlsZENhdGVnb3JpZXModGhpcyk7CisgICAgfQorCisgICAg
Ly8gU3RhdGljCisKKyAgICBzdGF0aWMgYnVpbGRDYXRlZ29yaWVzKHNuYXBzaG90LCBhbGxvd05v
ZGVJZGVudGlmaWVyQ2FsbGJhY2spCisgICAgeworICAgICAgICBsZXQgY2F0ZWdvcmllcyA9IHt9
OworCisgICAgICAgIGxldCBub2RlcyA9IHNuYXBzaG90Ll9ub2RlczsKKyAgICAgICAgbGV0IG5v
ZGVDbGFzc05hbWVzVGFibGUgPSBzbmFwc2hvdC5fbm9kZUNsYXNzTmFtZXNUYWJsZTsKKyAgICAg
ICAgbGV0IG5vZGVPcmRpbmFsVG9SZXRhaW5lZFNpemVzID0gc25hcHNob3QuX25vZGVPcmRpbmFs
VG9SZXRhaW5lZFNpemVzOworCisgICAgICAgIGZvciAobGV0IG5vZGVJbmRleCA9IDAsIG5vZGVP
cmRpbmFsID0gMDsgbm9kZUluZGV4IDwgbm9kZXMubGVuZ3RoOyBub2RlSW5kZXggKz0gbm9kZUZp
ZWxkQ291bnQsIG5vZGVPcmRpbmFsKyspIHsKKyAgICAgICAgICAgIGlmIChhbGxvd05vZGVJZGVu
dGlmaWVyQ2FsbGJhY2sgJiYgIWFsbG93Tm9kZUlkZW50aWZpZXJDYWxsYmFjayhub2Rlc1tub2Rl
SW5kZXggKyBub2RlSWRPZmZzZXRdKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgbGV0IGNsYXNzTmFtZVRhYmxlSW5kZXggPSBub2Rlc1tub2RlSW5kZXggKyBub2Rl
Q2xhc3NOYW1lT2Zmc2V0XTsKKyAgICAgICAgICAgIGxldCBjbGFzc05hbWUgPSBub2RlQ2xhc3NO
YW1lc1RhYmxlW2NsYXNzTmFtZVRhYmxlSW5kZXhdOworICAgICAgICAgICAgbGV0IHNpemUgPSBu
b2Rlc1tub2RlSW5kZXggKyBub2RlU2l6ZU9mZnNldF07CisgICAgICAgICAgICBsZXQgcmV0YWlu
ZWRTaXplID0gbm9kZU9yZGluYWxUb1JldGFpbmVkU2l6ZXNbbm9kZU9yZGluYWxdOworICAgICAg
ICAgICAgbGV0IGludGVybmFsID0gbm9kZXNbbm9kZUluZGV4ICsgbm9kZUludGVybmFsT2Zmc2V0
XSA/IHRydWUgOiBmYWxzZTsKKworICAgICAgICAgICAgbGV0IGNhdGVnb3J5ID0gY2F0ZWdvcmll
c1tjbGFzc05hbWVdOworICAgICAgICAgICAgaWYgKCFjYXRlZ29yeSkKKyAgICAgICAgICAgICAg
ICBjYXRlZ29yeSA9IGNhdGVnb3JpZXNbY2xhc3NOYW1lXSA9IHtjbGFzc05hbWUsIHNpemU6IDAs
IHJldGFpbmVkU2l6ZTogMCwgY291bnQ6IDAsIGludGVybmFsQ291bnQ6IDB9OworCisgICAgICAg
ICAgICBjYXRlZ29yeS5zaXplICs9IHNpemU7CisgICAgICAgICAgICBjYXRlZ29yeS5yZXRhaW5l
ZFNpemUgKz0gcmV0YWluZWRTaXplOworICAgICAgICAgICAgY2F0ZWdvcnkuY291bnQgKz0gMTsK
KyAgICAgICAgICAgIGlmIChpbnRlcm5hbCkKKyAgICAgICAgICAgICAgICBjYXRlZ29yeS5pbnRl
cm5hbENvdW50ICs9IDE7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY2F0ZWdvcmllczsK
KyAgICB9CisKKyAgICBzdGF0aWMgYWxsb2NhdGlvbkJ1Y2tldENvdW50cyhzbmFwc2hvdCwgYnVj
a2V0U2l6ZXMsIGFsbG93Tm9kZUlkZW50aWZpZXJDYWxsYmFjaykKKyAgICB7CisgICAgICAgIGxl
dCBjb3VudHMgPSBuZXcgQXJyYXkoYnVja2V0U2l6ZXMubGVuZ3RoICsgMSk7CisgICAgICAgIGxl
dCByZW1haW5kZXJCdWNrZXQgPSBjb3VudHMubGVuZ3RoIC0gMTsKKyAgICAgICAgY291bnRzLmZp
bGwoMCk7CisKKyAgICAgICAgbGV0IG5vZGVzID0gc25hcHNob3QuX25vZGVzOworCitvdXRlcjog
IGZvciAobGV0IG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IG5vZGVzLmxlbmd0aDsgbm9kZUlu
ZGV4ICs9IG5vZGVGaWVsZENvdW50KSB7CisgICAgICAgICAgICBpZiAoYWxsb3dOb2RlSWRlbnRp
ZmllckNhbGxiYWNrICYmICFhbGxvd05vZGVJZGVudGlmaWVyQ2FsbGJhY2sobm9kZXNbbm9kZUlu
ZGV4ICsgbm9kZUlkT2Zmc2V0XSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIGxldCBzaXplID0gbm9kZXNbbm9kZUluZGV4ICsgbm9kZVNpemVPZmZzZXRdOworICAg
ICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWNrZXRTaXplcy5sZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgICAgIGlmIChzaXplIDwgYnVja2V0U2l6ZXNbaV0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgY291bnRzW2ldKys7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVy
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50c1ty
ZW1haW5kZXJCdWNrZXRdKys7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY291bnRzOwor
ICAgIH0KKworICAgIHN0YXRpYyBpbnN0YW5jZXNXaXRoQ2xhc3NOYW1lKHNuYXBzaG90LCBjbGFz
c05hbWUsIGFsbG93Tm9kZUlkZW50aWZpZXJDYWxsYmFjaykKKyAgICB7CisgICAgICAgIGxldCBp
bnN0YW5jZXMgPSBbXTsKKworICAgICAgICBsZXQgbm9kZXMgPSBzbmFwc2hvdC5fbm9kZXM7Cisg
ICAgICAgIGxldCBub2RlQ2xhc3NOYW1lc1RhYmxlID0gc25hcHNob3QuX25vZGVDbGFzc05hbWVz
VGFibGU7CisgICAgICAgIGZvciAobGV0IG5vZGVJbmRleCA9IDAsIG5vZGVPcmRpbmFsID0gMDsg
bm9kZUluZGV4IDwgbm9kZXMubGVuZ3RoOyBub2RlSW5kZXggKz0gbm9kZUZpZWxkQ291bnQsIG5v
ZGVPcmRpbmFsKyspIHsKKyAgICAgICAgICAgIGlmIChhbGxvd05vZGVJZGVudGlmaWVyQ2FsbGJh
Y2sgJiYgIWFsbG93Tm9kZUlkZW50aWZpZXJDYWxsYmFjayhub2Rlc1tub2RlSW5kZXggKyBub2Rl
SWRPZmZzZXRdKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgbGV0
IGNsYXNzTmFtZVRhYmxlSW5kZXggPSBub2Rlc1tub2RlSW5kZXggKyBub2RlQ2xhc3NOYW1lT2Zm
c2V0XTsKKyAgICAgICAgICAgIGlmIChub2RlQ2xhc3NOYW1lc1RhYmxlW2NsYXNzTmFtZVRhYmxl
SW5kZXhdID09PSBjbGFzc05hbWUpCisgICAgICAgICAgICAgICAgaW5zdGFuY2VzLnB1c2gobm9k
ZUluZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBpbnN0YW5jZXMubWFwKHNuYXBz
aG90LnNlcmlhbGl6ZU5vZGUuYmluZChzbmFwc2hvdCkpOworICAgIH0KKworICAgIC8vIFdvcmtl
ciBNZXRob2RzCisKKyAgICBhbGxvY2F0aW9uQnVja2V0Q291bnRzKGJ1Y2tldFNpemVzKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEhlYXBTbmFwc2hvdC5hbGxvY2F0aW9uQnVja2V0Q291bnRzKHRo
aXMsIGJ1Y2tldFNpemVzKTsKKyAgICB9CisKKyAgICBpbnN0YW5jZXNXaXRoQ2xhc3NOYW1lKGNs
YXNzTmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBIZWFwU25hcHNob3QuaW5zdGFuY2VzV2l0
aENsYXNzTmFtZSh0aGlzLCBjbGFzc05hbWUpOworICAgIH0KKworICAgIG5vZGVXaXRoSWRlbnRp
Zmllcihub2RlSWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIGxldCBub2RlT3JkaW5hbCA9IHRo
aXMuX25vZGVJZGVudGlmaWVyVG9PcmRpbmFsLmdldChub2RlSWRlbnRpZmllcik7CisgICAgICAg
IGxldCBub2RlSW5kZXggPSBub2RlT3JkaW5hbCAqIG5vZGVGaWVsZENvdW50OworICAgICAgICBy
ZXR1cm4gdGhpcy5zZXJpYWxpemVOb2RlKG5vZGVJbmRleCk7CisgICAgfQorCisgICAgc2hvcnRl
c3RHQ1Jvb3RQYXRoKG5vZGVJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgLy8gUmV0dXJucyBh
biBhcnJheSBmcm9tIHRoaXMgbm9kZSB0byBhIGdjUm9vdCBub2RlLgorICAgICAgICAvLyBFLmcu
IFtOb2RlLCBFZGdlLCBOb2RlLCBFZGdlLCBOb2RlXS4KKyAgICAgICAgLy8gSW50ZXJuYWwgbm9k
ZXMgYXJlIGF2b2lkZWQsIHNvIGlmIHRoZSBwYXRoIGlzIGVtcHR5IHRoaXMKKyAgICAgICAgLy8g
bm9kZSBpcyBlaXRoZXIgYSBnY1Jvb3Qgb3Igb25seSByZWFjaGFibGUgdmlhIEludGVybmFsIG5v
ZGVzLgorCisgICAgICAgIGxldCBwYXRocyA9IHRoaXMuX2djUm9vdFBhdGhlcyhub2RlSWRlbnRp
Zmllcik7CisgICAgICAgIGlmICghcGF0aHMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIFtd
OworCisgICAgICAgIHBhdGhzLnNvcnQoKGEsIGIpID0+IGEubGVuZ3RoIC0gYi5sZW5ndGgpOwor
ICAgICAgICBsZXQgc2hvcnRlc3RQYXRoID0gcGF0aHNbMF07CisKKyAgICAgICAgY29uc29sZS5h
c3NlcnQoIm5vZGUiIGluIHNob3J0ZXN0UGF0aFswXSwgIlBhdGggc2hvdWxkIHN0YXJ0IHdpdGgg
YSBub2RlIik7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCJub2RlIiBpbiBzaG9ydGVzdFBhdGhb
c2hvcnRlc3RQYXRoLmxlbmd0aCAtIDFdLCAiUGF0aCBzaG91bGQgZW5kIHdpdGggYSBub2RlIik7
CisKKyAgICAgICAgcmV0dXJuIHNob3J0ZXN0UGF0aC5tYXAoKGNvbXBvbmVudCkgPT4geworICAg
ICAgICAgICAgaWYgKGNvbXBvbmVudC5ub2RlKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LnNlcmlhbGl6ZU5vZGUoY29tcG9uZW50Lm5vZGUpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
c2VyaWFsaXplRWRnZShjb21wb25lbnQuZWRnZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IGRvbWluYXRlZE5vZGVzKG5vZGVJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgbGV0IGRvbWlu
YXRlZE5vZGVzID0gW107CisKKyAgICAgICAgbGV0IHRhcmdldE5vZGVPcmRpbmFsID0gdGhpcy5f
bm9kZUlkZW50aWZpZXJUb09yZGluYWwuZ2V0KG5vZGVJZGVudGlmaWVyKTsKKyAgICAgICAgZm9y
IChsZXQgbm9kZU9yZGluYWwgPSAwOyBub2RlT3JkaW5hbCA8IHRoaXMuX25vZGVDb3VudDsgKytu
b2RlT3JkaW5hbCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX25vZGVPcmRpbmFsVG9Eb21pbmF0
b3JOb2RlT3JkaW5hbFtub2RlT3JkaW5hbF0gPT09IHRhcmdldE5vZGVPcmRpbmFsKQorICAgICAg
ICAgICAgICAgIGRvbWluYXRlZE5vZGVzLnB1c2gobm9kZU9yZGluYWwgKiBub2RlRmllbGRDb3Vu
dCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZG9taW5hdGVkTm9kZXMubWFwKHRoaXMu
c2VyaWFsaXplTm9kZS5iaW5kKHRoaXMpKTsKKyAgICB9CisKKyAgICByZXRhaW5lZE5vZGVzKG5v
ZGVJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgbGV0IHJldGFpbmVkTm9kZXMgPSBbXTsKKwor
ICAgICAgICBsZXQgbm9kZU9yZGluYWwgPSB0aGlzLl9ub2RlSWRlbnRpZmllclRvT3JkaW5hbC5n
ZXQobm9kZUlkZW50aWZpZXIpOworICAgICAgICBsZXQgZWRnZUluZGV4ID0gdGhpcy5fbm9kZU9y
ZGluYWxUb0ZpcnN0T3V0Z29pbmdFZGdlW25vZGVPcmRpbmFsXTsKKyAgICAgICAgZm9yICg7IHRo
aXMuX2VkZ2VzW2VkZ2VJbmRleCArIGVkZ2VGcm9tSWRPZmZzZXRdID09PSBub2RlSWRlbnRpZmll
cjsgZWRnZUluZGV4ICs9IGVkZ2VGaWVsZENvdW50KSB7CisgICAgICAgICAgICBsZXQgdG9Ob2Rl
SWRlbnRpZmllciA9IHRoaXMuX2VkZ2VzW2VkZ2VJbmRleCArIGVkZ2VUb0lkT2Zmc2V0XTsKKyAg
ICAgICAgICAgIGxldCB0b05vZGVPcmRpbmFsID0gdGhpcy5fbm9kZUlkZW50aWZpZXJUb09yZGlu
YWwuZ2V0KHRvTm9kZUlkZW50aWZpZXIpOworICAgICAgICAgICAgbGV0IHRvTm9kZUluZGV4ID0g
dG9Ob2RlT3JkaW5hbCAqIG5vZGVGaWVsZENvdW50OworICAgICAgICAgICAgcmV0YWluZWROb2Rl
cy5wdXNoKHRvTm9kZUluZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXRhaW5l
ZE5vZGVzLm1hcCh0aGlzLnNlcmlhbGl6ZU5vZGUuYmluZCh0aGlzKSk7CisgICAgfQorCisgICAg
cmV0YWluZXJzKG5vZGVJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgbGV0IHJldGFpbmVycyA9
IFtdOworCisgICAgICAgIGxldCBub2RlT3JkaW5hbCA9IHRoaXMuX25vZGVJZGVudGlmaWVyVG9P
cmRpbmFsLmdldChub2RlSWRlbnRpZmllcik7CisgICAgICAgIGxldCBpbmNvbWluZ0VkZ2VJbmRl
eCA9IHRoaXMuX25vZGVPcmRpbmFsVG9GaXJzdEluY29taW5nRWRnZVtub2RlT3JkaW5hbF07Cisg
ICAgICAgIGxldCBpbmNvbWluZ0VkZ2VJbmRleEVuZCA9IHRoaXMuX25vZGVPcmRpbmFsVG9GaXJz
dEluY29taW5nRWRnZVtub2RlT3JkaW5hbCArIDFdOworICAgICAgICBmb3IgKGxldCBlZGdlSW5k
ZXggPSBpbmNvbWluZ0VkZ2VJbmRleDsgZWRnZUluZGV4IDwgaW5jb21pbmdFZGdlSW5kZXhFbmQ7
ICsrZWRnZUluZGV4KSB7CisgICAgICAgICAgICBsZXQgZnJvbU5vZGVPcmRpbmFsID0gdGhpcy5f
aW5jb21pbmdOb2Rlc1tlZGdlSW5kZXhdOworICAgICAgICAgICAgbGV0IGZyb21Ob2RlSW5kZXgg
PSBmcm9tTm9kZU9yZGluYWwgKiBub2RlRmllbGRDb3VudDsKKyAgICAgICAgICAgIHJldGFpbmVy
cy5wdXNoKGZyb21Ob2RlSW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldGFp
bmVycy5tYXAodGhpcy5zZXJpYWxpemVOb2RlLmJpbmQodGhpcykpOworICAgIH0KKworICAgIC8v
IFB1YmxpYworCisgICAgc2VyaWFsaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICBpZGVudGlmaWVyOiB0aGlzLl9pZGVudGlmaWVyLAorICAgICAgICAgICAgdG90YWxT
aXplOiB0aGlzLl90b3RhbFNpemUsCisgICAgICAgICAgICB0b3RhbE9iamVjdENvdW50OiB0aGlz
Ll9ub2RlQ291bnQsCisgICAgICAgICAgICBjYXRlZ29yaWVzOiB0aGlzLl9jYXRlZ29yaWVzLAor
ICAgICAgICB9OworICAgIH0KKworICAgIHNlcmlhbGl6ZU5vZGUobm9kZUluZGV4KQorICAgIHsK
KyAgICAgICAgY29uc29sZS5hc3NlcnQoKG5vZGVJbmRleCAlIG5vZGVGaWVsZENvdW50KSA9PT0g
MCwgIkludmFsaWQgbm9kZUluZGV4IHRvIHNlcmlhbGl6ZSIpOworCisgICAgICAgIGxldCBub2Rl
T3JkaW5hbCA9IG5vZGVJbmRleCAvIG5vZGVGaWVsZENvdW50OworCisgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICBpZDogdGhpcy5fbm9kZXNbbm9kZUluZGV4ICsgbm9kZUlkT2Zmc2V0XSwK
KyAgICAgICAgICAgIGNsYXNzTmFtZTogdGhpcy5fbm9kZUNsYXNzTmFtZXNUYWJsZVt0aGlzLl9u
b2Rlc1tub2RlSW5kZXggKyBub2RlQ2xhc3NOYW1lT2Zmc2V0XV0sCisgICAgICAgICAgICBzaXpl
OiB0aGlzLl9ub2Rlc1tub2RlSW5kZXggKyBub2RlU2l6ZU9mZnNldF0sCisgICAgICAgICAgICBy
ZXRhaW5lZFNpemU6IHRoaXMuX25vZGVPcmRpbmFsVG9SZXRhaW5lZFNpemVzW25vZGVPcmRpbmFs
XSwKKyAgICAgICAgICAgIGludGVybmFsOiB0aGlzLl9ub2Rlc1tub2RlSW5kZXggKyBub2RlSW50
ZXJuYWxPZmZzZXRdID8gdHJ1ZSA6IGZhbHNlLAorICAgICAgICAgICAgZ2NSb290OiB0aGlzLl9u
b2RlT3JkaW5hbElzR0NSb290W25vZGVPcmRpbmFsXSA/IHRydWUgOiBmYWxzZSwKKyAgICAgICAg
fTsKKyAgICB9CisKKyAgICBzZXJpYWxpemVFZGdlKGVkZ2VJbmRleCkKKyAgICB7CisgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KChlZGdlSW5kZXggJSBlZGdlRmllbGRDb3VudCkgPT09IDAsICJJbnZh
bGlkIGVkZ2VJbmRleCB0byBzZXJpYWxpemUiKTsKKworICAgICAgICBsZXQgZWRnZVR5cGUgPSB0
aGlzLl9lZGdlVHlwZXNUYWJsZVt0aGlzLl9lZGdlc1tlZGdlSW5kZXggKyBlZGdlVHlwZU9mZnNl
dF1dOworICAgICAgICBsZXQgZWRnZURhdGEgPSB0aGlzLl9lZGdlc1tlZGdlSW5kZXggKyBlZGdl
RGF0YU9mZnNldF07CisgICAgICAgIHN3aXRjaCAoZWRnZVR5cGUpIHsKKyAgICAgICAgY2FzZSAi
SW50ZXJuYWwiOgorICAgICAgICAgICAgLy8gZWRnZURhdGEgY2FuIGJlIGlnbm9yZWQuCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiUHJvcGVydHkiOgorICAgICAgICBjYXNlICJW
YXJpYWJsZSI6CisgICAgICAgICAgICBlZGdlRGF0YSA9IHRoaXMuX2VkZ2VOYW1lc1RhYmxlW2Vk
Z2VEYXRhXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJJbmRleCI6CisgICAg
ICAgICAgICAvLyBlZGdlRGF0YSBpcyB0aGUgaW5kZXguCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlVuZXhwZWN0ZWQgZWRn
ZSB0eXBlOiAiICsgZWRnZVR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgZnJvbTogdGhpcy5fZWRnZXNbZWRnZUluZGV4
ICsgZWRnZUZyb21JZE9mZnNldF0sCisgICAgICAgICAgICB0bzogdGhpcy5fZWRnZXNbZWRnZUlu
ZGV4ICsgZWRnZVRvSWRPZmZzZXRdLAorICAgICAgICAgICAgdHlwZTogZWRnZVR5cGUsCisgICAg
ICAgICAgICBkYXRhOiBlZGdlRGF0YSwKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICAvLyBQcml2
YXRlCisKKyAgICBfYnVpbGRPdXRnb2luZ0VkZ2VzKCkKKyAgICB7CisgICAgICAgIGxldCBsYXN0
RnJvbUlkZW50aWZpZXIgPSAtMTsKKyAgICAgICAgZm9yIChsZXQgZWRnZUluZGV4ID0gMDsgZWRn
ZUluZGV4IDwgdGhpcy5fZWRnZXMubGVuZ3RoOyBlZGdlSW5kZXggKz0gZWRnZUZpZWxkQ291bnQp
IHsKKyAgICAgICAgICAgIGxldCBmcm9tSWRlbnRpZmllciA9IHRoaXMuX2VkZ2VzW2VkZ2VJbmRl
eCArIGVkZ2VGcm9tSWRPZmZzZXRdOworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQobGFzdEZy
b21JZGVudGlmaWVyIDw9IGZyb21JZGVudGlmaWVyLCAiRWRnZSBsaXN0IHNob3VsZCBiZSBvcmRl
cmVkIGJ5IGZyb20gbm9kZSBpZGVudGlmaWVyIik7CisgICAgICAgICAgICBpZiAoZnJvbUlkZW50
aWZpZXIgIT09IGxhc3RGcm9tSWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgIGxldCBub2Rl
T3JkaW5hbCA9IHRoaXMuX25vZGVJZGVudGlmaWVyVG9PcmRpbmFsLmdldChmcm9tSWRlbnRpZmll
cik7CisgICAgICAgICAgICAgICAgdGhpcy5fbm9kZU9yZGluYWxUb0ZpcnN0T3V0Z29pbmdFZGdl
W25vZGVPcmRpbmFsXSA9IGVkZ2VJbmRleDsKKyAgICAgICAgICAgICAgICBsYXN0RnJvbUlkZW50
aWZpZXIgPSBmcm9tSWRlbnRpZmllcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIF9idWlsZEluY29taW5nRWRnZXMoKQorICAgIHsKKyAgICAgICAgLy8gRmlyc3QgY2Fs
Y3VsYXRlIHRoZSBjb3VudCBvZiBpbmNvbWluZyBlZGdlcyBmb3IgZWFjaCBub2RlLgorICAgICAg
ICBmb3IgKGxldCBlZGdlSW5kZXggPSAwOyBlZGdlSW5kZXggPCB0aGlzLl9lZGdlcy5sZW5ndGg7
IGVkZ2VJbmRleCArPSBlZGdlRmllbGRDb3VudCkgeworICAgICAgICAgICAgbGV0IHRvSWRlbnRp
ZmllciA9IHRoaXMuX2VkZ2VzW2VkZ2VJbmRleCArIGVkZ2VUb0lkT2Zmc2V0XTsKKyAgICAgICAg
ICAgIGxldCB0b05vZGVPcmRpbmFsID0gdGhpcy5fbm9kZUlkZW50aWZpZXJUb09yZGluYWwuZ2V0
KHRvSWRlbnRpZmllcik7CisgICAgICAgICAgICB0aGlzLl9ub2RlT3JkaW5hbFRvRmlyc3RJbmNv
bWluZ0VkZ2VbdG9Ob2RlT3JkaW5hbF0rKzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlcGxh
Y2UgdGhlIGNvdW50cyB3aXRoIHdoYXQgd2lsbCBiZSB0aGUgcmVzdWx0aW5nIGluZGV4IGJ5IHJ1
bm5pbmcgdXAgdGhlIGNvdW50cy4KKyAgICAgICAgLy8gU3RvcmUgdGhlIGNvdW50cyBpbiB3aGF0
IHdpbGwgYmUgdGhlIGVkZ2VzIGxpc3QgdG8gdXNlIHdoZW4gcGxhY2luZyBlZGdlcyBpbiB0aGUg
bGlzdC4KKyAgICAgICAgbGV0IHJ1bm5pbmdGaXJzdEluZGV4ID0gMDsKKyAgICAgICAgZm9yIChs
ZXQgbm9kZU9yZGluYWwgPSAwOyBub2RlT3JkaW5hbCA8IHRoaXMuX25vZGVDb3VudDsgKytub2Rl
T3JkaW5hbCkgeworICAgICAgICAgICAgbGV0IGNvdW50ID0gdGhpcy5fbm9kZU9yZGluYWxUb0Zp
cnN0SW5jb21pbmdFZGdlW25vZGVPcmRpbmFsXTsKKyAgICAgICAgICAgIHRoaXMuX25vZGVPcmRp
bmFsVG9GaXJzdEluY29taW5nRWRnZVtub2RlT3JkaW5hbF0gPSBydW5uaW5nRmlyc3RJbmRleDsK
KyAgICAgICAgICAgIHRoaXMuX2luY29taW5nTm9kZXNbcnVubmluZ0ZpcnN0SW5kZXhdID0gY291
bnQ7CisgICAgICAgICAgICBydW5uaW5nRmlyc3RJbmRleCArPSBjb3VudDsgICAgICAgICAgICAK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEZpbGwgaW4gdGhlIGluY29taW5nIGVkZ2VzIGxpc3Qu
IFVzZSB0aGUgY291bnQgYXMgYW4gb2Zmc2V0IHdoZW4gcGxhY2luZyBlZGdlcyBpbiB0aGUgbGlz
dC4KKyAgICAgICAgZm9yIChsZXQgZWRnZUluZGV4ID0gMDsgZWRnZUluZGV4IDwgdGhpcy5fZWRn
ZXMubGVuZ3RoOyBlZGdlSW5kZXggKz0gZWRnZUZpZWxkQ291bnQpIHsKKyAgICAgICAgICAgIGxl
dCBmcm9tSWRlbnRpZmllciA9IHRoaXMuX2VkZ2VzW2VkZ2VJbmRleCArIGVkZ2VGcm9tSWRPZmZz
ZXRdOworICAgICAgICAgICAgbGV0IGZyb21Ob2RlT3JkaW5hbCA9IHRoaXMuX25vZGVJZGVudGlm
aWVyVG9PcmRpbmFsLmdldChmcm9tSWRlbnRpZmllcik7CisgICAgICAgICAgICBsZXQgdG9JZGVu
dGlmaWVyID0gdGhpcy5fZWRnZXNbZWRnZUluZGV4ICsgZWRnZVRvSWRPZmZzZXRdOworICAgICAg
ICAgICAgbGV0IHRvTm9kZU9yZGluYWwgPSB0aGlzLl9ub2RlSWRlbnRpZmllclRvT3JkaW5hbC5n
ZXQodG9JZGVudGlmaWVyKTsKKworICAgICAgICAgICAgbGV0IGZpcnN0SW5jb21pbmdFZGdlSW5k
ZXggPSB0aGlzLl9ub2RlT3JkaW5hbFRvRmlyc3RJbmNvbWluZ0VkZ2VbdG9Ob2RlT3JkaW5hbF07
CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9pbmNvbWluZ05vZGVzW2ZpcnN0SW5j
b21pbmdFZGdlSW5kZXhdID4gMCwgIlNob3VsZCBiZSBleHBlY3RpbmcgZWRnZXMgZm9yIHRoaXMg
bm9kZSIpOworICAgICAgICAgICAgbGV0IGNvdW50QXNPZmZzZXQgPSB0aGlzLl9pbmNvbWluZ05v
ZGVzW2ZpcnN0SW5jb21pbmdFZGdlSW5kZXhdLS07CisgICAgICAgICAgICBsZXQgaW5kZXggPSBm
aXJzdEluY29taW5nRWRnZUluZGV4ICsgY291bnRBc09mZnNldCAtIDE7CisgICAgICAgICAgICB0
aGlzLl9pbmNvbWluZ05vZGVzW2luZGV4XSA9IGZyb21Ob2RlT3JkaW5hbDsKKyAgICAgICAgICAg
IHRoaXMuX2luY29taW5nRWRnZXNbaW5kZXhdID0gZWRnZUluZGV4OworICAgICAgICB9CisKKyAg
ICAgICAgLy8gRHVwbGljYXRlIHZhbHVlIG9uIHRoZSBlbmQuIEluY29taW5nIGVkZ2UgaXRlcmF0
aW9uIHdhbGtzIGZpcnN0SW5jb21pbmdFZGdlKG9yZGluYWwpIHRvIGZpcnN0SW5jb21pbmdFZGdl
KG9yZGluYWwrMSkuCisgICAgICAgIHRoaXMuX25vZGVPcmRpbmFsVG9GaXJzdEluY29taW5nRWRn
ZVt0aGlzLl9ub2RlQ291bnRdID0gdGhpcy5fbm9kZU9yZGluYWxUb0ZpcnN0SW5jb21pbmdFZGdl
W3RoaXMuX25vZGVDb3VudCAtIDFdOworICAgIH0KKworICAgIF9idWlsZFBvc3RPcmRlckluZGV4
ZXMoKQorICAgIHsKKyAgICAgICAgbGV0IHBvc3RPcmRlckluZGV4ID0gMDsKKyAgICAgICAgbGV0
IG5vZGVPcmRpbmFsVG9Qb3N0T3JkZXJJbmRleCA9IG5ldyBVaW50MzJBcnJheSh0aGlzLl9ub2Rl
Q291bnQpOworICAgICAgICBsZXQgcG9zdE9yZGVySW5kZXhUb05vZGVPcmRpbmFsID0gbmV3IFVp
bnQzMkFycmF5KHRoaXMuX25vZGVDb3VudCk7CisKKyAgICAgICAgbGV0IHN0YWNrTm9kZXMgPSBu
ZXcgVWludDMyQXJyYXkodGhpcy5fbm9kZUNvdW50KTsgLy8gbm9kZU9yZGluYWwuCisgICAgICAg
IGxldCBzdGFja0VkZ2VzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuX25vZGVDb3VudCk7IC8vIGVk
Z2VJbmRleC4KKyAgICAgICAgbGV0IHZpc2l0ZWQgPSBuZXcgVWludDhBcnJheSh0aGlzLl9ub2Rl
Q291bnQpOworCisgICAgICAgIGxldCBzdGFja1RvcCA9IDA7CisgICAgICAgIHN0YWNrTm9kZXNb
c3RhY2tUb3BdID0gcm9vdE5vZGVPcmRpbmFsOworICAgICAgICBzdGFja0VkZ2VzW3N0YWNrVG9w
XSA9IHRoaXMuX25vZGVPcmRpbmFsVG9GaXJzdE91dGdvaW5nRWRnZVtyb290Tm9kZU9yZGluYWxd
OworCisgICAgICAgIHdoaWxlIChzdGFja1RvcCA+PSAwKSB7CisgICAgICAgICAgICBsZXQgbm9k
ZU9yZGluYWwgPSBzdGFja05vZGVzW3N0YWNrVG9wXTsKKyAgICAgICAgICAgIGxldCBub2RlSWRl
bnRpZmllciA9IHRoaXMuX25vZGVzWyhub2RlT3JkaW5hbCAqIG5vZGVGaWVsZENvdW50KSArIG5v
ZGVJZE9mZnNldF07CisgICAgICAgICAgICBsZXQgZWRnZUluZGV4ID0gc3RhY2tFZGdlc1tzdGFj
a1RvcF07CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9lZGdlc1tlZGdlSW5kZXggKyBlZGdlRnJv
bUlkT2Zmc2V0XSA9PT0gbm9kZUlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBQcmVw
YXJlIHRoZSBuZXh0IGNoaWxkIGZvciB0aGUgY3VycmVudCBub2RlLgorICAgICAgICAgICAgICAg
IHN0YWNrRWRnZXNbc3RhY2tUb3BdICs9IGVkZ2VGaWVsZENvdW50OworCisgICAgICAgICAgICAg
ICAgbGV0IHRvSWRlbnRpZmllciA9IHRoaXMuX2VkZ2VzW2VkZ2VJbmRleCArIGVkZ2VUb0lkT2Zm
c2V0XTsKKyAgICAgICAgICAgICAgICBsZXQgdG9Ob2RlT3JkaW5hbCA9IHRoaXMuX25vZGVJZGVu
dGlmaWVyVG9PcmRpbmFsLmdldCh0b0lkZW50aWZpZXIpOworICAgICAgICAgICAgICAgIGlmICh2
aXNpdGVkW3RvTm9kZU9yZGluYWxdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgICAgIC8vIENoaWxkLgorICAgICAgICAgICAgICAgIHN0YWNrVG9wKys7Cisg
ICAgICAgICAgICAgICAgc3RhY2tOb2Rlc1tzdGFja1RvcF0gPSB0b05vZGVPcmRpbmFsOworICAg
ICAgICAgICAgICAgIHN0YWNrRWRnZXNbc3RhY2tUb3BdID0gdGhpcy5fbm9kZU9yZGluYWxUb0Zp
cnN0T3V0Z29pbmdFZGdlW3RvTm9kZU9yZGluYWxdOworICAgICAgICAgICAgICAgIHZpc2l0ZWRb
dG9Ob2RlT3JkaW5hbF0gPSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAvLyBTZWxmLgorICAgICAgICAgICAgICAgIG5vZGVPcmRpbmFsVG9Qb3N0T3JkZXJJbmRleFtu
b2RlT3JkaW5hbF0gPSBwb3N0T3JkZXJJbmRleDsKKyAgICAgICAgICAgICAgICBwb3N0T3JkZXJJ
bmRleFRvTm9kZU9yZGluYWxbcG9zdE9yZGVySW5kZXhdID0gbm9kZU9yZGluYWw7CisgICAgICAg
ICAgICAgICAgcG9zdE9yZGVySW5kZXgrKzsKKyAgICAgICAgICAgICAgICBzdGFja1RvcC0tOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gVW52aXNpdGVkIG5vZGVzLgor
ICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHBhcmVudCBub2RlIHdhcyBkaXNhbGxv
d2VkIG9uIHRoZSBiYWNrZW5kLCBidXQgb3RoZXIgbm9kZXMKKyAgICAgICAgLy8gdGhhdCB3ZXJl
IG9ubHkgcmVmZXJlbmNlZCBmcm9tIHRoYXQgZGlzYWxsb3dlZCBub2RlIHdlcmUgZXZlbnR1YWxs
eSBhbGxvd2VkIGJlY2F1c2UKKyAgICAgICAgLy8gdGhleSBtYXkgYmUgZ2VuZXJpYyBzeXN0ZW0g
b2JqZWN0cy4gR2l2ZSB0aGVzZSBub2RlcyBhIHBvc3RPcmRlckluZGV4IGFueXdheXMuCisgICAg
ICAgIGlmIChwb3N0T3JkZXJJbmRleCAhPT0gdGhpcy5fbm9kZUNvdW50KSB7CisgICAgICAgICAg
ICAvLyBSb290IHdhcyB0aGUgbGFzdCBub2RlIHZpc2l0ZWQuIFJldmVydCBhc3NpZ25pbmcgaXQg
YW4gaW5kZXgsIGFkZCBpdCBiYWNrIGF0IHRoZSBlbmQuCisgICAgICAgICAgICBwb3N0T3JkZXJJ
bmRleC0tOworCisgICAgICAgICAgICAvLyBWaXNpdCB1bnZpc2l0ZWQgbm9kZXMuCisgICAgICAg
ICAgICBmb3IgKGxldCBub2RlT3JkaW5hbCA9IDE7IG5vZGVPcmRpbmFsIDwgdGhpcy5fbm9kZUNv
dW50OyArK25vZGVPcmRpbmFsKSB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2l0ZWRbbm9kZU9y
ZGluYWxdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBu
b2RlT3JkaW5hbFRvUG9zdE9yZGVySW5kZXhbbm9kZU9yZGluYWxdID0gcG9zdE9yZGVySW5kZXg7
CisgICAgICAgICAgICAgICAgcG9zdE9yZGVySW5kZXhUb05vZGVPcmRpbmFsW3Bvc3RPcmRlcklu
ZGV4XSA9IG5vZGVPcmRpbmFsOworICAgICAgICAgICAgICAgIHBvc3RPcmRlckluZGV4Kys7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFZpc2l0IHJvb3QgYWdhaW4uCisgICAgICAg
ICAgICBub2RlT3JkaW5hbFRvUG9zdE9yZGVySW5kZXhbcm9vdE5vZGVPcmRpbmFsXSA9IHBvc3RP
cmRlckluZGV4OworICAgICAgICAgICAgcG9zdE9yZGVySW5kZXhUb05vZGVPcmRpbmFsW3Bvc3RP
cmRlckluZGV4XSA9IHJvb3ROb2RlT3JkaW5hbDsKKyAgICAgICAgICAgIHBvc3RPcmRlckluZGV4
Kys7CisgICAgICAgIH0KKworICAgICAgICBjb25zb2xlLmFzc2VydChwb3N0T3JkZXJJbmRleCA9
PT0gdGhpcy5fbm9kZUNvdW50LCAiQWxsIG5vZGVzIHdlcmUgdmlzaXRlZCIpOworICAgICAgICBj
b25zb2xlLmFzc2VydChub2RlT3JkaW5hbFRvUG9zdE9yZGVySW5kZXhbcm9vdE5vZGVPcmRpbmFs
XSA9PT0gdGhpcy5fbm9kZUNvdW50IC0gMSwgIlJvb3Qgbm9kZSBzaG91bGQgaGF2ZSB0aGUgbGFz
dCBwb3NzaWJsZSBwb3N0T3JkZXJJbmRleCIpOworCisgICAgICAgIHJldHVybiB7bm9kZU9yZGlu
YWxUb1Bvc3RPcmRlckluZGV4LCBwb3N0T3JkZXJJbmRleFRvTm9kZU9yZGluYWx9OworICAgIH0K
KworICAgIF9idWlsZERvbWluYXRvckluZGV4ZXMobm9kZU9yZGluYWxUb1Bvc3RPcmRlckluZGV4
LCBwb3N0T3JkZXJJbmRleFRvTm9kZU9yZGluYWwpCisgICAgeworICAgICAgICAvLyBUaGUgYWxn
b3JpdGhtIGlzIGJhc2VkIG9uIHRoZSBhcnRpY2xlOgorICAgICAgICAvLyBLLiBDb29wZXIsIFQu
IEhhcnZleSBhbmQgSy4gS2VubmVkeSAiQSBTaW1wbGUsIEZhc3QgRG9taW5hbmNlIEFsZ29yaXRo
bSIKKworICAgICAgICBsZXQgcm9vdFBvc3RPcmRlckluZGV4ID0gdGhpcy5fbm9kZUNvdW50IC0g
MTsKKyAgICAgICAgbGV0IG5vRW50cnkgPSB0aGlzLl9ub2RlQ291bnQ7CisKKyAgICAgICAgbGV0
IGFmZmVjdGVkID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5fbm9kZUNvdW50KTsKKyAgICAgICAgbGV0
IGRvbWluYXRvcnMgPSBuZXcgVWludDMyQXJyYXkodGhpcy5fbm9kZUNvdW50KTsKKworICAgICAg
ICAvLyBJbml0aWFsaXplIHdpdGggdW5zZXQgdmFsdWUuCisgICAgICAgIGRvbWluYXRvcnMuZmls
bChub0VudHJ5KTsKKworICAgICAgICAvLyBNYXJrIHRoZSByb290J3MgZG9taW5hdG9yIHZhbHVl
LgorICAgICAgICBkb21pbmF0b3JzW3Jvb3RQb3N0T3JkZXJJbmRleF0gPSByb290UG9zdE9yZGVy
SW5kZXg7ICAgICAgICAKKworICAgICAgICAvLyBBZmZlY3QgdGhlIHJvb3QncyBjaGlsZHJlbi4g
QWxzbyB1c2UgdGhpcyBvcHBvcnR1bml0eSB0byBtYXJrIHRoZW0gYXMgR0Mgcm9vdHMuCisgICAg
ICAgIGxldCByb290RWRnZUluZGV4ID0gdGhpcy5fbm9kZU9yZGluYWxUb0ZpcnN0T3V0Z29pbmdF
ZGdlW3Jvb3ROb2RlT3JkaW5hbF07CisgICAgICAgIGZvciAobGV0IGVkZ2VJbmRleCA9IHJvb3RF
ZGdlSW5kZXg7IHRoaXMuX2VkZ2VzW2VkZ2VJbmRleCArIGVkZ2VGcm9tSWRPZmZzZXRdID09PSBy
b290Tm9kZUlkZW50aWZpZXI7IGVkZ2VJbmRleCArPSBlZGdlRmllbGRDb3VudCkgeworICAgICAg
ICAgICAgbGV0IHRvSWRlbnRpZmllciA9IHRoaXMuX2VkZ2VzW2VkZ2VJbmRleCArIGVkZ2VUb0lk
T2Zmc2V0XTsKKyAgICAgICAgICAgIGxldCB0b05vZGVPcmRpbmFsID0gdGhpcy5fbm9kZUlkZW50
aWZpZXJUb09yZGluYWwuZ2V0KHRvSWRlbnRpZmllcik7CisgICAgICAgICAgICBsZXQgdG9Qb3N0
T3JkZXJJbmRleCA9IG5vZGVPcmRpbmFsVG9Qb3N0T3JkZXJJbmRleFt0b05vZGVPcmRpbmFsXTsK
KyAgICAgICAgICAgIGFmZmVjdGVkW3RvUG9zdE9yZGVySW5kZXhdID0gMTsKKyAgICAgICAgICAg
IHRoaXMuX25vZGVPcmRpbmFsSXNHQ1Jvb3RbdG9Ob2RlT3JkaW5hbF0gPSAxOworICAgICAgICB9
CisKKyAgICAgICAgbGV0IGNoYW5nZWQgPSB0cnVlOworICAgICAgICB3aGlsZSAoY2hhbmdlZCkg
eworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworCisgICAgICAgICAgICBmb3IgKGxldCBw
b3N0T3JkZXJJbmRleCA9IHJvb3RQb3N0T3JkZXJJbmRleCAtIDE7IHBvc3RPcmRlckluZGV4ID49
IDA7IC0tcG9zdE9yZGVySW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWFmZmVjdGVkW3Bv
c3RPcmRlckluZGV4XSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgYWZmZWN0ZWRbcG9zdE9yZGVySW5kZXhdID0gMDsKKworICAgICAgICAgICAgICAgIC8v
IFRoZSBkb21pbmF0b3IgaXMgYWxyZWFkeSB0aGUgcm9vdCwgbm90aGluZyB0byBkby4KKyAgICAg
ICAgICAgICAgICBpZiAoZG9taW5hdG9yc1twb3N0T3JkZXJJbmRleF0gPT09IHJvb3RQb3N0T3Jk
ZXJJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAg
ICBsZXQgbmV3RG9taW5hdG9ySW5kZXggPSBub0VudHJ5OworICAgICAgICAgICAgICAgIGxldCBu
b2RlT3JkaW5hbCA9IHBvc3RPcmRlckluZGV4VG9Ob2RlT3JkaW5hbFtwb3N0T3JkZXJJbmRleF07
CisgICAgICAgICAgICAgICAgbGV0IGluY29taW5nRWRnZUluZGV4ID0gdGhpcy5fbm9kZU9yZGlu
YWxUb0ZpcnN0SW5jb21pbmdFZGdlW25vZGVPcmRpbmFsXTsKKyAgICAgICAgICAgICAgICBsZXQg
aW5jb21pbmdFZGdlSW5kZXhFbmQgPSB0aGlzLl9ub2RlT3JkaW5hbFRvRmlyc3RJbmNvbWluZ0Vk
Z2Vbbm9kZU9yZGluYWwgKyAxXTsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBlZGdlSW5kZXgg
PSBpbmNvbWluZ0VkZ2VJbmRleDsgZWRnZUluZGV4IDwgaW5jb21pbmdFZGdlSW5kZXhFbmQ7ICsr
ZWRnZUluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIGxldCBmcm9tTm9kZU9yZGluYWwgPSB0
aGlzLl9pbmNvbWluZ05vZGVzW2VkZ2VJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGxldCBm
cm9tUG9zdE9yZGVySW5kZXggPSBub2RlT3JkaW5hbFRvUG9zdE9yZGVySW5kZXhbZnJvbU5vZGVP
cmRpbmFsXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRvbWluYXRvcnNbZnJvbVBvc3RPcmRl
ckluZGV4XSAhPT0gbm9FbnRyeSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0Rv
bWluYXRvckluZGV4ID09PSBub0VudHJ5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
d0RvbWluYXRvckluZGV4ID0gZnJvbVBvc3RPcmRlckluZGV4OworICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGZyb21Qb3N0
T3JkZXJJbmRleCAhPT0gbmV3RG9taW5hdG9ySW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKGZyb21Qb3N0T3JkZXJJbmRleCA8IG5ld0RvbWluYXRvckluZGV4
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbVBvc3RPcmRlckluZGV4
ID0gZG9taW5hdG9yc1tmcm9tUG9zdE9yZGVySW5kZXhdOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAobmV3RG9taW5hdG9ySW5kZXggPCBmcm9tUG9zdE9yZGVySW5kZXgp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdEb21pbmF0b3JJbmRleCA9
IGRvbWluYXRvcnNbbmV3RG9taW5hdG9ySW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBpZiAobmV3RG9taW5hdG9ySW5kZXggPT09IHJvb3RQb3N0T3Jk
ZXJJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIENoYW5nZWQuIEFmZmVjdCBjaGlsZHJlbi4KKyAgICAg
ICAgICAgICAgICBpZiAobmV3RG9taW5hdG9ySW5kZXggIT09IG5vRW50cnkgJiYgZG9taW5hdG9y
c1twb3N0T3JkZXJJbmRleF0gIT09IG5ld0RvbWluYXRvckluZGV4KSB7CisgICAgICAgICAgICAg
ICAgICAgIGRvbWluYXRvcnNbcG9zdE9yZGVySW5kZXhdID0gbmV3RG9taW5hdG9ySW5kZXg7Cisg
ICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAg
IGxldCBvdXRnb2luZ0VkZ2VJbmRleCA9IHRoaXMuX25vZGVPcmRpbmFsVG9GaXJzdE91dGdvaW5n
RWRnZVtub2RlT3JkaW5hbF07CisgICAgICAgICAgICAgICAgICAgIGxldCBub2RlSWRlbnRpZmll
ciA9IHRoaXMuX25vZGVzWyhub2RlT3JkaW5hbCAqIG5vZGVGaWVsZENvdW50KSArIG5vZGVJZE9m
ZnNldF07CisgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGVkZ2VJbmRleCA9IG91dGdvaW5n
RWRnZUluZGV4OyB0aGlzLl9lZGdlc1tlZGdlSW5kZXggKyBlZGdlRnJvbUlkT2Zmc2V0XSA9PT0g
bm9kZUlkZW50aWZpZXI7IGVkZ2VJbmRleCArPSBlZGdlRmllbGRDb3VudCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbGV0IHRvTm9kZUlkZW50aWZpZXIgPSB0aGlzLl9lZGdlc1tlZGdlSW5k
ZXggKyBlZGdlVG9JZE9mZnNldF07CisgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG9Ob2Rl
T3JkaW5hbCA9IHRoaXMuX25vZGVJZGVudGlmaWVyVG9PcmRpbmFsLmdldCh0b05vZGVJZGVudGlm
aWVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b05vZGVQb3N0T3JkZXIgPSBub2Rl
T3JkaW5hbFRvUG9zdE9yZGVySW5kZXhbdG9Ob2RlT3JkaW5hbF07CisgICAgICAgICAgICAgICAg
ICAgICAgICBhZmZlY3RlZFt0b05vZGVQb3N0T3JkZXJdID0gMTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGZvciAobGV0IHBvc3RPcmRlckluZGV4ID0gMDsgcG9zdE9yZGVySW5kZXggPCB0aGlzLl9u
b2RlQ291bnQ7ICsrcG9zdE9yZGVySW5kZXgpIHsKKyAgICAgICAgICAgIGxldCBub2RlT3JkaW5h
bCA9IHBvc3RPcmRlckluZGV4VG9Ob2RlT3JkaW5hbFtwb3N0T3JkZXJJbmRleF07CisgICAgICAg
ICAgICBsZXQgZG9taW5hdG9yTm9kZU9yZGluYWwgPSBwb3N0T3JkZXJJbmRleFRvTm9kZU9yZGlu
YWxbZG9taW5hdG9yc1twb3N0T3JkZXJJbmRleF1dOworICAgICAgICAgICAgdGhpcy5fbm9kZU9y
ZGluYWxUb0RvbWluYXRvck5vZGVPcmRpbmFsW25vZGVPcmRpbmFsXSA9IGRvbWluYXRvck5vZGVP
cmRpbmFsOworICAgICAgICB9CisgICAgfQorCisgICAgX2J1aWxkUmV0YWluZWRTaXplcyhwb3N0
T3JkZXJJbmRleFRvTm9kZU9yZGluYWwpCisgICAgeworICAgICAgICAvLyBTZWxmIHNpemUuCisg
ICAgICAgIGZvciAobGV0IG5vZGVJbmRleCA9IDAsIG5vZGVPcmRpbmFsID0gMDsgbm9kZU9yZGlu
YWwgPCB0aGlzLl9ub2RlQ291bnQ7IG5vZGVJbmRleCArPSBub2RlRmllbGRDb3VudCwgbm9kZU9y
ZGluYWwrKykKKyAgICAgICAgICAgIHRoaXMuX25vZGVPcmRpbmFsVG9SZXRhaW5lZFNpemVzW25v
ZGVPcmRpbmFsXSA9IHRoaXMuX25vZGVzW25vZGVJbmRleCArIG5vZGVTaXplT2Zmc2V0XTsKKwor
ICAgICAgICAvLyBBdHRyaWJ1dGUgc2l6ZSB0byBkb21pbmF0b3IuCisgICAgICAgIGZvciAobGV0
IHBvc3RPcmRlckluZGV4ID0gMDsgcG9zdE9yZGVySW5kZXggPCB0aGlzLl9ub2RlQ291bnQgLSAx
OyArK3Bvc3RPcmRlckluZGV4KSB7CisgICAgICAgICAgICBsZXQgbm9kZU9yZGluYWwgPSBwb3N0
T3JkZXJJbmRleFRvTm9kZU9yZGluYWxbcG9zdE9yZGVySW5kZXhdOworICAgICAgICAgICAgbGV0
IG5vZGVSZXRhaW5lZFNpemUgPSB0aGlzLl9ub2RlT3JkaW5hbFRvUmV0YWluZWRTaXplc1tub2Rl
T3JkaW5hbF07CisgICAgICAgICAgICBsZXQgZG9taW5hdG9yTm9kZU9yZGluYWwgPSB0aGlzLl9u
b2RlT3JkaW5hbFRvRG9taW5hdG9yTm9kZU9yZGluYWxbbm9kZU9yZGluYWxdOworICAgICAgICAg
ICAgdGhpcy5fbm9kZU9yZGluYWxUb1JldGFpbmVkU2l6ZXNbZG9taW5hdG9yTm9kZU9yZGluYWxd
ICs9IG5vZGVSZXRhaW5lZFNpemU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfZ2NSb290UGF0
aGVzKG5vZGVJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgbGV0IHRhcmdldE5vZGVPcmRpbmFs
ID0gdGhpcy5fbm9kZUlkZW50aWZpZXJUb09yZGluYWwuZ2V0KG5vZGVJZGVudGlmaWVyKTsKKwor
ICAgICAgICBpZiAodGhpcy5fbm9kZU9yZGluYWxJc0dDUm9vdFt0YXJnZXROb2RlT3JkaW5hbF0p
CisgICAgICAgICAgICByZXR1cm4gW107CisKKyAgICAgICAgLy8gRklYTUU6IEFycmF5IHB1c2gv
cG9wIGNhbiBhZmZlY3QgcGVyZm9ybWFuY2UgaGVyZSwgYnV0IGluIHByYWN0aWNlIGl0IGhhc24n
dCBiZWVuIGFuIGlzc3VlLgorCisgICAgICAgIGxldCBwYXRocyA9IFtdOworICAgICAgICBsZXQg
Y3VycmVudFBhdGggPSBbXTsKKyAgICAgICAgbGV0IHZpc2l0ZWQgPSBuZXcgVWludDhBcnJheSh0
aGlzLl9ub2RlQ291bnQpOworCisgICAgICAgIGZ1bmN0aW9uIHZpc2l0Tm9kZShub2RlT3JkaW5h
bCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRoaXMuX25vZGVPcmRpbmFsSXNHQ1Jvb3Rb
bm9kZU9yZGluYWxdKSB7CisgICAgICAgICAgICAgICAgbGV0IGZ1bGxQYXRoID0gY3VycmVudFBh
dGguc2xpY2UoKTsKKyAgICAgICAgICAgICAgICBsZXQgbm9kZUluZGV4ID0gbm9kZU9yZGluYWwg
KiBub2RlRmllbGRDb3VudDsKKyAgICAgICAgICAgICAgICBmdWxsUGF0aC5wdXNoKHtub2RlOiBu
b2RlSW5kZXh9KTsKKyAgICAgICAgICAgICAgICBwYXRocy5wdXNoKGZ1bGxQYXRoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh2aXNp
dGVkW25vZGVPcmRpbmFsXSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB2
aXNpdGVkW25vZGVPcmRpbmFsXSA9IDE7CisKKyAgICAgICAgICAgIGxldCBub2RlSW5kZXggPSBu
b2RlT3JkaW5hbCAqIG5vZGVGaWVsZENvdW50OworICAgICAgICAgICAgY3VycmVudFBhdGgucHVz
aCh7bm9kZTogbm9kZUluZGV4fSk7CisKKyAgICAgICAgICAgIC8vIExvb3AgaW4gcmV2ZXJzZSBv
cmRlciBiZWNhdXNlIGVkZ2VzIHdlcmUgYWRkZWQgaW4gcmV2ZXJzZSBvcmRlci4KKyAgICAgICAg
ICAgIC8vIEl0IGRvZXNuJ3QgcGFydGljdWxhcmx5IG1hdHRlciBvdGhlciB0aGVuIGNvbnNpc3Rl
bmN5IHdpdGggcHJldmlvdXMgY29kZS4KKyAgICAgICAgICAgIGxldCBpbmNvbWluZ0VkZ2VJbmRl
eFN0YXJ0ID0gdGhpcy5fbm9kZU9yZGluYWxUb0ZpcnN0SW5jb21pbmdFZGdlW25vZGVPcmRpbmFs
XTsKKyAgICAgICAgICAgIGxldCBpbmNvbWluZ0VkZ2VJbmRleEVuZCA9IHRoaXMuX25vZGVPcmRp
bmFsVG9GaXJzdEluY29taW5nRWRnZVtub2RlT3JkaW5hbCArIDFdOworICAgICAgICAgICAgZm9y
IChsZXQgaW5jb21pbmdFZGdlSW5kZXggPSBpbmNvbWluZ0VkZ2VJbmRleEVuZCAtIDE7IGluY29t
aW5nRWRnZUluZGV4ID49IGluY29taW5nRWRnZUluZGV4U3RhcnQ7IC0taW5jb21pbmdFZGdlSW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBsZXQgZnJvbU5vZGVPcmRpbmFsID0gdGhpcy5faW5jb21p
bmdOb2Rlc1tpbmNvbWluZ0VkZ2VJbmRleF07CisgICAgICAgICAgICAgICAgbGV0IGZyb21Ob2Rl
SW5kZXggPSBmcm9tTm9kZU9yZGluYWwgKiBub2RlRmllbGRDb3VudDsKKyAgICAgICAgICAgICAg
ICBsZXQgZnJvbU5vZGVJc0ludGVybmFsID0gdGhpcy5fbm9kZXNbZnJvbU5vZGVJbmRleCArIG5v
ZGVJbnRlcm5hbE9mZnNldF07CisgICAgICAgICAgICAgICAgaWYgKGZyb21Ob2RlSXNJbnRlcm5h
bCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBsZXQg
ZWRnZUluZGV4ID0gdGhpcy5faW5jb21pbmdFZGdlc1tpbmNvbWluZ0VkZ2VJbmRleF07CisgICAg
ICAgICAgICAgICAgY3VycmVudFBhdGgucHVzaCh7ZWRnZTogZWRnZUluZGV4fSk7CisgICAgICAg
ICAgICAgICAgdmlzaXROb2RlLmNhbGwodGhpcywgZnJvbU5vZGVPcmRpbmFsKTsKKyAgICAgICAg
ICAgICAgICBjdXJyZW50UGF0aC5wb3AoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y3VycmVudFBhdGgucG9wKCk7CisgICAgICAgIH0KKworICAgICAgICB2aXNpdE5vZGUuY2FsbCh0
aGlzLCB0YXJnZXROb2RlT3JkaW5hbCk7CisKKyAgICAgICAgcmV0dXJuIHBhdGhzOworICAgIH0K
K307CisKK0hlYXBTbmFwc2hvdERpZmYgPSBjbGFzcyBIZWFwU25hcHNob3REaWZmCit7CisgICAg
Y29uc3RydWN0b3Iob2JqZWN0SWQsIHNuYXBzaG90MSwgc25hcHNob3QyKQorICAgIHsKKyAgICAg
ICAgdGhpcy5fb2JqZWN0SWQgPSBvYmplY3RJZDsKKworICAgICAgICB0aGlzLl9zbmFwc2hvdDEg
PSBzbmFwc2hvdDE7CisgICAgICAgIHRoaXMuX3NuYXBzaG90MiA9IHNuYXBzaG90MjsKKworICAg
ICAgICB0aGlzLl90b3RhbFNpemUgPSAwOworICAgICAgICB0aGlzLl9hZGRlZE5vZGVJZGVudGlm
aWVycyA9IG5ldyBTZXQ7CisKKyAgICAgICAgbGV0IGtub3duID0gbmV3IE1hcDsKKyAgICAgICAg
Zm9yIChsZXQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgdGhpcy5fc25hcHNob3QxLl9ub2Rl
cy5sZW5ndGg7IG5vZGVJbmRleCArPSBub2RlRmllbGRDb3VudCkgeworICAgICAgICAgICAgbGV0
IG5vZGVJZGVudGlmaWVyID0gdGhpcy5fc25hcHNob3QxLl9ub2Rlc1tub2RlSW5kZXggKyBub2Rl
SWRPZmZzZXRdOworICAgICAgICAgICAga25vd24uc2V0KG5vZGVJZGVudGlmaWVyLCBub2RlSW5k
ZXgpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChsZXQgbm9kZUluZGV4ID0gMDsgbm9kZUlu
ZGV4IDwgdGhpcy5fc25hcHNob3QyLl9ub2Rlcy5sZW5ndGg7IG5vZGVJbmRleCArPSBub2RlRmll
bGRDb3VudCkgeworICAgICAgICAgICAgbGV0IG5vZGVJZGVudGlmaWVyID0gdGhpcy5fc25hcHNo
b3QyLl9ub2Rlc1tub2RlSW5kZXggKyBub2RlSWRPZmZzZXRdOworICAgICAgICAgICAgbGV0IGV4
aXN0ZWQgPSBrbm93bi5kZWxldGUobm9kZUlkZW50aWZpZXIpOworICAgICAgICAgICAgaWYgKCFl
eGlzdGVkKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYWRkZWROb2RlSWRlbnRpZmllcnMuYWRk
KG5vZGVJZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICB0aGlzLl90b3RhbFNpemUgKz0gdGhp
cy5fc25hcHNob3QyLl9ub2Rlc1tub2RlSW5kZXggKyBub2RlU2l6ZU9mZnNldF07CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9jYXRlZ29yaWVzID0gSGVhcFNuYXBz
aG90LmJ1aWxkQ2F0ZWdvcmllcyh0aGlzLl9zbmFwc2hvdDIsIChub2RlSWRlbnRpZmllcikgPT4g
dGhpcy5fYWRkZWROb2RlSWRlbnRpZmllcnMuaGFzKG5vZGVJZGVudGlmaWVyKSk7CisgICAgfQor
CisgICAgLy8gV29ya2VyIE1ldGhvZHMKKworICAgIGFsbG9jYXRpb25CdWNrZXRDb3VudHMoYnVj
a2V0U2l6ZXMpCisgICAgeworICAgICAgICByZXR1cm4gSGVhcFNuYXBzaG90LmFsbG9jYXRpb25C
dWNrZXRDb3VudHModGhpcy5fc25hcHNob3QyLCBidWNrZXRTaXplcywgKG5vZGVJZGVudGlmaWVy
KSA9PiB0aGlzLl9hZGRlZE5vZGVJZGVudGlmaWVycy5oYXMobm9kZUlkZW50aWZpZXIpKTsKKyAg
ICB9CisKKyAgICBpbnN0YW5jZXNXaXRoQ2xhc3NOYW1lKGNsYXNzTmFtZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBIZWFwU25hcHNob3QuaW5zdGFuY2VzV2l0aENsYXNzTmFtZSh0aGlzLl9zbmFw
c2hvdDIsIGNsYXNzTmFtZSwgKG5vZGVJZGVudGlmaWVyKSA9PiB0aGlzLl9hZGRlZE5vZGVJZGVu
dGlmaWVycy5oYXMobm9kZUlkZW50aWZpZXIpKTsKKyAgICB9CisKKyAgICBub2RlV2l0aElkZW50
aWZpZXIobm9kZUlkZW50aWZpZXIpIHsgcmV0dXJuIHRoaXMuX3NuYXBzaG90Mi5ub2RlV2l0aElk
ZW50aWZpZXIobm9kZUlkZW50aWZpZXIpOyB9CisgICAgc2hvcnRlc3RHQ1Jvb3RQYXRoKG5vZGVJ
ZGVudGlmaWVyKSB7IHJldHVybiB0aGlzLl9zbmFwc2hvdDIuc2hvcnRlc3RHQ1Jvb3RQYXRoKG5v
ZGVJZGVudGlmaWVyKTsgfQorICAgIGRvbWluYXRlZE5vZGVzKG5vZGVJZGVudGlmaWVyKSB7IHJl
dHVybiB0aGlzLl9zbmFwc2hvdDIuZG9taW5hdGVkTm9kZXMobm9kZUlkZW50aWZpZXIpOyB9Cisg
ICAgcmV0YWluZWROb2Rlcyhub2RlSWRlbnRpZmllcikgeyByZXR1cm4gdGhpcy5fc25hcHNob3Qy
LnJldGFpbmVkTm9kZXMobm9kZUlkZW50aWZpZXIpOyB9CisgICAgcmV0YWluZXJzKG5vZGVJZGVu
dGlmaWVyKSB7IHJldHVybiB0aGlzLl9zbmFwc2hvdDIucmV0YWluZXJzKG5vZGVJZGVudGlmaWVy
KTsgfQorCisgICAgLy8gUHVibGljCisKKyAgICBzZXJpYWxpemUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgIHNuYXBzaG90MTogdGhpcy5fc25hcHNob3QxLnNlcmlhbGl6
ZSgpLAorICAgICAgICAgICAgc25hcHNob3QyOiB0aGlzLl9zbmFwc2hvdDIuc2VyaWFsaXplKCks
CisgICAgICAgICAgICB0b3RhbFNpemU6IHRoaXMuX3RvdGFsU2l6ZSwKKyAgICAgICAgICAgIHRv
dGFsT2JqZWN0Q291bnQ6IHRoaXMuX2FkZGVkTm9kZUlkZW50aWZpZXJzLnNpemUsCisgICAgICAg
ICAgICBjYXRlZ29yaWVzOiB0aGlzLl9jYXRlZ29yaWVzLAorICAgICAgICB9OworICAgIH0KK307
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Xb3JrZXJz
L0hlYXBTbmFwc2hvdC9IZWFwU25hcHNob3RXb3JrZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Xb3JrZXJzL0hlYXBTbmFwc2hvdC9IZWFwU25hcHNob3RXb3JrZXIu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUxYjU2YwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1dvcmtlcnMvSGVh
cFNuYXBzaG90L0hlYXBTbmFwc2hvdFdvcmtlci5qcwpAQCAtMCwwICsxLDk3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworaW1wb3J0U2NyaXB0cyguLi5bCisgICAgIkhlYXBTbmFwc2hvdC5qcyIKK10pOworCitI
ZWFwU25hcHNob3RXb3JrZXIgPSBjbGFzcyBIZWFwU25hcHNob3RXb3JrZXIKK3sKKyAgICBjb25z
dHJ1Y3RvcigpCisgICAgeworICAgICAgICB0aGlzLl9uZXh0T2JqZWN0SWQgPSAxOworICAgICAg
ICB0aGlzLl9vYmplY3RzID0gbmV3IE1hcDsKKworICAgICAgICBzZWxmLmFkZEV2ZW50TGlzdGVu
ZXIoIm1lc3NhZ2UiLCB0aGlzLl9oYW5kbGVNZXNzYWdlLmJpbmQodGhpcykpOworICAgIH0KKwor
ICAgIC8vIEFjdGlvbnMKKworICAgIGNyZWF0ZVNuYXBzaG90KHNuYXBzaG90U3RyaW5nKQorICAg
IHsKKyAgICAgICAgbGV0IG9iamVjdElkID0gdGhpcy5fbmV4dE9iamVjdElkKys7CisgICAgICAg
IGxldCBzbmFwc2hvdCA9IG5ldyBIZWFwU25hcHNob3Qob2JqZWN0SWQsIHNuYXBzaG90U3RyaW5n
KTsKKyAgICAgICAgdGhpcy5fb2JqZWN0cy5zZXQob2JqZWN0SWQsIHNuYXBzaG90KTsKKyAgICAg
ICAgcmV0dXJuIHtvYmplY3RJZCwgc25hcHNob3Q6IHNuYXBzaG90LnNlcmlhbGl6ZSgpfTsKKyAg
ICB9CisKKyAgICBjcmVhdGVTbmFwc2hvdERpZmYob2JqZWN0SWQxLCBvYmplY3RJZDIpCisgICAg
eworICAgICAgICBsZXQgc25hcHNob3QxID0gdGhpcy5fb2JqZWN0cy5nZXQob2JqZWN0SWQxKTsK
KyAgICAgICAgbGV0IHNuYXBzaG90MiA9IHRoaXMuX29iamVjdHMuZ2V0KG9iamVjdElkMik7CisK
KyAgICAgICAgY29uc29sZS5hc3NlcnQoc25hcHNob3QxIGluc3RhbmNlb2YgSGVhcFNuYXBzaG90
KTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoc25hcHNob3QyIGluc3RhbmNlb2YgSGVhcFNuYXBz
aG90KTsKKworICAgICAgICBsZXQgb2JqZWN0SWQgPSB0aGlzLl9uZXh0T2JqZWN0SWQrKzsKKyAg
ICAgICAgbGV0IHNuYXBzaG90RGlmZiA9IG5ldyBIZWFwU25hcHNob3REaWZmKG9iamVjdElkLCBz
bmFwc2hvdDEsIHNuYXBzaG90Mik7CisgICAgICAgIHRoaXMuX29iamVjdHMuc2V0KG9iamVjdElk
LCBzbmFwc2hvdERpZmYpOworICAgICAgICByZXR1cm4ge29iamVjdElkLCBzbmFwc2hvdERpZmY6
IHNuYXBzaG90RGlmZi5zZXJpYWxpemUoKX07CisgICAgfQorCisgICAgLy8gUHVibGljCisKKyAg
ICBzZW5kRXZlbnQoZXZlbnROYW1lLCBldmVudERhdGEpCisgICAgeworICAgICAgICBzZWxmLnBv
c3RNZXNzYWdlKHtldmVudE5hbWUsIGV2ZW50RGF0YX0pOworICAgIH0KKworICAgIC8vIFByaXZh
dGUKKyAgICAKKyAgICBfaGFuZGxlTWVzc2FnZShldmVudCkKKyAgICB7CisgICAgICAgIGxldCBk
YXRhID0gZXZlbnQuZGF0YTsKKworICAgICAgICAvLyBBY3Rpb24uCisgICAgICAgIGlmIChkYXRh
LmFjdGlvbk5hbWUpIHsKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSB0aGlzW2RhdGEuYWN0aW9u
TmFtZV0oLi4uZGF0YS5hY3Rpb25Bcmd1bWVudHMpOworICAgICAgICAgICAgc2VsZi5wb3N0TWVz
c2FnZSh7Y2FsbElkOiBkYXRhLmNhbGxJZCwgcmVzdWx0fSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICAvLyBNZXRob2QuCisgICAgICAgIGlmIChkYXRhLm1ldGhv
ZE5hbWUpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGRhdGEub2JqZWN0SWQsICJNdXN0
IGhhdmUgYW4gb2JqZWN0SWQgdG8gY2FsbCB0aGUgbWV0aG9kIG9uIik7CisgICAgICAgICAgICBs
ZXQgb2JqZWN0ID0gdGhpcy5fb2JqZWN0cy5nZXQoZGF0YS5vYmplY3RJZCk7CisgICAgICAgICAg
ICBsZXQgcmVzdWx0ID0gb2JqZWN0W2RhdGEubWV0aG9kTmFtZV0oLi4uZGF0YS5tZXRob2RBcmd1
bWVudHMpOworICAgICAgICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7Y2FsbElkOiBkYXRhLmNhbGxJ
ZCwgcmVzdWx0fSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBj
b25zb2xlLmVycm9yKCJVbmV4cGVjdGVkIEhlYXBTbmFwc2hvdFdvcmtlciBtZXNzYWdlIiwgZGF0
YSk7CisgICAgfQorfTsKKworc2VsZi5oZWFwU25hcHNob3RXb3JrZXIgPSBuZXcgSGVhcFNuYXBz
aG90V29ya2VyOwo=
</data>
<flag name="review"
          id="298737"
          type_id="1"
          status="+"
          setter="timothy"
    />
    <flag name="commit-queue"
          id="298738"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>