<?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>174006</bug_id>
          
          <creation_ts>2017-06-29 19:32:01 -0700</creation_ts>
          <short_desc>Web Inspector: Add Runtime.await to run an await expression (like Runtime.evaluate)</short_desc>
          <delta_ts>2017-07-04 04:31:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>173890</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1324241</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-29 19:32:01 -0700</bug_when>
    <thetext>We have an `await` convenience in the console that will allow you to await an asynchronous result.

Currently it works like:

    &gt; await fetch(&quot;data.json&quot;)
    &lt; undefined
    [Info] Response {type: &quot;basic&quot;, url: &quot;data.json&quot;, redirected: false, status: 200, ok: true, …}

It would be nicer to:

  - Not output the `undefined`, instead include a &quot;Awaiting...&quot; message
  - Replace the message with the result
  - Save results with a $n value as expected

So you would get:

    &gt; await fetch(&quot;data.json&quot;)
    [Icon] Running...

And later:

    &gt; await fetch(&quot;data.json&quot;)
    &lt; Response {type: &quot;basic&quot;, url: &quot;data.json&quot;, redirected: false, status: 200, ok: true, …} = $1

I propose we have a `Runtime.await` which is just an async version of `Runtime.evaluate`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324244</commentid>
    <comment_count>1</comment_count>
      <attachid>314210</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-29 19:41:26 -0700</bug_when>
    <thetext>Created attachment 314210
[PATCH] Work in Progress (Needs Test and Async UI tweaks)

This is the idea I have. It works in practice. I have to move onto other things at the moment though.

This would need tests and the UI tweaks during an async evaluation.

I did implement an awaitOnCallFrame but currently when paused we don&apos;t seem to run the promise microtasks. So effectively you don&apos;t get the result until you resume / continue. So I left that out of this given the pre-existing issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324247</commentid>
    <comment_count>2</comment_count>
      <attachid>314210</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-29 19:46:36 -0700</bug_when>
    <thetext>Comment on attachment 314210
[PATCH] Work in Progress (Needs Test and Async UI tweaks)

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

