<?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>130145</bug_id>
          
          <creation_ts>2014-03-12 11:24:46 -0700</creation_ts>
          <short_desc>Web Inspector: add frontend controller and models for replay sessions</short_desc>
          <delta_ts>2014-03-21 05:33:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>129217</dependson>
          <blocked>129692</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Blaze Burg">bburg</reporter>
          <assigned_to name="Blaze Burg">bburg</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>989747</commentid>
    <comment_count>0</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-03-12 11:24:46 -0700</bug_when>
    <thetext>Prerequisite to further UI work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992315</commentid>
    <comment_count>1</comment_count>
      <attachid>227234</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-03-19 16:45:07 -0700</bug_when>
    <thetext>Created attachment 227234
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992320</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-19 16:47:43 -0700</bug_when>
    <thetext>Attachment 227234 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/scripts/CodeGeneratorInspector.py:48:  whitespace before &apos;}&apos;  [pep8/E202] [5]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992321</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-03-19 16:48:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/16373707&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992322</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-03-19 16:50:54 -0700</bug_when>
    <thetext>&lt;rdar://problem/16373726&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992796</commentid>
    <comment_count>5</comment_count>
      <attachid>227234</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-03-20 16:39:24 -0700</bug_when>
    <thetext>Comment on attachment 227234
the patch

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

r=me

&gt; Source/WebInspectorUI/ChangeLog:34
&gt; +        (WebInspector.ReplayManager.prototype.getSession.get var):
&gt; +        (WebInspector.ReplayManager.prototype.getSegment.get var):

I wonder what prepare-ChangeLog is doing creating these lines. There are lots of unnecessary lines in this ChangeLog =(.

&gt; Source/JavaScriptCore/inspector/scripts/CodeGeneratorInspector.py:48
&gt; +    &quot;Replay&quot;: &quot;WEB_REPLAY&quot;

Nit: Following comma! It makes future patches suave, without a - line =)

&gt; Source/WebInspectorUI/UserInterface/Base/Test.js:39
&gt; +    if (InspectorBackend.registerReplayDispatcher)
&gt; +        InspectorBackend.registerReplayDispatcher(new WebInspector.ReplayObserver);

No need for the if check in Test.js right? That is tied to tip of tree.

&gt; Source/WebInspectorUI/UserInterface/Base/Test.js:129
&gt; +    this.evaluateInPage(&quot;InspectorTestProxy.debugLog(unescape(&apos;&quot; + escape(JSON.stringify(message)) + &quot;&apos;))&quot;);

What is going on here? With the single quotes this will be a literal string. Did this intend to be &apos;&quot;&apos; + ... + &apos;&quot;&apos;?

&gt; Source/WebInspectorUI/UserInterface/Base/Test.js:163
&gt; +        this.evaluateInPage(&quot;InspectorTestProxy.addResult(unescape(&apos;&quot; + escape(text) + &quot;&apos;))&quot;);

Same.

&gt; Source/WebInspectorUI/UserInterface/Base/Test.js:199
&gt; +    return PageAgent.reload.promise(!!shouldIgnoreCache)
&gt; +    .then(function() {
&gt; +        this._shouldResendResults = true;
&gt; +        this._testPageIsReloading = true;
&gt; +
&gt; +        return Promise.resolve(null);
&gt; +    });

Style: I like the style you used later with promises. Indent the .then(function() { ... }).

&gt; Source/WebInspectorUI/UserInterface/Controllers/ReplayManager.js:41
&gt; +    // THese hold promises that resolve when the instance data is recieved.

Typo: &quot;THese&quot; =&gt; &quot;These&quot;

&gt; Source/WebInspectorUI/UserInterface/Controllers/ReplayManager.js:257
&gt; +                var removedSession = manager._sessions.take(sessionId);

Nit: console.assert(removedSession);

&gt; Source/WebInspectorUI/UserInterface/Controllers/ReplayManager.js:280
&gt; +        this._segmentPromises.delete(segmentId);

Can this._segmentPromises(segmentId) potentially have unresolved/unrejected promises at this point? If that is the case, can we carry over the promises to the new segment promise? Maybe the segmentId can change here, so that might not be possible.

&gt; Source/WebInspectorUI/UserInterface/Models/ReplaySession.js:60
&gt; +        ReplayAgent.getSerializedSession.promise(this.identifier)
&gt; +            .then(this._updateFromPayload.bind(this));

I would expect this to use WebInspector.ReplayManager getSession to share the same getSerializedSession calls instead of repeating the backend work.

&gt; Source/WebInspectorUI/UserInterface/Models/ReplaySession.js:83
&gt; +

Nit: unnecessary blank line

&gt; Source/WebInspectorUI/UserInterface/Models/ReplaySessionSegment.js:68
&gt; +

Nit: Unnecessary blank line.

&gt; LayoutTests/inspector/replay/replay-test.js:37
&gt; +    .then(function() {
&gt; +        InspectorTest.log(&quot;Capturing has started.&quot;);
&gt; +        return new Promise(function waitToCaptureInitialNavigation(resolve, reject) {
&gt; +            InspectorTest.log(&quot;Waiting to capture initial navigation...&quot;);
&gt; +            InspectorTest.eventDispatcher.addEventListener(InspectorTest.EventDispatcher.Event.TestPageDidLoad, resolve);
&gt; +        });
&gt; +    })
&gt; +    .then(function() {
&gt; +        InspectorTest.log(&quot;Initial navigation captured. Dumping state....&quot;);
&gt; +        return RuntimeAgent.evaluate.promise(&quot;dumpNondeterministicState()&quot;);
&gt; +    })
&gt; +    .then(function(payload) {

I hate to admit it, but this test is awesome. Very slick.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992900</commentid>
    <comment_count>6</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-03-20 21:45:40 -0700</bug_when>
    <thetext>Committed r166040: &lt;http://trac.webkit.org/changeset/166040&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993027</commentid>
    <comment_count>7</comment_count>
      <attachid>227234</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-03-21 05:33:54 -0700</bug_when>
    <thetext>Comment on attachment 227234
the patch

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

&gt; Source/WebInspectorUI/UserInterface/Base/Test.js:193
&gt; -    PageAgent.reload.invoke({ignoreCache: !!shouldIgnoreCache});
&gt; +    return PageAgent.reload.promise(!!shouldIgnoreCache)

You could make invoke still work with promises. See my comment in InspectorBackend.js.

&gt;&gt; Source/WebInspectorUI/UserInterface/Base/Test.js:199
&gt;&gt; +    });
&gt; 
&gt; Style: I like the style you used later with promises. Indent the .then(function() { ... }).

