<?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>14190</bug_id>
          
          <creation_ts>2007-06-16 14:16:25 -0700</creation_ts>
          <short_desc>Breakpoints should persist across launches</short_desc>
          <delta_ts>2010-06-18 10:55:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>40845</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Justin Garcia">justin.garcia</reporter>
          <assigned_to name="Pavel Podivilov">podivilov</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>pfeldman</cc>
    
    <cc>podivilov</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>7353</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2007-06-16 14:16:25 -0700</bug_when>
    <thetext>It would be nice if breakpoints stuck around after restarting Drosera.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80711</commentid>
    <comment_count>1</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-05-17 09:24:13 -0700</bug_when>
    <thetext>Still applies to the new Web Inspector debugger. Moving to that component.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227744</commentid>
    <comment_count>2</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-05-19 01:56:32 -0700</bug_when>
    <thetext>I&apos;ll take it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228289</commentid>
    <comment_count>3</comment_count>
      <attachid>56577</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-05-20 02:50:00 -0700</bug_when>
    <thetext>Created attachment 56577
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228294</commentid>
    <comment_count>4</comment_count>
      <attachid>56578</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-05-20 03:07:41 -0700</bug_when>
    <thetext>Created attachment 56578
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228342</commentid>
    <comment_count>5</comment_count>
      <attachid>56578</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-05-20 05:43:37 -0700</bug_when>
    <thetext>Comment on attachment 56578
Proposed patch.

WebCore/inspector/front-end/BreakpointManager.js:105
 +          for (var line in breakpoints[breakpoint.url]) {
We may want to introduce an utility function for this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228411</commentid>
    <comment_count>6</comment_count>
      <attachid>56578</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-05-20 09:24:44 -0700</bug_when>
    <thetext>Comment on attachment 56578
Proposed patch.

Since this change touches parts of the frontend that diverge in chromium, I&apos;d rather land it manually after extensive testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228799</commentid>
    <comment_count>7</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-05-21 02:00:50 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 56578 [details])
&gt; Since this change touches parts of the frontend that diverge in chromium, I&apos;d rather land it manually after extensive testing.

Pavel discovered some serious issue with this approach. If you set some top-level breakpoint(somewhere in script code which is executed before onload event) on a page, close browser, reopen browser, open Web Inspector and navigate to the page the breakpoints won&apos;t be hit. This happens because breakpoints are restored asynchronously by BreakpointManager in response to parsedScriptSource event and by the time the breakpoints are restored the script has already executed. 

To fix this we need to restore breakpoints synchronously when script is parsed to make sure they are set before script started to execute. This means that it should be done on the backend side and we need to parse settings there.

I&apos;m hesitant about landing this feature while the problem is not fixed. Guys, what do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230502</commentid>
    <comment_count>8</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-05-25 15:31:15 -0700</bug_when>
    <thetext>&gt; To fix this we need to restore breakpoints synchronously when script is parsed to make sure they are set before script started to execute. This means that it should be done on the backend side and we need to parse settings there.
&gt; 

Yeah, I was actually mentioning it to the other Pavel earlier and I didn&apos;t really think it was such a big deal. Here is how I see it:

Scenario 1: Restarting the browser
1.1 User starts browser
1.2 User opens inspector
1.3 He navigates to a page in a non-blocking manner
1.4 In the inspector, chrome-alike notification bar appears suggesting that there are breakpoints in the store that match the site.
1.5 User either accepts or declines breakpoints restore and reloads if that is necessary
1.6 From that moment, our restore-breakpoints-on-reload backend code handles the rest.

Scenario 2: Reopening the inspector
2.1 User re-opens inspector
2.2 We detect that there are matching breakpoints in the store
2.3 We silently restore all of them
2.4 They will hit from now on or on reload

Just make sure both scenarios work and we are good! I do realize that 1.4 might require some UI work, but we should not silently restore breakpoints upon browser restart. One other thing, please file a bug on support for shifts in line numbers (i.e. we should map breakpoints not to source file + line number, but to the content as well so that fuzz=3 worked!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230687</commentid>
    <comment_count>9</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-05-26 06:08:25 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; To fix this we need to restore breakpoints synchronously when script is parsed to make sure they are set before script started to execute. This means that it should be done on the backend side and we need to parse settings there.
&gt; &gt; 
&gt; 
&gt; Yeah, I was actually mentioning it to the other Pavel earlier and I didn&apos;t really think it was such a big deal. Here is how I see it:
&gt; 
&gt; Scenario 1: Restarting the browser
&gt; 1.1 User starts browser
&gt; 1.2 User opens inspector
&gt; 1.3 He navigates to a page in a non-blocking manner
&gt; 1.4 In the inspector, chrome-alike notification bar appears suggesting that there are breakpoints in the store that match the site.
&gt; 1.5 User either accepts or declines breakpoints restore and reloads if that is necessary
&gt; 1.6 From that moment, our restore-breakpoints-on-reload backend code handles the rest.
&gt; 
&gt; Scenario 2: Reopening the inspector
&gt; 2.1 User re-opens inspector
&gt; 2.2 We detect that there are matching breakpoints in the store
&gt; 2.3 We silently restore all of them
&gt; 2.4 They will hit from now on or on reload
&gt; 
There is one more interesting scenario to consider:

Scenario 3: Navigating to another URL
3.1 User starts browser
3.2 User opens inspector
3.3 He navigates to a page in a non-blocking manner
3.4 Breakpoints are restored(with user approval or silently)
3.5 User navigates to a page from a different domain which may be opened in a new render process. 
3.6 At this point we should restore all breakpoints before the page started loading.

3.6 implies that each script should wait until frontend completes restoring all breakpoints(if we have breakpoint restoring managed by the frontend).


&gt; Just make sure both scenarios work and we are good! I do realize that 1.4 might require some UI work, but we should not silently restore breakpoints upon browser restart.

I really don&apos;t like the idea of the annoying notifications on the browser restart. I&apos;d rather silently restore them and add a button &quot;delete all breakpoints&quot;(as  Pavel Podivilov suggested) so that the user has a chance to manually delete all the breakpoints in case he doesn&apos;t need them anymore. This would be less intrusive than showing notification bar on each browser restart after debugging session.


&gt; One other thing, please file a bug on support for shifts in line numbers (i.e. we should map breakpoints not to source file + line number, but to the content as well so that fuzz=3 worked!
Do we really want this sort of behavior? It&apos;s much less obvious from the user stand point. We&apos;d have to somehow let user know why a breakpoint can not be restored in a given script. The feature may not worth complication it&apos;d introduce into the breakpoints code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230709</commentid>
    <comment_count>10</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-05-26 07:45:25 -0700</bug_when>
    <thetext>&gt; 3.5 User navigates to a page from a different domain which may be opened in a new render process. 
&gt; 3.6 At this point we should restore all breakpoints before the page started loading.
&gt; 
&gt; 3.6 implies that each script should wait until frontend completes restoring all breakpoints(if we have breakpoint restoring managed by the frontend).
&gt; 

At first I though I disagree. I&apos;d say load page non blocking, restore breakpoints and let user reload should he need this. Rationale: we should not block since breakpoints restore might be not desired during the navigation. But then I thought that it might be really helpful in debuggin transitions. So I tend to agree with you now. So the solution would be to parse / understand stored breakpoints on the backend side and merge breakpoint restore code with present onload&apos;s restorebreakpoints.

&gt; I really don&apos;t like the idea of the annoying notifications on the browser restart. I&apos;d rather silently restore them and add a button &quot;delete all breakpoints&quot;(as  Pavel Podivilov suggested) so that the user has a chance to manually delete all the breakpoints in case he doesn&apos;t need them anymore. This would be less intrusive than showing notification bar on each browser restart after debugging session.

Not sure I am with you here. I tend to keep browser open while I debug some user scenario. Between the browser sessions, my debug sessions also change, so breakpoints should go away. It is like IDE that is not persisting breakpoints between starts. And I think notification is appropriate here.

&gt; Do we really want this sort of behavior? It&apos;s much less obvious from the user stand point. We&apos;d have to somehow let user know why a breakpoint can not be restored in a given script. The feature may not worth complication it&apos;d introduce into the breakpoints code.

We definitely want that since otherwise any line shift will break all breakpoints. This does not happen in the IDE since IDE shifts breakpoints on edits. But in our case editing is separate from browser, hence it is likely to spoil all the breaks. I don&apos;t think that fuzz is hard to implement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231648</commentid>
    <comment_count>11</comment_count>
      <attachid>57318</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-05-28 05:30:27 -0700</bug_when>
    <thetext>Created attachment 57318
Breakpoints adding/removing logic refactored. 

This is rebased version of original patch with saving to frontend settings stripped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232411</commentid>
    <comment_count>12</comment_count>
      <attachid>57318</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-05-31 09:10:04 -0700</bug_when>
    <thetext>Comment on attachment 57318
Breakpoints adding/removing logic refactored. 

A bunch of renames below. Otherwise looks very good.

WebCore/inspector/front-end/BreakpointManager.js:2
 +   * Copyright (C) 2008 Apple Inc. All Rights Reserved.
Please append Google copyright 2010 string.

WebCore/inspector/front-end/BreakpointManager.js:34
 +          return new WebInspector.Breakpoint(sourceID, sourceURL, line, enabled, condition, this);
Nit: &apos;this&apos; is usually a first parameter in the list.

WebCore/inspector/front-end/BreakpointManager.js:40
 +             return;
Poor indentation

WebCore/inspector/front-end/BreakpointManager.js:55
 +      getBreakpointsBySourceID: function(sourceID) {
Place { on the next line.

WebCore/inspector/front-end/BreakpointManager.js:64
 +      getBreakpointsByURL: function(url) {
Place { on the next line.

WebCore/inspector/front-end/BreakpointManager.js:73
 +      reset: function() {
Place { on the next line.

WebCore/inspector/front-end/BreakpointManager.js:98
 +      this._manager = manager;
this._breakpointManager

WebCore/inspector/front-end/BreakpointManager.js:77
 +      _saveBreakpointToBackend: function(breakpoint)
_setBreakpointOnBackend

WebCore/inspector/front-end/BreakpointManager.js:82
 +      _removeBreakpointFromBackend: function(breakpoint)
_removeBreakpointFromBackend

WebCore/inspector/front-end/BreakpointManager.js:64
 +      getBreakpointsByURL: function(url) {
In WebCore, get is not used, so this one would be breakpointsForURL


WebCore/inspector/front-end/BreakpointManager.js:32
 +      createBreakpoint: function(sourceID, sourceURL, line, enabled, condition)
You always add breakpoints after creation. Consider merging these methods.

WebCore/inspector/front-end/ScriptsPanel.js:346
 +          var breakpoints = WebInspector.breakpointManager.getBreakpointsBySourceID(sourceID);
You only use getBreakpointsBySourceID here. Consider encapsulating the whole routine (removeBreakpointsWithSourceID).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232471</commentid>
    <comment_count>13</comment_count>
      <attachid>57483</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-05-31 11:25:20 -0700</bug_when>
    <thetext>Created attachment 57483
Updated after CR.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232473</commentid>
    <comment_count>14</comment_count>
      <attachid>57484</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-05-31 11:29:24 -0700</bug_when>
    <thetext>Created attachment 57484
Updated after CR.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232492</commentid>
    <comment_count>15</comment_count>
      <attachid>57484</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-05-31 12:18:58 -0700</bug_when>
    <thetext>Comment on attachment 57484
Updated after CR.

I&apos;ll land this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232499</commentid>
    <comment_count>16</comment_count>
      <attachid>57484</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-05-31 12:47:05 -0700</bug_when>
    <thetext>Comment on attachment 57484
Updated after CR.

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/WebCore.gypi
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/inspector/front-end/Breakpoint.js
	A	WebCore/inspector/front-end/BreakpointManager.js
	M	WebCore/inspector/front-end/BreakpointsSidebarPane.js
	M	WebCore/inspector/front-end/Object.js
	M	WebCore/inspector/front-end/ScriptView.js
	M	WebCore/inspector/front-end/ScriptsPanel.js
	M	WebCore/inspector/front-end/SourceFrame.js
	M	WebCore/inspector/front-end/SourceView.js
	M	WebCore/inspector/front-end/WebKit.qrc
	M	WebCore/inspector/front-end/inspector.html
	M	WebCore/inspector/front-end/inspector.js
Committed r60450</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232500</commentid>
    <comment_count>17</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-05-31 12:48:12 -0700</bug_when>
    <thetext>Not closing for now: Preliminary refactoring landed, bug to be fixed with the subsequent patch shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233163</commentid>
    <comment_count>18</comment_count>
      <attachid>56578</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-02 02:27:32 -0700</bug_when>
    <thetext>Comment on attachment 56578
Proposed patch.

Cleared Yury Semikhatsky&apos;s review+ from obsolete attachment 56578 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235810</commentid>
    <comment_count>19</comment_count>
      <attachid>58250</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-09 09:02:28 -0700</bug_when>
    <thetext>Created attachment 58250
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235832</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-09 09:37:38 -0700</bug_when>
    <thetext>Attachment 58250 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3236072</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236394</commentid>
    <comment_count>21</comment_count>
      <attachid>58250</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-10 09:32:41 -0700</bug_when>
    <thetext>Comment on attachment 58250
Proposed patch.

Almost ready to land. Couple of nits below.

WebCore/inspector/InspectorController.cpp:1753
 +      String key = String(breakpointsInspectorSettingPrefix) + m_mainResource-&gt;requestURL();
Please use String::format

WebCore/inspector/InspectorController.cpp:1765
 +          sourceBreakpointsFromInspectorObject(breakpointsForURL, &amp;sourceBreakpoints);
I would declare this as a static method on SourceBreakpoint. No need to add stuff to WebCore namespace.


WebCore/inspector/ScriptBreakpoint.cpp:2
 +   * Copyright (C) 2009 Apple Inc. All rights reserved.
Please use 2010 Google only, Apple has not yet contributed to this file.

WebCore/inspector/front-end/BreakpointManager.js:55
 +          this._saveBreakpointOnBackend(breakpoint);
Please make sure one time breakpoints work after your change and are not persisted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238778</commentid>
    <comment_count>22</comment_count>
      <attachid>58870</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-16 04:05:54 -0700</bug_when>
    <thetext>Created attachment 58870
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238796</commentid>
    <comment_count>23</comment_count>
      <attachid>58878</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-16 04:40:25 -0700</bug_when>
    <thetext>Created attachment 58878
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238828</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-16 06:12:14 -0700</bug_when>
    <thetext>Attachment 58878 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3339196</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238894</commentid>
    <comment_count>25</comment_count>
      <attachid>58878</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-16 08:17:00 -0700</bug_when>
    <thetext>Comment on attachment 58878
Proposed patch.

Looks sane to me. Given that we have no tests for this, please test it manually well. Also might be worth asking Yury to look at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238917</commentid>
    <comment_count>26</comment_count>
      <attachid>58878</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-06-16 09:11:52 -0700</bug_when>
    <thetext>Comment on attachment 58878
Proposed patch.

WebCore/inspector/InspectorController.cpp:1724
 +      loadBreakpoints();
do you really need to load the breakpoints again here?

WebCore/inspector/InspectorController.cpp:1818
 +          SourceBreakpoints&amp; sourceBreakpoints = m_stickyBreakpoints.set(it-&gt;first, SourceBreakpoints()).first-&gt;second;
Please split this line into more readable parts.

Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239429</commentid>
    <comment_count>27</comment_count>
      <attachid>59004</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-17 09:46:56 -0700</bug_when>
    <thetext>Created attachment 59004
Rebase and minor fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239430</commentid>
    <comment_count>28</comment_count>
      <attachid>59005</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-17 09:49:22 -0700</bug_when>
    <thetext>Created attachment 59005
Rebase and minor fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239510</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-17 11:54:53 -0700</bug_when>
    <thetext>Attachment 59005 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3321322</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239609</commentid>
    <comment_count>30</comment_count>
      <attachid>58878</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-17 15:31:15 -0700</bug_when>
    <thetext>Comment on attachment 58878
Proposed patch.

Cleared Pavel Feldman&apos;s review+ from obsolete attachment 58878 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239985</commentid>
    <comment_count>31</comment_count>
      <attachid>59126</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-06-18 09:42:39 -0700</bug_when>
    <thetext>Created attachment 59126
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239990</commentid>
    <comment_count>32</comment_count>
      <attachid>59126</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-06-18 09:52:16 -0700</bug_when>
    <thetext>Comment on attachment 59126
Proposed patch.

Clearing flags on attachment: 59126

Committed r61414: &lt;http://trac.webkit.org/changeset/61414&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239991</commentid>
    <comment_count>33</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-06-18 09:52:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240009</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-18 10:21:19 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/61414 might have broken Qt Linux Release minimal
The following changes are on the blame list:
http://trac.webkit.org/changeset/61416
http://trac.webkit.org/changeset/61414
http://trac.webkit.org/changeset/61415</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240018</commentid>
    <comment_count>35</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-18 10:28:37 -0700</bug_when>
    <thetext>Looks like this was the culprit.   Broke Qt release.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240033</commentid>
    <comment_count>36</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-18 10:54:50 -0700</bug_when>
    <thetext>Looks like it was rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240035</commentid>
    <comment_count>37</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-18 10:55:56 -0700</bug_when>
    <thetext>Sorry, I misread, the build was fixed by https://trac.webkit.org/changeset/61419.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56577</attachid>
            <date>2010-05-20 02:50:00 -0700</date>
            <delta_ts>2010-05-20 03:07:41 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>save.breaks.diff</filename>
            <type>text/plain</type>
            <size>36884</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTgyNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjYgQEAKKzIwMTAtMDUtMjAgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU2F2ZSBicmVha3BvaW50cyBpbiBmcm9udGVuZCBzZXR0aW5ncyBhbmQgcmVzdG9yZSB0
aGVtIGFmdGVyIGJyb3dzZXIgcmVzdGFydC4KKyAgICAgICAgTW92ZSBtb3N0IG9mIGJyZWFrcG9p
bnQgY3JlYXRpb24gYW5kIG1vZGlmaWNhdGlvbiBsb2dpYyBmcm9tIHZpZXdzIHRvIEJyZWFrcG9p
bnRNYW5hZ2VyLmpzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQxOTAKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0Jy
ZWFrcG9pbnQuanM6IFJlbW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVh
a3BvaW50TWFuYWdlci5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dE1hbmFnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3Rv
dHlwZS5jcmVhdGVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5wcm90b3R5cGUuYWRkQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5yZXN0b3JlU2NyaXB0QnJl
YWtwb2ludHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3Rv
dHlwZS5nZXRCcmVha3BvaW50c0J5U291cmNlSUQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5nZXRCcmVha3BvaW50c0J5VVJMKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX3NhdmVCcmVha3BvaW50
VG9TZXR0aW5ncyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJv
dG90eXBlLl9yZW1vdmVCcmVha3BvaW50RnJvbVNldHRpbmdzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX3NhdmVCcmVha3BvaW50VG9CYWNrZW5k
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX3Jl
bW92ZUJyZWFrcG9pbnRGcm9tQmFja2VuZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuZ2V0IGVu
YWJsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLnNldCBl
bmFibGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5nZXQg
c291cmNlVGV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUu
c2V0IHNvdXJjZVRleHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90
eXBlLmdldCBsYWJlbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5
cGUuZ2V0IGlkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5n
ZXQgY29uZGl0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlw
ZS5zZXQgY29uZGl0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9p
bnRzU2lkZWJhclBhbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRl
YmFyUGFuZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5w
cm90b3R5cGUucmVzZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRzU2lkZWJh
clBhbmUucHJvdG90eXBlLl9icmVha3BvaW50QWRkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlLl9icmVha3BvaW50UmVtb3ZlZCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUuX2Jy
ZWFrcG9pbnRFbmFibGVDaGFuZ2VkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL09i
amVjdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLmRpc3BhdGNo
RXZlbnRUb0xpc3RlbmVycyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRW
aWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFZpZXcucHJvdG90eXBlLl9hZGRC
cmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuYWRkU2NyaXB0KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9icmVha3BvaW50QWRkZWQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX2JyZWFrcG9pbnRSZW1vdmVk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLmVkaXRTY3Jp
cHRTb3VyY2UubXljYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVs
LnByb3RvdHlwZS5lZGl0U2NyaXB0U291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3Jp
cHRzUGFuZWwucHJvdG90eXBlLl9zaG93U2NyaXB0T3JSZXNvdXJjZSk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZXR0
aW5ncy5wcm90b3R5cGUuX2xvYWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291
cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBl
Ll9jb250ZXh0TWVudSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3
LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLl9hZGRCcmVh
a3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZS5fcmVt
b3ZlQnJlYWtwb2ludCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJj
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IubG9hZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5yZXN0b3JlZEJyZWFrcG9pbnQpOgor
CiAyMDEwLTA1LTE5ICBWYW5nZWxpcyBLb2trZXZpcyAgPHZhbmdlbGlzQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNTk4
MjMpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzg0MCw3ICsz
ODQwLDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanMn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRzUGFuZWwuanMnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQm90dG9tVXBQcm9maWxlRGF0YUdyaWRUcmVl
LmpzJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanMnLAor
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMnLAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5q
cycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsYmFjay5qcycsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRlYmFyUGFuZS5qcycsCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDU5ODIzKQor
KysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpA
QCAtNDQyNjAsNyArNDQyNjAsNyBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUN
Ci0JCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxCcmVha3BvaW50Lmpz
Ig0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEJyZWFrcG9pbnRN
YW5hZ2VyLmpzIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQpJbmRleDogV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanMJKHJldmlzaW9uIDU5ODIzKQor
KysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLVdlYkluc3BlY3Rvci5CcmVha3BvaW50ID0gZnVuY3Rpb24odXJsLCBsaW5lLCBz
b3VyY2VJRCwgY29uZGl0aW9uKQotewotICAgIHRoaXMudXJsID0gdXJsOwotICAgIHRoaXMubGlu
ZSA9IGxpbmU7Ci0gICAgdGhpcy5zb3VyY2VJRCA9IHNvdXJjZUlEOwotICAgIHRoaXMuX2VuYWJs
ZWQgPSB0cnVlOwotICAgIHRoaXMuX3NvdXJjZVRleHQgPSAiIjsKLSAgICB0aGlzLl9jb25kaXRp
b24gPSBjb25kaXRpb24gfHwgIiI7Ci19Ci0KLVdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3Rv
dHlwZSA9IHsKLSAgICBnZXQgZW5hYmxlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5f
ZW5hYmxlZDsKLSAgICB9LAotCi0gICAgc2V0IGVuYWJsZWQoeCkKLSAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLl9lbmFibGVkID09PSB4KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRo
aXMuX2VuYWJsZWQgPSB4OwotCi0gICAgICAgIGlmICh0aGlzLl9lbmFibGVkKQotICAgICAgICAg
ICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImVuYWJsZWQiKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImRpc2FibGVkIik7
Ci0gICAgfSwKLQotICAgIGdldCBzb3VyY2VUZXh0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLl9zb3VyY2VUZXh0OwotICAgIH0sCi0KLSAgICBzZXQgc291cmNlVGV4dCh0ZXh0KQotICAg
IHsKLSAgICAgICAgdGhpcy5fc291cmNlVGV4dCA9IHRleHQ7Ci0gICAgICAgIHRoaXMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKCJ0ZXh0LWNoYW5nZWQiKTsKLSAgICB9LAotCi0gICAgZ2V0IGxh
YmVsKCkKLSAgICB7Ci0gICAgICAgIHZhciBkaXNwbGF5TmFtZSA9ICh0aGlzLnVybCA/IFdlYklu
c3BlY3Rvci5kaXNwbGF5TmFtZUZvclVSTCh0aGlzLnVybCkgOiBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIihwcm9ncmFtKSIpKTsKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlOYW1lICsgIjoiICsgdGhp
cy5saW5lOwotICAgIH0sCi0KLSAgICBnZXQgaWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuc291cmNlSUQgKyAiOiIgKyB0aGlzLmxpbmU7Ci0gICAgfSwKLQotICAgIGdldCBjb25kaXRp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbjsKLSAgICB9LAotCi0g
ICAgc2V0IGNvbmRpdGlvbihjKQotICAgIHsKLSAgICAgICAgYyA9IGMgfHwgIiI7Ci0gICAgICAg
IGlmICh0aGlzLl9jb25kaXRpb24gPT09IGMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgdGhpcy5fY29uZGl0aW9uID0gYzsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoImNvbmRpdGlvbi1jaGFuZ2VkIik7Ci0KLSAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCkK
LSAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludCh0aGlzLnNvdXJjZUlE
LCB0aGlzLmxpbmUsIHRoaXMuZW5hYmxlZCwgdGhpcy5jb25kaXRpb24pOwotICAgIH0KLX0KLQot
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rv
ci5PYmplY3QucHJvdG90eXBlOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Jy
ZWFrcG9pbnRNYW5hZ2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIgPSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5f
YnJlYWtwb2ludHMgPSB7fTsKK30KKworV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKKyAgICBjcmVhdGVCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgc291
cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pCisgICAgeworICAgICAgICByZXR1cm4g
bmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50KHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVu
YWJsZWQsIGNvbmRpdGlvbiwgdGhpcyk7CisgICAgfSwKKworICAgIGFkZEJyZWFrcG9pbnQ6IGZ1
bmN0aW9uKGJyZWFrcG9pbnQsIHNraXBTYXZlVG9TZXR0aW5ncykKKyAgICB7CisgICAgICAgIGlm
ICh0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSkKKyAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSA9IGJyZWFrcG9pbnQ7Cisg
ICAgICAgIGlmICghc2tpcFNhdmVUb1NldHRpbmdzKQorICAgICAgICAgICAgdGhpcy5fc2F2ZUJy
ZWFrcG9pbnRUb1NldHRpbmdzKGJyZWFrcG9pbnQpOworICAgICAgICB0aGlzLl9zYXZlQnJlYWtw
b2ludFRvQmFja2VuZChicmVha3BvaW50KTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoImJyZWFrcG9pbnQtYWRkZWQiLCBicmVha3BvaW50KTsKKyAgICB9LCAgICAKKwor
ICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgeworICAgICAg
ICBpZiAoIShicmVha3BvaW50LmlkIGluIHRoaXMuX2JyZWFrcG9pbnRzKSkKKyAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF07
CisgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRGcm9tU2V0dGluZ3MoYnJlYWtwb2ludCk7
CisgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRGcm9tQmFja2VuZChicmVha3BvaW50KTsK
KyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImJyZWFrcG9pbnQtcmVtb3Zl
ZCIsIGJyZWFrcG9pbnQpOworICAgIH0sCisgICAgCisgICAgcmVzdG9yZVNjcmlwdEJyZWFrcG9p
bnRzOiBmdW5jdGlvbihzb3VyY2VJRCwgc291cmNlVVJMKQorICAgIHsKKyAgICAgICAgaWYgKCEo
c291cmNlVVJMIGluIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5icmVha3BvaW50cykpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5zZXR0
aW5ncy5icmVha3BvaW50c1tzb3VyY2VVUkxdOworICAgICAgICBmb3IgKHZhciBsaW5lIGluIGJy
ZWFrcG9pbnRzKSB7CisgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuY3JlYXRlQnJl
YWtwb2ludChzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBicmVha3BvaW50c1tsaW5lXS5lbmFi
bGVkLCAgYnJlYWtwb2ludHNbbGluZV0uY29uZGl0aW9uKTsgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHRoaXMuYWRkQnJlYWtwb2ludChicmVha3BvaW50LCB0cnVlKTsKKyAgICAgICAgfQorICAg
IH0sICAgIAorCisgICAgZ2V0QnJlYWtwb2ludHNCeVNvdXJjZUlEOiBmdW5jdGlvbihzb3VyY2VJ
RCkgeworICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaWQg
aW4gdGhpcy5fYnJlYWtwb2ludHMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50
c1tpZF0uc291cmNlSUQgPT09IHNvdXJjZUlEKQorICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRz
LnB1c2godGhpcy5fYnJlYWtwb2ludHNbaWRdKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
YnJlYWtwb2ludHM7CisgICAgfSwgICAgCisKKyAgICBnZXRCcmVha3BvaW50c0J5VVJMOiBmdW5j
dGlvbih1cmwpIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gW107CisgICAgICAgIGZvciAo
dmFyIGlkIGluIHRoaXMuX2JyZWFrcG9pbnRzKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fYnJl
YWtwb2ludHNbaWRdLnVybCA9PT0gdXJsKQorICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzLnB1
c2godGhpcy5fYnJlYWtwb2ludHNbaWRdKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnJl
YWtwb2ludHM7ICAgICAgICAKKyAgICB9LAorCisgICAgX3NhdmVCcmVha3BvaW50VG9TZXR0aW5n
czogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICB7CisgICAgICAgIGlmICghYnJlYWtwb2ludC51
cmwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYklu
c3BlY3Rvci5zZXR0aW5ncy5icmVha3BvaW50czsKKyAgICAgICAgaWYgKCEoYnJlYWtwb2ludC51
cmwgaW4gYnJlYWtwb2ludHMpKQorICAgICAgICAgICAgYnJlYWtwb2ludHNbYnJlYWtwb2ludC51
cmxdID0ge307CisgICAgICAgIGJyZWFrcG9pbnRzW2JyZWFrcG9pbnQudXJsXVticmVha3BvaW50
LmxpbmVdID0ge2VuYWJsZWQ6IGJyZWFrcG9pbnQuZW5hYmxlZCwgY29uZGl0aW9uOiBicmVha3Bv
aW50LmNvbmRpdGlvbn07CisgICAgICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5icmVha3BvaW50
cyA9IGJyZWFrcG9pbnRzOworICAgIH0sCisKKyAgICBfcmVtb3ZlQnJlYWtwb2ludEZyb21TZXR0
aW5nczogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICB7CisgICAgICAgIHZhciBicmVha3BvaW50
cyA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5icmVha3BvaW50czsKKyAgICAgICAgaWYgKCEoYnJl
YWtwb2ludC51cmwgaW4gYnJlYWtwb2ludHMpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBkZWxldGUgYnJlYWtwb2ludHNbYnJlYWtwb2ludC51cmxdW2JyZWFrcG9pbnQubGluZV07Cisg
ICAgICAgIHZhciBpc0VtcHR5ID0gdHJ1ZTsKKyAgICAgICAgZm9yICh2YXIgbGluZSBpbiBicmVh
a3BvaW50c1ticmVha3BvaW50LnVybF0pIHsKKyAgICAgICAgICAgIGlzRW1wdHkgPSBmYWxzZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChpc0VtcHR5KQorICAg
ICAgICAgICAgZGVsZXRlIGJyZWFrcG9pbnRzW2JyZWFrcG9pbnQudXJsXTsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLnNldHRpbmdzLmJyZWFrcG9pbnRzID0gYnJlYWtwb2ludHM7CisgICAgfSwKKwor
ICAgIF9zYXZlQnJlYWtwb2ludFRvQmFja2VuZDogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICB7
CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJj
ZUlELCBicmVha3BvaW50LmxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25k
aXRpb24pOworICAgIH0sCisKKyAgICBfcmVtb3ZlQnJlYWtwb2ludEZyb21CYWNrZW5kOiBmdW5j
dGlvbihicmVha3BvaW50KQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVC
cmVha3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQubGluZSk7CisgICAgfQor
fQorCitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9
IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dCA9IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlv
biwgbWFuYWdlcikKK3sKKyAgICB0aGlzLnVybCA9IHNvdXJjZVVSTDsKKyAgICB0aGlzLmxpbmUg
PSBsaW5lOworICAgIHRoaXMuc291cmNlSUQgPSBzb3VyY2VJRDsKKyAgICB0aGlzLl9lbmFibGVk
ID0gZW5hYmxlZDsKKyAgICB0aGlzLl9jb25kaXRpb24gPSBjb25kaXRpb24gfHwgIiI7CisgICAg
dGhpcy5fc291cmNlVGV4dCA9ICIiOworICAgIHRoaXMuX21hbmFnZXIgPSBtYW5hZ2VyOworfQor
CitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CisgICAgZ2V0IGVuYWJsZWQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7CisgICAgfSwKKworICAgIHNl
dCBlbmFibGVkKHgpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZW5hYmxlZCA9PT0geCkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9lbmFibGVkID0geDsKKyAgICAgICAg
dGhpcy5fbWFuYWdlci5fc2F2ZUJyZWFrcG9pbnRUb1NldHRpbmdzKHRoaXMpOworICAgICAgICB0
aGlzLl9tYW5hZ2VyLl9zYXZlQnJlYWtwb2ludFRvQmFja2VuZCh0aGlzKTsKKyAgICAgICAgaWYg
KHRoaXMuX2VuYWJsZWQpCisgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cygiZW5hYmxlZCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycygiZGlzYWJsZWQiKTsKKyAgICB9LAorCisgICAgZ2V0IHNvdXJjZVRleHQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZVRleHQ7CisgICAgfSwKKworICAg
IHNldCBzb3VyY2VUZXh0KHRleHQpCisgICAgeworICAgICAgICB0aGlzLl9zb3VyY2VUZXh0ID0g
dGV4dDsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInRleHQtY2hhbmdl
ZCIpOworICAgIH0sCisKKyAgICBnZXQgbGFiZWwoKQorICAgIHsKKyAgICAgICAgdmFyIGRpc3Bs
YXlOYW1lID0gKHRoaXMudXJsID8gV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yVVJMKHRoaXMu
dXJsKSA6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKHByb2dyYW0pIikpOworICAgICAgICByZXR1
cm4gZGlzcGxheU5hbWUgKyAiOiIgKyB0aGlzLmxpbmU7CisgICAgfSwKKworICAgIGdldCBpZCgp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VJRCArICI6IiArIHRoaXMubGluZTsK
KyAgICB9LAorCisgICAgZ2V0IGNvbmRpdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5fY29uZGl0aW9uOworICAgIH0sCisKKyAgICBzZXQgY29uZGl0aW9uKGMpCisgICAgeworICAg
ICAgICBjID0gYyB8fCAiIjsKKyAgICAgICAgaWYgKHRoaXMuX2NvbmRpdGlvbiA9PT0gYykKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9jb25kaXRpb24gPSBjOworICAgICAg
ICB0aGlzLl9tYW5hZ2VyLl9zYXZlQnJlYWtwb2ludFRvU2V0dGluZ3ModGhpcyk7CisgICAgICAg
IGlmICh0aGlzLmVuYWJsZWQpCisgICAgICAgICAgICB0aGlzLl9tYW5hZ2VyLl9zYXZlQnJlYWtw
b2ludFRvQmFja2VuZCh0aGlzKTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoImNvbmRpdGlvbi1jaGFuZ2VkIik7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnRNYW5hZ2VyID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuX2JyZWFrcG9p
bnRzID0ge307Cit9CisKK1dlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUg
PSB7CisgICAgY3JlYXRlQnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIHNvdXJjZVVSTCwg
bGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludChzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBj
b25kaXRpb24sIHRoaXMpOworICAgIH0sCisKKyAgICBhZGRCcmVha3BvaW50OiBmdW5jdGlvbihi
cmVha3BvaW50LCBza2lwU2F2ZVRvU2V0dGluZ3MpCisgICAgeworICAgICAgICBpZiAodGhpcy5f
YnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF0pCisgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
dGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF0gPSBicmVha3BvaW50OworICAgICAgICBp
ZiAoIXNraXBTYXZlVG9TZXR0aW5ncykKKyAgICAgICAgICAgIHRoaXMuX3NhdmVCcmVha3BvaW50
VG9TZXR0aW5ncyhicmVha3BvaW50KTsKKyAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRUb0Jh
Y2tlbmQoYnJlYWtwb2ludCk7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KCJicmVha3BvaW50LWFkZGVkIiwgYnJlYWtwb2ludCk7CisgICAgfSwgICAgCisKKyAgICByZW1v
dmVCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIHsKKyAgICAgICAgaWYgKCEo
YnJlYWtwb2ludC5pZCBpbiB0aGlzLl9icmVha3BvaW50cykpCisgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdOworICAgICAg
ICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RnJvbVNldHRpbmdzKGJyZWFrcG9pbnQpOworICAgICAg
ICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RnJvbUJhY2tlbmQoYnJlYWtwb2ludCk7CisgICAgICAg
IHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJicmVha3BvaW50LXJlbW92ZWQiLCBicmVh
a3BvaW50KTsKKyAgICB9LAorICAgIAorICAgIHJlc3RvcmVTY3JpcHRCcmVha3BvaW50czogZnVu
Y3Rpb24oc291cmNlSUQsIHNvdXJjZVVSTCkKKyAgICB7CisgICAgICAgIGlmICghKHNvdXJjZVVS
TCBpbiBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuYnJlYWtwb2ludHMpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuYnJl
YWtwb2ludHNbc291cmNlVVJMXTsKKyAgICAgICAgZm9yICh2YXIgbGluZSBpbiBicmVha3BvaW50
cykgeworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLmNyZWF0ZUJyZWFrcG9pbnQo
c291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgYnJlYWtwb2ludHNbbGluZV0uZW5hYmxlZCwgIGJy
ZWFrcG9pbnRzW2xpbmVdLmNvbmRpdGlvbik7ICAgICAgICAgICAgCisgICAgICAgICAgICB0aGlz
LmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9LCAgICAK
KworICAgIGdldEJyZWFrcG9pbnRzQnlTb3VyY2VJRDogZnVuY3Rpb24oc291cmNlSUQpIHsKKyAg
ICAgICAgdmFyIGJyZWFrcG9pbnRzID0gW107CisgICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMu
X2JyZWFrcG9pbnRzKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHNbaWRdLnNv
dXJjZUlEID09PSBzb3VyY2VJRCkKKyAgICAgICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKHRo
aXMuX2JyZWFrcG9pbnRzW2lkXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJyZWFrcG9p
bnRzOworICAgIH0sICAgIAorCisgICAgZ2V0QnJlYWtwb2ludHNCeVVSTDogZnVuY3Rpb24odXJs
KSB7CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFtdOworICAgICAgICBmb3IgKHZhciBpZCBp
biB0aGlzLl9icmVha3BvaW50cykgeworICAgICAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRz
W2lkXS51cmwgPT09IHVybCkKKyAgICAgICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKHRoaXMu
X2JyZWFrcG9pbnRzW2lkXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnRz
OyAgICAgICAgCisgICAgfSwKKworICAgIF9zYXZlQnJlYWtwb2ludFRvU2V0dGluZ3M6IGZ1bmN0
aW9uKGJyZWFrcG9pbnQpCisgICAgeworICAgICAgICBpZiAoIWJyZWFrcG9pbnQudXJsKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBXZWJJbnNwZWN0b3Iu
c2V0dGluZ3MuYnJlYWtwb2ludHM7CisgICAgICAgIGlmICghKGJyZWFrcG9pbnQudXJsIGluIGJy
ZWFrcG9pbnRzKSkKKyAgICAgICAgICAgIGJyZWFrcG9pbnRzW2JyZWFrcG9pbnQudXJsXSA9IHt9
OworICAgICAgICBicmVha3BvaW50c1ticmVha3BvaW50LnVybF1bYnJlYWtwb2ludC5saW5lXSA9
IHtlbmFibGVkOiBicmVha3BvaW50LmVuYWJsZWQsIGNvbmRpdGlvbjogYnJlYWtwb2ludC5jb25k
aXRpb259OworICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuYnJlYWtwb2ludHMgPSBicmVh
a3BvaW50czsKKyAgICB9LAorCisgICAgX3JlbW92ZUJyZWFrcG9pbnRGcm9tU2V0dGluZ3M6IGZ1
bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBXZWJJ
bnNwZWN0b3Iuc2V0dGluZ3MuYnJlYWtwb2ludHM7CisgICAgICAgIGlmICghKGJyZWFrcG9pbnQu
dXJsIGluIGJyZWFrcG9pbnRzKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVsZXRl
IGJyZWFrcG9pbnRzW2JyZWFrcG9pbnQudXJsXVticmVha3BvaW50LmxpbmVdOworICAgICAgICB2
YXIgaXNFbXB0eSA9IHRydWU7CisgICAgICAgIGZvciAodmFyIGxpbmUgaW4gYnJlYWtwb2ludHNb
YnJlYWtwb2ludC51cmxdKSB7CisgICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNFbXB0eSkKKyAgICAgICAgICAg
IGRlbGV0ZSBicmVha3BvaW50c1ticmVha3BvaW50LnVybF07CisgICAgICAgIFdlYkluc3BlY3Rv
ci5zZXR0aW5ncy5icmVha3BvaW50cyA9IGJyZWFrcG9pbnRzOworICAgIH0sCisKKyAgICBfc2F2
ZUJyZWFrcG9pbnRUb0JhY2tlbmQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgeworICAgICAg
ICBJbnNwZWN0b3JCYWNrZW5kLnNldEJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJl
YWtwb2ludC5saW5lLCBicmVha3BvaW50LmVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsK
KyAgICB9LAorCisgICAgX3JlbW92ZUJyZWFrcG9pbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oYnJl
YWtwb2ludCkKKyAgICB7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlQnJlYWtwb2lu
dChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50LmxpbmUpOworICAgIH0KK30KKworV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNw
ZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQgPSBmdW5j
dGlvbihzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24sIG1hbmFn
ZXIpCit7CisgICAgdGhpcy51cmwgPSBzb3VyY2VVUkw7CisgICAgdGhpcy5saW5lID0gbGluZTsK
KyAgICB0aGlzLnNvdXJjZUlEID0gc291cmNlSUQ7CisgICAgdGhpcy5fZW5hYmxlZCA9IGVuYWJs
ZWQ7CisgICAgdGhpcy5fY29uZGl0aW9uID0gY29uZGl0aW9uIHx8ICIiOworICAgIHRoaXMuX3Nv
dXJjZVRleHQgPSAiIjsKKyAgICB0aGlzLl9tYW5hZ2VyID0gbWFuYWdlcjsKK30KKworV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlID0geworICAgIGdldCBlbmFibGVkKCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkOworICAgIH0sCisKKyAgICBzZXQgZW5hYmxl
ZCh4KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2VuYWJsZWQgPT09IHgpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHg7CisgICAgICAgIHRoaXMuX21h
bmFnZXIuX3NhdmVCcmVha3BvaW50VG9TZXR0aW5ncyh0aGlzKTsKKyAgICAgICAgdGhpcy5fbWFu
YWdlci5fc2F2ZUJyZWFrcG9pbnRUb0JhY2tlbmQodGhpcyk7CisgICAgICAgIGlmICh0aGlzLl9l
bmFibGVkKQorICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImVuYWJs
ZWQiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoImRpc2FibGVkIik7CisgICAgfSwKKworICAgIGdldCBzb3VyY2VUZXh0KCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VUZXh0OworICAgIH0sCisKKyAgICBzZXQgc291
cmNlVGV4dCh0ZXh0KQorICAgIHsKKyAgICAgICAgdGhpcy5fc291cmNlVGV4dCA9IHRleHQ7Cisg
ICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJ0ZXh0LWNoYW5nZWQiKTsKKyAg
ICB9LAorCisgICAgZ2V0IGxhYmVsKCkKKyAgICB7CisgICAgICAgIHZhciBkaXNwbGF5TmFtZSA9
ICh0aGlzLnVybCA/IFdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvclVSTCh0aGlzLnVybCkgOiBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihwcm9ncmFtKSIpKTsKKyAgICAgICAgcmV0dXJuIGRpc3Bs
YXlOYW1lICsgIjoiICsgdGhpcy5saW5lOworICAgIH0sCisKKyAgICBnZXQgaWQoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlSUQgKyAiOiIgKyB0aGlzLmxpbmU7CisgICAgfSwK
KworICAgIGdldCBjb25kaXRpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmRp
dGlvbjsKKyAgICB9LAorCisgICAgc2V0IGNvbmRpdGlvbihjKQorICAgIHsKKyAgICAgICAgYyA9
IGMgfHwgIiI7CisgICAgICAgIGlmICh0aGlzLl9jb25kaXRpb24gPT09IGMpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fY29uZGl0aW9uID0gYzsKKyAgICAgICAgdGhpcy5f
bWFuYWdlci5fc2F2ZUJyZWFrcG9pbnRUb1NldHRpbmdzKHRoaXMpOworICAgICAgICBpZiAodGhp
cy5lbmFibGVkKQorICAgICAgICAgICAgdGhpcy5fbWFuYWdlci5fc2F2ZUJyZWFrcG9pbnRUb0Jh
Y2tlbmQodGhpcyk7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJjb25k
aXRpb24tY2hhbmdlZCIpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJv
dG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwpJbmRleDog
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJh
clBhbmUuanMJKHJldmlzaW9uIDU5ODIzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDYg
QEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRzU2lkZWJhclBhbmUgPSBmdQogewogICAgIFdlYklu
c3BlY3Rvci5TaWRlYmFyUGFuZS5jYWxsKHRoaXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQnJl
YWtwb2ludHMiKSk7CiAKLSAgICB0aGlzLmJyZWFrcG9pbnRzID0ge307Ci0KICAgICB0aGlzLmxp
c3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib2wiKTsKICAgICB0aGlzLmxpc3RF
bGVtZW50LmNsYXNzTmFtZSA9ICJicmVha3BvaW50LWxpc3QiOwogCkBAIC0zNywxMiArMzUsMTQg
QEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRzU2lkZWJhclBhbmUgPSBmdQogICAgIHRoaXMuZW1w
dHlFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJObyBCcmVha3Bv
aW50cyIpOwogCiAgICAgdGhpcy5ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVtcHR5RWxl
bWVudCk7CisKKyAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRMaXN0
ZW5lcigiYnJlYWtwb2ludC1hZGRlZCIsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7Cisg
ICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoImJyZWFr
cG9pbnQtcmVtb3ZlZCIsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsgICAgCiB9CiAK
IFdlYkluc3BlY3Rvci5CcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICBy
ZXNldDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhpcy5icmVha3BvaW50cyA9IHt9Owog
ICAgICAgICB0aGlzLmxpc3RFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CiAgICAgICAgIGlmICh0
aGlzLmxpc3RFbGVtZW50LnBhcmVudEVsZW1lbnQpIHsKICAgICAgICAgICAgIHRoaXMuYm9keUVs
ZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5saXN0RWxlbWVudCk7CkBAIC01MCwxMiArNTAsOSBAQCBX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90CiAgICAgICAgIH0KICAgICB9
LAogCi0gICAgYWRkQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICBfYnJlYWtw
b2ludEFkZGVkOiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLmJyZWFr
cG9pbnRzW2JyZWFrcG9pbnQuaWRdKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRo
aXMuYnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF0gPSBicmVha3BvaW50OworICAgICAgICB2YXIg
YnJlYWtwb2ludCA9IGV2ZW50LmRhdGE7CiAKICAgICAgICAgYnJlYWtwb2ludC5hZGRFdmVudExp
c3RlbmVyKCJlbmFibGVkIiwgdGhpcy5fYnJlYWtwb2ludEVuYWJsZUNoYW5nZWQsIHRoaXMpOwog
ICAgICAgICBicmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoImRpc2FibGVkIiwgdGhpcy5fYnJl
YWtwb2ludEVuYWJsZUNoYW5nZWQsIHRoaXMpOwpAQCAtNjcsOCArNjQsNiBAQCBXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90CiAgICAgICAgICAgICB0aGlzLmJvZHlFbGVt
ZW50LnJlbW92ZUNoaWxkKHRoaXMuZW1wdHlFbGVtZW50KTsKICAgICAgICAgICAgIHRoaXMuYm9k
eUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5saXN0RWxlbWVudCk7CiAgICAgICAgIH0KLQotICAg
ICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldEJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJRCwg
YnJlYWtwb2ludC5saW5lLCBicmVha3BvaW50LmVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9u
KTsKICAgICB9LAogCiAgICAgX2FwcGVuZEJyZWFrcG9pbnRFbGVtZW50OiBmdW5jdGlvbihicmVh
a3BvaW50KQpAQCAtMTIxLDExICsxMTYsOSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRl
YmFyUGFuZS5wcm90CiAgICAgICAgIHRoaXMubGlzdEVsZW1lbnQuYXBwZW5kQ2hpbGQoYnJlYWtw
b2ludEVsZW1lbnQpOwogICAgIH0sCiAKLSAgICByZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihi
cmVha3BvaW50KQorICAgIF9icmVha3BvaW50UmVtb3ZlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAg
ewotICAgICAgICBpZiAoIXRoaXMuYnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF0pCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGRlbGV0ZSB0aGlzLmJyZWFrcG9pbnRzW2JyZWFrcG9pbnQu
aWRdOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGE7CiAKICAgICAgICAgYnJl
YWtwb2ludC5yZW1vdmVFdmVudExpc3RlbmVyKCJlbmFibGVkIiwgbnVsbCwgdGhpcyk7CiAgICAg
ICAgIGJyZWFrcG9pbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzYWJsZWQiLCBudWxsLCB0aGlz
KTsKQEAgLTEzOCw4ICsxMzEsNiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFu
ZS5wcm90CiAgICAgICAgICAgICB0aGlzLmJvZHlFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMubGlz
dEVsZW1lbnQpOwogICAgICAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlz
LmVtcHR5RWxlbWVudCk7CiAgICAgICAgIH0KLQotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJl
bW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5lKTsKICAg
ICB9LAogCiAgICAgX2JyZWFrcG9pbnRFbmFibGVDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKQEAg
LTE0OCw3ICsxMzksNiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90
CiAKICAgICAgICAgdmFyIGNoZWNrYm94ID0gYnJlYWtwb2ludC5fYnJlYWtwb2ludExpc3RFbGVt
ZW50LmZpcnN0Q2hpbGQ7CiAgICAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSBicmVha3BvaW50LmVu
YWJsZWQ7Ci0gICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludChicmVha3BvaW50
LnNvdXJjZUlELCBicmVha3BvaW50LmxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2lu
dC5jb25kaXRpb24pOwogICAgIH0sCiAKICAgICBfYnJlYWtwb2ludFRleHRDaGFuZ2VkOiBmdW5j
dGlvbihldmVudCkKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3QuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdC5qcwkocmV2
aXNpb24gNTk4MjMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0LmpzCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90
eXBlID0gewogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdOwog
ICAgIH0sCiAKLSAgICBkaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnM6IGZ1bmN0aW9uKGV2ZW50VHlw
ZSkgeworICAgIGRpc3BhdGNoRXZlbnRUb0xpc3RlbmVyczogZnVuY3Rpb24oZXZlbnRUeXBlLCBl
dmVudERhdGEpIHsKICAgICAgICAgaWYgKCEoIl9saXN0ZW5lcnMiIGluIHRoaXMpIHx8ICEoZXZl
bnRUeXBlIGluIHRoaXMuX2xpc3RlbmVycykpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTY2
LDcgKzY2LDcgQEAgV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgdmFy
IGV2ZW50ID0ge3RhcmdldDogdGhpcywgdHlwZTogZXZlbnRUeXBlLCBkZWZhdWx0UHJldmVudGVk
OiBmYWxzZX07CisgICAgICAgIHZhciBldmVudCA9IHt0YXJnZXQ6IHRoaXMsIHR5cGU6IGV2ZW50
VHlwZSwgZGF0YTogZXZlbnREYXRhLCBkZWZhdWx0UHJldmVudGVkOiBmYWxzZX07CiAgICAgICAg
IGV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9IHN0b3BQcm9wYWdhdGlvbjsKICAgICAgICAgZXZlbnQu
cHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDsKIApJbmRleDogV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanMJKHJldmlzaW9uIDU5ODIzKQorKysgV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanMJKHdvcmtpbmcgY29weSkKQEAgLTczLDgg
KzczLDggQEAgV2ViSW5zcGVjdG9yLlNjcmlwdFZpZXcucHJvdG90eXBlID0gewogCiAgICAgX2Fk
ZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmUpCiAgICAgewotICAgICAgICB2YXIgYnJlYWtwb2lu
dCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCh0aGlzLnNjcmlwdC5zb3VyY2VVUkwsIGxp
bmUsIHRoaXMuc2NyaXB0LnNvdXJjZUlEKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5z
Y3JpcHRzLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CisgICAgICAgIHZhciBicmVha3BvaW50
ID0gV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmNyZWF0ZUJyZWFrcG9pbnQodGhpcy5z
Y3JpcHQuc291cmNlSUQsIHRoaXMuc2NyaXB0LnNvdXJjZVVSTCwgbGluZSwgdHJ1ZSwgIiIpOwor
ICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkQnJlYWtwb2ludChicmVh
a3BvaW50KTsKICAgICB9LAogCiAgICAgX2VkaXRMaW5lQ29tcGxldGU6IGZ1bmN0aW9uKG5ld0Jv
ZHkpCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMJ
KHJldmlzaW9uIDU5ODIzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQ
YW5lbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTcwLDYgKzE3MCwxMCBAQCBXZWJJbnNwZWN0b3Iu
U2NyaXB0c1BhbmVsID0gZnVuY3Rpb24oKQogICAgIHRoaXMuX2RlYnVnZ2VyRW5hYmxlZCA9IFBy
ZWZlcmVuY2VzLmRlYnVnZ2VyQWx3YXlzRW5hYmxlZDsKICAgICBpZiAoUHJlZmVyZW5jZXMuZGVi
dWdnZXJBbHdheXNFbmFibGVkKQogICAgICAgICB0aGlzLl9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93
biA9IHRydWU7CisKKyAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRM
aXN0ZW5lcigiYnJlYWtwb2ludC1hZGRlZCIsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7
CisgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoImJy
ZWFrcG9pbnQtcmVtb3ZlZCIsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKKwogICAg
IHRoaXMucmVzZXQoKTsKIH0KIApAQCAtMjU3LDYgKzI2MSw4IEBAIFdlYkluc3BlY3Rvci5TY3Jp
cHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IHRoaXMuX2FkZFNjcmlwdFRvRmlsZXNNZW51KHNjcmlwdCk7CisKKyAgICAgICAgV2ViSW5zcGVj
dG9yLmJyZWFrcG9pbnRNYW5hZ2VyLnJlc3RvcmVTY3JpcHRCcmVha3BvaW50cyhzb3VyY2VJRCwg
c291cmNlVVJMKTsKICAgICB9LAogCiAgICAgX3Jlc291cmNlTG9hZGluZ0ZpbmlzaGVkOiBmdW5j
dGlvbihlKQpAQCAtMjg0LDEzICsyOTAsMTMgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5w
cm90b3R5cGUgPSB7CiAgICAgICAgIGRlbGV0ZSByZXNvdXJjZS5fc2NyaXB0c1BlbmRpbmdSZXNv
dXJjZUxvYWQ7CiAgICAgfSwKIAotICAgIGFkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9p
bnQpCisgICAgX2JyZWFrcG9pbnRBZGRlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgeworICAgICAg
ICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGE7CisKICAgICAgICAgaWYgKCF0aGlzLmJyZWFr
cG9pbnRzQWN0aXZhdGVkKQogICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQnJlYWtwb2ludHNDbGlj
a2VkKCk7CiAKLSAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuYnJlYWtwb2ludHMuYWRkQnJlYWtw
b2ludChicmVha3BvaW50KTsKLQogICAgICAgICB2YXIgc291cmNlRnJhbWU7CiAgICAgICAgIGlm
IChicmVha3BvaW50LnVybCkgewogICAgICAgICAgICAgdmFyIHJlc291cmNlID0gV2ViSW5zcGVj
dG9yLnJlc291cmNlVVJMTWFwW2JyZWFrcG9pbnQudXJsXTsKQEAgLTMwNyw5ICszMTMsOSBAQCBX
ZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHNvdXJj
ZUZyYW1lLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CiAgICAgfSwKIAotICAgIHJlbW92ZUJy
ZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgX2JyZWFrcG9pbnRSZW1vdmVkOiBm
dW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLmJyZWFrcG9p
bnRzLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CisgICAgICAgIHZhciBicmVha3BvaW50
ID0gZXZlbnQuZGF0YTsKIAogICAgICAgICB2YXIgc291cmNlRnJhbWU7CiAgICAgICAgIGlmIChi
cmVha3BvaW50LnVybCkgewpAQCAtMzM4LDIyICszNDQsMTggQEAgV2ViSW5zcGVjdG9yLlNjcmlw
dHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8g
TmVlZCB0byBjbGVhciBicmVha3BvaW50cyBhbmQgcmUtY3JlYXRlIHRoZW0gbGF0ZXIgd2hlbiBl
ZGl0aW5nIHNvdXJjZS4KLSAgICAgICAgdmFyIGJyZWFrcG9pbnRzUGFuZWwgPSB0aGlzLnNpZGVi
YXJQYW5lcy5icmVha3BvaW50czsKLSAgICAgICAgdmFyIG5ld0JyZWFrcG9pbnRzID0gW107Ci0g
ICAgICAgIGZvciAodmFyIGlkIGluIGJyZWFrcG9pbnRzUGFuZWwuYnJlYWtwb2ludHMpIHsKLSAg
ICAgICAgICAgIHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludHNQYW5lbC5icmVha3BvaW50c1tp
ZF07Ci0gICAgICAgICAgICBicmVha3BvaW50c1BhbmVsLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtw
b2ludCk7Ci0gICAgICAgICAgICBuZXdCcmVha3BvaW50cy5wdXNoKGJyZWFrcG9pbnQpOwotICAg
ICAgICB9CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5icmVha3BvaW50
TWFuYWdlci5nZXRCcmVha3BvaW50c0J5U291cmNlSUQoc291cmNlSUQpOworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludHNb
aV0pOwogCiAgICAgICAgIGZ1bmN0aW9uIG15Y2FsbGJhY2sobmV3Qm9keSkKICAgICAgICAgewog
ICAgICAgICAgICAgY2FsbGJhY2sobmV3Qm9keSk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG5ld0JyZWFrcG9pbnRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGJyZWFrcG9pbnQgPSBuZXdCcmVha3BvaW50c1tpXTsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIg
YnJlYWtwb2ludCA9IGJyZWFrcG9pbnRzW2ldOwogICAgICAgICAgICAgICAgIGlmIChicmVha3Bv
aW50LmxpbmUgPj0gbGluZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5saW5lICs9
IGxpbmVzQ291bnRUb1NoaWZ0OwotICAgICAgICAgICAgICAgIHRoaXMuYWRkQnJlYWtwb2ludChi
cmVha3BvaW50KTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFn
ZXIuYWRkQnJlYWtwb2ludChicmVha3BvaW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsK
ICAgICAgICAgdmFyIGNhbGxiYWNrSWQgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChteWNh
bGxiYWNrLmJpbmQodGhpcykpCkBAIC02MTEsMTQgKzYxMywxMCBAQCBXZWJJbnNwZWN0b3IuU2Ny
aXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAg
ICAgICAgICAgIHZpZXcgPSBXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5yZXNvdXJjZVZp
ZXdGb3JSZXNvdXJjZShzY3JpcHRPclJlc291cmNlKTsKICAgICAgICAgICAgIHZpZXcuaGVhZGVy
c1Zpc2libGUgPSBmYWxzZTsKLSAgICAgICAgICAgIHZhciBicmVha3BvaW50cyA9IHRoaXMuc2lk
ZWJhclBhbmVzLmJyZWFrcG9pbnRzLmJyZWFrcG9pbnRzOwotICAgICAgICAgICAgZm9yICh2YXIg
YnJlYWtwb2ludElkIGluIGJyZWFrcG9pbnRzKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGJyZWFr
cG9pbnQgPSBicmVha3BvaW50c1ticmVha3BvaW50SWRdOwotICAgICAgICAgICAgICAgIGlmIChi
cmVha3BvaW50LnVybCA9PT0gc2NyaXB0T3JSZXNvdXJjZS51cmwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIHNvdXJjZUZyYW1lID0gdGhpcy5fc291cmNlRnJhbWVGb3JTY3JpcHRPclJlc291
cmNlKHNjcmlwdE9yUmVzb3VyY2UpOwotICAgICAgICAgICAgICAgICAgICBzb3VyY2VGcmFtZS5h
ZGRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZUZyYW1lRm9yU2Ny
aXB0T3JSZXNvdXJjZShzY3JpcHRPclJlc291cmNlKTsKKyAgICAgICAgICAgIHZhciBicmVha3Bv
aW50cyA9IFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5nZXRCcmVha3BvaW50c0J5VVJM
KHNjcmlwdE9yUmVzb3VyY2UudXJsKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
YnJlYWtwb2ludHMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgc291cmNlRnJhbWUuYWRk
QnJlYWtwb2ludChicmVha3BvaW50c1tpXSk7CiAgICAgICAgIH0gZWxzZSBpZiAoc2NyaXB0T3JS
ZXNvdXJjZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5TY3JpcHQpCiAgICAgICAgICAgICB2aWV3
ID0gdGhpcy5zY3JpcHRWaWV3Rm9yU2NyaXB0KHNjcmlwdE9yUmVzb3VyY2UpOwogCkluZGV4OiBX
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCShyZXZpc2lvbiA1OTgyMykKKysr
IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcwkod29ya2luZyBjb3B5KQpA
QCAtNzIsNiArNzIsNyBAQCBXZWJJbnNwZWN0b3IuU2V0dGluZ3MucHJvdG90eXBlID0gewogICAg
ICAgICB0aGlzLl9pbnN0YWxsU2V0dGluZygic2hvd1VzZXJBZ2VudFN0eWxlcyIsICJzaG93LXVz
ZXItYWdlbnQtc3R5bGVzIiwgdHJ1ZSk7CiAgICAgICAgIHRoaXMuX2luc3RhbGxTZXR0aW5nKCJy
ZXNvdXJjZVZpZXdUYWIiLCAicmVzb3VyY2Utdmlldy10YWIiLCAiY29udGVudCIpOwogICAgICAg
ICB0aGlzLl9pbnN0YWxsU2V0dGluZygiY29uc29sZUhpc3RvcnkiLCAiY29uc29sZS1oaXN0b3J5
IiwgW10pOworICAgICAgICB0aGlzLl9pbnN0YWxsU2V0dGluZygiYnJlYWtwb2ludHMiLCAiYnJl
YWtwb2ludHMiLCB7fSk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJs
b2FkZWQiKTsKICAgICB9LAogCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291
cmNlRnJhbWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nv
dXJjZUZyYW1lLmpzCShyZXZpc2lvbiA1OTgyMykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Tb3VyY2VGcmFtZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNDI4LDcgKzQyOCw3IEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBjb250ZXh0
TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQWRkIENvbmRpdGlvbmFsIEJy
ZWFrcG9pbnTigKYiKSwgYWRkQ29uZGl0aW9uYWxCcmVha3BvaW50LmJpbmQodGhpcykpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGhpcyByb3cgaGFzIGEgYnJlYWtwb2ludCwg
d2Ugd2FudCB0byBzaG93IGVkaXQgYW5kIHJlbW92ZSBicmVha3BvaW50LCBhbmQgZWl0aGVyIGRp
c2FibGUgb3IgZW5hYmxlLgotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIlJlbW92ZSBCcmVha3BvaW50IiksIFdlYkluc3BlY3Rvci5wYW5l
bHMuc2NyaXB0cy5yZW1vdmVCcmVha3BvaW50LmJpbmQoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3Jp
cHRzLCBicmVha3BvaW50KSk7CisgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiUmVtb3ZlIEJyZWFrcG9pbnQiKSwgdGhpcy5fcmVtb3ZlQnJl
YWtwb2ludERlbGVnYXRlLmJpbmQodGhpcywgYnJlYWtwb2ludCkpOwogICAgICAgICAgICAgY29u
dGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVkaXQgQnJlYWtwb2lu
dOKApiIpLCB0aGlzLl9lZGl0QnJlYWtwb2ludENvbmRpdGlvbi5iaW5kKHRoaXMsIGJyZWFrcG9p
bnQpKTsKICAgICAgICAgICAgIGlmIChicmVha3BvaW50LmVuYWJsZWQpCiAgICAgICAgICAgICAg
ICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkRpc2FibGUg
QnJlYWtwb2ludCIpLCBmdW5jdGlvbigpIHsgYnJlYWtwb2ludC5lbmFibGVkID0gZmFsc2U7IH0p
OwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMJKHJldmlz
aW9uIDU5ODIzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTExMiwxNiArMTEyLDEzIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VW
aWV3LnByb3RvdHlwZSA9IHsKICAgICBfYWRkQnJlYWtwb2ludDogZnVuY3Rpb24obGluZSkKICAg
ICB7CiAgICAgICAgIHZhciBzb3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lKTsK
LSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cykgewotICAgICAgICAgICAg
dmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQodGhpcy5yZXNvdXJj
ZS51cmwsIGxpbmUsIHNvdXJjZUlEKTsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMu
c2NyaXB0cy5hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwotICAgICAgICB9CisgICAgICAgIHZh
ciBicmVha3BvaW50ID0gV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmNyZWF0ZUJyZWFr
cG9pbnQoc291cmNlSUQsIHRoaXMucmVzb3VyY2UudXJsLCBsaW5lLCB0cnVlLCAiIik7CisgICAg
ICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRCcmVha3BvaW50KGJyZWFrcG9p
bnQpOwogICAgIH0sCiAKICAgICBfcmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2lu
dCkKICAgICB7Ci0gICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMpCi0gICAg
ICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMucmVtb3ZlQnJlYWtwb2ludChicmVh
a3BvaW50KTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLnJlbW92ZUJy
ZWFrcG9pbnQoYnJlYWtwb2ludCk7CiAgICAgfSwKIAogICAgIF9lZGl0TGluZTogZnVuY3Rpb24o
bGluZSwgbmV3Q29udGVudCkKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJL
aXQucXJjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQu
cXJjCShyZXZpc2lvbiA1OTgyMykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJL
aXQucXJjCSh3b3JraW5nIGNvcHkpCkBAIC04LDcgKzgsNyBAQAogICAgIDxmaWxlPkF1ZGl0UnVs
ZXMuanM8L2ZpbGU+CiAgICAgPGZpbGU+QXVkaXRzUGFuZWwuanM8L2ZpbGU+CiAgICAgPGZpbGU+
Qm90dG9tVXBQcm9maWxlRGF0YUdyaWRUcmVlLmpzPC9maWxlPgotICAgIDxmaWxlPkJyZWFrcG9p
bnQuanM8L2ZpbGU+CisgICAgPGZpbGU+QnJlYWtwb2ludE1hbmFnZXIuanM8L2ZpbGU+CiAgICAg
PGZpbGU+QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qczwvZmlsZT4KICAgICA8ZmlsZT5DYWxsYmFj
ay5qczwvZmlsZT4KICAgICA8ZmlsZT5DYWxsU3RhY2tTaWRlYmFyUGFuZS5qczwvZmlsZT4KSW5k
ZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwJKHJldmlzaW9u
IDU5ODIzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE8KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJE
YXRhR3JpZC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IHNyYz0iQ29va2llSXRlbXNWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJTY3JpcHQuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkJyZWFrcG9pbnQuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkJyZWFrcG9pbnRNYW5hZ2VyLmpzIj48
L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTaWRlYmFy
UGFuZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iRWxlbWVudHNUcmVlT3V0bGluZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2lkZWJhclRyZWVFbGVtZW50LmpzIj48L3NjcmlwdD4KSW5k
ZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwkocmV2aXNpb24gNTk4
MjMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC00NjUsNiArNDY1LDggQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9u
KCkKICAgICAgICAgb3RoZXI6IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDYXRlZ29yeSgib3Ro
ZXIiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk90aGVyIiksICJyZ2IoMTg2LDE4NiwxODYpIikK
ICAgICB9OwogCisgICAgdGhpcy5icmVha3BvaW50TWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludE1hbmFnZXIoKTsKKwogICAgIHRoaXMucGFuZWxzID0ge307CiAgICAgdGhpcy5f
Y3JlYXRlUGFuZWxzKCk7CiAgICAgdGhpcy5fcGFuZWxIaXN0b3J5ID0gbmV3IFdlYkluc3BlY3Rv
ci5QYW5lbEhpc3RvcnkoKTsKQEAgLTEzMjEsOSArMTMyMyw4IEBAIFdlYkluc3BlY3Rvci5wYXJz
ZWRTY3JpcHRTb3VyY2UgPSBmdW5jdGkKIAogV2ViSW5zcGVjdG9yLnJlc3RvcmVkQnJlYWtwb2lu
dCA9IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlv
bikKIHsKLSAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludChz
b3VyY2VVUkwsIGxpbmUsIHNvdXJjZUlELCBjb25kaXRpb24pOwotICAgIGJyZWFrcG9pbnQuZW5h
YmxlZCA9IGVuYWJsZWQ7Ci0gICAgdGhpcy5wYW5lbHMuc2NyaXB0cy5hZGRCcmVha3BvaW50KGJy
ZWFrcG9pbnQpOworICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5icmVha3BvaW50TWFuYWdlci5j
cmVhdGVCcmVha3BvaW50KHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRp
dGlvbik7CisgICAgdGhpcy5icmVha3BvaW50TWFuYWdlci5hZGRCcmVha3BvaW50KGJyZWFrcG9p
bnQpOwogfQogCiBXZWJJbnNwZWN0b3IuZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZSA9IGZ1bmN0
aW9uKHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xpbmUsIGVycm9yTGluZSwgZXJyb3JNZXNz
YWdlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56578</attachid>
            <date>2010-05-20 03:07:41 -0700</date>
            <delta_ts>2010-06-02 02:27:32 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>save.breaks.diff</filename>
            <type>text/plain</type>
            <size>30109</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTgyNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjYgQEAKKzIwMTAtMDUtMjAgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU2F2ZSBicmVha3BvaW50cyBpbiBmcm9udGVuZCBzZXR0aW5ncyBhbmQgcmVzdG9yZSB0
aGVtIGFmdGVyIGJyb3dzZXIgcmVzdGFydC4KKyAgICAgICAgTW92ZSBtb3N0IG9mIGJyZWFrcG9p
bnQgY3JlYXRpb24gYW5kIG1vZGlmaWNhdGlvbiBsb2dpYyBmcm9tIHZpZXdzIHRvIEJyZWFrcG9p
bnRNYW5hZ2VyLmpzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQxOTAKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0Jy
ZWFrcG9pbnQuanM6IFJlbW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVh
a3BvaW50TWFuYWdlci5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dE1hbmFnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3Rv
dHlwZS5jcmVhdGVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5wcm90b3R5cGUuYWRkQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5yZXN0b3JlU2NyaXB0QnJl
YWtwb2ludHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3Rv
dHlwZS5nZXRCcmVha3BvaW50c0J5U291cmNlSUQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5nZXRCcmVha3BvaW50c0J5VVJMKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX3NhdmVCcmVha3BvaW50
VG9TZXR0aW5ncyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJv
dG90eXBlLl9yZW1vdmVCcmVha3BvaW50RnJvbVNldHRpbmdzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX3NhdmVCcmVha3BvaW50VG9CYWNrZW5k
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX3Jl
bW92ZUJyZWFrcG9pbnRGcm9tQmFja2VuZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuZ2V0IGVu
YWJsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLnNldCBl
bmFibGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5nZXQg
c291cmNlVGV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUu
c2V0IHNvdXJjZVRleHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90
eXBlLmdldCBsYWJlbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5
cGUuZ2V0IGlkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5n
ZXQgY29uZGl0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlw
ZS5zZXQgY29uZGl0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9p
bnRzU2lkZWJhclBhbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRl
YmFyUGFuZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5w
cm90b3R5cGUucmVzZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRzU2lkZWJh
clBhbmUucHJvdG90eXBlLl9icmVha3BvaW50QWRkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlLl9icmVha3BvaW50UmVtb3ZlZCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUuX2Jy
ZWFrcG9pbnRFbmFibGVDaGFuZ2VkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL09i
amVjdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLmRpc3BhdGNo
RXZlbnRUb0xpc3RlbmVycyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRW
aWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFZpZXcucHJvdG90eXBlLl9hZGRC
cmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuYWRkU2NyaXB0KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9icmVha3BvaW50QWRkZWQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX2JyZWFrcG9pbnRSZW1vdmVk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLmVkaXRTY3Jp
cHRTb3VyY2UubXljYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVs
LnByb3RvdHlwZS5lZGl0U2NyaXB0U291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3Jp
cHRzUGFuZWwucHJvdG90eXBlLl9zaG93U2NyaXB0T3JSZXNvdXJjZSk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZXR0
aW5ncy5wcm90b3R5cGUuX2xvYWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291
cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBl
Ll9jb250ZXh0TWVudSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3
LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLl9hZGRCcmVh
a3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZS5fcmVt
b3ZlQnJlYWtwb2ludCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJj
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IubG9hZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5yZXN0b3JlZEJyZWFrcG9pbnQpOgor
CiAyMDEwLTA1LTE5ICBWYW5nZWxpcyBLb2trZXZpcyAgPHZhbmdlbGlzQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNTk4
MjMpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzg0MCw3ICsz
ODQwLDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanMn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRzUGFuZWwuanMnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQm90dG9tVXBQcm9maWxlRGF0YUdyaWRUcmVl
LmpzJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanMnLAor
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMnLAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5q
cycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsYmFjay5qcycsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRlYmFyUGFuZS5qcycsCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDU5ODIzKQor
KysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpA
QCAtNDQyNjAsNyArNDQyNjAsNyBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUN
Ci0JCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxCcmVha3BvaW50Lmpz
Ig0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEJyZWFrcG9pbnRN
YW5hZ2VyLmpzIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQpJbmRleDogV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanMJKHJldmlzaW9uIDU5ODIzKQor
KysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLVdlYkluc3BlY3Rvci5CcmVha3BvaW50ID0gZnVuY3Rpb24odXJsLCBsaW5lLCBz
b3VyY2VJRCwgY29uZGl0aW9uKQotewotICAgIHRoaXMudXJsID0gdXJsOwotICAgIHRoaXMubGlu
ZSA9IGxpbmU7Ci0gICAgdGhpcy5zb3VyY2VJRCA9IHNvdXJjZUlEOwotICAgIHRoaXMuX2VuYWJs
ZWQgPSB0cnVlOwotICAgIHRoaXMuX3NvdXJjZVRleHQgPSAiIjsKLSAgICB0aGlzLl9jb25kaXRp
b24gPSBjb25kaXRpb24gfHwgIiI7Ci19Ci0KLVdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3Rv
dHlwZSA9IHsKLSAgICBnZXQgZW5hYmxlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5f
ZW5hYmxlZDsKLSAgICB9LAotCi0gICAgc2V0IGVuYWJsZWQoeCkKLSAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLl9lbmFibGVkID09PSB4KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRo
aXMuX2VuYWJsZWQgPSB4OwotCi0gICAgICAgIGlmICh0aGlzLl9lbmFibGVkKQotICAgICAgICAg
ICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImVuYWJsZWQiKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImRpc2FibGVkIik7
Ci0gICAgfSwKLQotICAgIGdldCBzb3VyY2VUZXh0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLl9zb3VyY2VUZXh0OwotICAgIH0sCi0KLSAgICBzZXQgc291cmNlVGV4dCh0ZXh0KQotICAg
IHsKLSAgICAgICAgdGhpcy5fc291cmNlVGV4dCA9IHRleHQ7Ci0gICAgICAgIHRoaXMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKCJ0ZXh0LWNoYW5nZWQiKTsKLSAgICB9LAotCi0gICAgZ2V0IGxh
YmVsKCkKLSAgICB7Ci0gICAgICAgIHZhciBkaXNwbGF5TmFtZSA9ICh0aGlzLnVybCA/IFdlYklu
c3BlY3Rvci5kaXNwbGF5TmFtZUZvclVSTCh0aGlzLnVybCkgOiBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIihwcm9ncmFtKSIpKTsKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlOYW1lICsgIjoiICsgdGhp
cy5saW5lOwotICAgIH0sCi0KLSAgICBnZXQgaWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuc291cmNlSUQgKyAiOiIgKyB0aGlzLmxpbmU7Ci0gICAgfSwKLQotICAgIGdldCBjb25kaXRp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbjsKLSAgICB9LAotCi0g
ICAgc2V0IGNvbmRpdGlvbihjKQotICAgIHsKLSAgICAgICAgYyA9IGMgfHwgIiI7Ci0gICAgICAg
IGlmICh0aGlzLl9jb25kaXRpb24gPT09IGMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgdGhpcy5fY29uZGl0aW9uID0gYzsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoImNvbmRpdGlvbi1jaGFuZ2VkIik7Ci0KLSAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCkK
LSAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludCh0aGlzLnNvdXJjZUlE
LCB0aGlzLmxpbmUsIHRoaXMuZW5hYmxlZCwgdGhpcy5jb25kaXRpb24pOwotICAgIH0KLX0KLQot
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rv
ci5PYmplY3QucHJvdG90eXBlOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Jy
ZWFrcG9pbnRNYW5hZ2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIgPSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5f
YnJlYWtwb2ludHMgPSB7fTsKK30KKworV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKKyAgICBjcmVhdGVCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgc291
cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pCisgICAgeworICAgICAgICByZXR1cm4g
bmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50KHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVu
YWJsZWQsIGNvbmRpdGlvbiwgdGhpcyk7CisgICAgfSwKKworICAgIGFkZEJyZWFrcG9pbnQ6IGZ1
bmN0aW9uKGJyZWFrcG9pbnQsIHNraXBTYXZlVG9TZXR0aW5ncykKKyAgICB7CisgICAgICAgIGlm
ICh0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSkKKyAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSA9IGJyZWFrcG9pbnQ7Cisg
ICAgICAgIGlmICghc2tpcFNhdmVUb1NldHRpbmdzKQorICAgICAgICAgICAgdGhpcy5fc2F2ZUJy
ZWFrcG9pbnRUb1NldHRpbmdzKGJyZWFrcG9pbnQpOworICAgICAgICB0aGlzLl9zYXZlQnJlYWtw
b2ludFRvQmFja2VuZChicmVha3BvaW50KTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoImJyZWFrcG9pbnQtYWRkZWQiLCBicmVha3BvaW50KTsKKyAgICB9LCAgICAKKwor
ICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgeworICAgICAg
ICBpZiAoIShicmVha3BvaW50LmlkIGluIHRoaXMuX2JyZWFrcG9pbnRzKSkKKyAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF07
CisgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRGcm9tU2V0dGluZ3MoYnJlYWtwb2ludCk7
CisgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRGcm9tQmFja2VuZChicmVha3BvaW50KTsK
KyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImJyZWFrcG9pbnQtcmVtb3Zl
ZCIsIGJyZWFrcG9pbnQpOworICAgIH0sCisgICAgCisgICAgcmVzdG9yZVNjcmlwdEJyZWFrcG9p
bnRzOiBmdW5jdGlvbihzb3VyY2VJRCwgc291cmNlVVJMKQorICAgIHsKKyAgICAgICAgaWYgKCEo
c291cmNlVVJMIGluIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5icmVha3BvaW50cykpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5zZXR0
aW5ncy5icmVha3BvaW50c1tzb3VyY2VVUkxdOworICAgICAgICBmb3IgKHZhciBsaW5lIGluIGJy
ZWFrcG9pbnRzKSB7CisgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuY3JlYXRlQnJl
YWtwb2ludChzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBicmVha3BvaW50c1tsaW5lXS5lbmFi
bGVkLCAgYnJlYWtwb2ludHNbbGluZV0uY29uZGl0aW9uKTsgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHRoaXMuYWRkQnJlYWtwb2ludChicmVha3BvaW50LCB0cnVlKTsKKyAgICAgICAgfQorICAg
IH0sICAgIAorCisgICAgZ2V0QnJlYWtwb2ludHNCeVNvdXJjZUlEOiBmdW5jdGlvbihzb3VyY2VJ
RCkgeworICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaWQg
aW4gdGhpcy5fYnJlYWtwb2ludHMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50
c1tpZF0uc291cmNlSUQgPT09IHNvdXJjZUlEKQorICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRz
LnB1c2godGhpcy5fYnJlYWtwb2ludHNbaWRdKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
YnJlYWtwb2ludHM7CisgICAgfSwgICAgCisKKyAgICBnZXRCcmVha3BvaW50c0J5VVJMOiBmdW5j
dGlvbih1cmwpIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gW107CisgICAgICAgIGZvciAo
dmFyIGlkIGluIHRoaXMuX2JyZWFrcG9pbnRzKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fYnJl
YWtwb2ludHNbaWRdLnVybCA9PT0gdXJsKQorICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzLnB1
c2godGhpcy5fYnJlYWtwb2ludHNbaWRdKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnJl
YWtwb2ludHM7ICAgICAgICAKKyAgICB9LAorCisgICAgX3NhdmVCcmVha3BvaW50VG9TZXR0aW5n
czogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICB7CisgICAgICAgIGlmICghYnJlYWtwb2ludC51
cmwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYklu
c3BlY3Rvci5zZXR0aW5ncy5icmVha3BvaW50czsKKyAgICAgICAgaWYgKCEoYnJlYWtwb2ludC51
cmwgaW4gYnJlYWtwb2ludHMpKQorICAgICAgICAgICAgYnJlYWtwb2ludHNbYnJlYWtwb2ludC51
cmxdID0ge307CisgICAgICAgIGJyZWFrcG9pbnRzW2JyZWFrcG9pbnQudXJsXVticmVha3BvaW50
LmxpbmVdID0ge2VuYWJsZWQ6IGJyZWFrcG9pbnQuZW5hYmxlZCwgY29uZGl0aW9uOiBicmVha3Bv
aW50LmNvbmRpdGlvbn07CisgICAgICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5icmVha3BvaW50
cyA9IGJyZWFrcG9pbnRzOworICAgIH0sCisKKyAgICBfcmVtb3ZlQnJlYWtwb2ludEZyb21TZXR0
aW5nczogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICB7CisgICAgICAgIHZhciBicmVha3BvaW50
cyA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5icmVha3BvaW50czsKKyAgICAgICAgaWYgKCEoYnJl
YWtwb2ludC51cmwgaW4gYnJlYWtwb2ludHMpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBkZWxldGUgYnJlYWtwb2ludHNbYnJlYWtwb2ludC51cmxdW2JyZWFrcG9pbnQubGluZV07Cisg
ICAgICAgIHZhciBpc0VtcHR5ID0gdHJ1ZTsKKyAgICAgICAgZm9yICh2YXIgbGluZSBpbiBicmVh
a3BvaW50c1ticmVha3BvaW50LnVybF0pIHsKKyAgICAgICAgICAgIGlzRW1wdHkgPSBmYWxzZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChpc0VtcHR5KQorICAg
ICAgICAgICAgZGVsZXRlIGJyZWFrcG9pbnRzW2JyZWFrcG9pbnQudXJsXTsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLnNldHRpbmdzLmJyZWFrcG9pbnRzID0gYnJlYWtwb2ludHM7CisgICAgfSwKKwor
ICAgIF9zYXZlQnJlYWtwb2ludFRvQmFja2VuZDogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICB7
CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJj
ZUlELCBicmVha3BvaW50LmxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25k
aXRpb24pOworICAgIH0sCisKKyAgICBfcmVtb3ZlQnJlYWtwb2ludEZyb21CYWNrZW5kOiBmdW5j
dGlvbihicmVha3BvaW50KQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVC
cmVha3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQubGluZSk7CisgICAgfQor
fQorCitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9
IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dCA9IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlv
biwgbWFuYWdlcikKK3sKKyAgICB0aGlzLnVybCA9IHNvdXJjZVVSTDsKKyAgICB0aGlzLmxpbmUg
PSBsaW5lOworICAgIHRoaXMuc291cmNlSUQgPSBzb3VyY2VJRDsKKyAgICB0aGlzLl9lbmFibGVk
ID0gZW5hYmxlZDsKKyAgICB0aGlzLl9jb25kaXRpb24gPSBjb25kaXRpb24gfHwgIiI7CisgICAg
dGhpcy5fc291cmNlVGV4dCA9ICIiOworICAgIHRoaXMuX21hbmFnZXIgPSBtYW5hZ2VyOworfQor
CitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CisgICAgZ2V0IGVuYWJsZWQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7CisgICAgfSwKKworICAgIHNl
dCBlbmFibGVkKHgpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZW5hYmxlZCA9PT0geCkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9lbmFibGVkID0geDsKKyAgICAgICAg
dGhpcy5fbWFuYWdlci5fc2F2ZUJyZWFrcG9pbnRUb1NldHRpbmdzKHRoaXMpOworICAgICAgICB0
aGlzLl9tYW5hZ2VyLl9zYXZlQnJlYWtwb2ludFRvQmFja2VuZCh0aGlzKTsKKyAgICAgICAgaWYg
KHRoaXMuX2VuYWJsZWQpCisgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cygiZW5hYmxlZCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycygiZGlzYWJsZWQiKTsKKyAgICB9LAorCisgICAgZ2V0IHNvdXJjZVRleHQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZVRleHQ7CisgICAgfSwKKworICAg
IHNldCBzb3VyY2VUZXh0KHRleHQpCisgICAgeworICAgICAgICB0aGlzLl9zb3VyY2VUZXh0ID0g
dGV4dDsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInRleHQtY2hhbmdl
ZCIpOworICAgIH0sCisKKyAgICBnZXQgbGFiZWwoKQorICAgIHsKKyAgICAgICAgdmFyIGRpc3Bs
YXlOYW1lID0gKHRoaXMudXJsID8gV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yVVJMKHRoaXMu
dXJsKSA6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKHByb2dyYW0pIikpOworICAgICAgICByZXR1
cm4gZGlzcGxheU5hbWUgKyAiOiIgKyB0aGlzLmxpbmU7CisgICAgfSwKKworICAgIGdldCBpZCgp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VJRCArICI6IiArIHRoaXMubGluZTsK
KyAgICB9LAorCisgICAgZ2V0IGNvbmRpdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5fY29uZGl0aW9uOworICAgIH0sCisKKyAgICBzZXQgY29uZGl0aW9uKGMpCisgICAgeworICAg
ICAgICBjID0gYyB8fCAiIjsKKyAgICAgICAgaWYgKHRoaXMuX2NvbmRpdGlvbiA9PT0gYykKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9jb25kaXRpb24gPSBjOworICAgICAg
ICB0aGlzLl9tYW5hZ2VyLl9zYXZlQnJlYWtwb2ludFRvU2V0dGluZ3ModGhpcyk7CisgICAgICAg
IGlmICh0aGlzLmVuYWJsZWQpCisgICAgICAgICAgICB0aGlzLl9tYW5hZ2VyLl9zYXZlQnJlYWtw
b2ludFRvQmFja2VuZCh0aGlzKTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoImNvbmRpdGlvbi1jaGFuZ2VkIik7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7
CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFu
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2lu
dHNTaWRlYmFyUGFuZS5qcwkocmV2aXNpb24gNTk4MjMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjcs
OCArMjcsNiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZSA9IGZ1CiB7CiAg
ICAgV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lLmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJCcmVha3BvaW50cyIpKTsKIAotICAgIHRoaXMuYnJlYWtwb2ludHMgPSB7fTsKLQogICAg
IHRoaXMubGlzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvbCIpOwogICAgIHRo
aXMubGlzdEVsZW1lbnQuY2xhc3NOYW1lID0gImJyZWFrcG9pbnQtbGlzdCI7CiAKQEAgLTM3LDEy
ICszNSwxNCBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZSA9IGZ1CiAgICAg
dGhpcy5lbXB0eUVsZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk5v
IEJyZWFrcG9pbnRzIik7CiAKICAgICB0aGlzLmJvZHlFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMu
ZW1wdHlFbGVtZW50KTsKKworICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRF
dmVudExpc3RlbmVyKCJicmVha3BvaW50LWFkZGVkIiwgdGhpcy5fYnJlYWtwb2ludEFkZGVkLCB0
aGlzKTsKKyAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5l
cigiYnJlYWtwb2ludC1yZW1vdmVkIiwgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWQsIHRoaXMpOyAg
ICAKIH0KIAogV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlID0g
ewogICAgIHJlc2V0OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlzLmJyZWFrcG9pbnRz
ID0ge307CiAgICAgICAgIHRoaXMubGlzdEVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKICAgICAg
ICAgaWYgKHRoaXMubGlzdEVsZW1lbnQucGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgdGhp
cy5ib2R5RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmxpc3RFbGVtZW50KTsKQEAgLTUwLDEyICs1
MCw5IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3QKICAgICAgICAg
fQogICAgIH0sCiAKLSAgICBhZGRCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQorICAg
IF9icmVha3BvaW50QWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAgICAgaWYgKHRo
aXMuYnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF0pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgdGhpcy5icmVha3BvaW50c1ticmVha3BvaW50LmlkXSA9IGJyZWFrcG9pbnQ7CisgICAg
ICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQuZGF0YTsKIAogICAgICAgICBicmVha3BvaW50LmFk
ZEV2ZW50TGlzdGVuZXIoImVuYWJsZWQiLCB0aGlzLl9icmVha3BvaW50RW5hYmxlQ2hhbmdlZCwg
dGhpcyk7CiAgICAgICAgIGJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigiZGlzYWJsZWQiLCB0
aGlzLl9icmVha3BvaW50RW5hYmxlQ2hhbmdlZCwgdGhpcyk7CkBAIC02Nyw4ICs2NCw2IEBAIFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3QKICAgICAgICAgICAgIHRoaXMu
Ym9keUVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbXB0eUVsZW1lbnQpOwogICAgICAgICAgICAg
dGhpcy5ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmxpc3RFbGVtZW50KTsKICAgICAgICAg
fQotCi0gICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludChicmVha3BvaW50LnNv
dXJjZUlELCBicmVha3BvaW50LmxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5j
b25kaXRpb24pOwogICAgIH0sCiAKICAgICBfYXBwZW5kQnJlYWtwb2ludEVsZW1lbnQ6IGZ1bmN0
aW9uKGJyZWFrcG9pbnQpCkBAIC0xMjEsMTEgKzExNiw5IEBAIFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50c1NpZGViYXJQYW5lLnByb3QKICAgICAgICAgdGhpcy5saXN0RWxlbWVudC5hcHBlbmRDaGls
ZChicmVha3BvaW50RWxlbWVudCk7CiAgICAgfSwKIAotICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1
bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgX2JyZWFrcG9pbnRSZW1vdmVkOiBmdW5jdGlvbihldmVu
dCkKICAgICB7Ci0gICAgICAgIGlmICghdGhpcy5icmVha3BvaW50c1ticmVha3BvaW50LmlkXSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVsZXRlIHRoaXMuYnJlYWtwb2ludHNbYnJl
YWtwb2ludC5pZF07CisgICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQuZGF0YTsKIAogICAg
ICAgICBicmVha3BvaW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVuYWJsZWQiLCBudWxsLCB0aGlz
KTsKICAgICAgICAgYnJlYWtwb2ludC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNhYmxlZCIsIG51
bGwsIHRoaXMpOwpAQCAtMTM4LDggKzEzMSw2IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50c1Np
ZGViYXJQYW5lLnByb3QKICAgICAgICAgICAgIHRoaXMuYm9keUVsZW1lbnQucmVtb3ZlQ2hpbGQo
dGhpcy5saXN0RWxlbWVudCk7CiAgICAgICAgICAgICB0aGlzLmJvZHlFbGVtZW50LmFwcGVuZENo
aWxkKHRoaXMuZW1wdHlFbGVtZW50KTsKICAgICAgICAgfQotCi0gICAgICAgIEluc3BlY3RvckJh
Y2tlbmQucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50Lmxp
bmUpOwogICAgIH0sCiAKICAgICBfYnJlYWtwb2ludEVuYWJsZUNoYW5nZWQ6IGZ1bmN0aW9uKGV2
ZW50KQpAQCAtMTQ4LDcgKzEzOSw2IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50c1NpZGViYXJQ
YW5lLnByb3QKIAogICAgICAgICB2YXIgY2hlY2tib3ggPSBicmVha3BvaW50Ll9icmVha3BvaW50
TGlzdEVsZW1lbnQuZmlyc3RDaGlsZDsKICAgICAgICAgY2hlY2tib3guY2hlY2tlZCA9IGJyZWFr
cG9pbnQuZW5hYmxlZDsKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRCcmVha3BvaW50KGJy
ZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQubGluZSwgYnJlYWtwb2ludC5lbmFibGVkLCBi
cmVha3BvaW50LmNvbmRpdGlvbik7CiAgICAgfSwKIAogICAgIF9icmVha3BvaW50VGV4dENoYW5n
ZWQ6IGZ1bmN0aW9uKGV2ZW50KQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09i
amVjdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0
LmpzCShyZXZpc2lvbiA1OTgyMykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PYmpl
Y3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgV2ViSW5zcGVjdG9yLk9iamVj
dC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fbGlzdGVuZXJzW2V2ZW50
VHlwZV07CiAgICAgfSwKIAotICAgIGRpc3BhdGNoRXZlbnRUb0xpc3RlbmVyczogZnVuY3Rpb24o
ZXZlbnRUeXBlKSB7CisgICAgZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzOiBmdW5jdGlvbihldmVu
dFR5cGUsIGV2ZW50RGF0YSkgewogICAgICAgICBpZiAoISgiX2xpc3RlbmVycyIgaW4gdGhpcykg
fHwgIShldmVudFR5cGUgaW4gdGhpcy5fbGlzdGVuZXJzKSkKICAgICAgICAgICAgIHJldHVybjsK
IApAQCAtNjYsNyArNjYsNyBAQCBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7CiAgICAgICAgIH0KIAotICAg
ICAgICB2YXIgZXZlbnQgPSB7dGFyZ2V0OiB0aGlzLCB0eXBlOiBldmVudFR5cGUsIGRlZmF1bHRQ
cmV2ZW50ZWQ6IGZhbHNlfTsKKyAgICAgICAgdmFyIGV2ZW50ID0ge3RhcmdldDogdGhpcywgdHlw
ZTogZXZlbnRUeXBlLCBkYXRhOiBldmVudERhdGEsIGRlZmF1bHRQcmV2ZW50ZWQ6IGZhbHNlfTsK
ICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uID0gc3RvcFByb3BhZ2F0aW9uOwogICAgICAg
ICBldmVudC5wcmV2ZW50RGVmYXVsdCA9IHByZXZlbnREZWZhdWx0OwogCkluZGV4OiBXZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcwkocmV2aXNpb24gNTk4MjMpCisrKyBX
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcwkod29ya2luZyBjb3B5KQpA
QCAtNzMsOCArNzMsOCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0Vmlldy5wcm90b3R5cGUgPSB7CiAK
ICAgICBfYWRkQnJlYWtwb2ludDogZnVuY3Rpb24obGluZSkKICAgICB7Ci0gICAgICAgIHZhciBi
cmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50KHRoaXMuc2NyaXB0LnNvdXJj
ZVVSTCwgbGluZSwgdGhpcy5zY3JpcHQuc291cmNlSUQpOwotICAgICAgICBXZWJJbnNwZWN0b3Iu
cGFuZWxzLnNjcmlwdHMuYWRkQnJlYWtwb2ludChicmVha3BvaW50KTsKKyAgICAgICAgdmFyIGJy
ZWFrcG9pbnQgPSBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuY3JlYXRlQnJlYWtwb2lu
dCh0aGlzLnNjcmlwdC5zb3VyY2VJRCwgdGhpcy5zY3JpcHQuc291cmNlVVJMLCBsaW5lLCB0cnVl
LCAiIik7CisgICAgICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRCcmVha3Bv
aW50KGJyZWFrcG9pbnQpOwogICAgIH0sCiAKICAgICBfZWRpdExpbmVDb21wbGV0ZTogZnVuY3Rp
b24obmV3Qm9keSkKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFu
ZWwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQ
YW5lbC5qcwkocmV2aXNpb24gNTk4MjMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
U2NyaXB0c1BhbmVsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDEwIEBAIFdlYklu
c3BlY3Rvci5TY3JpcHRzUGFuZWwgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5fZGVidWdnZXJFbmFi
bGVkID0gUHJlZmVyZW5jZXMuZGVidWdnZXJBbHdheXNFbmFibGVkOwogICAgIGlmIChQcmVmZXJl
bmNlcy5kZWJ1Z2dlckFsd2F5c0VuYWJsZWQpCiAgICAgICAgIHRoaXMuX2F0dGFjaERlYnVnZ2Vy
V2hlblNob3duID0gdHJ1ZTsKKworICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5h
ZGRFdmVudExpc3RlbmVyKCJicmVha3BvaW50LWFkZGVkIiwgdGhpcy5fYnJlYWtwb2ludEFkZGVk
LCB0aGlzKTsKKyAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRMaXN0
ZW5lcigiYnJlYWtwb2ludC1yZW1vdmVkIiwgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWQsIHRoaXMp
OworCiAgICAgdGhpcy5yZXNldCgpOwogfQogCkBAIC0yNTcsNiArMjYxLDggQEAgV2ViSW5zcGVj
dG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgdGhpcy5fYWRkU2NyaXB0VG9GaWxlc01lbnUoc2NyaXB0KTsKKworICAgICAgICBX
ZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIucmVzdG9yZVNjcmlwdEJyZWFrcG9pbnRzKHNv
dXJjZUlELCBzb3VyY2VVUkwpOwogICAgIH0sCiAKICAgICBfcmVzb3VyY2VMb2FkaW5nRmluaXNo
ZWQ6IGZ1bmN0aW9uKGUpCkBAIC0yODQsMTMgKzI5MCwxMyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0
c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgZGVsZXRlIHJlc291cmNlLl9zY3JpcHRzUGVu
ZGluZ1Jlc291cmNlTG9hZDsKICAgICB9LAogCi0gICAgYWRkQnJlYWtwb2ludDogZnVuY3Rpb24o
YnJlYWtwb2ludCkKKyAgICBfYnJlYWtwb2ludEFkZGVkOiBmdW5jdGlvbihldmVudCkKICAgICB7
CisgICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQuZGF0YTsKKwogICAgICAgICBpZiAoIXRo
aXMuYnJlYWtwb2ludHNBY3RpdmF0ZWQpCiAgICAgICAgICAgICB0aGlzLl90b2dnbGVCcmVha3Bv
aW50c0NsaWNrZWQoKTsKIAotICAgICAgICB0aGlzLnNpZGViYXJQYW5lcy5icmVha3BvaW50cy5h
ZGRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwotCiAgICAgICAgIHZhciBzb3VyY2VGcmFtZTsKICAg
ICAgICAgaWYgKGJyZWFrcG9pbnQudXJsKSB7CiAgICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSBX
ZWJJbnNwZWN0b3IucmVzb3VyY2VVUkxNYXBbYnJlYWtwb2ludC51cmxdOwpAQCAtMzA3LDkgKzMx
Myw5IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgc291cmNlRnJhbWUuYWRkQnJlYWtwb2ludChicmVha3BvaW50KTsKICAgICB9LAogCi0gICAg
cmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICBfYnJlYWtwb2ludFJl
bW92ZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMu
YnJlYWtwb2ludHMucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50KTsKKyAgICAgICAgdmFyIGJy
ZWFrcG9pbnQgPSBldmVudC5kYXRhOwogCiAgICAgICAgIHZhciBzb3VyY2VGcmFtZTsKICAgICAg
ICAgaWYgKGJyZWFrcG9pbnQudXJsKSB7CkBAIC0zMzgsMjIgKzM0NCwxOCBAQCBXZWJJbnNwZWN0
b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICAvLyBOZWVkIHRvIGNsZWFyIGJyZWFrcG9pbnRzIGFuZCByZS1jcmVhdGUgdGhlbSBsYXRl
ciB3aGVuIGVkaXRpbmcgc291cmNlLgotICAgICAgICB2YXIgYnJlYWtwb2ludHNQYW5lbCA9IHRo
aXMuc2lkZWJhclBhbmVzLmJyZWFrcG9pbnRzOwotICAgICAgICB2YXIgbmV3QnJlYWtwb2ludHMg
PSBbXTsKLSAgICAgICAgZm9yICh2YXIgaWQgaW4gYnJlYWtwb2ludHNQYW5lbC5icmVha3BvaW50
cykgewotICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1BhbmVsLmJyZWFr
cG9pbnRzW2lkXTsKLSAgICAgICAgICAgIGJyZWFrcG9pbnRzUGFuZWwucmVtb3ZlQnJlYWtwb2lu
dChicmVha3BvaW50KTsKLSAgICAgICAgICAgIG5ld0JyZWFrcG9pbnRzLnB1c2goYnJlYWtwb2lu
dCk7Ci0gICAgICAgIH0KKyAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gV2ViSW5zcGVjdG9yLmJy
ZWFrcG9pbnRNYW5hZ2VyLmdldEJyZWFrcG9pbnRzQnlTb3VyY2VJRChzb3VyY2VJRCk7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpCisgICAgICAg
ICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIucmVtb3ZlQnJlYWtwb2ludChicmVh
a3BvaW50c1tpXSk7CiAKICAgICAgICAgZnVuY3Rpb24gbXljYWxsYmFjayhuZXdCb2R5KQogICAg
ICAgICB7CiAgICAgICAgICAgICBjYWxsYmFjayhuZXdCb2R5KTsKLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbmV3QnJlYWtwb2ludHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgYnJlYWtwb2ludCA9IG5ld0JyZWFrcG9pbnRzW2ldOworICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
ICAgIHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludHNbaV07CiAgICAgICAgICAgICAgICAgaWYg
KGJyZWFrcG9pbnQubGluZSA+PSBsaW5lKQogICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50
LmxpbmUgKz0gbGluZXNDb3VudFRvU2hpZnQ7Ci0gICAgICAgICAgICAgICAgdGhpcy5hZGRCcmVh
a3BvaW50KGJyZWFrcG9pbnQpOworICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5icmVha3Bv
aW50TWFuYWdlci5hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9OwogICAgICAgICB2YXIgY2FsbGJhY2tJZCA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay53
cmFwKG15Y2FsbGJhY2suYmluZCh0aGlzKSkKQEAgLTYxMSwxNCArNjEzLDEwIEBAIFdlYkluc3Bl
Y3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHJldHVybiBu
dWxsOwogICAgICAgICAgICAgdmlldyA9IFdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLnJl
c291cmNlVmlld0ZvclJlc291cmNlKHNjcmlwdE9yUmVzb3VyY2UpOwogICAgICAgICAgICAgdmll
dy5oZWFkZXJzVmlzaWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0g
dGhpcy5zaWRlYmFyUGFuZXMuYnJlYWtwb2ludHMuYnJlYWtwb2ludHM7Ci0gICAgICAgICAgICBm
b3IgKHZhciBicmVha3BvaW50SWQgaW4gYnJlYWtwb2ludHMpIHsKLSAgICAgICAgICAgICAgICB2
YXIgYnJlYWtwb2ludCA9IGJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF07Ci0gICAgICAgICAgICAg
ICAgaWYgKGJyZWFrcG9pbnQudXJsID09PSBzY3JpcHRPclJlc291cmNlLnVybCkgewotICAgICAg
ICAgICAgICAgICAgICB2YXIgc291cmNlRnJhbWUgPSB0aGlzLl9zb3VyY2VGcmFtZUZvclNjcmlw
dE9yUmVzb3VyY2Uoc2NyaXB0T3JSZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJj
ZUZyYW1lLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHNvdXJjZUZyYW1lID0gdGhpcy5fc291cmNlRnJh
bWVGb3JTY3JpcHRPclJlc291cmNlKHNjcmlwdE9yUmVzb3VyY2UpOworICAgICAgICAgICAgdmFy
IGJyZWFrcG9pbnRzID0gV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmdldEJyZWFrcG9p
bnRzQnlVUkwoc2NyaXB0T3JSZXNvdXJjZS51cmwpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBzb3VyY2VG
cmFtZS5hZGRCcmVha3BvaW50KGJyZWFrcG9pbnRzW2ldKTsKICAgICAgICAgfSBlbHNlIGlmIChz
Y3JpcHRPclJlc291cmNlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNjcmlwdCkKICAgICAgICAg
ICAgIHZpZXcgPSB0aGlzLnNjcmlwdFZpZXdGb3JTY3JpcHQoc2NyaXB0T3JSZXNvdXJjZSk7CiAK
SW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMJKHJldmlzaW9uIDU5
ODIzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC03Miw2ICs3Miw3IEBAIFdlYkluc3BlY3Rvci5TZXR0aW5ncy5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHRoaXMuX2luc3RhbGxTZXR0aW5nKCJzaG93VXNlckFnZW50U3R5bGVzIiwg
InNob3ctdXNlci1hZ2VudC1zdHlsZXMiLCB0cnVlKTsKICAgICAgICAgdGhpcy5faW5zdGFsbFNl
dHRpbmcoInJlc291cmNlVmlld1RhYiIsICJyZXNvdXJjZS12aWV3LXRhYiIsICJjb250ZW50Iik7
CiAgICAgICAgIHRoaXMuX2luc3RhbGxTZXR0aW5nKCJjb25zb2xlSGlzdG9yeSIsICJjb25zb2xl
LWhpc3RvcnkiLCBbXSk7CisgICAgICAgIHRoaXMuX2luc3RhbGxTZXR0aW5nKCJicmVha3BvaW50
cyIsICJicmVha3BvaW50cyIsIHt9KTsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoImxvYWRlZCIpOwogICAgIH0sCiAKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Tb3VyY2VGcmFtZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlRnJhbWUuanMJKHJldmlzaW9uIDU5ODIzKQorKysgV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MjgsNyArNDI4
LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBZGQgQ29uZGl0
aW9uYWwgQnJlYWtwb2ludOKApiIpLCBhZGRDb25kaXRpb25hbEJyZWFrcG9pbnQuYmluZCh0aGlz
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlzIHJvdyBoYXMgYSBicmVh
a3BvaW50LCB3ZSB3YW50IHRvIHNob3cgZWRpdCBhbmQgcmVtb3ZlIGJyZWFrcG9pbnQsIGFuZCBl
aXRoZXIgZGlzYWJsZSBvciBlbmFibGUuCi0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJ
dGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVtb3ZlIEJyZWFrcG9pbnQiKSwgV2ViSW5zcGVj
dG9yLnBhbmVscy5zY3JpcHRzLnJlbW92ZUJyZWFrcG9pbnQuYmluZChXZWJJbnNwZWN0b3IucGFu
ZWxzLnNjcmlwdHMsIGJyZWFrcG9pbnQpKTsKKyAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVu
ZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZW1vdmUgQnJlYWtwb2ludCIpLCB0aGlzLl9y
ZW1vdmVCcmVha3BvaW50RGVsZWdhdGUuYmluZCh0aGlzLCBicmVha3BvaW50KSk7CiAgICAgICAg
ICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRWRpdCBC
cmVha3BvaW504oCmIiksIHRoaXMuX2VkaXRCcmVha3BvaW50Q29uZGl0aW9uLmJpbmQodGhpcywg
YnJlYWtwb2ludCkpOwogICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuZW5hYmxlZCkKICAgICAg
ICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygi
RGlzYWJsZSBCcmVha3BvaW50IiksIGZ1bmN0aW9uKCkgeyBicmVha3BvaW50LmVuYWJsZWQgPSBm
YWxzZTsgfSk7CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5q
cwkocmV2aXNpb24gNTk4MjMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNl
Vmlldy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTEyLDE2ICsxMTIsMTMgQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZVZpZXcucHJvdG90eXBlID0gewogICAgIF9hZGRCcmVha3BvaW50OiBmdW5jdGlvbihs
aW5lKQogICAgIHsKICAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNlSURGb3JMaW5l
KGxpbmUpOwotICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzKSB7Ci0gICAg
ICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCh0aGlz
LnJlc291cmNlLnVybCwgbGluZSwgc291cmNlSUQpOwotICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LnBhbmVscy5zY3JpcHRzLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgdmFyIGJyZWFrcG9pbnQgPSBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuY3Jl
YXRlQnJlYWtwb2ludChzb3VyY2VJRCwgdGhpcy5yZXNvdXJjZS51cmwsIGxpbmUsIHRydWUsICIi
KTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEJyZWFrcG9pbnQo
YnJlYWtwb2ludCk7CiAgICAgfSwKIAogICAgIF9yZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihi
cmVha3BvaW50KQogICAgIHsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0
cykKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5yZW1vdmVCcmVha3Bv
aW50KGJyZWFrcG9pbnQpOworICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIu
cmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50KTsKICAgICB9LAogCiAgICAgX2VkaXRMaW5lOiBm
dW5jdGlvbihsaW5lLCBuZXdDb250ZW50KQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1dlYktpdC5xcmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1dlYktpdC5xcmMJKHJldmlzaW9uIDU5ODIzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1dlYktpdC5xcmMJKHdvcmtpbmcgY29weSkKQEAgLTgsNyArOCw3IEBACiAgICAgPGZpbGU+
QXVkaXRSdWxlcy5qczwvZmlsZT4KICAgICA8ZmlsZT5BdWRpdHNQYW5lbC5qczwvZmlsZT4KICAg
ICA8ZmlsZT5Cb3R0b21VcFByb2ZpbGVEYXRhR3JpZFRyZWUuanM8L2ZpbGU+Ci0gICAgPGZpbGU+
QnJlYWtwb2ludC5qczwvZmlsZT4KKyAgICA8ZmlsZT5CcmVha3BvaW50TWFuYWdlci5qczwvZmls
ZT4KICAgICA8ZmlsZT5CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzPC9maWxlPgogICAgIDxmaWxl
PkNhbGxiYWNrLmpzPC9maWxlPgogICAgIDxmaWxlPkNhbGxTdGFja1NpZGViYXJQYW5lLmpzPC9m
aWxlPgpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAko
cmV2aXNpb24gNTk4MjMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQTwogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9IkRhdGFHcmlkLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJDb29raWVJdGVtc1ZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNjcmlwdC5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQnJlYWtwb2ludC5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQnJlYWtwb2ludE1hbmFn
ZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IlNpZGViYXJQYW5lLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJFbGVtZW50c1RyZWVPdXRsaW5lLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTaWRlYmFyVHJlZUVsZW1lbnQuanMiPjwvc2Ny
aXB0PgpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCShyZXZp
c2lvbiA1OTgyMykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2NSw2ICs0NjUsOCBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0g
ZnVuY3Rpb24oKQogICAgICAgICBvdGhlcjogbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZUNhdGVn
b3J5KCJvdGhlciIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiT3RoZXIiKSwgInJnYigxODYsMTg2
LDE4NikiKQogICAgIH07CiAKKyAgICB0aGlzLmJyZWFrcG9pbnRNYW5hZ2VyID0gbmV3IFdlYklu
c3BlY3Rvci5CcmVha3BvaW50TWFuYWdlcigpOworCiAgICAgdGhpcy5wYW5lbHMgPSB7fTsKICAg
ICB0aGlzLl9jcmVhdGVQYW5lbHMoKTsKICAgICB0aGlzLl9wYW5lbEhpc3RvcnkgPSBuZXcgV2Vi
SW5zcGVjdG9yLlBhbmVsSGlzdG9yeSgpOwpAQCAtMTMyMSw5ICsxMzIzLDggQEAgV2ViSW5zcGVj
dG9yLnBhcnNlZFNjcmlwdFNvdXJjZSA9IGZ1bmN0aQogCiBXZWJJbnNwZWN0b3IucmVzdG9yZWRC
cmVha3BvaW50ID0gZnVuY3Rpb24oc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwg
Y29uZGl0aW9uKQogewotICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50KHNvdXJjZVVSTCwgbGluZSwgc291cmNlSUQsIGNvbmRpdGlvbik7Ci0gICAgYnJlYWtw
b2ludC5lbmFibGVkID0gZW5hYmxlZDsKLSAgICB0aGlzLnBhbmVscy5zY3JpcHRzLmFkZEJyZWFr
cG9pbnQoYnJlYWtwb2ludCk7CisgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLmJyZWFrcG9pbnRN
YW5hZ2VyLmNyZWF0ZUJyZWFrcG9pbnQoc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxl
ZCwgY29uZGl0aW9uKTsKKyAgICB0aGlzLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEJyZWFrcG9pbnQo
YnJlYWtwb2ludCk7CiB9CiAKIFdlYkluc3BlY3Rvci5mYWlsZWRUb1BhcnNlU2NyaXB0U291cmNl
ID0gZnVuY3Rpb24oc291cmNlVVJMLCBzb3VyY2UsIHN0YXJ0aW5nTGluZSwgZXJyb3JMaW5lLCBl
cnJvck1lc3NhZ2UpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57318</attachid>
            <date>2010-05-28 05:30:27 -0700</date>
            <delta_ts>2010-05-31 11:25:20 -0700</delta_ts>
            <desc>Breakpoints adding/removing logic refactored. </desc>
            <filename>breakpoints.refactoring.diff</filename>
            <type>text/plain</type>
            <size>27241</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDM0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMTAtMDUtMjggIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVmYWN0b3Jpbmcgb2YgV2ViSW5zcGVjdG9yIGNvZGUuIE1vdmVkIGJyZWFrcG9pbnRz
IGFkZGluZy9yZW1vdmluZyBsb2dpYyB0byBCcmVha3BvaW50TWFuYWdlci4gCisKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50LmpzOiBSZW1vdmVkLgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanM6IEFkZGVk
LgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuY3JlYXRlQnJlYWtwb2ludCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLmFkZEJy
ZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3Rv
dHlwZS5yZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5wcm90b3R5cGUuZ2V0QnJlYWtwb2ludHNCeVNvdXJjZUlEKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuZ2V0QnJlYWtwb2ludHNCeVVS
TCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLnJl
c2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUu
X3NhdmVCcmVha3BvaW50VG9CYWNrZW5kKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50TWFuYWdlci5wcm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnRGcm9tQmFja2VuZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludC5wcm90b3R5cGUuZ2V0IGVuYWJsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnQucHJvdG90eXBlLnNldCBlbmFibGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5C
cmVha3BvaW50LnByb3RvdHlwZS5nZXQgc291cmNlVGV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuc2V0IHNvdXJjZVRleHQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLmdldCBsYWJlbCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuZ2V0IGlkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50LnByb3RvdHlwZS5nZXQgY29uZGl0aW9uKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5zZXQgY29uZGl0aW9uKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlLl9icmVha3BvaW50QWRkZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBl
Ll9icmVha3BvaW50UmVtb3ZlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNT
aWRlYmFyUGFuZS5wcm90b3R5cGUuX2JyZWFrcG9pbnRFbmFibGVDaGFuZ2VkKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5P
YmplY3QucHJvdG90eXBlLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNj
cmlwdFZpZXcucHJvdG90eXBlLl9hZGRCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRz
UGFuZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX2Jy
ZWFrcG9pbnRBZGRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3Rv
dHlwZS5fYnJlYWtwb2ludFJlbW92ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQ
YW5lbC5wcm90b3R5cGUuZWRpdFNjcmlwdFNvdXJjZS5teWNhbGxiYWNrKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLmVkaXRTY3JpcHRTb3VyY2UpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX3Nob3dTY3JpcHRPclJl
c291cmNlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fY29udGV4dE1lbnUp
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnQp
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYzoKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IucmVzdG9yZWRCcmVha3BvaW50KToKKwogMjAxMC0wNS0yOCAg
RXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRh
bSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA2MDM0NykKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBp
CSh3b3JraW5nIGNvcHkpCkBAIC0zODY1LDcgKzM4NjUsNyBAQAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvQXVkaXRSdWxlcy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9BdWRpdHNQYW5lbC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVu
ZC9Cb3R0b21VcFByb2ZpbGVEYXRhR3JpZFRyZWUuanMnLAotICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvQnJlYWtwb2ludC5qcycsCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250
LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250
LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
ZnJvbnQtZW5kL0NhbGxiYWNrLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5k
L0NhbGxTdGFja1NpZGViYXJQYW5lLmpzJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkocmV2aXNpb24gNjAzNDcpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NDY5Miw3ICs0NDY5Miw3IEBACiAJCQkJ
CT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXEJyZWFrcG9pbnQuanMiDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGlu
c3BlY3Rvclxmcm9udC1lbmRcQnJlYWtwb2ludE1hbmFnZXIuanMiDQogCQkJCQk+DQogCQkJCTwv
RmlsZT4NCiAJCQkJPEZpbGUNCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJl
YWtwb2ludC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJl
YWtwb2ludC5qcwkocmV2aXNpb24gNjAzNDcpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvQnJlYWtwb2ludC5qcwkod29ya2luZyBjb3B5KQpAQCAtMSw5NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnQgPSBmdW5jdGlvbih1cmwsIGxpbmUsIHNvdXJjZUlELCBjb25kaXRpb24pCi17Ci0gICAg
dGhpcy51cmwgPSB1cmw7Ci0gICAgdGhpcy5saW5lID0gbGluZTsKLSAgICB0aGlzLnNvdXJjZUlE
ID0gc291cmNlSUQ7Ci0gICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7Ci0gICAgdGhpcy5fc291cmNl
VGV4dCA9ICIiOwotICAgIHRoaXMuX2NvbmRpdGlvbiA9IGNvbmRpdGlvbiB8fCAiIjsKLX0KLQot
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlID0gewotICAgIGdldCBlbmFibGVkKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkOwotICAgIH0sCi0KLSAgICBzZXQg
ZW5hYmxlZCh4KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2VuYWJsZWQgPT09IHgpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHg7Ci0KLSAgICAgICAg
aWYgKHRoaXMuX2VuYWJsZWQpCi0gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycygiZW5hYmxlZCIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLmRpc3BhdGNo
RXZlbnRUb0xpc3RlbmVycygiZGlzYWJsZWQiKTsKLSAgICB9LAotCi0gICAgZ2V0IHNvdXJjZVRl
eHQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZVRleHQ7Ci0gICAgfSwKLQot
ICAgIHNldCBzb3VyY2VUZXh0KHRleHQpCi0gICAgewotICAgICAgICB0aGlzLl9zb3VyY2VUZXh0
ID0gdGV4dDsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInRleHQtY2hh
bmdlZCIpOwotICAgIH0sCi0KLSAgICBnZXQgbGFiZWwoKQotICAgIHsKLSAgICAgICAgdmFyIGRp
c3BsYXlOYW1lID0gKHRoaXMudXJsID8gV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yVVJMKHRo
aXMudXJsKSA6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKHByb2dyYW0pIikpOwotICAgICAgICBy
ZXR1cm4gZGlzcGxheU5hbWUgKyAiOiIgKyB0aGlzLmxpbmU7Ci0gICAgfSwKLQotICAgIGdldCBp
ZCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VJRCArICI6IiArIHRoaXMubGlu
ZTsKLSAgICB9LAotCi0gICAgZ2V0IGNvbmRpdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fY29uZGl0aW9uOwotICAgIH0sCi0KLSAgICBzZXQgY29uZGl0aW9uKGMpCi0gICAgewot
ICAgICAgICBjID0gYyB8fCAiIjsKLSAgICAgICAgaWYgKHRoaXMuX2NvbmRpdGlvbiA9PT0gYykK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9jb25kaXRpb24gPSBjOwotICAg
ICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiY29uZGl0aW9uLWNoYW5nZWQiKTsK
LQotICAgICAgICBpZiAodGhpcy5lbmFibGVkKQotICAgICAgICAgICAgSW5zcGVjdG9yQmFja2Vu
ZC5zZXRCcmVha3BvaW50KHRoaXMuc291cmNlSUQsIHRoaXMubGluZSwgdGhpcy5lbmFibGVkLCB0
aGlzLmNvbmRpdGlvbik7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90
b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CkluZGV4OiBX
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5h
Z2VyLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdl
ciA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLl9icmVha3BvaW50cyA9IHt9OworfQorCitXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0geworICAgIGNyZWF0ZUJyZWFr
cG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRp
dGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQo
c291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uLCB0aGlzKTsKKyAg
ICB9LAorCisgICAgYWRkQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICB7Cisg
ICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSkKKyAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSA9IGJyZWFr
cG9pbnQ7CisgICAgICAgIHRoaXMuX3NhdmVCcmVha3BvaW50VG9CYWNrZW5kKGJyZWFrcG9pbnQp
OworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiYnJlYWtwb2ludC1hZGRl
ZCIsIGJyZWFrcG9pbnQpOworICAgIH0sICAgIAorCisgICAgcmVtb3ZlQnJlYWtwb2ludDogZnVu
Y3Rpb24oYnJlYWtwb2ludCkKKyAgICB7CisgICAgICAgIGlmICghKGJyZWFrcG9pbnQuaWQgaW4g
dGhpcy5fYnJlYWtwb2ludHMpKQorICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlbGV0ZSB0
aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXTsKKyAgICAgICAgdGhpcy5fcmVtb3ZlQnJl
YWtwb2ludEZyb21CYWNrZW5kKGJyZWFrcG9pbnQpOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycygiYnJlYWtwb2ludC1yZW1vdmVkIiwgYnJlYWtwb2ludCk7CisgICAgfSwK
KworICAgIGdldEJyZWFrcG9pbnRzQnlTb3VyY2VJRDogZnVuY3Rpb24oc291cmNlSUQpIHsKKyAg
ICAgICAgdmFyIGJyZWFrcG9pbnRzID0gW107CisgICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMu
X2JyZWFrcG9pbnRzKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHNbaWRdLnNv
dXJjZUlEID09PSBzb3VyY2VJRCkKKyAgICAgICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKHRo
aXMuX2JyZWFrcG9pbnRzW2lkXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJyZWFrcG9p
bnRzOworICAgIH0sICAgIAorCisgICAgZ2V0QnJlYWtwb2ludHNCeVVSTDogZnVuY3Rpb24odXJs
KSB7CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFtdOworICAgICAgICBmb3IgKHZhciBpZCBp
biB0aGlzLl9icmVha3BvaW50cykgeworICAgICAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRz
W2lkXS51cmwgPT09IHVybCkKKyAgICAgICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKHRoaXMu
X2JyZWFrcG9pbnRzW2lkXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnRz
OyAgICAgICAgCisgICAgfSwKKworICAgIHJlc2V0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhp
cy5fYnJlYWtwb2ludHMgPSB7fTsKKyAgICB9LAorCisgICAgX3NhdmVCcmVha3BvaW50VG9CYWNr
ZW5kOiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yQmFja2Vu
ZC5zZXRCcmVha3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQubGluZSwgYnJl
YWtwb2ludC5lbmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlvbik7CisgICAgfSwKKworICAgIF9y
ZW1vdmVCcmVha3BvaW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgewor
ICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3Vy
Y2VJRCwgYnJlYWtwb2ludC5saW5lKTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5CcmVha3Bv
aW50TWFuYWdlci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90
b3R5cGU7CisKK1dlYkluc3BlY3Rvci5CcmVha3BvaW50ID0gZnVuY3Rpb24oc291cmNlSUQsIHNv
dXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uLCBtYW5hZ2VyKQoreworICAgIHRoaXMu
dXJsID0gc291cmNlVVJMOworICAgIHRoaXMubGluZSA9IGxpbmU7CisgICAgdGhpcy5zb3VyY2VJ
RCA9IHNvdXJjZUlEOworICAgIHRoaXMuX2VuYWJsZWQgPSBlbmFibGVkOworICAgIHRoaXMuX2Nv
bmRpdGlvbiA9IGNvbmRpdGlvbiB8fCAiIjsKKyAgICB0aGlzLl9zb3VyY2VUZXh0ID0gIiI7Cisg
ICAgdGhpcy5fbWFuYWdlciA9IG1hbmFnZXI7Cit9CisKK1dlYkluc3BlY3Rvci5CcmVha3BvaW50
LnByb3RvdHlwZSA9IHsKKyAgICBnZXQgZW5hYmxlZCgpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5fZW5hYmxlZDsKKyAgICB9LAorCisgICAgc2V0IGVuYWJsZWQoeCkKKyAgICB7CisgICAg
ICAgIGlmICh0aGlzLl9lbmFibGVkID09PSB4KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHRoaXMuX2VuYWJsZWQgPSB4OworICAgICAgICB0aGlzLl9tYW5hZ2VyLl9zYXZlQnJlYWtw
b2ludFRvQmFja2VuZCh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMuX2VuYWJsZWQpCisgICAgICAg
ICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZW5hYmxlZCIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZGlzYWJsZWQi
KTsKKyAgICB9LAorCisgICAgZ2V0IHNvdXJjZVRleHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3NvdXJjZVRleHQ7CisgICAgfSwKKworICAgIHNldCBzb3VyY2VUZXh0KHRleHQpCisg
ICAgeworICAgICAgICB0aGlzLl9zb3VyY2VUZXh0ID0gdGV4dDsKKyAgICAgICAgdGhpcy5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoInRleHQtY2hhbmdlZCIpOworICAgIH0sCisKKyAgICBnZXQg
bGFiZWwoKQorICAgIHsKKyAgICAgICAgdmFyIGRpc3BsYXlOYW1lID0gKHRoaXMudXJsID8gV2Vi
SW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yVVJMKHRoaXMudXJsKSA6IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiKHByb2dyYW0pIikpOworICAgICAgICByZXR1cm4gZGlzcGxheU5hbWUgKyAiOiIgKyB0
aGlzLmxpbmU7CisgICAgfSwKKworICAgIGdldCBpZCgpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5zb3VyY2VJRCArICI6IiArIHRoaXMubGluZTsKKyAgICB9LAorCisgICAgZ2V0IGNvbmRp
dGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fY29uZGl0aW9uOworICAgIH0sCisK
KyAgICBzZXQgY29uZGl0aW9uKGMpCisgICAgeworICAgICAgICBjID0gYyB8fCAiIjsKKyAgICAg
ICAgaWYgKHRoaXMuX2NvbmRpdGlvbiA9PT0gYykKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB0aGlzLl9jb25kaXRpb24gPSBjOworICAgICAgICBpZiAodGhpcy5lbmFibGVkKQorICAg
ICAgICAgICAgdGhpcy5fbWFuYWdlci5fc2F2ZUJyZWFrcG9pbnRUb0JhY2tlbmQodGhpcyk7Cisg
ICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJjb25kaXRpb24tY2hhbmdlZCIp
OworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLl9fcHJvdG9f
XyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMJKHJldmlz
aW9uIDYwMzQ3KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lk
ZWJhclBhbmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDYgQEAgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRzU2lkZWJhclBhbmUgPSBmdQogewogICAgIFdlYkluc3BlY3Rvci5TaWRlYmFy
UGFuZS5jYWxsKHRoaXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQnJlYWtwb2ludHMiKSk7CiAK
LSAgICB0aGlzLmJyZWFrcG9pbnRzID0ge307Ci0KICAgICB0aGlzLmxpc3RFbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgib2wiKTsKICAgICB0aGlzLmxpc3RFbGVtZW50LmNsYXNzTmFt
ZSA9ICJicmVha3BvaW50LWxpc3QiOwogCkBAIC0zNywxMiArMzUsMTQgQEAgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRzU2lkZWJhclBhbmUgPSBmdQogICAgIHRoaXMuZW1wdHlFbGVtZW50LnRleHRD
b250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJObyBCcmVha3BvaW50cyIpOwogCiAgICAg
dGhpcy5ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVtcHR5RWxlbWVudCk7CisKKyAgICBX
ZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcigiYnJlYWtwb2lu
dC1hZGRlZCIsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7CisgICAgV2ViSW5zcGVjdG9y
LmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoImJyZWFrcG9pbnQtcmVtb3ZlZCIs
IHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsgICAgCiB9CiAKIFdlYkluc3BlY3Rvci5C
cmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICByZXNldDogZnVuY3Rpb24o
KQogICAgIHsKLSAgICAgICAgdGhpcy5icmVha3BvaW50cyA9IHt9OwogICAgICAgICB0aGlzLmxp
c3RFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CiAgICAgICAgIGlmICh0aGlzLmxpc3RFbGVtZW50
LnBhcmVudEVsZW1lbnQpIHsKICAgICAgICAgICAgIHRoaXMuYm9keUVsZW1lbnQucmVtb3ZlQ2hp
bGQodGhpcy5saXN0RWxlbWVudCk7CkBAIC01MCwxMiArNTAsOSBAQCBXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludHNTaWRlYmFyUGFuZS5wcm90CiAgICAgICAgIH0KICAgICB9LAogCi0gICAgYWRkQnJl
YWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICBfYnJlYWtwb2ludEFkZGVkOiBmdW5j
dGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLmJyZWFrcG9pbnRzW2JyZWFrcG9p
bnQuaWRdKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuYnJlYWtwb2ludHNb
YnJlYWtwb2ludC5pZF0gPSBicmVha3BvaW50OworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2
ZW50LmRhdGE7CiAKICAgICAgICAgYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJlbmFibGVk
IiwgdGhpcy5fYnJlYWtwb2ludEVuYWJsZUNoYW5nZWQsIHRoaXMpOwogICAgICAgICBicmVha3Bv
aW50LmFkZEV2ZW50TGlzdGVuZXIoImRpc2FibGVkIiwgdGhpcy5fYnJlYWtwb2ludEVuYWJsZUNo
YW5nZWQsIHRoaXMpOwpAQCAtNjcsOCArNjQsNiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNT
aWRlYmFyUGFuZS5wcm90CiAgICAgICAgICAgICB0aGlzLmJvZHlFbGVtZW50LnJlbW92ZUNoaWxk
KHRoaXMuZW1wdHlFbGVtZW50KTsKICAgICAgICAgICAgIHRoaXMuYm9keUVsZW1lbnQuYXBwZW5k
Q2hpbGQodGhpcy5saXN0RWxlbWVudCk7CiAgICAgICAgIH0KLQotICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLnNldEJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5l
LCBicmVha3BvaW50LmVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsKICAgICB9LAogCiAg
ICAgX2FwcGVuZEJyZWFrcG9pbnRFbGVtZW50OiBmdW5jdGlvbihicmVha3BvaW50KQpAQCAtMTIx
LDExICsxMTYsOSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90CiAg
ICAgICAgIHRoaXMubGlzdEVsZW1lbnQuYXBwZW5kQ2hpbGQoYnJlYWtwb2ludEVsZW1lbnQpOwog
ICAgIH0sCiAKLSAgICByZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQorICAg
IF9icmVha3BvaW50UmVtb3ZlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewotICAgICAgICBpZiAo
IXRoaXMuYnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF0pCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGRlbGV0ZSB0aGlzLmJyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdOworICAgICAgICB2
YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGE7CiAKICAgICAgICAgYnJlYWtwb2ludC5yZW1vdmVF
dmVudExpc3RlbmVyKCJlbmFibGVkIiwgbnVsbCwgdGhpcyk7CiAgICAgICAgIGJyZWFrcG9pbnQu
cmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzYWJsZWQiLCBudWxsLCB0aGlzKTsKQEAgLTEzOCw4ICsx
MzEsNiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90CiAgICAgICAg
ICAgICB0aGlzLmJvZHlFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMubGlzdEVsZW1lbnQpOwogICAg
ICAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVtcHR5RWxlbWVudCk7
CiAgICAgICAgIH0KLQotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQo
YnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5lKTsKICAgICB9LAogCiAgICAgX2Jy
ZWFrcG9pbnRFbmFibGVDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKQEAgLTE0OCw3ICsxMzksNiBA
QCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90CiAKICAgICAgICAgdmFy
IGNoZWNrYm94ID0gYnJlYWtwb2ludC5fYnJlYWtwb2ludExpc3RFbGVtZW50LmZpcnN0Q2hpbGQ7
CiAgICAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSBicmVha3BvaW50LmVuYWJsZWQ7Ci0gICAgICAg
IEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVh
a3BvaW50LmxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOwog
ICAgIH0sCiAKICAgICBfYnJlYWtwb2ludFRleHRDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKSW5k
ZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3QuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdC5qcwkocmV2aXNpb24gNjAzNDcpCisr
KyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0LmpzCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw3ICs1MCw3IEBAIFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgZGVsZXRlIHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdOwogICAgIH0sCiAKLSAgICBk
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnM6IGZ1bmN0aW9uKGV2ZW50VHlwZSkgeworICAgIGRpc3Bh
dGNoRXZlbnRUb0xpc3RlbmVyczogZnVuY3Rpb24oZXZlbnRUeXBlLCBldmVudERhdGEpIHsKICAg
ICAgICAgaWYgKCEoIl9saXN0ZW5lcnMiIGluIHRoaXMpIHx8ICEoZXZlbnRUeXBlIGluIHRoaXMu
X2xpc3RlbmVycykpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTY2LDcgKzY2LDcgQEAgV2Vi
SW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLmRlZmF1bHRQ
cmV2ZW50ZWQgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgdmFyIGV2ZW50ID0ge3Rhcmdl
dDogdGhpcywgdHlwZTogZXZlbnRUeXBlLCBkZWZhdWx0UHJldmVudGVkOiBmYWxzZX07CisgICAg
ICAgIHZhciBldmVudCA9IHt0YXJnZXQ6IHRoaXMsIHR5cGU6IGV2ZW50VHlwZSwgZGF0YTogZXZl
bnREYXRhLCBkZWZhdWx0UHJldmVudGVkOiBmYWxzZX07CiAgICAgICAgIGV2ZW50LnN0b3BQcm9w
YWdhdGlvbiA9IHN0b3BQcm9wYWdhdGlvbjsKICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQg
PSBwcmV2ZW50RGVmYXVsdDsKIApJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nj
cmlwdFZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nj
cmlwdFZpZXcuanMJKHJldmlzaW9uIDYwMzQ3KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NjcmlwdFZpZXcuanMJKHdvcmtpbmcgY29weSkKQEAgLTczLDggKzczLDggQEAgV2ViSW5z
cGVjdG9yLlNjcmlwdFZpZXcucHJvdG90eXBlID0gewogCiAgICAgX2FkZEJyZWFrcG9pbnQ6IGZ1
bmN0aW9uKGxpbmUpCiAgICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludCh0aGlzLnNjcmlwdC5zb3VyY2VVUkwsIGxpbmUsIHRoaXMuc2NyaXB0
LnNvdXJjZUlEKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLmFkZEJyZWFr
cG9pbnQoYnJlYWtwb2ludCk7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gV2ViSW5zcGVjdG9y
LmJyZWFrcG9pbnRNYW5hZ2VyLmNyZWF0ZUJyZWFrcG9pbnQodGhpcy5zY3JpcHQuc291cmNlSUQs
IHRoaXMuc2NyaXB0LnNvdXJjZVVSTCwgbGluZSwgdHJ1ZSwgIiIpOworICAgICAgICBXZWJJbnNw
ZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkQnJlYWtwb2ludChicmVha3BvaW50KTsKICAgICB9
LAogCiAgICAgX2VkaXRMaW5lQ29tcGxldGU6IGZ1bmN0aW9uKG5ld0JvZHkpCkluZGV4OiBXZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMJKHJldmlzaW9uIDYwMzQ3
KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTcxLDYgKzE3MSwxMCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsID0g
ZnVuY3Rpb24oKQogICAgIHRoaXMuX2RlYnVnZ2VyRW5hYmxlZCA9IFByZWZlcmVuY2VzLmRlYnVn
Z2VyQWx3YXlzRW5hYmxlZDsKICAgICBpZiAoUHJlZmVyZW5jZXMuZGVidWdnZXJBbHdheXNFbmFi
bGVkKQogICAgICAgICB0aGlzLl9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IHRydWU7CisKKyAg
ICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcigiYnJlYWtw
b2ludC1hZGRlZCIsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7CisgICAgV2ViSW5zcGVj
dG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoImJyZWFrcG9pbnQtcmVtb3Zl
ZCIsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKKwogICAgIHRoaXMucmVzZXQoKTsK
IH0KIApAQCAtMjg1LDEzICsyODksMTMgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90
b3R5cGUgPSB7CiAgICAgICAgIGRlbGV0ZSByZXNvdXJjZS5fc2NyaXB0c1BlbmRpbmdSZXNvdXJj
ZUxvYWQ7CiAgICAgfSwKIAotICAgIGFkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQp
CisgICAgX2JyZWFrcG9pbnRBZGRlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgeworICAgICAgICB2
YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGE7CisKICAgICAgICAgaWYgKCF0aGlzLmJyZWFrcG9p
bnRzQWN0aXZhdGVkKQogICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQnJlYWtwb2ludHNDbGlja2Vk
KCk7CiAKLSAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuYnJlYWtwb2ludHMuYWRkQnJlYWtwb2lu
dChicmVha3BvaW50KTsKLQogICAgICAgICB2YXIgc291cmNlRnJhbWU7CiAgICAgICAgIGlmIChi
cmVha3BvaW50LnVybCkgewogICAgICAgICAgICAgdmFyIHJlc291cmNlID0gV2ViSW5zcGVjdG9y
LnJlc291cmNlVVJMTWFwW2JyZWFrcG9pbnQudXJsXTsKQEAgLTMwOCw5ICszMTIsOSBAQCBXZWJJ
bnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHNvdXJjZUZy
YW1lLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CiAgICAgfSwKIAotICAgIHJlbW92ZUJyZWFr
cG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgX2JyZWFrcG9pbnRSZW1vdmVkOiBmdW5j
dGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLmJyZWFrcG9pbnRz
LnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CisgICAgICAgIHZhciBicmVha3BvaW50ID0g
ZXZlbnQuZGF0YTsKIAogICAgICAgICB2YXIgc291cmNlRnJhbWU7CiAgICAgICAgIGlmIChicmVh
a3BvaW50LnVybCkgewpAQCAtMzM5LDIyICszNDMsMTggQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQ
YW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gTmVl
ZCB0byBjbGVhciBicmVha3BvaW50cyBhbmQgcmUtY3JlYXRlIHRoZW0gbGF0ZXIgd2hlbiBlZGl0
aW5nIHNvdXJjZS4KLSAgICAgICAgdmFyIGJyZWFrcG9pbnRzUGFuZWwgPSB0aGlzLnNpZGViYXJQ
YW5lcy5icmVha3BvaW50czsKLSAgICAgICAgdmFyIG5ld0JyZWFrcG9pbnRzID0gW107Ci0gICAg
ICAgIGZvciAodmFyIGlkIGluIGJyZWFrcG9pbnRzUGFuZWwuYnJlYWtwb2ludHMpIHsKLSAgICAg
ICAgICAgIHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludHNQYW5lbC5icmVha3BvaW50c1tpZF07
Ci0gICAgICAgICAgICBicmVha3BvaW50c1BhbmVsLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2lu
dCk7Ci0gICAgICAgICAgICBuZXdCcmVha3BvaW50cy5wdXNoKGJyZWFrcG9pbnQpOwotICAgICAg
ICB9CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFu
YWdlci5nZXRCcmVha3BvaW50c0J5U291cmNlSUQoc291cmNlSUQpOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludHNbaV0p
OwogCiAgICAgICAgIGZ1bmN0aW9uIG15Y2FsbGJhY2sobmV3Qm9keSkKICAgICAgICAgewogICAg
ICAgICAgICAgY2FsbGJhY2sobmV3Qm9keSk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG5ld0JyZWFrcG9pbnRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGJy
ZWFrcG9pbnQgPSBuZXdCcmVha3BvaW50c1tpXTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgYnJl
YWtwb2ludCA9IGJyZWFrcG9pbnRzW2ldOwogICAgICAgICAgICAgICAgIGlmIChicmVha3BvaW50
LmxpbmUgPj0gbGluZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5saW5lICs9IGxp
bmVzQ291bnRUb1NoaWZ0OwotICAgICAgICAgICAgICAgIHRoaXMuYWRkQnJlYWtwb2ludChicmVh
a3BvaW50KTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIu
YWRkQnJlYWtwb2ludChicmVha3BvaW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKICAg
ICAgICAgdmFyIGNhbGxiYWNrSWQgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChteWNhbGxi
YWNrLmJpbmQodGhpcykpCkBAIC02MTIsMTQgKzYxMiwxMCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0
c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAg
ICAgICAgIHZpZXcgPSBXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5yZXNvdXJjZVZpZXdG
b3JSZXNvdXJjZShzY3JpcHRPclJlc291cmNlKTsKICAgICAgICAgICAgIHZpZXcuaGVhZGVyc1Zp
c2libGUgPSBmYWxzZTsKLSAgICAgICAgICAgIHZhciBicmVha3BvaW50cyA9IHRoaXMuc2lkZWJh
clBhbmVzLmJyZWFrcG9pbnRzLmJyZWFrcG9pbnRzOwotICAgICAgICAgICAgZm9yICh2YXIgYnJl
YWtwb2ludElkIGluIGJyZWFrcG9pbnRzKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGJyZWFrcG9p
bnQgPSBicmVha3BvaW50c1ticmVha3BvaW50SWRdOwotICAgICAgICAgICAgICAgIGlmIChicmVh
a3BvaW50LnVybCA9PT0gc2NyaXB0T3JSZXNvdXJjZS51cmwpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIHNvdXJjZUZyYW1lID0gdGhpcy5fc291cmNlRnJhbWVGb3JTY3JpcHRPclJlc291cmNl
KHNjcmlwdE9yUmVzb3VyY2UpOwotICAgICAgICAgICAgICAgICAgICBzb3VyY2VGcmFtZS5hZGRC
cmVha3BvaW50KGJyZWFrcG9pbnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZUZyYW1lRm9yU2NyaXB0
T3JSZXNvdXJjZShzY3JpcHRPclJlc291cmNlKTsKKyAgICAgICAgICAgIHZhciBicmVha3BvaW50
cyA9IFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5nZXRCcmVha3BvaW50c0J5VVJMKHNj
cmlwdE9yUmVzb3VyY2UudXJsKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnJl
YWtwb2ludHMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgc291cmNlRnJhbWUuYWRkQnJl
YWtwb2ludChicmVha3BvaW50c1tpXSk7CiAgICAgICAgIH0gZWxzZSBpZiAoc2NyaXB0T3JSZXNv
dXJjZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5TY3JpcHQpCiAgICAgICAgICAgICB2aWV3ID0g
dGhpcy5zY3JpcHRWaWV3Rm9yU2NyaXB0KHNjcmlwdE9yUmVzb3VyY2UpOwogCkluZGV4OiBXZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCShyZXZpc2lvbiA2MDM0NykK
KysrIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwkod29ya2luZyBj
b3B5KQpAQCAtNDI4LDcgKzQyOCw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5V
SVN0cmluZygiQWRkIENvbmRpdGlvbmFsIEJyZWFrcG9pbnTigKYiKSwgYWRkQ29uZGl0aW9uYWxC
cmVha3BvaW50LmJpbmQodGhpcykpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8g
VGhpcyByb3cgaGFzIGEgYnJlYWtwb2ludCwgd2Ugd2FudCB0byBzaG93IGVkaXQgYW5kIHJlbW92
ZSBicmVha3BvaW50LCBhbmQgZWl0aGVyIGRpc2FibGUgb3IgZW5hYmxlLgotICAgICAgICAgICAg
Y29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlbW92ZSBCcmVh
a3BvaW50IiksIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5yZW1vdmVCcmVha3BvaW50LmJp
bmQoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLCBicmVha3BvaW50KSk7CisgICAgICAgICAg
ICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVtb3ZlIEJy
ZWFrcG9pbnQiKSwgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludERlbGVnYXRlLmJpbmQodGhpcywgYnJl
YWtwb2ludCkpOwogICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkVkaXQgQnJlYWtwb2ludOKApiIpLCB0aGlzLl9lZGl0QnJlYWtwb2ludENv
bmRpdGlvbi5iaW5kKHRoaXMsIGJyZWFrcG9pbnQpKTsKICAgICAgICAgICAgIGlmIChicmVha3Bv
aW50LmVuYWJsZWQpCiAgICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkRpc2FibGUgQnJlYWtwb2ludCIpLCBmdW5jdGlvbigpIHsgYnJl
YWtwb2ludC5lbmFibGVkID0gZmFsc2U7IH0pOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NvdXJjZVZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NvdXJjZVZpZXcuanMJKHJldmlzaW9uIDYwMzQ3KQorKysgV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxNiArMTEy
LDEzIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZSA9IHsKICAgICBfYWRkQnJl
YWtwb2ludDogZnVuY3Rpb24obGluZSkKICAgICB7CiAgICAgICAgIHZhciBzb3VyY2VJRCA9IHRo
aXMuX3NvdXJjZUlERm9yTGluZShsaW5lKTsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5wYW5l
bHMuc2NyaXB0cykgewotICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnQodGhpcy5yZXNvdXJjZS51cmwsIGxpbmUsIHNvdXJjZUlEKTsKLSAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5hZGRCcmVha3BvaW50KGJyZWFrcG9p
bnQpOwotICAgICAgICB9CisgICAgICAgIHZhciBicmVha3BvaW50ID0gV2ViSW5zcGVjdG9yLmJy
ZWFrcG9pbnRNYW5hZ2VyLmNyZWF0ZUJyZWFrcG9pbnQoc291cmNlSUQsIHRoaXMucmVzb3VyY2Uu
dXJsLCBsaW5lLCB0cnVlLCAiIik7CisgICAgICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFu
YWdlci5hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwogICAgIH0sCiAKICAgICBfcmVtb3ZlQnJl
YWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7Ci0gICAgICAgIGlmIChXZWJJbnNw
ZWN0b3IucGFuZWxzLnNjcmlwdHMpCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNj
cmlwdHMucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50KTsKKyAgICAgICAgV2ViSW5zcGVjdG9y
LmJyZWFrcG9pbnRNYW5hZ2VyLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CiAgICAgfSwK
IAogICAgIF9lZGl0TGluZTogZnVuY3Rpb24obGluZSwgbmV3Q29udGVudCkKSW5kZXg6IFdlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCShyZXZpc2lvbiA2MDM0NykKKysrIFdlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCSh3b3JraW5nIGNvcHkpCkBAIC04LDcg
KzgsNyBAQAogICAgIDxmaWxlPkF1ZGl0UnVsZXMuanM8L2ZpbGU+CiAgICAgPGZpbGU+QXVkaXRz
UGFuZWwuanM8L2ZpbGU+CiAgICAgPGZpbGU+Qm90dG9tVXBQcm9maWxlRGF0YUdyaWRUcmVlLmpz
PC9maWxlPgotICAgIDxmaWxlPkJyZWFrcG9pbnQuanM8L2ZpbGU+CisgICAgPGZpbGU+QnJlYWtw
b2ludE1hbmFnZXIuanM8L2ZpbGU+CiAgICAgPGZpbGU+QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5q
czwvZmlsZT4KICAgICA8ZmlsZT5DYWxsYmFjay5qczwvZmlsZT4KICAgICA8ZmlsZT5DYWxsU3Rh
Y2tTaWRlYmFyUGFuZS5qczwvZmlsZT4KSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9pbnNwZWN0b3IuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmh0bWwJKHJldmlzaW9uIDYwMzQ3KQorKysgV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBA
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE8KICAgICA8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJEYXRhR3JpZC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQ29va2llSXRlbXNWaWV3LmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTY3JpcHQuanMi
Pjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkJyZWFr
cG9pbnQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IkJyZWFrcG9pbnRNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJTaWRlYmFyUGFuZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRWxlbWVudHNUcmVlT3V0bGluZS5qcyI+PC9z
Y3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2lkZWJhclRy
ZWVFbGVtZW50LmpzIj48L3NjcmlwdD4KSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9pbnNwZWN0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5qcwkocmV2aXNpb24gNjAzNDcpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00NjUsNiArNDY1LDggQEAgV2Vi
SW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICAgICAgb3RoZXI6IG5ldyBXZWJJbnNw
ZWN0b3IuUmVzb3VyY2VDYXRlZ29yeSgib3RoZXIiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk90
aGVyIiksICJyZ2IoMTg2LDE4NiwxODYpIikKICAgICB9OwogCisgICAgdGhpcy5icmVha3BvaW50
TWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIoKTsKKwogICAgIHRo
aXMucGFuZWxzID0ge307CiAgICAgdGhpcy5fY3JlYXRlUGFuZWxzKCk7CiAgICAgdGhpcy5fcGFu
ZWxIaXN0b3J5ID0gbmV3IFdlYkluc3BlY3Rvci5QYW5lbEhpc3RvcnkoKTsKQEAgLTEzMjMsOSAr
MTMyNSw4IEBAIFdlYkluc3BlY3Rvci5wYXJzZWRTY3JpcHRTb3VyY2UgPSBmdW5jdGkKIAogV2Vi
SW5zcGVjdG9yLnJlc3RvcmVkQnJlYWtwb2ludCA9IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VV
UkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKIHsKLSAgICB2YXIgYnJlYWtwb2ludCA9IG5l
dyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludChzb3VyY2VVUkwsIGxpbmUsIHNvdXJjZUlELCBjb25k
aXRpb24pOwotICAgIGJyZWFrcG9pbnQuZW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgdGhpcy5wYW5l
bHMuc2NyaXB0cy5hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQpOworICAgIHZhciBicmVha3BvaW50
ID0gdGhpcy5icmVha3BvaW50TWFuYWdlci5jcmVhdGVCcmVha3BvaW50KHNvdXJjZUlELCBzb3Vy
Y2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CisgICAgdGhpcy5icmVha3BvaW50TWFu
YWdlci5hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwogfQogCiBXZWJJbnNwZWN0b3IuZmFpbGVk
VG9QYXJzZVNjcmlwdFNvdXJjZSA9IGZ1bmN0aW9uKHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGlu
Z0xpbmUsIGVycm9yTGluZSwgZXJyb3JNZXNzYWdlKQpAQCAtMTM2MCw2ICsxMzYxLDggQEAgV2Vi
SW5zcGVjdG9yLnJlc2V0ID0gZnVuY3Rpb24oKQogICAgICAgICAgICAgcGFuZWwucmVzZXQoKTsK
ICAgICB9CiAKKyAgICB0aGlzLmJyZWFrcG9pbnRNYW5hZ2VyLnJlc2V0KCk7CisKICAgICBmb3Ig
KHZhciBjYXRlZ29yeSBpbiB0aGlzLnJlc291cmNlQ2F0ZWdvcmllcykKICAgICAgICAgdGhpcy5y
ZXNvdXJjZUNhdGVnb3JpZXNbY2F0ZWdvcnldLnJlbW92ZUFsbFJlc291cmNlcygpOwogCg==
</data>
<flag name="review"
          id="42066"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57483</attachid>
            <date>2010-05-31 11:25:20 -0700</date>
            <delta_ts>2010-05-31 11:29:24 -0700</delta_ts>
            <desc>Updated after CR.</desc>
            <filename>breakpoints.refactoring.diff</filename>
            <type>text/plain</type>
            <size>23769</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS5neXBpCShyZXZpc2lvbiA2MDQzMykKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5n
IGNvcHkpCkBAIC0zODcxLDcgKzM4NzEsNyBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvQXVkaXRSdWxlcy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9B
dWRpdHNQYW5lbC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Cb3R0b21V
cFByb2ZpbGVEYXRhR3JpZFRyZWUuanMnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1l
bmQvQnJlYWtwb2ludC5qcycsCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVh
a3BvaW50TWFuYWdlci5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVh
a3BvaW50c1NpZGViYXJQYW5lLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5k
L0NhbGxiYWNrLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFj
a1NpZGViYXJQYW5lLmpzJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agkocmV2aXNpb24gNjA0MzMpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NDc2OCw3ICs0NDc2OCw3IEBACiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXEJyZWFrcG9pbnQuanMiDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcQnJlYWtwb2ludE1hbmFnZXIuanMiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJ
CQkJPEZpbGUNCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludC5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludC5q
cwkocmV2aXNpb24gNjA0MzMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtw
b2ludC5qcwkod29ya2luZyBjb3B5KQpAQCAtMSw5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQgPSBm
dW5jdGlvbih1cmwsIGxpbmUsIHNvdXJjZUlELCBjb25kaXRpb24pCi17Ci0gICAgdGhpcy51cmwg
PSB1cmw7Ci0gICAgdGhpcy5saW5lID0gbGluZTsKLSAgICB0aGlzLnNvdXJjZUlEID0gc291cmNl
SUQ7Ci0gICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7Ci0gICAgdGhpcy5fc291cmNlVGV4dCA9ICIi
OwotICAgIHRoaXMuX2NvbmRpdGlvbiA9IGNvbmRpdGlvbiB8fCAiIjsKLX0KLQotV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnQucHJvdG90eXBlID0gewotICAgIGdldCBlbmFibGVkKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkOwotICAgIH0sCi0KLSAgICBzZXQgZW5hYmxlZCh4
KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2VuYWJsZWQgPT09IHgpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHg7Ci0KLSAgICAgICAgaWYgKHRoaXMu
X2VuYWJsZWQpCi0gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZW5h
YmxlZCIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycygiZGlzYWJsZWQiKTsKLSAgICB9LAotCi0gICAgZ2V0IHNvdXJjZVRleHQoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZVRleHQ7Ci0gICAgfSwKLQotICAgIHNldCBz
b3VyY2VUZXh0KHRleHQpCi0gICAgewotICAgICAgICB0aGlzLl9zb3VyY2VUZXh0ID0gdGV4dDsK
LSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInRleHQtY2hhbmdlZCIpOwot
ICAgIH0sCi0KLSAgICBnZXQgbGFiZWwoKQotICAgIHsKLSAgICAgICAgdmFyIGRpc3BsYXlOYW1l
ID0gKHRoaXMudXJsID8gV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yVVJMKHRoaXMudXJsKSA6
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKHByb2dyYW0pIikpOwotICAgICAgICByZXR1cm4gZGlz
cGxheU5hbWUgKyAiOiIgKyB0aGlzLmxpbmU7Ci0gICAgfSwKLQotICAgIGdldCBpZCgpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VJRCArICI6IiArIHRoaXMubGluZTsKLSAgICB9
LAotCi0gICAgZ2V0IGNvbmRpdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fY29u
ZGl0aW9uOwotICAgIH0sCi0KLSAgICBzZXQgY29uZGl0aW9uKGMpCi0gICAgewotICAgICAgICBj
ID0gYyB8fCAiIjsKLSAgICAgICAgaWYgKHRoaXMuX2NvbmRpdGlvbiA9PT0gYykKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9jb25kaXRpb24gPSBjOwotICAgICAgICB0aGlz
LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiY29uZGl0aW9uLWNoYW5nZWQiKTsKLQotICAgICAg
ICBpZiAodGhpcy5lbmFibGVkKQotICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRCcmVh
a3BvaW50KHRoaXMuc291cmNlSUQsIHRoaXMubGluZSwgdGhpcy5lbmFibGVkLCB0aGlzLmNvbmRp
dGlvbik7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuX19w
cm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CkluZGV4OiBXZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyID0gZnVuY3Rp
b24oKQoreworICAgIHRoaXMuX2JyZWFrcG9pbnRzID0ge307Cit9CisKK1dlYkluc3BlY3Rvci5C
cmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CisgICAgYWRkQnJlYWtwb2ludDogZnVuY3Rp
b24oc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQorICAgIHsK
KyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQodGhp
cywgc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKTsKKyAgICAg
ICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSA9IGJyZWFrcG9p
bnQ7CisgICAgICAgIHRoaXMuX3NhdmVCcmVha3BvaW50T25CYWNrZW5kKGJyZWFrcG9pbnQpOwor
ICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiYnJlYWtwb2ludC1hZGRlZCIs
IGJyZWFrcG9pbnQpOworICAgIH0sICAgIAorCisgICAgcmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rp
b24oYnJlYWtwb2ludCkKKyAgICB7CisgICAgICAgIGlmICghKGJyZWFrcG9pbnQuaWQgaW4gdGhp
cy5fYnJlYWtwb2ludHMpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWxldGUgdGhp
cy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF07CisgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFr
cG9pbnRGcm9tQmFja2VuZChicmVha3BvaW50KTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50
VG9MaXN0ZW5lcnMoImJyZWFrcG9pbnQtcmVtb3ZlZCIsIGJyZWFrcG9pbnQpOworICAgIH0sCisK
KyAgICBicmVha3BvaW50c0ZvclNvdXJjZUlEOiBmdW5jdGlvbihzb3VyY2VJRCkKKyAgICB7Cisg
ICAgICAgIHZhciBicmVha3BvaW50cyA9IFtdOworICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlz
Ll9icmVha3BvaW50cykgeworICAgICAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzW2lkXS5z
b3VyY2VJRCA9PT0gc291cmNlSUQpCisgICAgICAgICAgICAgICAgYnJlYWtwb2ludHMucHVzaCh0
aGlzLl9icmVha3BvaW50c1tpZF0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBicmVha3Bv
aW50czsKKyAgICB9LCAgICAKKworICAgIGJyZWFrcG9pbnRzRm9yVVJMOiBmdW5jdGlvbih1cmwp
CisgICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIg
aWQgaW4gdGhpcy5fYnJlYWtwb2ludHMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9icmVha3Bv
aW50c1tpZF0udXJsID09PSB1cmwpCisgICAgICAgICAgICAgICAgYnJlYWtwb2ludHMucHVzaCh0
aGlzLl9icmVha3BvaW50c1tpZF0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBicmVha3Bv
aW50czsgICAgICAgIAorICAgIH0sCisKKyAgICByZXNldDogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSB7fTsKKyAgICB9LAorCisgICAgX3NhdmVCcmVha3Bv
aW50T25CYWNrZW5kOiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIHsKKyAgICAgICAgSW5zcGVj
dG9yQmFja2VuZC5zZXRCcmVha3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQu
bGluZSwgYnJlYWtwb2ludC5lbmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlvbik7CisgICAgfSwK
KworICAgIF9yZW1vdmVCcmVha3BvaW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQp
CisgICAgeworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtw
b2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5lKTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rv
ci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9i
amVjdC5wcm90b3R5cGU7CisKK1dlYkluc3BlY3Rvci5CcmVha3BvaW50ID0gZnVuY3Rpb24oYnJl
YWtwb2ludE1hbmFnZXIsIHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRp
dGlvbikKK3sKKyAgICB0aGlzLnVybCA9IHNvdXJjZVVSTDsKKyAgICB0aGlzLmxpbmUgPSBsaW5l
OworICAgIHRoaXMuc291cmNlSUQgPSBzb3VyY2VJRDsKKyAgICB0aGlzLl9lbmFibGVkID0gZW5h
YmxlZDsKKyAgICB0aGlzLl9jb25kaXRpb24gPSBjb25kaXRpb24gfHwgIiI7CisgICAgdGhpcy5f
c291cmNlVGV4dCA9ICIiOworICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyID0gYnJlYWtwb2lu
dE1hbmFnZXI7Cit9CisKK1dlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZSA9IHsKKyAg
ICBnZXQgZW5hYmxlZCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDsKKyAg
ICB9LAorCisgICAgc2V0IGVuYWJsZWQoeCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9lbmFi
bGVkID09PSB4KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX2VuYWJsZWQg
PSB4OworICAgICAgICB0aGlzLl9icmVha3BvaW50TWFuYWdlci5fc2F2ZUJyZWFrcG9pbnRPbkJh
Y2tlbmQodGhpcyk7CisgICAgICAgIGlmICh0aGlzLl9lbmFibGVkKQorICAgICAgICAgICAgdGhp
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImVuYWJsZWQiKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImRpc2FibGVkIik7CisgICAg
fSwKKworICAgIGdldCBzb3VyY2VUZXh0KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9z
b3VyY2VUZXh0OworICAgIH0sCisKKyAgICBzZXQgc291cmNlVGV4dCh0ZXh0KQorICAgIHsKKyAg
ICAgICAgdGhpcy5fc291cmNlVGV4dCA9IHRleHQ7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVu
dFRvTGlzdGVuZXJzKCJ0ZXh0LWNoYW5nZWQiKTsKKyAgICB9LAorCisgICAgZ2V0IGxhYmVsKCkK
KyAgICB7CisgICAgICAgIHZhciBkaXNwbGF5TmFtZSA9ICh0aGlzLnVybCA/IFdlYkluc3BlY3Rv
ci5kaXNwbGF5TmFtZUZvclVSTCh0aGlzLnVybCkgOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihw
cm9ncmFtKSIpKTsKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlOYW1lICsgIjoiICsgdGhpcy5saW5l
OworICAgIH0sCisKKyAgICBnZXQgaWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc291
cmNlSUQgKyAiOiIgKyB0aGlzLmxpbmU7CisgICAgfSwKKworICAgIGdldCBjb25kaXRpb24oKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbjsKKyAgICB9LAorCisgICAgc2V0
IGNvbmRpdGlvbihjKQorICAgIHsKKyAgICAgICAgYyA9IGMgfHwgIiI7CisgICAgICAgIGlmICh0
aGlzLl9jb25kaXRpb24gPT09IGMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhp
cy5fY29uZGl0aW9uID0gYzsKKyAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCkKKyAgICAgICAgICAg
IHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLl9zYXZlQnJlYWtwb2ludE9uQmFja2VuZCh0aGlzKTsK
KyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImNvbmRpdGlvbi1jaGFuZ2Vk
Iik7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lk
ZWJhclBhbmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Jy
ZWFrcG9pbnRzU2lkZWJhclBhbmUuanMJKHJldmlzaW9uIDYwNDMzKQorKysgV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDggKzI3LDYgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRzU2lkZWJhclBhbmUgPSBm
dQogewogICAgIFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZS5jYWxsKHRoaXMsIFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiQnJlYWtwb2ludHMiKSk7CiAKLSAgICB0aGlzLmJyZWFrcG9pbnRzID0ge307
Ci0KICAgICB0aGlzLmxpc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib2wiKTsK
ICAgICB0aGlzLmxpc3RFbGVtZW50LmNsYXNzTmFtZSA9ICJicmVha3BvaW50LWxpc3QiOwogCkBA
IC0zNywxMiArMzUsMTQgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRzU2lkZWJhclBhbmUgPSBm
dQogICAgIHRoaXMuZW1wdHlFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJObyBCcmVha3BvaW50cyIpOwogCiAgICAgdGhpcy5ib2R5RWxlbWVudC5hcHBlbmRDaGls
ZCh0aGlzLmVtcHR5RWxlbWVudCk7CisKKyAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFn
ZXIuYWRkRXZlbnRMaXN0ZW5lcigiYnJlYWtwb2ludC1hZGRlZCIsIHRoaXMuX2JyZWFrcG9pbnRB
ZGRlZCwgdGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50
TGlzdGVuZXIoImJyZWFrcG9pbnQtcmVtb3ZlZCIsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0
aGlzKTsgICAgCiB9CiAKIFdlYkluc3BlY3Rvci5CcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3Rv
dHlwZSA9IHsKICAgICByZXNldDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhpcy5icmVh
a3BvaW50cyA9IHt9OwogICAgICAgICB0aGlzLmxpc3RFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7
CiAgICAgICAgIGlmICh0aGlzLmxpc3RFbGVtZW50LnBhcmVudEVsZW1lbnQpIHsKICAgICAgICAg
ICAgIHRoaXMuYm9keUVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5saXN0RWxlbWVudCk7CkBAIC01
MCwxMiArNTAsOSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90CiAg
ICAgICAgIH0KICAgICB9LAogCi0gICAgYWRkQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2lu
dCkKKyAgICBfYnJlYWtwb2ludEFkZGVkOiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAg
IGlmICh0aGlzLmJyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIHRoaXMuYnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF0gPSBicmVha3BvaW50
OworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGE7CiAKICAgICAgICAgYnJlYWtw
b2ludC5hZGRFdmVudExpc3RlbmVyKCJlbmFibGVkIiwgdGhpcy5fYnJlYWtwb2ludEVuYWJsZUNo
YW5nZWQsIHRoaXMpOwogICAgICAgICBicmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoImRpc2Fi
bGVkIiwgdGhpcy5fYnJlYWtwb2ludEVuYWJsZUNoYW5nZWQsIHRoaXMpOwpAQCAtNjcsOCArNjQs
NiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90CiAgICAgICAgICAg
ICB0aGlzLmJvZHlFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZW1wdHlFbGVtZW50KTsKICAgICAg
ICAgICAgIHRoaXMuYm9keUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5saXN0RWxlbWVudCk7CiAg
ICAgICAgIH0KLQotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldEJyZWFrcG9pbnQoYnJlYWtw
b2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5lLCBicmVha3BvaW50LmVuYWJsZWQsIGJyZWFr
cG9pbnQuY29uZGl0aW9uKTsKICAgICB9LAogCiAgICAgX2FwcGVuZEJyZWFrcG9pbnRFbGVtZW50
OiBmdW5jdGlvbihicmVha3BvaW50KQpAQCAtMTIxLDExICsxMTYsOSBAQCBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90CiAgICAgICAgIHRoaXMubGlzdEVsZW1lbnQuYXBw
ZW5kQ2hpbGQoYnJlYWtwb2ludEVsZW1lbnQpOwogICAgIH0sCiAKLSAgICByZW1vdmVCcmVha3Bv
aW50OiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIF9icmVha3BvaW50UmVtb3ZlZDogZnVuY3Rp
b24oZXZlbnQpCiAgICAgewotICAgICAgICBpZiAoIXRoaXMuYnJlYWtwb2ludHNbYnJlYWtwb2lu
dC5pZF0pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlbGV0ZSB0aGlzLmJyZWFrcG9p
bnRzW2JyZWFrcG9pbnQuaWRdOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGE7
CiAKICAgICAgICAgYnJlYWtwb2ludC5yZW1vdmVFdmVudExpc3RlbmVyKCJlbmFibGVkIiwgbnVs
bCwgdGhpcyk7CiAgICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzYWJs
ZWQiLCBudWxsLCB0aGlzKTsKQEAgLTEzOCw4ICsxMzEsNiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludHNTaWRlYmFyUGFuZS5wcm90CiAgICAgICAgICAgICB0aGlzLmJvZHlFbGVtZW50LnJlbW92
ZUNoaWxkKHRoaXMubGlzdEVsZW1lbnQpOwogICAgICAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5h
cHBlbmRDaGlsZCh0aGlzLmVtcHR5RWxlbWVudCk7CiAgICAgICAgIH0KLQotICAgICAgICBJbnNw
ZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtw
b2ludC5saW5lKTsKICAgICB9LAogCiAgICAgX2JyZWFrcG9pbnRFbmFibGVDaGFuZ2VkOiBmdW5j
dGlvbihldmVudCkKQEAgLTE0OCw3ICsxMzksNiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNT
aWRlYmFyUGFuZS5wcm90CiAKICAgICAgICAgdmFyIGNoZWNrYm94ID0gYnJlYWtwb2ludC5fYnJl
YWtwb2ludExpc3RFbGVtZW50LmZpcnN0Q2hpbGQ7CiAgICAgICAgIGNoZWNrYm94LmNoZWNrZWQg
PSBicmVha3BvaW50LmVuYWJsZWQ7Ci0gICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtw
b2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50LmxpbmUsIGJyZWFrcG9pbnQuZW5h
YmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOwogICAgIH0sCiAKICAgICBfYnJlYWtwb2ludFRl
eHRDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9PYmplY3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L09iamVjdC5qcwkocmV2aXNpb24gNjA0MzMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvT2JqZWN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIFdlYkluc3BlY3Rv
ci5PYmplY3QucHJvdG90eXBlID0gewogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2xpc3RlbmVy
c1tldmVudFR5cGVdOwogICAgIH0sCiAKLSAgICBkaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnM6IGZ1
bmN0aW9uKGV2ZW50VHlwZSkgeworICAgIGRpc3BhdGNoRXZlbnRUb0xpc3RlbmVyczogZnVuY3Rp
b24oZXZlbnRUeXBlLCBldmVudERhdGEpIHsKICAgICAgICAgaWYgKCEoIl9saXN0ZW5lcnMiIGlu
IHRoaXMpIHx8ICEoZXZlbnRUeXBlIGluIHRoaXMuX2xpc3RlbmVycykpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKQEAgLTY2LDcgKzY2LDcgQEAgV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOwogICAgICAgICB9
CiAKLSAgICAgICAgdmFyIGV2ZW50ID0ge3RhcmdldDogdGhpcywgdHlwZTogZXZlbnRUeXBlLCBk
ZWZhdWx0UHJldmVudGVkOiBmYWxzZX07CisgICAgICAgIHZhciBldmVudCA9IHt0YXJnZXQ6IHRo
aXMsIHR5cGU6IGV2ZW50VHlwZSwgZGF0YTogZXZlbnREYXRhLCBkZWZhdWx0UHJldmVudGVkOiBm
YWxzZX07CiAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9IHN0b3BQcm9wYWdhdGlvbjsK
ICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDsKIApJbmRleDog
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanMJKHJldmlzaW9uIDYwNDMz
KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDggKzczLDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdFZpZXcucHJvdG90eXBl
ID0gewogCiAgICAgX2FkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmUpCiAgICAgewotICAgICAg
ICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCh0aGlzLnNjcmlw
dC5zb3VyY2VVUkwsIGxpbmUsIHRoaXMuc2NyaXB0LnNvdXJjZUlEKTsKLSAgICAgICAgV2ViSW5z
cGVjdG9yLnBhbmVscy5zY3JpcHRzLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CisgICAgICAg
IFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRCcmVha3BvaW50KHRoaXMuc2NyaXB0
LnNvdXJjZUlELCB0aGlzLnNjcmlwdC5zb3VyY2VVUkwsIGxpbmUsIHRydWUsICIiKTsKICAgICB9
LAogCiAgICAgX2VkaXRMaW5lQ29tcGxldGU6IGZ1bmN0aW9uKG5ld0JvZHkpCkluZGV4OiBXZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMJKHJldmlzaW9uIDYwNDMz
KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTcxLDYgKzE3MSwxMCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsID0g
ZnVuY3Rpb24oKQogICAgIHRoaXMuX2RlYnVnZ2VyRW5hYmxlZCA9IFByZWZlcmVuY2VzLmRlYnVn
Z2VyQWx3YXlzRW5hYmxlZDsKICAgICBpZiAoUHJlZmVyZW5jZXMuZGVidWdnZXJBbHdheXNFbmFi
bGVkKQogICAgICAgICB0aGlzLl9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IHRydWU7CisKKyAg
ICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcigiYnJlYWtw
b2ludC1hZGRlZCIsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7CisgICAgV2ViSW5zcGVj
dG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoImJyZWFrcG9pbnQtcmVtb3Zl
ZCIsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKKwogICAgIHRoaXMucmVzZXQoKTsK
IH0KIApAQCAtMjg1LDEzICsyODksMTMgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90
b3R5cGUgPSB7CiAgICAgICAgIGRlbGV0ZSByZXNvdXJjZS5fc2NyaXB0c1BlbmRpbmdSZXNvdXJj
ZUxvYWQ7CiAgICAgfSwKIAotICAgIGFkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQp
CisgICAgX2JyZWFrcG9pbnRBZGRlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgeworICAgICAgICB2
YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGE7CisKICAgICAgICAgaWYgKCF0aGlzLmJyZWFrcG9p
bnRzQWN0aXZhdGVkKQogICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQnJlYWtwb2ludHNDbGlja2Vk
KCk7CiAKLSAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuYnJlYWtwb2ludHMuYWRkQnJlYWtwb2lu
dChicmVha3BvaW50KTsKLQogICAgICAgICB2YXIgc291cmNlRnJhbWU7CiAgICAgICAgIGlmIChi
cmVha3BvaW50LnVybCkgewogICAgICAgICAgICAgdmFyIHJlc291cmNlID0gV2ViSW5zcGVjdG9y
LnJlc291cmNlVVJMTWFwW2JyZWFrcG9pbnQudXJsXTsKQEAgLTMwOCw5ICszMTIsOSBAQCBXZWJJ
bnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHNvdXJjZUZy
YW1lLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CiAgICAgfSwKIAotICAgIHJlbW92ZUJyZWFr
cG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgX2JyZWFrcG9pbnRSZW1vdmVkOiBmdW5j
dGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLmJyZWFrcG9pbnRz
LnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CisgICAgICAgIHZhciBicmVha3BvaW50ID0g
ZXZlbnQuZGF0YTsKIAogICAgICAgICB2YXIgc291cmNlRnJhbWU7CiAgICAgICAgIGlmIChicmVh
a3BvaW50LnVybCkgewpAQCAtMzM5LDIyICszNDMsMTggQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQ
YW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gTmVl
ZCB0byBjbGVhciBicmVha3BvaW50cyBhbmQgcmUtY3JlYXRlIHRoZW0gbGF0ZXIgd2hlbiBlZGl0
aW5nIHNvdXJjZS4KLSAgICAgICAgdmFyIGJyZWFrcG9pbnRzUGFuZWwgPSB0aGlzLnNpZGViYXJQ
YW5lcy5icmVha3BvaW50czsKLSAgICAgICAgdmFyIG5ld0JyZWFrcG9pbnRzID0gW107Ci0gICAg
ICAgIGZvciAodmFyIGlkIGluIGJyZWFrcG9pbnRzUGFuZWwuYnJlYWtwb2ludHMpIHsKLSAgICAg
ICAgICAgIHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludHNQYW5lbC5icmVha3BvaW50c1tpZF07
Ci0gICAgICAgICAgICBicmVha3BvaW50c1BhbmVsLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2lu
dCk7Ci0gICAgICAgICAgICBuZXdCcmVha3BvaW50cy5wdXNoKGJyZWFrcG9pbnQpOwotICAgICAg
ICB9CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFu
YWdlci5icmVha3BvaW50c0ZvclNvdXJjZUlEKHNvdXJjZUlEKTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5icmVha3BvaW50TWFuYWdlci5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnRzW2ldKTsK
IAogICAgICAgICBmdW5jdGlvbiBteWNhbGxiYWNrKG5ld0JvZHkpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGNhbGxiYWNrKG5ld0JvZHkpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBuZXdCcmVha3BvaW50cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciBicmVh
a3BvaW50ID0gbmV3QnJlYWtwb2ludHNbaV07CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIGJyZWFr
cG9pbnQgPSBicmVha3BvaW50c1tpXTsKICAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5s
aW5lID49IGxpbmUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQubGluZSArPSBsaW5l
c0NvdW50VG9TaGlmdDsKLSAgICAgICAgICAgICAgICB0aGlzLmFkZEJyZWFrcG9pbnQoYnJlYWtw
b2ludCk7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmFk
ZEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAgICAg
ICAgIHZhciBjYWxsYmFja0lkID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAobXljYWxsYmFj
ay5iaW5kKHRoaXMpKQpAQCAtNjEyLDE0ICs2MTIsMTAgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQ
YW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAg
ICAgICB2aWV3ID0gV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXMucmVzb3VyY2VWaWV3Rm9y
UmVzb3VyY2Uoc2NyaXB0T3JSZXNvdXJjZSk7CiAgICAgICAgICAgICB2aWV3LmhlYWRlcnNWaXNp
YmxlID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLnNpZGViYXJQ
YW5lcy5icmVha3BvaW50cy5icmVha3BvaW50czsKLSAgICAgICAgICAgIGZvciAodmFyIGJyZWFr
cG9pbnRJZCBpbiBicmVha3BvaW50cykgewotICAgICAgICAgICAgICAgIHZhciBicmVha3BvaW50
ID0gYnJlYWtwb2ludHNbYnJlYWtwb2ludElkXTsKLSAgICAgICAgICAgICAgICBpZiAoYnJlYWtw
b2ludC51cmwgPT09IHNjcmlwdE9yUmVzb3VyY2UudXJsKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZUZyYW1lRm9yU2NyaXB0T3JSZXNvdXJjZShz
Y3JpcHRPclJlc291cmNlKTsKLSAgICAgICAgICAgICAgICAgICAgc291cmNlRnJhbWUuYWRkQnJl
YWtwb2ludChicmVha3BvaW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICB2YXIgc291cmNlRnJhbWUgPSB0aGlzLl9zb3VyY2VGcmFtZUZvclNjcmlwdE9y
UmVzb3VyY2Uoc2NyaXB0T3JSZXNvdXJjZSk7CisgICAgICAgICAgICB2YXIgYnJlYWtwb2ludHMg
PSBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYnJlYWtwb2ludHNGb3JVUkwoc2NyaXB0
T3JSZXNvdXJjZS51cmwpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3Bv
aW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBzb3VyY2VGcmFtZS5hZGRCcmVha3Bv
aW50KGJyZWFrcG9pbnRzW2ldKTsKICAgICAgICAgfSBlbHNlIGlmIChzY3JpcHRPclJlc291cmNl
IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNjcmlwdCkKICAgICAgICAgICAgIHZpZXcgPSB0aGlz
LnNjcmlwdFZpZXdGb3JTY3JpcHQoc2NyaXB0T3JSZXNvdXJjZSk7CiAKSW5kZXg6IFdlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMJKHJldmlzaW9uIDYwNDMzKQorKysg
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC00MjgsNyArNDI4LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9
IHsKICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJBZGQgQ29uZGl0aW9uYWwgQnJlYWtwb2ludOKApiIpLCBhZGRDb25kaXRpb25hbEJyZWFr
cG9pbnQuYmluZCh0aGlzKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlz
IHJvdyBoYXMgYSBicmVha3BvaW50LCB3ZSB3YW50IHRvIHNob3cgZWRpdCBhbmQgcmVtb3ZlIGJy
ZWFrcG9pbnQsIGFuZCBlaXRoZXIgZGlzYWJsZSBvciBlbmFibGUuCi0gICAgICAgICAgICBjb250
ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVtb3ZlIEJyZWFrcG9p
bnQiKSwgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnJlbW92ZUJyZWFrcG9pbnQuYmluZChX
ZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMsIGJyZWFrcG9pbnQpKTsKKyAgICAgICAgICAgIGNv
bnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZW1vdmUgQnJlYWtw
b2ludCIpLCB0aGlzLl9yZW1vdmVCcmVha3BvaW50RGVsZWdhdGUuYmluZCh0aGlzLCBicmVha3Bv
aW50KSk7CiAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5V
SVN0cmluZygiRWRpdCBCcmVha3BvaW504oCmIiksIHRoaXMuX2VkaXRCcmVha3BvaW50Q29uZGl0
aW9uLmJpbmQodGhpcywgYnJlYWtwb2ludCkpOwogICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQu
ZW5hYmxlZCkKICAgICAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiRGlzYWJsZSBCcmVha3BvaW50IiksIGZ1bmN0aW9uKCkgeyBicmVha3Bv
aW50LmVuYWJsZWQgPSBmYWxzZTsgfSk7CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlVmlldy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlVmlldy5qcwkocmV2aXNpb24gNjA0MzMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU291cmNlVmlldy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTEyLDE2ICsxMTIsMTIg
QEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlID0gewogICAgIF9hZGRCcmVha3Bv
aW50OiBmdW5jdGlvbihsaW5lKQogICAgIHsKICAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5f
c291cmNlSURGb3JMaW5lKGxpbmUpOwotICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5z
Y3JpcHRzKSB7Ci0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludCh0aGlzLnJlc291cmNlLnVybCwgbGluZSwgc291cmNlSUQpOwotICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7
Ci0gICAgICAgIH0KKyAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEJy
ZWFrcG9pbnQoc291cmNlSUQsIHRoaXMucmVzb3VyY2UudXJsLCBsaW5lLCB0cnVlLCAiIik7CiAg
ICAgfSwKIAogICAgIF9yZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQogICAg
IHsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cykKLSAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQp
OworICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIucmVtb3ZlQnJlYWtwb2lu
dChicmVha3BvaW50KTsKICAgICB9LAogCiAgICAgX2VkaXRMaW5lOiBmdW5jdGlvbihsaW5lLCBu
ZXdDb250ZW50KQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMJKHJl
dmlzaW9uIDYwNDMzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMJ
KHdvcmtpbmcgY29weSkKQEAgLTgsNyArOCw3IEBACiAgICAgPGZpbGU+QXVkaXRSdWxlcy5qczwv
ZmlsZT4KICAgICA8ZmlsZT5BdWRpdHNQYW5lbC5qczwvZmlsZT4KICAgICA8ZmlsZT5Cb3R0b21V
cFByb2ZpbGVEYXRhR3JpZFRyZWUuanM8L2ZpbGU+Ci0gICAgPGZpbGU+QnJlYWtwb2ludC5qczwv
ZmlsZT4KKyAgICA8ZmlsZT5CcmVha3BvaW50TWFuYWdlci5qczwvZmlsZT4KICAgICA8ZmlsZT5C
cmVha3BvaW50c1NpZGViYXJQYW5lLmpzPC9maWxlPgogICAgIDxmaWxlPkNhbGxiYWNrLmpzPC9m
aWxlPgogICAgIDxmaWxlPkNhbGxTdGFja1NpZGViYXJQYW5lLmpzPC9maWxlPgpJbmRleDogV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAkocmV2aXNpb24gNjA0MzMp
CisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDcgKzYzLDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQTwogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRhdGFHcmlk
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJD
b29raWVJdGVtc1ZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9IlNjcmlwdC5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iQnJlYWtwb2ludC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQnJlYWtwb2ludE1hbmFnZXIuanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNpZGViYXJQYW5lLmpz
Ij48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJFbGVt
ZW50c1RyZWVPdXRsaW5lLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJTaWRlYmFyVHJlZUVsZW1lbnQuanMiPjwvc2NyaXB0PgpJbmRleDogV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCShyZXZpc2lvbiA2MDQzMykKKysr
IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMJKHdvcmtpbmcgY29weSkK
QEAgLTQ2NSw2ICs0NjUsOCBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24oKQogICAg
ICAgICBvdGhlcjogbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZUNhdGVnb3J5KCJvdGhlciIsIFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiT3RoZXIiKSwgInJnYigxODYsMTg2LDE4NikiKQogICAgIH07
CiAKKyAgICB0aGlzLmJyZWFrcG9pbnRNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50TWFuYWdlcigpOworCiAgICAgdGhpcy5wYW5lbHMgPSB7fTsKICAgICB0aGlzLl9jcmVhdGVQ
YW5lbHMoKTsKICAgICB0aGlzLl9wYW5lbEhpc3RvcnkgPSBuZXcgV2ViSW5zcGVjdG9yLlBhbmVs
SGlzdG9yeSgpOwpAQCAtMTMyMyw5ICsxMzI1LDcgQEAgV2ViSW5zcGVjdG9yLnBhcnNlZFNjcmlw
dFNvdXJjZSA9IGZ1bmN0aQogCiBXZWJJbnNwZWN0b3IucmVzdG9yZWRCcmVha3BvaW50ID0gZnVu
Y3Rpb24oc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQogewot
ICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50KHNvdXJjZVVS
TCwgbGluZSwgc291cmNlSUQsIGNvbmRpdGlvbik7Ci0gICAgYnJlYWtwb2ludC5lbmFibGVkID0g
ZW5hYmxlZDsKLSAgICB0aGlzLnBhbmVscy5zY3JpcHRzLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2lu
dCk7CisgICAgdGhpcy5icmVha3BvaW50TWFuYWdlci5hZGRCcmVha3BvaW50KHNvdXJjZUlELCBz
b3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CiB9CiAKIFdlYkluc3BlY3Rvci5m
YWlsZWRUb1BhcnNlU2NyaXB0U291cmNlID0gZnVuY3Rpb24oc291cmNlVVJMLCBzb3VyY2UsIHN0
YXJ0aW5nTGluZSwgZXJyb3JMaW5lLCBlcnJvck1lc3NhZ2UpCkBAIC0xMzYwLDYgKzEzNjAsOCBA
QCBXZWJJbnNwZWN0b3IucmVzZXQgPSBmdW5jdGlvbigpCiAgICAgICAgICAgICBwYW5lbC5yZXNl
dCgpOwogICAgIH0KIAorICAgIHRoaXMuYnJlYWtwb2ludE1hbmFnZXIucmVzZXQoKTsKKwogICAg
IGZvciAodmFyIGNhdGVnb3J5IGluIHRoaXMucmVzb3VyY2VDYXRlZ29yaWVzKQogICAgICAgICB0
aGlzLnJlc291cmNlQ2F0ZWdvcmllc1tjYXRlZ29yeV0ucmVtb3ZlQWxsUmVzb3VyY2VzKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57484</attachid>
            <date>2010-05-31 11:29:24 -0700</date>
            <delta_ts>2010-05-31 12:48:22 -0700</delta_ts>
            <desc>Updated after CR.</desc>
            <filename>breakpoints.refactoring.diff</filename>
            <type>text/plain</type>
            <size>27033</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDQ0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMTAtMDUtMzEgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVmYWN0b3Jpbmcgb2YgV2ViSW5zcGVjdG9yIGNvZGUuIE1vdmVkIGJyZWFrcG9pbnRz
IGFkZGluZy9yZW1vdmluZyBsb2dpYyB0byBCcmVha3BvaW50TWFuYWdlci4KKworICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanM6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qczogQWRkZWQuCisgICAgICAg
IChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5hZGRCcmVha3BvaW50KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQnJlYWtwb2ludCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLmJyZWFr
cG9pbnRzRm9yU291cmNlSUQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5h
Z2VyLnByb3RvdHlwZS5icmVha3BvaW50c0ZvclVSTCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX3NhdmVCcmVha3BvaW50T25CYWNrZW5kKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX3JlbW92
ZUJyZWFrcG9pbnRGcm9tQmFja2VuZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuZ2V0IGVuYWJs
ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLnNldCBlbmFi
bGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5nZXQgc291
cmNlVGV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuc2V0
IHNvdXJjZVRleHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBl
LmdldCBsYWJlbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUu
Z2V0IGlkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5nZXQg
Y29uZGl0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5z
ZXQgY29uZGl0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRz
U2lkZWJhclBhbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFy
UGFuZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90
b3R5cGUucmVzZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRzU2lkZWJhclBh
bmUucHJvdG90eXBlLl9icmVha3BvaW50QWRkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlLl9icmVha3BvaW50UmVtb3ZlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUuX2JyZWFr
cG9pbnRFbmFibGVDaGFuZ2VkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL09iamVj
dC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3
LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFZpZXcucHJvdG90eXBlLl9hZGRCcmVh
a3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX2JyZWFrcG9pbnRBZGRlZCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlbW92ZWQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuZWRpdFNjcmlwdFNv
dXJjZS5teWNhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJv
dG90eXBlLmVkaXRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQ
YW5lbC5wcm90b3R5cGUuX3Nob3dTY3JpcHRPclJlc291cmNlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lLnByb3RvdHlwZS5fY29udGV4dE1lbnUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlVmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnBy
b3RvdHlwZS5fYWRkQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlVmll
dy5wcm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvV2ViS2l0LnFyYzoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IucmVzdG9y
ZWRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5yZXNldCk6CisKIDIwMTAtMDUt
MzEgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkLCBhZGQgYSBmaWxlIG5vdCBhZGRlZCBpbiByNjA0NDUuCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNp
b24gNjA0MzMpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzg3
MSw3ICszODcxLDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVs
ZXMuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRzUGFuZWwuanMn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQm90dG9tVXBQcm9maWxlRGF0YUdy
aWRUcmVlLmpzJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQu
anMnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIu
anMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFy
UGFuZS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsYmFjay5qcycs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRlYmFyUGFuZS5q
cycsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDYw
NDMzKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBj
b3B5KQpAQCAtNDQ3NjgsNyArNDQ3NjgsNyBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJ
PEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxCcmVha3Bv
aW50LmpzIg0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEJyZWFr
cG9pbnRNYW5hZ2VyLmpzIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQpJbmRl
eDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanMJKHJldmlzaW9uIDYw
NDMzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLVdlYkluc3BlY3Rvci5CcmVha3BvaW50ID0gZnVuY3Rpb24odXJsLCBs
aW5lLCBzb3VyY2VJRCwgY29uZGl0aW9uKQotewotICAgIHRoaXMudXJsID0gdXJsOwotICAgIHRo
aXMubGluZSA9IGxpbmU7Ci0gICAgdGhpcy5zb3VyY2VJRCA9IHNvdXJjZUlEOwotICAgIHRoaXMu
X2VuYWJsZWQgPSB0cnVlOwotICAgIHRoaXMuX3NvdXJjZVRleHQgPSAiIjsKLSAgICB0aGlzLl9j
b25kaXRpb24gPSBjb25kaXRpb24gfHwgIiI7Ci19Ci0KLVdlYkluc3BlY3Rvci5CcmVha3BvaW50
LnByb3RvdHlwZSA9IHsKLSAgICBnZXQgZW5hYmxlZCgpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fZW5hYmxlZDsKLSAgICB9LAotCi0gICAgc2V0IGVuYWJsZWQoeCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGlzLl9lbmFibGVkID09PSB4KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIHRoaXMuX2VuYWJsZWQgPSB4OwotCi0gICAgICAgIGlmICh0aGlzLl9lbmFibGVkKQotICAg
ICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImVuYWJsZWQiKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImRpc2Fi
bGVkIik7Ci0gICAgfSwKLQotICAgIGdldCBzb3VyY2VUZXh0KCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9zb3VyY2VUZXh0OwotICAgIH0sCi0KLSAgICBzZXQgc291cmNlVGV4dCh0ZXh0
KQotICAgIHsKLSAgICAgICAgdGhpcy5fc291cmNlVGV4dCA9IHRleHQ7Ci0gICAgICAgIHRoaXMu
ZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJ0ZXh0LWNoYW5nZWQiKTsKLSAgICB9LAotCi0gICAg
Z2V0IGxhYmVsKCkKLSAgICB7Ci0gICAgICAgIHZhciBkaXNwbGF5TmFtZSA9ICh0aGlzLnVybCA/
IFdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvclVSTCh0aGlzLnVybCkgOiBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIihwcm9ncmFtKSIpKTsKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlOYW1lICsgIjoi
ICsgdGhpcy5saW5lOwotICAgIH0sCi0KLSAgICBnZXQgaWQoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuc291cmNlSUQgKyAiOiIgKyB0aGlzLmxpbmU7Ci0gICAgfSwKLQotICAgIGdldCBj
b25kaXRpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbjsKLSAgICB9
LAotCi0gICAgc2V0IGNvbmRpdGlvbihjKQotICAgIHsKLSAgICAgICAgYyA9IGMgfHwgIiI7Ci0g
ICAgICAgIGlmICh0aGlzLl9jb25kaXRpb24gPT09IGMpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgdGhpcy5fY29uZGl0aW9uID0gYzsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50
VG9MaXN0ZW5lcnMoImNvbmRpdGlvbi1jaGFuZ2VkIik7Ci0KLSAgICAgICAgaWYgKHRoaXMuZW5h
YmxlZCkKLSAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludCh0aGlzLnNv
dXJjZUlELCB0aGlzLmxpbmUsIHRoaXMuZW5hYmxlZCwgdGhpcy5jb25kaXRpb24pOwotICAgIH0K
LX0KLQotV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYklu
c3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKK1dlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlciA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0
aGlzLl9icmVha3BvaW50cyA9IHt9OworfQorCitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFn
ZXIucHJvdG90eXBlID0geworICAgIGFkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBz
b3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIHZhciBi
cmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50KHRoaXMsIHNvdXJjZUlELCBz
b3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CisgICAgICAgIGlmICh0aGlzLl9i
cmVha3BvaW50c1ticmVha3BvaW50LmlkXSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
dGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF0gPSBicmVha3BvaW50OworICAgICAgICB0
aGlzLl9zYXZlQnJlYWtwb2ludE9uQmFja2VuZChicmVha3BvaW50KTsKKyAgICAgICAgdGhpcy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImJyZWFrcG9pbnQtYWRkZWQiLCBicmVha3BvaW50KTsK
KyAgICB9LCAgICAKKworICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQp
CisgICAgeworICAgICAgICBpZiAoIShicmVha3BvaW50LmlkIGluIHRoaXMuX2JyZWFrcG9pbnRz
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRz
W2JyZWFrcG9pbnQuaWRdOworICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RnJvbUJhY2tl
bmQoYnJlYWtwb2ludCk7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJi
cmVha3BvaW50LXJlbW92ZWQiLCBicmVha3BvaW50KTsKKyAgICB9LAorCisgICAgYnJlYWtwb2lu
dHNGb3JTb3VyY2VJRDogZnVuY3Rpb24oc291cmNlSUQpCisgICAgeworICAgICAgICB2YXIgYnJl
YWtwb2ludHMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fYnJlYWtwb2ludHMp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50c1tpZF0uc291cmNlSUQgPT09IHNv
dXJjZUlEKQorICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzLnB1c2godGhpcy5fYnJlYWtwb2lu
dHNbaWRdKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnJlYWtwb2ludHM7CisgICAgfSwg
ICAgCisKKyAgICBicmVha3BvaW50c0ZvclVSTDogZnVuY3Rpb24odXJsKQorICAgIHsKKyAgICAg
ICAgdmFyIGJyZWFrcG9pbnRzID0gW107CisgICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX2Jy
ZWFrcG9pbnRzKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHNbaWRdLnVybCA9
PT0gdXJsKQorICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzLnB1c2godGhpcy5fYnJlYWtwb2lu
dHNbaWRdKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnJlYWtwb2ludHM7ICAgICAgICAK
KyAgICB9LAorCisgICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2Jy
ZWFrcG9pbnRzID0ge307CisgICAgfSwKKworICAgIF9zYXZlQnJlYWtwb2ludE9uQmFja2VuZDog
ZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICB7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0
QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50LmxpbmUsIGJyZWFrcG9p
bnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOworICAgIH0sCisKKyAgICBfcmVtb3Zl
QnJlYWtwb2ludEZyb21CYWNrZW5kOiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIHsKKyAgICAg
ICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQs
IGJyZWFrcG9pbnQubGluZSk7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBl
OworCitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCA9IGZ1bmN0aW9uKGJyZWFrcG9pbnRNYW5hZ2Vy
LCBzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pCit7CisgICAg
dGhpcy51cmwgPSBzb3VyY2VVUkw7CisgICAgdGhpcy5saW5lID0gbGluZTsKKyAgICB0aGlzLnNv
dXJjZUlEID0gc291cmNlSUQ7CisgICAgdGhpcy5fZW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgdGhp
cy5fY29uZGl0aW9uID0gY29uZGl0aW9uIHx8ICIiOworICAgIHRoaXMuX3NvdXJjZVRleHQgPSAi
IjsKKyAgICB0aGlzLl9icmVha3BvaW50TWFuYWdlciA9IGJyZWFrcG9pbnRNYW5hZ2VyOworfQor
CitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CisgICAgZ2V0IGVuYWJsZWQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7CisgICAgfSwKKworICAgIHNl
dCBlbmFibGVkKHgpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZW5hYmxlZCA9PT0geCkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9lbmFibGVkID0geDsKKyAgICAgICAg
dGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuX3NhdmVCcmVha3BvaW50T25CYWNrZW5kKHRoaXMpOwor
ICAgICAgICBpZiAodGhpcy5fZW5hYmxlZCkKKyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVu
dFRvTGlzdGVuZXJzKCJlbmFibGVkIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMu
ZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJkaXNhYmxlZCIpOworICAgIH0sCisKKyAgICBnZXQg
c291cmNlVGV4dCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlVGV4dDsKKyAg
ICB9LAorCisgICAgc2V0IHNvdXJjZVRleHQodGV4dCkKKyAgICB7CisgICAgICAgIHRoaXMuX3Nv
dXJjZVRleHQgPSB0ZXh0OworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygi
dGV4dC1jaGFuZ2VkIik7CisgICAgfSwKKworICAgIGdldCBsYWJlbCgpCisgICAgeworICAgICAg
ICB2YXIgZGlzcGxheU5hbWUgPSAodGhpcy51cmwgPyBXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVG
b3JVUkwodGhpcy51cmwpIDogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIocHJvZ3JhbSkiKSk7Cisg
ICAgICAgIHJldHVybiBkaXNwbGF5TmFtZSArICI6IiArIHRoaXMubGluZTsKKyAgICB9LAorCisg
ICAgZ2V0IGlkKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLnNvdXJjZUlEICsgIjoiICsg
dGhpcy5saW5lOworICAgIH0sCisKKyAgICBnZXQgY29uZGl0aW9uKCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLl9jb25kaXRpb247CisgICAgfSwKKworICAgIHNldCBjb25kaXRpb24oYykK
KyAgICB7CisgICAgICAgIGMgPSBjIHx8ICIiOworICAgICAgICBpZiAodGhpcy5fY29uZGl0aW9u
ID09PSBjKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX2NvbmRpdGlvbiA9
IGM7CisgICAgICAgIGlmICh0aGlzLmVuYWJsZWQpCisgICAgICAgICAgICB0aGlzLl9icmVha3Bv
aW50TWFuYWdlci5fc2F2ZUJyZWFrcG9pbnRPbkJhY2tlbmQodGhpcyk7CisgICAgICAgIHRoaXMu
ZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJjb25kaXRpb24tY2hhbmdlZCIpOworICAgIH0KK30K
KworV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3Bl
Y3Rvci5PYmplY3QucHJvdG90eXBlOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMJKHJldmlzaW9uIDYwNDMzKQor
KysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDYgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRz
U2lkZWJhclBhbmUgPSBmdQogewogICAgIFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZS5jYWxsKHRo
aXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQnJlYWtwb2ludHMiKSk7CiAKLSAgICB0aGlzLmJy
ZWFrcG9pbnRzID0ge307Ci0KICAgICB0aGlzLmxpc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgib2wiKTsKICAgICB0aGlzLmxpc3RFbGVtZW50LmNsYXNzTmFtZSA9ICJicmVha3Bv
aW50LWxpc3QiOwogCkBAIC0zNywxMiArMzUsMTQgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRz
U2lkZWJhclBhbmUgPSBmdQogICAgIHRoaXMuZW1wdHlFbGVtZW50LnRleHRDb250ZW50ID0gV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJObyBCcmVha3BvaW50cyIpOwogCiAgICAgdGhpcy5ib2R5RWxl
bWVudC5hcHBlbmRDaGlsZCh0aGlzLmVtcHR5RWxlbWVudCk7CisKKyAgICBXZWJJbnNwZWN0b3Iu
YnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcigiYnJlYWtwb2ludC1hZGRlZCIsIHRo
aXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRN
YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoImJyZWFrcG9pbnQtcmVtb3ZlZCIsIHRoaXMuX2JyZWFr
cG9pbnRSZW1vdmVkLCB0aGlzKTsgICAgCiB9CiAKIFdlYkluc3BlY3Rvci5CcmVha3BvaW50c1Np
ZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICByZXNldDogZnVuY3Rpb24oKQogICAgIHsKLSAg
ICAgICAgdGhpcy5icmVha3BvaW50cyA9IHt9OwogICAgICAgICB0aGlzLmxpc3RFbGVtZW50LnJl
bW92ZUNoaWxkcmVuKCk7CiAgICAgICAgIGlmICh0aGlzLmxpc3RFbGVtZW50LnBhcmVudEVsZW1l
bnQpIHsKICAgICAgICAgICAgIHRoaXMuYm9keUVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5saXN0
RWxlbWVudCk7CkBAIC01MCwxMiArNTAsOSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRl
YmFyUGFuZS5wcm90CiAgICAgICAgIH0KICAgICB9LAogCi0gICAgYWRkQnJlYWtwb2ludDogZnVu
Y3Rpb24oYnJlYWtwb2ludCkKKyAgICBfYnJlYWtwb2ludEFkZGVkOiBmdW5jdGlvbihldmVudCkK
ICAgICB7Ci0gICAgICAgIGlmICh0aGlzLmJyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuYnJlYWtwb2ludHNbYnJlYWtwb2ludC5p
ZF0gPSBicmVha3BvaW50OworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGE7CiAK
ICAgICAgICAgYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJlbmFibGVkIiwgdGhpcy5fYnJl
YWtwb2ludEVuYWJsZUNoYW5nZWQsIHRoaXMpOwogICAgICAgICBicmVha3BvaW50LmFkZEV2ZW50
TGlzdGVuZXIoImRpc2FibGVkIiwgdGhpcy5fYnJlYWtwb2ludEVuYWJsZUNoYW5nZWQsIHRoaXMp
OwpAQCAtNjcsOCArNjQsNiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5w
cm90CiAgICAgICAgICAgICB0aGlzLmJvZHlFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZW1wdHlF
bGVtZW50KTsKICAgICAgICAgICAgIHRoaXMuYm9keUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5s
aXN0RWxlbWVudCk7CiAgICAgICAgIH0KLQotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldEJy
ZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5lLCBicmVha3BvaW50
LmVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsKICAgICB9LAogCiAgICAgX2FwcGVuZEJy
ZWFrcG9pbnRFbGVtZW50OiBmdW5jdGlvbihicmVha3BvaW50KQpAQCAtMTIxLDExICsxMTYsOSBA
QCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90CiAgICAgICAgIHRoaXMu
bGlzdEVsZW1lbnQuYXBwZW5kQ2hpbGQoYnJlYWtwb2ludEVsZW1lbnQpOwogICAgIH0sCiAKLSAg
ICByZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIF9icmVha3BvaW50
UmVtb3ZlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewotICAgICAgICBpZiAoIXRoaXMuYnJlYWtw
b2ludHNbYnJlYWtwb2ludC5pZF0pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlbGV0
ZSB0aGlzLmJyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdOworICAgICAgICB2YXIgYnJlYWtwb2lu
dCA9IGV2ZW50LmRhdGE7CiAKICAgICAgICAgYnJlYWtwb2ludC5yZW1vdmVFdmVudExpc3RlbmVy
KCJlbmFibGVkIiwgbnVsbCwgdGhpcyk7CiAgICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlRXZlbnRM
aXN0ZW5lcigiZGlzYWJsZWQiLCBudWxsLCB0aGlzKTsKQEAgLTEzOCw4ICsxMzEsNiBAQCBXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90CiAgICAgICAgICAgICB0aGlzLmJv
ZHlFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMubGlzdEVsZW1lbnQpOwogICAgICAgICAgICAgdGhp
cy5ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVtcHR5RWxlbWVudCk7CiAgICAgICAgIH0K
LQotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5z
b3VyY2VJRCwgYnJlYWtwb2ludC5saW5lKTsKICAgICB9LAogCiAgICAgX2JyZWFrcG9pbnRFbmFi
bGVDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKQEAgLTE0OCw3ICsxMzksNiBAQCBXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90CiAKICAgICAgICAgdmFyIGNoZWNrYm94ID0g
YnJlYWtwb2ludC5fYnJlYWtwb2ludExpc3RFbGVtZW50LmZpcnN0Q2hpbGQ7CiAgICAgICAgIGNo
ZWNrYm94LmNoZWNrZWQgPSBicmVha3BvaW50LmVuYWJsZWQ7Ci0gICAgICAgIEluc3BlY3RvckJh
Y2tlbmQuc2V0QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50LmxpbmUs
IGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOwogICAgIH0sCiAKICAg
ICBfYnJlYWtwb2ludFRleHRDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKSW5kZXg6IFdlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL09iamVjdC5qcwkocmV2aXNpb24gNjA0MzMpCisrKyBXZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3
IEBAIFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlID0gewogICAgICAgICAgICAgZGVsZXRl
IHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdOwogICAgIH0sCiAKLSAgICBkaXNwYXRjaEV2ZW50
VG9MaXN0ZW5lcnM6IGZ1bmN0aW9uKGV2ZW50VHlwZSkgeworICAgIGRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVyczogZnVuY3Rpb24oZXZlbnRUeXBlLCBldmVudERhdGEpIHsKICAgICAgICAgaWYgKCEo
Il9saXN0ZW5lcnMiIGluIHRoaXMpIHx8ICEoZXZlbnRUeXBlIGluIHRoaXMuX2xpc3RlbmVycykp
CiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTY2LDcgKzY2LDcgQEAgV2ViSW5zcGVjdG9yLk9i
amVjdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0
cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgdmFyIGV2ZW50ID0ge3RhcmdldDogdGhpcywgdHlw
ZTogZXZlbnRUeXBlLCBkZWZhdWx0UHJldmVudGVkOiBmYWxzZX07CisgICAgICAgIHZhciBldmVu
dCA9IHt0YXJnZXQ6IHRoaXMsIHR5cGU6IGV2ZW50VHlwZSwgZGF0YTogZXZlbnREYXRhLCBkZWZh
dWx0UHJldmVudGVkOiBmYWxzZX07CiAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9IHN0
b3BQcm9wYWdhdGlvbjsKICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVm
YXVsdDsKIApJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanMJ
KHJldmlzaW9uIDYwNDMzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZp
ZXcuanMJKHdvcmtpbmcgY29weSkKQEAgLTczLDggKzczLDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlw
dFZpZXcucHJvdG90eXBlID0gewogCiAgICAgX2FkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmUp
CiAgICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludCh0aGlzLnNjcmlwdC5zb3VyY2VVUkwsIGxpbmUsIHRoaXMuc2NyaXB0LnNvdXJjZUlEKTsK
LSAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLmFkZEJyZWFrcG9pbnQoYnJlYWtw
b2ludCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRCcmVha3Bv
aW50KHRoaXMuc2NyaXB0LnNvdXJjZUlELCB0aGlzLnNjcmlwdC5zb3VyY2VVUkwsIGxpbmUsIHRy
dWUsICIiKTsKICAgICB9LAogCiAgICAgX2VkaXRMaW5lQ29tcGxldGU6IGZ1bmN0aW9uKG5ld0Jv
ZHkpCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMJ
KHJldmlzaW9uIDYwNDMzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQ
YW5lbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTcxLDYgKzE3MSwxMCBAQCBXZWJJbnNwZWN0b3Iu
U2NyaXB0c1BhbmVsID0gZnVuY3Rpb24oKQogICAgIHRoaXMuX2RlYnVnZ2VyRW5hYmxlZCA9IFBy
ZWZlcmVuY2VzLmRlYnVnZ2VyQWx3YXlzRW5hYmxlZDsKICAgICBpZiAoUHJlZmVyZW5jZXMuZGVi
dWdnZXJBbHdheXNFbmFibGVkKQogICAgICAgICB0aGlzLl9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93
biA9IHRydWU7CisKKyAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRM
aXN0ZW5lcigiYnJlYWtwb2ludC1hZGRlZCIsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7
CisgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoImJy
ZWFrcG9pbnQtcmVtb3ZlZCIsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKKwogICAg
IHRoaXMucmVzZXQoKTsKIH0KIApAQCAtMjg1LDEzICsyODksMTMgQEAgV2ViSW5zcGVjdG9yLlNj
cmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGRlbGV0ZSByZXNvdXJjZS5fc2NyaXB0
c1BlbmRpbmdSZXNvdXJjZUxvYWQ7CiAgICAgfSwKIAotICAgIGFkZEJyZWFrcG9pbnQ6IGZ1bmN0
aW9uKGJyZWFrcG9pbnQpCisgICAgX2JyZWFrcG9pbnRBZGRlZDogZnVuY3Rpb24oZXZlbnQpCiAg
ICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGE7CisKICAgICAgICAgaWYg
KCF0aGlzLmJyZWFrcG9pbnRzQWN0aXZhdGVkKQogICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQnJl
YWtwb2ludHNDbGlja2VkKCk7CiAKLSAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuYnJlYWtwb2lu
dHMuYWRkQnJlYWtwb2ludChicmVha3BvaW50KTsKLQogICAgICAgICB2YXIgc291cmNlRnJhbWU7
CiAgICAgICAgIGlmIChicmVha3BvaW50LnVybCkgewogICAgICAgICAgICAgdmFyIHJlc291cmNl
ID0gV2ViSW5zcGVjdG9yLnJlc291cmNlVVJMTWFwW2JyZWFrcG9pbnQudXJsXTsKQEAgLTMwOCw5
ICszMTIsOSBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIHNvdXJjZUZyYW1lLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CiAgICAgfSwKIAot
ICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgX2JyZWFrcG9p
bnRSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIHRoaXMuc2lkZWJhclBh
bmVzLmJyZWFrcG9pbnRzLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CisgICAgICAgIHZh
ciBicmVha3BvaW50ID0gZXZlbnQuZGF0YTsKIAogICAgICAgICB2YXIgc291cmNlRnJhbWU7CiAg
ICAgICAgIGlmIChicmVha3BvaW50LnVybCkgewpAQCAtMzM5LDIyICszNDMsMTggQEAgV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgLy8gTmVlZCB0byBjbGVhciBicmVha3BvaW50cyBhbmQgcmUtY3JlYXRlIHRoZW0g
bGF0ZXIgd2hlbiBlZGl0aW5nIHNvdXJjZS4KLSAgICAgICAgdmFyIGJyZWFrcG9pbnRzUGFuZWwg
PSB0aGlzLnNpZGViYXJQYW5lcy5icmVha3BvaW50czsKLSAgICAgICAgdmFyIG5ld0JyZWFrcG9p
bnRzID0gW107Ci0gICAgICAgIGZvciAodmFyIGlkIGluIGJyZWFrcG9pbnRzUGFuZWwuYnJlYWtw
b2ludHMpIHsKLSAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludHNQYW5lbC5i
cmVha3BvaW50c1tpZF07Ci0gICAgICAgICAgICBicmVha3BvaW50c1BhbmVsLnJlbW92ZUJyZWFr
cG9pbnQoYnJlYWtwb2ludCk7Ci0gICAgICAgICAgICBuZXdCcmVha3BvaW50cy5wdXNoKGJyZWFr
cG9pbnQpOwotICAgICAgICB9CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rv
ci5icmVha3BvaW50TWFuYWdlci5icmVha3BvaW50c0ZvclNvdXJjZUlEKHNvdXJjZUlEKTsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5yZW1vdmVCcmVha3BvaW50KGJy
ZWFrcG9pbnRzW2ldKTsKIAogICAgICAgICBmdW5jdGlvbiBteWNhbGxiYWNrKG5ld0JvZHkpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGNhbGxiYWNrKG5ld0JvZHkpOwotICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBuZXdCcmVha3BvaW50cy5sZW5ndGg7ICsraSkgewotICAgICAgICAg
ICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3QnJlYWtwb2ludHNbaV07CisgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1tpXTsKICAgICAgICAgICAgICAgICBp
ZiAoYnJlYWtwb2ludC5saW5lID49IGxpbmUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9p
bnQubGluZSArPSBsaW5lc0NvdW50VG9TaGlmdDsKLSAgICAgICAgICAgICAgICB0aGlzLmFkZEJy
ZWFrcG9pbnQoYnJlYWtwb2ludCk7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFr
cG9pbnRNYW5hZ2VyLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH07CiAgICAgICAgIHZhciBjYWxsYmFja0lkID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNr
LndyYXAobXljYWxsYmFjay5iaW5kKHRoaXMpKQpAQCAtNjEyLDE0ICs2MTIsMTAgQEAgV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGw7CiAgICAgICAgICAgICB2aWV3ID0gV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXMu
cmVzb3VyY2VWaWV3Rm9yUmVzb3VyY2Uoc2NyaXB0T3JSZXNvdXJjZSk7CiAgICAgICAgICAgICB2
aWV3LmhlYWRlcnNWaXNpYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludHMg
PSB0aGlzLnNpZGViYXJQYW5lcy5icmVha3BvaW50cy5icmVha3BvaW50czsKLSAgICAgICAgICAg
IGZvciAodmFyIGJyZWFrcG9pbnRJZCBpbiBicmVha3BvaW50cykgewotICAgICAgICAgICAgICAg
IHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludHNbYnJlYWtwb2ludElkXTsKLSAgICAgICAgICAg
ICAgICBpZiAoYnJlYWtwb2ludC51cmwgPT09IHNjcmlwdE9yUmVzb3VyY2UudXJsKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZUZyYW1lRm9yU2Ny
aXB0T3JSZXNvdXJjZShzY3JpcHRPclJlc291cmNlKTsKLSAgICAgICAgICAgICAgICAgICAgc291
cmNlRnJhbWUuYWRkQnJlYWtwb2ludChicmVha3BvaW50KTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgc291cmNlRnJhbWUgPSB0aGlzLl9zb3VyY2VG
cmFtZUZvclNjcmlwdE9yUmVzb3VyY2Uoc2NyaXB0T3JSZXNvdXJjZSk7CisgICAgICAgICAgICB2
YXIgYnJlYWtwb2ludHMgPSBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYnJlYWtwb2lu
dHNGb3JVUkwoc2NyaXB0T3JSZXNvdXJjZS51cmwpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBzb3VyY2VG
cmFtZS5hZGRCcmVha3BvaW50KGJyZWFrcG9pbnRzW2ldKTsKICAgICAgICAgfSBlbHNlIGlmIChz
Y3JpcHRPclJlc291cmNlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNjcmlwdCkKICAgICAgICAg
ICAgIHZpZXcgPSB0aGlzLnNjcmlwdFZpZXdGb3JTY3JpcHQoc2NyaXB0T3JSZXNvdXJjZSk7CiAK
SW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMJKHJldmlz
aW9uIDYwNDMzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC00MjgsNyArNDI4LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJBZGQgQ29uZGl0aW9uYWwgQnJlYWtwb2ludOKApiIpLCBhZGRD
b25kaXRpb25hbEJyZWFrcG9pbnQuYmluZCh0aGlzKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAvLyBUaGlzIHJvdyBoYXMgYSBicmVha3BvaW50LCB3ZSB3YW50IHRvIHNob3cgZWRp
dCBhbmQgcmVtb3ZlIGJyZWFrcG9pbnQsIGFuZCBlaXRoZXIgZGlzYWJsZSBvciBlbmFibGUuCi0g
ICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygi
UmVtb3ZlIEJyZWFrcG9pbnQiKSwgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnJlbW92ZUJy
ZWFrcG9pbnQuYmluZChXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMsIGJyZWFrcG9pbnQpKTsK
KyAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJSZW1vdmUgQnJlYWtwb2ludCIpLCB0aGlzLl9yZW1vdmVCcmVha3BvaW50RGVsZWdhdGUuYmlu
ZCh0aGlzLCBicmVha3BvaW50KSk7CiAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVt
KFdlYkluc3BlY3Rvci5VSVN0cmluZygiRWRpdCBCcmVha3BvaW504oCmIiksIHRoaXMuX2VkaXRC
cmVha3BvaW50Q29uZGl0aW9uLmJpbmQodGhpcywgYnJlYWtwb2ludCkpOwogICAgICAgICAgICAg
aWYgKGJyZWFrcG9pbnQuZW5hYmxlZCkKICAgICAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBl
bmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGlzYWJsZSBCcmVha3BvaW50IiksIGZ1bmN0
aW9uKCkgeyBicmVha3BvaW50LmVuYWJsZWQgPSBmYWxzZTsgfSk7CkluZGV4OiBXZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcwkocmV2aXNpb24gNjA0MzMpCisrKyBXZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MTEyLDE2ICsxMTIsMTIgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlID0gewog
ICAgIF9hZGRCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lKQogICAgIHsKICAgICAgICAgdmFyIHNv
dXJjZUlEID0gdGhpcy5fc291cmNlSURGb3JMaW5lKGxpbmUpOwotICAgICAgICBpZiAoV2ViSW5z
cGVjdG9yLnBhbmVscy5zY3JpcHRzKSB7Ci0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5l
dyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCh0aGlzLnJlc291cmNlLnVybCwgbGluZSwgc291cmNl
SUQpOwotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLmFkZEJyZWFrcG9p
bnQoYnJlYWtwb2ludCk7Ci0gICAgICAgIH0KKyAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9p
bnRNYW5hZ2VyLmFkZEJyZWFrcG9pbnQoc291cmNlSUQsIHRoaXMucmVzb3VyY2UudXJsLCBsaW5l
LCB0cnVlLCAiIik7CiAgICAgfSwKIAogICAgIF9yZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihi
cmVha3BvaW50KQogICAgIHsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0
cykKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5yZW1vdmVCcmVha3Bv
aW50KGJyZWFrcG9pbnQpOworICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIu
cmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50KTsKICAgICB9LAogCiAgICAgX2VkaXRMaW5lOiBm
dW5jdGlvbihsaW5lLCBuZXdDb250ZW50KQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1dlYktpdC5xcmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1dlYktpdC5xcmMJKHJldmlzaW9uIDYwNDMzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1dlYktpdC5xcmMJKHdvcmtpbmcgY29weSkKQEAgLTgsNyArOCw3IEBACiAgICAgPGZpbGU+
QXVkaXRSdWxlcy5qczwvZmlsZT4KICAgICA8ZmlsZT5BdWRpdHNQYW5lbC5qczwvZmlsZT4KICAg
ICA8ZmlsZT5Cb3R0b21VcFByb2ZpbGVEYXRhR3JpZFRyZWUuanM8L2ZpbGU+Ci0gICAgPGZpbGU+
QnJlYWtwb2ludC5qczwvZmlsZT4KKyAgICA8ZmlsZT5CcmVha3BvaW50TWFuYWdlci5qczwvZmls
ZT4KICAgICA8ZmlsZT5CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzPC9maWxlPgogICAgIDxmaWxl
PkNhbGxiYWNrLmpzPC9maWxlPgogICAgIDxmaWxlPkNhbGxTdGFja1NpZGViYXJQYW5lLmpzPC9m
aWxlPgpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAko
cmV2aXNpb24gNjA0MzMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQTwogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9IkRhdGFHcmlkLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJDb29raWVJdGVtc1ZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNjcmlwdC5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQnJlYWtwb2ludC5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQnJlYWtwb2ludE1hbmFn
ZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IlNpZGViYXJQYW5lLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJFbGVtZW50c1RyZWVPdXRsaW5lLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTaWRlYmFyVHJlZUVsZW1lbnQuanMiPjwvc2Ny
aXB0PgpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCShyZXZp
c2lvbiA2MDQzMykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2NSw2ICs0NjUsOCBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0g
ZnVuY3Rpb24oKQogICAgICAgICBvdGhlcjogbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZUNhdGVn
b3J5KCJvdGhlciIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiT3RoZXIiKSwgInJnYigxODYsMTg2
LDE4NikiKQogICAgIH07CiAKKyAgICB0aGlzLmJyZWFrcG9pbnRNYW5hZ2VyID0gbmV3IFdlYklu
c3BlY3Rvci5CcmVha3BvaW50TWFuYWdlcigpOworCiAgICAgdGhpcy5wYW5lbHMgPSB7fTsKICAg
ICB0aGlzLl9jcmVhdGVQYW5lbHMoKTsKICAgICB0aGlzLl9wYW5lbEhpc3RvcnkgPSBuZXcgV2Vi
SW5zcGVjdG9yLlBhbmVsSGlzdG9yeSgpOwpAQCAtMTMyMyw5ICsxMzI1LDcgQEAgV2ViSW5zcGVj
dG9yLnBhcnNlZFNjcmlwdFNvdXJjZSA9IGZ1bmN0aQogCiBXZWJJbnNwZWN0b3IucmVzdG9yZWRC
cmVha3BvaW50ID0gZnVuY3Rpb24oc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwg
Y29uZGl0aW9uKQogewotICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50KHNvdXJjZVVSTCwgbGluZSwgc291cmNlSUQsIGNvbmRpdGlvbik7Ci0gICAgYnJlYWtw
b2ludC5lbmFibGVkID0gZW5hYmxlZDsKLSAgICB0aGlzLnBhbmVscy5zY3JpcHRzLmFkZEJyZWFr
cG9pbnQoYnJlYWtwb2ludCk7CisgICAgdGhpcy5icmVha3BvaW50TWFuYWdlci5hZGRCcmVha3Bv
aW50KHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CiB9CiAK
IFdlYkluc3BlY3Rvci5mYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlID0gZnVuY3Rpb24oc291cmNl
VVJMLCBzb3VyY2UsIHN0YXJ0aW5nTGluZSwgZXJyb3JMaW5lLCBlcnJvck1lc3NhZ2UpCkBAIC0x
MzYwLDYgKzEzNjAsOCBAQCBXZWJJbnNwZWN0b3IucmVzZXQgPSBmdW5jdGlvbigpCiAgICAgICAg
ICAgICBwYW5lbC5yZXNldCgpOwogICAgIH0KIAorICAgIHRoaXMuYnJlYWtwb2ludE1hbmFnZXIu
cmVzZXQoKTsKKwogICAgIGZvciAodmFyIGNhdGVnb3J5IGluIHRoaXMucmVzb3VyY2VDYXRlZ29y
aWVzKQogICAgICAgICB0aGlzLnJlc291cmNlQ2F0ZWdvcmllc1tjYXRlZ29yeV0ucmVtb3ZlQWxs
UmVzb3VyY2VzKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58250</attachid>
            <date>2010-06-09 09:02:28 -0700</date>
            <delta_ts>2010-06-16 04:05:54 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>sticky.diff</filename>
            <type>text/plain</type>
            <size>21342</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWMwYTU2MS4uOWVhMGY2MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxMC0wNi0wOSAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwZXJzaXN0IGJyZWFrcG9pbnRz
IGluIGluc3BlY3RvciBzZXR0aW5ncy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MTkwCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNv
bnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29t
bWl0TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRCcmVh
a3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZUJy
ZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUGFy
c2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6bG9hZEJy
ZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNhdmVC
cmVha3BvaW50cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6c291cmNlQnJlYWtwb2ludHNGcm9tSW5zcGVjdG9y
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Omluc3BlY3Rvck9iamVjdEZyb21Tb3VyY2VCcmVh
a3BvaW50cyk6CisgICAgICAgICogaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5hZGRCcmVha3BvaW50KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUucmVzdG9y
ZWRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5w
cm90b3R5cGUuYnJlYWtwb2ludHNGb3JTb3VyY2VJRCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9hZGRCcmVha3BvaW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5y
ZXN0b3JlZEJyZWFrcG9pbnQpOgorCiAyMDEwLTA2LTA5ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxv
c3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
aW5kZXggNzUyZGIyZS4uMTU3YjM3NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMzM3LDYgKzEzMzcsNyBAQCB3ZWJj
b3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAg
XAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oIFwKIAlXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9TY3Jp
cHRCcmVha3BvaW50LmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5o
IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmggXAogCVdlYkNvcmUv
aW5zcGVjdG9yL1NjcmlwdEdDRXZlbnRMaXN0ZW5lci5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggM2MwZmVlNS4uYTEwODQ0
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKQEAgLTE3MDIsNiArMTcwMiw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlclJlc291cmNlLmgnLAor
ICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmNwcCcsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L1NjcmlwdERlYnVnTGlzdGVuZXIuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL1NjcmlwdEdD
RXZlbnRMaXN0ZW5lci5oJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJD
b3JlL1dlYkNvcmUucHJvCmluZGV4IDZhOTYzYWEuLmVhYWY4NDMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNzE3LDYgKzcxNyw3
IEBAIFNPVVJDRVMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAgXAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5jcHAgXAorICAgIGluc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmNw
cCBcCiAgICAgaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAgXAogICAgIGxvYWRl
ci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcCBcCiAgICAgbG9hZGVyL2FyY2hpdmUvQXJjaGl2
ZVJlc291cmNlLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA4
N2M2NTM0Li45NGI0MTI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAg
LTQ0ODEzLDYgKzQ0ODEzLDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxTY3JpcHRCcmVha3BvaW50LmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rv
clxTY3JpcHRCcmVha3BvaW50LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5NzhlM2U4Li4wN2QxMjdjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTg0LDYgKzU4NCw3
IEBACiAJCTFDRjZCRTE0MEU5QkI0NjcwMDI1RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlv
bi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRjZC
RTEyMEU5QkI0NjcwMDI1RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5tbSAqLzsgfTsK
IAkJMUNGNkJFMTUwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0Y2QkUxMzBF
OUJCNDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24uaCAqLzsgfTsKIAkJMUNG
QUUzMjMwQTZENkEzRjAwMzI1OTNEIC8qIGxpYm9iamMuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0ZBRTMyMjBBNkQ2QTNGMDAzMjU5M0Qg
LyogbGlib2JqYy5keWxpYiAqLzsgfTsKKwkJMjA4M0YzRTMxMUJGRDIxNjAwODc4QTAyIC8qIFNj
cmlwdEJyZWFrcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjA4M0YzRTIxMUJGRDIxNjAwODc4QTAyIC8qIFNjcmlwdEJyZWFrcG9pbnQuY3Bw
ICovOyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjhDMjg0NDEw
RDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjRGNTRFQUMxMDFGRTkxNDAwMEFFNzQxIC8q
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI0RjU0RUFBMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNh
Y2hlSG9zdC5jcHAgKi87IH07CiAJCTI0RjU0RUFEMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNh
dGlvbkNhY2hlSG9zdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMjRGNTRFQUIxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKQEAgLTYxNDQsNiArNjE0NSw3
IEBACiAJCTFDRjZCRTEyMEU5QkI0NjcwMDI1RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlv
bi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE9iakNOb2RlRmls
dGVyQ29uZGl0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0Y2QkUxMzBF
OUJCNDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNGQUUzMjIwQTZENkEzRjAwMzI1OTNEIC8qIGxpYm9iamMu
ZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAi
Y29tcGlsZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYm9iamMuZHlsaWI7IHBhdGggPSAvdXNy
L2xpYi9saWJvYmpjLmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OworCQkyMDgz
RjNFMjExQkZEMjE2MDA4NzhBMDIgLyogU2NyaXB0QnJlYWtwb2ludC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRCcmVha3BvaW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdy
YXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjRGNTRFQUExMDFGRTkxNDAwMEFF
NzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMjRGNTRFQUIxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVI
b3N0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcGxpY2F0aW9uQ2FjaGVI
b3N0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTE5NSw2ICsxMTE5Nyw3IEBA
CiAJCTFDODFCOTREMEU5NzMyRDkwMDI2NkUwNyAvKiBpbnNwZWN0b3IgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTIwODNGM0UyMTFCRkQyMTYwMDg3OEEw
MiAvKiBTY3JpcHRCcmVha3BvaW50LmNwcCAqLywKIAkJCQkxQzgxQjk1OTBFOTczMzA4MDAyNjZF
MDcgLyogZnJvbnQtZW5kICovLAogCQkJCTQxRjA2MThEMEY1RjA2OTgwMEEwN0VBQyAvKiBDb25z
b2xlTWVzc2FnZS5jcHAgKi8sCiAJCQkJNDFGMDYxOEMwRjVGMDY5ODAwQTA3RUFDIC8qIENvbnNv
bGVNZXNzYWdlLmggKi8sCkBAIC0yMTc1NSw2ICsyMTc1OCw3IEBACiAJCQkJQTdCQkUyNjYxMUFG
QjNGMjAwMDVFQTAzIC8qIEpTSFRNTE1ldGVyRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCNkIwNTQwOTExQjY4RjEwMDAyNTY0QzUgLyogSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUY5OEZGRjQ0MTFBMjY3NjIwMEY1NDhFOCAvKiBDU1NPTVV0aWxzLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTIwODNGM0UzMTFCRkQyMTYwMDg3OEEwMiAvKiBTY3JpcHRC
cmVha3BvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcAppbmRleCBhMzFkYmM0Li44YmQwMWFhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIklu
c3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5o
IgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFs
dWVzLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JUaW1lbGluZUFnZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtMTIwLDYgKzEy
MSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkZWJ1Z2dlckVuYWJsZWRTZXR0aW5nTmFt
ZSA9ICJkZWJ1Z2dlckVuYWJsZWQiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHByb2ZpbGVy
RW5hYmxlZFNldHRpbmdOYW1lID0gInByb2ZpbGVyRW5hYmxlZCI7CiBzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lID0gImluc3BlY3RvckF0dGFjaGVk
SGVpZ2h0IjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBsYXN0QWN0aXZlUGFuZWxTZXR0aW5n
TmFtZSA9ICJsYXN0QWN0aXZlUGFuZWwiOworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGJyZWFr
cG9pbnRzSW5zcGVjdG9yU2V0dGluZ1ByZWZpeCA9ICJicmVha3BvaW50czoiOwogCiBjb25zdCBT
dHJpbmcmIEluc3BlY3RvckNvbnRyb2xsZXI6OmZyb250ZW5kU2V0dGluZ3NTZXR0aW5nTmFtZSgp
CiB7CkBAIC0xNTksNiArMTYxLDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29u
dHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1fZGVi
dWdnZXJFbmFibGVkKGZhbHNlKQogICAgICwgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bihmYWxz
ZSkKICAgICAsIG1fcGF1c2VkU2NyaXB0U3RhdGUoMCkKKyAgICAsIG1fYnJlYWtwb2ludHNMb2Fk
ZWQoZmFsc2UpCiAgICAgLCBtX3Byb2ZpbGVyRW5hYmxlZCghV1RGX1VTRV9KU0MpCiAgICAgLCBt
X3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKGZhbHNlKQogICAgICwgbV9jdXJyZW50VXNl
ckluaXRpYXRlZFByb2ZpbGVOdW1iZXIoLTEpCkBAIC02NjEsNiArNjY0LDggQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAg
ICAgICAgIG1fY291bnRzLmNsZWFyKCk7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CiAgICAgICAgIG1fc291cmNlSURUb1VSTC5jbGVhcigpOworICAgICAgICBtX3N0aWNreUJyZWFr
cG9pbnRzLmNsZWFyKCk7CisgICAgICAgIG1fYnJlYWtwb2ludHNMb2FkZWQgPSBmYWxzZTsKICNl
bmRpZgogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQogICAgICAg
ICBtX3Byb2ZpbGVzLmNsZWFyKCk7CkBAIC0xNjU0LDEwICsxNjU5LDEyIEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNp
Z25lZCBsaW5lTnVtCiAgICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIGxvYWRCcmVha3BvaW50cygpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3Bv
aW50cz46Oml0ZXJhdG9yIGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5maW5kKHVybCk7CiAgICAg
aWYgKGl0ID09IG1fc3RpY2t5QnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIGl0ID0gbV9zdGlj
a3lCcmVha3BvaW50cy5zZXQodXJsLCBTb3VyY2VCcmVha3BvaW50cygpKS5maXJzdDsKICAgICBp
dC0+c2Vjb25kLnNldChsaW5lTnVtYmVyLCBicmVha3BvaW50KTsKKyAgICBzYXZlQnJlYWtwb2lu
dHMoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVCcmVha3BvaW50KGNv
bnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCkBAIC0xNjY4LDkgKzE2
NzUsMTEgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmUKICAgICBpZiAodXJsLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZEJyZWFrcG9pbnRzKCk7CiAgICAgSGFzaE1hcDxT
dHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJyZWFrcG9p
bnRzLmZpbmQodXJsKTsKICAgICBpZiAoaXQgIT0gbV9zdGlja3lCcmVha3BvaW50cy5lbmQoKSkK
ICAgICAgICAgaXQtPnNlY29uZC5yZW1vdmUobGluZU51bWJlcik7CisgICAgc2F2ZUJyZWFrcG9p
bnRzKCk7CiB9CiAKIC8vIEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyIGZ1bmN0aW9ucwpAQCAtMTY4
Miw2ICsxNjkxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXJzZVNvdXJjZShj
b25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIHUKICAgICBpZiAodXJsLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZEJyZWFrcG9pbnRzKCk7CiAgICAgSGFz
aE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJy
ZWFrcG9pbnRzLmZpbmQodXJsKTsKICAgICBpZiAoaXQgIT0gbV9zdGlja3lCcmVha3BvaW50cy5l
bmQoKSkgewogICAgICAgICBmb3IgKFNvdXJjZUJyZWFrcG9pbnRzOjppdGVyYXRvciBicmVha3Bv
aW50SXQgPSBpdC0+c2Vjb25kLmJlZ2luKCk7IGJyZWFrcG9pbnRJdCAhPSBpdC0+c2Vjb25kLmVu
ZCgpOyArK2JyZWFrcG9pbnRJdCkgewpAQCAtMTczNSw2ICsxNzQ1LDQwIEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwg
Y29uc3QgU3RyaW5nCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCit2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmxvYWRCcmVha3BvaW50cygpCit7CisgICAgaWYgKG1fYnJlYWtwb2ludHNMb2Fk
ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2JyZWFrcG9pbnRzTG9hZGVkID0gdHJ1ZTsKKyAg
ICBTdHJpbmcga2V5ID0gU3RyaW5nKGJyZWFrcG9pbnRzSW5zcGVjdG9yU2V0dGluZ1ByZWZpeCkg
KyBtX21haW5SZXNvdXJjZS0+cmVxdWVzdFVSTCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gcGFyc2VkU2V0dGluZyA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oc2V0dGluZyhrZXkp
KTsKKyAgICBpZiAoIXBhcnNlZFNldHRpbmcpCisgICAgICAgIHJldHVybjsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cyA9IHBhcnNlZFNldHRpbmctPmFzT2JqZWN0KCk7
CisgICAgaWYgKCFicmVha3BvaW50cykKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAoSW5zcGVj
dG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IGJyZWFrcG9pbnRzLT5iZWdpbigpOyBpdCAhPSBicmVh
a3BvaW50cy0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
YnJlYWtwb2ludHNGb3JVUkwgPSBpdC0+c2Vjb25kLT5hc09iamVjdCgpOworICAgICAgICBpZiAo
IWJyZWFrcG9pbnRzRm9yVVJMKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFNvdXJj
ZUJyZWFrcG9pbnRzJiBzb3VyY2VCcmVha3BvaW50cyA9IG1fc3RpY2t5QnJlYWtwb2ludHMuc2V0
KGl0LT5maXJzdCwgU291cmNlQnJlYWtwb2ludHMoKSkuZmlyc3QtPnNlY29uZDsKKyAgICAgICAg
c291cmNlQnJlYWtwb2ludHNGcm9tSW5zcGVjdG9yT2JqZWN0KGJyZWFrcG9pbnRzRm9yVVJMLCAm
c291cmNlQnJlYWtwb2ludHMpOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzYXZlQnJlYWtwb2ludHMoKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFr
cG9pbnRzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBmb3IgKEhhc2hNYXA8U3Ry
aW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9yIGl0KG1fc3RpY2t5QnJlYWtwb2ludHMu
YmVnaW4oKSk7IGl0ICE9IG1fc3RpY2t5QnJlYWtwb2ludHMuZW5kKCk7ICsraXQpIHsKKyAgICAg
ICAgaWYgKGl0LT5zZWNvbmQuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzRm9yVVJMID0gaW5zcGVjdG9y
T2JqZWN0RnJvbVNvdXJjZUJyZWFrcG9pbnRzKGl0LT5zZWNvbmQpOworICAgICAgICBicmVha3Bv
aW50cy0+c2V0KGl0LT5maXJzdCwgYnJlYWtwb2ludHNGb3JVUkwpOworICAgIH0KKyAgICBTdHJp
bmcga2V5ID0gU3RyaW5nKGJyZWFrcG9pbnRzSW5zcGVjdG9yU2V0dGluZ1ByZWZpeCkgKyBtX21h
aW5SZXNvdXJjZS0+cmVxdWVzdFVSTCgpOworICAgIHNldFNldHRpbmcoa2V5LCBicmVha3BvaW50
cy0+dG9KU09OU3RyaW5nKCkpOworfQorCiBzdGF0aWMgUGF0aCBxdWFkVG9QYXRoKGNvbnN0IEZs
b2F0UXVhZCYgcXVhZCkKIHsKICAgICBQYXRoIHF1YWRQYXRoOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oCmluZGV4IGJkYTI3YWYuLjllMzEyM2UgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTMxOCw2ICszMTgsMTEgQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29u
c3QgU3RyaW5nJiBqc29uUmVzdWx0KTsKIAorI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQorICAgIHZvaWQgbG9hZEJyZWFrcG9pbnRzKCk7CisgICAgdm9pZCBzYXZlQnJlYWtwb2ludHMo
KTsKKyNlbmRpZgorCiAgICAgUGFnZSogbV9pbnNwZWN0ZWRQYWdlOwogICAgIEluc3BlY3RvckNs
aWVudCogbV9jbGllbnQ7CiAgICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBtX2lu
c3BlY3RvckZyb250ZW5kQ2xpZW50OwpAQCAtMzYyLDYgKzM2Nyw3IEBAIHByaXZhdGU6CiAgICAg
U2NyaXB0U3RhdGUqIG1fcGF1c2VkU2NyaXB0U3RhdGU7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gbV9zb3VyY2VJRFRvVVJMOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3Bv
aW50cz4gbV9zdGlja3lCcmVha3BvaW50czsKKyAgICBib29sIG1fYnJlYWtwb2ludHNMb2FkZWQ7
CiAKICAgICBib29sIG1fcHJvZmlsZXJFbmFibGVkOwogICAgIGJvb2wgbV9yZWNvcmRpbmdVc2Vy
SW5pdGlhdGVkUHJvZmlsZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4
IDIzNjEyZTYuLjljOWE0OWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcApA
QCAtNDk5LDcgKzQ5OSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvclZh
bHVlOjphc0FycmF5KCkKICAgICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gSW5zcGVjdG9yVmFsdWU6OnJlYWRKU09OKGNvbnN0IFN0cmluZyYganNvbikKK1Bhc3NS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oY29uc3QgU3Ry
aW5nJiBqc29uKQogewogICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IGpzb24uY2hhcmFjdGVycygp
OwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBqc29uLmNoYXJhY3RlcnMoKSArIGpzb24ubGVuZ3Ro
KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmluZGV4IGI5OTIwYzQuLjMwYmE5NWEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCkBAIC03Myw3ICs3Myw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhc09iamVjdCgpOwog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXNBcnJheSgpOwogCi0gICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlYWRKU09OKGNvbnN0IFN0cmluZyYg
anNvbik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlSlNPTihj
b25zdCBTdHJpbmcmIGpzb24pOwogCiAgICAgU3RyaW5nIHRvSlNPTlN0cmluZygpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuY3BwIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZjYyZmRlZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL1NjcmlwdEJyZWFrcG9pbnQuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlNjcmlwdEJyZWFrcG9pbnQuaCIKKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit2b2lkIHNvdXJjZUJyZWFrcG9pbnRzRnJvbUluc3BlY3Rvck9iamVjdChQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHMsIFNvdXJjZUJyZWFrcG9pbnRzKiBzb3VyY2VC
cmVha3BvaW50cykKK3sKKyAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBi
cmVha3BvaW50cy0+YmVnaW4oKTsgaXQgIT0gYnJlYWtwb2ludHMtPmVuZCgpOyArK2l0KSB7Cisg
ICAgICAgIGJvb2wgb2s7CisgICAgICAgIGludCBsaW5lTnVtYmVyID0gaXQtPmZpcnN0LnRvSW50
KCZvayk7CisgICAgICAgIGlmICghb2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludCA9IGl0LT5zZWNvbmQtPmFzT2JqZWN0
KCk7CisgICAgICAgIGlmICghYnJlYWtwb2ludCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBib29sIGVuYWJsZWQ7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZW5hYmxl
ZFZhbHVlID0gYnJlYWtwb2ludC0+Z2V0KCJlbmFibGVkIik7CisgICAgICAgIGlmICghZW5hYmxl
ZFZhbHVlIHx8ICFlbmFibGVkVmFsdWUtPmFzQm9vbCgmZW5hYmxlZCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgU3RyaW5nIGNvbmRpdGlvbjsKKyAgICAgICAgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiBjb25kaXRpb25WYWx1ZSA9IGJyZWFrcG9pbnQtPmdldCgiY29uZGl0aW9uIik7
CisgICAgICAgIGlmICghY29uZGl0aW9uVmFsdWUgfHwgIWNvbmRpdGlvblZhbHVlLT5hc1N0cmlu
ZygmY29uZGl0aW9uKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzb3VyY2VCcmVh
a3BvaW50cy0+c2V0KGxpbmVOdW1iZXIsIFNjcmlwdEJyZWFrcG9pbnQoZW5hYmxlZCwgY29uZGl0
aW9uKSk7CisgICAgfQorfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5zcGVjdG9y
T2JqZWN0RnJvbVNvdXJjZUJyZWFrcG9pbnRzKGNvbnN0IFNvdXJjZUJyZWFrcG9pbnRzJiBzb3Vy
Y2VCcmVha3BvaW50cykKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50
cyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgZm9yIChTb3VyY2VCcmVha3BvaW50
czo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzb3VyY2VCcmVha3BvaW50cy5iZWdpbigpOyBpdCAhPSBz
b3VyY2VCcmVha3BvaW50cy5lbmQoKTsgKytpdCkgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBicmVha3BvaW50ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAg
YnJlYWtwb2ludC0+c2V0Qm9vbCgiZW5hYmxlZCIsIGl0LT5zZWNvbmQuZW5hYmxlZCk7CisgICAg
ICAgIGJyZWFrcG9pbnQtPnNldFN0cmluZygiY29uZGl0aW9uIiwgaXQtPnNlY29uZC5jb25kaXRp
b24pOworICAgICAgICBicmVha3BvaW50cy0+c2V0KFN0cmluZzo6bnVtYmVyKGl0LT5maXJzdCks
IGJyZWFrcG9pbnQpOworICAgIH0KKyAgICByZXR1cm4gYnJlYWtwb2ludHMucmVsZWFzZSgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oCmluZGV4IDg3NzU5MDEuLjVmNTI4YmUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmgKQEAgLTM1LDYgKzM1LDggQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CisKIHN0cnVjdCBT
Y3JpcHRCcmVha3BvaW50IHsKICAgICBTY3JpcHRCcmVha3BvaW50KGJvb2wgZW5hYmxlZCwgY29u
c3QgU3RyaW5nJiBjb25kaXRpb24pCiAgICAgICAgIDogZW5hYmxlZChlbmFibGVkKQpAQCAtNTIs
NiArNTQsOSBAQCBzdHJ1Y3QgU2NyaXB0QnJlYWtwb2ludCB7CiAKIHR5cGVkZWYgSGFzaE1hcDxp
bnQsIFNjcmlwdEJyZWFrcG9pbnQ+IFNvdXJjZUJyZWFrcG9pbnRzOwogCit2b2lkIHNvdXJjZUJy
ZWFrcG9pbnRzRnJvbUluc3BlY3Rvck9iamVjdChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4s
IFNvdXJjZUJyZWFrcG9pbnRzKik7CitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5zcGVj
dG9yT2JqZWN0RnJvbVNvdXJjZUJyZWFrcG9pbnRzKGNvbnN0IFNvdXJjZUJyZWFrcG9pbnRzJik7
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vICFkZWZpbmVkKFNjcmlwdEJy
ZWFrcG9pbnRfaCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVh
a3BvaW50TWFuYWdlci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50
TWFuYWdlci5qcwppbmRleCAzY2NjY2FjLi4wNjc2MDkzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCkBAIC01MSwxNSArNTEsMTQgQEAg
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAgIGFkZEJy
ZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNv
bmRpdGlvbikKICAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50KHRoaXMsIHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNv
bmRpdGlvbik7Ci0gICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHRoaXMuX29uZVRpbWVCcmVha3BvaW50
ICYmICh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludC5pZCA9PSBicmVha3BvaW50LmlkKSkKLSAgICAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsKLSAgICAgICAgdGhpcy5fYnJl
YWtwb2ludHNbYnJlYWtwb2ludC5pZF0gPSBicmVha3BvaW50OworICAgICAgICB2YXIgYnJlYWtw
b2ludCA9IHRoaXMuX2FkZEJyZWFrcG9pbnQoc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5h
YmxlZCwgY29uZGl0aW9uKTsKICAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRPbkJhY2tlbmQo
YnJlYWtwb2ludCk7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJicmVh
a3BvaW50LWFkZGVkIiwgYnJlYWtwb2ludCk7Ci0gICAgfSwgICAgCisgICAgfSwKKworICAgIHJl
c3RvcmVkQnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5h
YmxlZCwgY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludChzb3Vy
Y2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pOworICAgIH0sCiAKICAg
ICByZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQogICAgIHsKQEAgLTc4LDcg
Kzc3LDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKHRoaXMuX2JyZWFrcG9pbnRzW2lkXSk7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnRzOwotICAgIH0sICAgIAorICAgIH0s
CiAKICAgICBicmVha3BvaW50c0ZvclVSTDogZnVuY3Rpb24odXJsKQogICAgIHsKQEAgLTk2LDYg
Kzk1LDE4IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsKICAgICB9LAogCisgICAgX2Fk
ZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQs
IGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50KHRoaXMsIHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQs
IGNvbmRpdGlvbik7CisgICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50Lmlk
XSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHRoaXMuX29uZVRpbWVCcmVha3Bv
aW50ICYmICh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludC5pZCA9PSBicmVha3BvaW50LmlkKSkKKyAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsKKyAgICAgICAgdGhpcy5f
YnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF0gPSBicmVha3BvaW50OworICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycygiYnJlYWtwb2ludC1hZGRlZCIsIGJyZWFrcG9pbnQpOwor
ICAgICAgICByZXR1cm4gYnJlYWtwb2ludDsKKyAgICB9LAorCiAgICAgX3NhdmVCcmVha3BvaW50
T25CYWNrZW5kOiBmdW5jdGlvbihicmVha3BvaW50KQogICAgIHsKICAgICAgICAgSW5zcGVjdG9y
QmFja2VuZC5zZXRCcmVha3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQubGlu
ZSwgYnJlYWtwb2ludC5lbmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlvbik7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCA4YTc4Y2QyLi4zNjE5ZDUxIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTEzMjYsNyArMTMyNiw3
IEBAIFdlYkluc3BlY3Rvci5wYXJzZWRTY3JpcHRTb3VyY2UgPSBmdW5jdGlvbihzb3VyY2VJRCwg
c291cmNlVVJMLCBzb3VyY2UsIHN0YXJ0aW5nCiAKIFdlYkluc3BlY3Rvci5yZXN0b3JlZEJyZWFr
cG9pbnQgPSBmdW5jdGlvbihzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25k
aXRpb24pCiB7Ci0gICAgdGhpcy5icmVha3BvaW50TWFuYWdlci5hZGRCcmVha3BvaW50KHNvdXJj
ZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CisgICAgdGhpcy5icmVh
a3BvaW50TWFuYWdlci5yZXN0b3JlZEJyZWFrcG9pbnQoc291cmNlSUQsIHNvdXJjZVVSTCwgbGlu
ZSwgZW5hYmxlZCwgY29uZGl0aW9uKTsKIH0KIAogV2ViSW5zcGVjdG9yLmZhaWxlZFRvUGFyc2VT
Y3JpcHRTb3VyY2UgPSBmdW5jdGlvbihzb3VyY2VVUkwsIHNvdXJjZSwgc3RhcnRpbmdMaW5lLCBl
cnJvckxpbmUsIGVycm9yTWVzc2FnZSkK
</data>
<flag name="review"
          id="43198"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58870</attachid>
            <date>2010-06-16 04:05:54 -0700</date>
            <delta_ts>2010-06-16 04:40:25 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>sticky.diff</filename>
            <type>text/plain</type>
            <size>24601</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzJkNjkyYi4uN2I5ZDNhZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxMC0wNi0xNiAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwZXJzaXN0IGJyZWFrcG9pbnRz
IGluIGluc3BlY3RvciBzZXR0aW5ncy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MTkwCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmVuYWJsZURlYnVnZ2VyKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNlc3Npb25TZXR0aW5ncyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldEJyZWFrcG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlQnJlYWtwb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXJzZVNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpicmVha3BvaW50c1NldHRpbmdL
ZXkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6bG9hZEJyZWFrcG9p
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNhdmVCcmVha3Bv
aW50cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclZhbHVlOjpwYXJzZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0QnJlYWtwb2ludDo6c291cmNlQnJlYWtwb2ludHNG
cm9tSW5zcGVjdG9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEJyZWFrcG9pbnQ6
Omluc3BlY3Rvck9iamVjdEZyb21Tb3VyY2VCcmVha3BvaW50cyk6CisgICAgICAgICogaW5zcGVj
dG9yL1NjcmlwdEJyZWFrcG9pbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0Jy
ZWFrcG9pbnRNYW5hZ2VyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5h
Z2VyLnByb3RvdHlwZS5hZGRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5wcm90b3R5cGUucmVzdG9yZWRCcmVha3BvaW50KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuYnJlYWtwb2ludHNGb3JTb3Vy
Y2VJRCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBl
LmJyZWFrcG9pbnRzRm9yVVJMKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFu
YWdlci5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLnJlc3RvcmVkQnJlYWtw
b2ludCk6CisKIDIwMTAtMDYtMTUgIEpvY2VseW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRl
QG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmlu
ZGV4IDM0NTZmZDUuLjg4NzRiZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
KysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTMzOCw2ICsxMzM4LDcgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIFwK
IAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBcCiAJV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0
QnJlYWtwb2ludC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaCBc
CiAJV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oIFwKIAlXZWJDb3JlL2lu
c3BlY3Rvci9TY3JpcHRHQ0V2ZW50TGlzdGVuZXIuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGJmNDMyNTEuLjI2Y2RkZjMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0xNzAwLDYgKzE3MDAsNyBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oJywKKyAg
ICAgICAgICAgICdpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9T
Y3JpcHREZWJ1Z0xpc3RlbmVyLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHRHQ0V2
ZW50TGlzdGVuZXIuaCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29y
ZS9XZWJDb3JlLnBybwppbmRleCAyMGIyZDU5Li40MTEyM2JiIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTcyMCw2ICs3MjAsNyBA
QCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwIFwKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuY3BwIFwKKyAgICBpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAg
XAogICAgIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwIFwKICAgICBsb2FkZXIv
YXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAgXAogICAgIGxvYWRlci9hcmNoaXZlL0FyY2hpdmVS
ZXNvdXJjZS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggMjMw
ZjczNC4uODM5OGY1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00
NjgzNyw2ICs0NjgzNywxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcU2NyaXB0QnJlYWtwb2ludC5jcHAiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
U2NyaXB0QnJlYWtwb2ludC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzgwN2ZmMC4uYmE3MjA3MSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU4NCw2ICs1ODQsNyBA
QAogCQkxQ0Y2QkUxNDBFOUJCNDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24u
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0Y2QkUx
MjBFOUJCNDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24ubW0gKi87IH07CiAJ
CTFDRjZCRTE1MEU5QkI0NjcwMDI1RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNGNkJFMTMwRTlC
QjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLmggKi87IH07CiAJCTFDRkFF
MzIzMEE2RDZBM0YwMDMyNTkzRCAvKiBsaWJvYmpjLmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNGQUUzMjIwQTZENkEzRjAwMzI1OTNEIC8q
IGxpYm9iamMuZHlsaWIgKi87IH07CisJCTIwMEIxOTA5MTFDMjc3RDkwMERDQ0QzQSAvKiBTY3Jp
cHRCcmVha3BvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDIwMEIxOTA4MTFDMjc3RDkwMERDQ0QzQSAvKiBTY3JpcHRCcmVha3BvaW50LmNwcCAq
LzsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI4QzI4NDQxMEQ4
MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI0RjU0RUFDMTAxRkU5MTQwMDBBRTc0MSAvKiBB
cHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyNEY1NEVBQTEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNo
ZUhvc3QuY3BwICovOyB9OwogCQkyNEY1NEVBRDEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRp
b25DYWNoZUhvc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CkBAIC02MTMwLDYgKzYxMzEsNyBA
QAogCQkxQ0Y2QkUxMjBFOUJCNDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24u
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBPYmpDTm9kZUZpbHRl
ckNvbmRpdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNGNkJFMTMwRTlC
QjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFDRkFFMzIyMEE2RDZBM0YwMDMyNTkzRCAvKiBsaWJvYmpjLmR5
bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNv
bXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJvYmpjLmR5bGliOyBwYXRoID0gL3Vzci9s
aWIvbGlib2JqYy5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKKwkJMjAwQjE5
MDgxMUMyNzdEOTAwRENDRDNBIC8qIFNjcmlwdEJyZWFrcG9pbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0QnJlYWtwb2ludC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFw
cGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0V3JhcHBhYmxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RjU0RUFBMTAxRkU5MTQwMDBBRTc0
MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9z
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlSG9z
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyMTYsNiArMTEyMTgsNyBAQAog
CQkJCUYzNzVDQzA2MTE1MEQzMDAwMDhEREI4MSAvKiBJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5o
ICovLAogCQkJCTFDODFCQTA1MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1l
LmlkbCAqLywKIAkJCQlCQ0M2NEY1RjBEQ0ZCODRFMDA4MUVGM0IgLyogbG9jYWxpemVkU3RyaW5n
cy5qcyAqLywKKwkJCQkyMDBCMTkwODExQzI3N0Q5MDBEQ0NEM0EgLyogU2NyaXB0QnJlYWtwb2lu
dC5jcHAgKi8sCiAJCQkJN0FGRDRBOEExMTMxQzI3NjAwMzVCODgzIC8qIFNjcmlwdEJyZWFrcG9p
bnQuaCAqLywKIAkJCQk3QUZENEZGMzExMzI3N0I2MDAzNUI4ODMgLyogU2NyaXB0RGVidWdMaXN0
ZW5lci5oICovLAogCQkJCTlGQTM3RUVGMTE3MkZENDEwMEM0Q0Q1NSAvKiBTY3JpcHRQcm9maWxl
LmlkbCAqLywKQEAgLTIxNzIwLDYgKzIxNzIzLDcgQEAKIAkJCQlCNkIwNTQwOTExQjY4RjEwMDAy
NTY0QzUgLyogSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgxNkM4
MDY4MTFCRTg4N0UwMDlBNDVFOSAvKiBJREJLZXlSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4MTZDODBCMTExQkU5OTM0MDA5QTQ1RTkgLyogSlNJREJLZXlSYW5nZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkyMDBCMTkwOTExQzI3N0Q5MDBEQ0NEM0EgLyogU2NyaXB0QnJlYWtwb2ludC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKaW5k
ZXggMWVlZGRhMS4uYWY2MDBmYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5j
cHAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnN0b3BUaW1lbGlu
ZVByb2ZpbGVyKCkKIAogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjplbmFibGVEZWJ1Z2dlcihib29s
IGFsd2F5cykKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgIGlmIChtX2lu
c3BlY3RvckNvbnRyb2xsZXIgJiYgIVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5pc0RlYnVn
Z2VyQWx3YXlzRW5hYmxlZCgpKQogICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmVuYWJs
ZURlYnVnZ2VyRnJvbUZyb250ZW5kKGFsd2F5cyk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggNzkxNmNkMC4uMWIzMmE0YiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNs
dWRlICJJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJv
bnRlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIkluc3BlY3RvcldvcmtlclJlc291cmNlLmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTg2
LDYgKzg3LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL01ENS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgogCkBAIC0xNDEsNiArMTQzLDI3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBleHBpcmVDb25zb2xlTWVzc2FnZXNTdGVwID0gMTAwOwogCiBzdGF0aWMgdW5zaWduZWQgc19p
bnNwZWN0b3JDb250cm9sbGVyQ291bnQ7CiAKK25hbWVzcGFjZSB7CisKK1N0cmluZyBtZDVCYXNl
MTYoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgZGlnaXRz
W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisKKyAgICBNRDUgbWQ1OworICAgIG1kNS5hZGRCeXRl
cyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFjdGVycygpKSwg
c3RyaW5nLmxlbmd0aCgpICogMik7CisgICAgVmVjdG9yPHVpbnQ4X3QsIDE2PiBkaWdlc3Q7Cisg
ICAgbWQ1LmNoZWNrc3VtKGRpZ2VzdCk7CisKKyAgICBWZWN0b3I8Y2hhciwgMzI+IHJlc3VsdDsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyArK2kpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChkaWdpdHNbKGRpZ2VzdFtpXSA+PiA0KSAmIDB4Zl0pOworICAgICAgICByZXN1bHQuYXBwZW5k
KGRpZ2l0c1tkaWdlc3RbaV0gJiAweGZdKTsKKyAgICB9CisgICAgcmV0dXJuIFN0cmluZyhyZXN1
bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKK30KKworfQorCiBJbnNwZWN0b3JDb250cm9sbGVy
OjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50
KQogICAgIDogbV9pbnNwZWN0ZWRQYWdlKHBhZ2UpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCkBA
IC0xNjAsNiArMTgzLDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxl
cihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1fZGVidWdnZXJF
bmFibGVkKGZhbHNlKQogICAgICwgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bihmYWxzZSkKICAg
ICAsIG1fcGF1c2VkU2NyaXB0U3RhdGUoMCkKKyAgICAsIG1fYnJlYWtwb2ludHNMb2FkZWQoZmFs
c2UpCiAgICAgLCBtX3Byb2ZpbGVyRW5hYmxlZCghV1RGX1VTRV9KU0MpCiAgICAgLCBtX3JlY29y
ZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKGZhbHNlKQogICAgICwgbV9jdXJyZW50VXNlckluaXRp
YXRlZFByb2ZpbGVOdW1iZXIoLTEpCkBAIC0yMzIsNyArMjU2LDcgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpzZXRTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNlc3Npb25TZXR0aW5ncyhjb25z
dCBTdHJpbmcmIHNldHRpbmdzSlNPTikKIHsKLSAgICBtX3Nlc3Npb25TZXR0aW5ncyA9IEluc3Bl
Y3RvclZhbHVlOjpyZWFkSlNPTihzZXR0aW5nc0pTT04pOworICAgIG1fc2Vzc2lvblNldHRpbmdz
ID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihzZXR0aW5nc0pTT04pOwogfQogCiB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3QoTm9kZSogbm9kZSkKQEAgLTY3NCw2ICs2OTgsOCBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIq
IGxvYWRlcikKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICAgICAgbV9zb3Vy
Y2VJRFRvVVJMLmNsZWFyKCk7CiAgICAgICAgIG1fc2NyaXB0SURUb0NvbnRlbnQuY2xlYXIoKTsK
KyAgICAgICAgbV9zdGlja3lCcmVha3BvaW50cy5jbGVhcigpOworICAgICAgICBtX2JyZWFrcG9p
bnRzTG9hZGVkID0gZmFsc2U7CiAjZW5kaWYKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikgJiYgVVNFKEpTQykKICAgICAgICAgbV9wcm9maWxlcy5jbGVhcigpOwpAQCAtMTY3OCwxMCAr
MTcwNCwxMyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bQogICAgIGlmICh1cmwuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2lu
dHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuZmluZCh1cmwpOworICAgIGxv
YWRCcmVha3BvaW50cygpOworICAgIFN0cmluZyBrZXkgPSBtZDVCYXNlMTYodXJsKTsKKyAgICBI
YXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5
QnJlYWtwb2ludHMuZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBtX3N0aWNreUJyZWFrcG9pbnRz
LmVuZCgpKQotICAgICAgICBpdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuc2V0KHVybCwgU291cmNl
QnJlYWtwb2ludHMoKSkuZmlyc3Q7CisgICAgICAgIGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5z
ZXQoa2V5LCBTb3VyY2VCcmVha3BvaW50cygpKS5maXJzdDsKICAgICBpdC0+c2Vjb25kLnNldChs
aW5lTnVtYmVyLCBicmVha3BvaW50KTsKKyAgICBzYXZlQnJlYWtwb2ludHMoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291
cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCkBAIC0xNjkyLDkgKzE3MjEsMTEgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNl
SUQsIHVuc2lnbmVkIGxpbmUKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQg
PSBtX3N0aWNreUJyZWFrcG9pbnRzLmZpbmQodXJsKTsKKyAgICBsb2FkQnJlYWtwb2ludHMoKTsK
KyAgICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1f
c3RpY2t5QnJlYWtwb2ludHMuZmluZChtZDVCYXNlMTYodXJsKSk7CiAgICAgaWYgKGl0ICE9IG1f
c3RpY2t5QnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIGl0LT5zZWNvbmQucmVtb3ZlKGxpbmVO
dW1iZXIpOworICAgIHNhdmVCcmVha3BvaW50cygpOwogfQogCiAvLyBKYXZhU2NyaXB0RGVidWdM
aXN0ZW5lciBmdW5jdGlvbnMKQEAgLTE3MDcsNyArMTczOCw4IEBAIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3Ry
aW5nJiB1CiAgICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhh
c2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9yIGl0ID0gbV9zdGlja3lC
cmVha3BvaW50cy5maW5kKHVybCk7CisgICAgbG9hZEJyZWFrcG9pbnRzKCk7CisgICAgSGFzaE1h
cDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJyZWFr
cG9pbnRzLmZpbmQobWQ1QmFzZTE2KHVybCkpOwogICAgIGlmIChpdCAhPSBtX3N0aWNreUJyZWFr
cG9pbnRzLmVuZCgpKSB7CiAgICAgICAgIGZvciAoU291cmNlQnJlYWtwb2ludHM6Oml0ZXJhdG9y
IGJyZWFrcG9pbnRJdCA9IGl0LT5zZWNvbmQuYmVnaW4oKTsgYnJlYWtwb2ludEl0ICE9IGl0LT5z
ZWNvbmQuZW5kKCk7ICsrYnJlYWtwb2ludEl0KSB7CiAgICAgICAgICAgICBpZiAoZmlyc3RMaW5l
IDw9IGJyZWFrcG9pbnRJdC0+Zmlyc3QpIHsKQEAgLTE3NjEsNiArMTc5Myw0NSBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKIH0KIAorU3RyaW5nIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmJyZWFrcG9pbnRzU2V0dGluZ0tleSgpCit7CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGtleVByZWZpeCA9ICJicmVha3BvaW50czoiOworICAgIHJldHVybiBTdHJpbmco
a2V5UHJlZml4KSArIG1kNUJhc2UxNihtX21haW5SZXNvdXJjZS0+cmVxdWVzdFVSTCgpKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpsb2FkQnJlYWtwb2ludHMoKQoreworICAgIGlm
IChtX2JyZWFrcG9pbnRzTG9hZGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9icmVha3BvaW50
c0xvYWRlZCA9IHRydWU7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZFNldHRp
bmcgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKHNldHRpbmcoYnJlYWtwb2ludHNTZXR0aW5n
S2V5KCkpKTsKKyAgICBpZiAoIXBhcnNlZFNldHRpbmcpCisgICAgICAgIHJldHVybjsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cyA9IHBhcnNlZFNldHRpbmctPmFzT2Jq
ZWN0KCk7CisgICAgaWYgKCFicmVha3BvaW50cykKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAo
SW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IGJyZWFrcG9pbnRzLT5iZWdpbigpOyBpdCAh
PSBicmVha3BvaW50cy0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnJlYWtwb2ludHNGb3JVUkwgPSBpdC0+c2Vjb25kLT5hc09iamVjdCgpOworICAgICAg
ICBpZiAoIWJyZWFrcG9pbnRzRm9yVVJMKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IFNvdXJjZUJyZWFrcG9pbnRzJiBzb3VyY2VCcmVha3BvaW50cyA9IG1fc3RpY2t5QnJlYWtwb2lu
dHMuc2V0KGl0LT5maXJzdCwgU291cmNlQnJlYWtwb2ludHMoKSkuZmlyc3QtPnNlY29uZDsKKyAg
ICAgICAgU2NyaXB0QnJlYWtwb2ludDo6c291cmNlQnJlYWtwb2ludHNGcm9tSW5zcGVjdG9yT2Jq
ZWN0KGJyZWFrcG9pbnRzRm9yVVJMLCAmc291cmNlQnJlYWtwb2ludHMpOworICAgIH0KK30KKwor
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlQnJlYWtwb2ludHMoKQoreworICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9y
IGl0KG1fc3RpY2t5QnJlYWtwb2ludHMuYmVnaW4oKSk7IGl0ICE9IG1fc3RpY2t5QnJlYWtwb2lu
dHMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT5zZWNvbmQuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFr
cG9pbnRzRm9yVVJMID0gU2NyaXB0QnJlYWtwb2ludDo6aW5zcGVjdG9yT2JqZWN0RnJvbVNvdXJj
ZUJyZWFrcG9pbnRzKGl0LT5zZWNvbmQpOworICAgICAgICBicmVha3BvaW50cy0+c2V0KGl0LT5m
aXJzdCwgYnJlYWtwb2ludHNGb3JVUkwpOworICAgIH0KKyAgICBzZXRTZXR0aW5nKGJyZWFrcG9p
bnRzU2V0dGluZ0tleSgpLCBicmVha3BvaW50cy0+dG9KU09OU3RyaW5nKCkpOworfQorCiBzdGF0
aWMgUGF0aCBxdWFkVG9QYXRoKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKIHsKICAgICBQYXRoIHF1
YWRQYXRoOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IGFmMzYz
ODMuLjEyMGY1ZjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAg
LTMyNSw2ICszMjUsMTIgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkRXZhbHVhdGVGb3JUZXN0
SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBqc29uUmVzdWx0KTsKIAorI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIFN0cmluZyBicmVha3BvaW50c1NldHRp
bmdLZXkoKTsKKyAgICB2b2lkIGxvYWRCcmVha3BvaW50cygpOworICAgIHZvaWQgc2F2ZUJyZWFr
cG9pbnRzKCk7CisjZW5kaWYKKwogICAgIFBhZ2UqIG1faW5zcGVjdGVkUGFnZTsKICAgICBJbnNw
ZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVu
dD4gbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudDsKQEAgLTM3MSw2ICszNzcsNyBAQCBwcml2YXRl
OgogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fc291cmNlSURUb1VSTDsKICAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBtX3NjcmlwdElEVG9Db250ZW50OwogICAgIEhhc2hNYXA8U3Ry
aW5nLCBTb3VyY2VCcmVha3BvaW50cz4gbV9zdGlja3lCcmVha3BvaW50czsKKyAgICBib29sIG1f
YnJlYWtwb2ludHNMb2FkZWQ7CiAKICAgICBib29sIG1fcHJvZmlsZXJFbmFibGVkOwogICAgIGJv
b2wgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuY3BwCmluZGV4IDVjN2QwYzguLmE3MDVlYjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmNwcApAQCAtNDk5LDcgKzQ5OSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IEluc3BlY3RvclZhbHVlOjphc0FycmF5KCkKICAgICByZXR1cm4gMDsKIH0KIAotUGFz
c1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFsdWU6OnJlYWRKU09OKGNvbnN0IFN0
cmluZyYganNvbikKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvclZhbHVlOjpw
YXJzZUpTT04oY29uc3QgU3RyaW5nJiBqc29uKQogewogICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9
IGpzb24uY2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBqc29uLmNoYXJhY3Rl
cnMoKSArIGpzb24ubGVuZ3RoKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmluZGV4
IGI5OTIwYzQuLjMwYmE5NWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCkBAIC03
Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBhc09iamVjdCgpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
YXNBcnJheSgpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlYWRK
U09OKGNvbnN0IFN0cmluZyYganNvbik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IHBhcnNlSlNPTihjb25zdCBTdHJpbmcmIGpzb24pOwogCiAgICAgU3RyaW5nIHRvSlNP
TlN0cmluZygpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVDaGFy
Piogb3V0cHV0KSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJy
ZWFrcG9pbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UwZDE4YQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuY3BwCkBAIC0wLDAgKzEsNzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NyaXB0QnJlYWtwb2ludC5oIgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgU2NyaXB0QnJlYWtwb2ludDo6c291cmNlQnJl
YWtwb2ludHNGcm9tSW5zcGVjdG9yT2JqZWN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBi
cmVha3BvaW50cywgU291cmNlQnJlYWtwb2ludHMqIHNvdXJjZUJyZWFrcG9pbnRzKQoreworICAg
IGZvciAoSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IGJyZWFrcG9pbnRzLT5iZWdpbigp
OyBpdCAhPSBicmVha3BvaW50cy0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgYm9vbCBvazsKKyAg
ICAgICAgaW50IGxpbmVOdW1iZXIgPSBpdC0+Zmlyc3QudG9JbnQoJm9rKTsKKyAgICAgICAgaWYg
KCFvaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBicmVha3BvaW50ID0gaXQtPnNlY29uZC0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFi
cmVha3BvaW50KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGJvb2wgZW5hYmxlZDsK
KyAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBlbmFibGVkVmFsdWUgPSBicmVha3BvaW50
LT5nZXQoImVuYWJsZWQiKTsKKyAgICAgICAgaWYgKCFlbmFibGVkVmFsdWUgfHwgIWVuYWJsZWRW
YWx1ZS0+YXNCb29sKCZlbmFibGVkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBT
dHJpbmcgY29uZGl0aW9uOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNvbmRpdGlv
blZhbHVlID0gYnJlYWtwb2ludC0+Z2V0KCJjb25kaXRpb24iKTsKKyAgICAgICAgaWYgKCFjb25k
aXRpb25WYWx1ZSB8fCAhY29uZGl0aW9uVmFsdWUtPmFzU3RyaW5nKCZjb25kaXRpb24pKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIHNvdXJjZUJyZWFrcG9pbnRzLT5zZXQobGluZU51
bWJlciwgU2NyaXB0QnJlYWtwb2ludChlbmFibGVkLCBjb25kaXRpb24pKTsKKyAgICB9Cit9CisK
K1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBTY3JpcHRCcmVha3BvaW50OjppbnNwZWN0b3JP
YmplY3RGcm9tU291cmNlQnJlYWtwb2ludHMoY29uc3QgU291cmNlQnJlYWtwb2ludHMmIHNvdXJj
ZUJyZWFrcG9pbnRzKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRz
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBmb3IgKFNvdXJjZUJyZWFrcG9pbnRz
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHNvdXJjZUJyZWFrcG9pbnRzLmJlZ2luKCk7IGl0ICE9IHNv
dXJjZUJyZWFrcG9pbnRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGJyZWFrcG9pbnQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBi
cmVha3BvaW50LT5zZXRCb29sKCJlbmFibGVkIiwgaXQtPnNlY29uZC5lbmFibGVkKTsKKyAgICAg
ICAgYnJlYWtwb2ludC0+c2V0U3RyaW5nKCJjb25kaXRpb24iLCBpdC0+c2Vjb25kLmNvbmRpdGlv
bik7CisgICAgICAgIGJyZWFrcG9pbnRzLT5zZXQoU3RyaW5nOjpudW1iZXIoaXQtPmZpcnN0KSwg
YnJlYWtwb2ludCk7CisgICAgfQorICAgIHJldHVybiBicmVha3BvaW50cy5yZWxlYXNlKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Ip
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmggYi9XZWJD
b3JlL2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmgKaW5kZXggODc3NTkwMS4uYjdjN2EzNyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaApAQCAtMzUsNiArMzUsMTEgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitzdHJ1Y3QgU2Ny
aXB0QnJlYWtwb2ludDsKKwordHlwZWRlZiBIYXNoTWFwPGludCwgU2NyaXB0QnJlYWtwb2ludD4g
U291cmNlQnJlYWtwb2ludHM7CisKIHN0cnVjdCBTY3JpcHRCcmVha3BvaW50IHsKICAgICBTY3Jp
cHRCcmVha3BvaW50KGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pCiAgICAg
ICAgIDogZW5hYmxlZChlbmFibGVkKQpAQCAtNDgsOSArNTMsMTAgQEAgc3RydWN0IFNjcmlwdEJy
ZWFrcG9pbnQgewogCiAgICAgYm9vbCBlbmFibGVkOwogICAgIFN0cmluZyBjb25kaXRpb247Ci19
OwogCi10eXBlZGVmIEhhc2hNYXA8aW50LCBTY3JpcHRCcmVha3BvaW50PiBTb3VyY2VCcmVha3Bv
aW50czsKKyAgICBzdGF0aWMgdm9pZCBzb3VyY2VCcmVha3BvaW50c0Zyb21JbnNwZWN0b3JPYmpl
Y3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+LCBTb3VyY2VCcmVha3BvaW50cyopOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5zcGVjdG9yT2JqZWN0RnJvbVNv
dXJjZUJyZWFrcG9pbnRzKGNvbnN0IFNvdXJjZUJyZWFrcG9pbnRzJik7Cit9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9CcmVha3BvaW50TWFuYWdlci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVh
a3BvaW50TWFuYWdlci5qcwppbmRleCAzY2NjY2FjLi40ZjY5NjVhIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCkBAIC0zOCw2ICszOCw3
IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAg
IGlmICh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludCkKICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJy
ZWFrcG9pbnRGcm9tQmFja2VuZCh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludCk7CiAgICAgICAgIHRo
aXMuX29uZVRpbWVCcmVha3BvaW50ID0gYnJlYWtwb2ludDsKKyAgICAgICAgLy8gRklYTUUoNDA2
NjkpOiBvbmUgdGltZSBicmVha3BvaW50IHdpbGwgYmUgcGVyc2lzdGVkIGluIGluc3BlY3RvciBz
ZXR0aW5ncyBpZiBub3QgaGl0LgogICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2ludE9uQmFja2Vu
ZChicmVha3BvaW50KTsKICAgICB9LAogCkBAIC01MSwxNSArNTIsMTUgQEAgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAgIGFkZEJyZWFrcG9pbnQ6IGZ1
bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKICAg
ICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50
KHRoaXMsIHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7Ci0g
ICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgaWYgKHRoaXMuX29uZVRpbWVCcmVha3BvaW50ICYmICh0aGlzLl9v
bmVUaW1lQnJlYWtwb2ludC5pZCA9PSBicmVha3BvaW50LmlkKSkKLSAgICAgICAgICAgIGRlbGV0
ZSB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNbYnJl
YWtwb2ludC5pZF0gPSBicmVha3BvaW50OwotICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2ludE9u
QmFja2VuZChicmVha3BvaW50KTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoImJyZWFrcG9pbnQtYWRkZWQiLCBicmVha3BvaW50KTsKLSAgICB9LCAgICAKKyAgICAgICAg
dmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9hZGRCcmVha3BvaW50KHNvdXJjZUlELCBzb3VyY2VVUkws
IGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CisgICAgICAgIGlmIChicmVha3BvaW50KQorICAg
ICAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRPbkJhY2tlbmQoYnJlYWtwb2ludCk7CisgICAg
fSwKKworICAgIHJlc3RvcmVkQnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIHNvdXJjZVVS
TCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgdGhpcy5fYWRkQnJl
YWtwb2ludChzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pOwor
ICAgIH0sCiAKICAgICByZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQogICAg
IHsKQEAgLTc4LDcgKzc5LDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKHRoaXMuX2JyZWFrcG9p
bnRzW2lkXSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnRzOwotICAgIH0s
ICAgIAorICAgIH0sCiAKICAgICBicmVha3BvaW50c0ZvclVSTDogZnVuY3Rpb24odXJsKQogICAg
IHsKQEAgLTg3LDcgKzg4LDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50c1tpZF0udXJsID09PSB1
cmwpCiAgICAgICAgICAgICAgICAgYnJlYWtwb2ludHMucHVzaCh0aGlzLl9icmVha3BvaW50c1tp
ZF0pOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBicmVha3BvaW50czsgICAgICAgIAorICAg
ICAgICByZXR1cm4gYnJlYWtwb2ludHM7CiAgICAgfSwKIAogICAgIHJlc2V0OiBmdW5jdGlvbigp
CkBAIC05Niw2ICs5NywxOCBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90
eXBlID0gewogICAgICAgICBkZWxldGUgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQ7CiAgICAgfSwK
IAorICAgIF9hZGRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5l
LCBlbmFibGVkLCBjb25kaXRpb24pCisgICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5l
dyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCh0aGlzLCBzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5l
LCBlbmFibGVkLCBjb25kaXRpb24pOworICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHNbYnJl
YWtwb2ludC5pZF0pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh0aGlzLl9vbmVU
aW1lQnJlYWtwb2ludCAmJiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQuaWQgPT0gYnJlYWtwb2lu
dC5pZCkpCisgICAgICAgICAgICBkZWxldGUgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQ7CisgICAg
ICAgIHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdID0gYnJlYWtwb2ludDsKKyAgICAg
ICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImJyZWFrcG9pbnQtYWRkZWQiLCBicmVh
a3BvaW50KTsKKyAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnQ7CisgICAgfSwKKwogICAgIF9zYXZl
QnJlYWtwb2ludE9uQmFja2VuZDogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7CiAgICAgICAg
IEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVh
a3BvaW50LmxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggZTgxMDhhZi4uY2Zl
N2RlOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC0xMzM0
LDcgKzEzMzQsNyBAQCBXZWJJbnNwZWN0b3IucGFyc2VkU2NyaXB0U291cmNlID0gZnVuY3Rpb24o
c291cmNlSUQsIHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZwogCiBXZWJJbnNwZWN0b3IucmVz
dG9yZWRCcmVha3BvaW50ID0gZnVuY3Rpb24oc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5h
YmxlZCwgY29uZGl0aW9uKQogewotICAgIHRoaXMuYnJlYWtwb2ludE1hbmFnZXIuYWRkQnJlYWtw
b2ludChzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pOworICAg
IHRoaXMuYnJlYWtwb2ludE1hbmFnZXIucmVzdG9yZWRCcmVha3BvaW50KHNvdXJjZUlELCBzb3Vy
Y2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CiB9CiAKIFdlYkluc3BlY3Rvci5mYWls
ZWRUb1BhcnNlU2NyaXB0U291cmNlID0gZnVuY3Rpb24oc291cmNlVVJMLCBzb3VyY2UsIHN0YXJ0
aW5nTGluZSwgZXJyb3JMaW5lLCBlcnJvck1lc3NhZ2UpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58878</attachid>
            <date>2010-06-16 04:40:25 -0700</date>
            <delta_ts>2010-06-17 15:31:15 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>sticky.diff</filename>
            <type>text/plain</type>
            <size>24604</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzJkNjkyYi4uN2I5ZDNhZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxMC0wNi0xNiAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwZXJzaXN0IGJyZWFrcG9pbnRz
IGluIGluc3BlY3RvciBzZXR0aW5ncy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MTkwCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmVuYWJsZURlYnVnZ2VyKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNlc3Npb25TZXR0aW5ncyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldEJyZWFrcG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlQnJlYWtwb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXJzZVNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpicmVha3BvaW50c1NldHRpbmdL
ZXkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6bG9hZEJyZWFrcG9p
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNhdmVCcmVha3Bv
aW50cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclZhbHVlOjpwYXJzZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0QnJlYWtwb2ludDo6c291cmNlQnJlYWtwb2ludHNG
cm9tSW5zcGVjdG9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEJyZWFrcG9pbnQ6
Omluc3BlY3Rvck9iamVjdEZyb21Tb3VyY2VCcmVha3BvaW50cyk6CisgICAgICAgICogaW5zcGVj
dG9yL1NjcmlwdEJyZWFrcG9pbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0Jy
ZWFrcG9pbnRNYW5hZ2VyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5h
Z2VyLnByb3RvdHlwZS5hZGRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5wcm90b3R5cGUucmVzdG9yZWRCcmVha3BvaW50KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuYnJlYWtwb2ludHNGb3JTb3Vy
Y2VJRCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBl
LmJyZWFrcG9pbnRzRm9yVVJMKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFu
YWdlci5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLnJlc3RvcmVkQnJlYWtw
b2ludCk6CisKIDIwMTAtMDYtMTUgIEpvY2VseW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRl
QG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmlu
ZGV4IDM0NTZmZDUuLjg4NzRiZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
KysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTMzOCw2ICsxMzM4LDcgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIFwK
IAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBcCiAJV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0
QnJlYWtwb2ludC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaCBc
CiAJV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oIFwKIAlXZWJDb3JlL2lu
c3BlY3Rvci9TY3JpcHRHQ0V2ZW50TGlzdGVuZXIuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGJmNDMyNTEuLjI2Y2RkZjMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0xNzAwLDYgKzE3MDAsNyBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oJywKKyAg
ICAgICAgICAgICdpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9T
Y3JpcHREZWJ1Z0xpc3RlbmVyLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHRHQ0V2
ZW50TGlzdGVuZXIuaCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29y
ZS9XZWJDb3JlLnBybwppbmRleCAyMGIyZDU5Li40MTEyM2JiIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTcyMCw2ICs3MjAsNyBA
QCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwIFwKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuY3BwIFwKKyAgICBpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAg
XAogICAgIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwIFwKICAgICBsb2FkZXIv
YXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAgXAogICAgIGxvYWRlci9hcmNoaXZlL0FyY2hpdmVS
ZXNvdXJjZS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggMjMw
ZjczNC4uODM5OGY1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00
NjgzNyw2ICs0NjgzNywxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcU2NyaXB0QnJlYWtwb2ludC5jcHAiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
U2NyaXB0QnJlYWtwb2ludC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzgwN2ZmMC4uYmE3MjA3MSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU4NCw2ICs1ODQsNyBA
QAogCQkxQ0Y2QkUxNDBFOUJCNDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24u
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0Y2QkUx
MjBFOUJCNDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24ubW0gKi87IH07CiAJ
CTFDRjZCRTE1MEU5QkI0NjcwMDI1RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNGNkJFMTMwRTlC
QjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLmggKi87IH07CiAJCTFDRkFF
MzIzMEE2RDZBM0YwMDMyNTkzRCAvKiBsaWJvYmpjLmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNGQUUzMjIwQTZENkEzRjAwMzI1OTNEIC8q
IGxpYm9iamMuZHlsaWIgKi87IH07CisJCTIwMEIxOTA5MTFDMjc3RDkwMERDQ0QzQSAvKiBTY3Jp
cHRCcmVha3BvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDIwMEIxOTA4MTFDMjc3RDkwMERDQ0QzQSAvKiBTY3JpcHRCcmVha3BvaW50LmNwcCAq
LzsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI4QzI4NDQxMEQ4
MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI0RjU0RUFDMTAxRkU5MTQwMDBBRTc0MSAvKiBB
cHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyNEY1NEVBQTEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNo
ZUhvc3QuY3BwICovOyB9OwogCQkyNEY1NEVBRDEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRp
b25DYWNoZUhvc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CkBAIC02MTMwLDYgKzYxMzEsNyBA
QAogCQkxQ0Y2QkUxMjBFOUJCNDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24u
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBPYmpDTm9kZUZpbHRl
ckNvbmRpdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNGNkJFMTMwRTlC
QjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFDRkFFMzIyMEE2RDZBM0YwMDMyNTkzRCAvKiBsaWJvYmpjLmR5
bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNv
bXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJvYmpjLmR5bGliOyBwYXRoID0gL3Vzci9s
aWIvbGlib2JqYy5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKKwkJMjAwQjE5
MDgxMUMyNzdEOTAwRENDRDNBIC8qIFNjcmlwdEJyZWFrcG9pbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0QnJlYWtwb2ludC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFw
cGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0V3JhcHBhYmxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RjU0RUFBMTAxRkU5MTQwMDBBRTc0
MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9z
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlSG9z
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyMTYsNiArMTEyMTgsNyBAQAog
CQkJCUYzNzVDQzA2MTE1MEQzMDAwMDhEREI4MSAvKiBJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5o
ICovLAogCQkJCTFDODFCQTA1MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1l
LmlkbCAqLywKIAkJCQlCQ0M2NEY1RjBEQ0ZCODRFMDA4MUVGM0IgLyogbG9jYWxpemVkU3RyaW5n
cy5qcyAqLywKKwkJCQkyMDBCMTkwODExQzI3N0Q5MDBEQ0NEM0EgLyogU2NyaXB0QnJlYWtwb2lu
dC5jcHAgKi8sCiAJCQkJN0FGRDRBOEExMTMxQzI3NjAwMzVCODgzIC8qIFNjcmlwdEJyZWFrcG9p
bnQuaCAqLywKIAkJCQk3QUZENEZGMzExMzI3N0I2MDAzNUI4ODMgLyogU2NyaXB0RGVidWdMaXN0
ZW5lci5oICovLAogCQkJCTlGQTM3RUVGMTE3MkZENDEwMEM0Q0Q1NSAvKiBTY3JpcHRQcm9maWxl
LmlkbCAqLywKQEAgLTIxNzIwLDYgKzIxNzIzLDcgQEAKIAkJCQlCNkIwNTQwOTExQjY4RjEwMDAy
NTY0QzUgLyogSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgxNkM4
MDY4MTFCRTg4N0UwMDlBNDVFOSAvKiBJREJLZXlSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4MTZDODBCMTExQkU5OTM0MDA5QTQ1RTkgLyogSlNJREJLZXlSYW5nZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkyMDBCMTkwOTExQzI3N0Q5MDBEQ0NEM0EgLyogU2NyaXB0QnJlYWtwb2ludC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKaW5k
ZXggMWVlZGRhMS4uYWY2MDBmYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5j
cHAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnN0b3BUaW1lbGlu
ZVByb2ZpbGVyKCkKIAogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjplbmFibGVEZWJ1Z2dlcihib29s
IGFsd2F5cykKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgIGlmIChtX2lu
c3BlY3RvckNvbnRyb2xsZXIgJiYgIVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5pc0RlYnVn
Z2VyQWx3YXlzRW5hYmxlZCgpKQogICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmVuYWJs
ZURlYnVnZ2VyRnJvbUZyb250ZW5kKGFsd2F5cyk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggNzkxNmNkMC4uNDFhM2I5NCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNs
dWRlICJJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJv
bnRlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIkluc3BlY3RvcldvcmtlclJlc291cmNlLmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTg2
LDYgKzg3LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL01ENS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgogCkBAIC0xNDEsNiArMTQzLDI3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBleHBpcmVDb25zb2xlTWVzc2FnZXNTdGVwID0gMTAwOwogCiBzdGF0aWMgdW5zaWduZWQgc19p
bnNwZWN0b3JDb250cm9sbGVyQ291bnQ7CiAKK25hbWVzcGFjZSB7CisKK1N0cmluZyBtZDVCYXNl
MTYoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgZGlnaXRz
W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisKKyAgICBNRDUgbWQ1OworICAgIG1kNS5hZGRCeXRl
cyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFjdGVycygpKSwg
c3RyaW5nLmxlbmd0aCgpICogMik7CisgICAgVmVjdG9yPHVpbnQ4X3QsIDE2PiBkaWdlc3Q7Cisg
ICAgbWQ1LmNoZWNrc3VtKGRpZ2VzdCk7CisKKyAgICBWZWN0b3I8Y2hhciwgMzI+IHJlc3VsdDsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyArK2kpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChkaWdpdHNbKGRpZ2VzdFtpXSA+PiA0KSAmIDB4Zl0pOworICAgICAgICByZXN1bHQuYXBwZW5k
KGRpZ2l0c1tkaWdlc3RbaV0gJiAweGZdKTsKKyAgICB9CisgICAgcmV0dXJuIFN0cmluZyhyZXN1
bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKK30KKworfQorCiBJbnNwZWN0b3JDb250cm9sbGVy
OjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50
KQogICAgIDogbV9pbnNwZWN0ZWRQYWdlKHBhZ2UpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCkBA
IC0xNjAsNiArMTgzLDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxl
cihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1fZGVidWdnZXJF
bmFibGVkKGZhbHNlKQogICAgICwgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bihmYWxzZSkKICAg
ICAsIG1fcGF1c2VkU2NyaXB0U3RhdGUoMCkKKyAgICAsIG1fYnJlYWtwb2ludHNMb2FkZWQoZmFs
c2UpCiAgICAgLCBtX3Byb2ZpbGVyRW5hYmxlZCghV1RGX1VTRV9KU0MpCiAgICAgLCBtX3JlY29y
ZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKGZhbHNlKQogICAgICwgbV9jdXJyZW50VXNlckluaXRp
YXRlZFByb2ZpbGVOdW1iZXIoLTEpCkBAIC0yMzIsNyArMjU2LDcgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpzZXRTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNlc3Npb25TZXR0aW5ncyhjb25z
dCBTdHJpbmcmIHNldHRpbmdzSlNPTikKIHsKLSAgICBtX3Nlc3Npb25TZXR0aW5ncyA9IEluc3Bl
Y3RvclZhbHVlOjpyZWFkSlNPTihzZXR0aW5nc0pTT04pOworICAgIG1fc2Vzc2lvblNldHRpbmdz
ID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihzZXR0aW5nc0pTT04pOwogfQogCiB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3QoTm9kZSogbm9kZSkKQEAgLTY3NCw2ICs2OTgsOCBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIq
IGxvYWRlcikKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICAgICAgbV9zb3Vy
Y2VJRFRvVVJMLmNsZWFyKCk7CiAgICAgICAgIG1fc2NyaXB0SURUb0NvbnRlbnQuY2xlYXIoKTsK
KyAgICAgICAgbV9zdGlja3lCcmVha3BvaW50cy5jbGVhcigpOworICAgICAgICBtX2JyZWFrcG9p
bnRzTG9hZGVkID0gZmFsc2U7CiAjZW5kaWYKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikgJiYgVVNFKEpTQykKICAgICAgICAgbV9wcm9maWxlcy5jbGVhcigpOwpAQCAtMTY3OCwxMCAr
MTcwNCwxMyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bQogICAgIGlmICh1cmwuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2lu
dHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuZmluZCh1cmwpOworICAgIGxv
YWRCcmVha3BvaW50cygpOworICAgIFN0cmluZyBrZXkgPSBtZDVCYXNlMTYodXJsKTsKKyAgICBI
YXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5
QnJlYWtwb2ludHMuZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBtX3N0aWNreUJyZWFrcG9pbnRz
LmVuZCgpKQotICAgICAgICBpdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuc2V0KHVybCwgU291cmNl
QnJlYWtwb2ludHMoKSkuZmlyc3Q7CisgICAgICAgIGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5z
ZXQoa2V5LCBTb3VyY2VCcmVha3BvaW50cygpKS5maXJzdDsKICAgICBpdC0+c2Vjb25kLnNldChs
aW5lTnVtYmVyLCBicmVha3BvaW50KTsKKyAgICBzYXZlQnJlYWtwb2ludHMoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291
cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCkBAIC0xNjkyLDkgKzE3MjEsMTEgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNl
SUQsIHVuc2lnbmVkIGxpbmUKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQg
PSBtX3N0aWNreUJyZWFrcG9pbnRzLmZpbmQodXJsKTsKKyAgICBsb2FkQnJlYWtwb2ludHMoKTsK
KyAgICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1f
c3RpY2t5QnJlYWtwb2ludHMuZmluZChtZDVCYXNlMTYodXJsKSk7CiAgICAgaWYgKGl0ICE9IG1f
c3RpY2t5QnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIGl0LT5zZWNvbmQucmVtb3ZlKGxpbmVO
dW1iZXIpOworICAgIHNhdmVCcmVha3BvaW50cygpOwogfQogCiAvLyBKYXZhU2NyaXB0RGVidWdM
aXN0ZW5lciBmdW5jdGlvbnMKQEAgLTE3MDcsNyArMTczOCw4IEBAIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3Ry
aW5nJiB1CiAgICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhh
c2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9yIGl0ID0gbV9zdGlja3lC
cmVha3BvaW50cy5maW5kKHVybCk7CisgICAgbG9hZEJyZWFrcG9pbnRzKCk7CisgICAgSGFzaE1h
cDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJyZWFr
cG9pbnRzLmZpbmQobWQ1QmFzZTE2KHVybCkpOwogICAgIGlmIChpdCAhPSBtX3N0aWNreUJyZWFr
cG9pbnRzLmVuZCgpKSB7CiAgICAgICAgIGZvciAoU291cmNlQnJlYWtwb2ludHM6Oml0ZXJhdG9y
IGJyZWFrcG9pbnRJdCA9IGl0LT5zZWNvbmQuYmVnaW4oKTsgYnJlYWtwb2ludEl0ICE9IGl0LT5z
ZWNvbmQuZW5kKCk7ICsrYnJlYWtwb2ludEl0KSB7CiAgICAgICAgICAgICBpZiAoZmlyc3RMaW5l
IDw9IGJyZWFrcG9pbnRJdC0+Zmlyc3QpIHsKQEAgLTE3NjEsNiArMTc5Myw0NSBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKIH0KIAorU3RyaW5nIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmJyZWFrcG9pbnRzU2V0dGluZ0tleSgpCit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIGtleVByZWZpeCwgKCJicmVha3BvaW50czoiKSk7CisgICAgcmV0
dXJuIGtleVByZWZpeCArIG1kNUJhc2UxNihtX21haW5SZXNvdXJjZS0+cmVxdWVzdFVSTCgpKTsK
K30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpsb2FkQnJlYWtwb2ludHMoKQoreworICAg
IGlmIChtX2JyZWFrcG9pbnRzTG9hZGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9icmVha3Bv
aW50c0xvYWRlZCA9IHRydWU7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZFNl
dHRpbmcgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKHNldHRpbmcoYnJlYWtwb2ludHNTZXR0
aW5nS2V5KCkpKTsKKyAgICBpZiAoIXBhcnNlZFNldHRpbmcpCisgICAgICAgIHJldHVybjsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cyA9IHBhcnNlZFNldHRpbmctPmFz
T2JqZWN0KCk7CisgICAgaWYgKCFicmVha3BvaW50cykKKyAgICAgICAgcmV0dXJuOworICAgIGZv
ciAoSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IGJyZWFrcG9pbnRzLT5iZWdpbigpOyBp
dCAhPSBicmVha3BvaW50cy0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYnJlYWtwb2ludHNGb3JVUkwgPSBpdC0+c2Vjb25kLT5hc09iamVjdCgpOworICAg
ICAgICBpZiAoIWJyZWFrcG9pbnRzRm9yVVJMKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIFNvdXJjZUJyZWFrcG9pbnRzJiBzb3VyY2VCcmVha3BvaW50cyA9IG1fc3RpY2t5QnJlYWtw
b2ludHMuc2V0KGl0LT5maXJzdCwgU291cmNlQnJlYWtwb2ludHMoKSkuZmlyc3QtPnNlY29uZDsK
KyAgICAgICAgU2NyaXB0QnJlYWtwb2ludDo6c291cmNlQnJlYWtwb2ludHNGcm9tSW5zcGVjdG9y
T2JqZWN0KGJyZWFrcG9pbnRzRm9yVVJMLCAmc291cmNlQnJlYWtwb2ludHMpOworICAgIH0KK30K
Kwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlQnJlYWtwb2ludHMoKQoreworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJh
dG9yIGl0KG1fc3RpY2t5QnJlYWtwb2ludHMuYmVnaW4oKSk7IGl0ICE9IG1fc3RpY2t5QnJlYWtw
b2ludHMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT5zZWNvbmQuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJy
ZWFrcG9pbnRzRm9yVVJMID0gU2NyaXB0QnJlYWtwb2ludDo6aW5zcGVjdG9yT2JqZWN0RnJvbVNv
dXJjZUJyZWFrcG9pbnRzKGl0LT5zZWNvbmQpOworICAgICAgICBicmVha3BvaW50cy0+c2V0KGl0
LT5maXJzdCwgYnJlYWtwb2ludHNGb3JVUkwpOworICAgIH0KKyAgICBzZXRTZXR0aW5nKGJyZWFr
cG9pbnRzU2V0dGluZ0tleSgpLCBicmVha3BvaW50cy0+dG9KU09OU3RyaW5nKCkpOworfQorCiBz
dGF0aWMgUGF0aCBxdWFkVG9QYXRoKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKIHsKICAgICBQYXRo
IHF1YWRQYXRoOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IGFm
MzYzODMuLjEyMGY1ZjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgK
QEAgLTMyNSw2ICszMjUsMTIgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkRXZhbHVhdGVGb3JU
ZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBqc29uUmVzdWx0KTsKIAor
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIFN0cmluZyBicmVha3BvaW50c1Nl
dHRpbmdLZXkoKTsKKyAgICB2b2lkIGxvYWRCcmVha3BvaW50cygpOworICAgIHZvaWQgc2F2ZUJy
ZWFrcG9pbnRzKCk7CisjZW5kaWYKKwogICAgIFBhZ2UqIG1faW5zcGVjdGVkUGFnZTsKICAgICBJ
bnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZENs
aWVudD4gbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudDsKQEAgLTM3MSw2ICszNzcsNyBAQCBwcml2
YXRlOgogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fc291cmNlSURUb1VSTDsKICAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX3NjcmlwdElEVG9Db250ZW50OwogICAgIEhhc2hNYXA8
U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz4gbV9zdGlja3lCcmVha3BvaW50czsKKyAgICBib29s
IG1fYnJlYWtwb2ludHNMb2FkZWQ7CiAKICAgICBib29sIG1fcHJvZmlsZXJFbmFibGVkOwogICAg
IGJvb2wgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwCmluZGV4IDVjN2QwYzguLmE3MDVlYjkgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmNwcApAQCAtNDk5LDcgKzQ5OSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IEluc3BlY3RvclZhbHVlOjphc0FycmF5KCkKICAgICByZXR1cm4gMDsKIH0KIAot
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFsdWU6OnJlYWRKU09OKGNvbnN0
IFN0cmluZyYganNvbikKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvclZhbHVl
OjpwYXJzZUpTT04oY29uc3QgU3RyaW5nJiBqc29uKQogewogICAgIGNvbnN0IFVDaGFyKiBzdGFy
dCA9IGpzb24uY2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBqc29uLmNoYXJh
Y3RlcnMoKSArIGpzb24ubGVuZ3RoKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmlu
ZGV4IGI5OTIwYzQuLjMwYmE5NWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCkBA
IC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBhc09iamVjdCgpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gYXNBcnJheSgpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJl
YWRKU09OKGNvbnN0IFN0cmluZyYganNvbik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHBhcnNlSlNPTihjb25zdCBTdHJpbmcmIGpzb24pOwogCiAgICAgU3RyaW5nIHRv
SlNPTlN0cmluZygpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVD
aGFyPiogb3V0cHV0KSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL1Njcmlw
dEJyZWFrcG9pbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UwZDE4YQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuY3BwCkBAIC0wLDAgKzEs
NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NyaXB0QnJlYWtwb2ludC5o
IgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgU2NyaXB0QnJlYWtwb2ludDo6c291cmNl
QnJlYWtwb2ludHNGcm9tSW5zcGVjdG9yT2JqZWN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBicmVha3BvaW50cywgU291cmNlQnJlYWtwb2ludHMqIHNvdXJjZUJyZWFrcG9pbnRzKQorewor
ICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IGJyZWFrcG9pbnRzLT5iZWdp
bigpOyBpdCAhPSBicmVha3BvaW50cy0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgYm9vbCBvazsK
KyAgICAgICAgaW50IGxpbmVOdW1iZXIgPSBpdC0+Zmlyc3QudG9JbnQoJm9rKTsKKyAgICAgICAg
aWYgKCFvaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBicmVha3BvaW50ID0gaXQtPnNlY29uZC0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYg
KCFicmVha3BvaW50KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGJvb2wgZW5hYmxl
ZDsKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBlbmFibGVkVmFsdWUgPSBicmVha3Bv
aW50LT5nZXQoImVuYWJsZWQiKTsKKyAgICAgICAgaWYgKCFlbmFibGVkVmFsdWUgfHwgIWVuYWJs
ZWRWYWx1ZS0+YXNCb29sKCZlbmFibGVkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBTdHJpbmcgY29uZGl0aW9uOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNvbmRp
dGlvblZhbHVlID0gYnJlYWtwb2ludC0+Z2V0KCJjb25kaXRpb24iKTsKKyAgICAgICAgaWYgKCFj
b25kaXRpb25WYWx1ZSB8fCAhY29uZGl0aW9uVmFsdWUtPmFzU3RyaW5nKCZjb25kaXRpb24pKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHNvdXJjZUJyZWFrcG9pbnRzLT5zZXQobGlu
ZU51bWJlciwgU2NyaXB0QnJlYWtwb2ludChlbmFibGVkLCBjb25kaXRpb24pKTsKKyAgICB9Cit9
CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBTY3JpcHRCcmVha3BvaW50OjppbnNwZWN0
b3JPYmplY3RGcm9tU291cmNlQnJlYWtwb2ludHMoY29uc3QgU291cmNlQnJlYWtwb2ludHMmIHNv
dXJjZUJyZWFrcG9pbnRzKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9p
bnRzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBmb3IgKFNvdXJjZUJyZWFrcG9p
bnRzOjpjb25zdF9pdGVyYXRvciBpdCA9IHNvdXJjZUJyZWFrcG9pbnRzLmJlZ2luKCk7IGl0ICE9
IHNvdXJjZUJyZWFrcG9pbnRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGJyZWFrcG9pbnQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAg
ICBicmVha3BvaW50LT5zZXRCb29sKCJlbmFibGVkIiwgaXQtPnNlY29uZC5lbmFibGVkKTsKKyAg
ICAgICAgYnJlYWtwb2ludC0+c2V0U3RyaW5nKCJjb25kaXRpb24iLCBpdC0+c2Vjb25kLmNvbmRp
dGlvbik7CisgICAgICAgIGJyZWFrcG9pbnRzLT5zZXQoU3RyaW5nOjpudW1iZXIoaXQtPmZpcnN0
KSwgYnJlYWtwb2ludCk7CisgICAgfQorICAgIHJldHVybiBicmVha3BvaW50cy5yZWxlYXNlKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmggYi9X
ZWJDb3JlL2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmgKaW5kZXggODc3NTkwMS4uYjdjN2Ez
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaApAQCAtMzUsNiArMzUsMTEgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitzdHJ1Y3Qg
U2NyaXB0QnJlYWtwb2ludDsKKwordHlwZWRlZiBIYXNoTWFwPGludCwgU2NyaXB0QnJlYWtwb2lu
dD4gU291cmNlQnJlYWtwb2ludHM7CisKIHN0cnVjdCBTY3JpcHRCcmVha3BvaW50IHsKICAgICBT
Y3JpcHRCcmVha3BvaW50KGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pCiAg
ICAgICAgIDogZW5hYmxlZChlbmFibGVkKQpAQCAtNDgsOSArNTMsMTAgQEAgc3RydWN0IFNjcmlw
dEJyZWFrcG9pbnQgewogCiAgICAgYm9vbCBlbmFibGVkOwogICAgIFN0cmluZyBjb25kaXRpb247
Ci19OwogCi10eXBlZGVmIEhhc2hNYXA8aW50LCBTY3JpcHRCcmVha3BvaW50PiBTb3VyY2VCcmVh
a3BvaW50czsKKyAgICBzdGF0aWMgdm9pZCBzb3VyY2VCcmVha3BvaW50c0Zyb21JbnNwZWN0b3JP
YmplY3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+LCBTb3VyY2VCcmVha3BvaW50cyopOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5zcGVjdG9yT2JqZWN0RnJv
bVNvdXJjZUJyZWFrcG9pbnRzKGNvbnN0IFNvdXJjZUJyZWFrcG9pbnRzJik7Cit9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9C
cmVha3BvaW50TWFuYWdlci5qcwppbmRleCAzY2NjY2FjLi40ZjY5NjVhIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCkBAIC0zOCw2ICsz
OCw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIGlmICh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludCkKICAgICAgICAgICAgIHRoaXMuX3JlbW92
ZUJyZWFrcG9pbnRGcm9tQmFja2VuZCh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludCk7CiAgICAgICAg
IHRoaXMuX29uZVRpbWVCcmVha3BvaW50ID0gYnJlYWtwb2ludDsKKyAgICAgICAgLy8gRklYTUUo
NDA2NjkpOiBvbmUgdGltZSBicmVha3BvaW50IHdpbGwgYmUgcGVyc2lzdGVkIGluIGluc3BlY3Rv
ciBzZXR0aW5ncyBpZiBub3QgaGl0LgogICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2ludE9uQmFj
a2VuZChicmVha3BvaW50KTsKICAgICB9LAogCkBAIC01MSwxNSArNTIsMTUgQEAgV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAgIGFkZEJyZWFrcG9pbnQ6
IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikK
ICAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50KHRoaXMsIHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7
Ci0gICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgaWYgKHRoaXMuX29uZVRpbWVCcmVha3BvaW50ICYmICh0aGlz
Ll9vbmVUaW1lQnJlYWtwb2ludC5pZCA9PSBicmVha3BvaW50LmlkKSkKLSAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNb
YnJlYWtwb2ludC5pZF0gPSBicmVha3BvaW50OwotICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2lu
dE9uQmFja2VuZChicmVha3BvaW50KTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoImJyZWFrcG9pbnQtYWRkZWQiLCBicmVha3BvaW50KTsKLSAgICB9LCAgICAKKyAgICAg
ICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9hZGRCcmVha3BvaW50KHNvdXJjZUlELCBzb3VyY2VV
UkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CisgICAgICAgIGlmIChicmVha3BvaW50KQor
ICAgICAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRPbkJhY2tlbmQoYnJlYWtwb2ludCk7Cisg
ICAgfSwKKworICAgIHJlc3RvcmVkQnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIHNvdXJj
ZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgdGhpcy5fYWRk
QnJlYWtwb2ludChzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24p
OworICAgIH0sCiAKICAgICByZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQog
ICAgIHsKQEAgLTc4LDcgKzc5LDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKHRoaXMuX2JyZWFr
cG9pbnRzW2lkXSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnRzOwotICAg
IH0sICAgIAorICAgIH0sCiAKICAgICBicmVha3BvaW50c0ZvclVSTDogZnVuY3Rpb24odXJsKQog
ICAgIHsKQEAgLTg3LDcgKzg4LDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50c1tpZF0udXJsID09
PSB1cmwpCiAgICAgICAgICAgICAgICAgYnJlYWtwb2ludHMucHVzaCh0aGlzLl9icmVha3BvaW50
c1tpZF0pOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBicmVha3BvaW50czsgICAgICAgIAor
ICAgICAgICByZXR1cm4gYnJlYWtwb2ludHM7CiAgICAgfSwKIAogICAgIHJlc2V0OiBmdW5jdGlv
bigpCkBAIC05Niw2ICs5NywxOCBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJv
dG90eXBlID0gewogICAgICAgICBkZWxldGUgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQ7CiAgICAg
fSwKIAorICAgIF9hZGRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgc291cmNlVVJMLCBs
aW5lLCBlbmFibGVkLCBjb25kaXRpb24pCisgICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludCA9
IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCh0aGlzLCBzb3VyY2VJRCwgc291cmNlVVJMLCBs
aW5lLCBlbmFibGVkLCBjb25kaXRpb24pOworICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHNb
YnJlYWtwb2ludC5pZF0pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh0aGlzLl9v
bmVUaW1lQnJlYWtwb2ludCAmJiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQuaWQgPT0gYnJlYWtw
b2ludC5pZCkpCisgICAgICAgICAgICBkZWxldGUgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQ7Cisg
ICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdID0gYnJlYWtwb2ludDsKKyAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImJyZWFrcG9pbnQtYWRkZWQiLCBi
cmVha3BvaW50KTsKKyAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnQ7CisgICAgfSwKKwogICAgIF9z
YXZlQnJlYWtwb2ludE9uQmFja2VuZDogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7CiAgICAg
ICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBi
cmVha3BvaW50LmxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24p
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggZTgxMDhhZi4u
Y2ZlN2RlOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC0x
MzM0LDcgKzEzMzQsNyBAQCBXZWJJbnNwZWN0b3IucGFyc2VkU2NyaXB0U291cmNlID0gZnVuY3Rp
b24oc291cmNlSUQsIHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZwogCiBXZWJJbnNwZWN0b3Iu
cmVzdG9yZWRCcmVha3BvaW50ID0gZnVuY3Rpb24oc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwg
ZW5hYmxlZCwgY29uZGl0aW9uKQogewotICAgIHRoaXMuYnJlYWtwb2ludE1hbmFnZXIuYWRkQnJl
YWtwb2ludChzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pOwor
ICAgIHRoaXMuYnJlYWtwb2ludE1hbmFnZXIucmVzdG9yZWRCcmVha3BvaW50KHNvdXJjZUlELCBz
b3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CiB9CiAKIFdlYkluc3BlY3Rvci5m
YWlsZWRUb1BhcnNlU2NyaXB0U291cmNlID0gZnVuY3Rpb24oc291cmNlVVJMLCBzb3VyY2UsIHN0
YXJ0aW5nTGluZSwgZXJyb3JMaW5lLCBlcnJvck1lc3NhZ2UpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59004</attachid>
            <date>2010-06-17 09:46:56 -0700</date>
            <delta_ts>2010-06-17 09:49:22 -0700</delta_ts>
            <desc>Rebase and minor fixes.</desc>
            <filename>sticky.diff</filename>
            <type>text/plain</type>
            <size>24604</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzJkNjkyYi4uN2I5ZDNhZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxMC0wNi0xNiAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwZXJzaXN0IGJyZWFrcG9pbnRz
IGluIGluc3BlY3RvciBzZXR0aW5ncy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MTkwCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmVuYWJsZURlYnVnZ2VyKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNlc3Npb25TZXR0aW5ncyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldEJyZWFrcG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlQnJlYWtwb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXJzZVNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpicmVha3BvaW50c1NldHRpbmdL
ZXkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6bG9hZEJyZWFrcG9p
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNhdmVCcmVha3Bv
aW50cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclZhbHVlOjpwYXJzZUpTT04pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0QnJlYWtwb2ludDo6c291cmNlQnJlYWtwb2ludHNG
cm9tSW5zcGVjdG9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEJyZWFrcG9pbnQ6
Omluc3BlY3Rvck9iamVjdEZyb21Tb3VyY2VCcmVha3BvaW50cyk6CisgICAgICAgICogaW5zcGVj
dG9yL1NjcmlwdEJyZWFrcG9pbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0Jy
ZWFrcG9pbnRNYW5hZ2VyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5h
Z2VyLnByb3RvdHlwZS5hZGRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5wcm90b3R5cGUucmVzdG9yZWRCcmVha3BvaW50KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuYnJlYWtwb2ludHNGb3JTb3Vy
Y2VJRCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBl
LmJyZWFrcG9pbnRzRm9yVVJMKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFu
YWdlci5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLnJlc3RvcmVkQnJlYWtw
b2ludCk6CisKIDIwMTAtMDYtMTUgIEpvY2VseW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRl
QG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmlu
ZGV4IDM0NTZmZDUuLjg4NzRiZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
KysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTMzOCw2ICsxMzM4LDcgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIFwK
IAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBcCiAJV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0
QnJlYWtwb2ludC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaCBc
CiAJV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oIFwKIAlXZWJDb3JlL2lu
c3BlY3Rvci9TY3JpcHRHQ0V2ZW50TGlzdGVuZXIuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGJmNDMyNTEuLjI2Y2RkZjMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0xNzAwLDYgKzE3MDAsNyBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oJywKKyAg
ICAgICAgICAgICdpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9T
Y3JpcHREZWJ1Z0xpc3RlbmVyLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9TY3JpcHRHQ0V2
ZW50TGlzdGVuZXIuaCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29y
ZS9XZWJDb3JlLnBybwppbmRleCAyMGIyZDU5Li40MTEyM2JiIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTcyMCw2ICs3MjAsNyBA
QCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwIFwKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuY3BwIFwKKyAgICBpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAg
XAogICAgIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwIFwKICAgICBsb2FkZXIv
YXJjaGl2ZS9BcmNoaXZlRmFjdG9yeS5jcHAgXAogICAgIGxvYWRlci9hcmNoaXZlL0FyY2hpdmVS
ZXNvdXJjZS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggMjMw
ZjczNC4uODM5OGY1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00
NjgzNyw2ICs0NjgzNywxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcU2NyaXB0QnJlYWtwb2ludC5jcHAiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
U2NyaXB0QnJlYWtwb2ludC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzgwN2ZmMC4uYmE3MjA3MSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU4NCw2ICs1ODQsNyBA
QAogCQkxQ0Y2QkUxNDBFOUJCNDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24u
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0Y2QkUx
MjBFOUJCNDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24ubW0gKi87IH07CiAJ
CTFDRjZCRTE1MEU5QkI0NjcwMDI1RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNGNkJFMTMwRTlC
QjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLmggKi87IH07CiAJCTFDRkFF
MzIzMEE2RDZBM0YwMDMyNTkzRCAvKiBsaWJvYmpjLmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNGQUUzMjIwQTZENkEzRjAwMzI1OTNEIC8q
IGxpYm9iamMuZHlsaWIgKi87IH07CisJCTIwMEIxOTA5MTFDMjc3RDkwMERDQ0QzQSAvKiBTY3Jp
cHRCcmVha3BvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDIwMEIxOTA4MTFDMjc3RDkwMERDQ0QzQSAvKiBTY3JpcHRCcmVha3BvaW50LmNwcCAq
LzsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI4QzI4NDQxMEQ4
MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI0RjU0RUFDMTAxRkU5MTQwMDBBRTc0MSAvKiBB
cHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyNEY1NEVBQTEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNo
ZUhvc3QuY3BwICovOyB9OwogCQkyNEY1NEVBRDEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRp
b25DYWNoZUhvc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CkBAIC02MTMwLDYgKzYxMzEsNyBA
QAogCQkxQ0Y2QkUxMjBFOUJCNDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24u
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBPYmpDTm9kZUZpbHRl
ckNvbmRpdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNGNkJFMTMwRTlC
QjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFDRkFFMzIyMEE2RDZBM0YwMDMyNTkzRCAvKiBsaWJvYmpjLmR5
bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNv
bXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJvYmpjLmR5bGliOyBwYXRoID0gL3Vzci9s
aWIvbGlib2JqYy5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKKwkJMjAwQjE5
MDgxMUMyNzdEOTAwRENDRDNBIC8qIFNjcmlwdEJyZWFrcG9pbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0QnJlYWtwb2ludC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFw
cGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0V3JhcHBhYmxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RjU0RUFBMTAxRkU5MTQwMDBBRTc0
MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9z
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlSG9z
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyMTYsNiArMTEyMTgsNyBAQAog
CQkJCUYzNzVDQzA2MTE1MEQzMDAwMDhEREI4MSAvKiBJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5o
ICovLAogCQkJCTFDODFCQTA1MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1l
LmlkbCAqLywKIAkJCQlCQ0M2NEY1RjBEQ0ZCODRFMDA4MUVGM0IgLyogbG9jYWxpemVkU3RyaW5n
cy5qcyAqLywKKwkJCQkyMDBCMTkwODExQzI3N0Q5MDBEQ0NEM0EgLyogU2NyaXB0QnJlYWtwb2lu
dC5jcHAgKi8sCiAJCQkJN0FGRDRBOEExMTMxQzI3NjAwMzVCODgzIC8qIFNjcmlwdEJyZWFrcG9p
bnQuaCAqLywKIAkJCQk3QUZENEZGMzExMzI3N0I2MDAzNUI4ODMgLyogU2NyaXB0RGVidWdMaXN0
ZW5lci5oICovLAogCQkJCTlGQTM3RUVGMTE3MkZENDEwMEM0Q0Q1NSAvKiBTY3JpcHRQcm9maWxl
LmlkbCAqLywKQEAgLTIxNzIwLDYgKzIxNzIzLDcgQEAKIAkJCQlCNkIwNTQwOTExQjY4RjEwMDAy
NTY0QzUgLyogSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgxNkM4
MDY4MTFCRTg4N0UwMDlBNDVFOSAvKiBJREJLZXlSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4MTZDODBCMTExQkU5OTM0MDA5QTQ1RTkgLyogSlNJREJLZXlSYW5nZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkyMDBCMTkwOTExQzI3N0Q5MDBEQ0NEM0EgLyogU2NyaXB0QnJlYWtwb2ludC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKaW5k
ZXggMWVlZGRhMS4uYWY2MDBmYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5j
cHAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnN0b3BUaW1lbGlu
ZVByb2ZpbGVyKCkKIAogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjplbmFibGVEZWJ1Z2dlcihib29s
IGFsd2F5cykKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgIGlmIChtX2lu
c3BlY3RvckNvbnRyb2xsZXIgJiYgIVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5pc0RlYnVn
Z2VyQWx3YXlzRW5hYmxlZCgpKQogICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmVuYWJs
ZURlYnVnZ2VyRnJvbUZyb250ZW5kKGFsd2F5cyk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggNzkxNmNkMC4uNDFhM2I5NCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNs
dWRlICJJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJv
bnRlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIkluc3BlY3RvcldvcmtlclJlc291cmNlLmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTg2
LDYgKzg3LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL01ENS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgogCkBAIC0xNDEsNiArMTQzLDI3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBleHBpcmVDb25zb2xlTWVzc2FnZXNTdGVwID0gMTAwOwogCiBzdGF0aWMgdW5zaWduZWQgc19p
bnNwZWN0b3JDb250cm9sbGVyQ291bnQ7CiAKK25hbWVzcGFjZSB7CisKK1N0cmluZyBtZDVCYXNl
MTYoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgZGlnaXRz
W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisKKyAgICBNRDUgbWQ1OworICAgIG1kNS5hZGRCeXRl
cyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFjdGVycygpKSwg
c3RyaW5nLmxlbmd0aCgpICogMik7CisgICAgVmVjdG9yPHVpbnQ4X3QsIDE2PiBkaWdlc3Q7Cisg
ICAgbWQ1LmNoZWNrc3VtKGRpZ2VzdCk7CisKKyAgICBWZWN0b3I8Y2hhciwgMzI+IHJlc3VsdDsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyArK2kpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChkaWdpdHNbKGRpZ2VzdFtpXSA+PiA0KSAmIDB4Zl0pOworICAgICAgICByZXN1bHQuYXBwZW5k
KGRpZ2l0c1tkaWdlc3RbaV0gJiAweGZdKTsKKyAgICB9CisgICAgcmV0dXJuIFN0cmluZyhyZXN1
bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKK30KKworfQorCiBJbnNwZWN0b3JDb250cm9sbGVy
OjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50
KQogICAgIDogbV9pbnNwZWN0ZWRQYWdlKHBhZ2UpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCkBA
IC0xNjAsNiArMTgzLDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxl
cihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1fZGVidWdnZXJF
bmFibGVkKGZhbHNlKQogICAgICwgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bihmYWxzZSkKICAg
ICAsIG1fcGF1c2VkU2NyaXB0U3RhdGUoMCkKKyAgICAsIG1fYnJlYWtwb2ludHNMb2FkZWQoZmFs
c2UpCiAgICAgLCBtX3Byb2ZpbGVyRW5hYmxlZCghV1RGX1VTRV9KU0MpCiAgICAgLCBtX3JlY29y
ZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKGZhbHNlKQogICAgICwgbV9jdXJyZW50VXNlckluaXRp
YXRlZFByb2ZpbGVOdW1iZXIoLTEpCkBAIC0yMzIsNyArMjU2LDcgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpzZXRTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNlc3Npb25TZXR0aW5ncyhjb25z
dCBTdHJpbmcmIHNldHRpbmdzSlNPTikKIHsKLSAgICBtX3Nlc3Npb25TZXR0aW5ncyA9IEluc3Bl
Y3RvclZhbHVlOjpyZWFkSlNPTihzZXR0aW5nc0pTT04pOworICAgIG1fc2Vzc2lvblNldHRpbmdz
ID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihzZXR0aW5nc0pTT04pOwogfQogCiB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3QoTm9kZSogbm9kZSkKQEAgLTY3NCw2ICs2OTgsOCBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIq
IGxvYWRlcikKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICAgICAgbV9zb3Vy
Y2VJRFRvVVJMLmNsZWFyKCk7CiAgICAgICAgIG1fc2NyaXB0SURUb0NvbnRlbnQuY2xlYXIoKTsK
KyAgICAgICAgbV9zdGlja3lCcmVha3BvaW50cy5jbGVhcigpOworICAgICAgICBtX2JyZWFrcG9p
bnRzTG9hZGVkID0gZmFsc2U7CiAjZW5kaWYKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikgJiYgVVNFKEpTQykKICAgICAgICAgbV9wcm9maWxlcy5jbGVhcigpOwpAQCAtMTY3OCwxMCAr
MTcwNCwxMyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bQogICAgIGlmICh1cmwuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2lu
dHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuZmluZCh1cmwpOworICAgIGxv
YWRCcmVha3BvaW50cygpOworICAgIFN0cmluZyBrZXkgPSBtZDVCYXNlMTYodXJsKTsKKyAgICBI
YXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5
QnJlYWtwb2ludHMuZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBtX3N0aWNreUJyZWFrcG9pbnRz
LmVuZCgpKQotICAgICAgICBpdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuc2V0KHVybCwgU291cmNl
QnJlYWtwb2ludHMoKSkuZmlyc3Q7CisgICAgICAgIGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5z
ZXQoa2V5LCBTb3VyY2VCcmVha3BvaW50cygpKS5maXJzdDsKICAgICBpdC0+c2Vjb25kLnNldChs
aW5lTnVtYmVyLCBicmVha3BvaW50KTsKKyAgICBzYXZlQnJlYWtwb2ludHMoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291
cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCkBAIC0xNjkyLDkgKzE3MjEsMTEgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNl
SUQsIHVuc2lnbmVkIGxpbmUKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQg
PSBtX3N0aWNreUJyZWFrcG9pbnRzLmZpbmQodXJsKTsKKyAgICBsb2FkQnJlYWtwb2ludHMoKTsK
KyAgICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1f
c3RpY2t5QnJlYWtwb2ludHMuZmluZChtZDVCYXNlMTYodXJsKSk7CiAgICAgaWYgKGl0ICE9IG1f
c3RpY2t5QnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIGl0LT5zZWNvbmQucmVtb3ZlKGxpbmVO
dW1iZXIpOworICAgIHNhdmVCcmVha3BvaW50cygpOwogfQogCiAvLyBKYXZhU2NyaXB0RGVidWdM
aXN0ZW5lciBmdW5jdGlvbnMKQEAgLTE3MDcsNyArMTczOCw4IEBAIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlkUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3Ry
aW5nJiB1CiAgICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhh
c2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9yIGl0ID0gbV9zdGlja3lC
cmVha3BvaW50cy5maW5kKHVybCk7CisgICAgbG9hZEJyZWFrcG9pbnRzKCk7CisgICAgSGFzaE1h
cDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJyZWFr
cG9pbnRzLmZpbmQobWQ1QmFzZTE2KHVybCkpOwogICAgIGlmIChpdCAhPSBtX3N0aWNreUJyZWFr
cG9pbnRzLmVuZCgpKSB7CiAgICAgICAgIGZvciAoU291cmNlQnJlYWtwb2ludHM6Oml0ZXJhdG9y
IGJyZWFrcG9pbnRJdCA9IGl0LT5zZWNvbmQuYmVnaW4oKTsgYnJlYWtwb2ludEl0ICE9IGl0LT5z
ZWNvbmQuZW5kKCk7ICsrYnJlYWtwb2ludEl0KSB7CiAgICAgICAgICAgICBpZiAoZmlyc3RMaW5l
IDw9IGJyZWFrcG9pbnRJdC0+Zmlyc3QpIHsKQEAgLTE3NjEsNiArMTc5Myw0NSBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKIH0KIAorU3RyaW5nIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmJyZWFrcG9pbnRzU2V0dGluZ0tleSgpCit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIGtleVByZWZpeCwgKCJicmVha3BvaW50czoiKSk7CisgICAgcmV0
dXJuIGtleVByZWZpeCArIG1kNUJhc2UxNihtX21haW5SZXNvdXJjZS0+cmVxdWVzdFVSTCgpKTsK
K30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpsb2FkQnJlYWtwb2ludHMoKQoreworICAg
IGlmIChtX2JyZWFrcG9pbnRzTG9hZGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9icmVha3Bv
aW50c0xvYWRlZCA9IHRydWU7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZFNl
dHRpbmcgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKHNldHRpbmcoYnJlYWtwb2ludHNTZXR0
aW5nS2V5KCkpKTsKKyAgICBpZiAoIXBhcnNlZFNldHRpbmcpCisgICAgICAgIHJldHVybjsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cyA9IHBhcnNlZFNldHRpbmctPmFz
T2JqZWN0KCk7CisgICAgaWYgKCFicmVha3BvaW50cykKKyAgICAgICAgcmV0dXJuOworICAgIGZv
ciAoSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IGJyZWFrcG9pbnRzLT5iZWdpbigpOyBp
dCAhPSBicmVha3BvaW50cy0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYnJlYWtwb2ludHNGb3JVUkwgPSBpdC0+c2Vjb25kLT5hc09iamVjdCgpOworICAg
ICAgICBpZiAoIWJyZWFrcG9pbnRzRm9yVVJMKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIFNvdXJjZUJyZWFrcG9pbnRzJiBzb3VyY2VCcmVha3BvaW50cyA9IG1fc3RpY2t5QnJlYWtw
b2ludHMuc2V0KGl0LT5maXJzdCwgU291cmNlQnJlYWtwb2ludHMoKSkuZmlyc3QtPnNlY29uZDsK
KyAgICAgICAgU2NyaXB0QnJlYWtwb2ludDo6c291cmNlQnJlYWtwb2ludHNGcm9tSW5zcGVjdG9y
T2JqZWN0KGJyZWFrcG9pbnRzRm9yVVJMLCAmc291cmNlQnJlYWtwb2ludHMpOworICAgIH0KK30K
Kwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlQnJlYWtwb2ludHMoKQoreworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJh
dG9yIGl0KG1fc3RpY2t5QnJlYWtwb2ludHMuYmVnaW4oKSk7IGl0ICE9IG1fc3RpY2t5QnJlYWtw
b2ludHMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT5zZWNvbmQuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJy
ZWFrcG9pbnRzRm9yVVJMID0gU2NyaXB0QnJlYWtwb2ludDo6aW5zcGVjdG9yT2JqZWN0RnJvbVNv
dXJjZUJyZWFrcG9pbnRzKGl0LT5zZWNvbmQpOworICAgICAgICBicmVha3BvaW50cy0+c2V0KGl0
LT5maXJzdCwgYnJlYWtwb2ludHNGb3JVUkwpOworICAgIH0KKyAgICBzZXRTZXR0aW5nKGJyZWFr
cG9pbnRzU2V0dGluZ0tleSgpLCBicmVha3BvaW50cy0+dG9KU09OU3RyaW5nKCkpOworfQorCiBz
dGF0aWMgUGF0aCBxdWFkVG9QYXRoKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKIHsKICAgICBQYXRo
IHF1YWRQYXRoOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IGFm
MzYzODMuLjEyMGY1ZjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgK
QEAgLTMyNSw2ICszMjUsMTIgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkRXZhbHVhdGVGb3JU
ZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBqc29uUmVzdWx0KTsKIAor
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIFN0cmluZyBicmVha3BvaW50c1Nl
dHRpbmdLZXkoKTsKKyAgICB2b2lkIGxvYWRCcmVha3BvaW50cygpOworICAgIHZvaWQgc2F2ZUJy
ZWFrcG9pbnRzKCk7CisjZW5kaWYKKwogICAgIFBhZ2UqIG1faW5zcGVjdGVkUGFnZTsKICAgICBJ
bnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZENs
aWVudD4gbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudDsKQEAgLTM3MSw2ICszNzcsNyBAQCBwcml2
YXRlOgogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fc291cmNlSURUb1VSTDsKICAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX3NjcmlwdElEVG9Db250ZW50OwogICAgIEhhc2hNYXA8
U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz4gbV9zdGlja3lCcmVha3BvaW50czsKKyAgICBib29s
IG1fYnJlYWtwb2ludHNMb2FkZWQ7CiAKICAgICBib29sIG1fcHJvZmlsZXJFbmFibGVkOwogICAg
IGJvb2wgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwCmluZGV4IDVjN2QwYzguLmE3MDVlYjkgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmNwcApAQCAtNDk5LDcgKzQ5OSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IEluc3BlY3RvclZhbHVlOjphc0FycmF5KCkKICAgICByZXR1cm4gMDsKIH0KIAot
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFsdWU6OnJlYWRKU09OKGNvbnN0
IFN0cmluZyYganNvbikKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvclZhbHVl
OjpwYXJzZUpTT04oY29uc3QgU3RyaW5nJiBqc29uKQogewogICAgIGNvbnN0IFVDaGFyKiBzdGFy
dCA9IGpzb24uY2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBqc29uLmNoYXJh
Y3RlcnMoKSArIGpzb24ubGVuZ3RoKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmlu
ZGV4IGI5OTIwYzQuLjMwYmE5NWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCkBA
IC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBhc09iamVjdCgpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gYXNBcnJheSgpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJl
YWRKU09OKGNvbnN0IFN0cmluZyYganNvbik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHBhcnNlSlNPTihjb25zdCBTdHJpbmcmIGpzb24pOwogCiAgICAgU3RyaW5nIHRv
SlNPTlN0cmluZygpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oVmVjdG9yPFVD
aGFyPiogb3V0cHV0KSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL1Njcmlw
dEJyZWFrcG9pbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UwZDE4YQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuY3BwCkBAIC0wLDAgKzEs
NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NyaXB0QnJlYWtwb2ludC5o
IgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgU2NyaXB0QnJlYWtwb2ludDo6c291cmNl
QnJlYWtwb2ludHNGcm9tSW5zcGVjdG9yT2JqZWN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBicmVha3BvaW50cywgU291cmNlQnJlYWtwb2ludHMqIHNvdXJjZUJyZWFrcG9pbnRzKQorewor
ICAgIGZvciAoSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpdCA9IGJyZWFrcG9pbnRzLT5iZWdp
bigpOyBpdCAhPSBicmVha3BvaW50cy0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgYm9vbCBvazsK
KyAgICAgICAgaW50IGxpbmVOdW1iZXIgPSBpdC0+Zmlyc3QudG9JbnQoJm9rKTsKKyAgICAgICAg
aWYgKCFvaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBicmVha3BvaW50ID0gaXQtPnNlY29uZC0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYg
KCFicmVha3BvaW50KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGJvb2wgZW5hYmxl
ZDsKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBlbmFibGVkVmFsdWUgPSBicmVha3Bv
aW50LT5nZXQoImVuYWJsZWQiKTsKKyAgICAgICAgaWYgKCFlbmFibGVkVmFsdWUgfHwgIWVuYWJs
ZWRWYWx1ZS0+YXNCb29sKCZlbmFibGVkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBTdHJpbmcgY29uZGl0aW9uOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNvbmRp
dGlvblZhbHVlID0gYnJlYWtwb2ludC0+Z2V0KCJjb25kaXRpb24iKTsKKyAgICAgICAgaWYgKCFj
b25kaXRpb25WYWx1ZSB8fCAhY29uZGl0aW9uVmFsdWUtPmFzU3RyaW5nKCZjb25kaXRpb24pKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHNvdXJjZUJyZWFrcG9pbnRzLT5zZXQobGlu
ZU51bWJlciwgU2NyaXB0QnJlYWtwb2ludChlbmFibGVkLCBjb25kaXRpb24pKTsKKyAgICB9Cit9
CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBTY3JpcHRCcmVha3BvaW50OjppbnNwZWN0
b3JPYmplY3RGcm9tU291cmNlQnJlYWtwb2ludHMoY29uc3QgU291cmNlQnJlYWtwb2ludHMmIHNv
dXJjZUJyZWFrcG9pbnRzKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9p
bnRzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBmb3IgKFNvdXJjZUJyZWFrcG9p
bnRzOjpjb25zdF9pdGVyYXRvciBpdCA9IHNvdXJjZUJyZWFrcG9pbnRzLmJlZ2luKCk7IGl0ICE9
IHNvdXJjZUJyZWFrcG9pbnRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGJyZWFrcG9pbnQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAg
ICBicmVha3BvaW50LT5zZXRCb29sKCJlbmFibGVkIiwgaXQtPnNlY29uZC5lbmFibGVkKTsKKyAg
ICAgICAgYnJlYWtwb2ludC0+c2V0U3RyaW5nKCJjb25kaXRpb24iLCBpdC0+c2Vjb25kLmNvbmRp
dGlvbik7CisgICAgICAgIGJyZWFrcG9pbnRzLT5zZXQoU3RyaW5nOjpudW1iZXIoaXQtPmZpcnN0
KSwgYnJlYWtwb2ludCk7CisgICAgfQorICAgIHJldHVybiBicmVha3BvaW50cy5yZWxlYXNlKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmggYi9X
ZWJDb3JlL2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmgKaW5kZXggODc3NTkwMS4uYjdjN2Ez
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaApAQCAtMzUsNiArMzUsMTEgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitzdHJ1Y3Qg
U2NyaXB0QnJlYWtwb2ludDsKKwordHlwZWRlZiBIYXNoTWFwPGludCwgU2NyaXB0QnJlYWtwb2lu
dD4gU291cmNlQnJlYWtwb2ludHM7CisKIHN0cnVjdCBTY3JpcHRCcmVha3BvaW50IHsKICAgICBT
Y3JpcHRCcmVha3BvaW50KGJvb2wgZW5hYmxlZCwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24pCiAg
ICAgICAgIDogZW5hYmxlZChlbmFibGVkKQpAQCAtNDgsOSArNTMsMTAgQEAgc3RydWN0IFNjcmlw
dEJyZWFrcG9pbnQgewogCiAgICAgYm9vbCBlbmFibGVkOwogICAgIFN0cmluZyBjb25kaXRpb247
Ci19OwogCi10eXBlZGVmIEhhc2hNYXA8aW50LCBTY3JpcHRCcmVha3BvaW50PiBTb3VyY2VCcmVh
a3BvaW50czsKKyAgICBzdGF0aWMgdm9pZCBzb3VyY2VCcmVha3BvaW50c0Zyb21JbnNwZWN0b3JP
YmplY3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+LCBTb3VyY2VCcmVha3BvaW50cyopOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5zcGVjdG9yT2JqZWN0RnJv
bVNvdXJjZUJyZWFrcG9pbnRzKGNvbnN0IFNvdXJjZUJyZWFrcG9pbnRzJik7Cit9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9C
cmVha3BvaW50TWFuYWdlci5qcwppbmRleCAzY2NjY2FjLi40ZjY5NjVhIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCkBAIC0zOCw2ICsz
OCw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIGlmICh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludCkKICAgICAgICAgICAgIHRoaXMuX3JlbW92
ZUJyZWFrcG9pbnRGcm9tQmFja2VuZCh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludCk7CiAgICAgICAg
IHRoaXMuX29uZVRpbWVCcmVha3BvaW50ID0gYnJlYWtwb2ludDsKKyAgICAgICAgLy8gRklYTUUo
NDA2NjkpOiBvbmUgdGltZSBicmVha3BvaW50IHdpbGwgYmUgcGVyc2lzdGVkIGluIGluc3BlY3Rv
ciBzZXR0aW5ncyBpZiBub3QgaGl0LgogICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2ludE9uQmFj
a2VuZChicmVha3BvaW50KTsKICAgICB9LAogCkBAIC01MSwxNSArNTIsMTUgQEAgV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAgIGFkZEJyZWFrcG9pbnQ6
IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikK
ICAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50KHRoaXMsIHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7
Ci0gICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgaWYgKHRoaXMuX29uZVRpbWVCcmVha3BvaW50ICYmICh0aGlz
Ll9vbmVUaW1lQnJlYWtwb2ludC5pZCA9PSBicmVha3BvaW50LmlkKSkKLSAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNb
YnJlYWtwb2ludC5pZF0gPSBicmVha3BvaW50OwotICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2lu
dE9uQmFja2VuZChicmVha3BvaW50KTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoImJyZWFrcG9pbnQtYWRkZWQiLCBicmVha3BvaW50KTsKLSAgICB9LCAgICAKKyAgICAg
ICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9hZGRCcmVha3BvaW50KHNvdXJjZUlELCBzb3VyY2VV
UkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CisgICAgICAgIGlmIChicmVha3BvaW50KQor
ICAgICAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRPbkJhY2tlbmQoYnJlYWtwb2ludCk7Cisg
ICAgfSwKKworICAgIHJlc3RvcmVkQnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIHNvdXJj
ZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgdGhpcy5fYWRk
QnJlYWtwb2ludChzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24p
OworICAgIH0sCiAKICAgICByZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQog
ICAgIHsKQEAgLTc4LDcgKzc5LDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKHRoaXMuX2JyZWFr
cG9pbnRzW2lkXSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnRzOwotICAg
IH0sICAgIAorICAgIH0sCiAKICAgICBicmVha3BvaW50c0ZvclVSTDogZnVuY3Rpb24odXJsKQog
ICAgIHsKQEAgLTg3LDcgKzg4LDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50c1tpZF0udXJsID09
PSB1cmwpCiAgICAgICAgICAgICAgICAgYnJlYWtwb2ludHMucHVzaCh0aGlzLl9icmVha3BvaW50
c1tpZF0pOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBicmVha3BvaW50czsgICAgICAgIAor
ICAgICAgICByZXR1cm4gYnJlYWtwb2ludHM7CiAgICAgfSwKIAogICAgIHJlc2V0OiBmdW5jdGlv
bigpCkBAIC05Niw2ICs5NywxOCBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJv
dG90eXBlID0gewogICAgICAgICBkZWxldGUgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQ7CiAgICAg
fSwKIAorICAgIF9hZGRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgc291cmNlVVJMLCBs
aW5lLCBlbmFibGVkLCBjb25kaXRpb24pCisgICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludCA9
IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCh0aGlzLCBzb3VyY2VJRCwgc291cmNlVVJMLCBs
aW5lLCBlbmFibGVkLCBjb25kaXRpb24pOworICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHNb
YnJlYWtwb2ludC5pZF0pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh0aGlzLl9v
bmVUaW1lQnJlYWtwb2ludCAmJiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQuaWQgPT0gYnJlYWtw
b2ludC5pZCkpCisgICAgICAgICAgICBkZWxldGUgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQ7Cisg
ICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdID0gYnJlYWtwb2ludDsKKyAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImJyZWFrcG9pbnQtYWRkZWQiLCBi
cmVha3BvaW50KTsKKyAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnQ7CisgICAgfSwKKwogICAgIF9z
YXZlQnJlYWtwb2ludE9uQmFja2VuZDogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7CiAgICAg
ICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBi
cmVha3BvaW50LmxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24p
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggZTgxMDhhZi4u
Y2ZlN2RlOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC0x
MzM0LDcgKzEzMzQsNyBAQCBXZWJJbnNwZWN0b3IucGFyc2VkU2NyaXB0U291cmNlID0gZnVuY3Rp
b24oc291cmNlSUQsIHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZwogCiBXZWJJbnNwZWN0b3Iu
cmVzdG9yZWRCcmVha3BvaW50ID0gZnVuY3Rpb24oc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwg
ZW5hYmxlZCwgY29uZGl0aW9uKQogewotICAgIHRoaXMuYnJlYWtwb2ludE1hbmFnZXIuYWRkQnJl
YWtwb2ludChzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pOwor
ICAgIHRoaXMuYnJlYWtwb2ludE1hbmFnZXIucmVzdG9yZWRCcmVha3BvaW50KHNvdXJjZUlELCBz
b3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CiB9CiAKIFdlYkluc3BlY3Rvci5m
YWlsZWRUb1BhcnNlU2NyaXB0U291cmNlID0gZnVuY3Rpb24oc291cmNlVVJMLCBzb3VyY2UsIHN0
YXJ0aW5nTGluZSwgZXJyb3JMaW5lLCBlcnJvck1lc3NhZ2UpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59005</attachid>
            <date>2010-06-17 09:49:22 -0700</date>
            <delta_ts>2010-06-18 09:42:39 -0700</delta_ts>
            <desc>Rebase and minor fixes.</desc>
            <filename>sticky.diff</filename>
            <type>text/plain</type>
            <size>24015</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTM1YjU5MC4uYjQ5MzE0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxMC0wNi0xNiAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwZXJzaXN0IGJyZWFrcG9pbnRz
IGluIGluc3BlY3RvciBzZXR0aW5ncy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MTkwCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNv
bnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U2Vz
c2lvblNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRp
ZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1v
dmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRp
ZFBhcnNlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmJy
ZWFrcG9pbnRzU2V0dGluZ0tleSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpsb2FkQnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6c2F2ZUJyZWFrcG9pbnRzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTik6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRCcmVh
a3BvaW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRCcmVha3BvaW50Ojpz
b3VyY2VCcmVha3BvaW50c0Zyb21JbnNwZWN0b3JPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0QnJlYWtwb2ludDo6aW5zcGVjdG9yT2JqZWN0RnJvbVNvdXJjZUJyZWFrcG9pbnRzKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLmFkZEJyZWFrcG9pbnQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5yZXN0b3JlZEJyZWFrcG9p
bnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5i
cmVha3BvaW50c0ZvclNvdXJjZUlEKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5wcm90b3R5cGUuYnJlYWtwb2ludHNGb3JVUkwpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludCk6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IucmVzdG9yZWRCcmVha3BvaW50KToKKwogMjAxMC0wNi0xNyAgUGF2ZWwgRmVsZG1hbiAgPHBm
ZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkOiBjaHJvbWl1bSB0ZXN0
cyBmaXguIEFkZGVkIEluc3BlY3RvckJhY2tlbmQgZGVsZWdhdGVzIGZvciBuZXcgaW5zcGVjdG9y
IG1ldGhvZHMuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQppbmRleCA0OWExYzhiLi45ZWZlNWIwIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEzMzgsNiAr
MTMzOCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggXAog
CVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlclJlc291cmNlLmggXAorCVdlYkNvcmUv
aW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9TY3Jp
cHRCcmVha3BvaW50LmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlzdGVuZXIu
aCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0R0NFdmVudExpc3RlbmVyLmggXApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAw
YzBmNTgwLi45YzliOTI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTcwMCw2ICsxNzAwLDcgQEAKICAgICAgICAgICAgICdp
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yV29ya2Vy
UmVzb3VyY2UuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuY3Bw
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvU2NyaXB0R0NFdmVudExpc3RlbmVyLmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggMDZkYTlhMi4uZDhjMGEwNCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBA
IC03MjAsNiArNzIwLDcgQEAgU09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJl
c291cmNlLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIFwK
ICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBcCisgICAgaW5zcGVjdG9yL1Njcmlw
dEJyZWFrcG9pbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNw
cCBcCiAgICAgbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwIFwKICAgICBsb2FkZXIv
YXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2UuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCmluZGV4IDEwODg5NWUuLjNiYzY5N2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagpAQCAtNDY4NDksNiArNDY4NDksMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0K
IAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXFNjcmlwdEJyZWFrcG9p
bnQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0
aD0iLi5caW5zcGVjdG9yXFNjcmlwdEJyZWFrcG9pbnQuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4N
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGM2NDI3N2Qu
LjQxMzhjYzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC01ODcsNiArNTg3LDcgQEAKIAkJMUNGNkJFMTQwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2Rl
RmlsdGVyQ29uZGl0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUNGNkJFMTIwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0
aW9uLm1tICovOyB9OwogCQkxQ0Y2QkUxNTBFOUJCNDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0
ZXJDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFDRjZCRTEzMEU5QkI0NjcwMDI1RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5o
ICovOyB9OwogCQkxQ0ZBRTMyMzBBNkQ2QTNGMDAzMjU5M0QgLyogbGlib2JqYy5keWxpYiBpbiBG
cmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRkFFMzIyMEE2
RDZBM0YwMDMyNTkzRCAvKiBsaWJvYmpjLmR5bGliICovOyB9OworCQkyMDBCMTkwOTExQzI3N0Q5
MDBEQ0NEM0EgLyogU2NyaXB0QnJlYWtwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMDBCMTkwODExQzI3N0Q5MDBEQ0NEM0EgLyogU2NyaXB0
QnJlYWtwb2ludC5jcHAgKi87IH07CiAJCTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3Jp
cHRXcmFwcGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyNEY1NEVBQzEwMUZF
OTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjRGNTRFQUExMDFGRTkxNDAwMEFFNzQxIC8q
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCAqLzsgfTsKIAkJMjRGNTRFQUQxMDFGRTkxNDAwMEFF
NzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRp
b25DYWNoZUhvc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwpAQCAt
NjEzNiw2ICs2MTM3LDcgQEAKIAkJMUNGNkJFMTIwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2Rl
RmlsdGVyQ29uZGl0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFDRjZCRTEzMEU5QkI0NjcwMDI1RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPYmpDTm9kZUZpbHRlckNvbmRpdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0ZBRTMyMjBBNkQ2QTNGMDAzMjU5
M0QgLyogbGlib2JqYy5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGlib2JqYy5keWxp
YjsgcGF0aCA9IC91c3IvbGliL2xpYm9iamMuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRl
PiI7IH07CisJCTIwMEIxOTA4MTFDMjc3RDkwMERDQ0QzQSAvKiBTY3JpcHRCcmVha3BvaW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdEJyZWFrcG9pbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjhDMjg0NDEwRDgyNTAwMDA5RDBE
MEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNjcmlwdFdyYXBwYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNEY1NEVB
QTEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBw
bGljYXRpb25DYWNoZUhvc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBw
bGljYXRpb25DYWNoZUhvc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMjIy
LDYgKzExMjI0LDcgQEAKIAkJCQlGMzc1Q0MwNjExNTBEMzAwMDA4RERCODEgLyogSW5zcGVjdG9y
V29ya2VyUmVzb3VyY2UuaCAqLywKIAkJCQkxQzgxQkEwNTBFOTczNDgzMDAyNjZFMDcgLyogSmF2
YVNjcmlwdENhbGxGcmFtZS5pZGwgKi8sCiAJCQkJQkNDNjRGNUYwRENGQjg0RTAwODFFRjNCIC8q
IGxvY2FsaXplZFN0cmluZ3MuanMgKi8sCisJCQkJMjAwQjE5MDgxMUMyNzdEOTAwRENDRDNBIC8q
IFNjcmlwdEJyZWFrcG9pbnQuY3BwICovLAogCQkJCTdBRkQ0QThBMTEzMUMyNzYwMDM1Qjg4MyAv
KiBTY3JpcHRCcmVha3BvaW50LmggKi8sCiAJCQkJN0FGRDRGRjMxMTMyNzdCNjAwMzVCODgzIC8q
IFNjcmlwdERlYnVnTGlzdGVuZXIuaCAqLywKIAkJCQk5RkEzN0VFRjExNzJGRDQxMDBDNENENTUg
LyogU2NyaXB0UHJvZmlsZS5pZGwgKi8sCkBAIC0yMTczMiw2ICsyMTczNSw3IEBACiAJCQkJMDg1
M0Q3MzIxMUM5MTA5MDAwQjJGRDQyIC8qIFNWR1RleHRDaHVua0xheW91dEluZm8uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMDg1M0Q3MzMxMUM5MTA5MDAwQjJGRDQyIC8qIFNWR1RleHRRdWVyeS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUZGQkY0MDExQzkzRUUzMDA2QTcxMTggLyogV2ViR0xM
YXllci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTIwMEIxOTA5MTFDMjc3RDkwMERDQ0QzQSAvKiBT
Y3JpcHRCcmVha3BvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAzMjVlMTJjLi4xOGQ2NTAzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1
ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9u
dGVuZC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JUaW1lbGluZUFnZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtODYs
NiArODcsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvTUQ1Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAKQEAgLTE0MSw2ICsxNDMsMjcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGV4cGlyZUNvbnNvbGVNZXNzYWdlc1N0ZXAgPSAxMDA7CiAKIHN0YXRpYyB1bnNpZ25lZCBzX2lu
c3BlY3RvckNvbnRyb2xsZXJDb3VudDsKIAorbmFtZXNwYWNlIHsKKworU3RyaW5nIG1kNUJhc2Ux
Nihjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciBkaWdpdHNb
XSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKworICAgIE1ENSBtZDU7CisgICAgbWQ1LmFkZEJ5dGVz
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzKCkpLCBz
dHJpbmcubGVuZ3RoKCkgKiAyKTsKKyAgICBWZWN0b3I8dWludDhfdCwgMTY+IGRpZ2VzdDsKKyAg
ICBtZDUuY2hlY2tzdW0oZGlnZXN0KTsKKworICAgIFZlY3RvcjxjaGFyLCAzMj4gcmVzdWx0Owor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7ICsraSkgeworICAgICAgICByZXN1bHQuYXBwZW5k
KGRpZ2l0c1soZGlnZXN0W2ldID4+IDQpICYgMHhmXSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
ZGlnaXRzW2RpZ2VzdFtpXSAmIDB4Zl0pOworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nKHJlc3Vs
dC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOworfQorCit9CisKIEluc3BlY3RvckNvbnRyb2xsZXI6
Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQp
CiAgICAgOiBtX2luc3BlY3RlZFBhZ2UocGFnZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKQEAg
LTE2MCw2ICsxODMsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVy
KFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgICwgbV9kZWJ1Z2dlckVu
YWJsZWQoZmFsc2UpCiAgICAgLCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duKGZhbHNlKQogICAg
ICwgbV9wYXVzZWRTY3JpcHRTdGF0ZSgwKQorICAgICwgbV9icmVha3BvaW50c0xvYWRlZChmYWxz
ZSkKICAgICAsIG1fcHJvZmlsZXJFbmFibGVkKCFXVEZfVVNFX0pTQykKICAgICAsIG1fcmVjb3Jk
aW5nVXNlckluaXRpYXRlZFByb2ZpbGUoZmFsc2UpCiAgICAgLCBtX2N1cnJlbnRVc2VySW5pdGlh
dGVkUHJvZmlsZU51bWJlcigtMSkKQEAgLTIzMiw3ICsyNTYsNyBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnNldFNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U2Vzc2lvblNldHRpbmdzKGNvbnN0
IFN0cmluZyYgc2V0dGluZ3NKU09OKQogewotICAgIG1fc2Vzc2lvblNldHRpbmdzID0gSW5zcGVj
dG9yVmFsdWU6OnJlYWRKU09OKHNldHRpbmdzSlNPTik7CisgICAgbV9zZXNzaW9uU2V0dGluZ3Mg
PSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKHNldHRpbmdzSlNPTik7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdChOb2RlKiBub2RlKQpAQCAtNjc1LDYgKzY5OSw4IEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciog
bG9hZGVyKQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgICAgICBtX3NvdXJj
ZUlEVG9VUkwuY2xlYXIoKTsKICAgICAgICAgbV9zY3JpcHRJRFRvQ29udGVudC5jbGVhcigpOwor
ICAgICAgICBtX3N0aWNreUJyZWFrcG9pbnRzLmNsZWFyKCk7CisgICAgICAgIG1fYnJlYWtwb2lu
dHNMb2FkZWQgPSBmYWxzZTsKICNlbmRpZgogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KSAmJiBVU0UoSlNDKQogICAgICAgICBtX3Byb2ZpbGVzLmNsZWFyKCk7CkBAIC0xNjc5LDEwICsx
NzA1LDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QnJlYWtwb2ludChjb25zdCBT
dHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtCiAgICAgaWYgKHVybC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50
cz46Oml0ZXJhdG9yIGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5maW5kKHVybCk7CisgICAgU3Ry
aW5nIGtleSA9IG1kNUJhc2UxNih1cmwpOworICAgIEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVh
a3BvaW50cz46Oml0ZXJhdG9yIGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5maW5kKGtleSk7CiAg
ICAgaWYgKGl0ID09IG1fc3RpY2t5QnJlYWtwb2ludHMuZW5kKCkpCi0gICAgICAgIGl0ID0gbV9z
dGlja3lCcmVha3BvaW50cy5zZXQodXJsLCBTb3VyY2VCcmVha3BvaW50cygpKS5maXJzdDsKKyAg
ICAgICAgaXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLnNldChrZXksIFNvdXJjZUJyZWFrcG9pbnRz
KCkpLmZpcnN0OwogICAgIGl0LT5zZWNvbmQuc2V0KGxpbmVOdW1iZXIsIGJyZWFrcG9pbnQpOwor
ICAgIHNhdmVCcmVha3BvaW50cygpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJl
bW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJl
cikKQEAgLTE2OTMsOSArMTcyMSwxMCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92
ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZQogICAgIGlm
ICh1cmwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIYXNoTWFwPFN0cmluZywg
U291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuZmlu
ZCh1cmwpOworICAgIEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9y
IGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5maW5kKG1kNUJhc2UxNih1cmwpKTsKICAgICBpZiAo
aXQgIT0gbV9zdGlja3lCcmVha3BvaW50cy5lbmQoKSkKICAgICAgICAgaXQtPnNlY29uZC5yZW1v
dmUobGluZU51bWJlcik7CisgICAgc2F2ZUJyZWFrcG9pbnRzKCk7CiB9CiAKIC8vIEphdmFTY3Jp
cHREZWJ1Z0xpc3RlbmVyIGZ1bmN0aW9ucwpAQCAtMTcwOCw3ICsxNzM3LDggQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpkaWRQYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBj
b25zdCBTdHJpbmcmIHUKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBt
X3N0aWNreUJyZWFrcG9pbnRzLmZpbmQodXJsKTsKKyAgICBsb2FkQnJlYWtwb2ludHMoKTsKKyAg
ICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1fc3Rp
Y2t5QnJlYWtwb2ludHMuZmluZChtZDVCYXNlMTYodXJsKSk7CiAgICAgaWYgKGl0ICE9IG1fc3Rp
Y2t5QnJlYWtwb2ludHMuZW5kKCkpIHsKICAgICAgICAgZm9yIChTb3VyY2VCcmVha3BvaW50czo6
aXRlcmF0b3IgYnJlYWtwb2ludEl0ID0gaXQtPnNlY29uZC5iZWdpbigpOyBicmVha3BvaW50SXQg
IT0gaXQtPnNlY29uZC5lbmQoKTsgKyticmVha3BvaW50SXQpIHsKICAgICAgICAgICAgIGlmIChm
aXJzdExpbmUgPD0gYnJlYWtwb2ludEl0LT5maXJzdCkgewpAQCAtMTc2Miw2ICsxNzkyLDQ1IEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChs
b25nIGNhbGxJZCwgY29uc3QgU3RyaW5nCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCitTdHJp
bmcgSW5zcGVjdG9yQ29udHJvbGxlcjo6YnJlYWtwb2ludHNTZXR0aW5nS2V5KCkKK3sKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywga2V5UHJlZml4LCAoImJyZWFrcG9pbnRzOiIpKTsK
KyAgICByZXR1cm4ga2V5UHJlZml4ICsgbWQ1QmFzZTE2KG1fbWFpblJlc291cmNlLT5yZXF1ZXN0
VVJMKCkpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmxvYWRCcmVha3BvaW50cygp
Cit7CisgICAgaWYgKG1fYnJlYWtwb2ludHNMb2FkZWQpCisgICAgICAgIHJldHVybjsKKyAgICBt
X2JyZWFrcG9pbnRzTG9hZGVkID0gdHJ1ZTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
cGFyc2VkU2V0dGluZyA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oc2V0dGluZyhicmVha3Bv
aW50c1NldHRpbmdLZXkoKSkpOworICAgIGlmICghcGFyc2VkU2V0dGluZykKKyAgICAgICAgcmV0
dXJuOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzID0gcGFyc2VkU2V0
dGluZy0+YXNPYmplY3QoKTsKKyAgICBpZiAoIWJyZWFrcG9pbnRzKQorICAgICAgICByZXR1cm47
CisgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gYnJlYWtwb2ludHMtPmJl
Z2luKCk7IGl0ICE9IGJyZWFrcG9pbnRzLT5lbmQoKTsgKytpdCkgeworICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50c0ZvclVSTCA9IGl0LT5zZWNvbmQtPmFzT2JqZWN0
KCk7CisgICAgICAgIGlmICghYnJlYWtwb2ludHNGb3JVUkwpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3Ig
c291cmNlQnJlYWtwb2ludHNJdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuc2V0KGl0LT5maXJzdCwg
U291cmNlQnJlYWtwb2ludHMoKSkuZmlyc3Q7CisgICAgICAgIFNjcmlwdEJyZWFrcG9pbnQ6OnNv
dXJjZUJyZWFrcG9pbnRzRnJvbUluc3BlY3Rvck9iamVjdChicmVha3BvaW50c0ZvclVSTCwgJnNv
dXJjZUJyZWFrcG9pbnRzSXQtPnNlY29uZCk7CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnNhdmVCcmVha3BvaW50cygpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYnJlYWtwb2ludHMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGZvciAoSGFz
aE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3IgaXQobV9zdGlja3lCcmVh
a3BvaW50cy5iZWdpbigpKTsgaXQgIT0gbV9zdGlja3lCcmVha3BvaW50cy5lbmQoKTsgKytpdCkg
eworICAgICAgICBpZiAoaXQtPnNlY29uZC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHNGb3JVUkwgPSBT
Y3JpcHRCcmVha3BvaW50OjppbnNwZWN0b3JPYmplY3RGcm9tU291cmNlQnJlYWtwb2ludHMoaXQt
PnNlY29uZCk7CisgICAgICAgIGJyZWFrcG9pbnRzLT5zZXQoaXQtPmZpcnN0LCBicmVha3BvaW50
c0ZvclVSTCk7CisgICAgfQorICAgIHNldFNldHRpbmcoYnJlYWtwb2ludHNTZXR0aW5nS2V5KCks
IGJyZWFrcG9pbnRzLT50b0pTT05TdHJpbmcoKSk7Cit9CisKIHN0YXRpYyBQYXRoIHF1YWRUb1Bh
dGgoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQogewogICAgIFBhdGggcXVhZFBhdGg7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggYWYzNjM4My4uMTIwZjVmNiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMzI1LDYgKzMyNSwxMiBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcg
Y2FsbElkLCBjb25zdCBTdHJpbmcmIGpzb25SZXN1bHQpOwogCisjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCisgICAgU3RyaW5nIGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpOworICAgIHZv
aWQgbG9hZEJyZWFrcG9pbnRzKCk7CisgICAgdm9pZCBzYXZlQnJlYWtwb2ludHMoKTsKKyNlbmRp
ZgorCiAgICAgUGFnZSogbV9pbnNwZWN0ZWRQYWdlOwogICAgIEluc3BlY3RvckNsaWVudCogbV9j
bGllbnQ7CiAgICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBtX2luc3BlY3RvckZy
b250ZW5kQ2xpZW50OwpAQCAtMzcxLDYgKzM3Nyw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4gbV9zb3VyY2VJRFRvVVJMOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IG1fc2NyaXB0SURUb0NvbnRlbnQ7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFr
cG9pbnRzPiBtX3N0aWNreUJyZWFrcG9pbnRzOworICAgIGJvb2wgbV9icmVha3BvaW50c0xvYWRl
ZDsKIAogICAgIGJvb2wgbV9wcm9maWxlckVuYWJsZWQ7CiAgICAgYm9vbCBtX3JlY29yZGluZ1Vz
ZXJJbml0aWF0ZWRQcm9maWxlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKaW5k
ZXggNWM3ZDBjOC4uYTcwNWViOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3Bw
CkBAIC00OTksNyArNDk5LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9y
VmFsdWU6OmFzQXJyYXkoKQogICAgIHJldHVybiAwOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBJbnNwZWN0b3JWYWx1ZTo6cmVhZEpTT04oY29uc3QgU3RyaW5nJiBqc29uKQorUGFz
c1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihjb25zdCBT
dHJpbmcmIGpzb24pCiB7CiAgICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0ganNvbi5jaGFyYWN0ZXJz
KCk7CiAgICAgY29uc3QgVUNoYXIqIGVuZCA9IGpzb24uY2hhcmFjdGVycygpICsganNvbi5sZW5n
dGgoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKaW5kZXggYjk5MjBjNC4uMzBiYTk1
YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKQEAgLTczLDcgKzczLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFzT2JqZWN0KCk7
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhc0FycmF5KCk7CiAKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVhZEpTT04oY29uc3QgU3RyaW5n
JiBqc29uKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VKU09O
KGNvbnN0IFN0cmluZyYganNvbik7CiAKICAgICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAgYi9X
ZWJDb3JlL2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5jZTBkMThhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5jcHAKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTY3JpcHRCcmVha3BvaW50LmgiCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBTY3JpcHRCcmVha3BvaW50Ojpzb3VyY2VCcmVha3BvaW50c0Zyb21JbnNw
ZWN0b3JPYmplY3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzLCBTb3Vy
Y2VCcmVha3BvaW50cyogc291cmNlQnJlYWtwb2ludHMpCit7CisgICAgZm9yIChJbnNwZWN0b3JP
YmplY3Q6Oml0ZXJhdG9yIGl0ID0gYnJlYWtwb2ludHMtPmJlZ2luKCk7IGl0ICE9IGJyZWFrcG9p
bnRzLT5lbmQoKTsgKytpdCkgeworICAgICAgICBib29sIG9rOworICAgICAgICBpbnQgbGluZU51
bWJlciA9IGl0LT5maXJzdC50b0ludCgmb2spOworICAgICAgICBpZiAoIW9rKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnQg
PSBpdC0+c2Vjb25kLT5hc09iamVjdCgpOworICAgICAgICBpZiAoIWJyZWFrcG9pbnQpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYm9vbCBlbmFibGVkOworICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IGVuYWJsZWRWYWx1ZSA9IGJyZWFrcG9pbnQtPmdldCgiZW5hYmxlZCIp
OworICAgICAgICBpZiAoIWVuYWJsZWRWYWx1ZSB8fCAhZW5hYmxlZFZhbHVlLT5hc0Jvb2woJmVu
YWJsZWQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFN0cmluZyBjb25kaXRpb247
CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY29uZGl0aW9uVmFsdWUgPSBicmVha3Bv
aW50LT5nZXQoImNvbmRpdGlvbiIpOworICAgICAgICBpZiAoIWNvbmRpdGlvblZhbHVlIHx8ICFj
b25kaXRpb25WYWx1ZS0+YXNTdHJpbmcoJmNvbmRpdGlvbikpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgc291cmNlQnJlYWtwb2ludHMtPnNldChsaW5lTnVtYmVyLCBTY3JpcHRCcmVh
a3BvaW50KGVuYWJsZWQsIGNvbmRpdGlvbikpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IFNjcmlwdEJyZWFrcG9pbnQ6Omluc3BlY3Rvck9iamVjdEZyb21Tb3VyY2VC
cmVha3BvaW50cyhjb25zdCBTb3VyY2VCcmVha3BvaW50cyYgc291cmNlQnJlYWtwb2ludHMpCit7
CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHMgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIGZvciAoU291cmNlQnJlYWtwb2ludHM6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gc291cmNlQnJlYWtwb2ludHMuYmVnaW4oKTsgaXQgIT0gc291cmNlQnJlYWtwb2ludHMu
ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2lu
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJyZWFrcG9pbnQtPnNldEJv
b2woImVuYWJsZWQiLCBpdC0+c2Vjb25kLmVuYWJsZWQpOworICAgICAgICBicmVha3BvaW50LT5z
ZXRTdHJpbmcoImNvbmRpdGlvbiIsIGl0LT5zZWNvbmQuY29uZGl0aW9uKTsKKyAgICAgICAgYnJl
YWtwb2ludHMtPnNldChTdHJpbmc6Om51bWJlcihpdC0+Zmlyc3QpLCBicmVha3BvaW50KTsKKyAg
ICB9CisgICAgcmV0dXJuIGJyZWFrcG9pbnRzLnJlbGVhc2UoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL1Nj
cmlwdEJyZWFrcG9pbnQuaAppbmRleCA4Nzc1OTAxLi5iN2M3YTM3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
U2NyaXB0QnJlYWtwb2ludC5oCkBAIC0zNSw2ICszNSwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIEluc3BlY3Rvck9iamVjdDsKK3N0cnVjdCBTY3JpcHRCcmVha3BvaW50Owor
Cit0eXBlZGVmIEhhc2hNYXA8aW50LCBTY3JpcHRCcmVha3BvaW50PiBTb3VyY2VCcmVha3BvaW50
czsKKwogc3RydWN0IFNjcmlwdEJyZWFrcG9pbnQgewogICAgIFNjcmlwdEJyZWFrcG9pbnQoYm9v
bCBlbmFibGVkLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbikKICAgICAgICAgOiBlbmFibGVkKGVu
YWJsZWQpCkBAIC00OCw5ICs1MywxMCBAQCBzdHJ1Y3QgU2NyaXB0QnJlYWtwb2ludCB7CiAKICAg
ICBib29sIGVuYWJsZWQ7CiAgICAgU3RyaW5nIGNvbmRpdGlvbjsKLX07CiAKLXR5cGVkZWYgSGFz
aE1hcDxpbnQsIFNjcmlwdEJyZWFrcG9pbnQ+IFNvdXJjZUJyZWFrcG9pbnRzOworICAgIHN0YXRp
YyB2b2lkIHNvdXJjZUJyZWFrcG9pbnRzRnJvbUluc3BlY3Rvck9iamVjdChQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4sIFNvdXJjZUJyZWFrcG9pbnRzKik7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBpbnNwZWN0b3JPYmplY3RGcm9tU291cmNlQnJlYWtwb2ludHMo
Y29uc3QgU291cmNlQnJlYWtwb2ludHMmKTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5h
Z2VyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpz
CmluZGV4IDNjY2NjYWMuLjRmNjk2NWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKQEAgLTM4LDYgKzM4LDcgQEAgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKHRoaXMuX29uZVRp
bWVCcmVha3BvaW50KQogICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludEZyb21CYWNr
ZW5kKHRoaXMuX29uZVRpbWVCcmVha3BvaW50KTsKICAgICAgICAgdGhpcy5fb25lVGltZUJyZWFr
cG9pbnQgPSBicmVha3BvaW50OworICAgICAgICAvLyBGSVhNRSg0MDY2OSk6IG9uZSB0aW1lIGJy
ZWFrcG9pbnQgd2lsbCBiZSBwZXJzaXN0ZWQgaW4gaW5zcGVjdG9yIHNldHRpbmdzIGlmIG5vdCBo
aXQuCiAgICAgICAgIHRoaXMuX3NhdmVCcmVha3BvaW50T25CYWNrZW5kKGJyZWFrcG9pbnQpOwog
ICAgIH0sCiAKQEAgLTUxLDE1ICs1MiwxNSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFn
ZXIucHJvdG90eXBlID0gewogCiAgICAgYWRkQnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQs
IHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgdmFy
IGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQodGhpcywgc291cmNlSUQs
IHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKTsKLSAgICAgICAgaWYgKHRoaXMu
X2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBpZiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQgJiYgKHRoaXMuX29uZVRpbWVCcmVha3BvaW50
LmlkID09IGJyZWFrcG9pbnQuaWQpKQotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX29uZVRpbWVC
cmVha3BvaW50OwotICAgICAgICB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSA9IGJy
ZWFrcG9pbnQ7Ci0gICAgICAgIHRoaXMuX3NhdmVCcmVha3BvaW50T25CYWNrZW5kKGJyZWFrcG9p
bnQpOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiYnJlYWtwb2ludC1h
ZGRlZCIsIGJyZWFrcG9pbnQpOwotICAgIH0sICAgIAorICAgICAgICB2YXIgYnJlYWtwb2ludCA9
IHRoaXMuX2FkZEJyZWFrcG9pbnQoc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwg
Y29uZGl0aW9uKTsKKyAgICAgICAgaWYgKGJyZWFrcG9pbnQpCisgICAgICAgICAgICB0aGlzLl9z
YXZlQnJlYWtwb2ludE9uQmFja2VuZChicmVha3BvaW50KTsKKyAgICB9LAorCisgICAgcmVzdG9y
ZWRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVk
LCBjb25kaXRpb24pCisgICAgeworICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50KHNvdXJjZUlE
LCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CisgICAgfSwKIAogICAgIHJl
bW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCiAgICAgewpAQCAtNzgsNyArNzks
NyBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgICAgIGJyZWFrcG9pbnRzLnB1c2godGhpcy5fYnJlYWtwb2ludHNbaWRdKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gYnJlYWtwb2ludHM7Ci0gICAgfSwgICAgCisgICAgfSwKIAog
ICAgIGJyZWFrcG9pbnRzRm9yVVJMOiBmdW5jdGlvbih1cmwpCiAgICAgewpAQCAtODcsNyArODgs
NyBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzW2lkXS51cmwgPT09IHVybCkKICAgICAgICAgICAg
ICAgICBicmVha3BvaW50cy5wdXNoKHRoaXMuX2JyZWFrcG9pbnRzW2lkXSk7CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnRzOyAgICAgICAgCisgICAgICAgIHJldHVybiBicmVh
a3BvaW50czsKICAgICB9LAogCiAgICAgcmVzZXQ6IGZ1bmN0aW9uKCkKQEAgLTk2LDYgKzk3LDE4
IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAg
IGRlbGV0ZSB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsKICAgICB9LAogCisgICAgX2FkZEJyZWFr
cG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRp
dGlvbikKKyAgICB7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5C
cmVha3BvaW50KHRoaXMsIHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRp
dGlvbik7CisgICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHRoaXMuX29uZVRpbWVCcmVha3BvaW50ICYm
ICh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludC5pZCA9PSBicmVha3BvaW50LmlkKSkKKyAgICAgICAg
ICAgIGRlbGV0ZSB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsKKyAgICAgICAgdGhpcy5fYnJlYWtw
b2ludHNbYnJlYWtwb2ludC5pZF0gPSBicmVha3BvaW50OworICAgICAgICB0aGlzLmRpc3BhdGNo
RXZlbnRUb0xpc3RlbmVycygiYnJlYWtwb2ludC1hZGRlZCIsIGJyZWFrcG9pbnQpOworICAgICAg
ICByZXR1cm4gYnJlYWtwb2ludDsKKyAgICB9LAorCiAgICAgX3NhdmVCcmVha3BvaW50T25CYWNr
ZW5kOiBmdW5jdGlvbihicmVha3BvaW50KQogICAgIHsKICAgICAgICAgSW5zcGVjdG9yQmFja2Vu
ZC5zZXRCcmVha3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQubGluZSwgYnJl
YWtwb2ludC5lbmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlvbik7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCBlODEwOGFmLi5jZmU3ZGU5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTEzMzQsNyArMTMzNCw3IEBAIFdl
Ykluc3BlY3Rvci5wYXJzZWRTY3JpcHRTb3VyY2UgPSBmdW5jdGlvbihzb3VyY2VJRCwgc291cmNl
VVJMLCBzb3VyY2UsIHN0YXJ0aW5nCiAKIFdlYkluc3BlY3Rvci5yZXN0b3JlZEJyZWFrcG9pbnQg
PSBmdW5jdGlvbihzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24p
CiB7Ci0gICAgdGhpcy5icmVha3BvaW50TWFuYWdlci5hZGRCcmVha3BvaW50KHNvdXJjZUlELCBz
b3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CisgICAgdGhpcy5icmVha3BvaW50
TWFuYWdlci5yZXN0b3JlZEJyZWFrcG9pbnQoc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5h
YmxlZCwgY29uZGl0aW9uKTsKIH0KIAogV2ViSW5zcGVjdG9yLmZhaWxlZFRvUGFyc2VTY3JpcHRT
b3VyY2UgPSBmdW5jdGlvbihzb3VyY2VVUkwsIHNvdXJjZSwgc3RhcnRpbmdMaW5lLCBlcnJvckxp
bmUsIGVycm9yTWVzc2FnZSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59126</attachid>
            <date>2010-06-18 09:42:39 -0700</date>
            <delta_ts>2010-06-18 09:52:16 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>sticky2.diff</filename>
            <type>text/plain</type>
            <size>23957</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTQ1NTg1MS4uY2Q1OTM0ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxMC0wNi0xNiAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwZXJzaXN0IGJyZWFrcG9pbnRz
IGluIGluc3BlY3RvciBzZXR0aW5ncy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MTkwCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNv
bnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U2Vz
c2lvblNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRp
ZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1v
dmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRp
ZFBhcnNlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmJy
ZWFrcG9pbnRzU2V0dGluZ0tleSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpsb2FkQnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6c2F2ZUJyZWFrcG9pbnRzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTik6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRCcmVh
a3BvaW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRCcmVha3BvaW50Ojpz
b3VyY2VCcmVha3BvaW50c0Zyb21JbnNwZWN0b3JPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0QnJlYWtwb2ludDo6aW5zcGVjdG9yT2JqZWN0RnJvbVNvdXJjZUJyZWFrcG9pbnRzKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLmFkZEJyZWFrcG9pbnQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5yZXN0b3JlZEJyZWFrcG9p
bnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5i
cmVha3BvaW50c0ZvclNvdXJjZUlEKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5wcm90b3R5cGUuYnJlYWtwb2ludHNGb3JVUkwpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludCk6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IucmVzdG9yZWRCcmVha3BvaW50KToKKwogMjAxMC0wNi0xOCAgTWlraGFpbCBOYWdhbm92ICA8
bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWto
YXRza3kuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQppbmRleCA4MDcyNzJmLi5lNzg1NzQ5IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEzNDAsNiArMTM0
MCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggXAogCVdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlclJlc291cmNlLmggXAorCVdlYkNvcmUvaW5z
cGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9TY3JpcHRC
cmVha3BvaW50LmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlzdGVuZXIuaCBc
CiAJV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0R0NFdmVudExpc3RlbmVyLmggXApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA5OWNm
YzdlLi5mMmNkZDY3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTcwMiw2ICsxNzAyLDcgQEAKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyUmVz
b3VyY2UuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuY3BwJywK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oJywKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvU2NyaXB0R0NFdmVudExpc3RlbmVyLmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3Jl
LnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggMzRjOTBhNi4uOTJhNzc1YyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC03
MjEsNiArNzIxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291
cmNlLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIFwKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBcCisgICAgaW5zcGVjdG9yL1NjcmlwdEJy
ZWFrcG9pbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcCBc
CiAgICAgbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwIFwKICAgICBsb2FkZXIvYXJj
aGl2ZS9BcmNoaXZlUmVzb3VyY2UuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCmluZGV4IGQ5YmM5YzEuLjYyNGQ0MzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagpAQCAtNDY4NjUsNiArNDY4NjUsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXFNjcmlwdEJyZWFrcG9pbnQu
Y3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5caW5zcGVjdG9yXFNjcmlwdEJyZWFrcG9pbnQuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZhZjM5YmUuLjAz
MGIyOWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01
ODcsNiArNTg3LDcgQEAKIAkJMUNGNkJFMTQwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmls
dGVyQ29uZGl0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUNGNkJFMTIwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9u
Lm1tICovOyB9OwogCQkxQ0Y2QkUxNTBFOUJCNDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJD
b25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFDRjZCRTEzMEU5QkI0NjcwMDI1RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5oICov
OyB9OwogCQkxQ0ZBRTMyMzBBNkQ2QTNGMDAzMjU5M0QgLyogbGlib2JqYy5keWxpYiBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRkFFMzIyMEE2RDZB
M0YwMDMyNTkzRCAvKiBsaWJvYmpjLmR5bGliICovOyB9OworCQkyMDBCMTkwOTExQzI3N0Q5MDBE
Q0NEM0EgLyogU2NyaXB0QnJlYWtwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyMDBCMTkwODExQzI3N0Q5MDBEQ0NEM0EgLyogU2NyaXB0QnJl
YWtwb2ludC5jcHAgKi87IH07CiAJCTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRX
cmFwcGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyNEY1NEVBQzEwMUZFOTE0
MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjRGNTRFQUExMDFGRTkxNDAwMEFFNzQxIC8qIEFw
cGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCAqLzsgfTsKIAkJMjRGNTRFQUQxMDFGRTkxNDAwMEFFNzQx
IC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25D
YWNoZUhvc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwpAQCAtNjE0
MCw2ICs2MTQxLDcgQEAKIAkJMUNGNkJFMTIwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmls
dGVyQ29uZGl0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
T2JqQ05vZGVGaWx0ZXJDb25kaXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDRjZCRTEzMEU5QkI0NjcwMDI1RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0ZBRTMyMjBBNkQ2QTNGMDAzMjU5M0Qg
LyogbGlib2JqYy5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGlib2JqYy5keWxpYjsg
cGF0aCA9IC91c3IvbGliL2xpYm9iamMuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7
IH07CisJCTIwMEIxOTA4MTFDMjc3RDkwMERDQ0QzQSAvKiBTY3JpcHRCcmVha3BvaW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdEJyZWFrcG9pbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUg
LyogU2NyaXB0V3JhcHBhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cmlwdFdyYXBwYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNEY1NEVBQTEw
MUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGlj
YXRpb25DYWNoZUhvc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwbGlj
YXRpb25DYWNoZUhvc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMjMwLDYg
KzExMjMyLDcgQEAKIAkJCQlGMzc1Q0MwNjExNTBEMzAwMDA4RERCODEgLyogSW5zcGVjdG9yV29y
a2VyUmVzb3VyY2UuaCAqLywKIAkJCQkxQzgxQkEwNTBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNj
cmlwdENhbGxGcmFtZS5pZGwgKi8sCiAJCQkJQkNDNjRGNUYwRENGQjg0RTAwODFFRjNCIC8qIGxv
Y2FsaXplZFN0cmluZ3MuanMgKi8sCisJCQkJMjAwQjE5MDgxMUMyNzdEOTAwRENDRDNBIC8qIFNj
cmlwdEJyZWFrcG9pbnQuY3BwICovLAogCQkJCTdBRkQ0QThBMTEzMUMyNzYwMDM1Qjg4MyAvKiBT
Y3JpcHRCcmVha3BvaW50LmggKi8sCiAJCQkJN0FGRDRGRjMxMTMyNzdCNjAwMzVCODgzIC8qIFNj
cmlwdERlYnVnTGlzdGVuZXIuaCAqLywKIAkJCQk5RkEzN0VFRjExNzJGRDQxMDBDNENENTUgLyog
U2NyaXB0UHJvZmlsZS5pZGwgKi8sCkBAIC0yMTc0OCw2ICsyMTc1MSw3IEBACiAJCQkJOTNGMTlC
MDUwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjAwQjE5MDkxMUMyNzdEOTAwRENDRDNBIC8qIFNj
cmlwdEJyZWFrcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDAxMGZlMjQuLmE4ODk5ZTQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVk
ZSAiSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oIgogI2luY2x1
ZGUgIkluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCkBAIC04Niw2
ICs4Nyw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9NRDUuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KIApAQCAtMTQyLDYgKzE0NCwyNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQg
ZXhwaXJlQ29uc29sZU1lc3NhZ2VzU3RlcCA9IDEwMDsKIAogc3RhdGljIHVuc2lnbmVkIHNfaW5z
cGVjdG9yQ29udHJvbGxlckNvdW50OwogCituYW1lc3BhY2UgeworCitTdHJpbmcgbWQ1QmFzZTE2
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIGRpZ2l0c1td
ID0gIjAxMjM0NTY3ODlhYmNkZWYiOworCisgICAgTUQ1IG1kNTsKKyAgICBtZDUuYWRkQnl0ZXMo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMoKSksIHN0
cmluZy5sZW5ndGgoKSAqIDIpOworICAgIFZlY3Rvcjx1aW50OF90LCAxNj4gZGlnZXN0OworICAg
IG1kNS5jaGVja3N1bShkaWdlc3QpOworCisgICAgVmVjdG9yPGNoYXIsIDMyPiByZXN1bHQ7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgKytpKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
ZGlnaXRzWyhkaWdlc3RbaV0gPj4gNCkgJiAweGZdKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChk
aWdpdHNbZGlnZXN0W2ldICYgMHhmXSk7CisgICAgfQorICAgIHJldHVybiBTdHJpbmcocmVzdWx0
LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7Cit9CisKK30KKwogSW5zcGVjdG9yQ29udHJvbGxlcjo6
SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkK
ICAgICA6IG1faW5zcGVjdGVkUGFnZShwYWdlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQpAQCAt
MTYyLDYgKzE4NSw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIo
UGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAgICAgLCBtX2RlYnVnZ2VyRW5h
YmxlZChmYWxzZSkKICAgICAsIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24oZmFsc2UpCiAgICAg
LCBtX3BhdXNlZFNjcmlwdFN0YXRlKDApCisgICAgLCBtX2JyZWFrcG9pbnRzTG9hZGVkKGZhbHNl
KQogICAgICwgbV9wcm9maWxlckVuYWJsZWQoIVdURl9VU0VfSlNDKQogICAgICwgbV9yZWNvcmRp
bmdVc2VySW5pdGlhdGVkUHJvZmlsZShmYWxzZSkKICAgICAsIG1fY3VycmVudFVzZXJJbml0aWF0
ZWRQcm9maWxlTnVtYmVyKC0xKQpAQCAtMjM0LDcgKzI1OCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2V0U2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZXNzaW9uU2V0dGluZ3MoY29uc3Qg
U3RyaW5nJiBzZXR0aW5nc0pTT04pCiB7Ci0gICAgbV9zZXNzaW9uU2V0dGluZ3MgPSBJbnNwZWN0
b3JWYWx1ZTo6cmVhZEpTT04oc2V0dGluZ3NKU09OKTsKKyAgICBtX3Nlc3Npb25TZXR0aW5ncyA9
IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oc2V0dGluZ3NKU09OKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjppbnNwZWN0KE5vZGUqIG5vZGUpCkBAIC02OTIsNiArNzE2LDggQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBs
b2FkZXIpCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgICAgIG1fc291cmNl
SURUb1VSTC5jbGVhcigpOwogICAgICAgICBtX3NjcmlwdElEVG9Db250ZW50LmNsZWFyKCk7Cisg
ICAgICAgIG1fc3RpY2t5QnJlYWtwb2ludHMuY2xlYXIoKTsKKyAgICAgICAgbV9icmVha3BvaW50
c0xvYWRlZCA9IGZhbHNlOwogI2VuZGlmCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
ICYmIFVTRShKU0MpCiAgICAgICAgIG1fcHJvZmlsZXMuY2xlYXIoKTsKQEAgLTE3MTQsMTAgKzE3
NDAsMTIgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRCcmVha3BvaW50KGNvbnN0IFN0
cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW0KICAgICBpZiAodXJsLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRz
Pjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLmZpbmQodXJsKTsKKyAgICBTdHJp
bmcga2V5ID0gbWQ1QmFzZTE2KHVybCk7CisgICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFr
cG9pbnRzPjo6aXRlcmF0b3IgaXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLmZpbmQoa2V5KTsKICAg
ICBpZiAoaXQgPT0gbV9zdGlja3lCcmVha3BvaW50cy5lbmQoKSkKLSAgICAgICAgaXQgPSBtX3N0
aWNreUJyZWFrcG9pbnRzLnNldCh1cmwsIFNvdXJjZUJyZWFrcG9pbnRzKCkpLmZpcnN0OworICAg
ICAgICBpdCA9IG1fc3RpY2t5QnJlYWtwb2ludHMuc2V0KGtleSwgU291cmNlQnJlYWtwb2ludHMo
KSkuZmlyc3Q7CiAgICAgaXQtPnNlY29uZC5zZXQobGluZU51bWJlciwgYnJlYWtwb2ludCk7Cisg
ICAgc2F2ZUJyZWFrcG9pbnRzKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVt
b3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVy
KQpAQCAtMTcyOCw5ICsxNzU2LDEwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3Zl
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lCiAgICAgaWYg
KHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhhc2hNYXA8U3RyaW5nLCBT
b3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9yIGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5maW5k
KHVybCk7CisgICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPjo6aXRlcmF0b3Ig
aXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLmZpbmQobWQ1QmFzZTE2KHVybCkpOwogICAgIGlmIChp
dCAhPSBtX3N0aWNreUJyZWFrcG9pbnRzLmVuZCgpKQogICAgICAgICBpdC0+c2Vjb25kLnJlbW92
ZShsaW5lTnVtYmVyKTsKKyAgICBzYXZlQnJlYWtwb2ludHMoKTsKIH0KIAogLy8gSmF2YVNjcmlw
dERlYnVnTGlzdGVuZXIgZnVuY3Rpb25zCkBAIC0xNzQzLDcgKzE3NzIsOCBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNv
bnN0IFN0cmluZyYgdQogICAgIGlmICh1cmwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdCA9IG1f
c3RpY2t5QnJlYWtwb2ludHMuZmluZCh1cmwpOworICAgIGxvYWRCcmVha3BvaW50cygpOworICAg
IEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVha3BvaW50cz46Oml0ZXJhdG9yIGl0ID0gbV9zdGlj
a3lCcmVha3BvaW50cy5maW5kKG1kNUJhc2UxNih1cmwpKTsKICAgICBpZiAoaXQgIT0gbV9zdGlj
a3lCcmVha3BvaW50cy5lbmQoKSkgewogICAgICAgICBmb3IgKFNvdXJjZUJyZWFrcG9pbnRzOjpp
dGVyYXRvciBicmVha3BvaW50SXQgPSBpdC0+c2Vjb25kLmJlZ2luKCk7IGJyZWFrcG9pbnRJdCAh
PSBpdC0+c2Vjb25kLmVuZCgpOyArK2JyZWFrcG9pbnRJdCkgewogICAgICAgICAgICAgaWYgKGZp
cnN0TGluZSA8PSBicmVha3BvaW50SXQtPmZpcnN0KSB7CkBAIC0xNzk3LDYgKzE4MjcsNDUgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxv
bmcgY2FsbElkLCBjb25zdCBTdHJpbmcKICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKK1N0cmlu
ZyBJbnNwZWN0b3JDb250cm9sbGVyOjpicmVha3BvaW50c1NldHRpbmdLZXkoKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBrZXlQcmVmaXgsICgiYnJlYWtwb2ludHM6IikpOwor
ICAgIHJldHVybiBrZXlQcmVmaXggKyBtZDVCYXNlMTYobV9tYWluUmVzb3VyY2UtPnJlcXVlc3RV
UkwoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6bG9hZEJyZWFrcG9pbnRzKCkK
K3sKKyAgICBpZiAobV9icmVha3BvaW50c0xvYWRlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
YnJlYWtwb2ludHNMb2FkZWQgPSB0cnVlOworCisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBw
YXJzZWRTZXR0aW5nID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihzZXR0aW5nKGJyZWFrcG9p
bnRzU2V0dGluZ0tleSgpKSk7CisgICAgaWYgKCFwYXJzZWRTZXR0aW5nKQorICAgICAgICByZXR1
cm47CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHMgPSBwYXJzZWRTZXR0
aW5nLT5hc09iamVjdCgpOworICAgIGlmICghYnJlYWtwb2ludHMpCisgICAgICAgIHJldHVybjsK
KyAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaXQgPSBicmVha3BvaW50cy0+YmVn
aW4oKTsgaXQgIT0gYnJlYWtwb2ludHMtPmVuZCgpOyArK2l0KSB7CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzRm9yVVJMID0gaXQtPnNlY29uZC0+YXNPYmplY3Qo
KTsKKyAgICAgICAgaWYgKCFicmVha3BvaW50c0ZvclVSTCkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBz
b3VyY2VCcmVha3BvaW50c0l0ID0gbV9zdGlja3lCcmVha3BvaW50cy5zZXQoaXQtPmZpcnN0LCBT
b3VyY2VCcmVha3BvaW50cygpKS5maXJzdDsKKyAgICAgICAgU2NyaXB0QnJlYWtwb2ludDo6c291
cmNlQnJlYWtwb2ludHNGcm9tSW5zcGVjdG9yT2JqZWN0KGJyZWFrcG9pbnRzRm9yVVJMLCAmc291
cmNlQnJlYWtwb2ludHNJdC0+c2Vjb25kKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2F2ZUJyZWFrcG9pbnRzKCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBicmVha3BvaW50cyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgZm9yIChIYXNo
TWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+OjppdGVyYXRvciBpdChtX3N0aWNreUJyZWFr
cG9pbnRzLmJlZ2luKCkpOyBpdCAhPSBtX3N0aWNreUJyZWFrcG9pbnRzLmVuZCgpOyArK2l0KSB7
CisgICAgICAgIGlmIChpdC0+c2Vjb25kLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50c0ZvclVSTCA9IFNj
cmlwdEJyZWFrcG9pbnQ6Omluc3BlY3Rvck9iamVjdEZyb21Tb3VyY2VCcmVha3BvaW50cyhpdC0+
c2Vjb25kKTsKKyAgICAgICAgYnJlYWtwb2ludHMtPnNldChpdC0+Zmlyc3QsIGJyZWFrcG9pbnRz
Rm9yVVJMKTsKKyAgICB9CisgICAgc2V0U2V0dGluZyhicmVha3BvaW50c1NldHRpbmdLZXkoKSwg
YnJlYWtwb2ludHMtPnRvSlNPTlN0cmluZygpKTsKK30KKwogc3RhdGljIFBhdGggcXVhZFRvUGF0
aChjb25zdCBGbG9hdFF1YWQmIHF1YWQpCiB7CiAgICAgUGF0aCBxdWFkUGF0aDsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCA0YmU0Nzc3Li4yZTU2MTE3IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0zMjksNiArMzI5LDEyIEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBj
YWxsSWQsIGNvbnN0IFN0cmluZyYganNvblJlc3VsdCk7CiAKKyNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKKyAgICBTdHJpbmcgYnJlYWtwb2ludHNTZXR0aW5nS2V5KCk7CisgICAgdm9p
ZCBsb2FkQnJlYWtwb2ludHMoKTsKKyAgICB2b2lkIHNhdmVCcmVha3BvaW50cygpOworI2VuZGlm
CisKICAgICBQYWdlKiBtX2luc3BlY3RlZFBhZ2U7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2Ns
aWVudDsKICAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IG1faW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ7CkBAIC0zNzgsNiArMzg0LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBtX3NvdXJjZUlEVG9VUkw7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gbV9zY3JpcHRJRFRvQ29udGVudDsKICAgICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtw
b2ludHM+IG1fc3RpY2t5QnJlYWtwb2ludHM7CisgICAgYm9vbCBtX2JyZWFrcG9pbnRzTG9hZGVk
OwogCiAgICAgYm9vbCBtX3Byb2ZpbGVyRW5hYmxlZDsKICAgICBib29sIG1fcmVjb3JkaW5nVXNl
ckluaXRpYXRlZFByb2ZpbGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAppbmRl
eCA4MTQxZDlkLi5mOTUxMTZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAK
QEAgLTQ5OSw3ICs0OTksNyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JW
YWx1ZTo6YXNBcnJheSgpCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IEluc3BlY3RvclZhbHVlOjpyZWFkSlNPTihjb25zdCBTdHJpbmcmIGpzb24pCitQYXNz
UmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKGNvbnN0IFN0
cmluZyYganNvbikKIHsKICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBqc29uLmNoYXJhY3RlcnMo
KTsKICAgICBjb25zdCBVQ2hhciogZW5kID0ganNvbi5jaGFyYWN0ZXJzKCkgKyBqc29uLmxlbmd0
aCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAppbmRleCBiOTkyMGM0Li4zMGJhOTVh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApAQCAtNzMsNyArNzMsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXNPYmplY3QoKTsK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFzQXJyYXkoKTsKIAotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZWFkSlNPTihjb25zdCBTdHJpbmcm
IGpzb24pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZUpTT04o
Y29uc3QgU3RyaW5nJiBqc29uKTsKIAogICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmNwcCBiL1dl
YkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmNlMGQxOGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9TY3JpcHRCcmVha3BvaW50LmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNjcmlwdEJyZWFrcG9pbnQuaCIKKworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit2b2lkIFNjcmlwdEJyZWFrcG9pbnQ6OnNvdXJjZUJyZWFrcG9pbnRzRnJvbUluc3Bl
Y3Rvck9iamVjdChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHMsIFNvdXJj
ZUJyZWFrcG9pbnRzKiBzb3VyY2VCcmVha3BvaW50cykKK3sKKyAgICBmb3IgKEluc3BlY3Rvck9i
amVjdDo6aXRlcmF0b3IgaXQgPSBicmVha3BvaW50cy0+YmVnaW4oKTsgaXQgIT0gYnJlYWtwb2lu
dHMtPmVuZCgpOyArK2l0KSB7CisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIGludCBsaW5lTnVt
YmVyID0gaXQtPmZpcnN0LnRvSW50KCZvayk7CisgICAgICAgIGlmICghb2spCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludCA9
IGl0LT5zZWNvbmQtPmFzT2JqZWN0KCk7CisgICAgICAgIGlmICghYnJlYWtwb2ludCkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBib29sIGVuYWJsZWQ7CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gZW5hYmxlZFZhbHVlID0gYnJlYWtwb2ludC0+Z2V0KCJlbmFibGVkIik7
CisgICAgICAgIGlmICghZW5hYmxlZFZhbHVlIHx8ICFlbmFibGVkVmFsdWUtPmFzQm9vbCgmZW5h
YmxlZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgU3RyaW5nIGNvbmRpdGlvbjsK
KyAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjb25kaXRpb25WYWx1ZSA9IGJyZWFrcG9p
bnQtPmdldCgiY29uZGl0aW9uIik7CisgICAgICAgIGlmICghY29uZGl0aW9uVmFsdWUgfHwgIWNv
bmRpdGlvblZhbHVlLT5hc1N0cmluZygmY29uZGl0aW9uKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBzb3VyY2VCcmVha3BvaW50cy0+c2V0KGxpbmVOdW1iZXIsIFNjcmlwdEJyZWFr
cG9pbnQoZW5hYmxlZCwgY29uZGl0aW9uKSk7CisgICAgfQorfQorCitQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gU2NyaXB0QnJlYWtwb2ludDo6aW5zcGVjdG9yT2JqZWN0RnJvbVNvdXJjZUJy
ZWFrcG9pbnRzKGNvbnN0IFNvdXJjZUJyZWFrcG9pbnRzJiBzb3VyY2VCcmVha3BvaW50cykKK3sK
KyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cyA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgZm9yIChTb3VyY2VCcmVha3BvaW50czo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBzb3VyY2VCcmVha3BvaW50cy5iZWdpbigpOyBpdCAhPSBzb3VyY2VCcmVha3BvaW50cy5l
bmQoKTsgKytpdCkgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYnJlYWtwb2ludC0+c2V0Qm9v
bCgiZW5hYmxlZCIsIGl0LT5zZWNvbmQuZW5hYmxlZCk7CisgICAgICAgIGJyZWFrcG9pbnQtPnNl
dFN0cmluZygiY29uZGl0aW9uIiwgaXQtPnNlY29uZC5jb25kaXRpb24pOworICAgICAgICBicmVh
a3BvaW50cy0+c2V0KFN0cmluZzo6bnVtYmVyKGl0LT5maXJzdCksIGJyZWFrcG9pbnQpOworICAg
IH0KKyAgICByZXR1cm4gYnJlYWtwb2ludHMucmVsZWFzZSgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvU2Ny
aXB0QnJlYWtwb2ludC5oCmluZGV4IDg3NzU5MDEuLmI3YzdhMzcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9T
Y3JpcHRCcmVha3BvaW50LmgKQEAgLTM1LDYgKzM1LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgSW5zcGVjdG9yT2JqZWN0Oworc3RydWN0IFNjcmlwdEJyZWFrcG9pbnQ7CisK
K3R5cGVkZWYgSGFzaE1hcDxpbnQsIFNjcmlwdEJyZWFrcG9pbnQ+IFNvdXJjZUJyZWFrcG9pbnRz
OworCiBzdHJ1Y3QgU2NyaXB0QnJlYWtwb2ludCB7CiAgICAgU2NyaXB0QnJlYWtwb2ludChib29s
IGVuYWJsZWQsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uKQogICAgICAgICA6IGVuYWJsZWQoZW5h
YmxlZCkKQEAgLTQ4LDkgKzUzLDEwIEBAIHN0cnVjdCBTY3JpcHRCcmVha3BvaW50IHsKIAogICAg
IGJvb2wgZW5hYmxlZDsKICAgICBTdHJpbmcgY29uZGl0aW9uOwotfTsKIAotdHlwZWRlZiBIYXNo
TWFwPGludCwgU2NyaXB0QnJlYWtwb2ludD4gU291cmNlQnJlYWtwb2ludHM7CisgICAgc3RhdGlj
IHZvaWQgc291cmNlQnJlYWtwb2ludHNGcm9tSW5zcGVjdG9yT2JqZWN0KFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiwgU291cmNlQnJlYWtwb2ludHMqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGluc3BlY3Rvck9iamVjdEZyb21Tb3VyY2VCcmVha3BvaW50cyhj
b25zdCBTb3VyY2VCcmVha3BvaW50cyYpOworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFn
ZXIuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMK
aW5kZXggM2NjY2NhYy4uNGY2OTY1YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwpAQCAtMzgsNiArMzgsNyBAQCBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5fb25lVGlt
ZUJyZWFrcG9pbnQpCiAgICAgICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RnJvbUJhY2tl
bmQodGhpcy5fb25lVGltZUJyZWFrcG9pbnQpOwogICAgICAgICB0aGlzLl9vbmVUaW1lQnJlYWtw
b2ludCA9IGJyZWFrcG9pbnQ7CisgICAgICAgIC8vIEZJWE1FKDQwNjY5KTogb25lIHRpbWUgYnJl
YWtwb2ludCB3aWxsIGJlIHBlcnNpc3RlZCBpbiBpbnNwZWN0b3Igc2V0dGluZ3MgaWYgbm90IGhp
dC4KICAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRPbkJhY2tlbmQoYnJlYWtwb2ludCk7CiAg
ICAgfSwKIApAQCAtNTEsMTUgKzUyLDE1IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdl
ci5wcm90b3R5cGUgPSB7CiAKICAgICBhZGRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwg
c291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pCiAgICAgewotICAgICAgICB2YXIg
YnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCh0aGlzLCBzb3VyY2VJRCwg
c291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pOwotICAgICAgICBpZiAodGhpcy5f
YnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF0pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGlmICh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludCAmJiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQu
aWQgPT0gYnJlYWtwb2ludC5pZCkpCi0gICAgICAgICAgICBkZWxldGUgdGhpcy5fb25lVGltZUJy
ZWFrcG9pbnQ7Ci0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdID0gYnJl
YWtwb2ludDsKLSAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRPbkJhY2tlbmQoYnJlYWtwb2lu
dCk7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJicmVha3BvaW50LWFk
ZGVkIiwgYnJlYWtwb2ludCk7Ci0gICAgfSwgICAgCisgICAgICAgIHZhciBicmVha3BvaW50ID0g
dGhpcy5fYWRkQnJlYWtwb2ludChzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBj
b25kaXRpb24pOworICAgICAgICBpZiAoYnJlYWtwb2ludCkKKyAgICAgICAgICAgIHRoaXMuX3Nh
dmVCcmVha3BvaW50T25CYWNrZW5kKGJyZWFrcG9pbnQpOworICAgIH0sCisKKyAgICByZXN0b3Jl
ZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQs
IGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnQoc291cmNlSUQs
IHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKTsKKyAgICB9LAogCiAgICAgcmVt
b3ZlQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7CkBAIC03OCw3ICs3OSw3
IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICAgICAgYnJlYWtwb2ludHMucHVzaCh0aGlzLl9icmVha3BvaW50c1tpZF0pOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBicmVha3BvaW50czsKLSAgICB9LCAgICAKKyAgICB9LAogCiAg
ICAgYnJlYWtwb2ludHNGb3JVUkw6IGZ1bmN0aW9uKHVybCkKICAgICB7CkBAIC04Nyw3ICs4OCw3
IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHNbaWRdLnVybCA9PT0gdXJsKQogICAgICAgICAgICAg
ICAgIGJyZWFrcG9pbnRzLnB1c2godGhpcy5fYnJlYWtwb2ludHNbaWRdKTsKICAgICAgICAgfQot
ICAgICAgICByZXR1cm4gYnJlYWtwb2ludHM7ICAgICAgICAKKyAgICAgICAgcmV0dXJuIGJyZWFr
cG9pbnRzOwogICAgIH0sCiAKICAgICByZXNldDogZnVuY3Rpb24oKQpAQCAtOTYsNiArOTcsMTgg
QEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ZGVsZXRlIHRoaXMuX29uZVRpbWVCcmVha3BvaW50OwogICAgIH0sCiAKKyAgICBfYWRkQnJlYWtw
b2ludDogZnVuY3Rpb24oc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0
aW9uKQorICAgIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnQodGhpcywgc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0
aW9uKTsKKyAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQgJiYg
KHRoaXMuX29uZVRpbWVCcmVha3BvaW50LmlkID09IGJyZWFrcG9pbnQuaWQpKQorICAgICAgICAg
ICAgZGVsZXRlIHRoaXMuX29uZVRpbWVCcmVha3BvaW50OworICAgICAgICB0aGlzLl9icmVha3Bv
aW50c1ticmVha3BvaW50LmlkXSA9IGJyZWFrcG9pbnQ7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKCJicmVha3BvaW50LWFkZGVkIiwgYnJlYWtwb2ludCk7CisgICAgICAg
IHJldHVybiBicmVha3BvaW50OworICAgIH0sCisKICAgICBfc2F2ZUJyZWFrcG9pbnRPbkJhY2tl
bmQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCiAgICAgewogICAgICAgICBJbnNwZWN0b3JCYWNrZW5k
LnNldEJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5lLCBicmVh
a3BvaW50LmVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IDU0M2JhMzIuLjlmNTAyNDIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtMTM0NCw3ICsxMzQ0LDcgQEAgV2Vi
SW5zcGVjdG9yLnBhcnNlZFNjcmlwdFNvdXJjZSA9IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VV
UkwsIHNvdXJjZSwgc3RhcnRpbmcKIAogV2ViSW5zcGVjdG9yLnJlc3RvcmVkQnJlYWtwb2ludCA9
IGZ1bmN0aW9uKHNvdXJjZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikK
IHsKLSAgICB0aGlzLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEJyZWFrcG9pbnQoc291cmNlSUQsIHNv
dXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKTsKKyAgICB0aGlzLmJyZWFrcG9pbnRN
YW5hZ2VyLnJlc3RvcmVkQnJlYWtwb2ludChzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFi
bGVkLCBjb25kaXRpb24pOwogfQogCiBXZWJJbnNwZWN0b3IuZmFpbGVkVG9QYXJzZVNjcmlwdFNv
dXJjZSA9IGZ1bmN0aW9uKHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xpbmUsIGVycm9yTGlu
ZSwgZXJyb3JNZXNzYWdlKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>