&gt; Source/JavaScriptCore/inspector/JSInjectedScriptCallback.h:41
&gt; +class JSInjectedScriptCallback : public JSC::InternalFunction {
&gt; +public:
&gt; +    typedef InternalFunction Base;
&gt; +
&gt; +    static JSInjectedScriptCallback* create(JSC::VM&amp;, JSC::JSGlobalObject*, WTF::Function&lt;void(JSC::ExecState*)&gt;&amp;&amp;);

@Saam / Mark: Is this a bad idea? I&apos;m basically making a Function that wraps a lambda. So we can:

    auto callback = JSInjectedScriptCallback(vm, globalObject, [](ExecState *exec) {
        JSValue a = exec-&gt;argument(0);
        JSValue b = exec-&gt;argument(1);
        JSValue c = exec-&gt;argument(2);
        ...
    });

We pass this off to Inspector JavaScript so that when it invokes `callback(a, b, c)` the lambda can deal with it.

With this approach we need to be worried about object lifetimes (if `this` is used by the lamba) but maybe there is an easier way to do the same thing as this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325422</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-07-04 04:31:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/33122054&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314210</attachid>
            <date>2017-06-29 19:41:26 -0700</date>
            <delta_ts>2017-06-29 19:41:26 -0700</delta_ts>
            <desc>[PATCH] Work in Progress (Needs Test and Async UI tweaks)</desc>
            <filename>work-in-progress-1.patch</filename>
            <type>text/plain</type>
            <size>38522</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDdjMTRmNTY3NWYuLjQzMDE3ODA3YTc0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTg3MSw2ICsxODcxLDggQEAKIAkJ
QTU5NDU1OTIxODI0NzQ0NzAwQ0MzODQzIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTk0NTU5MDE4
MjQ3NDQ3MDBDQzM4NDMgLyogSlNHbG9iYWxPYmplY3REZWJ1Z2dhYmxlLmNwcCAqLzsgfTsKIAkJ
QTU5NDU1OTMxODI0NzQ0NzAwQ0MzODQzIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU5NDU1OTExODI0
NzQ0NzAwQ0MzODQzIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZS5oICovOyB9OwogCQlBNTk0
NTU5NTE4MjQ3OUVCMDBDQzM4NDMgLyogSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTk0NTU5NDE4MjQ3OUVC
MDBDQzM4NDMgLyogSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTU5REQ3RjQxRjA1QTkzNjAwMkY5MTI1
IC8qIEpTSW5qZWN0ZWRTY3JpcHRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTlERDdGMjFGMDU3RTNGMDAyRjkxMjUgLyogSlNJbmpl
Y3RlZFNjcmlwdENhbGxiYWNrLmNwcCAqLzsgfTsKKwkJQTU5REQ3RjUxRjA1QTkzODAwMkY5MTI1
IC8qIEpTSW5qZWN0ZWRTY3JpcHRDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTU5REQ3RjMxRjA1N0UzRjAwMkY5MTI1IC8qIEpTSW5qZWN0
ZWRTY3JpcHRDYWxsYmFjay5oICovOyB9OwogCQlBNUExQTA5NDFEOENCMzNFMDA0QzJFQjggLyog
RGVidWdnZXJQYXJzZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE1QTFBMDkyMUQ4Q0IxMkYwMDRDMkVCOCAvKiBEZWJ1Z2dlclBhcnNlRGF0YS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1QTFB
MDk1MUQ4Q0IzNDEwMDRDMkVCOCAvKiBEZWJ1Z2dlclBhcnNlRGF0YS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUExQTA5MzFEOENCMzM3MDA0QzJF
QjggLyogRGVidWdnZXJQYXJzZURhdGEuY3BwICovOyB9OwogCQlBNUFCNDlEQzFCRUM4MDgyMDA3
MDIwRkIgLyogUGVyR2xvYmFsT2JqZWN0V3JhcHBlcldvcmxkLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1QUI0OURBMUJFQzgwNzkwMDcwMjBGQiAv
KiBQZXJHbG9iYWxPYmplY3RXcmFwcGVyV29ybGQuY3BwICovOyB9OwpAQCAtNDUwMiw2ICs0NTA0
LDggQEAKIAkJQTU5NDU1OTAxODI0NzQ0NzAwQ0MzODQzIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdn
YWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0dsb2JhbE9i
amVjdERlYnVnZ2FibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTk0NTU5
MTE4MjQ3NDQ3MDBDQzM4NDMgLyogSlNHbG9iYWxPYmplY3REZWJ1Z2dhYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTk0NTU5NDE4MjQ3OUVCMDBDQzM4NDMgLyogSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNTlERDdGMjFGMDU3RTNGMDAyRjkxMjUgLyogSlNJbmplY3RlZFNjcmlwdENhbGxiYWNrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW5qZWN0ZWRTY3JpcHRDYWxsYmFjay5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1OUREN0YzMUYwNTdFM0YwMDJGOTEyNSAvKiBKU0lu
amVjdGVkU2NyaXB0Q2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbmplY3RlZFNjcmlwdENh
bGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1QTFBMDkyMUQ4Q0IxMkYw
MDRDMkVCOCAvKiBEZWJ1Z2dlclBhcnNlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZWJ1Z2dlclBhcnNlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNUExQTA5MzFEOENCMzM3MDA0QzJFQjggLyogRGVidWdnZXJQYXJzZURhdGEuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVidWdnZXJQYXJzZURhdGEuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNUFCNDlEQTFCRUM4MDc5MDA3MDIwRkIgLyog
UGVyR2xvYmFsT2JqZWN0V3JhcHBlcldvcmxkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBlckdsb2JhbE9iamVjdFdyYXBwZXJXb3JsZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03OTcyLDYgKzc5NzYsOCBAQAogCQkJCUE1MTAwN0JGMTg3Q0Mz
QzYwMEIzODg3OSAvKiBKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuaCAqLywKIAkJ
CQlBNTAzRkEyNzE4OEYxMDU5MDAxMTBGMTQgLyogSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1Nl
cnZlci5jcHAgKi8sCiAJCQkJQTUwM0ZBMjgxODhGMTA1OTAwMTEwRjE0IC8qIEpTR2xvYmFsT2Jq
ZWN0U2NyaXB0RGVidWdTZXJ2ZXIuaCAqLywKKwkJCQlBNTlERDdGMjFGMDU3RTNGMDAyRjkxMjUg
LyogSlNJbmplY3RlZFNjcmlwdENhbGxiYWNrLmNwcCAqLywKKwkJCQlBNTlERDdGMzFGMDU3RTNG
MDAyRjkxMjUgLyogSlNJbmplY3RlZFNjcmlwdENhbGxiYWNrLmggKi8sCiAJCQkJQTUxM0U1QkEx
ODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCAqLywKIAkJCQlBNTEz
RTVCQjE4NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3RlZFNjcmlwdEhvc3QuaCAqLywKIAkJCQlB
NTEzRTVCQzE4NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUu
Y3BwICovLApAQCAtOTA2Nyw2ICs5MDczLDcgQEAKIAkJCQlGRTM4NEVFNjFBRERCN0FEMDA1NURF
MkMgLyogSlNEb2xsYXJWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzODRFRTgxQUREQjdBRDAw
NTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDJEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBNTlERDdGNTFGMDVBOTM4MDAyRjkxMjUgLyogSlNJbmplY3RlZFNjcmlwdENhbGxi
YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNF
eHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QjRBQ0FGMTQ4NEM5Q0UwMEIzOEEzNiAvKiBK
U0V4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzk4OTM3NzkxRENBQjU3MzAwRjhE
NEZCIC8qIEpTRml4ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDU5MCw2ICsxMDU5Nyw3
IEBACiAJCQkJQTUxM0U1QjcxODVCOEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNj
cmlwdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQzYzQjYxRTYzNDNFQTAwQzEzODM5
IC8qIEIzQXRvbWljVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTU5REQ3RjQxRjA1QTkz
NjAwMkY5MTI1IC8qIEpTSW5qZWN0ZWRTY3JpcHRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNThFMzU5MTE4NjBERUNGMDAxRjI0RkUgLyogSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1MTNFNUNBMTg1Rjk2MjQwMDdFOTVBRCAvKiBJbmplY3RlZFNj
cmlwdE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4NDBFMjAxODdCN0I4NjAwODQz
QjEwIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcAppbmRleCBj
NjkxMmMxYjI4My4uNzRjNDg1NzAxYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNs
dWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNJbmplY3RlZFNjcmlwdENhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25D
YWxsLmgiCiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CkBAIC02OCw2ICs2OSwzOSBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbgogICAg
IG1ha2VFdmFsQ2FsbChlcnJvclN0cmluZywgZnVuY3Rpb24sIHJlc3VsdCwgd2FzVGhyb3duLCBz
YXZlZFJlc3VsdEluZGV4KTsKIH0KIAordm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVPbkNh
bGxGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6SlNWYWx1ZSBjYWxsRnJhbWVz
LCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNv
bnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29s
IHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+KiByZXN1bHQs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50Piogc2F2ZWRSZXN1bHRJbmRleCkKK3sKKyAgICBE
ZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmpl
Y3QoKSwgQVNDSUlMaXRlcmFsKCJldmFsdWF0ZU9uQ2FsbEZyYW1lIiksIGluc3BlY3RvckVudmly
b25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJn
dW1lbnQoY2FsbEZyYW1lcyk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbEZyYW1l
SWQpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGV4cHJlc3Npb24pOworICAgIGZ1bmN0
aW9uLmFwcGVuZEFyZ3VtZW50KG9iamVjdEdyb3VwKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudChpbmNsdWRlQ29tbWFuZExpbmVBUEkpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KHJldHVybkJ5VmFsdWUpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGdlbmVyYXRlUHJl
dmlldyk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc2F2ZVJlc3VsdCk7CisgICAgbWFr
ZUV2YWxDYWxsKGVycm9yU3RyaW5nLCBmdW5jdGlvbiwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVk
UmVzdWx0SW5kZXgpOworfQorCit2b2lkIEluamVjdGVkU2NyaXB0Ojphd2FpdChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBv
YmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1
ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgSlNJbmplY3RlZFNjcmlw
dENhbGxiYWNrKiBjYWxsYmFjaykKK3sKKyAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNh
bGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgQVNDSUlMaXRlcmFsKCJhd2FpdCIp
LCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOworICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGV4cHJlc3Npb24pOworICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KG9iamVjdEdyb3VwKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChpbmNsdWRl
Q29tbWFuZExpbmVBUEkpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHJldHVybkJ5VmFs
dWUpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGdlbmVyYXRlUHJldmlldyk7CisgICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc2F2ZVJlc3VsdCk7CisgICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQoSlNDOjpKU1ZhbHVlKGNhbGxiYWNrKSk7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IHJlc3VsdDsKKyAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdCk7CisgICAgaWYg
KCFyZXN1bHQgfHwgcmVzdWx0LT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGU6Ok51bGwp
IHsKKyAgICAgICAgaWYgKCFyZXN1bHQtPmFzU3RyaW5nKGVycm9yU3RyaW5nKSkKKyAgICAgICAg
ICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvciIpOworICAgIH0K
K30KKwogdm9pZCBJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2Vu
ZXJhdGVQcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiogcmVzdWx0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4qIHdh
c1Rocm93bikKIHsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24o
aW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgQVNDSUlMaXRlcmFsKCJjYWxsRnVuY3Rpb25PbiIpLCBp
bnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwpAQCAtNzksMjAg
KzExMyw2IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplCiAgICAgbWFrZUV2YWxDYWxsKGVycm9y
U3RyaW5nLCBmdW5jdGlvbiwgcmVzdWx0LCB3YXNUaHJvd24pOwogfQogCi12b2lkIEluamVjdGVk
U2NyaXB0OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSlND
OjpKU1ZhbHVlIGNhbGxGcmFtZXMsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0
cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRl
Q29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcs
IGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4qIHJlc3VsdCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+
KiB3YXNUaHJvd24sIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBzYXZlZFJl
c3VsdEluZGV4KQotewotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlv
bihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCBBU0NJSUxpdGVyYWwoImV2YWx1YXRlT25DYWxsRnJh
bWUiKSwgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKLSAg
ICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsRnJhbWVzKTsKLSAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChjYWxsRnJhbWVJZCk7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZXhw
cmVzc2lvbik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQob2JqZWN0R3JvdXApOwotICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGluY2x1ZGVDb21tYW5kTGluZUFQSSk7Ci0gICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQocmV0dXJuQnlWYWx1ZSk7Ci0gICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQoZ2VuZXJhdGVQcmV2aWV3KTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChz
YXZlUmVzdWx0KTsKLSAgICBtYWtlRXZhbENhbGwoZXJyb3JTdHJpbmcsIGZ1bmN0aW9uLCByZXN1
bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7Ci19Ci0KIHZvaWQgSW5qZWN0ZWRTY3Jp
cHQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpG
dW5jdGlvbkRldGFpbHM+KiByZXN1bHQpCiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rp
b25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksIEFTQ0lJTGl0ZXJhbCgiZ2V0
RnVuY3Rpb25EZXRhaWxzIiksIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhh
bmRsZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0LmgKaW5kZXggNDA5OGQ3NjRhNzEuLjI0NDEyNjhkZDQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCkBAIC00Myw2ICs0Myw3
IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBJbmplY3RlZFNjcmlwdE1vZHVsZTsK
IGNsYXNzIEluc3BlY3RvckVudmlyb25tZW50OworY2xhc3MgSlNJbmplY3RlZFNjcmlwdENhbGxi
YWNrOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbmplY3RlZFNjcmlwdCA6IHB1YmxpYyBJ
bmplY3RlZFNjcmlwdEJhc2UgewogcHVibGljOgpAQCAtNTIsNiArNTMsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGV2YWx1YXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwg
Ym9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0
LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qIHJlc3VsdCwgUHJvdG9j
b2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8aW50Piogc2F2ZWRSZXN1bHRJbmRleCk7CiAgICAgdm9pZCBldmFsdWF0ZU9uQ2FsbEZy
YW1lKEVycm9yU3RyaW5nJiwgSlNDOjpKU1ZhbHVlIGNhbGxGcmFtZXMsIGNvbnN0IFN0cmluZyYg
Y2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwg
Ym9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+KiByZXN1bHQsIFByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4q
IHdhc1Rocm93biwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIHNhdmVkUmVz
dWx0SW5kZXgpOworICAgIHZvaWQgYXdhaXQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4
cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRM
aW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNh
dmVSZXN1bHQsIEpTSW5qZWN0ZWRTY3JpcHRDYWxsYmFjayopOwogICAgIHZvaWQgY2FsbEZ1bmN0
aW9uT24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcm
IGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIHJldHVybkJ5VmFsdWUs
IGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4qIHJlc3VsdCwgUHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKTsKICAg
ICB2b2lkIGdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVu
Y3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiogcmVz
dWx0KTsKICAgICB2b2lkIGZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYsIEpTQzo6SlNWYWx1
ZSwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiogcmVzdWx0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRCYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRCYXNlLmNwcAppbmRleCA5Y2FhNGViOTNmZS4uNmI3ZDZmNjUxNzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAK
QEAgLTEwOSw2ICsxMDksMTEgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VFdmFsQ2Fs
bChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIERlcHJlY2F0ZWQ6OlNjcmkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAorICAgIEluamVjdGVkU2NyaXB0QmFzZTo6ZXh0cmFjdFJlc3VsdFR1cGxl
KGVycm9yU3RyaW5nLCByZXN1bHQsIG9iamVjdFJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJlc3Vs
dEluZGV4KTsKK30KKwordm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6OmV4dHJhY3RSZXN1bHRUdXBs
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0
LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qIG9iamVjdFJlc3VsdCwg
UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duLCBQcm90b2NvbDo6T3B0T3V0cHV0
PGludD4qIHNhdmVkUmVzdWx0SW5kZXgpCit7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0VHVwbGU7CiAgICAgaWYgKCFyZXN1bHQtPmFzT2JqZWN0KHJlc3VsdFR1cGxlKSkgewog
ICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW50ZXJuYWwgZXJyb3I6IHJlc3Vs
dCBpcyBub3QgYW4gT2JqZWN0Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuaAppbmRleCA1NWRkMGU1N2RiMy4uM2EyMjlkZGI4
MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdEJhc2UuaApAQCAtNTMsNiArNTMsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNOb1Zh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdE9iamVjdC5oYXNOb1ZhbHVlKCk7
IH0KICAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2lu
amVjdGVkU2NyaXB0T2JqZWN0LnNjcmlwdFN0YXRlKCk7IH0KIAorICAgIHN0YXRpYyB2b2lkIGV4
dHJhY3RSZXN1bHRUdXBsZShFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVz
dWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qIG9iamVjdFJlc3Vs
dCwgUHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duLCBQcm90b2NvbDo6T3B0T3V0
cHV0PGludD4qIHNhdmVkUmVzdWx0SW5kZXggPSBudWxscHRyKTsKKwogcHJvdGVjdGVkOgogICAg
IEluamVjdGVkU2NyaXB0QmFzZShjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIEluamVjdGVkU2Ny
aXB0QmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIERlcHJlY2F0ZWQ6OlNjcmlwdE9iamVjdCwgSW5z
cGVjdG9yRW52aXJvbm1lbnQqKTsKQEAgLTY0LDcgKzY2LDcgQEAgcHJvdGVjdGVkOgogICAgIGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdE9iamVjdCYgaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSBjb25z
dDsKICAgICBKU0M6OkpTVmFsdWUgY2FsbEZ1bmN0aW9uV2l0aEV2YWxFbmFibGVkKERlcHJlY2F0
ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYsIGJvb2wmIGhhZEV4Y2VwdGlvbikgY29uc3Q7CiAgICAg
dm9pZCBtYWtlQ2FsbChEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmLCBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+KiByZXN1bHQpOwotICAgIHZvaWQgbWFrZUV2YWxDYWxsKEVycm9yU3RyaW5n
JiwgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiwgUmVmUHRyPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+KiByZXN1bHQsIFByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4qIHdh
c1Rocm93biwgUHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBzYXZlZFJlc3VsdCA9IG51bGxwdHIp
OworICAgIHZvaWQgbWFrZUV2YWxDYWxsKEVycm9yU3RyaW5nJiwgRGVwcmVjYXRlZDo6U2NyaXB0
RnVuY3Rpb25DYWxsJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+KiBv
YmplY3RSZXN1bHQsIFByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93biwgUHJvdG9j
b2w6Ok9wdE91dHB1dDxpbnQ+KiBzYXZlZFJlc3VsdEluZGV4ID0gbnVsbHB0cik7CiAKIHByaXZh
dGU6CiAgICAgU3RyaW5nIG1fbmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCmluZGV4IDkyY2E2ZmI0MjgyLi5j
YTZiMmVhZGY3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdFNvdXJjZS5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCkBAIC0xMTYsNiArMTE2LDExIEBAIGxldCBJbmpl
Y3RlZFNjcmlwdCA9IGNsYXNzIEluamVjdGVkU2NyaXB0CiAgICAgICAgIHJldHVybiB0aGlzLl9l
dmFsdWF0ZUFuZFdyYXAoY2FsbEZyYW1lLmV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uLCBjYWxs
RnJhbWUsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCB0cnVlLCBpbmplY3RDb21tYW5kTGluZUFQ
SSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0KTsKICAgICB9CiAK
KyAgICBhd2FpdChleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaW5qZWN0Q29tbWFuZExpbmVBUEks
IHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdCwgY2FsbGJhY2spCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5fYXdhaXRBbmRXcmFwKEluamVjdGVkU2NyaXB0SG9z
dC5ldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbiwgSW5qZWN0ZWRTY3JpcHRIb3N0LCBleHByZXNz
aW9uLCBvYmplY3RHcm91cCwgZmFsc2UsIGluamVjdENvbW1hbmRMaW5lQVBJLCByZXR1cm5CeVZh
bHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQsIGNhbGxiYWNrKTsKKyAgICB9CisKICAg
ICBjYWxsRnVuY3Rpb25PbihvYmplY3RJZCwgZXhwcmVzc2lvbiwgYXJncywgcmV0dXJuQnlWYWx1
ZSwgZ2VuZXJhdGVQcmV2aWV3KQogICAgIHsKICAgICAgICAgbGV0IHBhcnNlZE9iamVjdElkID0g
dGhpcy5fcGFyc2VPYmplY3RJZChvYmplY3RJZCk7CkBAIC00NTUsNiArNDYwLDQwIEBAIGxldCBJ
bmplY3RlZFNjcmlwdCA9IGNsYXNzIEluamVjdGVkU2NyaXB0CiAgICAgICAgIH07CiAgICAgfQog
CisgICAgX2F3YWl0QW5kV3JhcChldmFsRnVuY3Rpb24sIG9iamVjdCwgZXhwcmVzc2lvbiwgb2Jq
ZWN0R3JvdXAsIGlzRXZhbE9uQ2FsbEZyYW1lLCBpbmplY3RDb21tYW5kTGluZUFQSSwgcmV0dXJu
QnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0LCBjYWxsYmFjaykKKyAgICB7Cisg
ICAgICAgIGxldCBzdWNjZXNzID0gKHZhbHVlKSA9PiB7CisgICAgICAgICAgICBsZXQgcmV0dXJu
T2JqZWN0ID0geworICAgICAgICAgICAgICAgIHdhc1Rocm93bjogZmFsc2UsCisgICAgICAgICAg
ICAgICAgcmVzdWx0OiBSZW1vdGVPYmplY3QuY3JlYXRlKHZhbHVlLCBvYmplY3RHcm91cCwgcmV0
dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3KSwKKyAgICAgICAgICAgIH07CisKKyAgICAgICAg
ICAgIGlmIChzYXZlUmVzdWx0KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2F2ZWRSZXN1bHRJ
bmRleCA9IDA7CisgICAgICAgICAgICAgICAgdGhpcy5fc2F2ZVJlc3VsdCh2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuX3NhdmVkUmVzdWx0SW5kZXgpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybk9iamVjdC5zYXZlZFJlc3VsdEluZGV4ID0gdGhpcy5fc2F2ZWRSZXN1bHRJbmRl
eDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FsbGJhY2socmV0dXJuT2JqZWN0KTsK
KyAgICAgICAgfTsKKworICAgICAgICBsZXQgZmFpbHVyZSA9IChlKSA9PiB7CisgICAgICAgICAg
ICBjYWxsYmFjayh0aGlzLl9jcmVhdGVUaHJvd25WYWx1ZShlLCBvYmplY3RHcm91cCkpOworICAg
ICAgICB9OworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb25zdCBhc3luY1NhdmVSZXN1
bHQgPSBmYWxzZTsgLy8gRG8gbm90IHNhdmUgdGhlIGludGVybWVkaWF0ZSBQcm9taXNlIHJlc3Vs
dC4KKyAgICAgICAgICAgIGxldCBwcm9taXNlID0gdGhpcy5fZXZhbHVhdGVPbihldmFsRnVuY3Rp
b24sIG9iamVjdCwgb2JqZWN0R3JvdXAsIGV4cHJlc3Npb24sIGlzRXZhbE9uQ2FsbEZyYW1lLCBp
bmplY3RDb21tYW5kTGluZUFQSSwgYXN5bmNTYXZlUmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChw
cm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkKKyAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4o
c3VjY2VzcywgZmFpbHVyZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2Fs
bGJhY2soc3VjY2Vzcyh2YWx1ZSkpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAg
ICBmYWlsdXJlKGUpOworICAgICAgICB9CisgICAgfQorCiAgICAgX2V2YWx1YXRlQW5kV3JhcChl
dmFsRnVuY3Rpb24sIG9iamVjdCwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGlzRXZhbE9uQ2Fs
bEZyYW1lLCBpbmplY3RDb21tYW5kTGluZUFQSSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2
aWV3LCBzYXZlUmVzdWx0KQogICAgIHsKICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdENhbGxiYWNrLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdENhbGxiYWNr
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzc1Yzc4OGI2NTkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5q
ZWN0ZWRTY3JpcHRDYWxsYmFjay5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU0luamVjdGVkU2NyaXB0Q2FsbGJhY2suaCIKKworI2luY2x1ZGUgIkZ1bmN0aW9uUHJv
dG90eXBlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2Jq
ZWN0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Citjb25zdCBDbGFzc0luZm8gSlNJbmplY3RlZFNjcmlwdENhbGxiYWNrOjpzX2luZm8gPSB7ICJG
dW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNJbmplY3RlZFNjcmlwdENhbGxiYWNrKSB9OworCitKU0luamVjdGVkU2NyaXB0Q2Fs
bGJhY2sqIEpTSW5qZWN0ZWRTY3JpcHRDYWxsYmFjazo6Y3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFdURjo6RnVuY3Rpb248dm9pZChFeGVjU3Rh
dGUqKT4mJiBjYWxsYmFjaykKK3sKKyAgICAvLyBGSVhNRTogRHVwbGljYXRlIHRoaXMgYXMgYW4g
aW5pdExhenkgaW4gR2xvYmFsT2JqZWN0IChsaWtlIG9iamNDYWxsYmFja0Z1bmN0aW9uU3RydWN0
dXJlKS4KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTSW5qZWN0ZWRTY3JpcHRDYWxsYmFj
azo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rp
b25Qcm90b3R5cGUoKSk7CisgICAgSlNJbmplY3RlZFNjcmlwdENhbGxiYWNrKiBmdW5jdGlvbiA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTSW5qZWN0ZWRTY3JpcHRDYWxsYmFjaz4odm0u
aGVhcCkpIEpTSW5qZWN0ZWRTY3JpcHRDYWxsYmFjayh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKGNh
bGxiYWNrKSk7CisgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtLCBTdHJpbmcoKSk7Cisg
ICAgcmV0dXJuIGZ1bmN0aW9uOworfQorCitKU0luamVjdGVkU2NyaXB0Q2FsbGJhY2s6OkpTSW5q
ZWN0ZWRTY3JpcHRDYWxsYmFjayhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoRXhlY1N0YXRlKik+JiYgY2FsbGJhY2spCisgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUpCisgICAgLCBtX2NhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKQoreworfQorCit2b2lk
IEpTSW5qZWN0ZWRTY3JpcHRDYWxsYmFjazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAg
c3RhdGljX2Nhc3Q8SlNJbmplY3RlZFNjcmlwdENhbGxiYWNrKj4oY2VsbCktPn5KU0luamVjdGVk
U2NyaXB0Q2FsbGJhY2soKTsKK30KKwordm9pZCBKU0luamVjdGVkU2NyaXB0Q2FsbGJhY2s6Omlu
dm9rZUNhbGxiYWNrKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBtX2NhbGxiYWNrKGV4ZWMpOwor
fQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSW5qZWN0ZWRTY3Jp
cHRDYWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNJbmplY3RlZFNjcmlwdENhbGxi
YWNrKiBpbmplY3RlZFNjcmlwdENhbGxiYWNrID0ganNDYXN0PEpTSW5qZWN0ZWRTY3JpcHRDYWxs
YmFjayo+KGV4ZWMtPmpzQ2FsbGVlKCkpOworICAgIGluamVjdGVkU2NyaXB0Q2FsbGJhY2stPmlu
dm9rZUNhbGxiYWNrKGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Cit9CisKK0NhbGxUeXBlIEpTSW5qZWN0ZWRTY3JpcHRDYWxsYmFjazo6Z2V0Q2FsbERh
dGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIGNhbGxEYXRhLm5hdGl2ZS5m
dW5jdGlvbiA9IGNhbGxJbmplY3RlZFNjcmlwdENhbGxiYWNrOworICAgIHJldHVybiBDYWxsVHlw
ZTo6SG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRDYWxsYmFjay5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0Q2FsbGJhY2su
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDdlMDRhZDkxMWUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0
ZWRTY3JpcHRDYWxsYmFjay5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkludGVy
bmFsRnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKworbmFtZXNwYWNlIEpT
QyB7CitjbGFzcyBFeGVjU3RhdGU7Cit9CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFz
cyBKU0luamVjdGVkU2NyaXB0Q2FsbGJhY2sgOiBwdWJsaWMgSlNDOjpJbnRlcm5hbEZ1bmN0aW9u
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKworICAgIHN0
YXRpYyBKU0luamVjdGVkU2NyaXB0Q2FsbGJhY2sqIGNyZWF0ZShKU0M6OlZNJiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIFdURjo6RnVuY3Rpb248dm9pZChKU0M6OkV4ZWNTdGF0ZSopPiYmKTsKKwor
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKwor
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICB2b2lkIGludm9rZUNhbGxi
YWNrKEpTQzo6RXhlY1N0YXRlKik7CisKK3Byb3RlY3RlZDoKKyAgICBKU0luamVjdGVkU2NyaXB0
Q2FsbGJhY2soSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgV1RGOjpGdW5jdGlvbjx2b2lkKEpT
Qzo6RXhlY1N0YXRlKik+JiYpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBKU0M6OkNhbGxUeXBl
IGdldENhbGxEYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDYWxsRGF0YSYpOworCisgICAgV1RGOjpG
dW5jdGlvbjx2b2lkKEpTQzo6RXhlY1N0YXRlKik+IG1fY2FsbGJhY2s7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXgg
MDY5OTQwYWE4NTQuLjhkZjhjZjMzNDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmNwcApAQCAtNDksNiArNDksMTEgQEAKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKK3N0YXRp
YyBib29sIGFzQm9vbChjb25zdCBib29sKiBjb25zdCBiKQoreworICAgIHJldHVybiBiID8gKmIg
OiBmYWxzZTsKK30KKwogY29uc3QgY2hhciogSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YmFja3Ry
YWNlT2JqZWN0R3JvdXAgPSAiYmFja3RyYWNlIjsKIAogLy8gT2JqZWN0cyBjcmVhdGVkIGFuZCBy
ZXRhaW5lZCBieSBldmFsdWF0aW5nIGJyZWFrcG9pbnQgYWN0aW9ucyBhcmUgcHV0IGludG8gb2Jq
ZWN0IGdyb3VwcwpAQCAtODQyLDcgKzg0Nyw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAg
ICAgICAgIG11dGVDb25zb2xlKCk7CiAgICAgfQogCi0gICAgaW5qZWN0ZWRTY3JpcHQuZXZhbHVh
dGVPbkNhbGxGcmFtZShlcnJvclN0cmluZywgbV9jdXJyZW50Q2FsbFN0YWNrLCBjYWxsRnJhbWVJ
ZCwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3JvdXAgOiAiIiwgaW5jbHVkZUNv
bW1hbmRMaW5lQVBJID8gKmluY2x1ZGVDb21tYW5kTGluZUFQSSA6IGZhbHNlLCByZXR1cm5CeVZh
bHVlID8gKnJldHVybkJ5VmFsdWUgOiBmYWxzZSwgZ2VuZXJhdGVQcmV2aWV3ID8gKmdlbmVyYXRl
UHJldmlldyA6IGZhbHNlLCBzYXZlUmVzdWx0ID8gKnNhdmVSZXN1bHQgOiBmYWxzZSwgJnJlc3Vs
dCwgd2FzVGhyb3duLCBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICBpbmplY3RlZFNjcmlwdC5ldmFs
dWF0ZU9uQ2FsbEZyYW1lKGVycm9yU3RyaW5nLCBtX2N1cnJlbnRDYWxsU3RhY2ssIGNhbGxGcmFt
ZUlkLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpLCBh
c0Jvb2woaW5jbHVkZUNvbW1hbmRMaW5lQVBJKSwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCBhc0Jv
b2woZ2VuZXJhdGVQcmV2aWV3KSwgYXNCb29sKHNhdmVSZXN1bHQpLCAmcmVzdWx0LCB3YXNUaHJv
d24sIHNhdmVkUmVzdWx0SW5kZXgpOwogCiAgICAgaWYgKGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNB
bmRNdXRlQ29uc29sZSA/ICpkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUgOiBm
YWxzZSkgewogICAgICAgICB1bm11dGVDb25zb2xlKCk7CkBAIC04NTEsNyArODU2LDcgQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6c2V0T3ZlcmxheU1lc3NhZ2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqKQordm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRPdmVybGF5TWVzc2FnZShFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyogY29uc3QpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQu
Y3BwCmluZGV4IDRkNjFmNDkxMmJhLi5mMzZlOWY0YjYzMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50
aW1lQWdlbnQuY3BwCkBAIC0zNCwxMSArMzQsMTMgQEAKIAogI2luY2x1ZGUgIkNvbXBsZXRpb24u
aCIKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgorI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSGVhcEl0ZXJhdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQu
aCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1
ZGUgIkpTSW5qZWN0ZWRTY3JpcHRDYWxsYmFjay5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2lu
Y2x1ZGUgIlBhcnNlckVycm9yLmgiCiAjaW5jbHVkZSAiU2NyaXB0RGVidWdTZXJ2ZXIuaCIKQEAg
LTExMiw3ICsxMTQsNyBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cGFyc2UoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIEluc3BlYwogICAgIH0KIH0KIAotdm9p
ZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9iamVjdEdy
b3VwLCBjb25zdCBib29sKiBjb25zdCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wq
IGNvbnN0IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50KiBl
eGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsIGNvbnN0
IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24sIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBzYXZlZFJlc3VsdEluZGV4KQordm9pZCBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9iamVjdEdyb3VwLCBjb25zdCBi
b29sKiBjb25zdCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGNvbnN0IGRvTm90
UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50KiBjb25zdCBleGVjdXRp
b25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wq
IGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24sIEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok9wdE91dHB1dDxpbnQ+KiBzYXZlZFJlc3VsdEluZGV4KQogewogICAgIEluamVjdGVkU2NyaXB0
IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBleGVj
dXRpb25Db250ZXh0SWQpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCkBA
IC0xMzIsNiArMTM0LDM3IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpldmFsdWF0ZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhwCiAgICAgfQogfQogCit2
b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6YXdhaXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogY29uc3Qgb2JqZWN0R3Jv
dXAsIGNvbnN0IGJvb2wqIGNvbnN0IGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgaW50KiBj
b25zdCBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUs
IGNvbnN0IGJvb2wqIGNvbnN0IGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogY29uc3Qgc2F2
ZVJlc3VsdCwgUmVmPEF3YWl0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit7CisgICAgSW5qZWN0ZWRT
Y3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcs
IGV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBnbG9iYWxPYmplY3QgPSBpbmplY3RlZFNj
cmlwdC5zY3JpcHRTdGF0ZSgpLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byBpbmpl
Y3RlZFNjcmlwdENhbGxiYWNrID0gSlNJbmplY3RlZFNjcmlwdENhbGxiYWNrOjpjcmVhdGUobV92
bSwgZ2xvYmFsT2JqZWN0LCBbdGhpcywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oRXhl
Y1N0YXRlKiBleGVjKSB7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0VmFsdWUgPSBleGVjLT5hcmd1
bWVudCgwKTsgICAgICAgIAorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdElu
c3BlY3RvclZhbHVlID0gdG9JbnNwZWN0b3JWYWx1ZSgqZXhlYywgcmVzdWx0VmFsdWUpOworICAg
ICAgICBpZiAoIXJlc3VsdEluc3BlY3RvclZhbHVlKSB7CisgICAgICAgICAgICBjYWxsYmFjay0+
c2VuZEZhaWx1cmUoQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBFcnJvciBoYW5kbGluZyByZXN1bHQi
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4gb2JqZWN0UmVzdWx0OworICAgICAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8Ym9vbD4gd2FzVGhyb3duOworICAgICAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8aW50PiBzYXZlZFJlc3VsdEluZGV4OworICAgICAgICBJbmplY3RlZFNj
cmlwdEJhc2U6OmV4dHJhY3RSZXN1bHRUdXBsZShlcnJvclN0cmluZywgcmVzdWx0SW5zcGVjdG9y
VmFsdWUsICZvYmplY3RSZXN1bHQsICZ3YXNUaHJvd24sICZzYXZlZFJlc3VsdEluZGV4KTsKKyAg
ICAgICAgaWYgKCFlcnJvclN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNhbGxiYWNr
LT5zZW5kRmFpbHVyZShlcnJvclN0cmluZyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoV1RGTW92ZShvYmplY3RSZXN1bHQp
LCAmd2FzVGhyb3duLCAmc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgfSk7CisKKyAgICBpbmplY3Rl
ZFNjcmlwdC5hd2FpdChlcnJvclN0cmluZywgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAgPyAqb2Jq
ZWN0R3JvdXAgOiBTdHJpbmcoKSwgYXNCb29sKGluY2x1ZGVDb21tYW5kTGluZUFQSSksIGFzQm9v
bChyZXR1cm5CeVZhbHVlKSwgYXNCb29sKGdlbmVyYXRlUHJldmlldyksIGFzQm9vbChzYXZlUmVz
dWx0KSwgaW5qZWN0ZWRTY3JpcHRDYWxsYmFjayk7Cit9CisKIHZvaWQgSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgSW5zcGVjdG9y
QXJyYXkqIG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBjb25zdCBkb05vdFBhdXNlT25F
eGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUs
IGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRT
Y3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElk
KG9iamVjdElkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmgKaW5kZXggMzE0MzFkMzIyZGQu
LjE5ZGYyZGMxNDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaApAQCAtNTksNiArNTks
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGUgeyBt
X2VuYWJsZWQgPSBmYWxzZTsgfQogICAgIHZvaWQgcGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGV4cHJlc3Npb24sIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVy
cm9yVHlwZSogcmVzdWx0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiog
bWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+
JikgZmluYWw7CiAgICAgdm9pZCBldmFsdWF0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
ZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBjb25zdCBvYmplY3RHcm91cCwgY29uc3QgYm9vbCog
Y29uc3QgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBjb25zdCBkb05vdFBhdXNl
T25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGludCogY29uc3QgZXhlY3V0aW9uQ29u
dGV4dElkLCBjb25zdCBib29sKiBjb25zdCByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBjb25z
dCBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIGNvbnN0IHNhdmVSZXN1bHQsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpPcHRPdXRwdXQ8aW50Piogc2F2ZWRSZXN1bHRJbmRleCkgZmluYWw7CisgICAgdm9p
ZCBhd2FpdChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3Ry
aW5nKiBjb25zdCBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogY29uc3QgaW5jbHVkZUNvbW1hbmRM
aW5lQVBJLCBjb25zdCBpbnQqIGNvbnN0IGV4ZWN1dGlvbkNvbnRleHRJZCwgY29uc3QgYm9vbCog
Y29uc3QgcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogY29uc3QgZ2VuZXJhdGVQcmV2aWV3LCBj
b25zdCBib29sKiBjb25zdCBzYXZlUmVzdWx0LCBSZWY8QXdhaXRDYWxsYmFjaz4mJiBjYWxsYmFj
aykgZmluYWw7CiAgICAgdm9pZCBjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgSW5zcGVjdG9y
OjpJbnNwZWN0b3JBcnJheSogb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGNvbnN0IGRv
Tm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogY29uc3QgcmV0
dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogY29uc3QgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bikgZmluYWw7CiAgICAgdm9p
ZCByZWxlYXNlT2JqZWN0KEVycm9yU3RyaW5nJiwgY29uc3QgRXJyb3JTdHJpbmcmIG9iamVjdElk
KSBmaW5hbDsKICAgICB2b2lkIGdldFByZXZpZXcoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJl
dmlldz4mKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvcHJvdG9jb2wvUnVudGltZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9SdW50aW1lLmpzb24KaW5kZXggNWYwZjQwZDliZDEuLmI0YTY0NjQxNzkzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRp
bWUuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1J1
bnRpbWUuanNvbgpAQCAtMjI3LDYgKzIyNywyNSBAQAogICAgICAgICAgICAgXQogICAgICAgICB9
LAogICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJhd2FpdCIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiRXZhbHVhdGVzIGFuIGV4cHJlc3Npb24gbGlrZSBhbiBhd2FpdCBleHBy
ZXNzaW9uLiIsCisgICAgICAgICAgICAiYXN5bmMiOiB0cnVlLAorICAgICAgICAgICAgInBhcmFt
ZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJleHByZXNzaW9uIiwgInR5cGUi
OiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkV4cHJlc3Npb24gdG8gZXZhbHVhdGUuIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqZWN0R3JvdXAiLCAidHlwZSI6ICJzdHJpbmci
LCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiU3ltYm9saWMgZ3JvdXAgbmFtZSB0
aGF0IGNhbiBiZSB1c2VkIHRvIHJlbGVhc2UgbXVsdGlwbGUgb2JqZWN0cy4iIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJpbmNsdWRlQ29tbWFuZExpbmVBUEkiLCAidHlwZSI6ICJib29s
ZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkRldGVybWluZXMgd2hldGhl
ciBDb21tYW5kIExpbmUgQVBJIHNob3VsZCBiZSBhdmFpbGFibGUgZHVyaW5nIHRoZSBldmFsdWF0
aW9uLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbnRleHRJZCIsICIkcmVmIjog
IlJ1bnRpbWUuRXhlY3V0aW9uQ29udGV4dElkIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0
aW9uIjogIlNwZWNpZmllcyBpbiB3aGljaCBpc29sYXRlZCBjb250ZXh0IHRvIHBlcmZvcm0gZXZh
bHVhdGlvbi4gRWFjaCBjb250ZW50IHNjcmlwdCBsaXZlcyBpbiBhbiBpc29sYXRlZCBjb250ZXh0
IGFuZCB0aGlzIHBhcmFtZXRlciBtYXkgYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvZiB0aG9zZSBj
b250ZXh0cy4gSWYgdGhlIHBhcmFtZXRlciBpcyBvbWl0dGVkIG9yIDAgdGhlIGV2YWx1YXRpb24g
d2lsbCBiZSBwZXJmb3JtZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGluc3BlY3RlZCBwYWdlLiIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJldHVybkJ5VmFsdWUiLCAidHlwZSI6ICJi
b29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIldoZXRoZXIgdGhlIHJl
c3VsdCBpcyBleHBlY3RlZCB0byBiZSBhIEpTT04gb2JqZWN0IHRoYXQgc2hvdWxkIGJlIHNlbnQg
YnkgdmFsdWUuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZ2VuZXJhdGVQcmV2aWV3
IiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJX
aGV0aGVyIHByZXZpZXcgc2hvdWxkIGJlIGdlbmVyYXRlZCBmb3IgdGhlIHJlc3VsdC4iIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzYXZlUmVzdWx0IiwgInR5cGUiOiAiYm9vbGVhbiIs
ICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJXaGV0aGVyIHRoZSByZXN1bHRpbmcg
dmFsdWUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIHNhdmluZyBpbiB0aGUgJG4gaGlzdG9yeS4i
IH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInJlc3VsdCIsICIkcmVmIjogIlJlbW90ZU9iamVjdCIsICJkZXNjcmlw
dGlvbiI6ICJFdmFsdWF0aW9uIHJlc3VsdC4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ3YXNUaHJvd24iLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2Ny
aXB0aW9uIjogIlRydWUgaWYgdGhlIHJlc3VsdCB3YXMgdGhyb3duIGR1cmluZyB0aGUgZXZhbHVh
dGlvbi4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzYXZlZFJlc3VsdEluZGV4Iiwg
InR5cGUiOiAiaW50ZWdlciIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJJZiB0
aGUgcmVzdWx0IHdhcyBzYXZlZCwgdGhpcyBpcyB0aGUgJG4gaW5kZXggdGhhdCBjYW4gYmUgdXNl
ZCB0byBhY2Nlc3MgdGhlIHZhbHVlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAg
ICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJjYWxsRnVuY3Rpb25PbiIsCiAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiQ2FsbHMgZnVuY3Rpb24gd2l0aCBnaXZlbiBkZWNsYXJhdGlvbiBv
biB0aGUgZ2l2ZW4gb2JqZWN0LiBPYmplY3QgZ3JvdXAgb2YgdGhlIHJlc3VsdCBpcyBpbmhlcml0
ZWQgZnJvbSB0aGUgdGFyZ2V0IG9iamVjdC4iLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBb
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9jcHBfZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUg
MTAwNzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCBmY2Nl
ZGNiYTdhYS4uY2FlOTIxMzc4NDQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weQpAQCAtMTU4LDggKzE1OCw4IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgICAgICAgICAgaWYgcGFy
YW1ldGVyLmlzX29wdGlvbmFsOgogICAgICAgICAgICAgICAgIGlmIENwcEdlbmVyYXRvci5zaG91
bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAg
ICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShw
YXJhbWV0ZXJOYW1lKXMuaXNBc3NpZ25lZCgpKScgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAg
ICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBqc29uTWVz
c2FnZS0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJLZXkpcyIp
LCAlKHBhcmFtZXRlck5hbWUpcy5nZXRWYWx1ZSgpKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAg
ICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShw
YXJhbWV0ZXJOYW1lKXMtPmlzQXNzaWduZWQoKSknICUgcGFyYW1fYXJncykKKyAgICAgICAgICAg
ICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAganNvbk1l
c3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyS2V5KXMi
KSwgJShwYXJhbWV0ZXJOYW1lKXMtPmdldFZhbHVlKCkpOycgJSBwYXJhbV9hcmdzKQogICAgICAg
ICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMuYXBwZW5kKCcgICAgaWYgKCUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbV9hcmdzKQog
ICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAg
ICAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJh
bWV0ZXJLZXkpcyIpLCAlKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9SdW50
aW1lTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL1J1bnRpbWVNYW5hZ2VyLmpzCmluZGV4IGExMDU0MTQyMjU0Li5hNWNlMmYxNTRlNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxl
cnMvUnVudGltZU1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvUnVudGltZU1hbmFnZXIuanMKQEAgLTU3LDYgKzU3LDcgQEAgV2Vi
SW5zcGVjdG9yLlJ1bnRpbWVNYW5hZ2VyID0gY2xhc3MgUnVudGltZU1hbmFnZXIgZXh0ZW5kcyBX
ZWJJbnNwZWN0b3IuT2JqZWN0CiAgICAgZXZhbHVhdGVJbkluc3BlY3RlZFdpbmRvdyhleHByZXNz
aW9uLCBvcHRpb25zLCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIGxldCB7b2JqZWN0R3JvdXAs
IGluY2x1ZGVDb21tYW5kTGluZUFQSSwgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25z
b2xlLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQsIHNvdXJjZVVS
TEFwcGVuZGVyfSA9IG9wdGlvbnM7CisgICAgICAgIGxldCB1c2VBd2FpdCA9IGZhbHNlOwogCiAg
ICAgICAgIGluY2x1ZGVDb21tYW5kTGluZUFQSSA9IGluY2x1ZGVDb21tYW5kTGluZUFQSSB8fCBm
YWxzZTsKICAgICAgICAgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlID0gZG9O
b3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlIHx8IGZhbHNlOwpAQCAtNzYsNyArNzcs
MTAgQEAgV2ViSW5zcGVjdG9yLlJ1bnRpbWVNYW5hZ2VyID0gY2xhc3MgUnVudGltZU1hbmFnZXIg
ZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0CiAgICAgICAgICAgICBleHByZXNzaW9uID0gIigi
ICsgZXhwcmVzc2lvbiArICIpIjsKICAgICAgICAgfSBlbHNlIGlmICgvXGJhd2FpdFxiLy50ZXN0
KGV4cHJlc3Npb24pKSB7CiAgICAgICAgICAgICAvLyBUcmFuc2Zvcm0gYGF3YWl0IDxleHByPmAg
aW50byBhbiBhc3luYyBmdW5jdGlvbiBhc3NpZ25tZW50LgorICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBtYWtlIGF3YWl0IGNvbnZlbmllbmNlIHdvcmsgd2hlbiBwYXVzZWQuIFJpZ2h0
IG5vdyB0aGUgYXN5bmMgUHJvbWlzZSB3YWl0cyB1bnRpbCBhZnRlciB3ZSB1bnBhdXNlIHRvIGZp
cmUuCisgICAgICAgICAgICBsZXQgb3JpZ2luYWxFeHByZXNzaW9uID0gZXhwcmVzc2lvbjsKICAg
ICAgICAgICAgIGV4cHJlc3Npb24gPSB0aGlzLl90cnlBcHBseUF3YWl0Q29udmVuaWVuY2UoZXhw
cmVzc2lvbik7CisgICAgICAgICAgICB1c2VBd2FpdCA9IGV4cHJlc3Npb24gIT09IG9yaWdpbmFs
RXhwcmVzc2lvbjsKICAgICAgICAgfQogCiAgICAgICAgIGV4cHJlc3Npb24gPSBzb3VyY2VVUkxB
cHBlbmRlcihleHByZXNzaW9uKTsKQEAgLTExMSw4ICsxMTUsMTIgQEAgV2ViSW5zcGVjdG9yLlJ1
bnRpbWVNYW5hZ2VyID0gY2xhc3MgUnVudGltZU1hbmFnZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3Iu
T2JqZWN0CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICAvLyBDT01Q
QVRJQklMSVRZIChpT1MgOCk6ICJzYXZlUmVzdWx0IiBkaWQgbm90IGV4aXN0LgotICAgICAgICB0
YXJnZXQuUnVudGltZUFnZW50LmV2YWx1YXRlLmludm9rZSh7ZXhwcmVzc2lvbiwgb2JqZWN0R3Jv
dXAsIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVD
b25zb2xlLCBjb250ZXh0SWQ6IGV4ZWN1dGlvbkNvbnRleHRJZCwgcmV0dXJuQnlWYWx1ZSwgZ2Vu
ZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0fSwgZXZhbENhbGxiYWNrLmJpbmQodGhpcyksIHRhcmdl
dC5SdW50aW1lQWdlbnQpOworICAgICAgICBpZiAodXNlQXdhaXQgJiYgUnVudGltZUFnZW50LmF3
YWl0KQorICAgICAgICAgICAgdGFyZ2V0LlJ1bnRpbWVBZ2VudC5hd2FpdC5pbnZva2Uoe2V4cHJl
c3Npb24sIG9iamVjdEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnRleHRJZDogZXhl
Y3V0aW9uQ29udGV4dElkLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1
bHR9LCBldmFsQ2FsbGJhY2suYmluZCh0aGlzKSwgdGFyZ2V0LlJ1bnRpbWVBZ2VudCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgLy8gQ09NUEFUSUJJTElUWSAoaU9TIDgpOiAic2F2ZVJl
c3VsdCIgZGlkIG5vdCBleGlzdC4KKyAgICAgICAgICAgIHRhcmdldC5SdW50aW1lQWdlbnQuZXZh
bHVhdGUuaW52b2tlKHtleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaW5jbHVkZUNvbW1hbmRMaW5l
QVBJLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnRleHRJZDogZXhl
Y3V0aW9uQ29udGV4dElkLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1
bHR9LCBldmFsQ2FsbGJhY2suYmluZCh0aGlzKSwgdGFyZ2V0LlJ1bnRpbWVBZ2VudCk7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICBzYXZlUmVzdWx0KHJlbW90ZU9iamVjdCwgY2FsbGJhY2spCkBA
IC0yMjksMjYgKzIzNywxNSBAQCBXZWJJbnNwZWN0b3IuUnVudGltZU1hbmFnZXIgPSBjbGFzcyBS
dW50aW1lTWFuYWdlciBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QKICAgICAgICAgaWYgKGFu
b255bW91cykgewogICAgICAgICAgICAgcmV0dXJuIGAKIChhc3luYyBmdW5jdGlvbigpIHsKLSAg
ICB0cnkgewotICAgICAgICBsZXQgcmVzdWx0ID0gJHtvcmlnaW5hbEV4cHJlc3Npb259OwotICAg
ICAgICBjb25zb2xlLmluZm8oIiVvIiwgcmVzdWx0KTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAg
ICAgIGNvbnNvbGUuZXJyb3IoZSk7Ci0gICAgfQotfSkoKTsKLXVuZGVmaW5lZGA7CisgICAgcmV0
dXJuICR7b3JpZ2luYWxFeHByZXNzaW9ufTsKK30pKCk7YDsKICAgICAgICAgfQogCiAgICAgICAg
IHJldHVybiBgJHtkZWNsYXJhdGlvbktpbmR9ICR7dmFyaWFibGVOYW1lfTsKIChhc3luYyBmdW5j
dGlvbigpIHsKLSAgICB0cnkgewotICAgICAgICAke3ZhcmlhYmxlTmFtZX0gPSAke2F3YWl0UG9y
dGlvbn07Ci0gICAgICAgIGNvbnNvbGUuaW5mbygiJW8iLCAke3ZhcmlhYmxlTmFtZX0pOwotICAg
IH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgY29uc29sZS5lcnJvcihlKTsKLSAgICB9Ci19KSgpOwot
dW5kZWZpbmVkO2A7CisgICAgJHt2YXJpYWJsZU5hbWV9ID0gJHthd2FpdFBvcnRpb259OworICAg
IHJldHVybiAke3ZhcmlhYmxlTmFtZX07Cit9KSgpO2A7CiAgICAgfQogfTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>