<?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>194725</bug_id>
          
          <creation_ts>2019-02-15 15:18:50 -0800</creation_ts>
          <short_desc>Allow emulation of user gestures from Web Inspector console</short_desc>
          <delta_ts>2019-07-29 18:53:00 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>197269</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1506797</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-02-15 15:18:50 -0800</bug_when>
    <thetext>Allow emulation of user gestures from Web Inspector console</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506802</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-02-15 15:23:03 -0800</bug_when>
    <thetext>&lt;rdar://problem/48126604&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506809</commentid>
    <comment_count>2</comment_count>
      <attachid>362169</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-02-15 15:34:57 -0800</bug_when>
    <thetext>Created attachment 362169
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506811</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-02-15 15:37:06 -0800</bug_when>
    <thetext>This patch modifies the inspector protocol. Please ensure that any frontend changes appropriately use feature checks for new protocol features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506831</commentid>
    <comment_count>4</comment_count>
      <attachid>362169</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-02-15 16:07:40 -0800</bug_when>
    <thetext>Comment on attachment 362169
Patch

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

r=me

&gt; Source/WebCore/inspector/agents/page/PageRuntimeAgent.cpp:180
&gt; +    auto userGestureState = [&amp;] () -&gt; Optional&lt;ProcessingUserGestureState&gt; {
&gt; +        if (!emulateUserGesture)
&gt; +            return WTF::nullopt;
&gt; +        return *emulateUserGesture ? Optional&lt;ProcessingUserGestureState&gt;(ProcessingUserGesture) : WTF::nullopt;
&gt; +    }();

I think this would read easier as it avoids the lamba:

    auto userGestureState = (emulateUserGesture &amp;&amp; *emulateUserGesture) ? Optional&lt;ProcessingUserGestureState&gt;(ProcessingUserGesture) : WTF::nullopt;

And maybe some compilers could work with this:

    auto userGestureState = (emulateUserGesture &amp;&amp; *emulateUserGesture) ? ProcessingUserGesture : WTF::nullopt;

&gt; Source/WebInspectorUI/UserInterface/Controllers/RuntimeManager.js:140
&gt;          // COMPATIBILITY (iOS 8): &quot;saveResult&quot; did not exist.

We add compatibility comments about the boundary point when we add new things. So for this we would add:

    // COMPATIBILITY (iOS 12.2): &quot;emulateUserGesture&quot; did not exist.

Since iOS 12.2 is the last Versioned protocol, and it won&apos;t have this!

&gt; Source/WebInspectorUI/UserInterface/Views/LogContentView.js:860
&gt; +    _executeInUserGestureSettingChanged()
&gt; +    {
&gt; +        this._executeInUserGestureNavigationItem.checked = WI.settings.executeInUserGesture.value;
&gt; +    }

There is an &quot;execute&quot; vs &quot;emulate&quot; typo:

    _executeInUserGestureSettingChanged

Should probably be:

    _emulateInUserGestureSettingChanged

In multiple places.

&gt; LayoutTests/inspector/runtime/evaluate-userGestureEmulation.html:14
&gt; +            RuntimeAgent.evaluate.invoke({expression: &quot;document.getElementById(&apos;foo&apos;).click()&quot;, objectGroup: &quot;test&quot;, emulateUserGesture: false}, (error) =&gt; {

Nit: We tend to put code expressions in a template string to make them easier to identify:

    ... expression: `document.getElementById(&quot;foo&quot;).click()`, ...

&gt; LayoutTests/inspector/runtime/evaluate-userGestureEmulation.html:37
&gt; +        console.log(window.internals.isProcessingUserGesture() ? &quot;In User Gesture&quot; : &quot;Not in User Gesture&quot;);

You can make this:

    TestPage.addResult(...)

And it will show up better in the output (in the result test instead of at the top of the file).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506838</commentid>
    <comment_count>5</comment_count>
      <attachid>362169</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-02-15 16:17:50 -0800</bug_when>
    <thetext>Comment on attachment 362169
Patch

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

&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:114
&gt; +void InspectorRuntimeAgent::evaluate(ErrorString&amp; errorString, const String&amp; expression, const String* objectGroup, const bool* includeCommandLineAPI, const bool* doNotPauseOnExceptionsAndMuteConsole, const int* executionContextId, const bool* returnByValue, const bool* generatePreview, const bool* saveResult, const bool*, RefPtr&lt;Protocol::Runtime::RemoteObject&gt;&amp; result, Optional&lt;bool&gt;&amp; wasThrown, Optional&lt;int&gt;&amp; savedResultIndex)

NIT: just for clarity, can you add a `/* emulateUserGesture */` so it&apos;s clear what the `const bool*` refers to?  We have a lot of them 😅

&gt; Source/WebInspectorUI/UserInterface/Base/Setting.js:134
&gt;      enableControlFlowProfiler: new WI.Setting(&quot;enable-control-flow-profiler&quot;, false),
&gt;      enableLineWrapping: new WI.Setting(&quot;enable-line-wrapping&quot;, false),
&gt; +    emulateInUserGesture: new WI.Setting(&quot;emulate-in-user-gesture&quot;, false),

NIT: should be alphabetically sorted.

&gt; Source/WebInspectorUI/UserInterface/Views/LogContentView.js:76
&gt; +        this._emulateInUserGestureNavigationItem.addEventListener(WI.CheckboxNavigationItem.Event.CheckedDidChange, () =&gt; { WI.settings.emulateInUserGesture.value = !WI.settings.emulateInUserGesture.value; });

Style: I personally prefer that arrow functions be split into multiple lines if the return value is not assumed (e.g. not having `{` or `}`).

&gt; Source/WebInspectorUI/UserInterface/Views/LogContentView.js:77
&gt; +        WI.settings.emulateInUserGesture.addEventListener(WI.Setting.Event.Changed, this._emulateInUserGestureSettingChanged, this);

Style: please prefix event listener functions with &quot;handle&quot;

    this._handleEmulateInUserGestureSettingChanged

&gt; LayoutTests/inspector/runtime/evaluate-userGestureEmulation.html:13
&gt; +        test(resolve, reject) {

We support `async`, so you could use that instead of a promise.

    async test() {
        await RuntimeAgent.evaluate.invoke({
            expression: `document.getElementById(&apos;foo&apos;).click()`,
            objectGroup: &quot;test&quot;,
            emulateUserGesture: false,
        });
    }

&gt; LayoutTests/inspector/runtime/evaluate-userGestureEmulation.html:24
&gt; +        test(resolve, reject) {

Ditto (&gt;13).

&gt; LayoutTests/inspector/runtime/evaluate-userGestureEmulation.html:43
&gt; +}, false);

NIT: you can drop the `false`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506851</commentid>
    <comment_count>6</comment_count>
      <attachid>362169</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-02-15 16:29:43 -0800</bug_when>
    <thetext>Comment on attachment 362169
Patch

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

&gt;&gt; Source/WebCore/inspector/agents/page/PageRuntimeAgent.cpp:180
&gt;&gt; +    }();
&gt; 
&gt; I think this would read easier as it avoids the lamba:
&gt; 
&gt;     auto userGestureState = (emulateUserGesture &amp;&amp; *emulateUserGesture) ? Optional&lt;ProcessingUserGestureState&gt;(ProcessingUserGesture) : WTF::nullopt;
&gt; 
&gt; And maybe some compilers could work with this:
&gt; 
&gt;     auto userGestureState = (emulateUserGesture &amp;&amp; *emulateUserGesture) ? ProcessingUserGesture : WTF::nullopt;

I kind of like the lambda :)

Also, I don&apos;t think I&apos;d be able to use auto in either of your examples. Not a big deal though.

&gt;&gt; Source/WebInspectorUI/UserInterface/Base/Setting.js:134
&gt;&gt; +    emulateInUserGesture: new WI.Setting(&quot;emulate-in-user-gesture&quot;, false),
&gt; 
&gt; NIT: should be alphabetically sorted.

Will fix.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/LogContentView.js:76
&gt;&gt; +        this._emulateInUserGestureNavigationItem.addEventListener(WI.CheckboxNavigationItem.Event.CheckedDidChange, () =&gt; { WI.settings.emulateInUserGesture.value = !WI.settings.emulateInUserGesture.value; });
&gt; 
&gt; Style: I personally prefer that arrow functions be split into multiple lines if the return value is not assumed (e.g. not having `{` or `}`).

This is following the convention in the file. Should I change just this or the other places too?

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/LogContentView.js:77
&gt;&gt; +        WI.settings.emulateInUserGesture.addEventListener(WI.Setting.Event.Changed, this._emulateInUserGestureSettingChanged, this);
&gt; 
&gt; Style: please prefix event listener functions with &quot;handle&quot;
&gt; 
&gt;     this._handleEmulateInUserGestureSettingChanged

