<?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>210184</bug_id>
          
          <creation_ts>2020-04-08 05:38:48 -0700</creation_ts>
          <short_desc>[GTK][WPE] Enable resource load statistics</short_desc>
          <delta_ts>2020-06-23 00:10:01 -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>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=210739</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=210796</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=210487</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>210483</dependson>
    
    <dependson>213493</dependson>
    
    <dependson>213502</dependson>
          <blocked>177943</blocked>
    
    <blocked>210422</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>annulen</cc>
    
    <cc>berto</cc>
    
    <cc>bfulgham</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>wilander</cc>
    
    <cc>youennf</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1639014</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-08 05:38:48 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639016</commentid>
    <comment_count>1</comment_count>
      <attachid>395795</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-08 05:44:50 -0700</bug_when>
    <thetext>Created attachment 395795
WIP patch

This is a WIP patch. Most of the tests are passing, I&apos;m getting just 3 failures and 2 flaky timeouts:

153 tests ran as expected, 5 didn&apos;t:


Unexpected flakiness: timeouts (2)
  http/tests/resourceLoadStatistics/add-blocking-to-redirect-database.html [ Timeout Pass ]
  http/tests/resourceLoadStatistics/clear-in-memory-and-persistent-store-one-hour-database.html [ Timeout Pass ]

I think these are related to a race condition in FileMonitor GLib implementation, I&apos;ll investigate.

Regressions: Unexpected text-only failures (3)
  http/tests/resourceLoadStatistics/do-not-remove-blocking-in-redirect-database.html [ Failure ]

This looks like an actual bug that I need to investigate too.

  http/tests/resourceLoadStatistics/switch-session-on-navigation-to-prevalent-with-interaction-database.php [ Failure ]
  http/tests/resourceLoadStatistics/switch-session-on-navigation-to-prevalent-with-interaction.php [ Failure ]

And these are because we are not handling isolated sessions, mainly because I&apos;m ot sure what the expected behavior is there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639017</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-08 05:50:41 -0700</bug_when>
    <thetext>So, I have a few questions for John/Youenn/Alex:

 - What&apos;s the expected behavior of isolated sessions? They start with an empty cookie storage and only allow first-party? Why is there a limit of isolated sessions?

 - There isn&apos;t HSTS tests, so I don&apos;t know what the expected behavior is there either. Should we downgrade requests upgraded by HSTS when cokies should be blocked?

 - What API should we expose for ITP? is it enough to expose WebsiteData API to set stats dir, fetch/delete website data and enable/disabled ITP? Anything else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639033</commentid>
    <comment_count>3</comment_count>
      <attachid>395803</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-08 06:54:12 -0700</bug_when>
    <thetext>Created attachment 395803
WIP patch

Found the problem with http/tests/resourceLoadStatistics/do-not-remove-blocking-in-redirect-database.html so remaining issues are:

 - isolated sessions support
 - flaky timeouts due to FileMonitor
 - HSTS requests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640811</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-13 02:18:00 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #2)
&gt; So, I have a few questions for John/Youenn/Alex:
&gt; 
&gt;  - What&apos;s the expected behavior of isolated sessions? They start with an
&gt; empty cookie storage and only allow first-party? Why is there a limit of
&gt; isolated sessions?
&gt; 
&gt;  - There isn&apos;t HSTS tests, so I don&apos;t know what the expected behavior is
&gt; there either. Should we downgrade requests upgraded by HSTS when cokies
&gt; should be blocked?
&gt; 
&gt;  - What API should we expose for ITP? is it enough to expose WebsiteData API
&gt; to set stats dir, fetch/delete website data and enable/disabled ITP?
&gt; Anything else?

Patrick told me we have to also expose API to implement UIClient::requestStorageAccessConfirm() 

Anything else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641295</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-14 02:46:07 -0700</bug_when>
    <thetext>Since I&apos;m not getting any help here, I think we can just land this patch and file a bug report for the remaining test failing (isolated sessions). I&apos;ll submit a new patch with changelogs and expectations for failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641325</commentid>
    <comment_count>6</comment_count>
      <attachid>396401</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-14 05:08:33 -0700</bug_when>
    <thetext>Created attachment 396401
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641365</commentid>
    <comment_count>7</comment_count>
      <attachid>396401</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-04-14 07:40:49 -0700</bug_when>
    <thetext>Comment on attachment 396401
Patch

LGTM, gtk bot is failing.

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

&gt; Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp:275
&gt; +        return;

This code is similar to the cocoa version.
Not a pre-requisite but it might be interesting to see whether we could move this to cross-platform code.
Ditto below.