I would put &quot;.then(function() {&quot; on previous line. I think the extra indentation of the body is too much in the later examples.

&gt; Source/WebInspectorUI/UserInterface/Controllers/ReplayManager.js:255
&gt; +            })
&gt; +            .then(function() {

I&apos;d like to see these on the same line.

Analogous to } else if(...) { being one line in our style guide.

&gt; Source/WebInspectorUI/UserInterface/Models/ReplaySession.js:73
&gt; +        var session = this;

Why not bind?

&gt; Source/WebInspectorUI/UserInterface/Models/ReplaySession.js:74
&gt; +        Promise.all(pendingSegments).then(

Same line here looks good to me.

&gt; Source/WebInspectorUI/UserInterface/Models/ReplaySessionSegment.js:57
&gt; +    // XXX: make objects for the queues and inputs?

FIXME?

&gt; Source/WebInspectorUI/UserInterface/Protocol/InspectorBackend.js:79
&gt;          agent[domainAndMethod[1]] = this._sendMessageToBackend.bind(this, method, signature);
&gt;          agent[domainAndMethod[1]][&quot;invoke&quot;] = this._invoke.bind(this, method, signature);
&gt; +        agent[domainAndMethod[1]][&quot;promise&quot;] = this._promise.bind(this, method, signature);

I am not sold on &quot;promise&quot; as the API for this (maybe another name?). But I think we should fold promises deeper and make the normal method and invoke return a promise if the callback argument is null/undefined. This way you can use invoke and still use a promise result. (In the rare case where we call a backend method with no callback on purpose, the caller would just ignore the Promise result. I assume the Promise will still fulfill even if then() isn&apos;t called? Nut I guess that is as simple as adding .then() in those spots — or maybe an alias we add to Promise.prototype like .fulfill()?)

&gt;&gt; LayoutTests/inspector/replay/replay-test.js:37
&gt;&gt; +    .then(function(payload) {
&gt; 
&gt; I hate to admit it, but this test is awesome. Very slick.

Very!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227234</attachid>
            <date>2014-03-19 16:45:07 -0700</date>
            <delta_ts>2014-03-21 05:33:54 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>bug-130145-20140319164447.patch</filename>
            <type>text/plain</type>
            <size>58004</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY1OTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NTdiY2QwYTkwYjNlNWI5ZmEwNzVkZTA1OTk5NWI1Mzk3YzYxYTRkLi40YzQ3MDRiNDM4MDdiMzZm
OGUyMDQwZjYzNGEzNTAzNWM5MWZkN2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxNC0wMy0xOCAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBhZGQgZnJvbnRlbmQgY29udHJvbGxlciBhbmQgbW9kZWxz
IGZvciByZXBsYXkgc2Vzc2lvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzMDE0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
eTogQWRkIHRoZSBjb25kaXRpb25hbCBSZXBsYXkgZG9tYWluLgorCiAyMDE0LTAzLTEzICBNYXJr
IEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgR0MgdGltZXIg
c2hvdWxkIGludGVsbGlnZW50bHkgY2hvb3NlIGJldHdlZW4gRWRlbkNvbGxlY3Rpb25zIGFuZCBG
dWxsQ29sbGVjdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDU2NDE5MjgwNzFiN2Zi
YTFjNzQ4ZmQ2MzliMDIzNzlhOTY1YjgwZTEuLmJhNjI1Yzg3Zjc4NWRhZTI0N2U3NWI3OWQyZGM2
N2QzZjc3YmQ4NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMiBAQAor
MjAxNC0wMy0xOCAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIg
SW5zcGVjdG9yOiBhZGQgZnJvbnRlbmQgY29udHJvbGxlciBhbmQgbW9kZWxzIGZvciByZXBsYXkg
c2Vzc2lvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMDE0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFVwc3RyZWFtIHRoZSBmcm9udGVuZCBtb2RlbHMgYW5kIGNvbnRyb2xsZXIgZm9yIHdlYiByZXBs
YXkuIFRoZSByZXBsYXkgbWFuYWdlcgorICAgICAgICBzeW5jcyB3aXRoIHRoZSBiYWNrZW5kIGNv
bnRyb2xsZXIncyByZXBsYXkgc3RhdGUgYW5kIHJlcGxheSBzZXNzaW9ucyBieSB1c2luZworICAg
ICAgICB0aGUgc2FtZSBzdGF0ZSBtYWNoaW5lcyBhbmQgdHJhbnNpdGlvbnMuCisKKyAgICAgICAg
U2Vzc2lvbiBhbmQgc2VnbWVudCBtb2RlbHMgdXBkYXRlIHRoZWlyIGRhdGEgYXN5bmNocm9ub3Vz
bHkgdXNpbmcgcHJvbWlzZXMuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5sb2FkZWQpOiBBZGQgdGhlIHJlcGxheSBtYW5hZ2Vy
LgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQmFzZS9UZXN0LmpzOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLmxvYWRlZCk6IEFkZCB0aGUgcmVwbGF5IG1hbmFnZXIuCisgICAgICAgIChJbnNwZWN0
b3JUZXN0LmRlYnVnTG9nKTogRml4IGEgYnVnIGluIHRoZSB1bmVzY2FwZS9lc2NhcGUgdHJpY2su
CisgICAgICAgIChJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCk6IERvbid0IHRyeSB0byBhZGQgcmVz
dWx0cyB1bnRpbCB0aGUgdGVzdCBwYWdlIGhhcyBsb2FkZWQuCisgICAgICAgIChJbnNwZWN0b3JU
ZXN0LnRlc3RQYWdlRGlkTG9hZCk6IENsZWFyIHRoZSBpc1JlbG9hZGluZyBmbGFnLgorICAgICAg
ICAoSW5zcGVjdG9yVGVzdC5yZWxvYWRQYWdlKTogUmVpbXBsZW1lbnQgdXNpbmcgcHJvbWlzZXMu
IFJldHVybiBhIHByb21pc2UuCisgICAgICAgICogVXNlckludGVyZmFjZS9CYXNlL1V0aWxpdGll
cy5qczogSW1wbGVtZW50IE1hcC50YWtlIGluIHRoZSBvYnZpb3VzIHdheS4KKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1JlcGxheU1hbmFnZXIuanM6IEFkZGVkLgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZS5nZXQgc2Vzc2lv
blN0YXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZS5n
ZXQgc2VnbWVudFN0YXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnBy
b3RvdHlwZS5nZXQgYWN0aXZlU2Vzc2lvbklkZW50aWZpZXIpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlLmdldCBhY3RpdmVTZWdtZW50SWRlbnRpZmllcik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUuZ2V0IHBsYXli
YWNrU3BlZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBl
LnNldCBwbGF5YmFja1NwZWVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2Vy
LnByb3RvdHlwZS5nZXQgY3VycmVudFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXBsYXlNYW5hZ2VyLnByb3RvdHlwZS5nZXRTZXNzaW9uLmdldCB2YXIpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlLmdldFNlZ21lbnQuZ2V0IHZhcik6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUuY2FwdHVyZVN0YXJ0
ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlLmNhcHR1
cmVTdG9wcGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlw
ZS5wbGF5YmFja1N0YXJ0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIu
cHJvdG90eXBlLnBsYXliYWNrSGl0UG9zaXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJl
cGxheU1hbmFnZXIucHJvdG90eXBlLnBsYXliYWNrUGF1c2VkKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZS5wbGF5YmFja0ZpbmlzaGVkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZS5zZXNzaW9uQ3JlYXRlZC5zZXQg
Y2F0Y2gpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlLnNl
c3Npb25DcmVhdGVkLnRoaXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIu
cHJvdG90eXBlLnNlc3Npb25DcmVhdGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlN
YW5hZ2VyLnByb3RvdHlwZS5zZXNzaW9uTW9kaWZpZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlJlcGxheU1hbmFnZXIucHJvdG90eXBlLnNlc3Npb25SZW1vdmVkLnRoZW4pOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlLnNlc3Npb25SZW1vdmVkKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZS5zZWdtZW50Q3JlYXRl
ZC5zZXQgdGhpcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5
cGUuc2VnbWVudENvbXBsZXRlZC5zZXQgY2F0Y2gpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJl
cGxheU1hbmFnZXIucHJvdG90eXBlLnNlZ21lbnRDb21wbGV0ZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlLnNlZ21lbnRSZW1vdmVkLnRoZW4pOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlLnNlZ21lbnRSZW1vdmVk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZS5zZWdtZW50
TG9hZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZS5z
ZWdtZW50VW5sb2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJv
dG90eXBlLnN0YXJ0Q2FwdHVyaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5h
Z2VyLnByb3RvdHlwZS5zdG9wQ2FwdHVyaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBs
YXlNYW5hZ2VyLnByb3RvdHlwZS5yZXBsYXlUb01hcmtJbmRleCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUucmVwbGF5VG9Db21wbGV0aW9uKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZS5wYXVzZVBsYXliYWNrKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZS5zdG9wUGxheWJh
Y2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlLl9jaGFu
Z2VTZXNzaW9uU3RhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJv
dG90eXBlLl9jaGFuZ2VTZWdtZW50U3RhdGUpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFp
bi5odG1sOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1JlcGxheVNlc3Npb24uanM6
IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheVNlc3Npb24pOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlJlcGxheVNlc3Npb24uZnJvbVBheWxvYWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlJlcGxheVNlc3Npb24ucHJvdG90eXBlLmdldCBzZWdtZW50cyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuUmVwbGF5U2Vzc2lvbi5wcm90b3R5cGUuc2VnbWVudHNDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlTZXNzaW9uLnByb3RvdHlwZS5fdXBkYXRlRnJvbVBh
eWxvYWQpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1JlcGxheVNlc3Npb25TZWdt
ZW50LmpzOiBBZGRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5JbmNvbXBsZXRlU2Vzc2lvblNl
Z21lbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkluY29tcGxldGVTZXNzaW9uU2VnbWVudC5w
cm90b3R5cGUuZ2V0IGlzQ29tcGxldGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheVNl
c3Npb25TZWdtZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlTZXNzaW9uU2VnbWVu
dC5wcm90b3R5cGUuZ2V0IGlzQ29tcGxldGUpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJv
dG9jb2wvSW5zcGVjdG9yQmFja2VuZC5qczoKKyAgICAgICAgKEluc3BlY3RvckJhY2tlbmRDbGFz
cy5wcm90b3R5cGUucmVnaXN0ZXJDb21tYW5kKToKKyAgICAgICAgKEluc3BlY3RvckJhY2tlbmRD
bGFzcy5wcm90b3R5cGUuX3Byb21pc2UpOiBBZGQgYSBwcm9taXNlLXJldHVybmluZyBtZXRob2Qg
Zm9yCisgICAgICAgIGludm9raW5nIGJhY2tlbmQgY29tbWFuZHMgdGhhdCByZXR1cm4gYSByZXN1
bHQgYXN5bmNocm9ub3VzbHkuCisgICAgICAgICogVXNlckludGVyZmFjZS9Qcm90b2NvbC9SZXBs
YXlPYnNlcnZlci5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVwbGF5UG9zaXRp
b24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheVBvc2l0aW9uLmZyb21Qcm90b2NvbCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVwbGF5T2JzZXJ2ZXIpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlJlcGxheU9ic2VydmVyLnByb3RvdHlwZS5jYXB0dXJlU3RhcnRlZCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuUmVwbGF5T2JzZXJ2ZXIucHJvdG90eXBlLmNhcHR1cmVTdG9wcGVkKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlPYnNlcnZlci5wcm90b3R5cGUucGxheWJhY2tT
dGFydGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlPYnNlcnZlci5wcm90b3R5cGUu
cGxheWJhY2tIaXRQb3NpdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVwbGF5T2JzZXJ2
ZXIucHJvdG90eXBlLnBsYXliYWNrUGF1c2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBs
YXlPYnNlcnZlci5wcm90b3R5cGUucGxheWJhY2tGaW5pc2hlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuUmVwbGF5T2JzZXJ2ZXIucHJvdG90eXBlLmlucHV0U3VwcHJlc3Npb25DaGFuZ2VkKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlPYnNlcnZlci5wcm90b3R5cGUuc2Vzc2lvbkNy
ZWF0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheU9ic2VydmVyLnByb3RvdHlwZS5z
ZXNzaW9uTW9kaWZpZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheU9ic2VydmVyLnBy
b3RvdHlwZS5zZXNzaW9uUmVtb3ZlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVwbGF5T2Jz
ZXJ2ZXIucHJvdG90eXBlLnNlc3Npb25Mb2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJl
cGxheU9ic2VydmVyLnByb3RvdHlwZS5zZWdtZW50Q3JlYXRlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuUmVwbGF5T2JzZXJ2ZXIucHJvdG90eXBlLnNlZ21lbnRSZW1vdmVkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5SZXBsYXlPYnNlcnZlci5wcm90b3R5cGUuc2VnbWVudENvbXBsZXRlZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVwbGF5T2JzZXJ2ZXIucHJvdG90eXBlLnNlZ21lbnRM
b2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheU9ic2VydmVyLnByb3RvdHlwZS5z
ZWdtZW50VW5sb2FkZWQpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGVzdC5odG1sOgorCiAy
MDE0LTAzLTE4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgV2ViIEluc3BlY3RvcjogTWFrZSB1cGRhdGUtSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLnJi
IG9ubHkgdXBkYXRlIGxlZ2FjeSBwcm90b2NvbCB2ZXJzaW9ucwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3Iu
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weQppbmRleCA5YzYxOTVmZjRlNGZiZGE1ZjIwYTI2MDRmZWFmOGZhM2JjMGQ4
NDM2Li5lMGQ1NTk0YzQ1ZjhmYjk3ZTQ0NDI4M2U4ZjJmY2VmYjkzYmE5ZDU0IDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtNDUsNiArNDUsNyBAQCBpbXBvcnQgQ29kZUdl
bmVyYXRvckluc3BlY3RvclN0cmluZ3MKIERPTUFJTl9ERUZJTkVfTkFNRV9NQVAgPSB7CiAgICAg
IkRhdGFiYXNlIjogIlNRTF9EQVRBQkFTRSIsCiAgICAgIkluZGV4ZWREQiI6ICJJTkRFWEVEX0RB
VEFCQVNFIiwKKyAgICAiUmVwbGF5IjogIldFQl9SRVBMQVkiCiB9CiAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCmluZGV4IGZjYWYwOTgz
YTU2MGJjOWQxNzNmZWY0Njk5MjkzY2RkYjc4ZTQzNDcuLmE3ODJhMDlmYTVjMDFkNDg5YjY2ZTBk
YzhhZjYzMzdjYzJlMTlhMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0Jhc2UvTWFpbi5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9CYXNlL01haW4uanMKQEAgLTg0LDYgKzg0LDggQEAgV2ViSW5zcGVjdG9yLmxvYWRl
ZCA9IGZ1bmN0aW9uKCkKICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckxheWVyVHJl
ZURpc3BhdGNoZXIobmV3IFdlYkluc3BlY3Rvci5MYXllclRyZWVPYnNlcnZlcik7CiAgICAgaWYg
KEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJSdW50aW1lRGlzcGF0Y2hlcikKICAgICAgICAgSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlclJ1bnRpbWVEaXNwYXRjaGVyKG5ldyBXZWJJbnNwZWN0b3Iu
UnVudGltZU9ic2VydmVyKTsKKyAgICBpZiAoSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclJlcGxh
eURpc3BhdGNoZXIpCisgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJSZXBsYXlEaXNw
YXRjaGVyKG5ldyBXZWJJbnNwZWN0b3IuUmVwbGF5T2JzZXJ2ZXIpOwogCiAgICAgLy8gRW5hYmxl
IGFnZW50cy4KICAgICBpZiAod2luZG93Lkluc3BlY3RvckFnZW50KQpAQCAtMTE1LDYgKzExNyw3
IEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5sYXllclRyZWVN
YW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyOwogICAgIHRoaXMuZGFz
aGJvYXJkTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuRGFzaGJvYXJkTWFuYWdlcjsKICAgICB0
aGlzLnByb2JlTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuUHJvYmVNYW5hZ2VyOworICAgIHRo
aXMucmVwbGF5TWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlcjsKIAogICAg
IC8vIEVuYWJsZSB0aGUgQ29uc29sZSBBZ2VudCBhZnRlciBjcmVhdGluZyB0aGUgc2luZ2xldG9u
IG1hbmFnZXJzLgogICAgIGlmICh3aW5kb3cuQ29uc29sZUFnZW50KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9UZXN0LmpzIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9UZXN0LmpzCmluZGV4IDY5NDJmNjAwZGEx
MzViNzI4NmNlM2Y2OWFlNmQwNTA0MDZhZDVlZGEuLjQxYTg1MzFhNmZjZWYzYmFlNDNmN2Y3M2Rh
M2JkYzEwMTc5ZDQ4YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0Jhc2UvVGVzdC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9CYXNlL1Rlc3QuanMKQEAgLTM1LDYgKzM1LDggQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9
IGZ1bmN0aW9uKCkKICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyVGltZWxpbmVEaXNwYXRj
aGVyKG5ldyBXZWJJbnNwZWN0b3IuVGltZWxpbmVPYnNlcnZlcik7CiAgICAgSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNTU0Rpc3BhdGNoZXIobmV3IFdlYkluc3BlY3Rvci5DU1NPYnNlcnZlcik7
CiAgICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclJ1bnRpbWVEaXNwYXRjaGVyKG5ldyBXZWJJ
bnNwZWN0b3IuUnVudGltZU9ic2VydmVyKTsKKyAgICBpZiAoSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlclJlcGxheURpc3BhdGNoZXIpCisgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJS
ZXBsYXlEaXNwYXRjaGVyKG5ldyBXZWJJbnNwZWN0b3IuUmVwbGF5T2JzZXJ2ZXIpOwogCiAgICAg
Ly8gSW5zdGFudGlhdGUgY29udHJvbGxlcnMgdXNlZCBieSB0ZXN0cy4KICAgICB0aGlzLmZyYW1l
UmVzb3VyY2VNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlcjsK
QEAgLTQ0LDYgKzQ2LDcgQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICB0
aGlzLnRpbWVsaW5lTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyOwog
ICAgIHRoaXMuZGVidWdnZXJNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFn
ZXI7CiAgICAgdGhpcy5wcm9iZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlByb2JlTWFuYWdl
cjsKKyAgICB0aGlzLnJlcGxheU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFn
ZXI7CiAKICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwg
dGhpcy5jb250ZW50TG9hZGVkLmJpbmQodGhpcykpOwogCkBAIC02OSw2ICs3MiwyOSBAQCBXZWJJ
bnNwZWN0b3IudXBkYXRlRG9ja2VkU3RhdGUgPSBmdW5jdGlvbigpCiAvLyB3aGljaCBhcmUgcHJv
dmlkZWQgYnkgYGluc3BlY3Rvci10ZXN0LmpzYC4KIEluc3BlY3RvclRlc3QgPSB7fTsKIAorLy8g
VGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHRoZSBmYWN0IHRoYXQgaXQgd291bGQgYmUgaGFyZCB0
byBzZXQgdXAgYSBjb25zdHJ1Y3RvciwKKy8vIHByb3RvdHlwZSwgYW5kIHByb3RvdHlwZSBjaGFp
biBmb3IgdGhlIHNpbmdsZXRvbiBJbnNwZWN0b3JUZXN0LgorSW5zcGVjdG9yVGVzdC5FdmVudERp
c3BhdGNoZXIgPSBmdW5jdGlvbigpCit7CisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRo
aXMpOworfTsKKworSW5zcGVjdG9yVGVzdC5FdmVudERpc3BhdGNoZXIuRXZlbnQgPSB7CisgICAg
VGVzdFBhZ2VEaWRMb2FkOiAiaW5zcGVjdG9yLXRlc3QtdGVzdC1wYWdlLWRpZC1sb2FkIgorfTsK
KworSW5zcGVjdG9yVGVzdC5FdmVudERpc3BhdGNoZXIucHJvdG90eXBlID0geworICAgIF9fcHJv
dG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUsCisgICAgY29uc3RydWN0b3I6IElu
c3BlY3RvclRlc3QuRXZlbnREaXNwYXRjaGVyLAorCisgICAgZGlzcGF0Y2hFdmVudDogZnVuY3Rp
b24oZXZlbnQpCisgICAgeworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhl
dmVudCk7CisgICAgfQorfTsKKworSW5zcGVjdG9yVGVzdC5ldmVudERpc3BhdGNoZXIgPSBuZXcg
SW5zcGVjdG9yVGVzdC5FdmVudERpc3BhdGNoZXI7CisKIC8vIE5vdGU6IEFkZGl0aW9uYWwgSW5z
cGVjdG9yVGVzdCBtZXRob2RzIGFyZSBpbmNsdWRlZCBvbiBhIHBlci10ZXN0IGJhc2lzIGZyb20K
IC8vIGZpbGVzIGxpa2UgYGRlYnVnZ2VyLXRlc3QuanNgLgogCkBAIC0xMDAsNyArMTI2LDcgQEAg
SW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0ID0gZnVuY3Rpb24oY29uZGl0aW9uLCBtZXNzYWdlKQog
Ly8gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIHRvIGRlYnVnIHRlc3RzIGFuZCBu
b3QgdG8gcHJvZHVjZSBub3JtYWwgdGVzdCBvdXRwdXQuCiBJbnNwZWN0b3JUZXN0LmRlYnVnTG9n
ID0gZnVuY3Rpb24obWVzc2FnZSkKIHsKLSAgICB0aGlzLmV2YWx1YXRlSW5QYWdlKCJJbnNwZWN0
b3JUZXN0UHJveHkuZGVidWdMb2codW5lc2NhcGUoIiArIGVzY2FwZShKU09OLnN0cmluZ2lmeSht
ZXNzYWdlKSkgKyAiKSkiKTsKKyAgICB0aGlzLmV2YWx1YXRlSW5QYWdlKCJJbnNwZWN0b3JUZXN0
UHJveHkuZGVidWdMb2codW5lc2NhcGUoJyIgKyBlc2NhcGUoSlNPTi5zdHJpbmdpZnkobWVzc2Fn
ZSkpICsgIicpKSIpOwogfQogCiBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCA9IGZ1bmN0aW9u
KCkKQEAgLTEzMiw3ICsxNTgsOSBAQCBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlID0gZnVu
Y3Rpb24oY29kZVN0cmluZywgY2FsbGJhY2spCiBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCA9IGZ1
bmN0aW9uKHRleHQpCiB7CiAgICAgdGhpcy5fcmVzdWx0cy5wdXNoKHRleHQpOwotICAgIHRoaXMu
ZXZhbHVhdGVJblBhZ2UoIkluc3BlY3RvclRlc3RQcm94eS5hZGRSZXN1bHQodW5lc2NhcGUoJyIg
KyBlc2NhcGUodGV4dCkgKyAiJykpIik7CisKKyAgICBpZiAoIXRoaXMuX3Rlc3RQYWdlSXNSZWxv
YWRpbmcpCisgICAgICAgIHRoaXMuZXZhbHVhdGVJblBhZ2UoIkluc3BlY3RvclRlc3RQcm94eS5h
ZGRSZXN1bHQodW5lc2NhcGUoJyIgKyBlc2NhcGUodGV4dCkgKyAiJykpIik7CiB9CiAKIEluc3Bl
Y3RvclRlc3QuX3Jlc2VuZFJlc3VsdHMgPSBmdW5jdGlvbihjYWxsYmFjaykKQEAgLTE1NCwxMyAr
MTgyLDIxIEBAIEluc3BlY3RvclRlc3QuX3Jlc2VuZFJlc3VsdHMgPSBmdW5jdGlvbihjYWxsYmFj
aykKIAogSW5zcGVjdG9yVGVzdC50ZXN0UGFnZURpZExvYWQgPSBmdW5jdGlvbigpCiB7Ci0gICAg
dGhpcy5fc2hvdWxkUmVzZW5kUmVzdWx0cyA9IHRydWU7CisgICAgdGhpcy5fdGVzdFBhZ2VJc1Jl
bG9hZGluZyA9IGZhbHNlOwogICAgIHRoaXMuX3Jlc2VuZFJlc3VsdHMoKTsKKworICAgIHRoaXMu
ZXZlbnREaXNwYXRjaGVyLmRpc3BhdGNoRXZlbnQoSW5zcGVjdG9yVGVzdC5FdmVudERpc3BhdGNo
ZXIuRXZlbnQuVGVzdFBhZ2VEaWRMb2FkKTsKIH0KIAogSW5zcGVjdG9yVGVzdC5yZWxvYWRQYWdl
ID0gZnVuY3Rpb24oc2hvdWxkSWdub3JlQ2FjaGUpCiB7Ci0gICAgUGFnZUFnZW50LnJlbG9hZC5p
bnZva2Uoe2lnbm9yZUNhY2hlOiAhIXNob3VsZElnbm9yZUNhY2hlfSk7CisgICAgcmV0dXJuIFBh
Z2VBZ2VudC5yZWxvYWQucHJvbWlzZSghIXNob3VsZElnbm9yZUNhY2hlKQorICAgIC50aGVuKGZ1
bmN0aW9uKCkgeworICAgICAgICB0aGlzLl9zaG91bGRSZXNlbmRSZXN1bHRzID0gdHJ1ZTsKKyAg
ICAgICAgdGhpcy5fdGVzdFBhZ2VJc1JlbG9hZGluZyA9IHRydWU7CisKKyAgICAgICAgcmV0dXJu
IFByb21pc2UucmVzb2x2ZShudWxsKTsKKyAgICB9KTsKIH0KIAogSW5zcGVjdG9yVGVzdC5yZXBv
cnRVbmNhdWdodEV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHVybCwgbGluZU51bWJlcikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvVXRp
bGl0aWVzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9VdGls
aXRpZXMuanMKaW5kZXggMjI4YzNlZGI5ZWMzZjQ1MjI4OWRhMjE0YjUwNzgzNzczZjk1NDc1YS4u
ZjU1NmFmMTQxODE0ZjlmM2JjYzQ0ZWI3NDIxODIyODk1NTQ4OGNiZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9VdGlsaXRpZXMuanMKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9VdGlsaXRpZXMuanMKQEAg
LTkwLDYgKzkwLDE2IEBAIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCAi
dmFsdWVGb3JDYXNlSW5zZW5zaXRpdmVLZXkiLAogICAgIH0KIH0pOwogCitPYmplY3QuZGVmaW5l
UHJvcGVydHkoTWFwLnByb3RvdHlwZSwgInRha2UiLAoreworICAgIHZhbHVlOiBmdW5jdGlvbihr
ZXkpCisgICAgeworICAgICAgICB2YXIgZGVsZXRlZFZhbHVlID0gdGhpcy5nZXQoa2V5KTsKKyAg
ICAgICAgdGhpcy5kZWxldGUoa2V5KTsKKyAgICAgICAgcmV0dXJuIGRlbGV0ZWRWYWx1ZTsKKyAg
ICB9Cit9KTsKKwogT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCAiZW5jbG9z
aW5nTm9kZU9yU2VsZldpdGhDbGFzcyIsCiB7CiAgICAgdmFsdWU6IGZ1bmN0aW9uKGNsYXNzTmFt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL1JlcGxheU1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Db250cm9sbGVycy9SZXBsYXlNYW5hZ2VyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2MTBhMWZjYmY1
NDlhOTMzNTEyMWQ1MmU1ODRjYjkwZWU5YTMzYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9SZXBsYXlNYW5hZ2VyLmpz
CkBAIC0wLDAgKzEsNDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rv
ci5SZXBsYXlNYW5hZ2VyID0gZnVuY3Rpb24oKQoreworICAgIFdlYkluc3BlY3Rvci5PYmplY3Qu
Y2FsbCh0aGlzKTsKKworICAgIHRoaXMuX3Nlc3Npb25TdGF0ZSA9IFdlYkluc3BlY3Rvci5SZXBs
YXlNYW5hZ2VyLlNlc3Npb25TdGF0ZS5JbmFjdGl2ZTsKKyAgICB0aGlzLl9zZWdtZW50U3RhdGUg
PSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZWdtZW50U3RhdGUuVW5sb2FkZWQ7CisKKyAg
ICB0aGlzLl9hY3RpdmVTZXNzaW9uSWRlbnRpZmllciA9IG51bGw7CisgICAgdGhpcy5fYWN0aXZl
U2VnbWVudElkZW50aWZpZXIgPSBudWxsOworICAgIHRoaXMuX2N1cnJlbnRQb3NpdGlvbiA9IG5l
dyBXZWJJbnNwZWN0b3IuUmVwbGF5UG9zaXRpb24oMCwgMCk7CisKKyAgICAvLyBUaGVzZSBob2xk
IGFjdHVhbCBpbnN0YW5jZXMgb2Ygc2Vzc2lvbnMgYW5kIHNlZ21lbnRzLgorICAgIHRoaXMuX3Nl
c3Npb25zID0gbmV3IE1hcDsKKyAgICB0aGlzLl9zZWdtZW50cyA9IG5ldyBNYXA7CisgICAgLy8g
VEhlc2UgaG9sZCBwcm9taXNlcyB0aGF0IHJlc29sdmUgd2hlbiB0aGUgaW5zdGFuY2UgZGF0YSBp
cyByZWNpZXZlZC4KKyAgICB0aGlzLl9zZXNzaW9uUHJvbWlzZXMgPSBuZXcgTWFwOworICAgIHRo
aXMuX3NlZ21lbnRQcm9taXNlcyA9IG5ldyBNYXA7CisKKyAgICAvLyBQbGF5YmFjayBzcGVlZCBp
cyBzcGVjaWZpZWQgaW4gcmVwbGF5VG9Qb3NpdGlvbiBjb21tYW5kcywgYW5kIHBlcnNpc3RzCisg
ICAgLy8gZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcGxheWJhY2sgY29tbWFuZCB1bnRpbCBhbm90
aGVyIHBsYXliYWNrIGJlZ2lucy4KKyAgICB0aGlzLl9wbGF5YmFja1NwZWVkID0gV2ViSW5zcGVj
dG9yLlJlcGxheU1hbmFnZXIuUGxheWJhY2tTcGVlZC5SZWFsVGltZTsKKworICAgIGlmICghd2lu
ZG93LlJlcGxheUFnZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBSZXBsYXlBZ2VudC5nZXRB
dmFpbGFibGVTZXNzaW9ucy5wcm9taXNlKCkKKyAgICAgICAgLnRoZW4oZnVuY3Rpb24oc2Vzc2lv
bklkcykgeworICAgICAgICAgICAgZm9yICh2YXIgc2Vzc2lvbklkIG9mIHNlc3Npb25JZHMpCisg
ICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnJlcGxheU1hbmFnZXIuc2Vzc2lvbkNyZWF0ZWQo
c2Vzc2lvbklkKTsKKyAgICAgICAgfSk7Cit9OworCitXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdl
ci5FdmVudCA9IHsKKyAgICBDYXB0dXJlU3RhcnRlZDogInJlcGxheS1tYW5hZ2VyLWNhcHR1cmUt
c3RhcnRlZCIsCisgICAgQ2FwdHVyZVN0b3BwZWQ6ICJyZXBsYXktbWFuYWdlci1jYXB0dXJlLXN0
b3BwZWQiLAorCisgICAgUGxheWJhY2tTdGFydGVkOiAicmVwbGF5LW1hbmFnZXItcGxheWJhY2st
c3RhcnRlZCIsCisgICAgUGxheWJhY2tQYXVzZWQ6ICJyZXBsYXktbWFuYWdlci1wbGF5YmFjay1w
YXVzZWQiLAorICAgIFBsYXliYWNrRmluaXNoZWQ6ICJyZXBsYXktbWFuYWdlci1wbGF5YmFjay1m
aW5pc2hlZCIsCisgICAgUGxheWJhY2tQb3NpdGlvbkNoYW5nZWQ6ICJyZXBsYXktbWFuYWdlci1w
bGF5LWJhY2stcG9zaXRpb24tY2hhbmdlZCIsCisKKyAgICBBY3RpdmVTZXNzaW9uQ2hhbmdlZDog
InJlcGxheS1tYW5hZ2VyLWFjdGl2ZS1zZXNzaW9uLWNoYW5nZWQiLAorICAgIEFjdGl2ZVNlZ21l
bnRDaGFuZ2VkOiAicmVwbGF5LW1hbmFnZXItYWN0aXZlLXNlZ21lbnQtY2hhbmdlZCIsCisKKyAg
ICBTZXNzaW9uU2VnbWVudEFkZGVkOiAicmVwbGF5LW1hbmFnZXItc2Vzc2lvbi1zZWdtZW50LWFk
ZGVkIiwKKyAgICBTZXNzaW9uU2VnbWVudFJlbW92ZWQ6ICJyZXBsYXktbWFuYWdlci1zZXNzaW9u
LXNlZ21lbnQtcmVtb3ZlZCIsCisKKyAgICBTZXNzaW9uQWRkZWQ6ICJyZXBsYXktbWFuYWdlci1z
ZXNzaW9uLWFkZGVkIiwKKyAgICBTZXNzaW9uUmVtb3ZlZDogInJlcGxheS1tYW5hZ2VyLXNlc3Np
b24tcmVtb3ZlZCIsCit9OworCitXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZXNzaW9uU3Rh
dGUgPSB7CisgICAgQ2FwdHVyaW5nOiAicmVwbGF5LW1hbmFnZXItc2Vzc2lvbi1zdGF0ZS1jYXB0
dXJpbmciLAorICAgIEluYWN0aXZlOiAicmVwbGF5LW1hbmFnZXItc2Vzc2lvbi1zdGF0ZS1pbmFj
dGl2ZSIsCisgICAgUmVwbGF5aW5nOiAicmVwbGF5LW1hbmFnZXItc2Vzc2lvbi1zdGF0ZS1yZXBs
YXlpbmciLAorfTsKKworV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuU2VnbWVudFN0YXRlID0g
eworICAgIEFwcGVuZGluZzogInJlcGxheS1tYW5hZ2VyLXNlZ21lbnQtc3RhdGUtYXBwZW5kaW5n
IiwKKyAgICBVbmxvYWRlZDogInJlcGxheS1tYW5hZ2VyLXNlZ21lbnQtc3RhdGUtdW5sb2FkZWQi
LAorICAgIExvYWRlZDogInJlcGxheS1tYW5hZ2VyLXNlZ21lbnQtc3RhdGUtbG9hZGVkIiwKKyAg
ICBEaXNwYXRjaGluZzogInJlcGxheS1tYW5hZ2VyLXNlZ21lbnQtc3RhdGUtZGlzcGF0Y2hpbmci
LAorfTsKKworV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuUGxheWJhY2tTcGVlZCA9IHsKKyAg
ICBSZWFsVGltZTogInJlcGxheS1tYW5hZ2VyLXBsYXliYWNrLXNwZWVkLXJlYWwtdGltZSIsCisg
ICAgRmFzdEZvcndhcmQ6ICJyZXBsYXktbWFuYWdlci1wbGF5YmFjay1zcGVlZC1mYXN0LWZvcndh
cmQiLAorfTsKKworV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0geworICAg
IGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlciwKKyAgICBfX3Byb3RvX186
IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorCisgICAgLy8gUHVibGljCisKKyAgICBn
ZXQgc2Vzc2lvblN0YXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zZXNzaW9uU3Rh
dGU7CisgICAgfSwKKworICAgIGdldCBzZWdtZW50U3RhdGUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3NlZ21lbnRTdGF0ZTsKKyAgICB9LAorCisgICAgZ2V0IGFjdGl2ZVNlc3Npb25J
ZGVudGlmaWVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVTZXNzaW9uSWRl
bnRpZmllcjsKKyAgICB9LAorCisgICAgZ2V0IGFjdGl2ZVNlZ21lbnRJZGVudGlmaWVyKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVTZWdtZW50SWRlbnRpZmllcjsKKyAgICB9
LAorCisgICAgZ2V0IHBsYXliYWNrU3BlZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X3BsYXliYWNrU3BlZWQ7CisgICAgfSwKKworICAgIHNldCBwbGF5YmFja1NwZWVkKHZhbHVlKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fcGxheWJhY2tTcGVlZCA9IHZhbHVlOworICAgIH0sCisKKyAg
ICBnZXQgY3VycmVudFBvc2l0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jdXJy
ZW50UG9zaXRpb247CisgICAgfSwKKworICAgIC8vIFRoZXNlIHJldHVybiBwcm9taXNlcyBldmVu
IGlmIHRoZSByZWxldmFudCBpbnN0YW5jZSBpcyBhbHJlYWR5IGNyZWF0ZWQuCisgICAgZ2V0U2Vz
c2lvbjogZnVuY3Rpb24oc2Vzc2lvbklkKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3Nlc3Np
b25Qcm9taXNlcy5oYXMoc2Vzc2lvbklkKSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZXNz
aW9uUHJvbWlzZXMuZ2V0KHNlc3Npb25JZCk7CisKKyAgICAgICAgdmFyIG5ld1Byb21pc2UgPSBS
ZXBsYXlBZ2VudC5nZXRTZXJpYWxpemVkU2Vzc2lvbi5wcm9taXNlKHNlc3Npb25JZCkKKyAgICAg
ICAgICAgIC50aGVuKGZ1bmN0aW9uKHBheWxvYWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
UHJvbWlzZS5yZXNvbHZlKFdlYkluc3BlY3Rvci5SZXBsYXlTZXNzaW9uLmZyb21QYXlsb2FkKHNl
c3Npb25JZCwgcGF5bG9hZCkpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5fc2Vz
c2lvblByb21pc2VzLnNldChzZXNzaW9uSWQsIG5ld1Byb21pc2UpOworICAgICAgICByZXR1cm4g
bmV3UHJvbWlzZTsKKyAgICB9LAorCisgICAgZ2V0U2VnbWVudDogZnVuY3Rpb24oc2VnbWVudElk
KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3NlZ21lbnRQcm9taXNlcy5oYXMoc2VnbWVudElk
KSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWdtZW50UHJvbWlzZXMuZ2V0KHNlZ21lbnRJ
ZCk7CisKKyAgICAgICAgdmFyIG5ld1Byb21pc2UgPSBSZXBsYXlBZ2VudC5nZXRTZXJpYWxpemVk
U2VnbWVudC5wcm9taXNlKHNlZ21lbnRJZCkKKyAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHBh
eWxvYWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBXZWJJ
bnNwZWN0b3IuUmVwbGF5U2Vzc2lvblNlZ21lbnQoc2VnbWVudElkLCBwYXlsb2FkKSk7CisgICAg
ICAgICAgICB9KTsKKworICAgICAgICB0aGlzLl9zZWdtZW50UHJvbWlzZXMuc2V0KHNlZ21lbnRJ
ZCwgbmV3UHJvbWlzZSk7CisgICAgICAgIHJldHVybiBuZXdQcm9taXNlOworICAgIH0sCisKKyAg
ICAvLyBQcm90ZWN0ZWQgKGNhbGxlZCBieSBSZXBsYXlPYnNlcnZlcikKKworICAgIGNhcHR1cmVT
dGFydGVkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jaGFuZ2VTZXNzaW9uU3Rh
dGUoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuU2Vzc2lvblN0YXRlLkNhcHR1cmluZyk7CisK
KyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJlcGxh
eU1hbmFnZXIuRXZlbnQuQ2FwdHVyZVN0YXJ0ZWQpOworICAgIH0sCisKKyAgICBjYXB0dXJlU3Rv
cHBlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2hhbmdlU2Vzc2lvblN0YXRl
KFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlc3Npb25TdGF0ZS5JbmFjdGl2ZSk7CisgICAg
ICAgIHRoaXMuX2NoYW5nZVNlZ21lbnRTdGF0ZShXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5T
ZWdtZW50U3RhdGUuVW5sb2FkZWQpOworCisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlz
dGVuZXJzKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LkNhcHR1cmVTdG9wcGVkKTsK
KyAgICB9LAorCisgICAgcGxheWJhY2tTdGFydGVkOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICBpZiAodGhpcy5zZXNzaW9uU3RhdGUgPT09IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNl
c3Npb25TdGF0ZS5JbmFjdGl2ZSkKKyAgICAgICAgICAgIHRoaXMuX2NoYW5nZVNlc3Npb25TdGF0
ZShXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZXNzaW9uU3RhdGUuUmVwbGF5aW5nKTsKKwor
ICAgICAgICB0aGlzLl9jaGFuZ2VTZWdtZW50U3RhdGUoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFn
ZXIuU2VnbWVudFN0YXRlLkRpc3BhdGNoaW5nKTsKKworICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5FdmVudC5QbGF5YmFja1N0
YXJ0ZWQpOworICAgIH0sCisKKyAgICBwbGF5YmFja0hpdFBvc2l0aW9uOiBmdW5jdGlvbihyZXBs
YXlQb3NpdGlvbiwgdGltZXN0YW1wKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhp
cy5zZXNzaW9uU3RhdGUgPT09IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlc3Npb25TdGF0
ZS5SZXBsYXlpbmcpOworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnNlZ21lbnRTdGF0ZSA9
PT0gV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuU2VnbWVudFN0YXRlLkRpc3BhdGNoaW5nKTsK
KyAgICAgICAgY29uc29sZS5hc3NlcnQocmVwbGF5UG9zaXRpb24gaW5zdGFuY2VvZiBXZWJJbnNw
ZWN0b3IuUmVwbGF5UG9zaXRpb24pOworCisgICAgICAgIHRoaXMuX2N1cnJlbnRQb3NpdGlvbiA9
IHJlcGxheVBvc2l0aW9uOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhX
ZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5FdmVudC5QbGF5YmFja1Bvc2l0aW9uQ2hhbmdlZCk7
CisgICAgfSwKKworICAgIHBsYXliYWNrUGF1c2VkOiBmdW5jdGlvbihtYXJrKQorICAgIHsKKyAg
ICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5zZXNzaW9uU3RhdGUgPT09IFdlYkluc3BlY3Rvci5S
ZXBsYXlNYW5hZ2VyLlNlc3Npb25TdGF0ZS5SZXBsYXlpbmcpOworICAgICAgICB0aGlzLl9jaGFu
Z2VTZWdtZW50U3RhdGUoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuU2VnbWVudFN0YXRlLkxv
YWRlZCk7CisKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVj
dG9yLlJlcGxheU1hbmFnZXIuRXZlbnQuUGxheWJhY2tQYXVzZWQpOworICAgIH0sCisKKyAgICBw
bGF5YmFja0ZpbmlzaGVkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jaGFuZ2VT
ZXNzaW9uU3RhdGUoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuU2Vzc2lvblN0YXRlLkluYWN0
aXZlKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5zZWdtZW50U3RhdGUgPT09IFdlYklu
c3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlZ21lbnRTdGF0ZS5VbmxvYWRlZCk7CisKKyAgICAgICAg
dGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIu
RXZlbnQuUGxheWJhY2tGaW5pc2hlZCk7CisgICAgfSwKKworICAgIHNlc3Npb25DcmVhdGVkOiBm
dW5jdGlvbihzZXNzaW9uSWQpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5f
c2Vzc2lvbnMuaGFzKHNlc3Npb25JZCksICJUcmllZCB0byBhZGQgZHVwbGljYXRlIHNlc3Npb24g
aWRlbnRpZmllcjoiLCBzZXNzaW9uSWQpOworICAgICAgICB2YXIgc2Vzc2lvbk1hcCA9IHRoaXMu
X3Nlc3Npb25zOworICAgICAgICB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKQorICAgICAgICAg
ICAgLnRoZW4oZnVuY3Rpb24oc2Vzc2lvbikgeworICAgICAgICAgICAgICAgIHNlc3Npb25NYXAu
c2V0KHNlc3Npb25JZCwgc2Vzc2lvbik7CisgICAgICAgICAgICB9KQorICAgICAgICAgICAgLmNh
dGNoKGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJy
b3Igb2J0YWluaW5nIHNlc3Npb24gZGF0YTogIiwgZXJyb3IpOworICAgICAgICAgICAgfSk7CisK
KyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJlcGxh
eU1hbmFnZXIuRXZlbnQuU2Vzc2lvbkNyZWF0ZWQsIHtzZXNzaW9uSWQ6IHNlc3Npb25JZH0pOwor
ICAgIH0sCisKKyAgICBzZXNzaW9uTW9kaWZpZWQ6IGZ1bmN0aW9uKHNlc3Npb25JZCkKKyAgICB7
CisgICAgICAgIHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLnRoZW4oZnVuY3Rpb24oc2Vzc2lv
bikgeworICAgICAgICAgICAgc2Vzc2lvbi5zZWdtZW50c0NoYW5nZWQoKTsKKyAgICAgICAgfSk7
CisgICAgfSwKKworICAgIHNlc3Npb25SZW1vdmVkOiBmdW5jdGlvbihzZXNzaW9uSWQpCisgICAg
eworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9zZXNzaW9ucy5oYXMoc2Vzc2lvbklkKSwg
IlVua25vd24gc2Vzc2lvbiBpZGVudGlmaWVyOiIsIHNlc3Npb25JZCk7CisKKyAgICAgICAgaWYg
KCF0aGlzLl9zZXNzaW9uUHJvbWlzZXMuaGFzKHNlc3Npb25JZCkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgdmFyIG1hbmFnZXIgPSB0aGlzOworCisgICAgICAgIC8vIFdhaXQgZm9y
IGFueSBvdXRzdGFuZGluZyBwcm9taXNlIHRvIHNldHRsZSBzbyBpdCBkb2Vzbid0IGdldCByZS1h
ZGRlZC4KKyAgICAgICAgdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkKKyAgICAgICAgICAgIC5j
YXRjaChmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJl
c29sdmUoKTsKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICAudGhlbihmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICBtYW5hZ2VyLl9zZXNzaW9uUHJvbWlzZXMuZGVsZXRlKHNlc3Npb25J
ZCk7CisgICAgICAgICAgICAgICAgdmFyIHJlbW92ZWRTZXNzaW9uID0gbWFuYWdlci5fc2Vzc2lv
bnMudGFrZShzZXNzaW9uSWQpOworICAgICAgICAgICAgICAgIG1hbmFnZXIuZGlzcGF0Y2hFdmVu
dFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LlNlc3Npb25SZW1v
dmVkLCB7cmVtb3ZlZFNlc3Npb246IHJlbW92ZWRTZXNzaW9ufSk7CisgICAgICAgICAgICB9KTsK
KyAgICB9LAorCisgICAgc2VnbWVudENyZWF0ZWQ6IGZ1bmN0aW9uKHNlZ21lbnRJZCkKKyAgICB7
CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl9zZWdtZW50cy5oYXMoc2VnbWVudElkKSwg
IlRyaWVkIHRvIGFkZCBkdXBsaWNhdGUgc2VnbWVudCBpZGVudGlmaWVyOiIsIHNlZ21lbnRJZCk7
CisKKyAgICAgICAgdGhpcy5fY2hhbmdlU2VnbWVudFN0YXRlKFdlYkluc3BlY3Rvci5SZXBsYXlN
YW5hZ2VyLlNlZ21lbnRTdGF0ZS5BcHBlbmRpbmcpOworCisgICAgICAgIC8vIENyZWF0ZSBhIGR1
bW15IHNlZ21lbnQsIGFuZCBkb24ndCB0cnkgdG8gbG9hZCBhbnkgZGF0YSBmb3IgaXQuIEl0IHdp
bGwKKyAgICAgICAgLy8gYmUgcmVtb3ZlZCBvbmNlIHRoZSBzZWdtZW50IGlzIGNvbXBsZXRlLCBh
bmQgdGhlbiBpdHMgZGF0YSB3aWxsIGJlIGZldGNoZWQuCisgICAgICAgIHZhciBpbmNvbXBsZXRl
U2VnbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuSW5jb21wbGV0ZVNlc3Npb25TZWdtZW50KHNlZ21l
bnRJZCk7CisgICAgICAgIHRoaXMuX3NlZ21lbnRzLnNldChzZWdtZW50SWQsIGluY29tcGxldGVT
ZWdtZW50KTsKKyAgICAgICAgdGhpcy5fc2VnbWVudFByb21pc2VzLnNldChzZWdtZW50SWQsIFBy
b21pc2UucmVzb2x2ZShpbmNvbXBsZXRlU2VnbWVudCkpOworCisgICAgICAgIHRoaXMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LlNlZ21l
bnRDcmVhdGVkLCB7c2VnbWVudElkZW50aWZpZXI6IHNlZ21lbnRJZH0pOworICAgIH0sCisKKyAg
ICBzZWdtZW50Q29tcGxldGVkOiBmdW5jdGlvbihzZWdtZW50SWQpCisgICAgeworICAgICAgICB0
aGlzLl9zZWdtZW50cy5kZWxldGUoc2VnbWVudElkKTsKKyAgICAgICAgdGhpcy5fc2VnbWVudFBy
b21pc2VzLmRlbGV0ZShzZWdtZW50SWQpOworCisgICAgICAgIHZhciBzZWdtZW50TWFwID0gdGhp
cy5fc2VnbWVudHM7CisgICAgICAgIHRoaXMuZ2V0U2VnbWVudChzZWdtZW50SWQpCisgICAgICAg
ICAgICAudGhlbihmdW5jdGlvbihzZWdtZW50KSB7CisgICAgICAgICAgICAgICAgc2VnbWVudE1h
cC5zZXQoc2VnbWVudElkLCBzZWdtZW50KTsKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICAu
Y2F0Y2goZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJF
cnJvciBvYnRhaW5pbmcgc2VnbWVudCBkYXRhOiAiLCBlcnJvcik7CisgICAgICAgICAgICB9KTsK
KyAgICB9LAorCisgICAgc2VnbWVudFJlbW92ZWQ6IGZ1bmN0aW9uKHNlZ21lbnRJZCkKKyAgICB7
CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3NlZ21lbnRzLmhhcyhzZWdtZW50SWQpLCAi
VW5rbm93biBzZWdtZW50IGlkZW50aWZpZXI6Iiwgc2VnbWVudElkKTsKKworICAgICAgICBpZiAo
IXRoaXMuX3NlZ21lbnRQcm9taXNlcy5oYXMoc2VnbWVudElkKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB2YXIgbWFuYWdlciA9IHRoaXM7CisKKyAgICAgICAgLy8gV2FpdCBmb3Ig
YW55IG91dHN0YW5kaW5nIHByb21pc2UgdG8gc2V0dGxlIHNvIGl0IGRvZXNuJ3QgZ2V0IHJlLWFk
ZGVkLgorICAgICAgICB0aGlzLmdldFNlZ21lbnQoc2VnbWVudElkKQorICAgICAgICAgICAgLmNh
dGNoKGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVz
b2x2ZSgpOworICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIG1hbmFnZXIuX3NlZ21lbnRQcm9taXNlcy5kZWxldGUoc2VnbWVudElk
KTsKKyAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZFNlZ21lbnQgPSBtYW5hZ2VyLl9zZWdtZW50
cy50YWtlKHNlZ21lbnRJZCk7CisgICAgICAgICAgICAgICAgbWFuYWdlci5kaXNwYXRjaEV2ZW50
VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuRXZlbnQuU2Vzc2lvblNlZ21l
bnRSZW1vdmVkLCB7cmVtb3ZlZFNlZ21lbnQ6IHJlbW92ZWRTZWdtZW50fSk7CisgICAgICAgICAg
ICB9KTsKKyAgICB9LAorCisgICAgc2VnbWVudExvYWRlZDogZnVuY3Rpb24oc2VnbWVudElkKQor
ICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fc2VnbWVudHMuaGFzKHNlZ21lbnRJ
ZCksICJVbmtub3duIHNlZ21lbnQgaWRlbnRpZmllcjoiLCBzZWdtZW50SWQpOworCisgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHRoaXMuc2Vzc2lvblN0YXRlICE9PSBXZWJJbnNwZWN0b3IuUmVwbGF5
TWFuYWdlci5TZXNzaW9uU3RhdGUuQ2FwdHVyaW5nKTsKKyAgICAgICAgdGhpcy5fY2hhbmdlU2Vn
bWVudFN0YXRlKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlZ21lbnRTdGF0ZS5Mb2FkZWQp
OworCisgICAgICAgIHRoaXMuX2FjdGl2ZVNlZ21lbnRJZGVudGlmaWVyID0gc2VnbWVudElkOwor
ICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVwbGF5
TWFuYWdlci5FdmVudC5TZWdtZW50TG9hZGVkKTsKKyAgIH0sCisKKyAgICBzZWdtZW50VW5sb2Fk
ZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuc2Vzc2lv
blN0YXRlID09PSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZXNzaW9uU3RhdGUuUmVwbGF5
aW5nKTsKKyAgICAgICAgdGhpcy5fY2hhbmdlU2VnbWVudFN0YXRlKFdlYkluc3BlY3Rvci5SZXBs
YXlNYW5hZ2VyLlNlZ21lbnRTdGF0ZS5VbmxvYWRlZCk7CisKKyAgICAgICAgdmFyIHVubG9hZGVk
U2VnbWVudElkZW50aWZpZXIgPSB0aGlzLl9hY3RpdmVTZWdtZW50SWRlbnRpZmllcjsKKyAgICAg
ICAgdGhpcy5fYWN0aXZlU2VnbWVudElkZW50aWZpZXIgPSBudWxsOworICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5FdmVudC5z
ZWdtZW50VW5sb2FkZWQsIHt1bmxvYWRlZFNlZ21lbnRJZGVudGlmaWVyOiB1bmxvYWRlZFNlZ21l
bnRJZGVudGlmaWVyfSk7CisgICAgfSwKKworICAgIC8vIFByaXZhdGUKKworICAgIC8vIEZJWE1F
OiB0aGVzZSBtZXRob2RzIHNob3VsZCBiZSBwcml2YXRlIGFuZCBvbmx5IGFjY2Vzc2VkIGJ5IGlt
cGxlbWVudGF0aW9ucyBvZiB0aGUgcHVibGljIEFQSSwKKyAgICAvLyB3aGljaCBzaG91bGQgcHJv
cGVybHkgY2hhaW4gYXN5bmMgY2FsbHMgbGVhZGluZyB1cCB0byB0aGVzZSBsb3ctbGV2ZWwgYmFj
a2VuZCBjYWxscy4gT3RoZXJ3aXNlLAorICAgIC8vIHRoZWlyIHByZWNvbmRpdGlvbnMgb24gc2Vz
c2lvbiBhbmQgc2VnbWVudCBzdGF0ZSBhcmUgdG9vIHN0cm9uZyBmb3Igc2NlbmFyaW9zIHRyaWdn
ZXJlZCBieSB0aGUgVUkuCisKKyAgICBzdGFydENhcHR1cmluZzogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5zZXNzaW9uU3RhdGUgPT09IFdlYkluc3BlY3Rv
ci5SZXBsYXlNYW5hZ2VyLlNlc3Npb25TdGF0ZS5JbmFjdGl2ZSk7CisgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KHRoaXMuc2VnbWVudFN0YXRlID09PSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5T
ZWdtZW50U3RhdGUuVW5sb2FkZWQpOworCisgICAgICAgIFJlcGxheUFnZW50LnN0YXJ0Q2FwdHVy
aW5nKCk7CisgICAgfSwKKworICAgIHN0b3BDYXB0dXJpbmc6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuc2Vzc2lvblN0YXRlID09PSBXZWJJbnNwZWN0b3Iu
UmVwbGF5TWFuYWdlci5TZXNzaW9uU3RhdGUuQ2FwdHVyaW5nKTsKKyAgICAgICAgY29uc29sZS5h
c3NlcnQodGhpcy5zZWdtZW50U3RhdGUgPT09IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNl
Z21lbnRTdGF0ZS5BcHBlbmRpbmcpOworCisgICAgICAgIFJlcGxheUFnZW50LnN0b3BDYXB0dXJp
bmcoKTsKKyAgICB9LAorCisgICAgcmVwbGF5VG9NYXJrSW5kZXg6IGZ1bmN0aW9uKHJlcGxheVBv
c2l0aW9uKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQocmVwbGF5UG9zaXRpb24gaW5z
dGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVwbGF5UG9zaXRpb24pOworCisgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KHRoaXMuc2Vzc2lvblN0YXRlICE9PSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5T
ZXNzaW9uU3RhdGUuQ2FwdHVyaW5nKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5zZWdt
ZW50U3RhdGUgPT09IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlZ21lbnRTdGF0ZS5Mb2Fk
ZWQpOworCisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rv
ci5SZXBsYXlNYW5hZ2VyLkV2ZW50LlBsYXliYWNrV2lsbFN0YXJ0KTsKKyAgICAgICAgUmVwbGF5
QWdlbnQucmVwbGF5VG9Qb3NpdGlvbihyZXBsYXlQb3NpdGlvbiwgdGhpcy5wbGF5YmFja1NwZWVk
ID09PSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5QbGF5YmFja1NwZWVkLkZhc3RGb3J3YXJk
KTsKKyAgICB9LAorCisgICAgcmVwbGF5VG9Db21wbGV0aW9uOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnNlc3Npb25TdGF0ZSAhPT0gV2ViSW5zcGVjdG9y
LlJlcGxheU1hbmFnZXIuU2Vzc2lvblN0YXRlLkNhcHR1cmluZyk7CisgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KHRoaXMuc2VnbWVudFN0YXRlID09PSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5T
ZWdtZW50U3RhdGUuTG9hZGVkKTsKKworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycyhXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5FdmVudC5QbGF5YmFja1dpbGxTdGFydCk7
CisgICAgICAgIFJlcGxheUFnZW50LnJlcGxheVRvQ29tcGxldGlvbih0aGlzLnBsYXliYWNrU3Bl
ZWQgPT09IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlBsYXliYWNrU3BlZWQuRmFzdEZvcndh
cmQpOworICAgIH0sCisKKyAgICBwYXVzZVBsYXliYWNrOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnNlc3Npb25TdGF0ZSA9PT0gV2ViSW5zcGVjdG9yLlJl
cGxheU1hbmFnZXIuU2Vzc2lvblN0YXRlLlJlcGxheWluZyk7CisgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHRoaXMuc2VnbWVudFN0YXRlID09PSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZWdt
ZW50U3RhdGUuRGlzcGF0Y2hpbmcpOworCisgICAgICAgIFJlcGxheUFnZW50LnBhdXNlUGxheWJh
Y2soKTsKKyAgICB9LAorCisgICAgc3RvcFBsYXliYWNrOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnNlc3Npb25TdGF0ZSA9PT0gV2ViSW5zcGVjdG9yLlJl
cGxheU1hbmFnZXIuU2Vzc2lvblN0YXRlLlJlcGxheWluZyk7CisgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHRoaXMuc2VnbWVudFN0YXRlID09PSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZWdt
ZW50U3RhdGUuTG9hZGVkKTsKKworICAgICAgICBSZXBsYXlBZ2VudC5zdG9wUGxheWJhY2soKTsK
KyAgICB9LAorCisgICAgLy8gUHJpdmF0ZQorCisgICAgX2NoYW5nZVNlc3Npb25TdGF0ZTogZnVu
Y3Rpb24obmV3U3RhdGUpCisgICAgeworICAgICAgICAvLyBXYXJuIGFib3V0IG5vLW9wIHN0YXRl
IGNoYW5nZXMuIFdlIHNob3VsZG4ndCBiZSBzZWVpbmcgdGhlbS4KKyAgICAgICAgdmFyIGlzQWxs
b3dlZCA9IHRoaXMuX3Nlc3Npb25TdGF0ZSAhPT0gbmV3U3RhdGU7CisKKyAgICAgICAgc3dpdGNo
ICh0aGlzLl9zZXNzaW9uU3RhdGUpIHsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuUmVwbGF5
TWFuYWdlci5TZXNzaW9uU3RhdGUuQ2FwdHVyaW5nOgorICAgICAgICAgICAgaXNBbGxvd2VkICY9
IG5ld1N0YXRlID09PSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZXNzaW9uU3RhdGUuSW5h
Y3RpdmU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5S
ZXBsYXlNYW5hZ2VyLlNlc3Npb25TdGF0ZS5SZXBsYXlpbmc6CisgICAgICAgICAgICBpc0FsbG93
ZWQgJj0gbmV3U3RhdGUgPT09IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlc3Npb25TdGF0
ZS5JbmFjdGl2ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY29u
c29sZS5hc3NlcnQoaXNBbGxvd2VkLCAiSW52YWxpZCBzZXNzaW9uIHN0YXRlIGNoYW5nZTogIiwg
dGhpcy5fc2Vzc2lvblN0YXRlLCAiIHRvICIsIG5ld1N0YXRlKTsKKyAgICAgICAgaWYgKGlzQWxs
b3dlZCkKKyAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25TdGF0ZSA9IG5ld1N0YXRlOworICAgIH0s
CisKKyAgICBfY2hhbmdlU2VnbWVudFN0YXRlOiBmdW5jdGlvbihuZXdTdGF0ZSkKKyAgICB7Cisg
ICAgICAgIC8vIFdhcm4gYWJvdXQgbm8tb3Agc3RhdGUgY2hhbmdlcy4gV2Ugc2hvdWxkbid0IGJl
IHNlZWluZyB0aGVtLgorICAgICAgICB2YXIgaXNBbGxvd2VkID0gdGhpcy5fc2VnbWVudFN0YXRl
ICE9PSBuZXdTdGF0ZTsKKworICAgICAgICBzd2l0Y2ggKHRoaXMuX3NlZ21lbnRTdGF0ZSkgewor
ICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZWdtZW50U3RhdGUu
QXBwZW5kaW5nOgorICAgICAgICAgICAgICAgIGlzQWxsb3dlZCAmPSBuZXdTdGF0ZSA9PT0gV2Vi
SW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuU2VnbWVudFN0YXRlLlVubG9hZGVkOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdl
ci5TZWdtZW50U3RhdGUuVW5sb2FkZWQ6CisgICAgICAgICAgICAgICAgaXNBbGxvd2VkICY9IG5l
d1N0YXRlID09PSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZWdtZW50U3RhdGUuQXBwZW5k
aW5nIHx8IG5ld1N0YXRlID09PSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZWdtZW50U3Rh
dGUuTG9hZGVkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZWdtZW50U3RhdGUuTG9hZGVkOgorICAgICAgICAgICAg
ICAgIGlzQWxsb3dlZCAmPSBuZXdTdGF0ZSA9PT0gV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIu
U2VnbWVudFN0YXRlLlVubG9hZGVkIHx8IG5ld1N0YXRlID09PSBXZWJJbnNwZWN0b3IuUmVwbGF5
TWFuYWdlci5TZWdtZW50U3RhdGUuRGlzcGF0Y2hpbmc7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlZ21lbnRTdGF0
ZS5EaXNwYXRjaGluZzoKKyAgICAgICAgICAgICAgICBpc0FsbG93ZWQgJj0gbmV3U3RhdGUgPT09
IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlZ21lbnRTdGF0ZS5Mb2FkZWQ7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjb25zb2xlLmFzc2VydChpc0Fs
bG93ZWQsICJJbnZhbGlkIHNlZ21lbnQgc3RhdGUgY2hhbmdlOiAiLCB0aGlzLl9zZWdtZW50U3Rh
dGUsICIgdG8gIiwgbmV3U3RhdGUpOworICAgICAgICBpZiAoaXNBbGxvd2VkKQorICAgICAgICAg
ICAgdGhpcy5fc2VnbWVudFN0YXRlID0gbmV3U3RhdGU7CisgICAgfQorfTsKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCmluZGV4IDg0N2Y1MTk5NDk5
Zjc4YmJlNmI4ZWNiMDIxOTAyMDg3YTY2ZjQ0YmEuLmVjM2FiZDg4ZmU0MjA3NjAyNThhMzQ3MGY0
N2EwZjZkOTQ0ODI1M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01haW4uaHRtbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9NYWluLmh0bWwKQEAgLTE5MCw2ICsxOTAsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJQcm90b2Nv
bC9OZXR3b3JrT2JzZXJ2ZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJQcm90b2Nv
bC9QYWdlT2JzZXJ2ZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJQcm90b2NvbC9S
ZW1vdGVPYmplY3QuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJQcm90b2NvbC9SZXBs
YXlPYnNlcnZlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sL1J1bnRp
bWVPYnNlcnZlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sL1RpbWVs
aW5lT2JzZXJ2ZXIuanMiPjwvc2NyaXB0PgogCkBAIC0yNDMsNiArMjQ0LDggQEAKICAgICA8c2Ny
aXB0IHNyYz0iTW9kZWxzL1Byb2ZpbGUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJN
b2RlbHMvUHJvZmlsZU5vZGUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMv
UHJvZmlsZU5vZGVDYWxsLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1Jl
cGxheVNlc3Npb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvUmVwbGF5
U2Vzc2lvblNlZ21lbnQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvUmVz
b3VyY2UuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvUmVzb3VyY2VDb2xs
ZWN0aW9uLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1Jlc291cmNlU2Vh
cmNoTWF0Y2hPYmplY3QuanMiPjwvc2NyaXB0PgpAQCAtNDc2LDYgKzQ3OSw3IEBACiAgICAgPHNj
cmlwdCBzcmM9IkNvbnRyb2xsZXJzL0xlZ2FjeVByb2ZpbGVNYW5hZ2VyLmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvTG9nTWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1Byb2JlTWFuYWdlci5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1JlcGxheU1hbmFnZXIuanMiPjwvc2NyaXB0Pgog
ICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9SdW50aW1lTWFuYWdlci5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1NvdXJjZU1hcE1hbmFnZXIuanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9TdG9yYWdlTWFuYWdlci5qcyI+PC9z
Y3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9N
b2RlbHMvUmVwbGF5U2Vzc2lvbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01vZGVscy9SZXBsYXlTZXNzaW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjOWM3YWNiYjJmYTA3Yjk2
ZDdlNzY5YjU0Mjc3MzI0MzQ3YmE3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvUmVwbGF5U2Vzc2lvbi5qcwpAQCAtMCwwICsx
LDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworV2ViSW5zcGVjdG9yLlJlcGxheVNl
c3Npb24gPSBmdW5jdGlvbihpZGVudGlmaWVyKQoreworICAgIFdlYkluc3BlY3Rvci5PYmplY3Qu
Y2FsbCh0aGlzKTsKKworICAgIHRoaXMuaWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgdGhp
cy5fc2VnbWVudHMgPSBbXTsKKyAgICB0aGlzLl90aW1lc3RhbXAgPSBudWxsOworfTsKKworV2Vi
SW5zcGVjdG9yLlJlcGxheVNlc3Npb24uZnJvbVBheWxvYWQgPSBmdW5jdGlvbihpZGVudGlmaWVy
LCBwYXlsb2FkKQoreworICAgIHZhciBzZXNzaW9uID0gbmV3IFdlYkluc3BlY3Rvci5SZXBsYXlT
ZXNzaW9uKGlkZW50aWZpZXIpOworICAgIHNlc3Npb24uX3VwZGF0ZUZyb21QYXlsb2FkKHBheWxv
YWQpOworICAgIHJldHVybiBzZXNzaW9uOworfQorCitXZWJJbnNwZWN0b3IuUmVwbGF5U2Vzc2lv
bi5FdmVudCA9IHsKKyAgICBTZWdtZW50c0NoYW5nZWQ6ICJyZXBsYXktc2Vzc2lvbi1zZWdtZW50
cy1jaGFuZ2VkIiwKK307CisKK1dlYkluc3BlY3Rvci5SZXBsYXlTZXNzaW9uLnByb3RvdHlwZSA9
IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlJlcGxheVNlc3Npb24sCisgICAgX19w
cm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwKKworICAgIGdldCBzZWdtZW50
cygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2VnbWVudHMuc2xpY2UoKTsKKyAgICB9
LAorCisgICAgc2VnbWVudHNDaGFuZ2VkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBSZXBs
YXlBZ2VudC5nZXRTZXJpYWxpemVkU2Vzc2lvbi5wcm9taXNlKHRoaXMuaWRlbnRpZmllcikKKyAg
ICAgICAgICAgIC50aGVuKHRoaXMuX3VwZGF0ZUZyb21QYXlsb2FkLmJpbmQodGhpcykpOworICAg
IH0sCisKKyAgICBfdXBkYXRlRnJvbVBheWxvYWQ6IGZ1bmN0aW9uKHBheWxvYWQpCisgICAgewor
ICAgICAgICBjb25zb2xlLmFzc2VydChwYXlsb2FkLmlkID09PSB0aGlzLmlkZW50aWZpZXIpOwor
CisgICAgICAgIHZhciBzZWdtZW50SWRzID0gcGF5bG9hZC5zZWdtZW50czsKKyAgICAgICAgdmFy
IG9sZFNlZ21lbnRzID0gdGhpcy5fc2VnbWVudHM7CisgICAgICAgIHZhciBwZW5kaW5nU2VnbWVu
dHMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgc2VnbWVudElkIG9mIHNlZ21lbnRJZHMpCisgICAg
ICAgICAgICBwZW5kaW5nU2VnbWVudHMucHVzaChXZWJJbnNwZWN0b3IucmVwbGF5TWFuYWdlci5n
ZXRTZWdtZW50KHNlZ21lbnRJZCkpOworCisgICAgICAgIHZhciBzZXNzaW9uID0gdGhpczsKKyAg
ICAgICAgUHJvbWlzZS5hbGwocGVuZGluZ1NlZ21lbnRzKS50aGVuKAorICAgICAgICAgICAgZnVu
Y3Rpb24oc2VnbWVudHNBcnJheSkgeworICAgICAgICAgICAgICAgIHNlc3Npb24uX3NlZ21lbnRz
ID0gc2VnbWVudHNBcnJheTsKKyAgICAgICAgICAgICAgICBzZXNzaW9uLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVwbGF5U2Vzc2lvbi5FdmVudC5TZWdtZW50c0NoYW5n
ZWQsIHtvbGRTZWdtZW50czogb2xkU2VnbWVudHN9KTsKKyAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICBmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlBy
b2JsZW0gcmVzb2x2aW5nIHNlZ21lbnRzOiAiLCBlcnJvcik7CisgICAgICAgICAgICB9CisgICAg
ICAgICk7CisKKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTW9kZWxzL1JlcGxheVNlc3Npb25TZWdtZW50LmpzIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1JlcGxheVNlc3Npb25TZWdtZW50LmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmEwMmQyNjA0MzkwYzNmMWI0ZDIxMjYyZTVjNDE1MWM1OTYxNDU4YzAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMv
UmVwbGF5U2Vzc2lvblNlZ21lbnQuanMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisKK1dlYkluc3BlY3Rvci5JbmNvbXBsZXRlU2Vzc2lvblNlZ21lbnQgPSBmdW5j
dGlvbihpZGVudGlmaWVyKQoreworICAgIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsK
KworICAgIHRoaXMuaWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgdGhpcy5fdGltZXN0YW1w
ID0gRGF0ZS5ub3coKTsKK30KKworV2ViSW5zcGVjdG9yLkluY29tcGxldGVTZXNzaW9uU2VnbWVu
dC5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5JbmNvbXBsZXRl
U2Vzc2lvblNlZ21lbnQsCisgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3Rv
dHlwZSwKKworICAgIGdldCBpc0NvbXBsZXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9OworCitXZWJJbnNwZWN0b3IuUmVwbGF5U2Vzc2lvblNlZ21lbnQgPSBmdW5j
dGlvbihpZGVudGlmaWVyLCBwYXlsb2FkKQoreworICAgIFdlYkluc3BlY3Rvci5PYmplY3QuY2Fs
bCh0aGlzKTsKKworICAgIGNvbnNvbGUuYXNzZXJ0KGlkZW50aWZpZXIgPT09IHBheWxvYWQuaWQp
OworCisgICAgdGhpcy5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKyAgICB0aGlzLl90aW1lc3Rh
bXAgPSBwYXlsb2FkLnRpbWVzdGFtcDsKKworICAgIHRoaXMuX3F1ZXVlcyA9IHBheWxvYWQucXVl
dWVzOworCisgICAgLy8gWFhYOiBtYWtlIG9iamVjdHMgZm9yIHRoZSBxdWV1ZXMgYW5kIGlucHV0
cz8KK307CisKK1dlYkluc3BlY3Rvci5SZXBsYXlTZXNzaW9uU2VnbWVudC5wcm90b3R5cGUgPSB7
CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5SZXBsYXlTZXNzaW9uU2VnbWVudCwKKyAg
ICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorCisgICAgZ2V0IGlz
Q29tcGxldGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCit9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvSW5z
cGVjdG9yQmFja2VuZC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1By
b3RvY29sL0luc3BlY3RvckJhY2tlbmQuanMKaW5kZXggNmIwNTc1MGZiMzNkY2U4NDEzZDlkOTgw
ODI4ZjE0OWExMmIwZjYwNi4uNTk4NzgwOGM2MWJlZDhhMjE2MjM0ZmNmMDIwZmJiOWM3YjE2YTky
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9j
b2wvSW5zcGVjdG9yQmFja2VuZC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Qcm90b2NvbC9JbnNwZWN0b3JCYWNrZW5kLmpzCkBAIC03Niw2ICs3Niw3IEBAIElu
c3BlY3RvckJhY2tlbmRDbGFzcy5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgYWdlbnRbZG9tYWlu
QW5kTWV0aG9kWzFdXSA9IHRoaXMuX3NlbmRNZXNzYWdlVG9CYWNrZW5kLmJpbmQodGhpcywgbWV0
aG9kLCBzaWduYXR1cmUpOwogICAgICAgICBhZ2VudFtkb21haW5BbmRNZXRob2RbMV1dWyJpbnZv
a2UiXSA9IHRoaXMuX2ludm9rZS5iaW5kKHRoaXMsIG1ldGhvZCwgc2lnbmF0dXJlKTsKKyAgICAg
ICAgYWdlbnRbZG9tYWluQW5kTWV0aG9kWzFdXVsicHJvbWlzZSJdID0gdGhpcy5fcHJvbWlzZS5i
aW5kKHRoaXMsIG1ldGhvZCwgc2lnbmF0dXJlKTsKICAgICAgICAgYWdlbnRbZG9tYWluQW5kTWV0
aG9kWzFdXVsic3VwcG9ydHMiXSA9IHRoaXMuX3N1cHBvcnRzLmJpbmQodGhpcywgbWV0aG9kLCBz
aWduYXR1cmUpOwogICAgICAgICB0aGlzLl9yZXBseUFyZ3NbbWV0aG9kXSA9IHJlcGx5QXJnczsK
ICAgICB9LApAQCAtOTgsNiArOTksMjIgQEAgSW5zcGVjdG9yQmFja2VuZENsYXNzLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgdGhpcy5fd3JhcENhbGxiYWNrQW5kU2VuZE1lc3NhZ2VPYmplY3QobWV0
aG9kLCBhcmdzLCBjYWxsYmFjayk7CiAgICAgfSwKIAorICAgIF9wcm9taXNlOiBmdW5jdGlvbiht
ZXRob2QsIHNpZ25hdHVyZSkKKyAgICB7CisgICAgICAgIHZhciBiYWNrZW5kID0gdGhpczsKKyAg
ICAgICAgdmFyIHByb21pc2VBcmd1bWVudHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChh
cmd1bWVudHMpOworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwg
cmVqZWN0KSB7CisgICAgICAgICAgICBmdW5jdGlvbiBjb252ZXJ0VG9Qcm9taXNlQ2FsbGJhY2so
ZXJyb3IsIHBheWxvYWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAg
ICAgICAgICAgIHJlamVjdChlcnJvcik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICByZXNvbHZlKHBheWxvYWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cHJvbWlzZUFyZ3VtZW50cy5wdXNoKGNvbnZlcnRUb1Byb21pc2VDYWxsYmFjayk7CisgICAgICAg
ICAgICBiYWNrZW5kLl9zZW5kTWVzc2FnZVRvQmFja2VuZC5hcHBseShiYWNrZW5kLCBwcm9taXNl
QXJndW1lbnRzKTsKKyAgICAgICAgfSk7CisgICAgfSwKKwogICAgIF9zdXBwb3J0czogZnVuY3Rp
b24obWV0aG9kLCBzaWduYXR1cmUsIHBhcmFtTmFtZSkKICAgICB7CiAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc2lnbmF0dXJlLmxlbmd0aDsgKytpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9SZXBsYXlPYnNlcnZlci5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL1JlcGxheU9ic2Vy
dmVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjViOWQzZGQzNzJkMTk0ZTMxNWMwNzlkY2M5ODQxYzQ0ZTNjNWFl
MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Qcm90b2NvbC9SZXBsYXlPYnNlcnZlci5qcwpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuUmVwbGF5UG9zaXRpb24gPSBmdW5jdGlvbihz
ZWdtZW50T2Zmc2V0LCBpbnB1dE9mZnNldCkKK3sKKyAgICB0aGlzLnNlZ21lbnRPZmZzZXQgPSBz
ZWdtZW50T2Zmc2V0OworICAgIHRoaXMuaW5wdXRPZmZzZXQgPSBpbnB1dE9mZnNldDsKK307CisK
K1dlYkluc3BlY3Rvci5SZXBsYXlQb3NpdGlvbi5mcm9tUHJvdG9jb2wgPSBmdW5jdGlvbihwYXls
b2FkKQoreworICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlJlcGxheVBvc2l0aW9uKHBheWxv
YWQuc2VnbWVudE9mZnNldCwgcGF5bG9hZC5pbnB1dE9mZnNldCk7Cit9CisKK1dlYkluc3BlY3Rv
ci5SZXBsYXlPYnNlcnZlciA9IGZ1bmN0aW9uKCkKK3sKKyAgICBXZWJJbnNwZWN0b3IuT2JqZWN0
LmNhbGwodGhpcyk7Cit9OworCitXZWJJbnNwZWN0b3IuUmVwbGF5T2JzZXJ2ZXIucHJvdG90eXBl
ID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuUmVwbGF5T2JzZXJ2ZXIsCisgICAg
X19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwKKworICAgIGNhcHR1cmVT
dGFydGVkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IucmVwbGF5TWFu
YWdlci5jYXB0dXJlU3RhcnRlZCgpOworICAgIH0sCisKKyAgICBjYXB0dXJlU3RvcHBlZDogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnJlcGxheU1hbmFnZXIuY2FwdHVy
ZVN0b3BwZWQoKTsKKyAgICB9LAorCisgICAgcGxheWJhY2tTdGFydGVkOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICBXZWJJbnNwZWN0b3IucmVwbGF5TWFuYWdlci5wbGF5YmFja1N0YXJ0ZWQo
KTsKKyAgICB9LAorCisgICAgcGxheWJhY2tIaXRQb3NpdGlvbjogZnVuY3Rpb24ocmVwbGF5UG9z
aXRpb24sIHRpbWVzdGFtcCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5yZXBsYXlNYW5h
Z2VyLnBsYXliYWNrSGl0UG9zaXRpb24oV2ViSW5zcGVjdG9yLlJlcGxheVBvc2l0aW9uLmZyb21Q
cm90b2NvbChyZXBsYXlQb3NpdGlvbiksIHRpbWVzdGFtcCk7CisgICAgfSwKKworICAgIHBsYXli
YWNrUGF1c2VkOiBmdW5jdGlvbihyZXBsYXlQb3NpdGlvbikKKyAgICB7CisgICAgICAgIFdlYklu
c3BlY3Rvci5yZXBsYXlNYW5hZ2VyLnBsYXliYWNrUGF1c2VkKFdlYkluc3BlY3Rvci5SZXBsYXlQ
b3NpdGlvbi5mcm9tUHJvdG9jb2wocmVwbGF5UG9zaXRpb24pKTsKKyAgICB9LAorCisgICAgcGxh
eWJhY2tGaW5pc2hlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnJl
cGxheU1hbmFnZXIucGxheWJhY2tGaW5pc2hlZCgpOworICAgIH0sCisKKyAgICBpbnB1dFN1cHBy
ZXNzaW9uQ2hhbmdlZDogZnVuY3Rpb24od2lsbFN1cHByZXNzKQorICAgIHsKKyAgICAgICAgLy8g
Tm90IGhhbmRsZWQgeWV0LgorICAgIH0sCisKKyAgICBzZXNzaW9uQ3JlYXRlZDogZnVuY3Rpb24o
c2Vzc2lvbklkKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnJlcGxheU1hbmFnZXIuc2Vz
c2lvbkNyZWF0ZWQoc2Vzc2lvbklkKTsKKyAgICB9LAorCisgICAgc2Vzc2lvbk1vZGlmaWVkOiBm
dW5jdGlvbihzZXNzaW9uSWQpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IucmVwbGF5TWFu
YWdlci5zZXNzaW9uTW9kaWZpZWQoc2Vzc2lvbklkKTsKKyAgICB9LAorCisgICAgc2Vzc2lvblJl
bW92ZWQ6IGZ1bmN0aW9uKHNlc3Npb25JZCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5y
ZXBsYXlNYW5hZ2VyLnNlc3Npb25SZW1vdmVkKHNlc3Npb25JZCk7CisgICAgfSwKKworICAgIHNl
c3Npb25Mb2FkZWQ6IGZ1bmN0aW9uKHNlc3Npb25JZCkKKyAgICB7CisgICAgICAgIFdlYkluc3Bl
Y3Rvci5yZXBsYXlNYW5hZ2VyLnNlc3Npb25Mb2FkZWQoc2Vzc2lvbklkKTsKKyAgICB9LAorCisg
ICAgc2VnbWVudENyZWF0ZWQ6IGZ1bmN0aW9uKHNlZ21lbnRJZCkKKyAgICB7CisgICAgICAgIFdl
Ykluc3BlY3Rvci5yZXBsYXlNYW5hZ2VyLnNlZ21lbnRDcmVhdGVkKHNlZ21lbnRJZCk7CisgICAg
fSwKKworICAgIHNlZ21lbnRSZW1vdmVkOiBmdW5jdGlvbihzZWdtZW50SWQpCisgICAgeworICAg
ICAgICBXZWJJbnNwZWN0b3IucmVwbGF5TWFuYWdlci5zZWdtZW50UmVtb3ZlZChzZWdtZW50SWQp
OworICAgIH0sCisKKyAgICBzZWdtZW50Q29tcGxldGVkOiBmdW5jdGlvbihzZWdtZW50SWQpCisg
ICAgeworICAgICAgICBXZWJJbnNwZWN0b3IucmVwbGF5TWFuYWdlci5zZWdtZW50Q29tcGxldGVk
KHNlZ21lbnRJZCk7CisgICAgfSwKKworICAgIHNlZ21lbnRMb2FkZWQ6IGZ1bmN0aW9uKHNlZ21l
bnRJZCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5yZXBsYXlNYW5hZ2VyLnNlZ21lbnRM
b2FkZWQoc2VnbWVudElkKTsKKyAgICB9LAorCisgICAgc2VnbWVudFVubG9hZGVkOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IucmVwbGF5TWFuYWdlci5zZWdtZW50VW5s
b2FkZWQoKTsKKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVGVzdC5odG1sIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVGVzdC5odG1sCmluZGV4IGI3NzlmOGQ3MzgxZmY4ZjlkZWEzMDI1MWE0OGVjMDQ3NThiMjgy
ZTUuLjE5M2EyN2Y1ZWQ1YzE3YzBmZDYxMzNiY2E3NjY4N2U5ZmY4MDQ5MTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Rlc3QuaHRtbAorKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0Lmh0bWwKQEAgLTMwLDkgKzMwLDEw
IEBACiAgICAgVGhlc2UgcmVzb3VjZXMgc2hvdWxkIG1hdGNoIHRoZSBvcmRlciBhbmQgZ3JvdXBz
IHVzZWQgaW4gTWFpbi5odG1sLgogICAgIC0tPgogICAgIDxzY3JpcHQgc3JjPSJCYXNlL1dlYklu
c3BlY3Rvci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkJhc2UvT2JqZWN0LmpzIj48
L3NjcmlwdD4KKwogICAgIDxzY3JpcHQgc3JjPSJCYXNlL1Rlc3QuanMiPjwvc2NyaXB0PgogCi0g
ICAgPHNjcmlwdCBzcmM9IkJhc2UvT2JqZWN0LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iQmFzZS9ET01VdGlsaXRpZXMuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJCYXNl
L1VSTFV0aWxpdGllcy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkJhc2UvVXRpbGl0
aWVzLmpzIj48L3NjcmlwdD4KQEAgLTUxLDYgKzUyLDcgQEAKICAgICA8c2NyaXB0IHNyYz0iUHJv
dG9jb2wvTmV0d29ya09ic2VydmVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUHJv
dG9jb2wvUGFnZU9ic2VydmVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUHJvdG9j
b2wvUmVtb3RlT2JqZWN0LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUHJvdG9jb2wv
UmVwbGF5T2JzZXJ2ZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJQcm90b2NvbC9S
dW50aW1lT2JzZXJ2ZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJQcm90b2NvbC9U
aW1lbGluZU9ic2VydmVyLmpzIj48L3NjcmlwdD4KIApAQCAtODIsMTIgKzg0LDE1IEBACiAgICAg
PHNjcmlwdCBzcmM9Ik1vZGVscy9Qcm9maWxlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iTW9kZWxzL1Byb2ZpbGVOb2RlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9k
ZWxzL1Byb2ZpbGVOb2RlQ2FsbC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik1vZGVs
cy9SZXBsYXlTZXNzaW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1Jl
cGxheVNlc3Npb25TZWdtZW50LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxz
L1Jlc291cmNlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1Jlc291cmNl
Q29sbGVjdGlvbi5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9SZXNvdXJj
ZVRpbWVsaW5lUmVjb3JkLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1Jl
dmlzaW9uLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1NjcmlwdC5qcyI+
PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9TY3JpcHRUaW1lbGluZVJlY29yZC5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9TZXR0aW5nLmpzIj48L3Njcmlw
dD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1NvdXJjZUNvZGVMb2NhdGlvbi5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9Tb3VyY2VDb2RlUmV2aXNpb24uanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvU291cmNlQ29kZVRpbWVsaW5lLmpzIj48L3Nj
cmlwdD4KQEAgLTEwMSw2ICsxMDYsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9E
ZWJ1Z2dlck1hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVy
cy9GcmFtZVJlc291cmNlTWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNv
bnRyb2xsZXJzL1Byb2JlTWFuYWdlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNv
bnRyb2xsZXJzL1JlcGxheU1hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJD
b250cm9sbGVycy9SdW50aW1lTWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9
IkNvbnRyb2xsZXJzL1N0b3JhZ2VNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iQ29udHJvbGxlcnMvVGltZWxpbmVNYW5hZ2VyLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmN2Ew
MjljNzA1ZDk4NTFiOTkxZDYwMmY4NjBjYWU1MWVhOTVhYjM4Li43MzM3MThjZDA4MzQ3MDllYjFi
YzE3YzdiNmVjODZhY2Y2ZjFhYjFiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTQtMDMtMTgg
IEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
YWRkIGZyb250ZW5kIGNvbnRyb2xsZXIgYW5kIG1vZGVscyBmb3IgcmVwbGF5IHNlc3Npb25zCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAxNDUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGVzdHMg
Zm9yIGV4aXN0aW5nIG5vbmRldGVybWluaXN0aWMgaW5wdXRzIGhhbmRsZWQgaW4gSlNDLgorICAg
ICAgICBUaGV5IGFyZSBza2lwcGVkIGZvciBhbGwgcGxhdGZvcm1zIHVudGlsIFdFQl9SRVBMQVkg
aXMgZW5hYmxlZC4KKworICAgICAgICBUaGUgbmV3IG1lY2hhbmlzbSBoZXJlIGlzIHRoZSBzaW5n
bGUtc2VnbWVudCByZXBsYXkgcmVmdGVzdC4gSXQgd2lsbAorICAgICAgICBsb2FkIHRoZSB0ZXN0
IHBhZ2Ugb25jZSB0byBpbmplY3QgdGVzdCBjb2RlIGludG8gdGhlIGluc3BlY3Rvci4gVGhlbiwK
KyAgICAgICAgdGhlIHJlZnRlc3Qgd2lsbCByZWxvYWQgdGhlIHRlc3QgcGFnZSBhbmQgc3RhcnQg
Y2FwdHVyaW5nLiBUaGUgdGVzdAorICAgICAgICBwYWdlIHBlcmZvcm1zIHNvbWUgbm9uZGV0ZXJt
aW5pc3RpYyBjb21wdXRhdGlvbiBiZWZvcmUgdGhlIGxvYWQgZXZlbnQuCisgICAgICAgIFRoZW4s
IHRoZSBpbnNwZWN0b3IgdGVzdCBkdW1wcyB0aGUgY29tcHV0ZWQgbm9uZGV0ZXJtaW5pc3RpYyBz
dGF0ZS4KKyAgICAgICAgQ2FwdHVyaW5nIGlzIHN0b3BwZWQsIGFuZCB0aGUgc2Vzc2lvbiBpcyBy
ZXBsYXllZCBvbmNlLiBXaGVuIHRoZSBsb2FkCisgICAgICAgIGV2ZW50IGZpcmVzIG9uIHRoZSBy
ZXBsYXllZCBwYWdlIGV4ZWN1dGlvbiwgdGhlIG5vbmRldGVybWluaXN0aWMgc3RhdGVzCisgICAg
ICAgIGZyb20gY2FwdHVyaW5nIGFuZCByZXBsYXlpbmcgYXJlIGNvbXBhcmVkLiBUaGV5IHNob3Vs
ZCBiZSB0aGUgc2FtZS4KKworICAgICAgICAqIGluc3BlY3Rvci9yZXBsYXkvamF2YXNjcmlwdC1y
YW5kb20tc2VlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9yZXBs
YXkvamF2YXNjcmlwdC1yYW5kb20tc2VlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0
b3IvcmVwbGF5L3JlcGxheS10ZXN0LmpzOiBBZGRlZC4gVGhpcyBjb250YWlucyB0aGUgYnVsayBv
ZgorICAgICAgICB0aGUgcmVwbGF5LXNwZWNpZmljIHRlc3RpbmcgbG9naWMgZm9yIHRoZSBhZGRl
ZCB0ZXN0cy4KKworICAgICAgICAoSW5zcGVjdG9yVGVzdFByb3h5LnJlZ2lzdGVySW5pdGlhbGl6
ZXIuKToKKyAgICAgICAgKEluc3BlY3RvclRlc3RQcm94eS5yZWdpc3RlckluaXRpYWxpemVyKToK
KwogMjAxNC0wMy0xOSAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQub3JnPgogCiAgICAgICAg
IEltcGxlbWVudCBpc1BvaW50SW5QYXRoIGFuZCBpc1BvaW50SW5TdHJva2Ugd2l0aCBQYXRoMkQg
YXJndW1lbnQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVz
dC5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcwppbmRleCBiZTRi
ZjEwNjVkNmYzMGYyOGExNTQ0MTIzYWFlN2FjNjRmMzI5YjcyLi42YzI5OWViYzljMTdmM2RmODhh
ZWVmZDNmZGEzYTAxOWNiZmQ4ODNhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
aW5zcGVjdG9yLXRlc3QuanMKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10
ZXN0LmpzCkBAIC01NSwxMiArNTUsMTIgQEAgZnVuY3Rpb24gcnVuVGVzdCgpCiAKICAgICBmdW5j
dGlvbiBydW5Jbml0aWFsaXphdGlvbk1ldGhvZHNJbkZyb250ZW5kKGluaXRpYWxpemVyc0FycmF5
KQogICAgIHsKLSAgICAgICAgaWYgKEluc3BlY3RvclRlc3QuZGlkSW5qZWN0VGVzdENvZGUpIHsK
LSAgICAgICAgICAgIC8vIElmIHRoZSB0ZXN0IHBhZ2UgcmVsb2FkZWQgYnV0IHdlIHN0YXJ0ZWQg
cnVubmluZyB0aGUgdGVzdCBpbiBhIHByZXZpb3VzCi0gICAgICAgICAgICAvLyBuYXZpZ2F0aW9u
LCB0aGVuIGRvbid0IGluaXRpYWxpemUgdGhlIGluc3BlY3RvciBmcm9udGVuZCBhZ2Fpbi4KLSAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QudGVzdFBhZ2VEaWRMb2FkKCk7CisgICAgICAgIEluc3Bl
Y3RvclRlc3QudGVzdFBhZ2VEaWRMb2FkKCk7CisKKyAgICAgICAgLy8gSWYgdGhlIHRlc3QgcGFn
ZSByZWxvYWRlZCBidXQgd2Ugc3RhcnRlZCBydW5uaW5nIHRoZSB0ZXN0IGluIGEgcHJldmlvdXMK
KyAgICAgICAgLy8gbmF2aWdhdGlvbiwgdGhlbiBkb24ndCBpbml0aWFsaXplIHRoZSBpbnNwZWN0
b3IgZnJvbnRlbmQgYWdhaW4uCisgICAgICAgIGlmIChJbnNwZWN0b3JUZXN0LmRpZEluamVjdFRl
c3RDb2RlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAKICAgICAgICAgZm9yICh2
YXIgaW5pdGlhbGl6ZXIgb2YgaW5pdGlhbGl6ZXJzQXJyYXkpIHsKICAgICAgICAgICAgIHRyeSB7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwbGF5L2phdmFzY3JpcHQtZGF0
ZS1ub3ctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcGxheS9qYXZhc2Ny
aXB0LWRhdGUtbm93LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTMwMDIyZjdlNmE5ODZlYmM1
NzI3NTM2MDM1NGJiYjNiMDc0YjhlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL3JlcGxheS9qYXZhc2NyaXB0LWRhdGUtbm93LWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDE0IEBACitUZXN0cyB0aGF0IHdlIGNhbiBjYXB0dXJlIGFuZCByZXBsYXkgbm9uZGV0ZXJtaW5p
c20gaW4gRGF0ZS5ub3coKSBhbmQgdGhlIERhdGUgY29uc3RydWN0b3IuCisKK1dhaXRpbmcgZm9y
IHRlc3QgcGFnZSB0byBmaW5pc2ggaXRzIGluaXRpYWwgbG9hZC4uLgorVGVzdCBwYWdlIGluaXRp
YWwgbG9hZCBkb25lLgorV2FpdGluZyBmb3IgY2FwdHVyaW5nIHRvIHN0YXJ0Li4uCitDYXB0dXJp
bmcgaGFzIHN0YXJ0ZWQuCitXYWl0aW5nIHRvIGNhcHR1cmUgaW5pdGlhbCBuYXZpZ2F0aW9uLi4u
CitJbml0aWFsIG5hdmlnYXRpb24gY2FwdHVyZWQuIER1bXBpbmcgc3RhdGUuLi4uCitDYXB0dXJl
IHN0b3BwZWQsIG5vdyBzdGFydGluZyByZXBsYXkgdG8gY29tcGxldGlvbi4uLgorUGxheWJhY2sg
aGFzIHN0YXJ0ZWQuCitXYWl0aW5nIHRvIHJlcGxheSBpbml0aWFsIG5hdmlnYXRpb24uLi4KK0lu
aXRpYWwgbmF2aWdhdGlvbiByZXBsYXllZC4gRHVtcGluZyBzdGF0ZS4uLgorUEFTUzogTm9uZGV0
ZXJtaW5pc3RpYyBzdGF0ZSBzaG91bGQgbm90IGRpZmZlciBkdXJpbmcgY2FwdHVyZSBhbmQgcmVw
bGF5LgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwbGF5L2phdmFzY3Jp
cHQtZGF0ZS1ub3cuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBsYXkvamF2YXNjcmlw
dC1kYXRlLW5vdy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzMjkwZTllZmU5MzAyODAxODMwODFkZmIyMGNl
ZThlMTE0OTdlYWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVw
bGF5L2phdmFzY3JpcHQtZGF0ZS1ub3cuaHRtbApAQCAtMCwwICsxLDM4IEBACis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vaW5zcGVjdG9yLXRl
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9y
ZXBsYXktdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCit3aW5kb3cuX3RpbWVzID0gW0Rh
dGUubm93KCksIG5ldyBEYXRlKCkudG9TdHJpbmcoKV07CisKK2Z1bmN0aW9uIGR1bXBOb25kZXRl
cm1pbmlzdGljU3RhdGUoKQoreworICAgIHJldHVybiB3aW5kb3cuX3RpbWVzOworfQorCitmdW5j
dGlvbiB0ZXN0KCkKK3sKKyAgICBmdW5jdGlvbiBzdGF0ZXNBcmVFcXVhbChhLCBiKQorICAgIHsK
KyAgICAgICAgaWYgKHR5cGVvZiBhICE9PSAiYXJyYXkiIHx8IHR5cGVvZiBiICE9PSAiYXJyYXki
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYS5sZW5ndGggIT09IGIu
bGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYS5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGlmIChhW2ldICE9PSBiW2ldKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBJbnNwZWN0b3JUZXN0LlJlcGxheS5ydW5TaW5nbGVTZWdtZW50UmVmVGVzdChz
dGF0ZXNBcmVFcXVhbCk7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJy
dW5UZXN0KCkiPgorPHA+VGVzdHMgdGhhdCB3ZSBjYW4gY2FwdHVyZSBhbmQgcmVwbGF5IG5vbmRl
dGVybWluaXNtIGluIERhdGUubm93KCkgYW5kIHRoZSBEYXRlIGNvbnN0cnVjdG9yLjwvcD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBsYXkv
amF2YXNjcmlwdC1yYW5kb20tc2VlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvcmVwbGF5L2phdmFzY3JpcHQtcmFuZG9tLXNlZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjEwZDdjNjg3YjFkMDg5NjkxNzJjYWU4MWJkMDc4ZGZjZWM1OWY4ZjkKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwbGF5L2phdmFzY3JpcHQtcmFuZG9tLXNlZWQt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTQgQEAKK1Rlc3RzIHRoYXQgd2UgY2FuIGNhcHR1cmUg
YW5kIHJlcGxheSBub25kZXRlcm1pbmlzbSBpbiBNYXRoLnJhbmRvbSgpLgorCitXYWl0aW5nIGZv
ciB0ZXN0IHBhZ2UgdG8gZmluaXNoIGl0cyBpbml0aWFsIGxvYWQuLi4KK1Rlc3QgcGFnZSBpbml0
aWFsIGxvYWQgZG9uZS4KK1dhaXRpbmcgZm9yIGNhcHR1cmluZyB0byBzdGFydC4uLgorQ2FwdHVy
aW5nIGhhcyBzdGFydGVkLgorV2FpdGluZyB0byBjYXB0dXJlIGluaXRpYWwgbmF2aWdhdGlvbi4u
LgorSW5pdGlhbCBuYXZpZ2F0aW9uIGNhcHR1cmVkLiBEdW1waW5nIHN0YXRlLi4uLgorQ2FwdHVy
ZSBzdG9wcGVkLCBub3cgc3RhcnRpbmcgcmVwbGF5IHRvIGNvbXBsZXRpb24uLi4KK1BsYXliYWNr
IGhhcyBzdGFydGVkLgorV2FpdGluZyB0byByZXBsYXkgaW5pdGlhbCBuYXZpZ2F0aW9uLi4uCitJ
bml0aWFsIG5hdmlnYXRpb24gcmVwbGF5ZWQuIER1bXBpbmcgc3RhdGUuLi4KK1BBU1M6IE5vbmRl
dGVybWluaXN0aWMgc3RhdGUgc2hvdWxkIG5vdCBkaWZmZXIgZHVyaW5nIGNhcHR1cmUgYW5kIHJl
cGxheS4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcGxheS9qYXZhc2Ny
aXB0LXJhbmRvbS1zZWVkLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwbGF5L2phdmFz
Y3JpcHQtcmFuZG9tLXNlZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMjExZjIwNjhjZWY4ZmQ0OTFmYWQx
YTY2ZDVjMjUyNGUyMmVjMDU4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3JlcGxheS9qYXZhc2NyaXB0LXJhbmRvbS1zZWVkLmh0bWwKQEAgLTAsMCArMSwyOSBAQAor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2lu
c3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9Ii4vcmVwbGF5LXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKword2luZG93Ll9y
YW5kb21OdW1iZXIgPSBNYXRoLnJhbmRvbSgpOworCitmdW5jdGlvbiBkdW1wTm9uZGV0ZXJtaW5p
c3RpY1N0YXRlKCkKK3sKKyAgICByZXR1cm4gd2luZG93Ll9yYW5kb21OdW1iZXI7Cit9CisKK2Z1
bmN0aW9uIHRlc3QoKQoreworICAgIGZ1bmN0aW9uIHN0YXRlc0FyZUVxdWFsKGEsIGIpCisgICAg
eworICAgICAgICByZXR1cm4gYSA9PT0gYjsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JUZXN0LlJl
cGxheS5ydW5TaW5nbGVTZWdtZW50UmVmVGVzdChzdGF0ZXNBcmVFcXVhbCk7Cit9CisKKzwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPHA+VGVzdHMgdGhhdCB3
ZSBjYW4gY2FwdHVyZSBhbmQgcmVwbGF5IG5vbmRldGVybWluaXNtIGluIE1hdGgucmFuZG9tKCku
PC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L3JlcGxheS9yZXBsYXktdGVzdC5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBsYXkvcmVw
bGF5LXRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTVjZGZjM2RlOWI0YWUwMjQ4OTMzYzcwYjUxNDgyYzA3
MTBkYmRkMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBsYXkv
cmVwbGF5LXRlc3QuanMKQEAgLTAsMCArMSw3OSBAQAorSW5zcGVjdG9yVGVzdFByb3h5LnJlZ2lz
dGVySW5pdGlhbGl6ZXIoZnVuY3Rpb24oKSB7CisKK0luc3BlY3RvclRlc3QuUmVwbGF5ID0ge307
CisKK0luc3BlY3RvclRlc3QuUmVwbGF5LnJ1blNpbmdsZVNlZ21lbnRSZWZUZXN0ID0gZnVuY3Rp
b24oc3RhdGVDb21wYXJhdG9yKQoreworICAgIHZhciBzdGF0ZUR1cmluZ0NhcHR1cmluZyA9IG51
bGw7CisgICAgdmFyIHN0YXRlRHVyaW5nUmVwbGF5aW5nID0gbnVsbDsKKworICAgIHZhciBpZ25v
cmVDYWNoZU9uUmVsb2FkID0gdHJ1ZTsKKyAgICBJbnNwZWN0b3JUZXN0LnJlbG9hZFBhZ2UoaWdu
b3JlQ2FjaGVPblJlbG9hZCkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHdhaXRGb3JNYWluUmVzb3VyY2VCZWZvcmVTdGFydGluZyhy
ZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXZlbnREaXNwYXRj
aGVyLmFkZEV2ZW50TGlzdGVuZXIoSW5zcGVjdG9yVGVzdC5FdmVudERpc3BhdGNoZXIuRXZlbnQu
VGVzdFBhZ2VEaWRMb2FkLCByZXNvbHZlKTsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9n
KCJXYWl0aW5nIGZvciB0ZXN0IHBhZ2UgdG8gZmluaXNoIGl0cyBpbml0aWFsIGxvYWQuLi4iKTsK
KyAgICAgICAgfSk7CisgICAgfSkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgSW5z
cGVjdG9yVGVzdC5sb2coIlRlc3QgcGFnZSBpbml0aWFsIGxvYWQgZG9uZS4iKTsKKyAgICAgICAg
cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHN0YXJ0Q2FwdHVyaW5nKHJlc29sdmUsIHJlamVj
dCkgeworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIldhaXRpbmcgZm9yIGNhcHR1cmlu
ZyB0byBzdGFydC4uLiIpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnJlcGxheU1hbmFnZXIu
c3RhcnRDYXB0dXJpbmcoKTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5yZXBsYXlNYW5hZ2Vy
LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuRXZlbnQuQ2FwdHVy
ZVN0YXJ0ZWQsIHJlc29sdmUpOworICAgICAgICB9KTsKKyAgICB9KQorICAgIC50aGVuKGZ1bmN0
aW9uKCkgeworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiQ2FwdHVyaW5nIGhhcyBzdGFydGVk
LiIpOworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gd2FpdFRvQ2FwdHVyZUlu
aXRpYWxOYXZpZ2F0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5sb2coIldhaXRpbmcgdG8gY2FwdHVyZSBpbml0aWFsIG5hdmlnYXRpb24uLi4iKTsKKyAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuZXZlbnREaXNwYXRjaGVyLmFkZEV2ZW50TGlzdGVuZXIo
SW5zcGVjdG9yVGVzdC5FdmVudERpc3BhdGNoZXIuRXZlbnQuVGVzdFBhZ2VEaWRMb2FkLCByZXNv
bHZlKTsKKyAgICAgICAgfSk7CisgICAgfSkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAgICAg
ICAgSW5zcGVjdG9yVGVzdC5sb2coIkluaXRpYWwgbmF2aWdhdGlvbiBjYXB0dXJlZC4gRHVtcGlu
ZyBzdGF0ZS4uLi4iKTsKKyAgICAgICAgcmV0dXJuIFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZS5wcm9t
aXNlKCJkdW1wTm9uZGV0ZXJtaW5pc3RpY1N0YXRlKCkiKTsKKyAgICB9KQorICAgIC50aGVuKGZ1
bmN0aW9uKHBheWxvYWQpIHsKKyAgICAgICAgc3RhdGVEdXJpbmdDYXB0dXJpbmcgPSBwYXlsb2Fk
LnZhbHVlOworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gc3RvcENhcHR1cmlu
ZyhyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5yZXBsYXlNYW5h
Z2VyLnN0b3BDYXB0dXJpbmcoKTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5yZXBsYXlNYW5h
Z2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuRXZlbnQuQ2Fw
dHVyZVN0b3BwZWQsIHJlc29sdmUpOworICAgICAgICB9KTsKKyAgICB9KQorICAgIC50aGVuKGZ1
bmN0aW9uKCkgeworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiQ2FwdHVyZSBzdG9wcGVkLCBu
b3cgc3RhcnRpbmcgcmVwbGF5IHRvIGNvbXBsZXRpb24uLi4iKQorICAgICAgICByZXR1cm4gbmV3
IFByb21pc2UoZnVuY3Rpb24gc3RhcnRQbGF5YmFjayhyZXNvbHZlLCByZWplY3QpIHsKKyAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5yZXBsYXlNYW5hZ2VyLnJlcGxheVRvQ29tcGxldGlvbigpOwor
ICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnJlcGxheU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5FdmVudC5QbGF5YmFja1N0YXJ0ZWQsIHJlc29sdmUp
OworICAgICAgICB9KTsKKyAgICB9KQorICAgIC50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBJ
bnNwZWN0b3JUZXN0LmxvZygiUGxheWJhY2sgaGFzIHN0YXJ0ZWQuIik7CisgICAgICAgIHJldHVy
biBuZXcgUHJvbWlzZShmdW5jdGlvbiB3YWl0Rm9yTWFpblJlc291cmNlV2hlblJlcGxheWluZyhy
ZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJXYWl0aW5n
IHRvIHJlcGxheSBpbml0aWFsIG5hdmlnYXRpb24uLi4iKTsKKyAgICAgICAgICAgIEluc3BlY3Rv
clRlc3QuZXZlbnREaXNwYXRjaGVyLmFkZEV2ZW50TGlzdGVuZXIoSW5zcGVjdG9yVGVzdC5FdmVu
dERpc3BhdGNoZXIuRXZlbnQuVGVzdFBhZ2VEaWRMb2FkLCByZXNvbHZlKTsKKyAgICAgICAgfSk7
CisgICAgfSkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5s
b2coIkluaXRpYWwgbmF2aWdhdGlvbiByZXBsYXllZC4gRHVtcGluZyBzdGF0ZS4uLiIpOworICAg
ICAgICByZXR1cm4gUnVudGltZUFnZW50LmV2YWx1YXRlLnByb21pc2UoImR1bXBOb25kZXRlcm1p
bmlzdGljU3RhdGUoKSIpOworICAgIH0pCisgICAgLnRoZW4oZnVuY3Rpb24ocGF5bG9hZCkgewor
ICAgICAgICBzdGF0ZUR1cmluZ1JlcGxheWluZyA9IHBheWxvYWQudmFsdWU7CisgICAgICAgIHJl
dHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiB3YWl0Rm9yUmVwbGF5aW5nVG9GaW5pc2gocmVzb2x2
ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IucmVwbGF5TWFuYWdlci5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LlBsYXliYWNrRmlu
aXNoZWQsIHJlc29sdmUpOworICAgICAgICB9KTsKKyAgICB9KQorICAgIC50aGVuKGZ1bmN0aW9u
KCkgeworICAgICAgICB2YXIgc3RhdGVzRXF1YWwgPSBzdGF0ZUR1cmluZ0NhcHR1cmluZyA9PT0g
c3RhdGVEdXJpbmdSZXBsYXlpbmc7CisgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VGhhdChz
dGF0ZXNFcXVhbCwgIk5vbmRldGVybWluaXN0aWMgc3RhdGUgc2hvdWxkIG5vdCBkaWZmZXIgZHVy
aW5nIGNhcHR1cmUgYW5kIHJlcGxheS4iKTsKKyAgICAgICAgaWYgKCFzdGF0ZXNFcXVhbCkgewor
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlN0YXRlIGR1cmluZyBjYXB0dXJpbmc6ICIg
KyBzdGF0ZUR1cmluZ0NhcHR1cmluZyk7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygi
U3RhdGUgZHVyaW5nIHJlcGxheWluZzogIiArIHN0YXRlRHVyaW5nUmVwbGF5aW5nKTsKKyAgICAg
ICAgfQorICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOworICAgIH0pOworfTsK
KworfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>
<flag name="review"
          id="251475"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>