Another case where I&apos;m following the local conventions. Should I change?

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/LogContentView.js:860
&gt;&gt; +    }
&gt; 
&gt; There is an &quot;execute&quot; vs &quot;emulate&quot; typo:
&gt; 
&gt;     _executeInUserGestureSettingChanged
&gt; 
&gt; Should probably be:
&gt; 
&gt;     _emulateInUserGestureSettingChanged
&gt; 
&gt; In multiple places.

Oops.

&gt;&gt; LayoutTests/inspector/runtime/evaluate-userGestureEmulation.html:13
&gt;&gt; +        test(resolve, reject) {
&gt; 
&gt; We support `async`, so you could use that instead of a promise.
&gt; 
&gt;     async test() {
&gt;         await RuntimeAgent.evaluate.invoke({
&gt;             expression: `document.getElementById(&apos;foo&apos;).click()`,
&gt;             objectGroup: &quot;test&quot;,
&gt;             emulateUserGesture: false,
&gt;         });
&gt;     }

OK.

&gt;&gt; LayoutTests/inspector/runtime/evaluate-userGestureEmulation.html:14
&gt;&gt; +            RuntimeAgent.evaluate.invoke({expression: &quot;document.getElementById(&apos;foo&apos;).click()&quot;, objectGroup: &quot;test&quot;, emulateUserGesture: false}, (error) =&gt; {
&gt; 
&gt; Nit: We tend to put code expressions in a template string to make them easier to identify:
&gt; 
&gt;     ... expression: `document.getElementById(&quot;foo&quot;).click()`, ...

OK.

&gt;&gt; LayoutTests/inspector/runtime/evaluate-userGestureEmulation.html:37
&gt;&gt; +        console.log(window.internals.isProcessingUserGesture() ? &quot;In User Gesture&quot; : &quot;Not in User Gesture&quot;);
&gt; 
&gt; You can make this:
&gt; 
&gt;     TestPage.addResult(...)
&gt; 
&gt; And it will show up better in the output (in the result test instead of at the top of the file).

My problem was that InspectorTest and other things were not available in the event handler. I assume that&apos;s because the &quot;test&quot; function has bound to a scope where those things are present. I&apos;ll check if TestPage is.

(I also couldn&apos;t put the handler inside the test function, because document wasn&apos;t available)

&gt;&gt; LayoutTests/inspector/runtime/evaluate-userGestureEmulation.html:43
&gt;&gt; +}, false);
&gt; 
&gt; NIT: you can drop the `false`.

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506874</commentid>
    <comment_count>7</comment_count>
      <attachid>362169</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-02-15 17:01:11 -0800</bug_when>
    <thetext>Comment on attachment 362169
Patch

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

&gt;&gt;&gt; Source/WebCore/inspector/agents/page/PageRuntimeAgent.cpp:180
&gt;&gt;&gt; +    }();
&gt;&gt; 
&gt;&gt; I think this would read easier as it avoids the lamba:
&gt;&gt; 
&gt;&gt;     auto userGestureState = (emulateUserGesture &amp;&amp; *emulateUserGesture) ? Optional&lt;ProcessingUserGestureState&gt;(ProcessingUserGesture) : WTF::nullopt;
&gt;&gt; 
&gt;&gt; And maybe some compilers could work with this:
&gt;&gt; 
&gt;&gt;     auto userGestureState = (emulateUserGesture &amp;&amp; *emulateUserGesture) ? ProcessingUserGesture : WTF::nullopt;
&gt; 
&gt; I kind of like the lambda :)
&gt; 
&gt; Also, I don&apos;t think I&apos;d be able to use auto in either of your examples. Not a big deal though.

`InspectorRuntimeAgent` has an `asBool` which you could copy into this file.

    static bool asBool(const bool* b)
    {
        return b &amp;&amp; *b;
    }

And then you could inline the logic so you wouldn&apos;t even need `auto`.

    UserGestureIndicator userGestureIndicator(asBool(emulateUserGesture) ? ProcessingUserGesture : WTF::nullopt);

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Views/LogContentView.js:76
&gt;&gt;&gt; +        this._emulateInUserGestureNavigationItem.addEventListener(WI.CheckboxNavigationItem.Event.CheckedDidChange, () =&gt; { WI.settings.emulateInUserGesture.value = !WI.settings.emulateInUserGesture.value; });
&gt;&gt; 
&gt;&gt; Style: I personally prefer that arrow functions be split into multiple lines if the return value is not assumed (e.g. not having `{` or `}`).
&gt; 
&gt; This is following the convention in the file. Should I change just this or the other places too?

It&apos;s fine to leave the rest of the file as is.  We should just do this moving forward.  They&apos;re just names after all, so it&apos;s not that huge of a deal :P

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Views/LogContentView.js:77
&gt;&gt;&gt; +        WI.settings.emulateInUserGesture.addEventListener(WI.Setting.Event.Changed, this._emulateInUserGestureSettingChanged, this);
&gt;&gt; 
&gt;&gt; Style: please prefix event listener functions with &quot;handle&quot;
&gt;&gt; 
&gt;&gt;     this._handleEmulateInUserGestureSettingChanged
&gt; 
&gt; Another case where I&apos;m following the local conventions. Should I change?

Ditto (&gt;76).

&gt;&gt;&gt; LayoutTests/inspector/runtime/evaluate-userGestureEmulation.html:37
&gt;&gt;&gt; +        console.log(window.internals.isProcessingUserGesture() ? &quot;In User Gesture&quot; : &quot;Not in User Gesture&quot;);
&gt;&gt; 
&gt;&gt; You can make this:
&gt;&gt; 
&gt;&gt;     TestPage.addResult(...)
&gt;&gt; 
&gt;&gt; And it will show up better in the output (in the result test instead of at the top of the file).
&gt; 
&gt; My problem was that InspectorTest and other things were not available in the event handler. I assume that&apos;s because the &quot;test&quot; function has bound to a scope where those things are present. I&apos;ll check if TestPage is.
&gt; 
&gt; (I also couldn&apos;t put the handler inside the test function, because document wasn&apos;t available)

`TestPage` should always (IIRC) be available.  At the very least, it should be available after the test starts (which is before any &quot;click&quot; handler would fire).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506878</commentid>
    <comment_count>8</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-02-15 17:04:46 -0800</bug_when>
    <thetext>Committed r241633: &lt;https://trac.webkit.org/changeset/241633&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556869</commentid>
    <comment_count>9</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2019-07-29 18:53:00 -0700</bug_when>
    <thetext>*** Bug 162883 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362169</attachid>
            <date>2019-02-15 15:34:57 -0800</date>
            <delta_ts>2019-02-15 16:07:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194725-20190216103455.patch</filename>
            <type>text/plain</type>
            <size>27186</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxNDQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZDljMGYwNDUxNGY1MzIwZjcxNmJkZTgyMzhjZTAzZTI3NDA1NTdiLi5mOGQ2OTNiMzJiNTA3ZGEz