&gt; Source/WebKit/UIProcess/API/C/WKPage.cpp:2978
&gt; +        Vector&lt;RefPtr&lt;API::Object&gt;&gt; apiDomains = WTF::map(domains, [](auto&amp; domain) {

auto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641373</commentid>
    <comment_count>8</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2020-04-14 08:03:43 -0700</bug_when>
    <thetext>Sorry for dropping the ball on this. Excited to see you’re enabling ITP!

(In reply to Carlos Garcia Campos from comment #2)
&gt; So, I have a few questions for John/Youenn/Alex:
&gt; 
&gt;  - What&apos;s the expected behavior of isolated sessions? They start with an
&gt; empty cookie storage and only allow first-party? Why is there a limit of
&gt; isolated sessions?

Isolated sessions are about the network layer below HTTP. A new session gets a new TLS connection for instance. But you can hang all kinds of things on the session to isolate it such as an individual DNS cache.

&gt;  - There isn&apos;t HSTS tests, so I don&apos;t know what the expected behavior is
&gt; there either. Should we downgrade requests upgraded by HSTS when cokies
&gt; should be blocked?

Yes, when the original request is HTTP, the request will have its cookies blocked, and has been upgraded by the HSTS mechanism, downgrade back to HTTP, apply all other rules in WebKit that might again upgrade it such as Upgrade Insecure Requests or potential/future auto-upgrade of mixed content, and send out.

The reason for lack of tests is that HSTS requires real, trusted certificates and self-signed ones like the one in the test runner will not do.

&gt;  - What API should we expose for ITP? is it enough to expose WebsiteData API
&gt; to set stats dir, fetch/delete website data and enable/disabled ITP?
&gt; Anything else?

If you want fine grained controls, you can offer more. I believe we offer the ability to exempt localhost for cases where a localhost server is used to create an stand-alone application with a UI rendered with web technologies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641377</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-14 08:11:51 -0700</bug_when>
    <thetext>(In reply to John Wilander from comment #8) 
&gt; Isolated sessions are about the network layer below HTTP. A new session gets
&gt; a new TLS connection for instance. 

Is the goal to avoid session resumption across separate isolated sessions?

(That&apos;s not currently possible with the libsoup backend, but adding new APIs might be possible.)

&gt; But you can hang all kinds of things on
&gt; the session to isolate it such as an individual DNS cache.

What&apos;s the value of isolating DNS cache? Is it to try to get different results from load balancers? (It won&apos;t be possible to do on Linux regardless. I&apos;m just curious.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641714</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-15 01:32:03 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #7)
&gt; Comment on attachment 396401 [details]
&gt; Patch
&gt; 
&gt; LGTM, gtk bot is failing.

Not related to this patch:

DerivedSources/WebCore/JSCanvasTextBaseline.cpp:80:1: fatal error: error writing to /tmp/cc8UZFn2.s: No space left on device

&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=396401&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp:275
&gt; &gt; +        return;
&gt; 
&gt; This code is similar to the cocoa version.
&gt; Not a pre-requisite but it might be interesting to see whether we could move
&gt; this to cross-platform code.
&gt; Ditto below.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/C/WKPage.cpp:2978
&gt; &gt; +        Vector&lt;RefPtr&lt;API::Object&gt;&gt; apiDomains = WTF::map(domains, [](auto&amp; domain) {
&gt; 
&gt; auto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641717</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-15 01:37:46 -0700</bug_when>
    <thetext>(In reply to John Wilander from comment #8)
&gt; Sorry for dropping the ball on this. Excited to see you’re enabling ITP!
&gt; 
&gt; (In reply to Carlos Garcia Campos from comment #2)
&gt; &gt; So, I have a few questions for John/Youenn/Alex:
&gt; &gt; 
&gt; &gt;  - What&apos;s the expected behavior of isolated sessions? They start with an
&gt; &gt; empty cookie storage and only allow first-party? Why is there a limit of
&gt; &gt; isolated sessions?
&gt; 
&gt; Isolated sessions are about the network layer below HTTP. A new session gets
&gt; a new TLS connection for instance. But you can hang all kinds of things on
&gt; the session to isolate it such as an individual DNS cache.

But when is an isolated session used? why is there a limit? I need to understand the expected behavior to see how to implement it in libsoup. For example, in libsoup we can ensure a new connection is always used for a particular request without having to use a different session, the same way we can disable cookies or other features.

&gt; &gt;  - There isn&apos;t HSTS tests, so I don&apos;t know what the expected behavior is
&gt; &gt; there either. Should we downgrade requests upgraded by HSTS when cokies
&gt; &gt; should be blocked?
&gt; 
&gt; Yes, when the original request is HTTP, the request will have its cookies
&gt; blocked, and has been upgraded by the HSTS mechanism, downgrade back to
&gt; HTTP, apply all other rules in WebKit that might again upgrade it such as
&gt; Upgrade Insecure Requests or potential/future auto-upgrade of mixed content,
&gt; and send out.

I&apos;ll open a new bug to do this.

&gt; The reason for lack of tests is that HSTS requires real, trusted
&gt; certificates and self-signed ones like the one in the test runner will not
&gt; do.

Yes, I know, I just meant I couldn&apos;t figure out the expected behavior just by looking at cocoa implementation.

&gt; &gt;  - What API should we expose for ITP? is it enough to expose WebsiteData API
&gt; &gt; to set stats dir, fetch/delete website data and enable/disabled ITP?
&gt; &gt; Anything else?
&gt; 
&gt; If you want fine grained controls, you can offer more. I believe we offer
&gt; the ability to exempt localhost for cases where a localhost server is used
&gt; to create an stand-alone application with a UI rendered with web
&gt; technologies.

How does itp afect the cookies acept policy? is it just ignored? what policy should we use in libsoup when itp is enabled?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641836</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-15 09:37:01 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #11)
&gt; But when is an isolated session used? why is there a limit? I need to
&gt; understand the expected behavior to see how to implement it in libsoup. For
&gt; example, in libsoup we can ensure a new connection is always used for a
&gt; particular request without having to use a different session, the same way
&gt; we can disable cookies or other features.

GLib doesn&apos;t have any way to prevent session resumption, so it would be impossible to do in libsoup alone without changes in GLib. I could add GLib API for you if desired. Would be easy to do, and would allow removing a hack we use to disable session resumption when running tests. (Currently calling g_test_init() will disable session resumption, because there&apos;s no API tests can use to do that, so this behavior has to be tested manually.)

&gt; How does itp afect the cookies acept policy? is it just ignored? what policy
&gt; should we use in libsoup when itp is enabled?

John can correct me if I get something wrong, but ITP&apos;s behavior changes over time and will likely change again in the future. Currently, ITP blocks all third-party cookies for all domains, unless websites use the storage access API. So it overrides WEBKIT_COOKIE_POLICY_ACCEPT_ALWAYS. And it sort of overrides WEBKIT_COOKIE_POLICY_ACCEPT_NO_THIRD_PARTY, in that websites can use the storage access API to request to store third-party cookies. libsoup must not break the storage access API by blocking third-party cookies at the libsoup level, so I think WebKit should always use SOUP_COOKIE_JAR_ACCEPT_ALWAYS, and manually reject third-party cookies at the WebKit level, except when permitted by storage access API. I guess if the application selects WEBKIT_COOKIE_POLICY_ACCEPT_NEVER, then that can take precedence and we can use SOUP_COOKIE_JAR_ACCEPT_NEVER, but otherwise ITP policy should be used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641837</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-15 09:40:06 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #11)
&gt; But when is an isolated session used? why is there a limit?

BTW I&apos;m also curious about these, and also *why*. I can&apos;t think of any privacy benefit besides limiting session resumption, and that&apos;s easy to limit without ITP by using aggressive timeouts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643390</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-20 01:34:05 -0700</bug_when>
    <thetext>Committed r260356: &lt;https://trac.webkit.org/changeset/260356&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643391</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-20 01:35:03 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #13)
&gt; (In reply to Carlos Garcia Campos from comment #11)
&gt; &gt; But when is an isolated session used? why is there a limit?
&gt; 
&gt; BTW I&apos;m also curious about these, and also *why*. I can&apos;t think of any
&gt; privacy benefit besides limiting session resumption, and that&apos;s easy to
&gt; limit without ITP by using aggressive timeouts.

This patch landed, so let&apos;s move the discussion about isolated sessions to bug #210487.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395795</attachid>
            <date>2020-04-08 05:44:50 -0700</date>
            <delta_ts>2020-04-08 06:54:12 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>wk2-itp.diff</filename>
            <type>text/plain</type>
            <size>28241</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy9sb2FkZWQtcmVnaXN0cmFibGUtZG9tYWlucy1nZXQtcmVwb3J0ZWQuaHRtbCBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9sb2FkZWQtcmVnaXN0cmFibGUt
ZG9tYWlucy1nZXQtcmVwb3J0ZWQuaHRtbAppbmRleCBhOGIwODdlODllOWMuLjNkMDBmMmQ4ZTRk
NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL2xvYWRlZC1yZWdpc3RyYWJsZS1kb21haW5zLWdldC1yZXBvcnRlZC5odG1sCisrKyBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9sb2FkZWQtcmVnaXN0
cmFibGUtZG9tYWlucy1nZXQtcmVwb3J0ZWQuaHRtbApAQCAtMjQsNyArMjQsNyBAQAogICAgIDwv
c2NyaXB0PgogPC9oZWFkPgogPGJvZHk+Ci08aWZyYW1lIG9ubG9hZD0nYXNrRm9yTG9hZGVkVGhp
cmRQYXJ0eURvbWFpbnMoKScgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9yZXNvdXJjZXMvYmFzaWMtaWZyYW1lLmh0bWwiPgorPGlmcmFtZSBvbmxvYWQ9
InNldFRpbWVvdXQoJ2Fza0ZvckxvYWRlZFRoaXJkUGFydHlEb21haW5zKCknLCAwKSIgc3JjPSJo
dHRwOi8vbG9jYWxob3N0OjgwMDAvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9yZXNvdXJjZXMvYmFz
aWMtaWZyYW1lLmh0bWwiPgogPC9pZnJhbWU+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKaW5kZXggMDAwMTVhMjkwNGM2Li5jZGU2NGE3NjJkZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25Tb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKQEAgLTI2OCwxMCArMjY4LDE2
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBodHRwT25seUNvb2tpZUV4aXN0cyhjb25zdCBHU0xpc3Qq
IGNvb2tpZXMsIGNvbnN0IGdjaGFyKiBuYW1lCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llc0Zyb21ET00oY29uc3QgVVJMJiBmaXJz
dFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgT3B0aW9uYWw8RnJh
bWVJZGVudGlmaWVyPiBmcmFtZUlELCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBT
aG91bGRBc2tJVFAsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0Cit2b2lkIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6c2V0Q29va2llc0Zyb21ET00oY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25z
dCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgT3B0aW9uYWw8RnJhbWVJZGVudGlmaWVy
PiBmcmFtZUlELCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBTaG91bGRBc2tJVFAg
c2hvdWxkQXNrSVRQLCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogeworI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisgICAgaWYgKHNob3VsZEFza0lUUCA9PSBTaG91bGRB
c2tJVFA6OlllcyAmJiBzaG91bGRCbG9ja0Nvb2tpZXMoZmlyc3RQYXJ0eSwgdXJsLCBmcmFtZUlE
LCBwYWdlSUQpKQorICAgICAgICByZXR1cm47CisjZWxzZQogICAgIFVOVVNFRF9QQVJBTShmcmFt
ZUlEKTsKICAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKKyAgICBVTlVTRURfUEFSQU0oc2hvdWxk
QXNrSVRQKTsKKyNlbmRpZgogICAgIEdVbmlxdWVQdHI8U291cFVSST4gb3JpZ2luID0gdXJsVG9T
b3VwVVJJKHVybCk7CiAgICAgaWYgKCFvcmlnaW4pCiAgICAgICAgIHJldHVybjsKQEAgLTI4MCw2
ICsyODYsMTAgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXNGcm9tRE9N
KGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVMKICAgICBpZiAoIWZpcnN0UGFydHlV
UkkpCiAgICAgICAgIHJldHVybjsKIAorI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJ
Q1MpCisgICAgYXV0byBjYXBwZWRMaWZldGltZSA9IGNsaWVudFNpZGVDb29raWVDYXAoUmVnaXN0
cmFibGVEb21haW4geyBmaXJzdFBhcnR5IH0sIHBhZ2VJRCk7CisjZW5kaWYKKwogICAgIC8vIEdl
dCBleGlzdGluZyBjb29raWVzIGZvciB0aGlzIG9yaWdpbi4KICAgICBTb3VwQ29va2llSmFyKiBq
YXIgPSBjb29raWVTdG9yYWdlKCk7CiAgICAgR1NMaXN0KiBleGlzdGluZ0Nvb2tpZXMgPSBzb3Vw
X2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KGphciwgb3JpZ2luLmdldCgpLCBUUlVFKTsKQEAg
LTI5OCw2ICszMDgsMTcgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXNG
cm9tRE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVMKICAgICAgICAgaWYgKGh0
dHBPbmx5Q29va2llRXhpc3RzKGV4aXN0aW5nQ29va2llcywgc291cF9jb29raWVfZ2V0X25hbWUo
Y29va2llLmdldCgpKSwgc291cF9jb29raWVfZ2V0X3BhdGgoY29va2llLmdldCgpKSkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAorI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
CisgICAgICAgIC8vIENhcCBsaWZldGltZSBvZiBwZXJzaXN0ZW50LCBjbGllbnQtc2lkZSBjb29r
aWVzIHRvIGEgd2Vlay4KKyAgICAgICAgaWYgKGNhcHBlZExpZmV0aW1lKSB7CisgICAgICAgICAg
ICBpZiAoYXV0byogZXhwaXJlc0RhdGUgPSBzb3VwX2Nvb2tpZV9nZXRfZXhwaXJlcyhjb29raWUu
Z2V0KCkpKSB7CisgICAgICAgICAgICAgICAgYXV0byB0aW1lSW50ZXJ2YWxTaW5jZU5vdyA9IFNl
Y29uZHMoc3RhdGljX2Nhc3Q8ZG91YmxlPihzb3VwX2RhdGVfdG9fdGltZV90KGV4cGlyZXNEYXRl
KSkpIC0gV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgICAgICAgICAg
ICAgaWYgKHRpbWVJbnRlcnZhbFNpbmNlTm93ID4gY2FwcGVkTGlmZXRpbWUudmFsdWUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgc291cF9jb29raWVfc2V0X21heF9hZ2UoY29va2llLmdldCgpLCBj
YXBwZWRMaWZldGltZS0+c2Vjb25kc0FzPGludD4oKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyNlbmRpZgorCiAjaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDY3LCAxKQogICAgICAgICBz
b3VwX2Nvb2tpZV9qYXJfYWRkX2Nvb2tpZV9mdWxsKGphciwgY29va2llLnJlbGVhc2UoKSwgb3Jp
Z2luLmdldCgpLCBmaXJzdFBhcnR5VVJJLmdldCgpKTsKICNlbHNlCkBAIC0zNzksMjkgKzQwMCwy
OCBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVk
U2luY2UoV2FsbFRpbWUgdGltZXN0YW1wKQogfQogCiB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5h
bWVzLCBJbmNsdWRlSHR0cE9ubHlDb29raWVzIGluY2x1ZGVIdHRwT25seUNvb2tpZXMpCi17Ci0g
ICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQuCi0gICAgVU5VU0VEX1BBUkFNKGluY2x1
ZGVIdHRwT25seUNvb2tpZXMpOwotICAgIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoaG9zdG5h
bWVzKTsKLX0KLQotdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsKICAgICBTb3VwQ29v
a2llSmFyKiBjb29raWVKYXIgPSBjb29raWVTdG9yYWdlKCk7Ci0KICAgICBmb3IgKGNvbnN0IGF1
dG8mIGhvc3RuYW1lIDogaG9zdG5hbWVzKSB7CiAgICAgICAgIENTdHJpbmcgaG9zdE5hbWVTdHJp
bmcgPSBob3N0bmFtZS51dGY4KCk7CiAKICAgICAgICAgR1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tp
ZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcikpOwotICAgICAgICBmb3Ig
KEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQo
aXRlbSkpIHsKLSAgICAgICAgICAgIFNvdXBDb29raWUqIGNvb2tpZSA9IHN0YXRpY19jYXN0PFNv
dXBDb29raWUqPihpdGVtLT5kYXRhKTsKLSAgICAgICAgICAgIGlmIChzb3VwX2Nvb2tpZV9kb21h
aW5fbWF0Y2hlcyhjb29raWUsIGhvc3ROYW1lU3RyaW5nLmRhdGEoKSkpCi0gICAgICAgICAgICAg
ICAgc291cF9jb29raWVfamFyX2RlbGV0ZV9jb29raWUoY29va2llSmFyLCBjb29raWUpOwotICAg
ICAgICAgICAgc291cF9jb29raWVfZnJlZShjb29raWUpOworICAgICAgICBmb3IgKGF1dG8qIGl0
ZW0gPSBjb29raWVzLmdldCgpOyBpdGVtOyBpdGVtID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7Cisg
ICAgICAgICAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+IGNvb2tpZShzdGF0aWNfY2FzdDxTb3Vw
Q29va2llKj4oaXRlbS0+ZGF0YSkpOworICAgICAgICAgICAgaWYgKGluY2x1ZGVIdHRwT25seUNv
b2tpZXMgPT0gSW5jbHVkZUh0dHBPbmx5Q29va2llczo6Tm8gJiYgc291cF9jb29raWVfZ2V0X2h0
dHBfb25seShjb29raWUuZ2V0KCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICBpZiAoc291cF9jb29raWVfZG9tYWluX21hdGNoZXMoY29va2llLmdldCgpLCBob3N0
TmFtZVN0cmluZy5kYXRhKCkpKQorICAgICAgICAgICAgICAgIHNvdXBfY29va2llX2phcl9kZWxl
dGVfY29va2llKGNvb2tpZUphciwgY29va2llLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KIH0K
IAordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBkZWxldGVDb29raWVzRm9y
SG9zdG5hbWVzKGhvc3RuYW1lcywgSW5jbHVkZUh0dHBPbmx5Q29va2llczo6WWVzKTsKK30KKwog
dm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hT
ZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIEdVbmlxdWVQdHI8R1NMaXN0PiBjb29raWVz
KHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVTdG9yYWdlKCkpKTsKQEAgLTQ0MCwy
MiArNDYwLDMwIEBAIFZlY3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0Q29v
a2llcyhjb25zdCBVUkwmIHVybCkKICAgICByZXR1cm4gY29va2llczsKIH0KIAotdm9pZCBOZXR3
b3JrU3RvcmFnZVNlc3Npb246Omhhc0Nvb2tpZXMoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAor
dm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246Omhhc0Nvb2tpZXMoY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIEdVbmlxdWVQ
dHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVTdG9y
YWdlKCkpKTsKKyAgICBmb3IgKGF1dG8qIGl0ZW0gPSBjb29raWVzLmdldCgpOyBpdGVtOyBpdGVt
ID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7CisgICAgICAgIEdVbmlxdWVQdHI8U291cENvb2tpZT4g
Y29va2llKHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKSk7CisgICAgICAgIGlm
IChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbUhvc3QoY29va2llLT5kb21h
aW4pID09IGRvbWFpbikgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAgICAgY29tcGxldGlvbkhhbmRs
ZXIoZmFsc2UpOwogfQogCi1ib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0UmF3Q29va2ll
cyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZv
LCBjb25zdCBVUkwmIHVybCwgT3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBPcHRp
b25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBTaG91bGRBc2tJVFAsIFZlY3RvcjxDb29raWU+
JiByYXdDb29raWVzKSBjb25zdAorYm9vbCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldFJhd0Nv
b2tpZXMoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRl
SW5mbywgY29uc3QgVVJMJiB1cmwsIE9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwg
T3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgU2hvdWxkQXNrSVRQIHNob3VsZEFza0lU
UCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpIGNvbnN0CiB7CiAgICAgcmF3Q29va2llcy5j
bGVhcigpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBpZiAo
c2hvdWxkQmxvY2tDb29raWVzKGZpcnN0UGFydHksIHVybCwgZnJhbWVJRCwgcGFnZUlEKSkKKyAg
ICBpZiAoc2hvdWxkQXNrSVRQID09IFNob3VsZEFza0lUUDo6WWVzICYmIHNob3VsZEJsb2NrQ29v
a2llcyhmaXJzdFBhcnR5LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7CiAgICAgVU5VU0VEX1BBUkFN
KHBhZ2VJRCk7CisgICAgVU5VU0VEX1BBUkFNKHNob3VsZEFza0lUUCk7CiAjZW5kaWYKIAogICAg
IEdVbmlxdWVQdHI8U291cFVSST4gdXJpID0gdXJsVG9Tb3VwVVJJKHVybCk7CkBAIC00ODcsMTQg
KzUxNSwxNSBAQCBib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0UmF3Q29va2llcyhjb25z
dCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llc0ZvclNlc3Npb24oY29uc3Qg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgT3B0aW9uYWw8
RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlE
LCBib29sIGZvckhUVFBIZWFkZXIsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVD
b29raWVzKQorc3RhdGljIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNGb3JTZXNzaW9u
KGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBVUkwmIHVybCwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIE9w
dGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+
IHBhZ2VJRCwgYm9vbCBmb3JIVFRQSGVhZGVyLCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRl
U2VjdXJlQ29va2llcywgU2hvdWxkQXNrSVRQIHNob3VsZEFza0lUUCkKIHsKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIGlmIChzZXNzaW9uLnNob3VsZEJsb2NrQ29v
a2llcyhmaXJzdFBhcnR5LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCkpCisgICAgaWYgKHNob3VsZEFz
a0lUUCA9PSBTaG91bGRBc2tJVFA6OlllcyAmJiBzZXNzaW9uLnNob3VsZEJsb2NrQ29va2llcyhm
aXJzdFBhcnR5LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCkpCiAgICAgICAgIHJldHVybiB7IHsgfSwg
ZmFsc2UgfTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOwogICAgIFVOVVNFRF9Q
QVJBTShwYWdlSUQpOworICAgIFVOVVNFRF9QQVJBTShzaG91bGRBc2tJVFApOwogI2VuZGlmCiAK
ICAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IHVyaSA9IHVybFRvU291cFVSSSh1cmwpOwpAQCAtNTQz
LDE1ICs1NzIsMTUgQEAgc3RhdGljIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNGb3JT
ZXNzaW9uKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2UKICAgICByZXR1cm4geyBTdHJp
bmc6OmZyb21VVEY4KGNvb2tpZUhlYWRlci5nZXQoKSksIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMg
fTsKIH0KIAotc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
b29raWVzRm9yRE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBz
YW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBPcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZy
YW1lSUQsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29r
aWVzIGluY2x1ZGVTZWN1cmVDb29raWVzLCBTaG91bGRBc2tJVFApIGNvbnN0CitzdGQ6OnBhaXI8
U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZXNGb3JET00oY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3Qg
VVJMJiB1cmwsIE9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgT3B0aW9uYWw8UGFn
ZUlkZW50aWZpZXI+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNv
b2tpZXMsIFNob3VsZEFza0lUUCBzaG91bGRBc2tJVFApIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNv
b2tpZXNGb3JTZXNzaW9uKCp0aGlzLCBmaXJzdFBhcnR5LCB1cmwsIHNhbWVTaXRlSW5mbywgZnJh
bWVJRCwgcGFnZUlELCBmYWxzZSwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOworICAgIHJldHVybiBj
b29raWVzRm9yU2Vzc2lvbigqdGhpcywgZmlyc3RQYXJ0eSwgdXJsLCBzYW1lU2l0ZUluZm8sIGZy
YW1lSUQsIHBhZ2VJRCwgZmFsc2UsIGluY2x1ZGVTZWN1cmVDb29raWVzLCBzaG91bGRBc2tJVFAp
OwogfQogCi1zdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3Qg
U2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBPcHRpb25hbDxGcmFt
ZUlkZW50aWZpZXI+IGZyYW1lSUQsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIElu
Y2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzLCBTaG91bGRBc2tJVFApIGNv
bnN0CitzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2Ft
ZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBPcHRpb25hbDxGcmFtZUlk
ZW50aWZpZXI+IGZyYW1lSUQsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIEluY2x1
ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzLCBTaG91bGRBc2tJVFAgc2hvdWxk
QXNrSVRQKSBjb25zdAogewogICAgIC8vIFNlY3VyZSBjb29raWVzIHdpbGwgc3RpbGwgb25seSBi
ZSBpbmNsdWRlZCBpZiB1cmwncyBwcm90b2NvbCBpcyBodHRwcy4KLSAgICByZXR1cm4gY29va2ll
c0ZvclNlc3Npb24oKnRoaXMsIGZpcnN0UGFydHksIHVybCwgc2FtZVNpdGVJbmZvLCBmcmFtZUlE
LCBwYWdlSUQsIHRydWUsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKKyAgICByZXR1cm4gY29va2ll
c0ZvclNlc3Npb24oKnRoaXMsIGZpcnN0UGFydHksIHVybCwgc2FtZVNpdGVJbmZvLCBmcmFtZUlE
LCBwYWdlSUQsIHRydWUsIGluY2x1ZGVTZWN1cmVDb29raWVzLCBzaG91bGRBc2tJVFApOwogfQog
CiBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5
JiBoZWFkZXJGaWVsZFByb3h5KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCmluZGV4IDk1MjM3NjZkMjNkZS4uZGJjZmNlNTc0OWEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFz
ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2su
Y3BwCkBAIC0zMCw3ICszMCw5IEBACiAjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrQmxvYi5oIgog
I2luY2x1ZGUgIk5ldHdvcmtMb2FkUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIk5ldHdvcmtTZXNz
aW9uLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1
ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CiAjaW5jbHVkZSA8
d3RmL1J1bkxvb3AuaD4KIApAQCAtNTQsNyArNTYsNyBAQCBSZWY8TmV0d29ya0RhdGFUYXNrPiBO
ZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0Rh
dAogICAgIHJldHVybiBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6Y3JlYXRlKHNlc3Npb24sIGNsaWVu
dCwgcGFyYW1ldGVycy5yZXF1ZXN0LCBwYXJhbWV0ZXJzLndlYkZyYW1lSUQsIHBhcmFtZXRlcnMu
d2ViUGFnZUlELCBwYXJhbWV0ZXJzLnN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBwYXJhbWV0ZXJz
LmNvbnRlbnRTbmlmZmluZ1BvbGljeSwgcGFyYW1ldGVycy5jb250ZW50RW5jb2RpbmdTbmlmZmlu
Z1BvbGljeSwgcGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGly
ZWN0LCBwYXJhbWV0ZXJzLnNob3VsZFByZWNvbm5lY3RPbmx5LCBwYXJhbWV0ZXJzLmlzTWFpbkZy
YW1lTmF2aWdhdGlvbiwgcGFyYW1ldGVycy5pc01haW5SZXNvdXJjZU5hdmlnYXRpb25Gb3JBbnlG
cmFtZSwgcGFyYW1ldGVycy5uZXR3b3JrQWN0aXZpdHlUcmFja2VyLCBwYXJhbWV0ZXJzLmlzTmF2
aWdhdGluZ1RvQXBwQm91bmREb21haW4pOwogI2VuZGlmCiAjaWYgVVNFKFNPVVApCi0gICAgcmV0
dXJuIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHBhcmFtZXRl
cnMucmVxdWVzdCwgcGFyYW1ldGVycy5zdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgcGFyYW1ldGVy
cy5jb250ZW50U25pZmZpbmdQb2xpY3ksIHBhcmFtZXRlcnMuY29udGVudEVuY29kaW5nU25pZmZp
bmdQb2xpY3ksIHBhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRp
cmVjdCwgcGFyYW1ldGVycy5pc01haW5GcmFtZU5hdmlnYXRpb24pOworICAgIHJldHVybiBOZXR3
b3JrRGF0YVRhc2tTb3VwOjpjcmVhdGUoc2Vzc2lvbiwgY2xpZW50LCBwYXJhbWV0ZXJzLnJlcXVl
c3QsIHBhcmFtZXRlcnMud2ViRnJhbWVJRCwgcGFyYW1ldGVycy53ZWJQYWdlSUQsIHBhcmFtZXRl
cnMuc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIHBhcmFtZXRlcnMuY29udGVudFNuaWZmaW5nUG9s
aWN5LCBwYXJhbWV0ZXJzLmNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5LCBwYXJhbWV0ZXJz
LnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIHBhcmFtZXRlcnMuaXNN
YWluRnJhbWVOYXZpZ2F0aW9uKTsKICNlbmRpZgogI2lmIFVTRShDVVJMKQogICAgIHJldHVybiBO
ZXR3b3JrRGF0YVRhc2tDdXJsOjpjcmVhdGUoc2Vzc2lvbiwgY2xpZW50LCBwYXJhbWV0ZXJzLnJl
cXVlc3QsIHBhcmFtZXRlcnMuc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIHBhcmFtZXRlcnMuY29u
dGVudFNuaWZmaW5nUG9saWN5LCBwYXJhbWV0ZXJzLmNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9s
aWN5LCBwYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Qs
IHBhcmFtZXRlcnMuaXNNYWluRnJhbWVOYXZpZ2F0aW9uKTsKQEAgLTE2OSw0ICsxNzEsMTUgQEAg
TmV0d29ya1Nlc3Npb24qIE5ldHdvcmtEYXRhVGFzazo6bmV0d29ya1Nlc3Npb24oKQogICAgIHJl
dHVybiBtX3Nlc3Npb24uZ2V0KCk7CiB9CiAKK2Jvb2wgTmV0d29ya0RhdGFUYXNrOjppc1RoaXJk
UGFydHlSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkgY29u
c3QKK3sKKyAgICByZXR1cm4gIVdlYkNvcmU6OmFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKHJl
cXVlc3QudXJsKCksIHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Cit9CisKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrOjpyZXN0cmljdFJlcXVlc3RSZWZlcnJlclRvT3JpZ2luSWZOZWVkZWQo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGlmICgobV9zZXNzaW9u
LT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpIHx8IG1fc2Vzc2lvbi0+aXNSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZCgpKSAmJiBtX3Nlc3Npb24tPnNob3VsZERvd25ncmFkZVJlZmVycmVy
KCkgJiYgaXNUaGlyZFBhcnR5UmVxdWVzdChyZXF1ZXN0KSkKKyAgICAgICAgcmVxdWVzdC5zZXRF
eGlzdGluZ0hUVFBSZWZlcnJlclRvT3JpZ2luU3RyaW5nKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
RGF0YVRhc2suaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
LmgKaW5kZXggZjViNDAyOWIzMWVlLi40MzhmNjc1MDljZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaApAQCAtMTQ4LDYgKzE0OCw5IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIGZhaWx1cmVUaW1lckZpcmVkKCk7CiAgICAgdm9pZCBzY2hlZHVs
ZUZhaWx1cmUoRmFpbHVyZVR5cGUpOwogCisgICAgYm9vbCBpc1RoaXJkUGFydHlSZXF1ZXN0KGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0OworICAgIHZvaWQgcmVzdHJpY3RS
ZXF1ZXN0UmVmZXJyZXJUb09yaWdpbklmTmVlZGVkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYp
OworCiAgICAgRmFpbHVyZVR5cGUgbV9zY2hlZHVsZWRGYWlsdXJlVHlwZSB7IE5vRmFpbHVyZSB9
OwogICAgIFdlYkNvcmU6OlRpbWVyIG1fZmFpbHVyZVRpbWVyOwogICAgIFdlYWtQdHI8TmV0d29y
a1Nlc3Npb24+IG1fc2Vzc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaAppbmRleCAwODcwZTUxMGRjNmEu
LjdiODQ4ZTRiYTZiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaApAQCAtODEsMTUgKzgxLDEyIEBAIHBy
aXZhdGU6CiAgICAgYm9vbCB0cnlQYXNzd29yZEJhc2VkQXV0aGVudGljYXRpb24oY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxl
ciYpOwogICAgIHZvaWQgYXBwbHlTbmlmZmluZ1BvbGljaWVzQW5kQmluZFJlcXVlc3RUb0luZmVy
ZmFjZUlmTmVlZGVkKF9fc3Ryb25nIE5TVVJMUmVxdWVzdComLCBib29sIHNob3VsZENvbnRlbnRT
bmlmZiwgYm9vbCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZik7CiAKLSAgICB2b2lkIHJlc3Ry
aWN0UmVxdWVzdFJlZmVycmVyVG9PcmlnaW5JZk5lZWRlZChXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmKTsKLQogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgc3RhdGlj
IE5TSFRUUENvb2tpZVN0b3JhZ2UgKnN0YXRlbGVzc0Nvb2tpZVN0b3JhZ2UoKTsKICAgICB2b2lk
IGJsb2NrQ29va2llcygpOwogICAgIHZvaWQgdW5ibG9ja0Nvb2tpZXMoKTsKICAgICBib29sIG5l
ZWRzRmlyc3RQYXJ0eUNvb2tpZUJsb2NraW5nTGF0Y2hNb2RlUXVpcmsoY29uc3QgVVJMJiBmaXJz
dFBhcnR5VVJMLCBjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFVSTCYgcmVkaXJlY3RpbmdV
UkwpIGNvbnN0OwogI2VuZGlmCi0gICAgYm9vbCBpc1RoaXJkUGFydHlSZXF1ZXN0KGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0OwogICAgIGJvb2wgaXNBbHdheXNPbkxvZ2dp
bmdBbGxvd2VkKCkgY29uc3Q7CiAKICAgICBXZWFrUHRyPFNlc3Npb25XcmFwcGVyPiBtX3Nlc3Np
b25XcmFwcGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2Nv
YS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0KaW5kZXggMDczNTQxYTMyY2E4Li5jYjBlYWUw
ZGVkZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0
d29ya0RhdGFUYXNrQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQpAQCAtMzgsNyArMzgsNiBAQAogI2ltcG9ydCA8
V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9OZXR3
b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KICNpbXBvcnQgPFdlYkNvcmUv
UmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgog
I2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CkBAIC0xODMsMTEgKzE4Miw2IEBAIGJvb2wgTmV0d29y
a0RhdGFUYXNrQ29jb2E6Om5lZWRzRmlyc3RQYXJ0eUNvb2tpZUJsb2NraW5nTGF0Y2hNb2RlUXVp
cmsoY29uc3QgVVJMCiB9CiAjZW5kaWYKIAotYm9vbCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6aXNU
aGlyZFBhcnR5UmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuICFXZWJDb3JlOjphcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVh
bChyZXF1ZXN0LnVybCgpLCByZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotfQotCiBz
dGF0aWMgdm9pZCB1cGRhdGVUYXNrV2l0aEZpcnN0UGFydHlGb3JTYW1lU2l0ZUNvb2tpZXMoTlNV
UkxTZXNzaW9uRGF0YVRhc2sqIHRhc2ssIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKIHsKICAgICBpZiAocmVxdWVzdC5pc1NhbWVTaXRlVW5zcGVjaWZpZWQoKSkKQEAg
LTMwNiwxMiArMzAwLDYgQEAgTmV0d29ya0RhdGFUYXNrQ29jb2E6On5OZXR3b3JrRGF0YVRhc2tD
b2NvYSgpCiAgICAgbV9zZXNzaW9uV3JhcHBlci0+ZGF0YVRhc2tNYXAucmVtb3ZlKFttX3Rhc2sg
dGFza0lkZW50aWZpZXJdKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6cmVzdHJp
Y3RSZXF1ZXN0UmVmZXJyZXJUb09yaWdpbklmTmVlZGVkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCkKLXsKLSAgICBpZiAoKG1fc2Vzc2lvbi0+c2Vzc2lvbklEKCkuaXNFcGhlbWVy
YWwoKSB8fCBtX3Nlc3Npb24tPmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSkgJiYg
bV9zZXNzaW9uLT5zaG91bGREb3duZ3JhZGVSZWZlcnJlcigpICYmIGlzVGhpcmRQYXJ0eVJlcXVl
c3QocmVxdWVzdCkpCi0gICAgICAgIHJlcXVlc3Quc2V0RXhpc3RpbmdIVFRQUmVmZXJyZXJUb09y
aWdpblN0cmluZygpOwotfQotCiB2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjpkaWRTZW5kRGF0
YSh1aW50NjRfdCB0b3RhbEJ5dGVzU2VudCwgdWludDY0X3QgdG90YWxCeXRlc0V4cGVjdGVkVG9T
ZW5kKQogewogICAgIFdURkVtaXRTaWducG9zdChtX3Rhc2suZ2V0KCksICJEYXRhVGFzayIsICJz
ZW50ICVsbHUgYnl0ZXMgKGV4cGVjdGVkICVsbHUgYnl0ZXMpIiwgdG90YWxCeXRlc1NlbnQsIHRv
dGFsQnl0ZXNFeHBlY3RlZFRvU2VuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKaW5kZXggMWRlNWFkOTBm
NDM0Li44MTdhMzNiNThiYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKQEAgLTUwLDggKzUwLDEwIEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGdEZWZhdWx0
UmVhZEJ1ZmZlclNpemUgPSA4MTkyOwogCi1OZXR3b3JrRGF0YVRhc2tTb3VwOjpOZXR3b3JrRGF0
YVRhc2tTb3VwKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQm
IGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0V2l0aENyZWRlbnRpYWxzLCBT
dG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgQ29udGVudFNu
aWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZiwgV2ViQ29yZTo6Q29udGVudEVuY29kaW5n
U25pZmZpbmdQb2xpY3ksIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRp
cmVjdCwgYm9vbCBkYXRhVGFza0lzRm9yTWFpbkZyYW1lTmF2aWdhdGlvbikKK05ldHdvcmtEYXRh
VGFza1NvdXA6Ok5ldHdvcmtEYXRhVGFza1NvdXAoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5l
dHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3RXaXRoQ3JlZGVudGlhbHMsIEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBQYWdlSWRlbnRpZmll
ciBwYWdlSUQsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5
LCBDb250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVudFNuaWZmLCBXZWJDb3JlOjpDb250
ZW50RW5jb2RpbmdTbmlmZmluZ1BvbGljeSwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQ
U1RvSFRUUFJlZGlyZWN0LCBib29sIGRhdGFUYXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uKQog
ICAgIDogTmV0d29ya0RhdGFUYXNrKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdFdpdGhDcmVkZW50
aWFscywgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBT
VG9IVFRQUmVkaXJlY3QsIGRhdGFUYXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uKQorICAgICwg
bV9mcmFtZUlEKGZyYW1lSUQpCisgICAgLCBtX3BhZ2VJRChwYWdlSUQpCiAgICAgLCBtX3Nob3Vs
ZENvbnRlbnRTbmlmZihzaG91bGRDb250ZW50U25pZmYpCiAgICAgLCBtX3RpbWVvdXRTb3VyY2Uo
UnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTmV0d29ya0RhdGFUYXNrU291cDo6dGltZW91dEZpcmVk
KQogewpAQCAtMTMzLDYgKzEzNSw4IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y3JlYXRl
UmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KQogICAgICAgICByZXR1cm47CiAgICAg
fQogCisgICAgcmVzdHJpY3RSZXF1ZXN0UmVmZXJyZXJUb09yaWdpbklmTmVlZGVkKG1fY3VycmVu
dFJlcXVlc3QpOworCiAgICAgdW5zaWduZWQgbWVzc2FnZUZsYWdzID0gU09VUF9NRVNTQUdFX05P
X1JFRElSRUNUOwogCiAgICAgbV9jdXJyZW50UmVxdWVzdC51cGRhdGVTb3VwTWVzc2FnZShzb3Vw
TWVzc2FnZS5nZXQoKSwgbV9zZXNzaW9uLT5ibG9iUmVnaXN0cnkoKSk7CkBAIC0xNDgsNiArMTUy
LDE2IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y3JlYXRlUmVxdWVzdChSZXNvdXJjZVJl
cXVlc3QmJiByZXF1ZXN0KQogI2VuZGlmCiAgICAgfQogCisjaWYgRU5BQkxFKFJFU09VUkNFX0xP
QURfU1RBVElTVElDUykKKyAgICBib29sIHNob3VsZEJsb2NrQ29va2llcyA9IG1fc3RvcmVkQ3Jl
ZGVudGlhbHNQb2xpY3kgPT0gU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRl
bGVzczsKKyAgICBpZiAoIXNob3VsZEJsb2NrQ29va2llcykgeworICAgICAgICBpZiAoYXV0byog
bmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24o
KSkKKyAgICAgICAgICAgIHNob3VsZEJsb2NrQ29va2llcyA9IG5ldHdvcmtTdG9yYWdlU2Vzc2lv
bi0+c2hvdWxkQmxvY2tDb29raWVzKG1fY3VycmVudFJlcXVlc3QsIG1fZnJhbWVJRCwgbV9wYWdl
SUQpOworICAgIH0KKyAgICBpZiAoc2hvdWxkQmxvY2tDb29raWVzKQorICAgICAgICBzb3VwX21l
c3NhZ2VfZGlzYWJsZV9mZWF0dXJlKHNvdXBNZXNzYWdlLmdldCgpLCBTT1VQX1RZUEVfQ09PS0lF
X0pBUik7CisjZW5kaWYKKwogI2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA2NywgMSkKICAgICBp
ZiAoKG1fY3VycmVudFJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiaHR0cHMiKSAmJiAhc2hvdWxk
QWxsb3dIU1RTUG9saWN5U2V0dGluZygpKSB8fCAobV9jdXJyZW50UmVxdWVzdC51cmwoKS5wcm90
b2NvbElzKCJodHRwIikgJiYgIXNob3VsZEFsbG93SFNUU1Byb3RvY29sVXBncmFkZSgpKSkKICAg
ICAgICAgc291cF9tZXNzYWdlX2Rpc2FibGVfZmVhdHVyZShzb3VwTWVzc2FnZS5nZXQoKSwgU09V
UF9UWVBFX0hTVFNfRU5GT1JDRVIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmgKaW5kZXggMWJkZTQyZDk2MjhjLi5k
MDEwYWIzNDUwZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaApAQCAtMjYsNyArMjYsOSBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2suaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya0xvYWRNZXRyaWNzLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UHJvdGVjdGlvblNwYWNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+
CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KQEAgLTM2LDE1ICszOCwxNSBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogY2xhc3MgTmV0d29ya0RhdGFUYXNrU291cCBmaW5hbCA6IHB1YmxpYyBOZXR3
b3JrRGF0YVRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TmV0d29ya0RhdGFUYXNrPiBj
cmVhdGUoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xp
ZW50LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYkNvcmU6OlN0
b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBXZWJDb3JlOjpD
b250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVudFNuaWZmLCBXZWJDb3JlOjpDb250ZW50
RW5jb2RpbmdTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZiwgYm9vbCBz
aG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0LCBib29sIGRhdGFUYXNrSXNG
b3JNYWluRnJhbWVOYXZpZ2F0aW9uKQorICAgIHN0YXRpYyBSZWY8TmV0d29ya0RhdGFUYXNrPiBj
cmVhdGUoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xp
ZW50LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYkNvcmU6OkZy
YW1lSWRlbnRpZmllciBmcmFtZUlELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQsIFdl
YkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBX
ZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVudFNuaWZmLCBXZWJDb3Jl
OjpDb250ZW50RW5jb2RpbmdTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlm
ZiwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0LCBib29sIGRh
dGFUYXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgTmV0d29ya0RhdGFUYXNrU291cChzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3Qs
IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENvbnRl
bnRFbmNvZGluZ1NuaWZmLCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0
LCBkYXRhVGFza0lzRm9yTWFpbkZyYW1lTmF2aWdhdGlvbikpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBOZXR3b3JrRGF0YVRhc2tTb3VwKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdCwg
ZnJhbWVJRCwgcGFnZUlELCBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgc2hvdWxkQ29udGVudFNu
aWZmLCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZiwgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRU
UFNUb0hUVFBSZWRpcmVjdCwgZGF0YVRhc2tJc0Zvck1haW5GcmFtZU5hdmlnYXRpb24pKTsKICAg
ICB9CiAKICAgICB+TmV0d29ya0RhdGFUYXNrU291cCgpOwogCiBwcml2YXRlOgotICAgIE5ldHdv
cmtEYXRhVGFza1NvdXAoTmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFs
c1BvbGljeSwgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5LCBXZWJDb3JlOjpDb250ZW50
RW5jb2RpbmdTbmlmZmluZ1BvbGljeSwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1Rv
SFRUUFJlZGlyZWN0LCBib29sIGRhdGFUYXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uKTsKKyAg
ICBOZXR3b3JrRGF0YVRhc2tTb3VwKE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya0RhdGFUYXNrQ2xp
ZW50JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6RnJhbWVJZGVu
dGlmaWVyLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3ksIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSwgV2ViQ29yZTo6Q29udGVu
dEVuY29kaW5nU25pZmZpbmdQb2xpY3ksIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNU
b0hUVFBSZWRpcmVjdCwgYm9vbCBkYXRhVGFza0lzRm9yTWFpbkZyYW1lTmF2aWdhdGlvbik7CiAK
ICAgICB2b2lkIGNhbmNlbCgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzdW1lKCkgb3ZlcnJpZGU7
CkBAIC0xMjIsNiArMTI0LDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCByZXN0YXJ0ZWRD
YWxsYmFjayhTb3VwTWVzc2FnZSosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKICAgICB2b2lkIGRp
ZFJlc3RhcnQoKTsKIAorICAgIFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBtX2ZyYW1lSUQ7Cisg
ICAgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgbV9wYWdlSUQ7CiAgICAgU3RhdGUgbV9zdGF0ZSB7
IFN0YXRlOjpTdXNwZW5kZWQgfTsKICAgICBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kg
bV9zaG91bGRDb250ZW50U25pZmY7CiAgICAgR1JlZlB0cjxTb3VwUmVxdWVzdD4gbV9zb3VwUmVx
dWVzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCmluZGV4IDA5Y2Zh
YzkxZGE4YS4uYjY4ZTY0NmM3OGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
UGFnZS5jcHAKQEAgLTI5NzAsMyArMjk3MCwyNyBAQCBXS19FWFBPUlQgYm9vbCBXS1BhZ2VJc01v
Y2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZChXS1BhZ2VSZWYpCiAgICAgcmV0dXJu
IGZhbHNlOwogI2VuZGlmCiB9CisKK3ZvaWQgV0tQYWdlTG9hZGVkVGhpcmRQYXJ0eURvbWFpbnMo
V0tQYWdlUmVmIHBhZ2UsIFdLUGFnZUxvYWRlZFRoaXJkUGFydHlEb21haW5zRnVuY3Rpb24gY2Fs
bGJhY2ssIHZvaWQqIGNhbGxiYWNrQ29udGV4dCkKK3sKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQorICAgIHRvSW1wbChwYWdlKS0+bG9hZGVkVGhpcmRQYXJ0eURvbWFpbnMo
W2NhbGxiYWNrQ29udGV4dCwgY2FsbGJhY2tdKFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mJiBk
b21haW5zKSB7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiBhcGlEb21haW5z
ID0gV1RGOjptYXAoZG9tYWlucywgW10oYXV0byYgZG9tYWluKSB7CisgICAgICAgICAgICByZXR1
cm4gUmVmUHRyPEFQSTo6T2JqZWN0PihBUEk6OlN0cmluZzo6Y3JlYXRlKFdURk1vdmUoZG9tYWlu
LnN0cmluZygpKSkpOworICAgICAgICB9KTsKKyAgICAgICAgY2FsbGJhY2sodG9BUEkoQVBJOjpB
cnJheTo6Y3JlYXRlKFdURk1vdmUoYXBpRG9tYWlucykpLnB0cigpKSwgY2FsbGJhY2tDb250ZXh0
KTsKKyAgICB9KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOworICAgIGNhbGxiYWNr
KG51bGxwdHIsIGNhbGxiYWNrQ29udGV4dCk7CisjZW5kaWYKK30KKwordm9pZCBXS1BhZ2VDbGVh
ckxvYWRlZFRoaXJkUGFydHlEb21haW5zKFdLUGFnZVJlZiBwYWdlKQoreworI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisgICAgdG9JbXBsKHBhZ2UpLT5jbGVhckxvYWRlZFRo
aXJkUGFydHlEb21haW5zKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKKyNlbmRp
ZgorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlUHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlUHJpdmF0ZS5oCmlu
ZGV4IDBlNjJmNjE3ZjI5NS4uMmQwY2UzYmZkZDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlUHJpdmF0ZS5oCkBAIC0xOTQsNiArMTk0LDEwIEBAIFdLX0VYUE9S
VCB2b2lkIFdLUGFnZU1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhX
S1BhZ2VSZWYgcGFnZSwKIFdLX0VYUE9SVCB2b2lkIFdLUGFnZVNldE1vY2tDYW1lcmFPcmllbnRh
dGlvbihXS1BhZ2VSZWYgcGFnZSwgdWludDY0X3Qgb3JpZW50YXRpb24pOwogV0tfRVhQT1JUIGJv
b2wgV0tQYWdlSXNNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQoV0tQYWdlUmVm
IHBhZ2UpOwogCit0eXBlZGVmIHZvaWQgKCpXS1BhZ2VMb2FkZWRUaGlyZFBhcnR5RG9tYWluc0Z1
bmN0aW9uKShXS0FycmF5UmVmIGRvbWFpbnMsIHZvaWQqIGZ1bmN0aW9uQ29udGV4dCk7CitXS19F
WFBPUlQgdm9pZCBXS1BhZ2VMb2FkZWRUaGlyZFBhcnR5RG9tYWlucyhXS1BhZ2VSZWYgcGFnZSwg
V0tQYWdlTG9hZGVkVGhpcmRQYXJ0eURvbWFpbnNGdW5jdGlvbiBjYWxsYmFjaywgdm9pZCogY2Fs
bGJhY2tDb250ZXh0KTsKK1dLX0VYUE9SVCB2b2lkIFdLUGFnZUNsZWFyTG9hZGVkVGhpcmRQYXJ0
eURvbWFpbnMoV0tQYWdlUmVmIHBhZ2UpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJzaXRlRGF0YVN0
b3JlR0xpYi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYnNpdGVEYXRhU3Rv
cmVHTGliLmNwcAppbmRleCBlMzMxNjE2N2Q2NDIuLjhlYThlYTJmMzFmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJzaXRlRGF0YVN0b3JlR0xpYi5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJzaXRlRGF0YVN0b3JlR0xpYi5jcHAK
QEAgLTkxLDcgKzkxLDcgQEAgV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdEhT
VFNEaXJlY3RvcnkoKQogCiBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpCiB7Ci0gICAgcmV0dXJuIHdlYnNpdGVEYXRh
RGlyZWN0b3J5RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKEJBU0VfRElSRUNUT1JZIEdfRElSX1NF
UEFSQVRPUl9TICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIik7CisgICAgcmV0dXJuIHdlYnNpdGVE
YXRhRGlyZWN0b3J5RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKEJBU0VfRElSRUNUT1JZIEdfRElS
X1NFUEFSQVRPUl9TICJyZXNvdXJjZWxvYWRzdGF0aXN0aWNzIik7CiB9CiAKIFdURjo6U3RyaW5n
IFdlYnNpdGVEYXRhU3RvcmU6OmNhY2hlRGlyZWN0b3J5RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KGNvbnN0IFdURjo6U3RyaW5nJiBkaXJlY3RvcnlOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL2Nt
YWtlL09wdGlvbnNHVEsuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQppbmRl
eCA2ZmY4YzM5OTIyYTQuLjRjMWZkMzc5YjVmNiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09w
dGlvbnNHVEsuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKQEAgLTE3
Niw2ICsxNzYsNyBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VC
X1JUQyBQUklWQVRFICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRQogV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19QQUlOVElOR19BUEkgUFJJVkFURSAke0VOQUJMRV9F
WFBFUklNRU5UQUxfRkVBVFVSRVN9KQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX0NTU19UWVBFRF9PTSBQUklWQVRFICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJF
U30pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX0NPTklDX0dS
QURJRU5UUyBQUklWQVRFIE9OKQorV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX1JFU09VUkNFX0xPQURfU1RBVElTVElDUyBQUklWQVRFIE9OKQogCiBpbmNsdWRlKEdTdHJl
YW1lckRlcGVuZGVuY2llcykKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNXUEUu
Y21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZQppbmRleCBlN2NlNzk5OTc4MzQu
LjFhMjZjNGVjYTg1MiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UK
KysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKQEAgLTY0LDYgKzY0LDcgQEAgV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX01IVE1MIFBSSVZBVEUgT04pCiBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQ
SSBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9O
T1RJRklDQVRJT05TIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX09GRlNDUkVFTl9DQU5WQVMgUFJJVkFURSAke0VOQUJMRV9FWFBFUklNRU5UQUxf
RkVBVFVSRVN9KQorV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFU09V
UkNFX0xPQURfU1RBVElTVElDUyBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX1NFUlZJQ0VfV09SS0VSIFBSSVZBVEUgT04pCiBXRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0hBUkVBQkxFX1JFU09VUkNFIFBVQkxJQyBPTikK
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TTU9PVEhfU0NST0xMSU5H
IFBSSVZBVEUgT0ZGKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApp
bmRleCA4MmU5NzZiZDdiZGUuLjI3ZGMzY2I0OTRhZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTMxMzgsMTIgKzMxMzgsNDMgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoKQogewogfQogCitzdHJ1Y3QgTG9h
ZGVkVGhpcmRQYXJ0eURvbWFpbnNDYWxsYmFja0NvbnRleHQgeworICAgIGV4cGxpY2l0IExvYWRl
ZFRoaXJkUGFydHlEb21haW5zQ2FsbGJhY2tDb250ZXh0KFRlc3RDb250cm9sbGVyJiBjb250cm9s
bGVyKQorICAgICAgICA6IHRlc3RDb250cm9sbGVyKGNvbnRyb2xsZXIpCisgICAgeworICAgIH0K
KworICAgIFRlc3RDb250cm9sbGVyJiB0ZXN0Q29udHJvbGxlcjsKKyAgICBib29sIGRvbmUgeyBm
YWxzZSB9OworICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKK307CisKK3N0YXRpYyB2b2lkIGxv
YWRlZFRoaXJkUGFydHlEb21haW5zQ2FsbGJhY2soV0tBcnJheVJlZiBkb21haW5zLCB2b2lkKiB1
c2VyRGF0YSkKK3sKKyAgICBhdXRvKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8TG9hZGVkVGhpcmRQ
YXJ0eURvbWFpbnNDYWxsYmFja0NvbnRleHQqPih1c2VyRGF0YSk7CisgICAgY29udGV4dC0+ZG9u
ZSA9IHRydWU7CisKKyAgICBpZiAoZG9tYWlucykgeworICAgICAgICBhdXRvIHNpemUgPSBXS0Fy
cmF5R2V0U2l6ZShkb21haW5zKTsKKyAgICAgICAgY29udGV4dC0+cmVzdWx0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2l6ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXgg
PCBzaXplOyArK2luZGV4KQorICAgICAgICAgICAgY29udGV4dC0+cmVzdWx0LnVuY2hlY2tlZEFw
cGVuZCh0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1B
dEluZGV4KGRvbWFpbnMsIGluZGV4KSkpKTsKKyAgICB9CisKKyAgICBjb250ZXh0LT50ZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmxvYWRlZFRo
aXJkUGFydHlEb21haW5zKCkKIHsKKyAgICBMb2FkZWRUaGlyZFBhcnR5RG9tYWluc0NhbGxiYWNr
Q29udGV4dCBjb250ZXh0KCp0aGlzKTsKKyAgICBXS1BhZ2VMb2FkZWRUaGlyZFBhcnR5RG9tYWlu
cyhtX21haW5XZWJWaWV3LT5wYWdlKCksIGxvYWRlZFRoaXJkUGFydHlEb21haW5zQ2FsbGJhY2ss
ICZjb250ZXh0KTsKKyAgICBydW5VbnRpbChjb250ZXh0LmRvbmUsIG5vVGltZW91dCk7CisgICAg
bV9jdXJyZW50SW52b2NhdGlvbi0+ZGlkUmVjZWl2ZUxvYWRlZFRoaXJkUGFydHlEb21haW5zKFdU
Rk1vdmUoY29udGV4dC5yZXN1bHQpKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y2xlYXJM
b2FkZWRUaGlyZFBhcnR5RG9tYWlucygpCiB7CisgICAgV0tQYWdlQ2xlYXJMb2FkZWRUaGlyZFBh
cnR5RG9tYWlucyhtX21haW5XZWJWaWV3LT5wYWdlKCkpOwogfQogCiB2b2lkIFRlc3RDb250cm9s
bGVyOjpnZXRXZWJWaWV3Q2F0ZWdvcnkoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395803</attachid>
            <date>2020-04-08 06:54:12 -0700</date>
            <delta_ts>2020-04-14 05:08:33 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>wk2-itp.diff</filename>
            <type>text/plain</type>
            <size>31189</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy9sb2FkZWQtcmVnaXN0cmFibGUtZG9tYWlucy1nZXQtcmVwb3J0ZWQuaHRtbCBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9sb2FkZWQtcmVnaXN0cmFibGUt
ZG9tYWlucy1nZXQtcmVwb3J0ZWQuaHRtbAppbmRleCBhOGIwODdlODllOWMuLjNkMDBmMmQ4ZTRk
NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL2xvYWRlZC1yZWdpc3RyYWJsZS1kb21haW5zLWdldC1yZXBvcnRlZC5odG1sCisrKyBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9sb2FkZWQtcmVnaXN0
cmFibGUtZG9tYWlucy1nZXQtcmVwb3J0ZWQuaHRtbApAQCAtMjQsNyArMjQsNyBAQAogICAgIDwv
c2NyaXB0PgogPC9oZWFkPgogPGJvZHk+Ci08aWZyYW1lIG9ubG9hZD0nYXNrRm9yTG9hZGVkVGhp
cmRQYXJ0eURvbWFpbnMoKScgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9yZXNvdXJjZXMvYmFzaWMtaWZyYW1lLmh0bWwiPgorPGlmcmFtZSBvbmxvYWQ9
InNldFRpbWVvdXQoJ2Fza0ZvckxvYWRlZFRoaXJkUGFydHlEb21haW5zKCknLCAwKSIgc3JjPSJo
dHRwOi8vbG9jYWxob3N0OjgwMDAvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9yZXNvdXJjZXMvYmFz
aWMtaWZyYW1lLmh0bWwiPgogPC9pZnJhbWU+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKaW5kZXggMDAwMTVhMjkwNGM2Li5jZGU2NGE3NjJkZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25Tb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKQEAgLTI2OCwxMCArMjY4LDE2
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBodHRwT25seUNvb2tpZUV4aXN0cyhjb25zdCBHU0xpc3Qq
IGNvb2tpZXMsIGNvbnN0IGdjaGFyKiBuYW1lCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llc0Zyb21ET00oY29uc3QgVVJMJiBmaXJz
dFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgT3B0aW9uYWw8RnJh
bWVJZGVudGlmaWVyPiBmcmFtZUlELCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBT
aG91bGRBc2tJVFAsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0Cit2b2lkIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6c2V0Q29va2llc0Zyb21ET00oY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25z
dCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgT3B0aW9uYWw8RnJhbWVJZGVudGlmaWVy
PiBmcmFtZUlELCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBTaG91bGRBc2tJVFAg
c2hvdWxkQXNrSVRQLCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogeworI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisgICAgaWYgKHNob3VsZEFza0lUUCA9PSBTaG91bGRB
c2tJVFA6OlllcyAmJiBzaG91bGRCbG9ja0Nvb2tpZXMoZmlyc3RQYXJ0eSwgdXJsLCBmcmFtZUlE
LCBwYWdlSUQpKQorICAgICAgICByZXR1cm47CisjZWxzZQogICAgIFVOVVNFRF9QQVJBTShmcmFt
ZUlEKTsKICAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKKyAgICBVTlVTRURfUEFSQU0oc2hvdWxk
QXNrSVRQKTsKKyNlbmRpZgogICAgIEdVbmlxdWVQdHI8U291cFVSST4gb3JpZ2luID0gdXJsVG9T
b3VwVVJJKHVybCk7CiAgICAgaWYgKCFvcmlnaW4pCiAgICAgICAgIHJldHVybjsKQEAgLTI4MCw2
ICsyODYsMTAgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXNGcm9tRE9N
KGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVMKICAgICBpZiAoIWZpcnN0UGFydHlV
UkkpCiAgICAgICAgIHJldHVybjsKIAorI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJ
Q1MpCisgICAgYXV0byBjYXBwZWRMaWZldGltZSA9IGNsaWVudFNpZGVDb29raWVDYXAoUmVnaXN0
cmFibGVEb21haW4geyBmaXJzdFBhcnR5IH0sIHBhZ2VJRCk7CisjZW5kaWYKKwogICAgIC8vIEdl
dCBleGlzdGluZyBjb29raWVzIGZvciB0aGlzIG9yaWdpbi4KICAgICBTb3VwQ29va2llSmFyKiBq
YXIgPSBjb29raWVTdG9yYWdlKCk7CiAgICAgR1NMaXN0KiBleGlzdGluZ0Nvb2tpZXMgPSBzb3Vw
X2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KGphciwgb3JpZ2luLmdldCgpLCBUUlVFKTsKQEAg
LTI5OCw2ICszMDgsMTcgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXNG
cm9tRE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVMKICAgICAgICAgaWYgKGh0
dHBPbmx5Q29va2llRXhpc3RzKGV4aXN0aW5nQ29va2llcywgc291cF9jb29raWVfZ2V0X25hbWUo
Y29va2llLmdldCgpKSwgc291cF9jb29raWVfZ2V0X3BhdGgoY29va2llLmdldCgpKSkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAorI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
CisgICAgICAgIC8vIENhcCBsaWZldGltZSBvZiBwZXJzaXN0ZW50LCBjbGllbnQtc2lkZSBjb29r
aWVzIHRvIGEgd2Vlay4KKyAgICAgICAgaWYgKGNhcHBlZExpZmV0aW1lKSB7CisgICAgICAgICAg
ICBpZiAoYXV0byogZXhwaXJlc0RhdGUgPSBzb3VwX2Nvb2tpZV9nZXRfZXhwaXJlcyhjb29raWUu
Z2V0KCkpKSB7CisgICAgICAgICAgICAgICAgYXV0byB0aW1lSW50ZXJ2YWxTaW5jZU5vdyA9IFNl
Y29uZHMoc3RhdGljX2Nhc3Q8ZG91YmxlPihzb3VwX2RhdGVfdG9fdGltZV90KGV4cGlyZXNEYXRl
KSkpIC0gV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgICAgICAgICAg
ICAgaWYgKHRpbWVJbnRlcnZhbFNpbmNlTm93ID4gY2FwcGVkTGlmZXRpbWUudmFsdWUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgc291cF9jb29raWVfc2V0X21heF9hZ2UoY29va2llLmdldCgpLCBj
YXBwZWRMaWZldGltZS0+c2Vjb25kc0FzPGludD4oKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyNlbmRpZgorCiAjaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDY3LCAxKQogICAgICAgICBz
b3VwX2Nvb2tpZV9qYXJfYWRkX2Nvb2tpZV9mdWxsKGphciwgY29va2llLnJlbGVhc2UoKSwgb3Jp
Z2luLmdldCgpLCBmaXJzdFBhcnR5VVJJLmdldCgpKTsKICNlbHNlCkBAIC0zNzksMjkgKzQwMCwy
OCBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVk
U2luY2UoV2FsbFRpbWUgdGltZXN0YW1wKQogfQogCiB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5h
bWVzLCBJbmNsdWRlSHR0cE9ubHlDb29raWVzIGluY2x1ZGVIdHRwT25seUNvb2tpZXMpCi17Ci0g
ICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQuCi0gICAgVU5VU0VEX1BBUkFNKGluY2x1
ZGVIdHRwT25seUNvb2tpZXMpOwotICAgIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoaG9zdG5h
bWVzKTsKLX0KLQotdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsKICAgICBTb3VwQ29v
a2llSmFyKiBjb29raWVKYXIgPSBjb29raWVTdG9yYWdlKCk7Ci0KICAgICBmb3IgKGNvbnN0IGF1
dG8mIGhvc3RuYW1lIDogaG9zdG5hbWVzKSB7CiAgICAgICAgIENTdHJpbmcgaG9zdE5hbWVTdHJp
bmcgPSBob3N0bmFtZS51dGY4KCk7CiAKICAgICAgICAgR1VuaXF1ZVB0cjxHU0xpc3Q+IGNvb2tp
ZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcikpOwotICAgICAgICBmb3Ig
KEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3NsaXN0X25leHQo
aXRlbSkpIHsKLSAgICAgICAgICAgIFNvdXBDb29raWUqIGNvb2tpZSA9IHN0YXRpY19jYXN0PFNv
dXBDb29raWUqPihpdGVtLT5kYXRhKTsKLSAgICAgICAgICAgIGlmIChzb3VwX2Nvb2tpZV9kb21h
aW5fbWF0Y2hlcyhjb29raWUsIGhvc3ROYW1lU3RyaW5nLmRhdGEoKSkpCi0gICAgICAgICAgICAg
ICAgc291cF9jb29raWVfamFyX2RlbGV0ZV9jb29raWUoY29va2llSmFyLCBjb29raWUpOwotICAg
ICAgICAgICAgc291cF9jb29raWVfZnJlZShjb29raWUpOworICAgICAgICBmb3IgKGF1dG8qIGl0
ZW0gPSBjb29raWVzLmdldCgpOyBpdGVtOyBpdGVtID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7Cisg
ICAgICAgICAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+IGNvb2tpZShzdGF0aWNfY2FzdDxTb3Vw
Q29va2llKj4oaXRlbS0+ZGF0YSkpOworICAgICAgICAgICAgaWYgKGluY2x1ZGVIdHRwT25seUNv
b2tpZXMgPT0gSW5jbHVkZUh0dHBPbmx5Q29va2llczo6Tm8gJiYgc291cF9jb29raWVfZ2V0X2h0
dHBfb25seShjb29raWUuZ2V0KCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICBpZiAoc291cF9jb29raWVfZG9tYWluX21hdGNoZXMoY29va2llLmdldCgpLCBob3N0
TmFtZVN0cmluZy5kYXRhKCkpKQorICAgICAgICAgICAgICAgIHNvdXBfY29va2llX2phcl9kZWxl
dGVfY29va2llKGNvb2tpZUphciwgY29va2llLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KIH0K
IAordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBkZWxldGVDb29raWVzRm9y
SG9zdG5hbWVzKGhvc3RuYW1lcywgSW5jbHVkZUh0dHBPbmx5Q29va2llczo6WWVzKTsKK30KKwog
dm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hT
ZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIEdVbmlxdWVQdHI8R1NMaXN0PiBjb29raWVz
KHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVTdG9yYWdlKCkpKTsKQEAgLTQ0MCwy
MiArNDYwLDMwIEBAIFZlY3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0Q29v
a2llcyhjb25zdCBVUkwmIHVybCkKICAgICByZXR1cm4gY29va2llczsKIH0KIAotdm9pZCBOZXR3
b3JrU3RvcmFnZVNlc3Npb246Omhhc0Nvb2tpZXMoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAor
dm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246Omhhc0Nvb2tpZXMoY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIEdVbmlxdWVQ
dHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVTdG9y
YWdlKCkpKTsKKyAgICBmb3IgKGF1dG8qIGl0ZW0gPSBjb29raWVzLmdldCgpOyBpdGVtOyBpdGVt
ID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7CisgICAgICAgIEdVbmlxdWVQdHI8U291cENvb2tpZT4g
Y29va2llKHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKSk7CisgICAgICAgIGlm
IChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbUhvc3QoY29va2llLT5kb21h
aW4pID09IGRvbWFpbikgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAgICAgY29tcGxldGlvbkhhbmRs
ZXIoZmFsc2UpOwogfQogCi1ib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0UmF3Q29va2ll
cyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2FtZVNpdGVJbmZv
LCBjb25zdCBVUkwmIHVybCwgT3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBPcHRp
b25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBTaG91bGRBc2tJVFAsIFZlY3RvcjxDb29raWU+
JiByYXdDb29raWVzKSBjb25zdAorYm9vbCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldFJhd0Nv
b2tpZXMoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRl
SW5mbywgY29uc3QgVVJMJiB1cmwsIE9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwg
T3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgU2hvdWxkQXNrSVRQIHNob3VsZEFza0lU
UCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpIGNvbnN0CiB7CiAgICAgcmF3Q29va2llcy5j
bGVhcigpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBpZiAo
c2hvdWxkQmxvY2tDb29raWVzKGZpcnN0UGFydHksIHVybCwgZnJhbWVJRCwgcGFnZUlEKSkKKyAg
ICBpZiAoc2hvdWxkQXNrSVRQID09IFNob3VsZEFza0lUUDo6WWVzICYmIHNob3VsZEJsb2NrQ29v
a2llcyhmaXJzdFBhcnR5LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7CiAgICAgVU5VU0VEX1BBUkFN
KHBhZ2VJRCk7CisgICAgVU5VU0VEX1BBUkFNKHNob3VsZEFza0lUUCk7CiAjZW5kaWYKIAogICAg
IEdVbmlxdWVQdHI8U291cFVSST4gdXJpID0gdXJsVG9Tb3VwVVJJKHVybCk7CkBAIC00ODcsMTQg
KzUxNSwxNSBAQCBib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0UmF3Q29va2llcyhjb25z
dCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llc0ZvclNlc3Npb24oY29uc3Qg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgT3B0aW9uYWw8
RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlE
LCBib29sIGZvckhUVFBIZWFkZXIsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVD
b29raWVzKQorc3RhdGljIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNGb3JTZXNzaW9u
KGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBVUkwmIHVybCwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIE9w
dGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+
IHBhZ2VJRCwgYm9vbCBmb3JIVFRQSGVhZGVyLCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRl
U2VjdXJlQ29va2llcywgU2hvdWxkQXNrSVRQIHNob3VsZEFza0lUUCkKIHsKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIGlmIChzZXNzaW9uLnNob3VsZEJsb2NrQ29v
a2llcyhmaXJzdFBhcnR5LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCkpCisgICAgaWYgKHNob3VsZEFz
a0lUUCA9PSBTaG91bGRBc2tJVFA6OlllcyAmJiBzZXNzaW9uLnNob3VsZEJsb2NrQ29va2llcyhm
aXJzdFBhcnR5LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCkpCiAgICAgICAgIHJldHVybiB7IHsgfSwg
ZmFsc2UgfTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOwogICAgIFVOVVNFRF9Q
QVJBTShwYWdlSUQpOworICAgIFVOVVNFRF9QQVJBTShzaG91bGRBc2tJVFApOwogI2VuZGlmCiAK
ICAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IHVyaSA9IHVybFRvU291cFVSSSh1cmwpOwpAQCAtNTQz
LDE1ICs1NzIsMTUgQEAgc3RhdGljIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNGb3JT
ZXNzaW9uKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2UKICAgICByZXR1cm4geyBTdHJp
bmc6OmZyb21VVEY4KGNvb2tpZUhlYWRlci5nZXQoKSksIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMg
fTsKIH0KIAotc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
b29raWVzRm9yRE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBz
YW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBPcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZy
YW1lSUQsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29r
aWVzIGluY2x1ZGVTZWN1cmVDb29raWVzLCBTaG91bGRBc2tJVFApIGNvbnN0CitzdGQ6OnBhaXI8
U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZXNGb3JET00oY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywgY29uc3Qg
VVJMJiB1cmwsIE9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgT3B0aW9uYWw8UGFn
ZUlkZW50aWZpZXI+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNv
b2tpZXMsIFNob3VsZEFza0lUUCBzaG91bGRBc2tJVFApIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNv
b2tpZXNGb3JTZXNzaW9uKCp0aGlzLCBmaXJzdFBhcnR5LCB1cmwsIHNhbWVTaXRlSW5mbywgZnJh
bWVJRCwgcGFnZUlELCBmYWxzZSwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOworICAgIHJldHVybiBj
b29raWVzRm9yU2Vzc2lvbigqdGhpcywgZmlyc3RQYXJ0eSwgdXJsLCBzYW1lU2l0ZUluZm8sIGZy
YW1lSUQsIHBhZ2VJRCwgZmFsc2UsIGluY2x1ZGVTZWN1cmVDb29raWVzLCBzaG91bGRBc2tJVFAp
OwogfQogCi1zdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3Qg
U2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBPcHRpb25hbDxGcmFt
ZUlkZW50aWZpZXI+IGZyYW1lSUQsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIElu
Y2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzLCBTaG91bGRBc2tJVFApIGNv
bnN0CitzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2Ft
ZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBPcHRpb25hbDxGcmFtZUlk
ZW50aWZpZXI+IGZyYW1lSUQsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIEluY2x1
ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzLCBTaG91bGRBc2tJVFAgc2hvdWxk
QXNrSVRQKSBjb25zdAogewogICAgIC8vIFNlY3VyZSBjb29raWVzIHdpbGwgc3RpbGwgb25seSBi
ZSBpbmNsdWRlZCBpZiB1cmwncyBwcm90b2NvbCBpcyBodHRwcy4KLSAgICByZXR1cm4gY29va2ll
c0ZvclNlc3Npb24oKnRoaXMsIGZpcnN0UGFydHksIHVybCwgc2FtZVNpdGVJbmZvLCBmcmFtZUlE
LCBwYWdlSUQsIHRydWUsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKKyAgICByZXR1cm4gY29va2ll
c0ZvclNlc3Npb24oKnRoaXMsIGZpcnN0UGFydHksIHVybCwgc2FtZVNpdGVJbmZvLCBmcmFtZUlE
LCBwYWdlSUQsIHRydWUsIGluY2x1ZGVTZWN1cmVDb29raWVzLCBzaG91bGRBc2tJVFApOwogfQog
CiBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5
JiBoZWFkZXJGaWVsZFByb3h5KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCmluZGV4IDk1MjM3NjZkMjNkZS4uZGJjZmNlNTc0OWEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFz
ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2su
Y3BwCkBAIC0zMCw3ICszMCw5IEBACiAjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrQmxvYi5oIgog
I2luY2x1ZGUgIk5ldHdvcmtMb2FkUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIk5ldHdvcmtTZXNz
aW9uLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1
ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CiAjaW5jbHVkZSA8
d3RmL1J1bkxvb3AuaD4KIApAQCAtNTQsNyArNTYsNyBAQCBSZWY8TmV0d29ya0RhdGFUYXNrPiBO
ZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0Rh
dAogICAgIHJldHVybiBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6Y3JlYXRlKHNlc3Npb24sIGNsaWVu
dCwgcGFyYW1ldGVycy5yZXF1ZXN0LCBwYXJhbWV0ZXJzLndlYkZyYW1lSUQsIHBhcmFtZXRlcnMu
d2ViUGFnZUlELCBwYXJhbWV0ZXJzLnN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBwYXJhbWV0ZXJz
LmNvbnRlbnRTbmlmZmluZ1BvbGljeSwgcGFyYW1ldGVycy5jb250ZW50RW5jb2RpbmdTbmlmZmlu
Z1BvbGljeSwgcGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGly
ZWN0LCBwYXJhbWV0ZXJzLnNob3VsZFByZWNvbm5lY3RPbmx5LCBwYXJhbWV0ZXJzLmlzTWFpbkZy
YW1lTmF2aWdhdGlvbiwgcGFyYW1ldGVycy5pc01haW5SZXNvdXJjZU5hdmlnYXRpb25Gb3JBbnlG
cmFtZSwgcGFyYW1ldGVycy5uZXR3b3JrQWN0aXZpdHlUcmFja2VyLCBwYXJhbWV0ZXJzLmlzTmF2
aWdhdGluZ1RvQXBwQm91bmREb21haW4pOwogI2VuZGlmCiAjaWYgVVNFKFNPVVApCi0gICAgcmV0
dXJuIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHBhcmFtZXRl
cnMucmVxdWVzdCwgcGFyYW1ldGVycy5zdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgcGFyYW1ldGVy
cy5jb250ZW50U25pZmZpbmdQb2xpY3ksIHBhcmFtZXRlcnMuY29udGVudEVuY29kaW5nU25pZmZp
bmdQb2xpY3ksIHBhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRp
cmVjdCwgcGFyYW1ldGVycy5pc01haW5GcmFtZU5hdmlnYXRpb24pOworICAgIHJldHVybiBOZXR3
b3JrRGF0YVRhc2tTb3VwOjpjcmVhdGUoc2Vzc2lvbiwgY2xpZW50LCBwYXJhbWV0ZXJzLnJlcXVl
c3QsIHBhcmFtZXRlcnMud2ViRnJhbWVJRCwgcGFyYW1ldGVycy53ZWJQYWdlSUQsIHBhcmFtZXRl
cnMuc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIHBhcmFtZXRlcnMuY29udGVudFNuaWZmaW5nUG9s
aWN5LCBwYXJhbWV0ZXJzLmNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5LCBwYXJhbWV0ZXJz
LnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIHBhcmFtZXRlcnMuaXNN
YWluRnJhbWVOYXZpZ2F0aW9uKTsKICNlbmRpZgogI2lmIFVTRShDVVJMKQogICAgIHJldHVybiBO
ZXR3b3JrRGF0YVRhc2tDdXJsOjpjcmVhdGUoc2Vzc2lvbiwgY2xpZW50LCBwYXJhbWV0ZXJzLnJl
cXVlc3QsIHBhcmFtZXRlcnMuc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIHBhcmFtZXRlcnMuY29u
dGVudFNuaWZmaW5nUG9saWN5LCBwYXJhbWV0ZXJzLmNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9s
aWN5LCBwYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Qs
IHBhcmFtZXRlcnMuaXNNYWluRnJhbWVOYXZpZ2F0aW9uKTsKQEAgLTE2OSw0ICsxNzEsMTUgQEAg
TmV0d29ya1Nlc3Npb24qIE5ldHdvcmtEYXRhVGFzazo6bmV0d29ya1Nlc3Npb24oKQogICAgIHJl
dHVybiBtX3Nlc3Npb24uZ2V0KCk7CiB9CiAKK2Jvb2wgTmV0d29ya0RhdGFUYXNrOjppc1RoaXJk
UGFydHlSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkgY29u
c3QKK3sKKyAgICByZXR1cm4gIVdlYkNvcmU6OmFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKHJl
cXVlc3QudXJsKCksIHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Cit9CisKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrOjpyZXN0cmljdFJlcXVlc3RSZWZlcnJlclRvT3JpZ2luSWZOZWVkZWQo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGlmICgobV9zZXNzaW9u
LT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpIHx8IG1fc2Vzc2lvbi0+aXNSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZCgpKSAmJiBtX3Nlc3Npb24tPnNob3VsZERvd25ncmFkZVJlZmVycmVy
KCkgJiYgaXNUaGlyZFBhcnR5UmVxdWVzdChyZXF1ZXN0KSkKKyAgICAgICAgcmVxdWVzdC5zZXRF
eGlzdGluZ0hUVFBSZWZlcnJlclRvT3JpZ2luU3RyaW5nKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
RGF0YVRhc2suaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
LmgKaW5kZXggZjViNDAyOWIzMWVlLi40MzhmNjc1MDljZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaApAQCAtMTQ4LDYgKzE0OCw5IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIGZhaWx1cmVUaW1lckZpcmVkKCk7CiAgICAgdm9pZCBzY2hlZHVs
ZUZhaWx1cmUoRmFpbHVyZVR5cGUpOwogCisgICAgYm9vbCBpc1RoaXJkUGFydHlSZXF1ZXN0KGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0OworICAgIHZvaWQgcmVzdHJpY3RS
ZXF1ZXN0UmVmZXJyZXJUb09yaWdpbklmTmVlZGVkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYp
OworCiAgICAgRmFpbHVyZVR5cGUgbV9zY2hlZHVsZWRGYWlsdXJlVHlwZSB7IE5vRmFpbHVyZSB9
OwogICAgIFdlYkNvcmU6OlRpbWVyIG1fZmFpbHVyZVRpbWVyOwogICAgIFdlYWtQdHI8TmV0d29y
a1Nlc3Npb24+IG1fc2Vzc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaAppbmRleCAwODcwZTUxMGRjNmEu
LjdiODQ4ZTRiYTZiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaApAQCAtODEsMTUgKzgxLDEyIEBAIHBy
aXZhdGU6CiAgICAgYm9vbCB0cnlQYXNzd29yZEJhc2VkQXV0aGVudGljYXRpb24oY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxl
ciYpOwogICAgIHZvaWQgYXBwbHlTbmlmZmluZ1BvbGljaWVzQW5kQmluZFJlcXVlc3RUb0luZmVy
ZmFjZUlmTmVlZGVkKF9fc3Ryb25nIE5TVVJMUmVxdWVzdComLCBib29sIHNob3VsZENvbnRlbnRT
bmlmZiwgYm9vbCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZik7CiAKLSAgICB2b2lkIHJlc3Ry
aWN0UmVxdWVzdFJlZmVycmVyVG9PcmlnaW5JZk5lZWRlZChXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmKTsKLQogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgc3RhdGlj
IE5TSFRUUENvb2tpZVN0b3JhZ2UgKnN0YXRlbGVzc0Nvb2tpZVN0b3JhZ2UoKTsKICAgICB2b2lk
IGJsb2NrQ29va2llcygpOwogICAgIHZvaWQgdW5ibG9ja0Nvb2tpZXMoKTsKICAgICBib29sIG5l
ZWRzRmlyc3RQYXJ0eUNvb2tpZUJsb2NraW5nTGF0Y2hNb2RlUXVpcmsoY29uc3QgVVJMJiBmaXJz
dFBhcnR5VVJMLCBjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFVSTCYgcmVkaXJlY3RpbmdV
UkwpIGNvbnN0OwogI2VuZGlmCi0gICAgYm9vbCBpc1RoaXJkUGFydHlSZXF1ZXN0KGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0OwogICAgIGJvb2wgaXNBbHdheXNPbkxvZ2dp
bmdBbGxvd2VkKCkgY29uc3Q7CiAKICAgICBXZWFrUHRyPFNlc3Npb25XcmFwcGVyPiBtX3Nlc3Np
b25XcmFwcGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2Nv
YS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0KaW5kZXggMDczNTQxYTMyY2E4Li5jYjBlYWUw
ZGVkZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0
d29ya0RhdGFUYXNrQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQpAQCAtMzgsNyArMzgsNiBAQAogI2ltcG9ydCA8
V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9OZXR3
b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KICNpbXBvcnQgPFdlYkNvcmUv
UmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgog
I2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CkBAIC0xODMsMTEgKzE4Miw2IEBAIGJvb2wgTmV0d29y
a0RhdGFUYXNrQ29jb2E6Om5lZWRzRmlyc3RQYXJ0eUNvb2tpZUJsb2NraW5nTGF0Y2hNb2RlUXVp
cmsoY29uc3QgVVJMCiB9CiAjZW5kaWYKIAotYm9vbCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6aXNU
aGlyZFBhcnR5UmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuICFXZWJDb3JlOjphcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVh
bChyZXF1ZXN0LnVybCgpLCByZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotfQotCiBz
dGF0aWMgdm9pZCB1cGRhdGVUYXNrV2l0aEZpcnN0UGFydHlGb3JTYW1lU2l0ZUNvb2tpZXMoTlNV
UkxTZXNzaW9uRGF0YVRhc2sqIHRhc2ssIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKIHsKICAgICBpZiAocmVxdWVzdC5pc1NhbWVTaXRlVW5zcGVjaWZpZWQoKSkKQEAg
LTMwNiwxMiArMzAwLDYgQEAgTmV0d29ya0RhdGFUYXNrQ29jb2E6On5OZXR3b3JrRGF0YVRhc2tD
b2NvYSgpCiAgICAgbV9zZXNzaW9uV3JhcHBlci0+ZGF0YVRhc2tNYXAucmVtb3ZlKFttX3Rhc2sg
dGFza0lkZW50aWZpZXJdKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6cmVzdHJp
Y3RSZXF1ZXN0UmVmZXJyZXJUb09yaWdpbklmTmVlZGVkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCkKLXsKLSAgICBpZiAoKG1fc2Vzc2lvbi0+c2Vzc2lvbklEKCkuaXNFcGhlbWVy
YWwoKSB8fCBtX3Nlc3Npb24tPmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSkgJiYg
bV9zZXNzaW9uLT5zaG91bGREb3duZ3JhZGVSZWZlcnJlcigpICYmIGlzVGhpcmRQYXJ0eVJlcXVl
c3QocmVxdWVzdCkpCi0gICAgICAgIHJlcXVlc3Quc2V0RXhpc3RpbmdIVFRQUmVmZXJyZXJUb09y
aWdpblN0cmluZygpOwotfQotCiB2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjpkaWRTZW5kRGF0
YSh1aW50NjRfdCB0b3RhbEJ5dGVzU2VudCwgdWludDY0X3QgdG90YWxCeXRlc0V4cGVjdGVkVG9T
ZW5kKQogewogICAgIFdURkVtaXRTaWducG9zdChtX3Rhc2suZ2V0KCksICJEYXRhVGFzayIsICJz
ZW50ICVsbHUgYnl0ZXMgKGV4cGVjdGVkICVsbHUgYnl0ZXMpIiwgdG90YWxCeXRlc1NlbnQsIHRv
dGFsQnl0ZXNFeHBlY3RlZFRvU2VuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKaW5kZXggMWRlNWFkOTBm
NDM0Li5mZTFiNjNlNzhmNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKQEAgLTUwLDggKzUwLDEwIEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGdEZWZhdWx0
UmVhZEJ1ZmZlclNpemUgPSA4MTkyOwogCi1OZXR3b3JrRGF0YVRhc2tTb3VwOjpOZXR3b3JrRGF0
YVRhc2tTb3VwKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQm
IGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0V2l0aENyZWRlbnRpYWxzLCBT
dG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgQ29udGVudFNu
aWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZiwgV2ViQ29yZTo6Q29udGVudEVuY29kaW5n
U25pZmZpbmdQb2xpY3ksIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRp
cmVjdCwgYm9vbCBkYXRhVGFza0lzRm9yTWFpbkZyYW1lTmF2aWdhdGlvbikKK05ldHdvcmtEYXRh
VGFza1NvdXA6Ok5ldHdvcmtEYXRhVGFza1NvdXAoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5l
dHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3RXaXRoQ3JlZGVudGlhbHMsIEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBQYWdlSWRlbnRpZmll
ciBwYWdlSUQsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5
LCBDb250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVudFNuaWZmLCBXZWJDb3JlOjpDb250
ZW50RW5jb2RpbmdTbmlmZmluZ1BvbGljeSwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQ
U1RvSFRUUFJlZGlyZWN0LCBib29sIGRhdGFUYXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uKQog
ICAgIDogTmV0d29ya0RhdGFUYXNrKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdFdpdGhDcmVkZW50
aWFscywgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBT
VG9IVFRQUmVkaXJlY3QsIGRhdGFUYXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uKQorICAgICwg
bV9mcmFtZUlEKGZyYW1lSUQpCisgICAgLCBtX3BhZ2VJRChwYWdlSUQpCiAgICAgLCBtX3Nob3Vs
ZENvbnRlbnRTbmlmZihzaG91bGRDb250ZW50U25pZmYpCiAgICAgLCBtX3RpbWVvdXRTb3VyY2Uo
UnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTmV0d29ya0RhdGFUYXNrU291cDo6dGltZW91dEZpcmVk
KQogewpAQCAtNzUsNyArNzcsNyBAQCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpOZXR3b3JrRGF0YVRh
c2tTb3VwKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhcwogICAgICAgICB9
CiAgICAgICAgIGFwcGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3QocmVxdWVzdCk7CiAgICAgfQot
ICAgIGNyZWF0ZVJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7CisgICAgY3JlYXRlUmVxdWVzdChX
VEZNb3ZlKHJlcXVlc3QpLCBXYXNCbG9ja2luZ0Nvb2tpZXM6Ok5vKTsKIH0KIAogTmV0d29ya0Rh
dGFUYXNrU291cDo6fk5ldHdvcmtEYXRhVGFza1NvdXAoKQpAQCAtMTAzLDcgKzEwNSw3IEBAIHZv
aWQgTmV0d29ya0RhdGFUYXNrU291cDo6c2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3Qg
U3RyaW5nJiBmaWxlbmFtZSwgU2FuCiAgICAgbV9hbGxvd092ZXJ3cml0ZURvd25sb2FkID0gYWxs
b3dPdmVyd3JpdGU7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y3JlYXRlUmVxdWVz
dChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpj
cmVhdGVSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIFdhc0Jsb2NraW5nQ29va2ll
cyB3YXNCbG9ja2luZ0Nvb2tpZXMpCiB7CiAgICAgbV9jdXJyZW50UmVxdWVzdCA9IFdURk1vdmUo
cmVxdWVzdCk7CiAKQEAgLTEzMyw2ICsxMzUsOCBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6
OmNyZWF0ZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAorICAgIHJlc3RyaWN0UmVxdWVzdFJlZmVycmVyVG9PcmlnaW5JZk5lZWRlZCht
X2N1cnJlbnRSZXF1ZXN0KTsKKwogICAgIHVuc2lnbmVkIG1lc3NhZ2VGbGFncyA9IFNPVVBfTUVT
U0FHRV9OT19SRURJUkVDVDsKIAogICAgIG1fY3VycmVudFJlcXVlc3QudXBkYXRlU291cE1lc3Nh
Z2Uoc291cE1lc3NhZ2UuZ2V0KCksIG1fc2Vzc2lvbi0+YmxvYlJlZ2lzdHJ5KCkpOwpAQCAtMTQ4
LDYgKzE1MiwxNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZVJlcXVlc3QoUmVz
b3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkKICNlbmRpZgogICAgIH0KIAorI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisgICAgYm9vbCBzaG91bGRCbG9ja0Nvb2tpZXMgPSB3YXNC
bG9ja2luZ0Nvb2tpZXMgPT0gV2FzQmxvY2tpbmdDb29raWVzOjpZZXMgPyB0cnVlIDogbV9zdG9y
ZWRDcmVkZW50aWFsc1BvbGljeSA9PSBTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFs
U3RhdGVsZXNzOworICAgIGlmICghc2hvdWxkQmxvY2tDb29raWVzKSB7CisgICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vz
c2lvbigpKQorICAgICAgICAgICAgc2hvdWxkQmxvY2tDb29raWVzID0gbmV0d29ya1N0b3JhZ2VT
ZXNzaW9uLT5zaG91bGRCbG9ja0Nvb2tpZXMobV9jdXJyZW50UmVxdWVzdCwgbV9mcmFtZUlELCBt
X3BhZ2VJRCk7CisgICAgfQorICAgIGlmIChzaG91bGRCbG9ja0Nvb2tpZXMpCisgICAgICAgIHNv
dXBfbWVzc2FnZV9kaXNhYmxlX2ZlYXR1cmUoc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfVFlQRV9D
T09LSUVfSkFSKTsKKyAgICBtX2lzQmxvY2tpbmdDb29raWVzID0gc2hvdWxkQmxvY2tDb29raWVz
OworI2VuZGlmCisKICNpZiBTT1VQX0NIRUNLX1ZFUlNJT04oMiwgNjcsIDEpCiAgICAgaWYgKCht
X2N1cnJlbnRSZXF1ZXN0LnVybCgpLnByb3RvY29sSXMoImh0dHBzIikgJiYgIXNob3VsZEFsbG93
SFNUU1BvbGljeVNldHRpbmcoKSkgfHwgKG1fY3VycmVudFJlcXVlc3QudXJsKCkucHJvdG9jb2xJ
cygiaHR0cCIpICYmICFzaG91bGRBbGxvd0hTVFNQcm90b2NvbFVwZ3JhZGUoKSkpCiAgICAgICAg
IHNvdXBfbWVzc2FnZV9kaXNhYmxlX2ZlYXR1cmUoc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfVFlQ
RV9IU1RTX0VORk9SQ0VSKTsKQEAgLTE5NCw2ICsyMDksNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFz
a1NvdXA6OmNsZWFyUmVxdWVzdCgpCiAgICAgbV9kb3dubG9hZE91dHB1dFN0cmVhbSA9IG51bGxw
dHI7CiAgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwobV9jYW5jZWxsYWJsZS5nZXQoKSk7CiAgICAg
bV9jYW5jZWxsYWJsZSA9IG51bGxwdHI7CisgICAgbV9pc0Jsb2NraW5nQ29va2llcyA9IGZhbHNl
OwogICAgIGlmIChtX3NvdXBNZXNzYWdlKSB7CiAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rp
c2Nvbm5lY3RfbWF0Y2hlZChtX3NvdXBNZXNzYWdlLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRB
LCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKICAgICAgICAgaWYgKG1fc2Vzc2lvbikK
QEAgLTcwMywxMCArNzE5LDEyIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y29udGludWVI
VFRQUmVkaXJlY3Rpb24oKQogICAgICAgICB9CiAgICAgfQogCisgICAgYXV0byB3YXNCbG9ja2lu
Z0Nvb2tpZXMgPSBtX2lzQmxvY2tpbmdDb29raWVzID8gV2FzQmxvY2tpbmdDb29raWVzOjpZZXMg
OiBXYXNCbG9ja2luZ0Nvb2tpZXM6Ok5vOworCiAgICAgY2xlYXJSZXF1ZXN0KCk7CiAKICAgICBh
dXRvIHJlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZShtX3Jlc3BvbnNlKTsKLSAgICBtX2NsaWVu
dC0+d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oV1RGTW92ZShyZXNwb25zZSksIFdURk1vdmUo
cmVxdWVzdCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlzQ3Jvc3NP
cmlnaW5dKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCkgeworICAgIG1fY2xpZW50
LT53aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihXVEZNb3ZlKHJlc3BvbnNlKSwgV1RGTW92ZShy
ZXF1ZXN0KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaXNDcm9zc09y
aWdpbiwgd2FzQmxvY2tpbmdDb29raWVzXShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVl
c3QpIHsKICAgICAgICAgaWYgKG5ld1JlcXVlc3QuaXNOdWxsKCkgfHwgbV9zdGF0ZSA9PSBTdGF0
ZTo6Q2FuY2VsaW5nKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC03MTksNyArNzM3LDcgQEAg
dm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpCiAKICAg
ICAgICAgICAgIGFwcGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3QocmVxdWVzdCk7CiAgICAgICAg
IH0KLSAgICAgICAgY3JlYXRlUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsKKyAgICAgICAgY3Jl
YXRlUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpLCB3YXNCbG9ja2luZ0Nvb2tpZXMpOwogICAgICAg
ICBpZiAobV9zb3VwUmVxdWVzdCAmJiBtX3N0YXRlICE9IFN0YXRlOjpTdXNwZW5kZWQpIHsKICAg
ICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6U3VzcGVuZGVkOwogICAgICAgICAgICAgcmVzdW1l
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a0RhdGFUYXNrU291cC5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdv
cmtEYXRhVGFza1NvdXAuaAppbmRleCAxYmRlNDJkOTYyOGMuLjc0ZTMxZjM0ZTI0YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1Nv
dXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFU
YXNrU291cC5oCkBAIC0yNiw3ICsyNiw5IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk5l
dHdvcmtEYXRhVGFzay5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVJZGVudGlmaWVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrTG9hZE1ldHJpY3MuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1BhZ2VJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm90ZWN0aW9uU3BhY2UuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KICNpbmNsdWRlIDx3dGYvUnVu
TG9vcC5oPgpAQCAtMzYsMTUgKzM4LDE1IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBO
ZXR3b3JrRGF0YVRhc2tTb3VwIGZpbmFsIDogcHVibGljIE5ldHdvcmtEYXRhVGFzayB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrRGF0YVRhc2s+IGNyZWF0ZShOZXR3b3JrU2Vzc2lv
biYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xp
Y3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGlj
eSBzaG91bGRDb250ZW50U25pZmYsIFdlYkNvcmU6OkNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9s
aWN5IHNob3VsZENvbnRlbnRFbmNvZGluZ1NuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QsIGJvb2wgZGF0YVRhc2tJc0Zvck1haW5GcmFtZU5hdmlnYXRp
b24pCisgICAgc3RhdGljIFJlZjxOZXR3b3JrRGF0YVRhc2s+IGNyZWF0ZShOZXR3b3JrU2Vzc2lv
biYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1l
SUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIFdlYkNvcmU6OkNvbnRlbnRTbmlm
ZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIFdlYkNvcmU6OkNvbnRlbnRFbmNvZGluZ1Nu
aWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRFbmNvZGluZ1NuaWZmLCBib29sIHNob3VsZENsZWFy
UmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIGJvb2wgZGF0YVRhc2tJc0Zvck1haW5GcmFt
ZU5hdmlnYXRpb24pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3Jr
RGF0YVRhc2tTb3VwKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3ksIHNob3VsZENvbnRlbnRTbmlmZiwgc2hvdWxkQ29udGVudEVuY29kaW5nU25pZmYsIHNo
b3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIGRhdGFUYXNrSXNGb3JNYWlu
RnJhbWVOYXZpZ2F0aW9uKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtE
YXRhVGFza1NvdXAoc2Vzc2lvbiwgY2xpZW50LCByZXF1ZXN0LCBmcmFtZUlELCBwYWdlSUQsIHN0
b3JlZENyZWRlbnRpYWxzUG9saWN5LCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENvbnRlbnRF
bmNvZGluZ1NuaWZmLCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0LCBk
YXRhVGFza0lzRm9yTWFpbkZyYW1lTmF2aWdhdGlvbikpOwogICAgIH0KIAogICAgIH5OZXR3b3Jr
RGF0YVRhc2tTb3VwKCk7CiAKIHByaXZhdGU6Ci0gICAgTmV0d29ya0RhdGFUYXNrU291cChOZXR3
b3JrU2Vzc2lvbiYsIE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBXZWJDb3JlOjpD
b250ZW50U25pZmZpbmdQb2xpY3ksIFdlYkNvcmU6OkNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9s
aWN5LCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIGJvb2wg
ZGF0YVRhc2tJc0Zvck1haW5GcmFtZU5hdmlnYXRpb24pOworICAgIE5ldHdvcmtEYXRhVGFza1Nv
dXAoTmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBh
Z2VJZGVudGlmaWVyLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgV2ViQ29yZTo6
Q29udGVudFNuaWZmaW5nUG9saWN5LCBXZWJDb3JlOjpDb250ZW50RW5jb2RpbmdTbmlmZmluZ1Bv
bGljeSwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0LCBib29s
IGRhdGFUYXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uKTsKIAogICAgIHZvaWQgY2FuY2VsKCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCByZXN1bWUoKSBvdmVycmlkZTsKQEAgLTU4LDcgKzYwLDggQEAg
cHJpdmF0ZToKICAgICB2b2lkIHN0YXJ0VGltZW91dCgpOwogICAgIHZvaWQgc3RvcFRpbWVvdXQo
KTsKIAotICAgIHZvaWQgY3JlYXRlUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik7
CisgICAgZW51bSBjbGFzcyBXYXNCbG9ja2luZ0Nvb2tpZXMgeyBObywgWWVzIH07CisgICAgdm9p
ZCBjcmVhdGVSZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBXYXNCbG9ja2luZ0Nv
b2tpZXMpOwogICAgIHZvaWQgY2xlYXJSZXF1ZXN0KCk7CiAgICAgc3RhdGljIHZvaWQgc2VuZFJl
cXVlc3RDYWxsYmFjayhTb3VwUmVxdWVzdCosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFz
a1NvdXAqKTsKICAgICB2b2lkIGRpZFNlbmRSZXF1ZXN0KEdSZWZQdHI8R0lucHV0U3RyZWFtPiYm
KTsKQEAgLTEyMiw2ICsxMjUsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHJlc3RhcnRl
ZENhbGxiYWNrKFNvdXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrU291cCopOwogICAgIHZvaWQg
ZGlkUmVzdGFydCgpOwogCisgICAgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIG1fZnJhbWVJRDsK
KyAgICBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBtX3BhZ2VJRDsKICAgICBTdGF0ZSBtX3N0YXRl
IHsgU3RhdGU6OlN1c3BlbmRlZCB9OwogICAgIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGlj
eSBtX3Nob3VsZENvbnRlbnRTbmlmZjsKICAgICBHUmVmUHRyPFNvdXBSZXF1ZXN0PiBtX3NvdXBS
ZXF1ZXN0OwpAQCAtMTQzLDYgKzE0OCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2FsbG93T3Zl
cndyaXRlRG93bmxvYWQgeyBmYWxzZSB9OwogICAgIFdlYkNvcmU6Ok5ldHdvcmtMb2FkTWV0cmlj
cyBtX25ldHdvcmtMb2FkTWV0cmljczsKICAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnRUaW1lOwor
ICAgIGJvb2wgbV9pc0Jsb2NraW5nQ29va2llcyB7IGZhbHNlIH07CiAgICAgUnVuTG9vcDo6VGlt
ZXI8TmV0d29ya0RhdGFUYXNrU291cD4gbV90aW1lb3V0U291cmNlOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKaW5kZXggMDljZmFjOTFkYThhLi5iNjhlNjQ2
Yzc4ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcApAQCAtMjk3
MCwzICsyOTcwLDI3IEBAIFdLX0VYUE9SVCBib29sIFdLUGFnZUlzTW9ja1JlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXJFbmFibGVkKFdLUGFnZVJlZikKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYK
IH0KKwordm9pZCBXS1BhZ2VMb2FkZWRUaGlyZFBhcnR5RG9tYWlucyhXS1BhZ2VSZWYgcGFnZSwg
V0tQYWdlTG9hZGVkVGhpcmRQYXJ0eURvbWFpbnNGdW5jdGlvbiBjYWxsYmFjaywgdm9pZCogY2Fs
bGJhY2tDb250ZXh0KQoreworI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisg
ICAgdG9JbXBsKHBhZ2UpLT5sb2FkZWRUaGlyZFBhcnR5RG9tYWlucyhbY2FsbGJhY2tDb250ZXh0
LCBjYWxsYmFja10oVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpIHsKKyAgICAg
ICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IGFwaURvbWFpbnMgPSBXVEY6Om1hcChkb21h
aW5zLCBbXShhdXRvJiBkb21haW4pIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8QVBJOjpP
YmplY3Q+KEFQSTo6U3RyaW5nOjpjcmVhdGUoV1RGTW92ZShkb21haW4uc3RyaW5nKCkpKSk7Cisg
ICAgICAgIH0pOworICAgICAgICBjYWxsYmFjayh0b0FQSShBUEk6OkFycmF5OjpjcmVhdGUoV1RG
TW92ZShhcGlEb21haW5zKSkucHRyKCkpLCBjYWxsYmFja0NvbnRleHQpOworICAgIH0pOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0ocGFnZSk7CisgICAgY2FsbGJhY2sobnVsbHB0ciwgY2FsbGJh
Y2tDb250ZXh0KTsKKyNlbmRpZgorfQorCit2b2lkIFdLUGFnZUNsZWFyTG9hZGVkVGhpcmRQYXJ0
eURvbWFpbnMoV0tQYWdlUmVmIHBhZ2UpCit7CisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKKyAgICB0b0ltcGwocGFnZSktPmNsZWFyTG9hZGVkVGhpcmRQYXJ0eURvbWFpbnMo
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOworI2VuZGlmCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VQcml2YXRlLmgKaW5kZXggMGU2MmY2MTdmMjk1
Li4yZDBjZTNiZmRkOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLUGFnZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1Bh
Z2VQcml2YXRlLmgKQEAgLTE5NCw2ICsxOTQsMTAgQEAgV0tfRVhQT1JUIHZvaWQgV0tQYWdlTWFy
a0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKFdLUGFnZVJlZiBwYWdlLAog
V0tfRVhQT1JUIHZvaWQgV0tQYWdlU2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uKFdLUGFnZVJlZiBw
YWdlLCB1aW50NjRfdCBvcmllbnRhdGlvbik7CiBXS19FWFBPUlQgYm9vbCBXS1BhZ2VJc01vY2tS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZChXS1BhZ2VSZWYgcGFnZSk7CiAKK3R5cGVk
ZWYgdm9pZCAoKldLUGFnZUxvYWRlZFRoaXJkUGFydHlEb21haW5zRnVuY3Rpb24pKFdLQXJyYXlS
ZWYgZG9tYWlucywgdm9pZCogZnVuY3Rpb25Db250ZXh0KTsKK1dLX0VYUE9SVCB2b2lkIFdLUGFn
ZUxvYWRlZFRoaXJkUGFydHlEb21haW5zKFdLUGFnZVJlZiBwYWdlLCBXS1BhZ2VMb2FkZWRUaGly
ZFBhcnR5RG9tYWluc0Z1bmN0aW9uIGNhbGxiYWNrLCB2b2lkKiBjYWxsYmFja0NvbnRleHQpOwor
V0tfRVhQT1JUIHZvaWQgV0tQYWdlQ2xlYXJMb2FkZWRUaGlyZFBhcnR5RG9tYWlucyhXS1BhZ2VS
ZWYgcGFnZSk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYnNpdGVEYXRhU3RvcmVHTGliLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2Vic2l0ZURhdGFTdG9yZUdMaWIuY3BwCmluZGV4
IGUzMzE2MTY3ZDY0Mi4uOGVhOGVhMmYzMWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9nbGliL1dlYnNpdGVEYXRhU3RvcmVHTGliLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9nbGliL1dlYnNpdGVEYXRhU3RvcmVHTGliLmNwcApAQCAtOTEsNyArOTEsNyBA
QCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0SFNUU0RpcmVjdG9yeSgpCiAK
IFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5KCkKIHsKLSAgICByZXR1cm4gd2Vic2l0ZURhdGFEaXJlY3RvcnlGaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24oQkFTRV9ESVJFQ1RPUlkgR19ESVJfU0VQQVJBVE9SX1MgIlJlc291
cmNlTG9hZFN0YXRpc3RpY3MiKTsKKyAgICByZXR1cm4gd2Vic2l0ZURhdGFEaXJlY3RvcnlGaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24oQkFTRV9ESVJFQ1RPUlkgR19ESVJfU0VQQVJBVE9SX1MgInJl
c291cmNlbG9hZHN0YXRpc3RpY3MiKTsKIH0KIAogV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9y
ZTo6Y2FjaGVEaXJlY3RvcnlGaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgV1RGOjpTdHJp
bmcmIGRpcmVjdG9yeU5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5j
bWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IDZmZjhjMzk5MjJhNC4u
NGMxZmQzNzliNWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQor
KysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQpAQCAtMTc2LDYgKzE3Niw3IEBAIFdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJfUlRDIFBSSVZBVEUgJHtF
TkFCTEVfRVhQRVJJTUVOVEFMX0ZFCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfQ1NTX1BBSU5USU5HX0FQSSBQUklWQVRFICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFU
VVJFU30pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX1RZUEVE
X09NIFBSSVZBVEUgJHtFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTfSkKIFdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfQ09OSUNfR1JBRElFTlRTIFBSSVZBVEUg
T04pCitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTIFBSSVZBVEUgT04pCiAKIGluY2x1ZGUoR1N0cmVhbWVyRGVwZW5kZW5jaWVz
KQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZSBiL1NvdXJjZS9j
bWFrZS9PcHRpb25zV1BFLmNtYWtlCmluZGV4IGU3Y2U3OTk5NzgzNC4uMWEyNmM0ZWNhODUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZQorKysgYi9Tb3VyY2UvY21h
a2UvT3B0aW9uc1dQRS5jbWFrZQpAQCAtNjQsNiArNjQsNyBAQCBXRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfTUhUTUwgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVG
QVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJIFBSSVZBVEUgT0ZGKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX05PVElGSUNBVElPTlMgUFJJ
VkFURSBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfT0ZGU0NS
RUVOX0NBTlZBUyBQUklWQVRFICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFU30pCitXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTIFBSSVZBVEUgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
U0VSVklDRV9XT1JLRVIgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9TSEFSRUFCTEVfUkVTT1VSQ0UgUFVCTElDIE9OKQogV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NNT09USF9TQ1JPTExJTkcgUFJJVkFURSBPRkYpCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDgyZTk3NmJkN2Jk
ZS4uMjdkYzNjYjQ5NGFkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcApAQCAtMzEzOCwxMiArMzEzOCw0MyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpnZXRBbGxT
dG9yYWdlQWNjZXNzRW50cmllcygpCiB7CiB9CiAKK3N0cnVjdCBMb2FkZWRUaGlyZFBhcnR5RG9t
YWluc0NhbGxiYWNrQ29udGV4dCB7CisgICAgZXhwbGljaXQgTG9hZGVkVGhpcmRQYXJ0eURvbWFp
bnNDYWxsYmFja0NvbnRleHQoVGVzdENvbnRyb2xsZXImIGNvbnRyb2xsZXIpCisgICAgICAgIDog
dGVzdENvbnRyb2xsZXIoY29udHJvbGxlcikKKyAgICB7CisgICAgfQorCisgICAgVGVzdENvbnRy
b2xsZXImIHRlc3RDb250cm9sbGVyOworICAgIGJvb2wgZG9uZSB7IGZhbHNlIH07CisgICAgVmVj
dG9yPFN0cmluZz4gcmVzdWx0OworfTsKKworc3RhdGljIHZvaWQgbG9hZGVkVGhpcmRQYXJ0eURv
bWFpbnNDYWxsYmFjayhXS0FycmF5UmVmIGRvbWFpbnMsIHZvaWQqIHVzZXJEYXRhKQoreworICAg
IGF1dG8qIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxMb2FkZWRUaGlyZFBhcnR5RG9tYWluc0NhbGxi
YWNrQ29udGV4dCo+KHVzZXJEYXRhKTsKKyAgICBjb250ZXh0LT5kb25lID0gdHJ1ZTsKKworICAg
IGlmIChkb21haW5zKSB7CisgICAgICAgIGF1dG8gc2l6ZSA9IFdLQXJyYXlHZXRTaXplKGRvbWFp
bnMpOworICAgICAgICBjb250ZXh0LT5yZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXpl
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IHNpemU7ICsraW5kZXgp
CisgICAgICAgICAgICBjb250ZXh0LT5yZXN1bHQudW5jaGVja2VkQXBwZW5kKHRvV1RGU3RyaW5n
KHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoZG9tYWlucywg
aW5kZXgpKSkpOworICAgIH0KKworICAgIGNvbnRleHQtPnRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKK30KKwogdm9pZCBUZXN0Q29udHJvbGxlcjo6bG9hZGVkVGhpcmRQYXJ0eURvbWFpbnMo
KQogeworICAgIExvYWRlZFRoaXJkUGFydHlEb21haW5zQ2FsbGJhY2tDb250ZXh0IGNvbnRleHQo
KnRoaXMpOworICAgIFdLUGFnZUxvYWRlZFRoaXJkUGFydHlEb21haW5zKG1fbWFpbldlYlZpZXct
PnBhZ2UoKSwgbG9hZGVkVGhpcmRQYXJ0eURvbWFpbnNDYWxsYmFjaywgJmNvbnRleHQpOworICAg
IHJ1blVudGlsKGNvbnRleHQuZG9uZSwgbm9UaW1lb3V0KTsKKyAgICBtX2N1cnJlbnRJbnZvY2F0
aW9uLT5kaWRSZWNlaXZlTG9hZGVkVGhpcmRQYXJ0eURvbWFpbnMoV1RGTW92ZShjb250ZXh0LnJl
c3VsdCkpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpjbGVhckxvYWRlZFRoaXJkUGFydHlE
b21haW5zKCkKIHsKKyAgICBXS1BhZ2VDbGVhckxvYWRlZFRoaXJkUGFydHlEb21haW5zKG1fbWFp
bldlYlZpZXctPnBhZ2UoKSk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmdldFdlYlZpZXdD
YXRlZ29yeSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396401</attachid>
            <date>2020-04-14 05:08:33 -0700</date>
            <delta_ts>2020-04-20 00:53:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-soup-itp.diff</filename>
            <type>text/plain</type>
            <size>39311</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBjYzk1OWNiNGFhYjYuLjNk
ZjJkMjE1ZjA4YSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDIwLTA0LTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEVuYWJsZSByZXNvdXJjZSBsb2FkIHN0YXRp
c3RpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
MDE4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVu
YWJsZSByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3MuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2Uv
T3B0aW9uc0dUSy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFr
ZToKKwogMjAyMC0wNC0xMyAgQWRyaWFuIFBlcmV6IGRlIENhc3RybyAgPGFwZXJlekBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtHVEtdW0NNYWtlXSBJbnRyb2R1Y2UgYW4gVVNFX0dUSzQgYnVpbGQg
b3B0aW9uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggN2FlMzZlNGQ3ZjI3Li5jMmUzNjAyMWMzY2QgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNyBAQAorMjAyMC0wNC0xNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBFbmFibGUgcmVzb3VyY2UgbG9hZCBzdGF0aXN0
aWNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAx
ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVbnNr
aXAgdGVzdHMgdGhhdCBhcmUgbm93IHBhc3NpbmcgYW5kIGFkZCBleHBlY3RhdGlvbnMgZm9yIHRo
ZSB0d28gcmVtaW5haW5nIGZhaWx1cmVzLgorCisgICAgICAgICogaHR0cC90ZXN0cy9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzL2xvYWRlZC1yZWdpc3RyYWJsZS1kb21haW5zLWdldC1yZXBvcnRlZC5o
dG1sOiBVc2Ugc2V0VGltZW91dCBpbiBvbmxvYWQKKyAgICAgICAgaGFuZGxlciB0byBhdm9pZCBh
IGRlYWRsb2NrIGR1ZSB0byBzeW5jIGluamVjdGVkIGJ1bmRsZSBtZXNzYWdlcy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS93cGUv
VGVzdEV4cGVjdGF0aW9uczoKKwogMjAyMC0wNC0xNCAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnpp
bW1lcm1hbm5AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR3RrXSBVcGRhdGUgcGl4ZWwgdGVzdHMg
YmFzZWxpbmUgZm9yIGFsbCB0ZXN0cyBjb250YWluaW5nIG9yIHJlZmVyZW5jaW5nIFNWR3MgKGV4
Y2VwdCBXUFQpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MvbG9hZGVkLXJlZ2lzdHJhYmxlLWRvbWFpbnMtZ2V0LXJlcG9ydGVkLmh0bWwg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvbG9hZGVkLXJl
Z2lzdHJhYmxlLWRvbWFpbnMtZ2V0LXJlcG9ydGVkLmh0bWwKaW5kZXggYThiMDg3ZTg5ZTljLi4z
ZDAwZjJkOGU0ZDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VM
b2FkU3RhdGlzdGljcy9sb2FkZWQtcmVnaXN0cmFibGUtZG9tYWlucy1nZXQtcmVwb3J0ZWQuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvbG9h
ZGVkLXJlZ2lzdHJhYmxlLWRvbWFpbnMtZ2V0LXJlcG9ydGVkLmh0bWwKQEAgLTI0LDcgKzI0LDcg
QEAKICAgICA8L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5PgotPGlmcmFtZSBvbmxvYWQ9J2Fza0Zv
ckxvYWRlZFRoaXJkUGFydHlEb21haW5zKCknIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3Jl
c291cmNlTG9hZFN0YXRpc3RpY3MvcmVzb3VyY2VzL2Jhc2ljLWlmcmFtZS5odG1sIj4KKzxpZnJh
bWUgb25sb2FkPSJzZXRUaW1lb3V0KCdhc2tGb3JMb2FkZWRUaGlyZFBhcnR5RG9tYWlucygpJywg
MCkiIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcmVz
b3VyY2VzL2Jhc2ljLWlmcmFtZS5odG1sIj4KIDwvaWZyYW1lPgogPC9ib2R5PgogPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA4MGU3M2U2YTZm
YjcuLmVkN2JkN2FmZDc2NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rl
c3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3Rh
dGlvbnMKQEAgLTExNzMsMTAgKzExNzMsNiBAQCB3ZWJraXQub3JnL2IvMTkxMDA1IGluc3BlY3Rv
ci9jYW52YXMvc2hhZGVyUHJvZ3JhbS1hZGQtcmVtb3ZlLXdlYmdwdS5odG1sIFsgU2tpcAogd2Vi
a2l0Lm9yZy9iLzE5MTAwNSBpbnNwZWN0b3IvY2FudmFzL3VwZGF0ZVNoYWRlci13ZWJncHUuaHRt
bCBbIFNraXAgXQogd2Via2l0Lm9yZy9iLzE5MTAwNSBpbnNwZWN0b3IvY2FudmFzL3VwZGF0ZVNo
YWRlci13ZWJncHUtc2hhcmVkVmVydGV4RnJhZ21lbnQuaHRtbCBbIFNraXAgXQogCi0jIE5vIHN1
cHBvcnQgZm9yIHJlc291cmNlIGxvYWQgc3RhdGlzdGljcyB5ZXQKLWh0dHAvdGVzdHMvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy8gWyBTa2lwIF0KLWh0dHAvdGVzdHMvd2Vic29ja2V0L3dlYi1zb2Nr
ZXQtbG9hZHMtY2FwdHVyZWQtaW4tcGVyLXBhZ2UtZG9tYWlucy5odG1sIFsgU2tpcCBdCi0KICMg
Tm8gc3VwcG9ydCBmb3Igc2NyZWVuIGNhcHR1cmUKIGZhc3QvbWVkaWFzdHJlYW0vc2NyZWVuY2Fw
dHVyZS11c2VyLWdlc3R1cmUuaHRtbCBbIFNraXAgXQogCkBAIC0xNDI0LDYgKzE0MjAsOSBAQCB3
ZWJraXQub3JnL2IvMjA5NTMzIHN2Zy9hbmltYXRpb25zL2FuaW1hdGlvbi1sZWFrLWxpc3QtcHJv
cGVydHktaW5zdGFuY2VzLmh0bWwgWwogd2Via2l0Lm9yZy9iLzIwOTUzMyBzdmcvaGl0dGVzdC9z
dmctY2xpcC1wYXRoLWNoaWxkLWVsZW1lbnQtd2l0aC11c2UuaHRtbCBbIEZhaWx1cmUgUGFzcyBd
CiB3ZWJraXQub3JnL2IvMjA5NTMzIHdlYmF1ZGlvL2NvZGVjLXRlc3RzL2FhYy92YnItMTI4a2Jw
cy00NGtoei5odG1sIFsgRmFpbHVyZSBQYXNzIF0KIAord2Via2l0Lm9yZy9iLzIxMDQ4NyBodHRw
L3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvc3dpdGNoLXNlc3Npb24tb24tbmF2aWdhdGlv
bi10by1wcmV2YWxlbnQtd2l0aC1pbnRlcmFjdGlvbi1kYXRhYmFzZS5waHAgWyBGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi8yMTA0ODcgaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3N3
aXRjaC1zZXNzaW9uLW9uLW5hdmlnYXRpb24tdG8tcHJldmFsZW50LXdpdGgtaW50ZXJhY3Rpb24u
cGhwIFsgRmFpbHVyZSBdCisKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjIEVu
ZCBvZiBFeHBlY3RlZCBmYWlsdXJlcy4KICMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL3dwZS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd3BlL1Rlc3RF
eHBlY3RhdGlvbnMKaW5kZXggOGMzOWEyZDg3OTZmLi45NTg3YTliYTA1M2IgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL3dwZS9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL3dwZS9UZXN0RXhwZWN0YXRpb25zCkBAIC03MjgsNiArNzI4LDkgQEAgd2Vi
a2l0Lm9yZy9iLzIxMDI2MiBmYXN0L3NlbGVjdG9ycy90ZXh0LWZpZWxkLXNlbGVjdGlvbi10ZXh0
LXNoYWRvdy5odG1sIFsgSW1hZ2UKIAogd2Via2l0Lm9yZy9iLzIxMDI2MyBmYXN0L2xheW91dGZv
cm1hdHRpbmdjb250ZXh0L291dC1vZi1mbG93LXBvc2l0aW9uZWQtbGluZS1icmVha3MuaHRtbCBb
IEltYWdlT25seUZhaWx1cmUgXQogCit3ZWJraXQub3JnL2IvMjEwNDg3IGh0dHAvdGVzdHMvcmVz
b3VyY2VMb2FkU3RhdGlzdGljcy9zd2l0Y2gtc2Vzc2lvbi1vbi1uYXZpZ2F0aW9uLXRvLXByZXZh
bGVudC13aXRoLWludGVyYWN0aW9uLWRhdGFiYXNlLnBocCBbIEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzIxMDQ4NyBodHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvc3dpdGNoLXNlc3Np
b24tb24tbmF2aWdhdGlvbi10by1wcmV2YWxlbnQtd2l0aC1pbnRlcmFjdGlvbi5waHAgWyBGYWls
dXJlIF0KKwogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICMgMy4gVU5SRVNPTFZF
RCBURVNUUwogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0
ZTFlMWU4YzkzMjAuLjQ0NDJlZmYzZTU5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisy
MDIwLTA0LTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbR1RLXVtXUEVdIEVuYWJsZSByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDE4NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzRnJvbURPTSBjb25zdCk6IFJldHVy
biBlYXJseSBpZiBjb29raWVzIGFyZSBibG9ja2VkIGFuZCB1cGRhdGUgdGhlCisgICAgICAgIHBl
cnNpc3RlbnQgY29va2llcyBleHBpcmF0aW9uIGlmIG5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyk6IEltcGxl
bWVudCB0aGlzIHdoZW4gcmVjZWl2aW5nCisgICAgICAgIEluY2x1ZGVIdHRwT25seUNvb2tpZXMg
cGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpoYXND
b29raWVzIGNvbnN0KTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmdldFJhd0Nvb2tpZXMgY29uc3QpOiBIb25vciBzaG91bGRBc2tJVFAg
cGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0ZvclNlc3Npb24pOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0ZvckRPTSBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSBjb25zdCk6IERpdHRvLgorCiAyMDIwLTA0LTE0
ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
R0xJQl0gRml4IHJhY2UgY29uZGl0aW9uIGluIEZpbGVNb25pdG9yIGltcGxlbWVudGF0aW9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0
b3JhZ2VTZXNzaW9uU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKaW5kZXggMDAwMTVhMjkwNGM2Li5jZGU2
NGE3NjJkZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKQEAgLTI2OCwx
MCArMjY4LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBodHRwT25seUNvb2tpZUV4aXN0cyhjb25z
dCBHU0xpc3QqIGNvb2tpZXMsIGNvbnN0IGdjaGFyKiBuYW1lCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llc0Zyb21ET00oY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgT3B0
aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4g
cGFnZUlELCBTaG91bGRBc2tJVFAsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0Cit2b2lkIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llc0Zyb21ET00oY29uc3QgVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgT3B0aW9uYWw8RnJhbWVJ
ZGVudGlmaWVyPiBmcmFtZUlELCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBTaG91
bGRBc2tJVFAgc2hvdWxkQXNrSVRQLCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAogeworI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisgICAgaWYgKHNob3VsZEFza0lUUCA9
PSBTaG91bGRBc2tJVFA6OlllcyAmJiBzaG91bGRCbG9ja0Nvb2tpZXMoZmlyc3RQYXJ0eSwgdXJs
LCBmcmFtZUlELCBwYWdlSUQpKQorICAgICAgICByZXR1cm47CisjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShmcmFtZUlEKTsKICAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKKyAgICBVTlVTRURfUEFS
QU0oc2hvdWxkQXNrSVRQKTsKKyNlbmRpZgogICAgIEdVbmlxdWVQdHI8U291cFVSST4gb3JpZ2lu
ID0gdXJsVG9Tb3VwVVJJKHVybCk7CiAgICAgaWYgKCFvcmlnaW4pCiAgICAgICAgIHJldHVybjsK
QEAgLTI4MCw2ICsyODYsMTAgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tp
ZXNGcm9tRE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVMKICAgICBpZiAoIWZp
cnN0UGFydHlVUkkpCiAgICAgICAgIHJldHVybjsKIAorI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCisgICAgYXV0byBjYXBwZWRMaWZldGltZSA9IGNsaWVudFNpZGVDb29raWVD
YXAoUmVnaXN0cmFibGVEb21haW4geyBmaXJzdFBhcnR5IH0sIHBhZ2VJRCk7CisjZW5kaWYKKwog
ICAgIC8vIEdldCBleGlzdGluZyBjb29raWVzIGZvciB0aGlzIG9yaWdpbi4KICAgICBTb3VwQ29v
a2llSmFyKiBqYXIgPSBjb29raWVTdG9yYWdlKCk7CiAgICAgR1NMaXN0KiBleGlzdGluZ0Nvb2tp
ZXMgPSBzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KGphciwgb3JpZ2luLmdldCgpLCBU
UlVFKTsKQEAgLTI5OCw2ICszMDgsMTcgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNl
dENvb2tpZXNGcm9tRE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVMKICAgICAg
ICAgaWYgKGh0dHBPbmx5Q29va2llRXhpc3RzKGV4aXN0aW5nQ29va2llcywgc291cF9jb29raWVf
Z2V0X25hbWUoY29va2llLmdldCgpKSwgc291cF9jb29raWVfZ2V0X3BhdGgoY29va2llLmdldCgp
KSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCisgICAgICAgIC8vIENhcCBsaWZldGltZSBvZiBwZXJzaXN0ZW50LCBjbGllbnQt
c2lkZSBjb29raWVzIHRvIGEgd2Vlay4KKyAgICAgICAgaWYgKGNhcHBlZExpZmV0aW1lKSB7Cisg
ICAgICAgICAgICBpZiAoYXV0byogZXhwaXJlc0RhdGUgPSBzb3VwX2Nvb2tpZV9nZXRfZXhwaXJl
cyhjb29raWUuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgYXV0byB0aW1lSW50ZXJ2YWxTaW5j
ZU5vdyA9IFNlY29uZHMoc3RhdGljX2Nhc3Q8ZG91YmxlPihzb3VwX2RhdGVfdG9fdGltZV90KGV4
cGlyZXNEYXRlKSkpIC0gV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAg
ICAgICAgICAgICAgaWYgKHRpbWVJbnRlcnZhbFNpbmNlTm93ID4gY2FwcGVkTGlmZXRpbWUudmFs
dWUoKSkKKyAgICAgICAgICAgICAgICAgICAgc291cF9jb29raWVfc2V0X21heF9hZ2UoY29va2ll
LmdldCgpLCBjYXBwZWRMaWZldGltZS0+c2Vjb25kc0FzPGludD4oKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyNlbmRpZgorCiAjaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDY3LCAxKQog
ICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfYWRkX2Nvb2tpZV9mdWxsKGphciwgY29va2llLnJlbGVh
c2UoKSwgb3JpZ2luLmdldCgpLCBmaXJzdFBhcnR5VVJJLmdldCgpKTsKICNlbHNlCkBAIC0zNzks
MjkgKzQwMCwyOCBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2ll
c01vZGlmaWVkU2luY2UoV2FsbFRpbWUgdGltZXN0YW1wKQogfQogCiB2b2lkIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgaG9zdG5hbWVzLCBJbmNsdWRlSHR0cE9ubHlDb29raWVzIGluY2x1ZGVIdHRwT25seUNvb2tp
ZXMpCi17Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQuCi0gICAgVU5VU0VEX1BB
UkFNKGluY2x1ZGVIdHRwT25seUNvb2tpZXMpOwotICAgIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZXMoaG9zdG5hbWVzKTsKLX0KLQotdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsKICAg
ICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBjb29raWVTdG9yYWdlKCk7Ci0KICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGhvc3RuYW1lIDogaG9zdG5hbWVzKSB7CiAgICAgICAgIENTdHJpbmcgaG9z
dE5hbWVTdHJpbmcgPSBob3N0bmFtZS51dGY4KCk7CiAKICAgICAgICAgR1VuaXF1ZVB0cjxHU0xp
c3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcikpOwotICAg
ICAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGNvb2tpZXMuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX3Ns
aXN0X25leHQoaXRlbSkpIHsKLSAgICAgICAgICAgIFNvdXBDb29raWUqIGNvb2tpZSA9IHN0YXRp
Y19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKTsKLSAgICAgICAgICAgIGlmIChzb3VwX2Nv
b2tpZV9kb21haW5fbWF0Y2hlcyhjb29raWUsIGhvc3ROYW1lU3RyaW5nLmRhdGEoKSkpCi0gICAg
ICAgICAgICAgICAgc291cF9jb29raWVfamFyX2RlbGV0ZV9jb29raWUoY29va2llSmFyLCBjb29r
aWUpOwotICAgICAgICAgICAgc291cF9jb29raWVfZnJlZShjb29raWUpOworICAgICAgICBmb3Ig
KGF1dG8qIGl0ZW0gPSBjb29raWVzLmdldCgpOyBpdGVtOyBpdGVtID0gZ19zbGlzdF9uZXh0KGl0
ZW0pKSB7CisgICAgICAgICAgICBHVW5pcXVlUHRyPFNvdXBDb29raWU+IGNvb2tpZShzdGF0aWNf
Y2FzdDxTb3VwQ29va2llKj4oaXRlbS0+ZGF0YSkpOworICAgICAgICAgICAgaWYgKGluY2x1ZGVI
dHRwT25seUNvb2tpZXMgPT0gSW5jbHVkZUh0dHBPbmx5Q29va2llczo6Tm8gJiYgc291cF9jb29r
aWVfZ2V0X2h0dHBfb25seShjb29raWUuZ2V0KCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICBpZiAoc291cF9jb29raWVfZG9tYWluX21hdGNoZXMoY29va2llLmdl
dCgpLCBob3N0TmFtZVN0cmluZy5kYXRhKCkpKQorICAgICAgICAgICAgICAgIHNvdXBfY29va2ll
X2phcl9kZWxldGVfY29va2llKGNvb2tpZUphciwgY29va2llLmdldCgpKTsKICAgICAgICAgfQog
ICAgIH0KIH0KIAordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBkZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKGhvc3RuYW1lcywgSW5jbHVkZUh0dHBPbmx5Q29va2llczo6WWVz
KTsKK30KKwogdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIEdVbmlxdWVQdHI8R1NMaXN0
PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVTdG9yYWdlKCkpKTsK
QEAgLTQ0MCwyMiArNDYwLDMwIEBAIFZlY3RvcjxDb29raWU+IE5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6Z2V0Q29va2llcyhjb25zdCBVUkwmIHVybCkKICAgICByZXR1cm4gY29va2llczsKIH0KIAot
dm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246Omhhc0Nvb2tpZXMoY29uc3QgUmVnaXN0cmFibGVE
b21haW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KSBjb25zdAordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246Omhhc0Nvb2tpZXMoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAg
IEdVbmlxdWVQdHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhj
b29raWVTdG9yYWdlKCkpKTsKKyAgICBmb3IgKGF1dG8qIGl0ZW0gPSBjb29raWVzLmdldCgpOyBp
dGVtOyBpdGVtID0gZ19zbGlzdF9uZXh0KGl0ZW0pKSB7CisgICAgICAgIEdVbmlxdWVQdHI8U291
cENvb2tpZT4gY29va2llKHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihpdGVtLT5kYXRhKSk7Cisg
ICAgICAgIGlmIChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbUhvc3QoY29v
a2llLT5kb21haW4pID09IGRvbWFpbikgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
dHJ1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAgICAgY29tcGxl
dGlvbkhhbmRsZXIoZmFsc2UpOwogfQogCi1ib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0
UmF3Q29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYgc2Ft
ZVNpdGVJbmZvLCBjb25zdCBVUkwmIHVybCwgT3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFt
ZUlELCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBTaG91bGRBc2tJVFAsIFZlY3Rv
cjxDb29raWU+JiByYXdDb29raWVzKSBjb25zdAorYm9vbCBOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmdldFJhd0Nvb2tpZXMoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8m
IHNhbWVTaXRlSW5mbywgY29uc3QgVVJMJiB1cmwsIE9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4g
ZnJhbWVJRCwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgU2hvdWxkQXNrSVRQIHNo
b3VsZEFza0lUUCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpIGNvbnN0CiB7CiAgICAgcmF3
Q29va2llcy5jbGVhcigpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykK
LSAgICBpZiAoc2hvdWxkQmxvY2tDb29raWVzKGZpcnN0UGFydHksIHVybCwgZnJhbWVJRCwgcGFn
ZUlEKSkKKyAgICBpZiAoc2hvdWxkQXNrSVRQID09IFNob3VsZEFza0lUUDo6WWVzICYmIHNob3Vs
ZEJsb2NrQ29va2llcyhmaXJzdFBhcnR5LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7CiAgICAgVU5V
U0VEX1BBUkFNKHBhZ2VJRCk7CisgICAgVU5VU0VEX1BBUkFNKHNob3VsZEFza0lUUCk7CiAjZW5k
aWYKIAogICAgIEdVbmlxdWVQdHI8U291cFVSST4gdXJpID0gdXJsVG9Tb3VwVVJJKHVybCk7CkBA
IC00ODcsMTQgKzUxNSwxNSBAQCBib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0UmF3Q29v
a2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSQogICAgIHJldHVybiB0
cnVlOwogfQogCi1zdGF0aWMgc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gY29va2llc0ZvclNlc3Np
b24oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0
UGFydHksIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5mbywg
T3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBPcHRpb25hbDxQYWdlSWRlbnRpZmll
cj4gcGFnZUlELCBib29sIGZvckhUVFBIZWFkZXIsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1
ZGVTZWN1cmVDb29raWVzKQorc3RhdGljIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNvb2tpZXNG
b3JTZXNzaW9uKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJM
JiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0
ZUluZm8sIE9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgT3B0aW9uYWw8UGFnZUlk
ZW50aWZpZXI+IHBhZ2VJRCwgYm9vbCBmb3JIVFRQSGVhZGVyLCBJbmNsdWRlU2VjdXJlQ29va2ll
cyBpbmNsdWRlU2VjdXJlQ29va2llcywgU2hvdWxkQXNrSVRQIHNob3VsZEFza0lUUCkKIHsKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIGlmIChzZXNzaW9uLnNob3Vs
ZEJsb2NrQ29va2llcyhmaXJzdFBhcnR5LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCkpCisgICAgaWYg
KHNob3VsZEFza0lUUCA9PSBTaG91bGRBc2tJVFA6OlllcyAmJiBzZXNzaW9uLnNob3VsZEJsb2Nr
Q29va2llcyhmaXJzdFBhcnR5LCB1cmwsIGZyYW1lSUQsIHBhZ2VJRCkpCiAgICAgICAgIHJldHVy
biB7IHsgfSwgZmFsc2UgfTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOwogICAg
IFVOVVNFRF9QQVJBTShwYWdlSUQpOworICAgIFVOVVNFRF9QQVJBTShzaG91bGRBc2tJVFApOwog
I2VuZGlmCiAKICAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IHVyaSA9IHVybFRvU291cFVSSSh1cmwp
OwpAQCAtNTQzLDE1ICs1NzIsMTUgQEAgc3RhdGljIHN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IGNv
b2tpZXNGb3JTZXNzaW9uKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2UKICAgICByZXR1
cm4geyBTdHJpbmc6OmZyb21VVEY4KGNvb2tpZUhlYWRlci5nZXQoKSksIGRpZEFjY2Vzc1NlY3Vy
ZUNvb2tpZXMgfTsKIH0KIAotc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpjb29raWVzRm9yRE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNp
dGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBPcHRpb25hbDxGcmFtZUlkZW50
aWZpZXI+IGZyYW1lSUQsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIEluY2x1ZGVT
ZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzLCBTaG91bGRBc2tJVFApIGNvbnN0Citz
dGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZXNGb3JE
T00oY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mIHNhbWVTaXRlSW5m
bywgY29uc3QgVVJMJiB1cmwsIE9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgT3B0
aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVk
ZVNlY3VyZUNvb2tpZXMsIFNob3VsZEFza0lUUCBzaG91bGRBc2tJVFApIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGNvb2tpZXNGb3JTZXNzaW9uKCp0aGlzLCBmaXJzdFBhcnR5LCB1cmwsIHNhbWVTaXRl
SW5mbywgZnJhbWVJRCwgcGFnZUlELCBmYWxzZSwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOworICAg
IHJldHVybiBjb29raWVzRm9yU2Vzc2lvbigqdGhpcywgZmlyc3RQYXJ0eSwgdXJsLCBzYW1lU2l0
ZUluZm8sIGZyYW1lSUQsIHBhZ2VJRCwgZmFsc2UsIGluY2x1ZGVTZWN1cmVDb29raWVzLCBzaG91
bGRBc2tJVFApOwogfQogCi1zdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNl
c3Npb246OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IFVSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBPcHRp
b25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBw
YWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzLCBTaG91bGRB
c2tJVFApIGNvbnN0CitzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwg
Y29uc3QgU2FtZVNpdGVJbmZvJiBzYW1lU2l0ZUluZm8sIGNvbnN0IFVSTCYgdXJsLCBPcHRpb25h
bDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdl
SUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzLCBTaG91bGRBc2tJ
VFAgc2hvdWxkQXNrSVRQKSBjb25zdAogewogICAgIC8vIFNlY3VyZSBjb29raWVzIHdpbGwgc3Rp
bGwgb25seSBiZSBpbmNsdWRlZCBpZiB1cmwncyBwcm90b2NvbCBpcyBodHRwcy4KLSAgICByZXR1
cm4gY29va2llc0ZvclNlc3Npb24oKnRoaXMsIGZpcnN0UGFydHksIHVybCwgc2FtZVNpdGVJbmZv
LCBmcmFtZUlELCBwYWdlSUQsIHRydWUsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKKyAgICByZXR1
cm4gY29va2llc0ZvclNlc3Npb24oKnRoaXMsIGZpcnN0UGFydHksIHVybCwgc2FtZVNpdGVJbmZv
LCBmcmFtZUlELCBwYWdlSUQsIHRydWUsIGluY2x1ZGVTZWN1cmVDb29raWVzLCBzaG91bGRBc2tJ
VFApOwogfQogCiBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IENvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFByb3h5JiBoZWFkZXJGaWVsZFByb3h5KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAwOTU1ODUyN2Ex
NTIuLjJmYzNkNDAxNjU0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAyMC0wNC0xNCAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dU
S11bV1BFXSBFbmFibGUgcmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxODQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtE
YXRhVGFzay5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlKTog
UGFzcyBwYWdlIGFuZCBmcmFtZSBpZGVudGlmaWVycyB0byB0aGUgY29uc3RydWN0b3IuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6aXNUaGlyZFBhcnR5UmVxdWVzdCBjb25zdCk6
IE1vdmVkIGZyb20gTmV0d29ya0RhdGFUYXNrQ29jb2EubW0uCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtEYXRhVGFzazo6cmVzdHJpY3RSZXF1ZXN0UmVmZXJyZXJUb09yaWdpbklmTmVlZGVkKTog
RGl0dG8uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmg6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaDoKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpOZXR3b3JrRGF0YVRhc2tTb3VwKTogSW5p
dGlhbGl6ZSBtX2ZyYW1lSUQgYW5kIG1fcGFnZUlELgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
RGF0YVRhc2tTb3VwOjpjcmVhdGVSZXF1ZXN0KTogQWRkIFdhc0Jsb2NraW5nQ29va2llcyBwYXJh
bWV0ZXIuIENhbGwKKyAgICAgICAgcmVzdHJpY3RSZXF1ZXN0UmVmZXJyZXJUb09yaWdpbklmTmVl
ZGVkKCkgYW5kIGRpc2FibGUgY29va2llcyBpbiB0aGUgc291cCBtZXNzYWdlIGlmIGNvb2tpZXMg
c2hvdWxkIGJlIGJsb2NrZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6
OmNsZWFyUmVxdWVzdCk6IFJlc2V0IG1faXNCbG9ja2luZ0Nvb2tpZXMuCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmNvbnRpbnVlSFRUUFJlZGlyZWN0aW9uKTogUGFzcyBX
YXNCbG9ja2luZ0Nvb2tpZXMgdG8gY3JlYXRlUmVxdWVzdCgpLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS1BhZ2UuY3BwOgorICAgICAgICAoV0tQYWdlTG9hZGVkVGhpcmRQYXJ0eURvbWFpbnMp
OiBBZGRlZCBmb3IgdGVzdHMuCisgICAgICAgIChXS1BhZ2VDbGVhckxvYWRlZFRoaXJkUGFydHlE
b21haW5zKTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZVByaXZhdGUu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ2xpYi9XZWJzaXRlRGF0YVN0b3JlR0xpYi5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5KTogVXNlIGxvd2VyY2FzZSBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhl
cgorICAgICAgICBkZWZhdWx0IGRpcmVjdG9yaWVzLgorCiAyMDIwLTA0LTE0ICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBCcmluZyBi
YWNrIHN1cHBvcnQgZm9yIHJlbmRlcmluZyBzY3JvbGxiYXJzIHVzaW5nIHRoZSBzeXN0ZW0gYXBw
ZWFyYW5jZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
RGF0YVRhc2suY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRh
c2suY3BwCmluZGV4IDk1MjM3NjZkMjNkZS4uZGJjZmNlNTc0OWExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCkBAIC0zMCw3ICszMCw5
IEBACiAjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrQmxvYi5oIgogI2luY2x1ZGUgIk5ldHdvcmtM
b2FkUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VF
cnJvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KIApA
QCAtNTQsNyArNTYsNyBAQCBSZWY8TmV0d29ya0RhdGFUYXNrPiBOZXR3b3JrRGF0YVRhc2s6OmNy
ZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdAogICAgIHJldHVybiBOZXR3
b3JrRGF0YVRhc2tDb2NvYTo6Y3JlYXRlKHNlc3Npb24sIGNsaWVudCwgcGFyYW1ldGVycy5yZXF1
ZXN0LCBwYXJhbWV0ZXJzLndlYkZyYW1lSUQsIHBhcmFtZXRlcnMud2ViUGFnZUlELCBwYXJhbWV0
ZXJzLnN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBwYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1Bv
bGljeSwgcGFyYW1ldGVycy5jb250ZW50RW5jb2RpbmdTbmlmZmluZ1BvbGljeSwgcGFyYW1ldGVy
cy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0LCBwYXJhbWV0ZXJzLnNo
b3VsZFByZWNvbm5lY3RPbmx5LCBwYXJhbWV0ZXJzLmlzTWFpbkZyYW1lTmF2aWdhdGlvbiwgcGFy
YW1ldGVycy5pc01haW5SZXNvdXJjZU5hdmlnYXRpb25Gb3JBbnlGcmFtZSwgcGFyYW1ldGVycy5u
ZXR3b3JrQWN0aXZpdHlUcmFja2VyLCBwYXJhbWV0ZXJzLmlzTmF2aWdhdGluZ1RvQXBwQm91bmRE
b21haW4pOwogI2VuZGlmCiAjaWYgVVNFKFNPVVApCi0gICAgcmV0dXJuIE5ldHdvcmtEYXRhVGFz
a1NvdXA6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHBhcmFtZXRlcnMucmVxdWVzdCwgcGFyYW1l
dGVycy5zdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgcGFyYW1ldGVycy5jb250ZW50U25pZmZpbmdQ
b2xpY3ksIHBhcmFtZXRlcnMuY29udGVudEVuY29kaW5nU25pZmZpbmdQb2xpY3ksIHBhcmFtZXRl
cnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCwgcGFyYW1ldGVycy5p
c01haW5GcmFtZU5hdmlnYXRpb24pOworICAgIHJldHVybiBOZXR3b3JrRGF0YVRhc2tTb3VwOjpj
cmVhdGUoc2Vzc2lvbiwgY2xpZW50LCBwYXJhbWV0ZXJzLnJlcXVlc3QsIHBhcmFtZXRlcnMud2Vi
RnJhbWVJRCwgcGFyYW1ldGVycy53ZWJQYWdlSUQsIHBhcmFtZXRlcnMuc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3ksIHBhcmFtZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5LCBwYXJhbWV0ZXJzLmNv
bnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5LCBwYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJy
ZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIHBhcmFtZXRlcnMuaXNNYWluRnJhbWVOYXZpZ2F0aW9u
KTsKICNlbmRpZgogI2lmIFVTRShDVVJMKQogICAgIHJldHVybiBOZXR3b3JrRGF0YVRhc2tDdXJs
OjpjcmVhdGUoc2Vzc2lvbiwgY2xpZW50LCBwYXJhbWV0ZXJzLnJlcXVlc3QsIHBhcmFtZXRlcnMu
c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIHBhcmFtZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5
LCBwYXJhbWV0ZXJzLmNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5LCBwYXJhbWV0ZXJzLnNo
b3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIHBhcmFtZXRlcnMuaXNNYWlu
RnJhbWVOYXZpZ2F0aW9uKTsKQEAgLTE2OSw0ICsxNzEsMTUgQEAgTmV0d29ya1Nlc3Npb24qIE5l
dHdvcmtEYXRhVGFzazo6bmV0d29ya1Nlc3Npb24oKQogICAgIHJldHVybiBtX3Nlc3Npb24uZ2V0
KCk7CiB9CiAKK2Jvb2wgTmV0d29ya0RhdGFUYXNrOjppc1RoaXJkUGFydHlSZXF1ZXN0KGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkgY29uc3QKK3sKKyAgICByZXR1cm4g
IVdlYkNvcmU6OmFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKHJlcXVlc3QudXJsKCksIHJlcXVl
c3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpy
ZXN0cmljdFJlcXVlc3RSZWZlcnJlclRvT3JpZ2luSWZOZWVkZWQoV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGlmICgobV9zZXNzaW9uLT5zZXNzaW9uSUQoKS5pc0Vw
aGVtZXJhbCgpIHx8IG1fc2Vzc2lvbi0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgp
KSAmJiBtX3Nlc3Npb24tPnNob3VsZERvd25ncmFkZVJlZmVycmVyKCkgJiYgaXNUaGlyZFBhcnR5
UmVxdWVzdChyZXF1ZXN0KSkKKyAgICAgICAgcmVxdWVzdC5zZXRFeGlzdGluZ0hUVFBSZWZlcnJl
clRvT3JpZ2luU3RyaW5nKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKaW5kZXggZjViNDAyOWIz
MWVlLi40MzhmNjc1MDljZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0RhdGFUYXNrLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrRGF0YVRhc2suaApAQCAtMTQ4LDYgKzE0OCw5IEBAIHByb3RlY3RlZDoKICAgICB2b2lk
IGZhaWx1cmVUaW1lckZpcmVkKCk7CiAgICAgdm9pZCBzY2hlZHVsZUZhaWx1cmUoRmFpbHVyZVR5
cGUpOwogCisgICAgYm9vbCBpc1RoaXJkUGFydHlSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYpIGNvbnN0OworICAgIHZvaWQgcmVzdHJpY3RSZXF1ZXN0UmVmZXJyZXJUb09y
aWdpbklmTmVlZGVkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworCiAgICAgRmFpbHVyZVR5
cGUgbV9zY2hlZHVsZWRGYWlsdXJlVHlwZSB7IE5vRmFpbHVyZSB9OwogICAgIFdlYkNvcmU6OlRp
bWVyIG1fZmFpbHVyZVRpbWVyOwogICAgIFdlYWtQdHI8TmV0d29ya1Nlc3Npb24+IG1fc2Vzc2lv
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a0RhdGFUYXNrQ29jb2EuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0
d29ya0RhdGFUYXNrQ29jb2EuaAppbmRleCA3Yzk1OTU2MjFiM2IuLmYyYThmZDBhNmU0YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRh
c2tDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a0RhdGFUYXNrQ29jb2EuaApAQCAtODEsMTUgKzgxLDEyIEBAIHByaXZhdGU6CiAgICAgYm9vbCB0
cnlQYXNzd29yZEJhc2VkQXV0aGVudGljYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmLCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYpOwogICAgIHZvaWQgYXBw
bHlTbmlmZmluZ1BvbGljaWVzQW5kQmluZFJlcXVlc3RUb0luZmVyZmFjZUlmTmVlZGVkKF9fc3Ry
b25nIE5TVVJMUmVxdWVzdComLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRD
b250ZW50RW5jb2RpbmdTbmlmZik7CiAKLSAgICB2b2lkIHJlc3RyaWN0UmVxdWVzdFJlZmVycmVy
VG9PcmlnaW5JZk5lZWRlZChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKLQogI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgc3RhdGljIE5TSFRUUENvb2tpZVN0b3Jh
Z2UgKnN0YXRlbGVzc0Nvb2tpZVN0b3JhZ2UoKTsKICAgICB2b2lkIGJsb2NrQ29va2llcygpOwog
ICAgIHZvaWQgdW5ibG9ja0Nvb2tpZXMoKTsKICAgICBib29sIG5lZWRzRmlyc3RQYXJ0eUNvb2tp
ZUJsb2NraW5nTGF0Y2hNb2RlUXVpcmsoY29uc3QgVVJMJiBmaXJzdFBhcnR5VVJMLCBjb25zdCBV
UkwmIHJlcXVlc3RVUkwsIGNvbnN0IFVSTCYgcmVkaXJlY3RpbmdVUkwpIGNvbnN0OwogI2VuZGlm
Ci0gICAgYm9vbCBpc1RoaXJkUGFydHlSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYpIGNvbnN0OwogICAgIGJvb2wgaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCkgY29uc3Q7
CiAKICAgICBXZWFrUHRyPFNlc3Npb25XcmFwcGVyPiBtX3Nlc3Npb25XcmFwcGVyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tD
b2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFU
YXNrQ29jb2EubW0KaW5kZXggMGM4ODA1NjNkZmQyLi42MjNhMWFkY2VjMGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2Eu
bW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRh
c2tDb2NvYS5tbQpAQCAtMzgsNyArMzgsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50aWNh
dGlvbkNoYWxsZW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aD4KICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
UmVnaXN0cmFibGVEb21haW4uaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+
CiAjaW1wb3J0IDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgogI2ltcG9ydCA8d3RmL0Jsb2Nr
UHRyLmg+CkBAIC0xNzgsMTEgKzE3Nyw2IEBAIGJvb2wgTmV0d29ya0RhdGFUYXNrQ29jb2E6Om5l
ZWRzRmlyc3RQYXJ0eUNvb2tpZUJsb2NraW5nTGF0Y2hNb2RlUXVpcmsoY29uc3QgVVJMCiB9CiAj
ZW5kaWYKIAotYm9vbCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6aXNUaGlyZFBhcnR5UmVxdWVzdChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICFXZWJDb3JlOjphcmVSZWdpc3RyYWJsZURvbWFpbnNFcXVhbChyZXF1ZXN0LnVybCgpLCBy
ZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotfQotCiBzdGF0aWMgdm9pZCB1cGRhdGVU
YXNrV2l0aEZpcnN0UGFydHlGb3JTYW1lU2l0ZUNvb2tpZXMoTlNVUkxTZXNzaW9uRGF0YVRhc2sq
IHRhc2ssIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBp
ZiAocmVxdWVzdC5pc1NhbWVTaXRlVW5zcGVjaWZpZWQoKSkKQEAgLTMwMSwxMiArMjk1LDYgQEAg
TmV0d29ya0RhdGFUYXNrQ29jb2E6On5OZXR3b3JrRGF0YVRhc2tDb2NvYSgpCiAgICAgbV9zZXNz
aW9uV3JhcHBlci0+ZGF0YVRhc2tNYXAucmVtb3ZlKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKTsK
IH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6cmVzdHJpY3RSZXF1ZXN0UmVmZXJyZXJU
b09yaWdpbklmTmVlZGVkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAg
ICBpZiAoKG1fc2Vzc2lvbi0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSB8fCBtX3Nlc3Npb24t
PmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSkgJiYgbV9zZXNzaW9uLT5zaG91bGRE
b3duZ3JhZGVSZWZlcnJlcigpICYmIGlzVGhpcmRQYXJ0eVJlcXVlc3QocmVxdWVzdCkpCi0gICAg
ICAgIHJlcXVlc3Quc2V0RXhpc3RpbmdIVFRQUmVmZXJyZXJUb09yaWdpblN0cmluZygpOwotfQot
CiB2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjpkaWRTZW5kRGF0YSh1aW50NjRfdCB0b3RhbEJ5
dGVzU2VudCwgdWludDY0X3QgdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kKQogewogICAgIFdURkVt
aXRTaWducG9zdChtX3Rhc2suZ2V0KCksICJEYXRhVGFzayIsICJzZW50ICVsbHUgYnl0ZXMgKGV4
cGVjdGVkICVsbHUgYnl0ZXMpIiwgdG90YWxCeXRlc1NlbnQsIHRvdGFsQnl0ZXNFeHBlY3RlZFRv
U2VuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya0RhdGFUYXNrU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAv
TmV0d29ya0RhdGFUYXNrU291cC5jcHAKaW5kZXggMWRlNWFkOTBmNDM0Li5mZTFiNjNlNzhmNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0
YVRhc2tTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya0RhdGFUYXNrU291cC5jcHAKQEAgLTUwLDggKzUwLDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUgPSA4
MTkyOwogCi1OZXR3b3JrRGF0YVRhc2tTb3VwOjpOZXR3b3JrRGF0YVRhc2tTb3VwKE5ldHdvcmtT
ZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0V2l0aENyZWRlbnRpYWxzLCBTdG9yZWRDcmVkZW50aWFsc1Bv
bGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgQ29udGVudFNuaWZmaW5nUG9saWN5IHNob3Vs
ZENvbnRlbnRTbmlmZiwgV2ViQ29yZTo6Q29udGVudEVuY29kaW5nU25pZmZpbmdQb2xpY3ksIGJv
b2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCwgYm9vbCBkYXRhVGFz
a0lzRm9yTWFpbkZyYW1lTmF2aWdhdGlvbikKK05ldHdvcmtEYXRhVGFza1NvdXA6Ok5ldHdvcmtE
YXRhVGFza1NvdXAoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVu
dCYgY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMs
IEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBQYWdlSWRlbnRpZmllciBwYWdlSUQsIFN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBDb250ZW50U25pZmZpbmdQ
b2xpY3kgc2hvdWxkQ29udGVudFNuaWZmLCBXZWJDb3JlOjpDb250ZW50RW5jb2RpbmdTbmlmZmlu
Z1BvbGljeSwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0LCBi
b29sIGRhdGFUYXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uKQogICAgIDogTmV0d29ya0RhdGFU
YXNrKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdFdpdGhDcmVkZW50aWFscywgc3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3ksIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIGRh
dGFUYXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uKQorICAgICwgbV9mcmFtZUlEKGZyYW1lSUQp
CisgICAgLCBtX3BhZ2VJRChwYWdlSUQpCiAgICAgLCBtX3Nob3VsZENvbnRlbnRTbmlmZihzaG91
bGRDb250ZW50U25pZmYpCiAgICAgLCBtX3RpbWVvdXRTb3VyY2UoUnVuTG9vcDo6bWFpbigpLCB0
aGlzLCAmTmV0d29ya0RhdGFUYXNrU291cDo6dGltZW91dEZpcmVkKQogewpAQCAtNzUsNyArNzcs
NyBAQCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpOZXR3b3JrRGF0YVRhc2tTb3VwKE5ldHdvcmtTZXNz
aW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhcwogICAgICAgICB9CiAgICAgICAgIGFwcGx5QXV0
aGVudGljYXRpb25Ub1JlcXVlc3QocmVxdWVzdCk7CiAgICAgfQotICAgIGNyZWF0ZVJlcXVlc3Qo
V1RGTW92ZShyZXF1ZXN0KSk7CisgICAgY3JlYXRlUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpLCBX
YXNCbG9ja2luZ0Nvb2tpZXM6Ok5vKTsKIH0KIAogTmV0d29ya0RhdGFUYXNrU291cDo6fk5ldHdv
cmtEYXRhVGFza1NvdXAoKQpAQCAtMTAzLDcgKzEwNSw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNr
U291cDo6c2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwg
U2FuCiAgICAgbV9hbGxvd092ZXJ3cml0ZURvd25sb2FkID0gYWxsb3dPdmVyd3JpdGU7CiB9CiAK
LXZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y3JlYXRlUmVxdWVzdChSZXNvdXJjZVJlcXVlc3Qm
JiByZXF1ZXN0KQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjcmVhdGVSZXF1ZXN0KFJlc291
cmNlUmVxdWVzdCYmIHJlcXVlc3QsIFdhc0Jsb2NraW5nQ29va2llcyB3YXNCbG9ja2luZ0Nvb2tp
ZXMpCiB7CiAgICAgbV9jdXJyZW50UmVxdWVzdCA9IFdURk1vdmUocmVxdWVzdCk7CiAKQEAgLTEz
Myw2ICsxMzUsOCBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZVJlcXVlc3QoUmVz
b3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIHJl
c3RyaWN0UmVxdWVzdFJlZmVycmVyVG9PcmlnaW5JZk5lZWRlZChtX2N1cnJlbnRSZXF1ZXN0KTsK
KwogICAgIHVuc2lnbmVkIG1lc3NhZ2VGbGFncyA9IFNPVVBfTUVTU0FHRV9OT19SRURJUkVDVDsK
IAogICAgIG1fY3VycmVudFJlcXVlc3QudXBkYXRlU291cE1lc3NhZ2Uoc291cE1lc3NhZ2UuZ2V0
KCksIG1fc2Vzc2lvbi0+YmxvYlJlZ2lzdHJ5KCkpOwpAQCAtMTQ4LDYgKzE1MiwxNyBAQCB2b2lk
IE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcmVx
dWVzdCkKICNlbmRpZgogICAgIH0KIAorI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJ
Q1MpCisgICAgYm9vbCBzaG91bGRCbG9ja0Nvb2tpZXMgPSB3YXNCbG9ja2luZ0Nvb2tpZXMgPT0g
V2FzQmxvY2tpbmdDb29raWVzOjpZZXMgPyB0cnVlIDogbV9zdG9yZWRDcmVkZW50aWFsc1BvbGlj
eSA9PSBTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzOworICAgIGlm
ICghc2hvdWxkQmxvY2tDb29raWVzKSB7CisgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24gPSBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpKQorICAgICAgICAg
ICAgc2hvdWxkQmxvY2tDb29raWVzID0gbmV0d29ya1N0b3JhZ2VTZXNzaW9uLT5zaG91bGRCbG9j
a0Nvb2tpZXMobV9jdXJyZW50UmVxdWVzdCwgbV9mcmFtZUlELCBtX3BhZ2VJRCk7CisgICAgfQor
ICAgIGlmIChzaG91bGRCbG9ja0Nvb2tpZXMpCisgICAgICAgIHNvdXBfbWVzc2FnZV9kaXNhYmxl
X2ZlYXR1cmUoc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfVFlQRV9DT09LSUVfSkFSKTsKKyAgICBt
X2lzQmxvY2tpbmdDb29raWVzID0gc2hvdWxkQmxvY2tDb29raWVzOworI2VuZGlmCisKICNpZiBT
T1VQX0NIRUNLX1ZFUlNJT04oMiwgNjcsIDEpCiAgICAgaWYgKChtX2N1cnJlbnRSZXF1ZXN0LnVy
bCgpLnByb3RvY29sSXMoImh0dHBzIikgJiYgIXNob3VsZEFsbG93SFNUU1BvbGljeVNldHRpbmco
KSkgfHwgKG1fY3VycmVudFJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiaHR0cCIpICYmICFzaG91
bGRBbGxvd0hTVFNQcm90b2NvbFVwZ3JhZGUoKSkpCiAgICAgICAgIHNvdXBfbWVzc2FnZV9kaXNh
YmxlX2ZlYXR1cmUoc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfVFlQRV9IU1RTX0VORk9SQ0VSKTsK
QEAgLTE5NCw2ICsyMDksNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNsZWFyUmVxdWVz
dCgpCiAgICAgbV9kb3dubG9hZE91dHB1dFN0cmVhbSA9IG51bGxwdHI7CiAgICAgZ19jYW5jZWxs
YWJsZV9jYW5jZWwobV9jYW5jZWxsYWJsZS5nZXQoKSk7CiAgICAgbV9jYW5jZWxsYWJsZSA9IG51
bGxwdHI7CisgICAgbV9pc0Jsb2NraW5nQ29va2llcyA9IGZhbHNlOwogICAgIGlmIChtX3NvdXBN
ZXNzYWdlKSB7CiAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZCht
X3NvdXBNZXNzYWdlLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBu
dWxscHRyLCB0aGlzKTsKICAgICAgICAgaWYgKG1fc2Vzc2lvbikKQEAgLTcwMywxMCArNzE5LDEy
IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y29udGludWVIVFRQUmVkaXJlY3Rpb24oKQog
ICAgICAgICB9CiAgICAgfQogCisgICAgYXV0byB3YXNCbG9ja2luZ0Nvb2tpZXMgPSBtX2lzQmxv
Y2tpbmdDb29raWVzID8gV2FzQmxvY2tpbmdDb29raWVzOjpZZXMgOiBXYXNCbG9ja2luZ0Nvb2tp
ZXM6Ok5vOworCiAgICAgY2xlYXJSZXF1ZXN0KCk7CiAKICAgICBhdXRvIHJlc3BvbnNlID0gUmVz
b3VyY2VSZXNwb25zZShtX3Jlc3BvbnNlKTsKLSAgICBtX2NsaWVudC0+d2lsbFBlcmZvcm1IVFRQ
UmVkaXJlY3Rpb24oV1RGTW92ZShyZXNwb25zZSksIFdURk1vdmUocmVxdWVzdCksIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlzQ3Jvc3NPcmlnaW5dKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCkgeworICAgIG1fY2xpZW50LT53aWxsUGVyZm9ybUhUVFBS
ZWRpcmVjdGlvbihXVEZNb3ZlKHJlc3BvbnNlKSwgV1RGTW92ZShyZXF1ZXN0KSwgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaXNDcm9zc09yaWdpbiwgd2FzQmxvY2tpbmdD
b29raWVzXShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QpIHsKICAgICAgICAgaWYg
KG5ld1JlcXVlc3QuaXNOdWxsKCkgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nKQogICAg
ICAgICAgICAgcmV0dXJuOwogCkBAIC03MTksNyArNzM3LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRh
c2tTb3VwOjpjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpCiAKICAgICAgICAgICAgIGFwcGx5QXV0
aGVudGljYXRpb25Ub1JlcXVlc3QocmVxdWVzdCk7CiAgICAgICAgIH0KLSAgICAgICAgY3JlYXRl
UmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsKKyAgICAgICAgY3JlYXRlUmVxdWVzdChXVEZNb3Zl
KHJlcXVlc3QpLCB3YXNCbG9ja2luZ0Nvb2tpZXMpOwogICAgICAgICBpZiAobV9zb3VwUmVxdWVz
dCAmJiBtX3N0YXRlICE9IFN0YXRlOjpTdXNwZW5kZWQpIHsKICAgICAgICAgICAgIG1fc3RhdGUg
PSBTdGF0ZTo6U3VzcGVuZGVkOwogICAgICAgICAgICAgcmVzdW1lKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaApp
bmRleCAxYmRlNDJkOTYyOGMuLjc0ZTMxZjM0ZTI0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oCkBAIC0yNiw3
ICsyNiw5IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9O
ZXR3b3JrTG9hZE1ldHJpY3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VJZGVudGlmaWVyLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm90ZWN0aW9uU3BhY2UuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlUmVzcG9uc2UuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgpAQCAtMzYsMTUg
KzM4LDE1IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBOZXR3b3JrRGF0YVRhc2tTb3Vw
IGZpbmFsIDogcHVibGljIE5ldHdvcmtEYXRhVGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxOZXR3b3JrRGF0YVRhc2s+IGNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29y
a0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3ksIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25p
ZmYsIFdlYkNvcmU6OkNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRF
bmNvZGluZ1NuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJl
Y3QsIGJvb2wgZGF0YVRhc2tJc0Zvck1haW5GcmFtZU5hdmlnYXRpb24pCisgICAgc3RhdGljIFJl
ZjxOZXR3b3JrRGF0YVRhc2s+IGNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29y
a0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIFdlYkNvcmU6OlBhZ2VJ
ZGVudGlmaWVyIHBhZ2VJRCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRD
b250ZW50U25pZmYsIFdlYkNvcmU6OkNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5IHNob3Vs
ZENvbnRlbnRFbmNvZGluZ1NuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9I
VFRQUmVkaXJlY3QsIGJvb2wgZGF0YVRhc2tJc0Zvck1haW5GcmFtZU5hdmlnYXRpb24pCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrRGF0YVRhc2tTb3VwKHNlc3Np
b24sIGNsaWVudCwgcmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIHNob3VsZENvbnRl
bnRTbmlmZiwgc2hvdWxkQ29udGVudEVuY29kaW5nU25pZmYsIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QsIGRhdGFUYXNrSXNGb3JNYWluRnJhbWVOYXZpZ2F0aW9uKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtEYXRhVGFza1NvdXAoc2Vzc2lv
biwgY2xpZW50LCByZXF1ZXN0LCBmcmFtZUlELCBwYWdlSUQsIHN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5LCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENvbnRlbnRFbmNvZGluZ1NuaWZmLCBzaG91
bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0LCBkYXRhVGFza0lzRm9yTWFpbkZy
YW1lTmF2aWdhdGlvbikpOwogICAgIH0KIAogICAgIH5OZXR3b3JrRGF0YVRhc2tTb3VwKCk7CiAK
IHByaXZhdGU6Ci0gICAgTmV0d29ya0RhdGFUYXNrU291cChOZXR3b3JrU2Vzc2lvbiYsIE5ldHdv
cmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNv
cmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xp
Y3ksIFdlYkNvcmU6OkNvbnRlbnRFbmNvZGluZ1NuaWZmaW5nUG9saWN5LCBib29sIHNob3VsZENs
ZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIGJvb2wgZGF0YVRhc2tJc0Zvck1haW5G
cmFtZU5hdmlnYXRpb24pOworICAgIE5ldHdvcmtEYXRhVGFza1NvdXAoTmV0d29ya1Nlc3Npb24m
LCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
LCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBXZWJD
b3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9s
aWN5LCBXZWJDb3JlOjpDb250ZW50RW5jb2RpbmdTbmlmZmluZ1BvbGljeSwgYm9vbCBzaG91bGRD
bGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0LCBib29sIGRhdGFUYXNrSXNGb3JNYWlu
RnJhbWVOYXZpZ2F0aW9uKTsKIAogICAgIHZvaWQgY2FuY2VsKCkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCByZXN1bWUoKSBvdmVycmlkZTsKQEAgLTU4LDcgKzYwLDggQEAgcHJpdmF0ZToKICAgICB2b2lk
IHN0YXJ0VGltZW91dCgpOwogICAgIHZvaWQgc3RvcFRpbWVvdXQoKTsKIAotICAgIHZvaWQgY3Jl
YXRlUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik7CisgICAgZW51bSBjbGFzcyBX
YXNCbG9ja2luZ0Nvb2tpZXMgeyBObywgWWVzIH07CisgICAgdm9pZCBjcmVhdGVSZXF1ZXN0KFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBXYXNCbG9ja2luZ0Nvb2tpZXMpOwogICAgIHZvaWQg
Y2xlYXJSZXF1ZXN0KCk7CiAgICAgc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhTb3Vw
UmVxdWVzdCosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKICAgICB2b2lk
IGRpZFNlbmRSZXF1ZXN0KEdSZWZQdHI8R0lucHV0U3RyZWFtPiYmKTsKQEAgLTEyMiw2ICsxMjUs
OCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHJlc3RhcnRlZENhbGxiYWNrKFNvdXBNZXNz
YWdlKiwgTmV0d29ya0RhdGFUYXNrU291cCopOwogICAgIHZvaWQgZGlkUmVzdGFydCgpOwogCisg
ICAgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIG1fZnJhbWVJRDsKKyAgICBXZWJDb3JlOjpQYWdl
SWRlbnRpZmllciBtX3BhZ2VJRDsKICAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OlN1c3BlbmRl
ZCB9OwogICAgIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBtX3Nob3VsZENvbnRlbnRT
bmlmZjsKICAgICBHUmVmUHRyPFNvdXBSZXF1ZXN0PiBtX3NvdXBSZXF1ZXN0OwpAQCAtMTQzLDYg
KzE0OCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2FsbG93T3ZlcndyaXRlRG93bmxvYWQgeyBm
YWxzZSB9OwogICAgIFdlYkNvcmU6Ok5ldHdvcmtMb2FkTWV0cmljcyBtX25ldHdvcmtMb2FkTWV0
cmljczsKICAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnRUaW1lOworICAgIGJvb2wgbV9pc0Jsb2Nr
aW5nQ29va2llcyB7IGZhbHNlIH07CiAgICAgUnVuTG9vcDo6VGltZXI8TmV0d29ya0RhdGFUYXNr
U291cD4gbV90aW1lb3V0U291cmNlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLUGFnZS5jcHAKaW5kZXggMDljZmFjOTFkYThhLi5iNjhlNjQ2Yzc4ZGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcApAQCAtMjk3MCwzICsyOTcwLDI3IEBAIFdL
X0VYUE9SVCBib29sIFdLUGFnZUlzTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJFbmFibGVk
KFdLUGFnZVJlZikKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIH0KKwordm9pZCBXS1BhZ2VM
b2FkZWRUaGlyZFBhcnR5RG9tYWlucyhXS1BhZ2VSZWYgcGFnZSwgV0tQYWdlTG9hZGVkVGhpcmRQ
YXJ0eURvbWFpbnNGdW5jdGlvbiBjYWxsYmFjaywgdm9pZCogY2FsbGJhY2tDb250ZXh0KQorewor
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisgICAgdG9JbXBsKHBhZ2UpLT5s
b2FkZWRUaGlyZFBhcnR5RG9tYWlucyhbY2FsbGJhY2tDb250ZXh0LCBjYWxsYmFja10oVmVjdG9y
PFJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpIHsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxB
UEk6Ok9iamVjdD4+IGFwaURvbWFpbnMgPSBXVEY6Om1hcChkb21haW5zLCBbXShhdXRvJiBkb21h
aW4pIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8QVBJOjpPYmplY3Q+KEFQSTo6U3RyaW5n
OjpjcmVhdGUoV1RGTW92ZShkb21haW4uc3RyaW5nKCkpKSk7CisgICAgICAgIH0pOworICAgICAg
ICBjYWxsYmFjayh0b0FQSShBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShhcGlEb21haW5zKSku
cHRyKCkpLCBjYWxsYmFja0NvbnRleHQpOworICAgIH0pOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0ocGFnZSk7CisgICAgY2FsbGJhY2sobnVsbHB0ciwgY2FsbGJhY2tDb250ZXh0KTsKKyNlbmRp
ZgorfQorCit2b2lkIFdLUGFnZUNsZWFyTG9hZGVkVGhpcmRQYXJ0eURvbWFpbnMoV0tQYWdlUmVm
IHBhZ2UpCit7CisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKyAgICB0b0lt
cGwocGFnZSktPmNsZWFyTG9hZGVkVGhpcmRQYXJ0eURvbWFpbnMoKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHBhZ2UpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS1BhZ2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS1BhZ2VQcml2YXRlLmgKaW5kZXggMGU2MmY2MTdmMjk1Li4yZDBjZTNiZmRkOGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZVByaXZhdGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VQcml2YXRlLmgKQEAgLTE5
NCw2ICsxOTQsMTAgQEAgV0tfRVhQT1JUIHZvaWQgV0tQYWdlTWFya0FkQ2xpY2tBdHRyaWJ1dGlv
bnNBc0V4cGlyZWRGb3JUZXN0aW5nKFdLUGFnZVJlZiBwYWdlLAogV0tfRVhQT1JUIHZvaWQgV0tQ
YWdlU2V0TW9ja0NhbWVyYU9yaWVudGF0aW9uKFdLUGFnZVJlZiBwYWdlLCB1aW50NjRfdCBvcmll
bnRhdGlvbik7CiBXS19FWFBPUlQgYm9vbCBXS1BhZ2VJc01vY2tSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyRW5hYmxlZChXS1BhZ2VSZWYgcGFnZSk7CiAKK3R5cGVkZWYgdm9pZCAoKldLUGFnZUxv
YWRlZFRoaXJkUGFydHlEb21haW5zRnVuY3Rpb24pKFdLQXJyYXlSZWYgZG9tYWlucywgdm9pZCog
ZnVuY3Rpb25Db250ZXh0KTsKK1dLX0VYUE9SVCB2b2lkIFdLUGFnZUxvYWRlZFRoaXJkUGFydHlE
b21haW5zKFdLUGFnZVJlZiBwYWdlLCBXS1BhZ2VMb2FkZWRUaGlyZFBhcnR5RG9tYWluc0Z1bmN0
aW9uIGNhbGxiYWNrLCB2b2lkKiBjYWxsYmFja0NvbnRleHQpOworV0tfRVhQT1JUIHZvaWQgV0tQ
YWdlQ2xlYXJMb2FkZWRUaGlyZFBhcnR5RG9tYWlucyhXS1BhZ2VSZWYgcGFnZSk7CisKICNpZmRl
ZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9nbGliL1dlYnNpdGVEYXRhU3RvcmVHTGliLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2dsaWIvV2Vic2l0ZURhdGFTdG9yZUdMaWIuY3BwCmluZGV4IGUzMzE2MTY3ZDY0Mi4uOGVh
OGVhMmYzMWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYnNp
dGVEYXRhU3RvcmVHTGliLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dl
YnNpdGVEYXRhU3RvcmVHTGliLmNwcApAQCAtOTEsNyArOTEsNyBAQCBXVEY6OlN0cmluZyBXZWJz
aXRlRGF0YVN0b3JlOjpkZWZhdWx0SFNUU0RpcmVjdG9yeSgpCiAKIFdURjo6U3RyaW5nIFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCkKIHsK
LSAgICByZXR1cm4gd2Vic2l0ZURhdGFEaXJlY3RvcnlGaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
QkFTRV9ESVJFQ1RPUlkgR19ESVJfU0VQQVJBVE9SX1MgIlJlc291cmNlTG9hZFN0YXRpc3RpY3Mi
KTsKKyAgICByZXR1cm4gd2Vic2l0ZURhdGFEaXJlY3RvcnlGaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24oQkFTRV9ESVJFQ1RPUlkgR19ESVJfU0VQQVJBVE9SX1MgInJlc291cmNlbG9hZHN0YXRpc3Rp
Y3MiKTsKIH0KIAogV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6Y2FjaGVEaXJlY3RvcnlG
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgV1RGOjpTdHJpbmcmIGRpcmVjdG9yeU5hbWUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZSBiL1NvdXJjZS9jbWFr
ZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IGZhNjhmNzg0OWQ5NS4uYzY0OGE0OGViOTA2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2Uv
T3B0aW9uc0dUSy5jbWFrZQpAQCAtMTg1LDYgKzE4NSw3IEBAIFdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJfUlRDIFBSSVZBVEUgJHtFTkFCTEVfRVhQRVJJTUVOVEFM
X0ZFCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX1BBSU5USU5H
X0FQSSBQUklWQVRFICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFU30pCiBXRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX1RZUEVEX09NIFBSSVZBVEUgJHtFTkFC
TEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTfSkKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9DU1NfQ09OSUNfR1JBRElFTlRTIFBSSVZBVEUgT04pCitXRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTIFBSSVZB
VEUgT04pCiAKIGluY2x1ZGUoR1N0cmVhbWVyRGVwZW5kZW5jaWVzKQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNt
YWtlCmluZGV4IGU3Y2U3OTk5NzgzNC4uMWEyNmM0ZWNhODUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
Y21ha2UvT3B0aW9uc1dQRS5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFr
ZQpAQCAtNjQsNiArNjQsNyBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfTUhUTUwgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX05PVElGSUNBVElPTlMgUFJJVkFURSBPRkYpCiBXRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfT0ZGU0NSRUVOX0NBTlZBUyBQUklWQVRF
ICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFU30pCitXRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTIFBSSVZBVEUgT04pCiBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU0VSVklDRV9XT1JLRVIgUFJJ
VkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TSEFSRUFC
TEVfUkVTT1VSQ0UgUFVCTElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX1NNT09USF9TQ1JPTExJTkcgUFJJVkFURSBPRkYpCmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTcwYzQ5OWYzZDYyLi5jODYyYmNkNjY0
MGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOSBAQAorMjAyMC0wNC0xNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBFbmFibGUgcmVzb3VyY2UgbG9hZCBz
dGF0aXN0aWNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTAxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnQgVGVzdENvbnRyb2xsZXI6OmxvYWRlZFRoaXJkUGFydHlEb21haW5zKCkgYW5k
IFRlc3RDb250cm9sbGVyOjpjbGVhckxvYWRlZFRoaXJkUGFydHlEb21haW5zKCkgZm9yCisgICAg
ICAgIG5vbi1jb2NvYSBwb3J0cy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpMb2FkZWRUaGlyZFBhcnR5RG9tYWluc0NhbGxi
YWNrQ29udGV4dDo6TG9hZGVkVGhpcmRQYXJ0eURvbWFpbnNDYWxsYmFja0NvbnRleHQpOgorICAg
ICAgICAoV1RSOjpsb2FkZWRUaGlyZFBhcnR5RG9tYWluc0NhbGxiYWNrKToKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OmxvYWRlZFRoaXJkUGFydHlEb21haW5zKToKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OmNsZWFyTG9hZGVkVGhpcmRQYXJ0eURvbWFpbnMpOgorCiAyMDIw
LTA0LTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbR1RLXSBCcmluZyBiYWNrIHN1cHBvcnQgZm9yIHJlbmRlcmluZyBzY3JvbGxiYXJzIHVz
aW5nIHRoZSBzeXN0ZW0gYXBwZWFyYW5jZQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcAppbmRleCAxZDI5ZmFkOWI3MzguLjhmNjhhZDlmNTExMCAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTMxNDAsMTIgKzMxNDAsNDMgQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6Z2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMoKQogewogfQog
CitzdHJ1Y3QgTG9hZGVkVGhpcmRQYXJ0eURvbWFpbnNDYWxsYmFja0NvbnRleHQgeworICAgIGV4
cGxpY2l0IExvYWRlZFRoaXJkUGFydHlEb21haW5zQ2FsbGJhY2tDb250ZXh0KFRlc3RDb250cm9s
bGVyJiBjb250cm9sbGVyKQorICAgICAgICA6IHRlc3RDb250cm9sbGVyKGNvbnRyb2xsZXIpCisg
ICAgeworICAgIH0KKworICAgIFRlc3RDb250cm9sbGVyJiB0ZXN0Q29udHJvbGxlcjsKKyAgICBi
b29sIGRvbmUgeyBmYWxzZSB9OworICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKK307CisKK3N0
YXRpYyB2b2lkIGxvYWRlZFRoaXJkUGFydHlEb21haW5zQ2FsbGJhY2soV0tBcnJheVJlZiBkb21h
aW5zLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBhdXRvKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8
TG9hZGVkVGhpcmRQYXJ0eURvbWFpbnNDYWxsYmFja0NvbnRleHQqPih1c2VyRGF0YSk7CisgICAg
Y29udGV4dC0+ZG9uZSA9IHRydWU7CisKKyAgICBpZiAoZG9tYWlucykgeworICAgICAgICBhdXRv
IHNpemUgPSBXS0FycmF5R2V0U2l6ZShkb21haW5zKTsKKyAgICAgICAgY29udGV4dC0+cmVzdWx0
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4
ID0gMDsgaW5kZXggPCBzaXplOyArK2luZGV4KQorICAgICAgICAgICAgY29udGV4dC0+cmVzdWx0
LnVuY2hlY2tlZEFwcGVuZCh0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tB
cnJheUdldEl0ZW1BdEluZGV4KGRvbWFpbnMsIGluZGV4KSkpKTsKKyAgICB9CisKKyAgICBjb250
ZXh0LT50ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OmxvYWRlZFRoaXJkUGFydHlEb21haW5zKCkKIHsKKyAgICBMb2FkZWRUaGlyZFBhcnR5RG9t
YWluc0NhbGxiYWNrQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKKyAgICBXS1BhZ2VMb2FkZWRUaGly
ZFBhcnR5RG9tYWlucyhtX21haW5XZWJWaWV3LT5wYWdlKCksIGxvYWRlZFRoaXJkUGFydHlEb21h
aW5zQ2FsbGJhY2ssICZjb250ZXh0KTsKKyAgICBydW5VbnRpbChjb250ZXh0LmRvbmUsIG5vVGlt
ZW91dCk7CisgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+ZGlkUmVjZWl2ZUxvYWRlZFRoaXJkUGFy
dHlEb21haW5zKFdURk1vdmUoY29udGV4dC5yZXN1bHQpKTsKIH0KIAogdm9pZCBUZXN0Q29udHJv
bGxlcjo6Y2xlYXJMb2FkZWRUaGlyZFBhcnR5RG9tYWlucygpCiB7CisgICAgV0tQYWdlQ2xlYXJM
b2FkZWRUaGlyZFBhcnR5RG9tYWlucyhtX21haW5XZWJWaWV3LT5wYWdlKCkpOwogfQogCiB2b2lk
IFRlc3RDb250cm9sbGVyOjpnZXRXZWJWaWV3Q2F0ZWdvcnkoKQo=
</data>
<flag name="review"
          id="411804"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
      

    </bug>

</bugzilla>