YTBmMWM0MzgwODkzNzcxZDBjZTQ5MGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAxOS0wMi0xNSAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWxsb3cgZW11bGF0aW9uIG9mIHVzZXIgZ2VzdHVyZXMgZnJvbSBXZWIgSW5zcGVj
dG9yIGNvbnNvbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5NDcyNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDgxMjY2MDQ+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHA6IEFkZCBhIG5ldyBvcHRpb25hbCBwYXJhbWV0ZXIs
IGVtdWxhdGVVc2VyR2VzdHVyZSwKKyAgICAgICAgdG8gdGhlIGV2YWx1YXRlIGZ1bmN0aW9uLCBh
bmQgbWFyayB0aGUgZnVuY3Rpb24gYXMgb3ZlcnJpZGUgc28gdGhhdCBQYWdlUnVudGltZUFnZW50
CisgICAgICAgIGNhbiBjaGFuZ2UgdGhlIGJlaGF2aW91ci4KKyAgICAgICAgKEluc3BlY3Rvcjo6
SW5zcGVjdG9yUnVudGltZUFnZW50OjpldmFsdWF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvdG9j
b2wvUnVudGltZS5qc29uOgorCiAyMDE5LTAyLTEzICBUYWRldSBaYWdhbGxvICA8dHphZ2FsbG9A
YXBwbGUuY29tPgogCiAgICAgICAgIENvZGVCbG9ja3MgcmVhZCBmcm9tIGRpc2sgc2hvdWxkIG5v
dCBiZSByZS13cml0dGVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjVkZGVlODJjZGFhNjNmOTFiODk1YzA3ODcw
ZDIzZTBhYWUyZDczYy4uOTY2ZWIzZjMzZGFiNjdkNWRlNWIzMjZlYTY2ZGM0ZjNjNTU2NzBjMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE5LTAyLTE1ICBEZWFuIEphY2tzb24gIDxk
aW5vQGFwcGxlLmNvbT4KKworICAgICAgICBBbGxvdyBlbXVsYXRpb24gb2YgdXNlciBnZXN0dXJl
cyBmcm9tIFdlYiBJbnNwZWN0b3IgY29uc29sZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0NzI1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80ODEy
NjYwND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
ZXN0OiBpbnNwZWN0b3IvcnVudGltZS9ldmFsdWF0ZS11c2VyR2VzdHVyZUVtdWxhdGlvbi5odG1s
CisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5jcHA6
IE92ZXJyaWRlIHRoZSBlbXVsYXRlIG1ldGhvZCBhbmQgY3JlYXRlCisgICAgICAgIGEgVXNlckdl
c3R1cmVJbmRpY2F0b3IgYmFzZWQgb24gdGhlIGVtdWxhdGVVc2VyR2VzdHVyZSBvcHRpb24uCisg
ICAgICAgIChXZWJDb3JlOjpQYWdlUnVudGltZUFnZW50OjpldmFsdWF0ZSk6CisgICAgICAgICog
aW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuaDoKKwogMjAxOS0wMi0xMyAg
QWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFN0
b3AgdXNpbmcgc2V0RGVmZXJzTG9hZGluZyBmcm9tIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdl
TG9nCmluZGV4IDE0MWMxMTMxOWU1MzU4Yjk3YWM0NWMyZDYwYjBlNjk1ZmVkYmY0NGYuLjRiYTQ3
NjI3NGIxNmQ0NDg1NDViYzY0MTMwMTU4Mzc3MTY3NjYwNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE5LTAyLTE1ICBEZWFuIEphY2tzb24gIDxkaW5vQGFw
cGxlLmNvbT4KKworICAgICAgICBBbGxvdyBlbXVsYXRpb24gb2YgdXNlciBnZXN0dXJlcyBmcm9t
IFdlYiBJbnNwZWN0b3IgY29uc29sZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk0NzI1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80ODEyNjYwND4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc29t
ZSBVSSBmb3IgZW11bGF0aW5nIGEgVXNlciBHZXN0dXJlIHdoZW4gZXZhbHVhdGluZyBpbiB0aGUg
Y29uc29sZS4gVGhpcworICAgICAgICBhbGxvd3MgdGhlIGRldmVsb3BlciB0byBkbyB0aGluZ3Mg
dGhhdCB3b3VsZCBvdGhlcndpc2UgcmVxdWlyZSBhY3R1YWwgaW50ZXJhY3Rpb24KKyAgICAgICAg
d2l0aCB0aGUgcGFnZSwgc3VjaCBhcyBzdGFydCBwbGF5YmFjayBvZiBtZWRpYSBvbiBpT1MuCisK
KyAgICAgICAgKiBMb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6Cisg
ICAgICAgICogVXNlckludGVyZmFjZS9CYXNlL1NldHRpbmcuanM6IEFkZCBhIG5ldyBzZXR0aW5n
IGZvciB0aGlzIG9wdGlvbi4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0ph
dmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5qczoKKyAgICAgICAgKFdJLkphdmFTY3JpcHRMb2dW
aWV3Q29udHJvbGxlci5wcm90b3R5cGUuY29uc29sZVByb21wdFRleHRDb21taXR0ZWQpOgorICAg
ICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvUnVudGltZU1hbmFnZXIuanM6IENhbGwg
ZXZhbHVhdGUgd2l0aCB0aGlzIG5ldyBvcHRpb24uCisgICAgICAgIChXSS5SdW50aW1lTWFuYWdl
ci5wcm90b3R5cGUuZXZhbHVhdGVJbkluc3BlY3RlZFdpbmRvdyk6CisgICAgICAgICogVXNlcklu
dGVyZmFjZS9WaWV3cy9Mb2dDb250ZW50Vmlldy5qczogQWRkIGEgbmV3IGNoZWNrYm94IGluIHRo
ZSB1cHBlciBiYXIKKyAgICAgICAgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gdG9nZ2xlIHRoZSBz
ZXR0aW5nLgorICAgICAgICAoV0kuTG9nQ29udGVudFZpZXcpOgorICAgICAgICAoV0kuTG9nQ29u
dGVudFZpZXcucHJvdG90eXBlLmdldCBuYXZpZ2F0aW9uSXRlbXMpOgorICAgICAgICAoV0kuTG9n
Q29udGVudFZpZXcucHJvdG90eXBlLl9leGVjdXRlSW5Vc2VyR2VzdHVyZVNldHRpbmdDaGFuZ2Vk
KToKKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvTmV0d29ya1RhYmxlQ29udGVudFZp
ZXcuanM6IFR3byBkcml2ZS1ieSB0eXBvIGZpeGVzIDopCisgICAgICAgIChXSS5OZXR3b3JrVGFi
bGVDb250ZW50Vmlldyk6IHBlcnNlcnZlIC0+IHByZXNlcnZlCisgICAgICAgIChXSS5OZXR3b3Jr
VGFibGVDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IG5hdmlnYXRpb25JdGVtcyk6IGNoZWNrYm94
cyAtPiBjaGVja2JveGVzCisKIDIwMTktMDItMTIgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJv
QGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBFeHBlcmltZW50YWwgc2V0dGlu
ZyBmb3IgQ1BVIFVzYWdlIFRpbWVsaW5lIGltcHJvdmVtZW50cwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRp
bWVBZ2VudC5jcHAKaW5kZXggZDY4YmI0MWI3ZTNjMTkyMWI2Yzk5OWEyNDdlNDViYTk3ODUzZmQ2
OC4uOGJmOWJlNGY2YzIxNmY1Y2U0Mzk1ZjQwMzg3NzM5MGUxOWU1ODRiOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JSdW50aW1lQWdlbnQuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgdm9pZCBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OnBhcnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBQcm90b2MKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpldmFsdWF0
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29u
c3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJ
LCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0
IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25z
dCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIFJlZlB0cjxQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYg
d2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQordm9pZCBJbnNwZWN0
b3JSdW50aW1lQWdlbnQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29s
KiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlv
bnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJv
b2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9v
bCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCosIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBleGVjdXRpb25Db250ZXh0
SWQpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdl
bnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1
bnRpbWVBZ2VudC5oCmluZGV4IGI2ZTJhZDA4MzE2ZTdmZTM4OWJlNmM3NWI5YTFhM2M1ZmUxZThl
ZTUuLmVhNjNkMGIyMTM0Nzk0YWRiZjRlNTkxZGM5ZTY4NTcxYTk2OTM3ZGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVB
Z2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvclJ1bnRpbWVBZ2VudC5oCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGVu
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlIHsgbV9lbmFibGVkID0gdHJ1ZTsgfQogICAgIHZv
aWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlIHsgbV9lbmFibGVkID0gZmFsc2U7IH0K
ICAgICB2b2lkIHBhcnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBQ
cm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlKiByZXN1bHQsIE9wdGlvbmFsPFN0cmlu
Zz4mIG1lc3NhZ2UsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4mKSBmaW5h
bDsKLSAgICB2b2lkIGV2YWx1YXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNz
aW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFu
ZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29s
ZSwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFs
dWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwg
UmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFs
PGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpIGZpbmFs
OworICAgIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5k
TGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xl
LCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1
ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBj
b25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25h
bDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKICAgICB2b2lkIGF3YWl0UHJvbWlz
ZShjb25zdCBTdHJpbmcmIHByb21pc2VPYmplY3RJZCwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1
ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBS
ZWY8QXdhaXRQcm9taXNlQ2FsbGJhY2s+JiYpIGZpbmFsOwogICAgIHZvaWQgY2FsbEZ1bmN0aW9u
T24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4
cHJlc3Npb24sIGNvbnN0IEpTT046OkFycmF5KiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3QgYm9v
bCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1
cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3du
KSBmaW5hbDsKICAgICB2b2lkIHJlbGVhc2VPYmplY3QoRXJyb3JTdHJpbmcmLCBjb25zdCBFcnJv
clN0cmluZyYgb2JqZWN0SWQpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbgppbmRleCA0MmYwNzQ1YWExYzIxYjBm
OThmOGU0OGFjMjIzOGU4NzRhYmFiMWRmLi42OTAyYjVlYmVlMzlkOGUwMmVmN2JiMjlkZjRiNjdk
OGE3YjQ2MGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3By
b3RvY29sL1J1bnRpbWUuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3Byb3RvY29sL1J1bnRpbWUuanNvbgpAQCAtMjE3LDcgKzIxNyw4IEBACiAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb250ZXh0SWQiLCAiJHJlZiI6ICJSdW50aW1lLkV4ZWN1dGlvbkNvbnRl
eHRJZCIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJTcGVjaWZpZXMgaW4gd2hp
Y2ggaXNvbGF0ZWQgY29udGV4dCB0byBwZXJmb3JtIGV2YWx1YXRpb24uIEVhY2ggY29udGVudCBz
Y3JpcHQgbGl2ZXMgaW4gYW4gaXNvbGF0ZWQgY29udGV4dCBhbmQgdGhpcyBwYXJhbWV0ZXIgbWF5
IGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb2YgdGhvc2UgY29udGV4dHMuIElmIHRoZSBwYXJhbWV0
ZXIgaXMgb21pdHRlZCBvciAwIHRoZSBldmFsdWF0aW9uIHdpbGwgYmUgcGVyZm9ybWVkIGluIHRo
ZSBjb250ZXh0IG9mIHRoZSBpbnNwZWN0ZWQgcGFnZS4iIH0sCiAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJyZXR1cm5CeVZhbHVlIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRy
dWUsICJkZXNjcmlwdGlvbiI6ICJXaGV0aGVyIHRoZSByZXN1bHQgaXMgZXhwZWN0ZWQgdG8gYmUg
YSBKU09OIG9iamVjdCB0aGF0IHNob3VsZCBiZSBzZW50IGJ5IHZhbHVlLiIgfSwKICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImdlbmVyYXRlUHJldmlldyIsICJ0eXBlIjogImJvb2xlYW4iLCAi
b3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciBwcmV2aWV3IHNob3VsZCBi
ZSBnZW5lcmF0ZWQgZm9yIHRoZSByZXN1bHQuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic2F2ZVJlc3VsdCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVz
Y3JpcHRpb24iOiAiV2hldGhlciB0aGUgcmVzdWx0aW5nIHZhbHVlIHNob3VsZCBiZSBjb25zaWRl
cmVkIGZvciBzYXZpbmcgaW4gdGhlICRuIGhpc3RvcnkuIiB9CisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJzYXZlUmVzdWx0IiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUs
ICJkZXNjcmlwdGlvbiI6ICJXaGV0aGVyIHRoZSByZXN1bHRpbmcgdmFsdWUgc2hvdWxkIGJlIGNv
bnNpZGVyZWQgZm9yIHNhdmluZyBpbiB0aGUgJG4gaGlzdG9yeS4iIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJlbXVsYXRlVXNlckdlc3R1cmUiLCAidHlwZSI6ICJib29sZWFuIiwgIm9w
dGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIldoZXRoZXIgdGhlIGV4cHJlc3Npb24gc2hv
dWxkIGJlIGNvbnNpZGVyZWQgdG8gYmUgaW4gYSB1c2VyIGdlc3R1cmUgb3Igbm90LiIgfQogICAg
ICAgICAgICAgXSwKICAgICAgICAgICAgICJyZXR1cm5zIjogWwogICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicmVzdWx0IiwgIiRyZWYiOiAiUmVtb3RlT2JqZWN0IiwgImRlc2NyaXB0aW9uIjog
IkV2YWx1YXRpb24gcmVzdWx0LiIgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmNwcAppbmRleCAxNzczNjcwMzBl
OTIwYWZhMjI2N2UwNmE2ZWFjODYyMWY1YjViYmNlLi4yOGEzYzdiMjI2MDMxMjA3NzhjMTIxOTUz
NjRjZTY2OWQwZGI5NzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAj
aW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGljYXRv
ci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luamVjdGVkU2NyaXB0Lmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmg+CiAKQEAgLTE3MCw0ICsx
NzEsMTYgQEAgdm9pZCBQYWdlUnVudGltZUFnZW50Ojpub3RpZnlDb250ZXh0Q3JlYXRlZChjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIEpTQzo6RXhlY1N0YXQKICAgICAgICAgLnJlbGVhc2UoKSk7CiB9
CiAKK3ZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAs
IGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVz
ZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJ
ZCwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3
LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1
bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0
SW5kZXgpCit7CisgICAgYXV0byB1c2VyR2VzdHVyZVN0YXRlID0gWyZdICgpIC0+IE9wdGlvbmFs
PFByb2Nlc3NpbmdVc2VyR2VzdHVyZVN0YXRlPiB7CisgICAgICAgIGlmICghZW11bGF0ZVVzZXJH
ZXN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJu
ICplbXVsYXRlVXNlckdlc3R1cmUgPyBPcHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0
ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IFdURjo6bnVsbG9wdDsKKyAgICB9KCk7CisKKyAg
ICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKHVzZXJHZXN0dXJlU3RhdGUp
OworICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoZXJyb3JTdHJpbmcsIGV4cHJl
c3Npb24sIG9iamVjdEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGRvTm90UGF1c2VPbkV4
Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgZXhlY3V0aW9uQ29udGV4dElkLCByZXR1cm5CeVZhbHVl
LCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQsIGVtdWxhdGVVc2VyR2VzdHVyZSwgcmVzdWx0
LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZVJ1bnRpbWVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1Bh
Z2VSdW50aW1lQWdlbnQuaAppbmRleCBkODBmOTI3ZjJkNmFmZDAxMDFiZTJlZjljYjdjZjYwNjkx
ZWZjMmMzLi43MmE0YjZjYjUxNWJhMGI1MTliYzM1NWQwZDNhNjEyN2NlZDIwNTI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGlt
ZUFnZW50LmgKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsK
ICAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlzYWJs
ZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOworICAgIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNv
bnN0IGJvb2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9u
RXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwg
Y29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBj
b25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQs
IE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5k
ZXgpIGZpbmFsOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCBk
aWRDcmVhdGVNYWluV29ybGRDb250ZXh0KEZyYW1lJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3Ry
aW5ncy5qcwppbmRleCBiNjczMTY4MDY0ZDNjZTRkN2RkYTIyNjMxMzJlYWQxOWVlNmI4NTMzLi5j
MGQ3ZWZkMzIzOTQ3YmQ4YjZjZmQ0MTMwN2RlYzM4OTgyZGZjZTg5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdz
LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xv
Y2FsaXplZFN0cmluZ3MuanMKQEAgLTQxMiw2ICs0MTIsNyBAQCBsb2NhbGl6ZWRTdHJpbmdzWyJF
dmVudCBEaXNwYXRjaGVkIl0gPSAiRXZlbnQgRGlzcGF0Y2hlZCI7CiBsb2NhbGl6ZWRTdHJpbmdz
WyJFdmVudCBMaXN0ZW5lcnMiXSA9ICJFdmVudCBMaXN0ZW5lcnMiOwogbG9jYWxpemVkU3RyaW5n
c1siRXZlbnRzIl0gPSAiRXZlbnRzIjsKIGxvY2FsaXplZFN0cmluZ3NbIkV4YW1wbGU6IFx1MjAx
QyVzXHUyMDFEIl0gPSAiRXhhbXBsZTogXHUyMDFDJXNcdTIwMUQiOworbG9jYWxpemVkU3RyaW5n
c1siRW11bGF0ZSBVc2VyIEdlc3R1cmUiXSA9ICJFbXVsYXRlIFVzZXIgR2VzdHVyZSI7CiBsb2Nh
bGl6ZWRTdHJpbmdzWyJFeGNlcHRpb24gd2l0aCB0aHJvd24gdmFsdWU6ICVzIl0gPSAiRXhjZXB0
aW9uIHdpdGggdGhyb3duIHZhbHVlOiAlcyI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJFeGl0ZWQgRnVs
bC1TY3JlZW4gTW9kZSJdID0gIkV4aXRlZCBGdWxsLVNjcmVlbiBNb2RlIjsKIGxvY2FsaXplZFN0
cmluZ3NbIkV4aXRlZCBMb3ctUG93ZXIgTW9kZSJdID0gIkV4aXRlZCBMb3ctUG93ZXIgTW9kZSI7
CkBAIC04MDksNiArODEwLDcgQEAgbG9jYWxpemVkU3RyaW5nc1siUmV2ZWFsIGluIE9yaWdpbmFs
IFJlc291cmNlIl0gPSAiUmV2ZWFsIGluIE9yaWdpbmFsIFJlc291cmNlIjsKIGxvY2FsaXplZFN0
cmluZ3NbIlJldmVhbCBpbiBSZXNvdXJjZXMgVGFiIl0gPSAiUmV2ZWFsIGluIFJlc291cmNlcyBU
YWIiOwogbG9jYWxpemVkU3RyaW5nc1siUm9sZSJdID0gIlJvbGUiOwogbG9jYWxpemVkU3RyaW5n
c1siUnVuICVkIl0gPSAiUnVuICVkIjsKK2xvY2FsaXplZFN0cmluZ3NbIlJ1biBjb25zb2xlIGNv
bW1hbmRzIGFzIGlmIGluc2lkZSBhIHVzZXIgZ2VzdHVyZSJdID0gIlJ1biBjb25zb2xlIGNvbW1h
bmRzIGFzIGlmIGluc2lkZSBhIHVzZXIgZ2VzdHVyZSI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJSdW5u
aW5nIHRoZSBcdTIwMUMlc1x1MjAxRCBhdWRpdCJdID0gIlJ1bm5pbmcgdGhlIFx1MjAxQyVzXHUy
MDFEIGF1ZGl0IjsKIGxvY2FsaXplZFN0cmluZ3NbIlNhbXBsZXMiXSA9ICJTYW1wbGVzIjsKIGxv
Y2FsaXplZFN0cmluZ3NbIlNhdmUgJWQiXSA9ICJTYXZlICVkIjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvU2V0dGluZy5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvU2V0dGluZy5qcwppbmRleCAyNzBjZjI2
ZmYwNDgzODM3OTY0ZTZmN2Q4ZjAxNzUxZDQ1YmNlMTNmLi42NWQ1NDQ3YjA4YThjZDVlODk2Y2Qw
MzVjN2I4NmNiYjQ4ODdiYWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9CYXNlL1NldHRpbmcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQmFzZS9TZXR0aW5nLmpzCkBAIC0xMzEsNiArMTMxLDcgQEAgV0kuc2V0dGlu
Z3MgPSB7CiAgICAgY2xlYXJOZXR3b3JrT25OYXZpZ2F0ZTogbmV3IFdJLlNldHRpbmcoImNsZWFy
LW5ldHdvcmstb24tbmF2aWdhdGUiLCB0cnVlKSwKICAgICBlbmFibGVDb250cm9sRmxvd1Byb2Zp
bGVyOiBuZXcgV0kuU2V0dGluZygiZW5hYmxlLWNvbnRyb2wtZmxvdy1wcm9maWxlciIsIGZhbHNl
KSwKICAgICBlbmFibGVMaW5lV3JhcHBpbmc6IG5ldyBXSS5TZXR0aW5nKCJlbmFibGUtbGluZS13
cmFwcGluZyIsIGZhbHNlKSwKKyAgICBlbXVsYXRlSW5Vc2VyR2VzdHVyZTogbmV3IFdJLlNldHRp
bmcoImVtdWxhdGUtaW4tdXNlci1nZXN0dXJlIiwgZmFsc2UpLAogICAgIGdyb3VwQnlET01Ob2Rl
OiBuZXcgV0kuU2V0dGluZygiZ3JvdXAtYnktZG9tLW5vZGUiLCBmYWxzZSksCiAgICAgaW5kZW50
VW5pdDogbmV3IFdJLlNldHRpbmcoImluZGVudC11bml0IiwgNCksCiAgICAgaW5kZW50V2l0aFRh
YnM6IG5ldyBXSS5TZXR0aW5nKCJpbmRlbnQtd2l0aC10YWJzIiwgZmFsc2UpLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNj
cmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzCmluZGV4IGQy
OTNjMTRhMmY4MzA0OTcxMjViODY1NmJlOTYzNWI4MWU0MGZmNTkuLmI3ZWMxZTZiZjQ2MmY4MDU4
YTU2ZjYzNzk3MWUxODY2Y2M0MDI5NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9K
YXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuanMKQEAgLTI0Miw2ICsyNDIsNyBAQCBXSS5KYXZh
U2NyaXB0TG9nVmlld0NvbnRyb2xsZXIgPSBjbGFzcyBKYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xs
ZXIgZXh0ZW5kcyBXSS5PYgogICAgICAgICAgICAgcmV0dXJuQnlWYWx1ZTogZmFsc2UsCiAgICAg
ICAgICAgICBnZW5lcmF0ZVByZXZpZXc6IHRydWUsCiAgICAgICAgICAgICBzYXZlUmVzdWx0OiB0
cnVlLAorICAgICAgICAgICAgZW11bGF0ZVVzZXJHZXN0dXJlOiBXSS5zZXR0aW5ncy5lbXVsYXRl
SW5Vc2VyR2VzdHVyZS52YWx1ZSwKICAgICAgICAgICAgIHNvdXJjZVVSTEFwcGVuZGVyOiBhcHBl
bmRXZWJJbnNwZWN0b3JDb25zb2xlRXZhbHVhdGlvblNvdXJjZVVSTCwKICAgICAgICAgfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxl
cnMvUnVudGltZU1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Db250cm9sbGVycy9SdW50aW1lTWFuYWdlci5qcwppbmRleCBhNzFiZWVjZWQyMDcyN2Q3MDBk
Y2Y2OTEzNjAyZDdiZTcwYzlmNDQ2Li5iMzM5YzBlYTNjNTA5ZDIxMWYxYWVhYTdlODgxMDQ3MTk0
YTlmZTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9SdW50aW1lTWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Db250cm9sbGVycy9SdW50aW1lTWFuYWdlci5qcwpAQCAtODEsMTMgKzgx
LDE0IEBAIFdJLlJ1bnRpbWVNYW5hZ2VyID0gY2xhc3MgUnVudGltZU1hbmFnZXIgZXh0ZW5kcyBX
SS5PYmplY3QKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGxldCB7
b2JqZWN0R3JvdXAsIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgZG9Ob3RQYXVzZU9uRXhjZXB0aW9u
c0FuZE11dGVDb25zb2xlLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1
bHQsIHNvdXJjZVVSTEFwcGVuZGVyfSA9IG9wdGlvbnM7CisgICAgICAgIGxldCB7b2JqZWN0R3Jv
dXAsIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVD
b25zb2xlLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQsIGVtdWxh
dGVVc2VyR2VzdHVyZSwgc291cmNlVVJMQXBwZW5kZXJ9ID0gb3B0aW9uczsKIAogICAgICAgICBp
bmNsdWRlQ29tbWFuZExpbmVBUEkgPSBpbmNsdWRlQ29tbWFuZExpbmVBUEkgfHwgZmFsc2U7CiAg
ICAgICAgIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSA9IGRvTm90UGF1c2VP
bkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSB8fCBmYWxzZTsKICAgICAgICAgcmV0dXJuQnlWYWx1
ZSA9IHJldHVybkJ5VmFsdWUgfHwgZmFsc2U7CiAgICAgICAgIGdlbmVyYXRlUHJldmlldyA9IGdl
bmVyYXRlUHJldmlldyB8fCBmYWxzZTsKICAgICAgICAgc2F2ZVJlc3VsdCA9IHNhdmVSZXN1bHQg
fHwgZmFsc2U7CisgICAgICAgIGVtdWxhdGVVc2VyR2VzdHVyZSA9IGVtdWxhdGVVc2VyR2VzdHVy
ZSB8fCBmYWxzZTsKICAgICAgICAgc291cmNlVVJMQXBwZW5kZXIgPSBzb3VyY2VVUkxBcHBlbmRl
ciB8fCBhcHBlbmRXZWJJbnNwZWN0b3JTb3VyY2VVUkw7CiAKICAgICAgICAgY29uc29sZS5hc3Nl
cnQob2JqZWN0R3JvdXAsICJSdW50aW1lTWFuYWdlci5ldmFsdWF0ZUluSW5zcGVjdGVkV2luZG93
IHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIHdpdGggYW4gb2JqZWN0R3JvdXAiKTsKQEAgLTEzNyw3
ICsxMzgsNyBAQCBXSS5SdW50aW1lTWFuYWdlciA9IGNsYXNzIFJ1bnRpbWVNYW5hZ2VyIGV4dGVu
ZHMgV0kuT2JqZWN0CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDT01QQVRJQklMSVRZIChpT1Mg
OCk6ICJzYXZlUmVzdWx0IiBkaWQgbm90IGV4aXN0LgotICAgICAgICB0YXJnZXQuUnVudGltZUFn
ZW50LmV2YWx1YXRlLmludm9rZSh7ZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGluY2x1ZGVDb21t
YW5kTGluZUFQSSwgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb250ZXh0
SWQ6IGV4ZWN1dGlvbkNvbnRleHRJZCwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBz
YXZlUmVzdWx0fSwgZXZhbENhbGxiYWNrLmJpbmQodGhpcyksIHRhcmdldC5SdW50aW1lQWdlbnQp
OworICAgICAgICB0YXJnZXQuUnVudGltZUFnZW50LmV2YWx1YXRlLmludm9rZSh7ZXhwcmVzc2lv
biwgb2JqZWN0R3JvdXAsIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLCBjb250ZXh0SWQ6IGV4ZWN1dGlvbkNvbnRleHRJZCwgcmV0dXJu
QnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0LCBlbXVsYXRlVXNlckdlc3R1cmV9
LCBldmFsQ2FsbGJhY2suYmluZCh0aGlzKSwgdGFyZ2V0LlJ1bnRpbWVBZ2VudCk7CiAgICAgfQog
CiAgICAgc2F2ZVJlc3VsdChyZW1vdGVPYmplY3QsIGNhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvTG9nQ29udGVudFZpZXcuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Mb2dDb250ZW50Vmll
dy5qcwppbmRleCAxY2FjYTVjNGQzMGJmOWQxNTMzMTA1MTFlM2Y1NjQ5OTUwM2FjZTBhLi4xYzE1
YzNiNzE2MzRjYWI0Njc4Y2FmZjc1NWJhZjZiYzg3ZDNjN2M3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Mb2dDb250ZW50Vmlldy5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Mb2dDb250ZW50Vmll
dy5qcwpAQCAtNjYsMTIgKzY2LDE3IEBAIFdJLkxvZ0NvbnRlbnRWaWV3ID0gY2xhc3MgTG9nQ29u
dGVudFZpZXcgZXh0ZW5kcyBXSS5Db250ZW50VmlldwogICAgICAgICB0aGlzLl9zZWxlY3RlZFNl
YXJjaE1hdGNoID0gbnVsbDsKICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTZWFyY2hNYXRjaElzVmFs
aWQgPSBmYWxzZTsKIAotICAgICAgICB0aGlzLl9wcmVzZXJ2ZUxvZ05hdmlnYXRpb25JdGVtID0g
bmV3IFdJLkNoZWNrYm94TmF2aWdhdGlvbkl0ZW0oInBlcnNlcnZlLWxvZyIsIFdJLlVJU3RyaW5n
KCJQcmVzZXJ2ZSBMb2ciKSwgIVdJLnNldHRpbmdzLmNsZWFyTG9nT25OYXZpZ2F0ZS52YWx1ZSk7
CisgICAgICAgIHRoaXMuX3ByZXNlcnZlTG9nTmF2aWdhdGlvbkl0ZW0gPSBuZXcgV0kuQ2hlY2ti
b3hOYXZpZ2F0aW9uSXRlbSgicHJlc2VydmUtbG9nIiwgV0kuVUlTdHJpbmcoIlByZXNlcnZlIExv
ZyIpLCAhV0kuc2V0dGluZ3MuY2xlYXJMb2dPbk5hdmlnYXRlLnZhbHVlKTsKICAgICAgICAgdGhp
cy5fcHJlc2VydmVMb2dOYXZpZ2F0aW9uSXRlbS50b29sdGlwID0gV0kuVUlTdHJpbmcoIkRvIG5v
dCBjbGVhciB0aGUgY29uc29sZSBvbiBuZXcgcGFnZSBsb2FkcyIpOwogICAgICAgICB0aGlzLl9w
cmVzZXJ2ZUxvZ05hdmlnYXRpb25JdGVtLmFkZEV2ZW50TGlzdGVuZXIoV0kuQ2hlY2tib3hOYXZp
Z2F0aW9uSXRlbS5FdmVudC5DaGVja2VkRGlkQ2hhbmdlLCAoKSA9PiB7IFdJLnNldHRpbmdzLmNs
ZWFyTG9nT25OYXZpZ2F0ZS52YWx1ZSA9ICFXSS5zZXR0aW5ncy5jbGVhckxvZ09uTmF2aWdhdGUu
dmFsdWU7IH0pOwogICAgICAgICBXSS5zZXR0aW5ncy5jbGVhckxvZ09uTmF2aWdhdGUuYWRkRXZl
bnRMaXN0ZW5lcihXSS5TZXR0aW5nLkV2ZW50LkNoYW5nZWQsIHRoaXMuX2NsZWFyTG9nT25OYXZp
Z2F0ZVNldHRpbmdDaGFuZ2VkLCB0aGlzKTsKIAotICAgICAgICB0aGlzLl9jaGVja2JveHNOYXZp
Z2F0aW9uSXRlbUdyb3VwID0gbmV3IFdJLkdyb3VwTmF2aWdhdGlvbkl0ZW0oW3RoaXMuX3ByZXNl
cnZlTG9nTmF2aWdhdGlvbkl0ZW0sIG5ldyBXSS5EaXZpZGVyTmF2aWdhdGlvbkl0ZW1dKTsKKyAg
ICAgICAgdGhpcy5fZW11bGF0ZUluVXNlckdlc3R1cmVOYXZpZ2F0aW9uSXRlbSA9IG5ldyBXSS5D
aGVja2JveE5hdmlnYXRpb25JdGVtKCJlbXVsYXRlLWluLXVzZXItZ2VzdHVyZSIsIFdJLlVJU3Ry
aW5nKCJFbXVsYXRlIFVzZXIgR2VzdHVyZSIpLCBXSS5zZXR0aW5ncy5lbXVsYXRlSW5Vc2VyR2Vz
dHVyZS52YWx1ZSk7CisgICAgICAgIHRoaXMuX2VtdWxhdGVJblVzZXJHZXN0dXJlTmF2aWdhdGlv
bkl0ZW0udG9vbHRpcCA9IFdJLlVJU3RyaW5nKCJSdW4gY29uc29sZSBjb21tYW5kcyBhcyBpZiBp
bnNpZGUgYSB1c2VyIGdlc3R1cmUiKTsKKyAgICAgICAgdGhpcy5fZW11bGF0ZUluVXNlckdlc3R1
cmVOYXZpZ2F0aW9uSXRlbS5hZGRFdmVudExpc3RlbmVyKFdJLkNoZWNrYm94TmF2aWdhdGlvbkl0
ZW0uRXZlbnQuQ2hlY2tlZERpZENoYW5nZSwgKCkgPT4geyBXSS5zZXR0aW5ncy5lbXVsYXRlSW5V
c2VyR2VzdHVyZS52YWx1ZSA9ICFXSS5zZXR0aW5ncy5lbXVsYXRlSW5Vc2VyR2VzdHVyZS52YWx1
ZTsgfSk7CisgICAgICAgIFdJLnNldHRpbmdzLmVtdWxhdGVJblVzZXJHZXN0dXJlLmFkZEV2ZW50
TGlzdGVuZXIoV0kuU2V0dGluZy5FdmVudC5DaGFuZ2VkLCB0aGlzLl9lbXVsYXRlSW5Vc2VyR2Vz
dHVyZVNldHRpbmdDaGFuZ2VkLCB0aGlzKTsKKworICAgICAgICB0aGlzLl9jaGVja2JveGVzTmF2
aWdhdGlvbkl0ZW1Hcm91cCA9IG5ldyBXSS5Hcm91cE5hdmlnYXRpb25JdGVtKFt0aGlzLl9wcmVz
ZXJ2ZUxvZ05hdmlnYXRpb25JdGVtLCB0aGlzLl9lbXVsYXRlSW5Vc2VyR2VzdHVyZU5hdmlnYXRp
b25JdGVtLCBuZXcgV0kuRGl2aWRlck5hdmlnYXRpb25JdGVtXSk7CiAKICAgICAgICAgbGV0IHNj
b3BlQmFySXRlbXMgPSBbCiAgICAgICAgICAgICBuZXcgV0kuU2NvcGVCYXJJdGVtKFdJLkxvZ0Nv
bnRlbnRWaWV3LlNjb3Blcy5BbGwsIFdJLlVJU3RyaW5nKCJBbGwiKSwge2V4Y2x1c2l2ZTogdHJ1
ZX0pLApAQCAtMTM2LDcgKzE0MSw3IEBAIFdJLkxvZ0NvbnRlbnRWaWV3ID0gY2xhc3MgTG9nQ29u
dGVudFZpZXcgZXh0ZW5kcyBXSS5Db250ZW50VmlldwogICAgICAgICBpZiAoV0kuaXNTaG93aW5n
U3BsaXRDb25zb2xlKCkpCiAgICAgICAgICAgICBuYXZpZ2F0aW9uSXRlbXMucHVzaChuZXcgV0ku
RGl2aWRlck5hdmlnYXRpb25JdGVtLCB0aGlzLl9zaG93Q29uc29sZVRhYk5hdmlnYXRpb25JdGVt
KTsKICAgICAgICAgZWxzZSBpZiAoV0kuaXNTaG93aW5nQ29uc29sZVRhYigpKQotICAgICAgICAg
ICAgbmF2aWdhdGlvbkl0ZW1zLnVuc2hpZnQodGhpcy5fZmluZEJhbm5lciwgdGhpcy5fY2hlY2ti
b3hzTmF2aWdhdGlvbkl0ZW1Hcm91cCk7CisgICAgICAgICAgICBuYXZpZ2F0aW9uSXRlbXMudW5z
aGlmdCh0aGlzLl9maW5kQmFubmVyLCB0aGlzLl9jaGVja2JveGVzTmF2aWdhdGlvbkl0ZW1Hcm91
cCk7CiAKICAgICAgICAgcmV0dXJuIG5hdmlnYXRpb25JdGVtczsKICAgICB9CkBAIC04NDksNiAr
ODU0LDExIEBAIFdJLkxvZ0NvbnRlbnRWaWV3ID0gY2xhc3MgTG9nQ29udGVudFZpZXcgZXh0ZW5k
cyBXSS5Db250ZW50VmlldwogICAgICAgICB0aGlzLl9wcmVzZXJ2ZUxvZ05hdmlnYXRpb25JdGVt
LmNoZWNrZWQgPSAhV0kuc2V0dGluZ3MuY2xlYXJMb2dPbk5hdmlnYXRlLnZhbHVlOwogICAgIH0K
IAorICAgIF9leGVjdXRlSW5Vc2VyR2VzdHVyZVNldHRpbmdDaGFuZ2VkKCkKKyAgICB7CisgICAg
ICAgIHRoaXMuX2V4ZWN1dGVJblVzZXJHZXN0dXJlTmF2aWdhdGlvbkl0ZW0uY2hlY2tlZCA9IFdJ
LnNldHRpbmdzLmV4ZWN1dGVJblVzZXJHZXN0dXJlLnZhbHVlOworICAgIH0KKwogICAgIF9rZXlE
b3duKGV2ZW50KQogICAgIHsKICAgICAgICAgbGV0IGlzUlRMID0gV0kucmVzb2x2ZWRMYXlvdXRE
aXJlY3Rpb24oKSA9PT0gV0kuTGF5b3V0RGlyZWN0aW9uLlJUTDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL05ldHdvcmtUYWJsZUNvbnRlbnRW
aWV3LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvTmV0d29y
a1RhYmxlQ29udGVudFZpZXcuanMKaW5kZXggNDM4MTVhZjAxMzFkZjk5NDUwOTVjZTIxODc1MDdm
OGY1ODFjNjRiYS4uMzQ5ZTY4NTc2MWI4NGQwMTgxYjUzOTQ4ZDYyNjgxYWFmM2RjZDNmOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvTmV0d29y
a1RhYmxlQ29udGVudFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvTmV0d29ya1RhYmxlQ29udGVudFZpZXcuanMKQEAgLTEwMyw3ICsxMDMsNyBA
QCBXSS5OZXR3b3JrVGFibGVDb250ZW50VmlldyA9IGNsYXNzIE5ldHdvcmtUYWJsZUNvbnRlbnRW
aWV3IGV4dGVuZHMgV0kuQ29udGVudFZpZQogCiAgICAgICAgIHRoaXMuX2VtcHR5RmlsdGVyUmVz
dWx0c01lc3NhZ2VFbGVtZW50ID0gbnVsbDsKIAotICAgICAgICB0aGlzLl9jbGVhck9uTG9hZE5h
dmlnYXRpb25JdGVtID0gbmV3IFdJLkNoZWNrYm94TmF2aWdhdGlvbkl0ZW0oInBlcnNlcnZlLWxv
ZyIsIFdJLlVJU3RyaW5nKCJQcmVzZXJ2ZSBMb2ciKSwgIVdJLnNldHRpbmdzLmNsZWFyTmV0d29y
a09uTmF2aWdhdGUudmFsdWUpOworICAgICAgICB0aGlzLl9jbGVhck9uTG9hZE5hdmlnYXRpb25J
dGVtID0gbmV3IFdJLkNoZWNrYm94TmF2aWdhdGlvbkl0ZW0oInByZXNlcnZlLWxvZyIsIFdJLlVJ
U3RyaW5nKCJQcmVzZXJ2ZSBMb2ciKSwgIVdJLnNldHRpbmdzLmNsZWFyTmV0d29ya09uTmF2aWdh
dGUudmFsdWUpOwogICAgICAgICB0aGlzLl9jbGVhck9uTG9hZE5hdmlnYXRpb25JdGVtLnRvb2x0
aXAgPSBXSS5VSVN0cmluZygiRG8gbm90IGNsZWFyIG5ldHdvcmsgaXRlbXMgb24gbmV3IHBhZ2Ug
bG9hZHMiKTsKICAgICAgICAgdGhpcy5fY2xlYXJPbkxvYWROYXZpZ2F0aW9uSXRlbS5hZGRFdmVu
dExpc3RlbmVyKFdJLkNoZWNrYm94TmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2hlY2tlZERpZENoYW5n
ZSwgKCkgPT4geyBXSS5zZXR0aW5ncy5jbGVhck5ldHdvcmtPbk5hdmlnYXRlLnZhbHVlID0gIVdJ
LnNldHRpbmdzLmNsZWFyTmV0d29ya09uTmF2aWdhdGUudmFsdWU7IH0pOwogICAgICAgICBXSS5z
ZXR0aW5ncy5jbGVhck5ldHdvcmtPbk5hdmlnYXRlLmFkZEV2ZW50TGlzdGVuZXIoV0kuU2V0dGlu
Zy5FdmVudC5DaGFuZ2VkLCB0aGlzLl9jbGVhck5ldHdvcmtPbk5hdmlnYXRlU2V0dGluZ0NoYW5n
ZWQsIHRoaXMpOwpAQCAtMTEzLDggKzExMyw4IEBAIFdJLk5ldHdvcmtUYWJsZUNvbnRlbnRWaWV3
ID0gY2xhc3MgTmV0d29ya1RhYmxlQ29udGVudFZpZXcgZXh0ZW5kcyBXSS5Db250ZW50VmllCiAg
ICAgICAgIHRoaXMuX2hhckV4cG9ydE5hdmlnYXRpb25JdGVtLnRvb2x0aXAgPSBXSS5VSVN0cmlu
ZygiSEFSIEV4cG9ydCAoJXMpIikuZm9ybWF0KFdJLnNhdmVLZXlib2FyZFNob3J0Y3V0LmRpc3Bs
YXlOYW1lKTsKICAgICAgICAgdGhpcy5faGFyRXhwb3J0TmF2aWdhdGlvbkl0ZW0uYWRkRXZlbnRM
aXN0ZW5lcihXSS5CdXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlja2VkLCAoKSA9PiB7IHRo
aXMuX2V4cG9ydEhBUigpOyB9KTsKIAotICAgICAgICB0aGlzLl9jaGVja2JveHNOYXZpZ2F0aW9u
SXRlbUdyb3VwID0gbmV3IFdJLkdyb3VwTmF2aWdhdGlvbkl0ZW0oW3RoaXMuX2NsZWFyT25Mb2Fk
TmF2aWdhdGlvbkl0ZW0sIG5ldyBXSS5EaXZpZGVyTmF2aWdhdGlvbkl0ZW1dKTsKLSAgICAgICAg
dGhpcy5fY2hlY2tib3hzTmF2aWdhdGlvbkl0ZW1Hcm91cC52aXNpYmlsaXR5UHJpb3JpdHkgPSBX
SS5OYXZpZ2F0aW9uSXRlbS5WaXNpYmlsaXR5UHJpb3JpdHkuTG93OworICAgICAgICB0aGlzLl9j
aGVja2JveGVzTmF2aWdhdGlvbkl0ZW1Hcm91cCA9IG5ldyBXSS5Hcm91cE5hdmlnYXRpb25JdGVt
KFt0aGlzLl9jbGVhck9uTG9hZE5hdmlnYXRpb25JdGVtLCBuZXcgV0kuRGl2aWRlck5hdmlnYXRp
b25JdGVtXSk7CisgICAgICAgIHRoaXMuX2NoZWNrYm94ZXNOYXZpZ2F0aW9uSXRlbUdyb3VwLnZp
c2liaWxpdHlQcmlvcml0eSA9IFdJLk5hdmlnYXRpb25JdGVtLlZpc2liaWxpdHlQcmlvcml0eS5M
b3c7CiAKICAgICAgICAgdGhpcy5fYnV0dG9uc05hdmlnYXRpb25JdGVtR3JvdXAgPSBuZXcgV0ku
R3JvdXBOYXZpZ2F0aW9uSXRlbShbdGhpcy5faGFyRXhwb3J0TmF2aWdhdGlvbkl0ZW0sIG5ldyBX
SS5EaXZpZGVyTmF2aWdhdGlvbkl0ZW1dKTsKICAgICAgICAgdGhpcy5fYnV0dG9uc05hdmlnYXRp
b25JdGVtR3JvdXAudmlzaWJpbGl0eVByaW9yaXR5ID0gV0kuTmF2aWdhdGlvbkl0ZW0uVmlzaWJp
bGl0eVByaW9yaXR5LkxvdzsKQEAgLTIwNyw3ICsyMDcsNyBAQCBXSS5OZXR3b3JrVGFibGVDb250
ZW50VmlldyA9IGNsYXNzIE5ldHdvcmtUYWJsZUNvbnRlbnRWaWV3IGV4dGVuZHMgV0kuQ29udGVu
dFZpZQogCiAgICAgZ2V0IG5hdmlnYXRpb25JdGVtcygpCiAgICAgewotICAgICAgICBsZXQgaXRl
bXMgPSBbdGhpcy5fY2hlY2tib3hzTmF2aWdhdGlvbkl0ZW1Hcm91cCwgdGhpcy5fYnV0dG9uc05h
dmlnYXRpb25JdGVtR3JvdXBdOworICAgICAgICBsZXQgaXRlbXMgPSBbdGhpcy5fY2hlY2tib3hl
c05hdmlnYXRpb25JdGVtR3JvdXAsIHRoaXMuX2J1dHRvbnNOYXZpZ2F0aW9uSXRlbUdyb3VwXTsK
ICAgICAgICAgaWYgKHRoaXMuX2Rpc2FibGVSZXNvdXJjZUNhY2hlTmF2aWdhdGlvbkl0ZW0pCiAg
ICAgICAgICAgICBpdGVtcy5wdXNoKHRoaXMuX2Rpc2FibGVSZXNvdXJjZUNhY2hlTmF2aWdhdGlv
bkl0ZW0pOwogICAgICAgICBpdGVtcy5wdXNoKHRoaXMuX2NsZWFyTmV0d29ya0l0ZW1zTmF2aWdh
dGlvbkl0ZW0pOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDUyZTkyYjRlNWJmODYxMWE2MGQwMjNkMDhkNWU0ZjI0YWRkMWFj
ZjAuLjY2ODg1YjliZDE1ZGYwODUzOTBiNzM4ZWQ4ZTg2ZTBkYWE5NWNhMzIgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxOS0wMi0xNSAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWxsb3cgZW11bGF0aW9uIG9mIHVzZXIgZ2VzdHVyZXMgZnJvbSBXZWIgSW5zcGVj
dG9yIGNvbnNvbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5NDcyNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDgxMjY2MDQ+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvcnVudGlt
ZS9ldmFsdWF0ZS11c2VyR2VzdHVyZUVtdWxhdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGluc3BlY3Rvci9ydW50aW1lL2V2YWx1YXRlLXVzZXJHZXN0dXJlRW11bGF0aW9uLmh0
bWw6IEFkZGVkLgorCiAyMDE5LTAyLTEzICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCB0d28gcmVncmVzc2lvbiB0ZXN0cyBmb3IgcmVmZXJlbmNlIGN5Y2xl
IGluIEluZGV4ZWREQgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3J1bnRpbWUv
ZXZhbHVhdGUtdXNlckdlc3R1cmVFbXVsYXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3J1bnRpbWUvZXZhbHVhdGUtdXNlckdlc3R1cmVFbXVsYXRpb24tZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc3ODk3MmQxY2I1ZGYzODcyYmYyMjE4NTBjNWNkZjViODgwMGI3M2QK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcnVudGltZS9ldmFsdWF0
ZS11c2VyR2VzdHVyZUVtdWxhdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5IEBACitDT05T
T0xFIE1FU1NBR0U6IGxpbmUgMzc6IE5vdCBpbiBVc2VyIEdlc3R1cmUKK0NPTlNPTEUgTUVTU0FH
RTogbGluZSAzNzogSW4gVXNlciBHZXN0dXJlCitUZXN0cyBmb3IgUnVudGltZSBlbXVsYXRlVXNl
ckdlc3R1cmUgb3B0aW9uLgorCisKKz09IFJ1bm5pbmcgdGVzdCBzdWl0ZTogUnVudGltZS5ldmFs
dWF0ZVVzZXJHZXN0dXJlRW11bGF0aW9uCistLSBSdW5uaW5nIHRlc3QgY2FzZTogRXZhbHVhdGVX
aXRob3V0RW11bGF0aW5nVXNlckdlc3R1cmUKKy0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBFdmFsdWF0
ZVdpdGhFbXVsYXRpbmdVc2VyR2VzdHVyZQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvcnVudGltZS9ldmFsdWF0ZS11c2VyR2VzdHVyZUVtdWxhdGlvbi5odG1sIGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3J1bnRpbWUvZXZhbHVhdGUtdXNlckdlc3R1cmVFbXVsYXRpb24uaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43NzFhNzZiMmExYzY4M2U0ZmQ2ZjFmMWQ5YjE2OGMzNWRiMjNlZTQ0Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3J1bnRpbWUvZXZhbHVhdGUt
dXNlckdlc3R1cmVFbXVsYXRpb24uaHRtbApAQCAtMCwwICsxLDUwIEBACis8IWRvY3R5cGUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0
b3IvcmVzb3VyY2VzL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5j
dGlvbiB0ZXN0KCkKK3sKKyAgICBsZXQgc3VpdGUgPSBJbnNwZWN0b3JUZXN0LmNyZWF0ZUFzeW5j
U3VpdGUoIlJ1bnRpbWUuZXZhbHVhdGVVc2VyR2VzdHVyZUVtdWxhdGlvbiIpOworCisgICAgc3Vp
dGUuYWRkVGVzdENhc2UoeworICAgICAgICBuYW1lOiAiRXZhbHVhdGVXaXRob3V0RW11bGF0aW5n
VXNlckdlc3R1cmUiLAorICAgICAgICBkZXNjcmlwdGlvbjogIkV2YWx1dGUgd2l0aCB0aGUgZW11
bGF0ZVVzZXJHZXN0dXJlIG9wdGlvbiBzZXQgdG8gZmFsc2UuIiwKKyAgICAgICAgdGVzdChyZXNv
bHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZS5pbnZva2Uo
e2V4cHJlc3Npb246ICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9vJykuY2xpY2soKSIsIG9i
amVjdEdyb3VwOiAidGVzdCIsIGVtdWxhdGVVc2VyR2VzdHVyZTogZmFsc2V9LCAoZXJyb3IpID0+
IHsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydCghZXJyb3IsICJTaG91bGQg
bm90IGJlIGEgcHJvdG9jb2wgZXJyb3IuIik7CisgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHN1aXRlLmFkZFRlc3RD
YXNlKHsKKyAgICAgICAgbmFtZTogIkV2YWx1YXRlV2l0aEVtdWxhdGluZ1VzZXJHZXN0dXJlIiwK
KyAgICAgICAgZGVzY3JpcHRpb246ICJFdmFsdXRlIHdpdGggdGhlIGVtdWxhdGVVc2VyR2VzdHVy
ZSBvcHRpb24gc2V0IHRvIHRydWUuIiwKKyAgICAgICAgdGVzdChyZXNvbHZlLCByZWplY3QpIHsK
KyAgICAgICAgICAgIFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZS5pbnZva2Uoe2V4cHJlc3Npb246ICJk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9vJykuY2xpY2soKSIsIG9iamVjdEdyb3VwOiAidGVz
dCIsIGVtdWxhdGVVc2VyR2VzdHVyZTogdHJ1ZX0sIChlcnJvcikgPT4geworICAgICAgICAgICAg
ICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KCFlcnJvciwgIlNob3VsZCBub3QgYmUgYSBwcm90b2Nv
bCBlcnJvci4iKTsKKyAgICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgIH0pOworCisgICAgc3VpdGUucnVuVGVzdENhc2VzQW5kRmluaXNoKCk7
Cit9CisKK2Z1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7CisgICAgaWYgKHdpbmRvdy5pbnRl
cm5hbHMpCisgICAgICAgIGNvbnNvbGUubG9nKHdpbmRvdy5pbnRlcm5hbHMuaXNQcm9jZXNzaW5n
VXNlckdlc3R1cmUoKSA/ICJJbiBVc2VyIEdlc3R1cmUiIDogIk5vdCBpbiBVc2VyIEdlc3R1cmUi
KTsKK30KKword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmdW5jdGlvbiAoKSB7Cisg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvbyIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNr
IiwgaGFuZGxlQ2xpY2ssIGZhbHNlKQorICAgIHJ1blRlc3QoKTsKK30sIGZhbHNlKTsKKzwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8YSBpZD0iZm9vIj48L2E+Cis8cD5UZXN0cyBmb3IgUnVu
dGltZSBlbXVsYXRlVXNlckdlc3R1cmUgb3B0aW9uLjwvcD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="378821"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>