<?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>37112</bug_id>
          
          <creation_ts>2010-04-05 14:11:13 -0700</creation_ts>
          <short_desc>aria-liveregion-notifications.html fails on leopard release bot</short_desc>
          <delta_ts>2010-04-21 18:38:07 -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>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="chris fleizach">cfleizach</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>208686</commentid>
    <comment_count>0</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-05 14:11:13 -0700</bug_when>
    <thetext>For some reason, adding new tests to accessibility causes this test to fail on the leopard release bot. 
disabling this test on leopard until my investigation turns up the reason</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208695</commentid>
    <comment_count>1</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-05 14:17:31 -0700</bug_when>
    <thetext>disabled for now
http://trac.webkit.org/changeset/57094</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208729</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-05 15:14:02 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/57094 might have broken Tiger Intel Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208731</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-05 15:16:09 -0700</bug_when>
    <thetext>&gt; http://trac.webkit.org/changeset/57094 might have broken Tiger Intel Release

This is svg/custom/getsvgdocument.html, which has recently become very flaky. 
I don&apos;t think it&apos;s related to your change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208748</commentid>
    <comment_count>4</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-05 15:41:16 -0700</bug_when>
    <thetext>yea that would be bad if changing a skip list causes a test to fail</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209403</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-06 19:30:00 -0700</bug_when>
    <thetext>This test failed on Snow Leopard again just now:
http://build.webkit.org/results/SnowLeopard%20Intel%20Leaks/r57184%20(5687)/platform/mac/accessibility/aria-liveregions-notifications-diffs.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209420</commentid>
    <comment_count>6</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-06 20:32:13 -0700</bug_when>
    <thetext>this is the active bug. will work on a less flaky test tonite</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209421</commentid>
    <comment_count>7</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-06 20:35:02 -0700</bug_when>
    <thetext>eric, was that test failure on a bot. i don&apos;t see in the current build logs

(In reply to comment #6)
&gt; this is the active bug. will work on a less flaky test tonite</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209424</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-06 20:44:48 -0700</bug_when>
    <thetext>Yes, the test failure was on the Snow Leopard build bot, linked from http://build.webkit.org/console or the link above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209486</commentid>
    <comment_count>9</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-06 23:49:30 -0700</bug_when>
    <thetext>looks like its intermittently failing on SL. My idea is to separate this test into its four parts and test each individually. that way, if something continues to fail, at least I&apos;ll know where its happening</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209493</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-07 00:01:54 -0700</bug_when>
    <thetext>Two questions:

1) Did you make any changes in your patch since the last time you landed it and cause this same test to become flaky?

2) Why did you skip this test on Leopard?  There has been a lot of discussion on webkit-dev recently about how skipping tests is not the correct solution for dealing with flakiness.

http://trac.webkit.org/changeset/57094</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209497</commentid>
    <comment_count>11</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-07 00:12:47 -0700</bug_when>
    <thetext>the test also started failing with another patch, completely unrelated. it then seemed to me that adding any more accessibility tests will cause this test to start failing intermittently. that tells me the test needs to be deconstructed so i can understand whats failing. until that time, i disabled the test on leopard so the precious bots wouldn&apos;t be red, and i opened this bug which i am actively investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209498</commentid>
    <comment_count>12</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-07 00:14:02 -0700</bug_when>
    <thetext>i also don&apos;t want to hold up fixing other important bugs because of a test thats failing because of a DRT implementation most likely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209502</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-07 00:21:26 -0700</bug_when>
    <thetext>Thanks for working on fixing flaky tests.  I couldn&apos;t find an explanation of
your thought process so it&apos;s difficult to understand the approach your&apos;re
taking.  Hopefully you&apos;ll be able to fix the flakiness soon.

Sometimes disabling a test is the best way to move forward with repairing it. 
However, our current approach is to try fixing the test without disabling it. 
If a test is preventing you from moving forward with other patches, that&apos;s a
good sign that fixing the test is relatively higher priority.  We&apos;ve seen many
examples of surprisingly subtle interactions and regressions that appeared to
manifest themselves as increased flakiness in a test.

Instead of skipping a test in an unreviewed patch, it might be preferable in
the future to discuss the issue with the folks who&apos;ve shown interest in the
issue in the past, ideally getting one of them to review your patch before
landing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209503</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-07 00:24:36 -0700</bug_when>
    <thetext>To add more context for where I&apos;m coming from, yesterday we had an example of a quite important bug (a crash on the Facebook home page) that caused increased flakiness in a test on Tiger.  The change and the failure appeared entirely unrelated, but after some careful investigation, jamesr determined that the change actually caused a real regression involving when the load event was fired.  The interaction was quite complex and involved some re-entrancy issues in attaching elements to the DOM tree.  Had we just skipped the test and investigated later, it&apos;s entirely likely that we would have shipped the regression in our zeal to make Facebook&apos;s home page not crash.  After understanding the issue, jamesr was able to produce a correct version of the patch that fixed the crash and avoided the regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209505</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-07 00:25:52 -0700</bug_when>
    <thetext>Now, I don&apos;t know whether we&apos;re seeing a similar case here or whether the interaction is entirely the fault of the test.  However, we only know these things after investigating the situation carefully, which I&apos;m glad you&apos;re now doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209517</commentid>
    <comment_count>16</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-07 00:58:26 -0700</bug_when>
    <thetext>The relative instability of the drt mechanism for testing accessibility notifications on the mac has been known for a while. We&apos;ve seen flakiness before but it&apos;s gone away on it&apos;s own. It&apos;s most likely due to storing a js callback as a static and then having objects not be deallocated by drt. I understand the desire not to disable a test but it became clear to me after twounrelated patches went in that both caused issues that something else was at play. I&apos;m working on rewriting the current mechanism. Unfortunately comcast decided to shut down and go home so I won&apos;t be able to post any patches tonite</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209672</commentid>
    <comment_count>17</comment_count>
      <attachid>52742</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-07 09:25:49 -0700</bug_when>
    <thetext>Created attachment 52742
patch

I&apos;ve redone the mechanism for how accessibility notifications are handled.

Now, DRT will set a flag that tells WebCore it should send out a NSNotification. Now any DRT object can just listen for that notification when they want to and stop when they dont.
The previous method stored a static function pointer in WebCore that it called back, which I suspect was causing some race condition flakiness

I also required that tests using this mechanism inform DRT when they are done listening, which allows for easier cleanup.

I am also adding four tests which are basically the aria-liveregion-notifications.html broken into its components. In my testing, having these four tests
run really stressed the system and brought out bugs, so I&apos;d like to leave them there to see if they help bring out bugs on these other platforms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209673</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-07 09:32:15 -0700</bug_when>
    <thetext>I would review you patch except I don&apos;t understand Objective-C.  How does the NSNotificationCenter work?  It calls back the specified function from the main event loop?  I ask because we have a similar desire to call back into tests when console messages get logged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209691</commentid>
    <comment_count>19</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-07 10:01:20 -0700</bug_when>
    <thetext>notifications from NSNotificationCenter are on the same thread as the thing that posts them. In Accessibility&apos;s case, this is the main thread on the Mac. This seems like a better, more durable, way of calling back from WebCore to DRT in my opinion. Definitely, better than have a static function pointer


(In reply to comment #18)
&gt; I would review you patch except I don&apos;t understand Objective-C.  How does the
&gt; NSNotificationCenter work?  It calls back the specified function from the main
&gt; event loop?  I ask because we have a similar desire to call back into tests
&gt; when console messages get logged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209694</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-07 10:10:03 -0700</bug_when>
    <thetext>Attachment 52742 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/1666209</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209699</commentid>
    <comment_count>21</comment_count>
      <attachid>52746</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-07 10:19:46 -0700</bug_when>
    <thetext>Created attachment 52746
patch

forgot to add the new DRT methods to GTK and win</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210873</commentid>
    <comment_count>22</comment_count>
      <attachid>52746</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-09 13:23:57 -0700</bug_when>
    <thetext>Comment on attachment 52746
patch

I&apos;m not sure the memory management is right in this change.  Why are either of these weak pointers safe:

0     id m_platformElement;
 91     JSObjectRef m_notificationFunctionCallback;

I&apos;m glad you documented this:
 105     // This is to avoid any race conditions between tests turning this flag on and off. Instead
I agree with your choice to leave it on.

Why call it &quot;notification&quot; if it&apos;s really the &quot;notificationName&quot;?
 2670         NSDictionary* userInfo = [NSDictionary dictionaryWithObjectsAndKeys:notification, @&quot;notification&quot;, nil];

Are we guaranteed that the entire AccessibilityUIElement tree will be destroyed when the page navigates?  Otherwise I worry about results possibly bleeding into other tests.

0     // Already added once.
 831     if (m_notificationHandler)
 832         return false;
This seems like a programmer error, we should ASSERT or log or something here, no?

We should document (comment) the memory management for these members:
180182     PlatformUIElement m_element;
181      JSObjectRef m_notificationFunctionCallback;
 183     void* m_notificationHandler;

Otherwise I think this is OK.  I didn&apos;t look at the tests very closely.  I&apos;m concerned about the various memory management issues listed above, so r-.

I&apos;m feeling mostly better now, so reviews should be much quicker now that I&quot;m not sleeping most of the day. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211111</commentid>
    <comment_count>23</comment_count>
      <attachid>53032</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-09 23:10:39 -0700</bug_when>
    <thetext>Created attachment 53032
patch

this change addresses comments eric made.

Two issues he raised
1) How are the ivars memory managed in AccessibilityUIElement.h. 
    m_platformElement is assigned/retained/released in platform specific code. That has always been that way.
    I&apos;m adding (for mac only, unless others need it), an &quot;id m_notificationHandler&quot;. This will also be assigned/retained/released by the platform
    specific implementation. 

2) Will AXUIElements be released when the page exits? The answer to that seems no, which is the reason for this bug. It seems bleed over was causing
the flakiness before. My changes address this by requiring layout test writers (on the mac) to add and remove notification listeners within the test. If the notification listen is not removed, then DRT will assert. Forcing adding and removal
ensures that we don&apos;t get bleed over of notifications at least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211166</commentid>
    <comment_count>24</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-10 11:25:18 -0700</bug_when>
    <thetext>&gt; My changes address this by requiring layout test writers
&gt; (on the mac) to add and remove notification listeners within the test.

This is not how we usually handle this - even if there is a fatal error running a test (such as a JS parsing error), subsequent tests shouldn&apos;t be affected. See code in runTest(), which resets environment to consistent state before each test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211370</commentid>
    <comment_count>25</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-11 10:04:38 -0700</bug_when>
    <thetext>In the implementation I am replacing,  subsequent tests could be affected. However, in the new method, subsequent tests should NOT be affected even if the user does not remove the notification listener, because the new method does not use a function callback stored as a static, it just sends out a NSNotification. 

However, it seems good practice to remove notification listeners explicitly, much like NSNotificationCenter requires the developer to removeObserver. That allows for a tighter cleanup path, hence the assertion that the developer removes the notification listener before the Accessibility object disappears.

&gt; a test (such as a JS parsing error), subsequent tests shouldn&apos;t be affected.
&gt; See code in runTest(), which resets environment to consistent state before each
&gt; test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211400</commentid>
    <comment_count>26</comment_count>
      <attachid>53032</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-11 12:37:51 -0700</bug_when>
    <thetext>Comment on attachment 53032
patch

From what I see, it appears that one of subsequent tests may mysteriously quit during garbage collection (since you used assert and not ASSERT, there won&apos;t even be a stack trace).

Asserting in addNotificationListener() also seems wrong - the function needs to be renamed to something like setNotificationListener() if it doesn&apos;t allow &quot;adding&quot; more than one.

Requiring tests to clean up after themselves is really not what we do. In fact, I made the same mistake with some plug-in test methods a few week ago, and got bitten by it almost immediately! It was really confusing.

More comments, some of these minot nitpicks:

+static BOOL AXShouldRepostNotifications = NO;

Old code also had this issue, but variable names should start with lower case letter per coding style guidelines. I usually advise to not initialize static variables explicitly - since they are guaranteed to start with zero, explicit initialization is just visual noise. It&apos;s almost the same as initializing RefPtr members in constructors with zero.

+    // The PlatformUIElement should be retained.
     PlatformUIElement m_element;

I don&apos;t believe calling retain is sufficient. It&apos;s a no-op if garbage collection is enabled, and I don&apos;t think that Objective-C garbage collection looks inside C++ objects. So, it should use CFRetain/CFRelease.

It&apos;s a shame we can&apos;t use RetainPtr here.

+#if PLATFORM(MAC)
+#ifdef __OBJC__
+    id m_notificationHandler;
+#endif 
+#endif

This is wrong - the size of the object will be smaller if the header included in a C/C++ file. The correct way to handle this is how PlatformUIElement is handled.

+    // Once when object starts requesting notifications, its on for the duration of the program.

Typos: &quot;once when&quot;, and &quot;its&quot; instead of &quot;it&apos;s&quot;.

+    // This is to avoid any race conditions between tests turning this flag on and off. Instead

I&apos;m not sure if I understand what race conditions exist here. Aren&apos;t notifications delivered synchronously?

+    NSString* notificationName = [[notification userInfo] objectForKey:@&quot;notificationName&quot;];

We still position stars away from ObjC class names, so this should be &quot;NSString *notificationName&quot;. Same issue elsewhere.

+    JSObjectCallAsFunction([mainFrame globalContext], m_notificationFunctionCallback, NULL, 1, &amp;argument, NULL);

0, not NULL.

+- (void)setCallback:(JSObjectRef)callback
+{
+    m_notificationFunctionCallback = callback;
+}

m_notificationFunctionCallback doesn&apos;t seem to be GC protected anywhere. This is not a practical issue for existing tests, as the callback is protected by the virtue of being defined on global object, but it would be a problem for JavaScript code like this:

liveRegion.addNotificationListener(function() { alert(0) } );
// Force garbage collection
// Do something that dispatches the notification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212701</commentid>
    <comment_count>27</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-14 19:42:51 -0700</bug_when>
    <thetext>I fear we may have scared Chris off.
platform/mac/accessibility/aria-liveregions-notifications.html
is still a high-frequency failure for both Leopard and Snow Leopard builders. :(  Failed twice on the commit-queue today and few times on SL today:
http://build.webkit.org/results/SnowLeopard%20Intel%20Leaks/r57622%20(5990)/results.html
http://build.webkit.org/results/SnowLeopard%20Intel%20Leaks/r57595%20(5974)/results.html
http://build.webkit.org/results/SnowLeopard%20Intel%20Leaks/r57589%20(5970)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212703</commentid>
    <comment_count>28</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-14 19:46:26 -0700</bug_when>
    <thetext>That would be part of it. At the end of the day, none of this code is used in production. It only exists to test that notifications are generated due to specific events on the mac platform. The old method did not reliably capture that because its implementation was based on some incorrect assumptions. The new one (hopefully) does not make those same mistakes

(In reply to comment #27)
&gt; I fear we may have scared Chris off.
&gt; platform/mac/accessibility/aria-liveregions-notifications.html
&gt; is still a high-frequency failure for both Leopard and Snow Leopard builders.
&gt; :(  Failed twice on the commit-queue today and few times on SL today:
&gt; http://build.webkit.org/results/SnowLeopard%20Intel%20Leaks/r57622%20(5990)/results.html
&gt; http://build.webkit.org/results/SnowLeopard%20Intel%20Leaks/r57595%20(5974)/results.html
&gt; http://build.webkit.org/results/SnowLeopard%20Intel%20Leaks/r57589%20(5970)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213119</commentid>
    <comment_count>29</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-15 17:06:23 -0700</bug_when>
    <thetext>I&apos;m sorry if my comments came across as overly harsh. Most of them are indeed minor nitpicks.

I still think it&apos;s worth it to maintain coding style and behavior conventions we have, because hackability is equally important for WebKit code and for tools code. One of the reasons to avoid issues like the GC one I pointed out last is that DRT serves as one of examples of how to embed WebKit, so developers study it to learn how we do that, or just copy/paste its code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213142</commentid>
    <comment_count>30</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-15 17:55:51 -0700</bug_when>
    <thetext>I don&apos;t mind the nits. Some of the other things are hard to deal with. 

(In reply to comment #26)
&gt; (From update of attachment 53032 [details])
&gt; From what I see, it appears that one of subsequent tests may mysteriously quit
&gt; during garbage collection (since you used assert and not ASSERT, there won&apos;t
&gt; even be a stack trace).

I can change to ASSERT. When I searched through DRT for assert, the lowercase version was used quite often, so I used that. Also when i was testing that assert, it always gave me the backtrace..

&gt; 
&gt; Requiring tests to clean up after themselves is really not what we do. In fact,
&gt; I made the same mistake with some plug-in test methods a few week ago, and got
&gt; bitten by it almost immediately! It was really confusing.
&gt; 

I don&apos;t see why its a problem to require that tests be written correctly. With the asserts I put in the test writer will experience problems immediately. Given that I can&apos;t be assured that an AX element will be deallocated when the page deallocates, its risky to have a handler still hanging around.


&gt; More comments, some of these minot nitpicks:
&gt; 
&gt; +static BOOL AXShouldRepostNotifications = NO;
&gt; 
&gt; Old code also had this issue, but variable names should start with lower case
&gt; letter per coding style guidelines. I usually advise to not initialize static
&gt; variables explicitly - since they are guaranteed to start with zero, explicit
&gt; initialization is just visual noise. It&apos;s almost the same as initializing
&gt; RefPtr members in constructors with zero.
&gt; 

I would argue that clarity of what the starting value here is more important that visual noise. I also see TONS of usage of setting member pointers to zero in constructors throughout webkit


&gt; +    // The PlatformUIElement should be retained.
&gt;      PlatformUIElement m_element;
&gt; 
&gt; I don&apos;t believe calling retain is sufficient. It&apos;s a no-op if garbage
&gt; collection is enabled, and I don&apos;t think that Objective-C garbage collection
&gt; looks inside C++ objects. So, it should use CFRetain/CFRelease.
&gt; 
&gt; It&apos;s a shame we can&apos;t use RetainPtr here.

I am only working with the Mac side, so this is not a C++ object. THe platformUIElement code has been here since AX was added to DRT. I&apos;m not about to change that. I just added a comment because Eric asked for one. On the mac it&apos;s an ObjC obj of type id.

&gt; 
&gt; +    // This is to avoid any race conditions between tests turning this flag on
&gt; and off. Instead
&gt; 
&gt; I&apos;m not sure if I understand what race conditions exist here. Aren&apos;t
&gt; notifications delivered synchronously?
&gt;

That flag is to control whether WebCore will send notifications. If i have two tests running in parallel, both try turning on, then one turns off while the other expects it to be on, things will fail. That&apos;s why once the flag is turned on it should stay on.

 
&gt; +    NSString* notificationName = [[notification userInfo]
&gt; objectForKey:@&quot;notificationName&quot;];
&gt; 
&gt; We still position stars away from ObjC class names, so this should be &quot;NSString
&gt; *notificationName&quot;. Same issue elsewhere.
&gt; 

This business about stars changing location based on what type of object you&apos;re using is madness. I&apos;ll do it, but there&apos;s a ton of code that does not do it, and it&apos;s nearly impossible to keep track of what to do.


&gt; +    JSObjectCallAsFunction([mainFrame globalContext],
&gt; m_notificationFunctionCallback, NULL, 1, &amp;argument, NULL);
&gt; 
&gt; 0, not NULL.
&gt; 
&gt; +- (void)setCallback:(JSObjectRef)callback
&gt; +{
&gt; +    m_notificationFunctionCallback = callback;
&gt; +}
&gt; 
&gt; m_notificationFunctionCallback doesn&apos;t seem to be GC protected anywhere. This
&gt; is not a practical issue for existing tests, as the callback is protected by
&gt; the virtue of being defined on global object, but it would be a problem for
&gt; JavaScript code like this:
&gt; 
&gt; liveRegion.addNotificationListener(function() { alert(0) } );
&gt; // Force garbage collection
&gt; // Do something that dispatches the notification.

A layout test writer would have no reason to do that. However, I do want memory to be managed correctly. Do I just need to put in the header

RefPtr&lt;JSObjectRef&gt; m_notificationFunctionCallback;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213171</commentid>
    <comment_count>31</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-15 19:12:33 -0700</bug_when>
    <thetext>&gt; I don&apos;t see why its a problem to require that tests be written correctly.

This just comes from past experience. Today, I spent half a day investigating fallback from a change where automatic cleanup in DRT wasn&apos;t happening correctly - there was a test that just had to finish in an inconsistent state to test cleanup paths in WebKit.

I don&apos;t have a big problem with landing this part as is for now. It can be revisited later if it becomes an annoyance.

&gt; I am only working with the Mac side, so this is not a C++ object.

I was talking about AccessibilityUIElement, which is a C++ object, so one needs to use CFRetain/CFRelease for its ObjC data members, and not retain/release.

&gt; If i have two tests running in parallel

There can never be two tests running in parallel in the same process - a lot of code in DumpRenderTree assumes that there is only one test running. Or would it be a problem even with two separate DumpRenderTree processes? In the latter case, we can have multiple tests running at once, indeed.

&gt; This business about stars changing location based on what type of object you&apos;re
&gt; using is madness.

I couldn&apos;t agree more! But we have to follow the coding style guidelines until we can fix them.

&gt; RefPtr&lt;JSObjectRef&gt; m_notificationFunctionCallback;

The APIs to use are JSValueProtect/JSValueUnprotect. Unfortunately, there is no smart pointer that would do that (since JavaScriptCore API is pure C).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214886</commentid>
    <comment_count>32</comment_count>
      <attachid>53868</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-20 12:51:05 -0700</bug_when>
    <thetext>Created attachment 53868
patch

This implements most of what &quot;ap&quot; was asking for. modulus the other issues I brought up in my subsequent reply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214906</commentid>
    <comment_count>33</comment_count>
      <attachid>53868</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-20 13:16:55 -0700</bug_when>
    <thetext>Comment on attachment 53868
patch

+        * Scripts/prepare-ChangeLog:

This doesn&apos;t seem intentional. Actual prepare-ChangeLog changes are also in this patch.

+- (void)setCallback:(JSObjectRef)callback
+{
+    if (!callback)
+        return;
+    
+    m_notificationFunctionCallback = callback;
+    JSValueProtect([mainFrame globalContext], m_notificationFunctionCallback);
+}

My understanding is that you intentionally don&apos;t unprotect m_notificationFunctionCallback, because addNotificationListener() can&apos;t be called twice. I think it&apos;s worth an assertion or a comment here, because this is not a usual setter pattern.

+    // Mac programmers should not be adding more than one notification listener per element.
+    // Other platforms may be different.

As an aside, is there any chance of having cross-platform accessibility tests? I do not know if that even makes sense, but we&apos;ve been able to make some cross-platform tests even for inline text input.

You can consider adding a FIXME about m_element and m_notificationHandler needing CFRetain/CFRelease. It would be good to make DRT work with garbage collected ObjC one day.

Also, I still don&apos;t understand what the race condition is here (see comment 31).

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214987</commentid>
    <comment_count>34</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-20 15:09:58 -0700</bug_when>
    <thetext>
 
(In reply to comment #33)
&gt; (From update of attachment 53868 [details])
&gt; +        * Scripts/prepare-ChangeLog:
&gt; 
&gt; This doesn&apos;t seem intentional. Actual prepare-ChangeLog changes are also in
&gt; this patch.
&gt; 

Did not mean to add that. Will remove

&gt; +- (void)setCallback:(JSObjectRef)callback
&gt; +{
&gt; +    if (!callback)
&gt; +        return;
&gt; +    
&gt; +    m_notificationFunctionCallback = callback;
&gt; +    JSValueProtect([mainFrame globalContext], m_notificationFunctionCallback);
&gt; +}
&gt; 
&gt; My understanding is that you intentionally don&apos;t unprotect
&gt; m_notificationFunctionCallback, because addNotificationListener() can&apos;t be
&gt; called twice. I think it&apos;s worth an assertion or a comment here, because this
&gt; is not a usual setter pattern.
&gt; 

I can call JSValueUnprotect here. this method can be called more than once.

&gt; +    // Mac programmers should not be adding more than one notification
&gt; listener per element.
&gt; +    // Other platforms may be different.
&gt; 
&gt; As an aside, is there any chance of having cross-platform accessibility tests?
&gt; I do not know if that even makes sense, but we&apos;ve been able to make some
&gt; cross-platform tests even for inline text input.

There are a lot of cross platform tests for accessibility. However, notifications are tied pretty tightly to the system on the mac at least.

&gt; 
&gt; You can consider adding a FIXME about m_element and m_notificationHandler
&gt; needing CFRetain/CFRelease. It would be good to make DRT work with garbage
&gt; collected ObjC one day.
&gt; 
&gt; Also, I still don&apos;t understand what the race condition is here (see comment
&gt; 31).
&gt; 

I think I&apos;ve explained this. The race condition existed before because there was one static function callback stored in webcore. because AccessibilityUIElements were not reaped at the end of a layout test, but at some point later, it was indeterminate where the function callback was pointing to and where output was going to be sent to.


&gt; r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215582</commentid>
    <comment_count>35</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-21 17:26:03 -0700</bug_when>
    <thetext>alright its in
http://trac.webkit.org/changeset/58031
hopefully this works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215635</commentid>
    <comment_count>36</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-04-21 18:34:36 -0700</bug_when>
    <thetext>i dare say this looked like it worked. thanx to everyone for their help</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215639</commentid>
    <comment_count>37</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-21 18:38:07 -0700</bug_when>
    <thetext>Thank you for the fix!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52742</attachid>
            <date>2010-04-07 09:25:49 -0700</date>
            <delta_ts>2010-04-07 10:19:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>31251</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzIwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDQtMDcgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBhcmlhLWxpdmVyZWdpb24tbm90aWZpY2F0aW9ucy5odG1sIGZhaWxzIG9uIGxlb3BhcmQgcmVs
ZWFzZSBib3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM3MTEyCisKKyAgICAgICAgQ2hhbmdlIHRoZSBtZXRob2QgdGhhdCBEUlQgdXNlcyB0byBtb25p
dG9yIEFYIG5vdGlmaWNhdGlvbnMgc28gdGhhdCBpdHMgcm9idXN0CisgICAgICAgIGJ5IGp1c3Qg
c2VuZGluZyBvdXQgTlNOb3RpZmljYXRpb24gdGhhdCBjYW4gYmUgbGlzdGVuZWQgdG8gYnkgYW55
b25lLCBpbnN0ZWFkCisgICAgICAgIG9mIGtlZXBpbmcgYSBzdGF0aWMgZnVuY3Rpb24gcG9pbnRl
ciBhcm91bmQuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgYWltZWQgdG8gYXZvaWQgZmxha2lu
ZXNzIHNlZW4gaW4gRFJUIHdoZW4gdGhlIG5vdGlmaWNhdGlvbiBoYW5kbGVycworICAgICAgICBh
cmUgbm90IGJlaW5nIGNhbGxlZCBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZS4KKworICAgICAgICBU
ZXN0czogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1hZGRlZGVs
ZW1lbnQuaHRtbAorICAgICAgICAgICAgICAgcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJp
YS1saXZlcmVnaW9ucy1jaGFuZ2VkYWx0Lmh0bWwKKyAgICAgICAgICAgICAgIHBsYXRmb3JtL21h
Yy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZHRleHQuaHRtbAorICAgICAg
ICAgICAgICAgcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1yZW1v
dmVkZWxlbWVudC5odG1sCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlci5tbToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgYWNjZXNzaWJpbGl0eVNldFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM6XSk6CisgICAgICAg
ICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmlj
YXRpb246XSk6CisKIDIwMTAtMDQtMDcgIERhd2l0IEFsZW1heWVodSAgPGFkYXdpdEBrZGUub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
Lm1tCShyZXZpc2lvbiA1NzE5NSkKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2NTcsMjIgKzI2NTcs
MTkgQEAgLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZQogICAgIHJldHVy
biBbc3VwZXIgYWNjZXNzaWJpbGl0eUFycmF5QXR0cmlidXRlVmFsdWVzOmF0dHJpYnV0ZSBpbmRl
eDppbmRleCBtYXhDb3VudDptYXhDb3VudF07CiB9CiAKLS8vIFRoZXNlIGFyZSB1c2VkIGJ5IERS
VCBzbyB0aGF0IGl0IGNhbiBrbm93IHdoZW4gbm90aWZpY2F0aW9ucyBhcmUgc2VudC4KLS8vIFNp
bmNlIHRoZXkgYXJlIHN0YXRpYywgb25seSBvbmUgY2FsbGJhY2sgY2FuIGJlIGluc3RhbGxlZCBh
dCBhIHRpbWUgKHRoYXQncyBhbGwgRFJUIHNob3VsZCBuZWVkKS4KLXR5cGVkZWYgdm9pZCAoKkFY
UG9zdGVkTm90aWZpY2F0aW9uQ2FsbGJhY2spKGlkIGVsZW1lbnQsIE5TU3RyaW5nKiBub3RpZmlj
YXRpb24sIHZvaWQqIGNvbnRleHQpOwotc3RhdGljIEFYUG9zdGVkTm90aWZpY2F0aW9uQ2FsbGJh
Y2sgQVhOb3RpZmljYXRpb25DYWxsYmFjayA9IDA7Ci1zdGF0aWMgdm9pZCogQVhQb3N0ZWROb3Rp
ZmljYXRpb25Db250ZXh0ID0gMDsKLQotLSAodm9pZClhY2Nlc3NpYmlsaXR5U2V0UG9zdGVkTm90
aWZpY2F0aW9uQ2FsbGJhY2s6KEFYUG9zdGVkTm90aWZpY2F0aW9uQ2FsbGJhY2spZnVuY3Rpb24g
d2l0aENvbnRleHQ6KHZvaWQqKWNvbnRleHQKKy8vIFRoaXMgaXMgc2V0IGJ5IERSVCB3aGVuIGl0
IHdhbnRzIHRvIGxpc3RlbiBmb3Igbm90aWZpY2F0aW9ucy4KK3N0YXRpYyBCT09MIEFYU2hvdWxk
UmVwb3N0Tm90aWZpY2F0aW9ucyA9IE5POworLSAodm9pZClhY2Nlc3NpYmlsaXR5U2V0U2hvdWxk
UmVwb3N0Tm90aWZpY2F0aW9uczooQk9PTClyZXBvc3QKIHsKLSAgICBBWE5vdGlmaWNhdGlvbkNh
bGxiYWNrID0gZnVuY3Rpb247Ci0gICAgQVhQb3N0ZWROb3RpZmljYXRpb25Db250ZXh0ID0gY29u
dGV4dDsKKyAgICBBWFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnMgPSByZXBvc3Q7CiB9CiAKIC0g
KHZvaWQpYWNjZXNzaWJpbGl0eVBvc3RlZE5vdGlmaWNhdGlvbjooTlNTdHJpbmcgKilub3RpZmlj
YXRpb24KIHsKLSAgICBpZiAoQVhOb3RpZmljYXRpb25DYWxsYmFjaykKLSAgICAgICAgQVhOb3Rp
ZmljYXRpb25DYWxsYmFjayhzZWxmLCBub3RpZmljYXRpb24sIEFYUG9zdGVkTm90aWZpY2F0aW9u
Q29udGV4dCk7CisgICAgaWYgKEFYU2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9ucykgeworICAgICAg
ICBOU0RpY3Rpb25hcnkqIHVzZXJJbmZvID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9i
amVjdHNBbmRLZXlzOm5vdGlmaWNhdGlvbiwgQCJub3RpZmljYXRpb24iLCBuaWxdOworICAgICAg
ICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHBvc3ROb3RpZmljYXRpb25O
YW1lOkAiQVhEUlROb3RpZmljYXRpb24iIG9iamVjdDpuaWwgdXNlckluZm86dXNlckluZm9dOwor
ICAgIH0KIH0KIAogQGVuZApJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNTcyMDkpCisrKyBXZWJLaXRUb29s
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOCBAQAorMjAxMC0wNC0wNyAg
Q2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGFyaWEtbGl2ZXJlZ2lvbi1ub3RpZmljYXRp
b25zLmh0bWwgZmFpbHMgb24gbGVvcGFyZCByZWxlYXNlIGJvdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcxMTIKKworICAgICAgICBDaGFuZ2UgdGhl
IHdheSB0aGF0IG5vdGlmaWNhdGlvbnMgYXJlIGxpc3RlbmVkIGZvciBieSBmb3JjaW5nIGNsaWVu
dHMKKyAgICAgICAgdG8gY2FsbCBhIHJlbW92ZSBsaXN0ZW5lciBhcyB3ZWxsIHRvIG1hdGNoIHRo
ZSBhZGQgbGlzdGVuZXIuIERSVCB3aWxsCisgICAgICAgIGFzc2VydCBpZiB0aG9zZSBhcmUgbm90
IGRvbmUgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuICAgICAgICAKKworICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwOgorICAgICAgICAocmVtb3ZlTm90aWZp
Y2F0aW9uTGlzdGVuZXJDYWxsYmFjayk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpnZXRKU0NsYXNzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Lmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRNYWMubW06CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVy
IGluaXRXaXRoUGxhdGZvcm1FbGVtZW50Ol0pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5Tm90
aWZpY2F0aW9uSGFuZGxlciBkZWFsbG9jXSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3Rp
ZmljYXRpb25IYW5kbGVyIF9ub3RpZmljYXRpb25SZWNlaXZlZDpdKToKKyAgICAgICAgKC1bQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgc2V0Q2FsbGJhY2s6XSk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6On5BY2Nlc3NpYmlsaXR5VUlFbGVtZW50KToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVy
KToKKwogMjAxMC0wMy0zMSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCShyZXZpc2lvbiA1NzE5
NSkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTgsNiArNjE4LDEyIEBAIHN0YXRpYyBKU1ZhbHVlUmVm
IGFkZE5vdGlmaWNhdGlvbkxpc3RlbmUKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNv
bnRleHQsIHN1Y2NlZWRlZCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIHJlbW92ZU5vdGlmaWNh
dGlvbkxpc3RlbmVyQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IHRvQVhFbGVtZW50KHRoaXNPYmplY3QpLT5yZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpOwor
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwogLy8gRGVzdHJ1
Y3Rpb24KIAogc3RhdGljIHZvaWQgZmluYWxpemUoSlNPYmplY3RSZWYgdGhpc09iamVjdCkKQEAg
LTcyMSw2ICs3MjcsNyBAQCBKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldEpT
CiAgICAgICAgIHsgInNlbGVjdGVkUm93QXRJbmRleCIsIHNlbGVjdGVkUm93QXRJbmRleENhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCiAgICAgICAgIHsgImlzRXF1YWwiLCBpc0VxdWFsQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKICAgICAgICAgeyAiYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIiLCBhZGROb3RpZmljYXRpb25M
aXN0ZW5lckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInJlbW92ZU5vdGlmaWNhdGlvbkxp
c3RlbmVyIiwgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJ0YWtlRm9jdXMiLCB0YWtlRm9jdXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7
ICJ0YWtlU2VsZWN0aW9uIiwgdGFrZVNlbGVjdGlvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAg
IHsgImFkZFNlbGVjdGlvbiIsIGFkZFNlbGVjdGlvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCkluZGV4OiBX
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dC5oCShyZXZpc2lvbiA1NzE5NSkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDEyICsxNzMsMTQgQEAg
cHVibGljOgogICAgIC8vIE5vdGlmaWNhdGlvbnMKICAgICAvLyBGdW5jdGlvbiBjYWxsYmFjayBz
aG91bGQgdGFrZSBvbmUgYXJndW1lbnQsIHRoZSBuYW1lIG9mIHRoZSBub3RpZmljYXRpb24uCiAg
ICAgYm9vbCBhZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxi
YWNrKTsKKyAgICAvLyBNYWtlIHN1cmUgeW91IGNhbGwgcmVtb3ZlLCBiZWNhdXNlIHlvdSBjYW4n
dCByZWx5IG9uIG9iamVjdHMgYmVpbmcgZGVhbGxvY2F0ZWQgaW4gYSB0aW1lbHkgZmFzaGlvbi4K
KyAgICB2b2lkIHJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CiAgICAgCiBwcml2YXRlOgog
ICAgIHN0YXRpYyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsKIAogICAgIFBsYXRmb3JtVUlFbGVt
ZW50IG1fZWxlbWVudDsKLSAgICBKU09iamVjdFJlZiBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2Fs
bGJhY2s7CisgICAgdm9pZCogbV9ub3RpZmljYXRpb25IYW5kbGVyOwogfTsKIAogI2VuZGlmIC8v
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRfaApJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0JKHJl
dmlzaW9uIDU3MTk1KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU3LDMzICs1NywxMSBAQCB0
eXBlZGVmIHZvaWQgKCpBWFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiCiAKIEBpbnRlcmZhY2UgTlNP
YmplY3QgKFdlYktpdEFjY2Vzc2liaWxpdHlBZGRpdGlvbnMpCiAtIChOU0FycmF5ICopYWNjZXNz
aWJpbGl0eUFycmF5QXR0cmlidXRlVmFsdWVzOihOU1N0cmluZyAqKWF0dHJpYnV0ZSBpbmRleDoo
TlNVSW50ZWdlcilpbmRleCBtYXhDb3VudDooTlNVSW50ZWdlciltYXhDb3VudDsKLS0gKHZvaWQp
YWNjZXNzaWJpbGl0eVNldFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiYWNrOihBWFBvc3RlZE5vdGlm
aWNhdGlvbkNhbGxiYWNrKWZ1bmN0aW9uIHdpdGhDb250ZXh0Oih2b2lkKiljb250ZXh0OworLSAo
dm9pZClhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczooQk9PTClyZXBv
c3Q7CiAtIChOU1VJbnRlZ2VyKWFjY2Vzc2liaWxpdHlJbmRleE9mQ2hpbGQ6KGlkKWNoaWxkOwog
LSAoTlNVSW50ZWdlcilhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVDb3VudDooTlNTdHJpbmcg
KilhdHRyaWJ1dGU7CiBAZW5kCiAKLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCkKLSAgICA6IG1fZWxlbWVudChl
bGVtZW50KQotICAgICwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKDApCi17Ci0gICAg
W21fZWxlbWVudCByZXRhaW5dOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50KGNvbnN0IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQmIG90aGVyKQotICAg
IDogbV9lbGVtZW50KG90aGVyLm1fZWxlbWVudCkKLSAgICAsIG1fbm90aWZpY2F0aW9uRnVuY3Rp
b25DYWxsYmFjaygwKQotewotICAgIFttX2VsZW1lbnQgcmV0YWluXTsKLX0KLQotQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6fkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoKQotewotICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IG91ciBub3RpZmljYXRpb24gY2FsbGJhY2sgZG9lcyBub3Qgc3RpY2sgYXJvdW5k
LgotICAgIGlmIChtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spCi0gICAgICAgIFttX2Vs
ZW1lbnQgYWNjZXNzaWJpbGl0eVNldFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiYWNrOjAgd2l0aENv
bnRleHQ6MF07Ci0gICAgW21fZWxlbWVudCByZWxlYXNlXTsKLX0KLQogQGludGVyZmFjZSBOU1N0
cmluZyAoSlNTdHJpbmdSZWZBZGRpdGlvbnMpCiArIChOU1N0cmluZyAqKXN0cmluZ1dpdGhKU1N0
cmluZ1JlZjooSlNTdHJpbmdSZWYpanNTdHJpbmdSZWY7CiAtIChKU1N0cmluZ1JlZiljcmVhdGVK
U1N0cmluZ1JlZjsKQEAgLTEwNyw2ICs4NSw3NiBAQCAtIChKU1N0cmluZ1JlZiljcmVhdGVKU1N0
cmluZ1JlZgogCiBAZW5kCiAKK0BpbnRlcmZhY2UgQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhh
bmRsZXIgOiBOU09iamVjdAoreworICAgIGlkIG1fcGxhdGZvcm1FbGVtZW50OworICAgIEpTT2Jq
ZWN0UmVmIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjazsKK30KKworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIKKworLSAoaWQpaW5p
dFdpdGhQbGF0Zm9ybUVsZW1lbnQ6KGlkKXBsYXRmb3JtRWxlbWVudAoreworICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07CisKKyAgICBtX3BsYXRmb3JtRWxlbWVudCA9IHBsYXRmb3JtRWxlbWVudDsK
KyAgICAKKyAgICAvLyBPbmNlIHdoZW4gb2JqZWN0IHN0YXJ0cyByZXF1ZXN0aW5nIG5vdGlmaWNh
dGlvbnMsIGl0cyBvbiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwcm9ncmFtLgorICAgIC8vIFRo
aXMgaXMgdG8gYXZvaWQgYW55IHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIHRlc3RzIHR1cm5pbmcg
dGhpcyBmbGFnIG9uIGFuZCBvZmYuIEluc3RlYWQKKyAgICAvLyBBY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlciBjYW4ganVzdCBsaXN0ZW4gd2hlbiB0aGV5IHdhbnQgdG8uCisgICAgW21f
cGxhdGZvcm1FbGVtZW50IGFjY2Vzc2liaWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25z
OllFU107CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNl
cnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihfbm90aWZpY2F0aW9uUmVjZWl2ZWQ6KSBuYW1l
OkAiQVhEUlROb3RpZmljYXRpb24iIG9iamVjdDpuaWxdOworCisgICAgcmV0dXJuIHNlbGY7Cit9
CisgCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1
bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30K
KworLSAodm9pZClfbm90aWZpY2F0aW9uUmVjZWl2ZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZp
Y2F0aW9uCit7CisgICAgTlNTdHJpbmcqIG5vdGlmaWNhdGlvbk5hbWUgPSBbW25vdGlmaWNhdGlv
biB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkAibm90aWZpY2F0aW9uIl07CisgICAgaWYgKCFub3Rp
ZmljYXRpb25OYW1lKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IGpzTm90aWZpY2F0aW9uKEFkb3B0LCBbbm90aWZpY2F0aW9uTmFtZSBjcmVhdGVK
U1N0cmluZ1JlZl0pOworICAgIEpTVmFsdWVSZWYgYXJndW1lbnQgPSBKU1ZhbHVlTWFrZVN0cmlu
ZyhbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRdLCBqc05vdGlmaWNhdGlvbi5nZXQoKSk7CisgICAg
SlNPYmplY3RDYWxsQXNGdW5jdGlvbihbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRdLCBtX25vdGlm
aWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2ssIE5VTEwsIDEsICZhcmd1bWVudCwgTlVMTCk7Cit9CisK
Ky0gKHZvaWQpc2V0Q2FsbGJhY2s6KEpTT2JqZWN0UmVmKWNhbGxiYWNrCit7CisgICAgbV9ub3Rp
ZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrID0gY2FsbGJhY2s7Cit9CisKK0BlbmQKKworQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChQbGF0Zm9ybVVJRWxlbWVu
dCBlbGVtZW50KQorICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX25vdGlmaWNhdGlv
bkhhbmRsZXIoMCkKK3sKKyAgICBbbV9lbGVtZW50IHJldGFpbl07Cit9CisKK0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCYgb3RoZXIpCisgICAgOiBtX2VsZW1lbnQob3RoZXIubV9lbGVtZW50KQorICAgICwg
bV9ub3RpZmljYXRpb25IYW5kbGVyKDApCit7CisgICAgW21fZWxlbWVudCByZXRhaW5dOworfQor
CitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp+QWNjZXNzaWJpbGl0eVVJRWxlbWVudCgpCit7Cisg
ICAgLy8gVGhlIG5vdGlmaWNhdGlvbiBoYW5kbGVyIHNob3VsZCBiZSBuaWwgYmVjYXVzZSByZW1v
dmVOb3RpZmljYXRpb25MaXN0ZW5lcigpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGluIHRoZSB0
ZXN0LgorICAgIGFzc2VydCghbV9ub3RpZmljYXRpb25IYW5kbGVyKTsKKyAgICBbbV9lbGVtZW50
IHJlbGVhc2VdOworfQorCiBzdGF0aWMgTlNTdHJpbmcqIGRlc2NyaXB0aW9uT2ZWYWx1ZShpZCB2
YWx1ZU9iamVjdCwgaWQgZm9jdXNlZEFjY2Vzc2liaWxpdHlPYmplY3QpCiB7CiAgICAgaWYgKCF2
YWx1ZU9iamVjdCkKQEAgLTc3NCwyOCArODIyLDI3IEBAIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnVybCgKICAgICByZXR1cm4gW1t1cmwgYWJzb2x1dGVTdHJpbmddIGNyZWF0
ZUpTU3RyaW5nUmVmXTsgICAgCiB9CiAKLXN0YXRpYyB2b2lkIF9hY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uQ2FsbGJhY2soaWQgZWxlbWVudCwgTlNTdHJpbmcqIG5vdGlmaWNhdGlvbiwgdm9pZCog
Y29udGV4dCkKLXsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uQ2FsbGJhY2sgPSBzdGF0aWNfY2FzdDxKU09iamVjdFJlZj4oY29u
dGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNOb3RpZmljYXRpb24oQWRv
cHQsIFtub3RpZmljYXRpb24gY3JlYXRlSlNTdHJpbmdSZWZdKTsKLSAgICBKU1ZhbHVlUmVmIGFy
Z3VtZW50ID0gSlNWYWx1ZU1ha2VTdHJpbmcoW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwganNO
b3RpZmljYXRpb24uZ2V0KCkpOwotICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oW21haW5GcmFt
ZSBnbG9iYWxDb250ZXh0XSwgZnVuY3Rpb25DYWxsYmFjaywgTlVMTCwgMSwgJmFyZ3VtZW50LCBO
VUxMKTsKLX0KLQogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3RpZmljYXRpb25M
aXN0ZW5lcihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQogewogICAgIGlmICghZnVuY3Rp
b25DYWxsYmFjaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogIAotICAgIG1fbm90aWZpY2F0aW9u
RnVuY3Rpb25DYWxsYmFjayA9IGZ1bmN0aW9uQ2FsbGJhY2s7Ci0gICAgW3BsYXRmb3JtVUlFbGVt
ZW50KCkgYWNjZXNzaWJpbGl0eVNldFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiYWNrOl9hY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uQ2FsbGJhY2sgd2l0aENvbnRleHQ6cmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4obV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKV07CisgICAgLy8gQWxyZWFkeSBh
ZGRlZCBvbmNlLgorICAgIGlmIChtX25vdGlmaWNhdGlvbkhhbmRsZXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBtX25vdGlmaWNhdGlvbkhhbmRsZXIgPSBbW0FjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyIGFsbG9jXSBpbml0V2l0aFBsYXRmb3JtRWxlbWVudDpwbGF0
Zm9ybVVJRWxlbWVudCgpXTsKKyAgICBbKEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVy
KiltX25vdGlmaWNhdGlvbkhhbmRsZXIgc2V0Q2FsbGJhY2s6ZnVuY3Rpb25DYWxsYmFja107CisK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1v
dmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCit7CisgICAgWyhpZCltX25vdGlmaWNhdGlvbkhhbmRs
ZXIgcmVsZWFzZV07CisgICAgbV9ub3RpZmljYXRpb25IYW5kbGVyID0gMDsKK30KKwogYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGUoKSBjb25zdAogewogICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU3MjA5KQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTAtMDQtMDcgIENo
cmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBhcmlhLWxpdmVyZWdpb24tbm90aWZpY2F0aW9u
cy5odG1sIGZhaWxzIG9uIGxlb3BhcmQgcmVsZWFzZSBib3QKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MTEyCisKKyAgICAgICAgQWRkIGZvdXIgbW9y
ZSB0ZXN0cyB0aGF0IHRlc3Qgc3BlY2lmaWMgbGl2ZSByZWdpb24gZnVuY3Rpb25hbGl0eS4gSGF2
aW5nIHRoZXNlCisgICAgICAgIGZvdXIgdGVzdHMgcnVuIGluIG9yZGVyIHNlZW1zIHRvIHN0cmVz
cyB0aGUgbm90aWZpY2F0aW9uIG1lY2hhbmlzbSBhbmQgd2lsbCBleHBvc2UgaXNzdWVzIAorICAg
ICAgICBtb3JlIGZyZXF1ZW50bHkuCisgICAgICAgIE1vZGlmeSB0ZXN0cyB0aGF0IHVzZSBub3Rp
ZmljYXRpb24gbGlzdGVuZXJzIHRvIGFsc28gInJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyIi4K
KworICAgICAgICAqIHBsYXRmb3JtL21hYy1sZW9wYXJkL1NraXBwZWQ6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXN0Ym94LXNlbGVjdGVkY2hpbGRyZW4tY2hh
bmdlLmh0bWw6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZl
cmVnaW9uLW9uLWltYWdlLmh0bWw6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxp
dHkvYXJpYS1saXZlcmVnaW9ucy1hZGRlZGVsZW1lbnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLWFkZGVk
ZWxlbWVudC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0
eS9hcmlhLWxpdmVyZWdpb25zLWNoYW5nZWRhbHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLWNoYW5nZWRh
bHQuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJp
YS1saXZlcmVnaW9ucy1jaGFuZ2VkdGV4dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZHRleHQu
aHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1s
aXZlcmVnaW9ucy1ub3RpZmljYXRpb25zLmh0bWw6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Fj
Y2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1yZW1vdmVkZWxlbWVudC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJl
Z2lvbnMtcmVtb3ZlZGVsZW1lbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFj
L2FjY2Vzc2liaWxpdHkvY2hhbmdlLW5vdGlmaWNhdGlvbi1vbi1zY3JvbGwuaHRtbDoKKwogMjAx
MC0wNC0wNyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjU3MTk2LgpJbmRleDogTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjLWxlb3BhcmQvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMtbGVvcGFyZC9Ta2lwcGVkCShyZXZpc2lvbiA1NzE5NSkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy1sZW9wYXJkL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTksOCAr
OSw2IEBAIHN2Zy9jc3MvZ2x5cGgtb3JpZW50YXRpb24tcm91bmRpbmctdGVzdC4KIHBsYXRmb3Jt
L21hYy9hY2Nlc3NpYmlsaXR5L3RhYmxlLW11bHRpLWJvZGllcy5odG1sCiAjIExpc3RzIGFyZSBu
b3Qgc3VwcG9ydGVkIG9uIExlb3BhcmQuCiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlh
LWRpcmVjdG9yeS5odG1sCi0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNzExMiBMaXZlIHJlZ2lvbnMgZmFpbHMgb24gbGVvcGFyZCByZWxlYXNlIGJvdC4KLXBsYXRm
b3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtbm90aWZpY2F0aW9ucy5odG1s
CiAKICMgVGVzdHMgb2YgZm9udCBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIGJ5IEFUU1VJCiBwbGF0
Zm9ybS9tYWMvZmFzdC90ZXh0L215YW5tYXItc2hhcGluZy5odG1sCkluZGV4OiBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpc3Rib3gtc2VsZWN0ZWRjaGlsZHJl
bi1jaGFuZ2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNj
ZXNzaWJpbGl0eS9hcmlhLWxpc3Rib3gtc2VsZWN0ZWRjaGlsZHJlbi1jaGFuZ2UuaHRtbAkocmV2
aXNpb24gNTcxOTUpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9h
cmlhLWxpc3Rib3gtc2VsZWN0ZWRjaGlsZHJlbi1jaGFuZ2UuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMjIsNiArMjIsNyBAQCB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7CiAKICAgICBk
ZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IHdoZW4gYXJpYS1zZWxlY3RlZCBpcyBjaGFuZ2Vk
IGluIGEgbGlzdGJveCwgdGhlIGNvcnJlY3Qgbm90aWZpY2F0aW9uIGlzIHNlbnQuIik7CiAKKyAg
ICB2YXIgbGlzdGJveCA9IDA7CiAgICAgdmFyIG5vdGlmaWNhdGlvbkNvdW50ID0gMDsKICAgICBm
dW5jdGlvbiBhcmlhQ2FsbGJhY2sobm90aWZpY2F0aW9uKSB7CiAgICAgICAgIGlmIChub3RpZmlj
YXRpb24gPT0gIkFYU2VsZWN0ZWRDaGlsZHJlbkNoYW5nZWQiKSB7CkBAIC0yOSw2ICszMCw3IEBA
IHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKIAogICAgICAgICAgICAgLy8gV2Ugc2hv
dWxkIGdldCBhIHRvdGFsIG9mIDQgbGl2ZSByZWdpb24gY2hhbmdlcy4KICAgICAgICAgICAgIGlm
IChub3RpZmljYXRpb25Db3VudCA9PSAyKSB7CisgICAgICAgICAgICAgICBsaXN0Ym94LnJlbW92
ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CiAgICAgICAgICAgICAgICB3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0z
OCw3ICs0MCw3IEBAIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKICAgICAgICAgd2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKIAogICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgibGlzdGJveCIpLmZvY3VzKCk7Ci0gICAgICAgIHZhciBsaXN0
Ym94ID0gd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworICAg
ICAgICBsaXN0Ym94ID0gd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVt
ZW50OwogCiAgICAgICAgIHZhciBhZGRlZE5vdGlmaWNhdGlvbiA9IGxpc3Rib3guYWRkTm90aWZp
Y2F0aW9uTGlzdGVuZXIoYXJpYUNhbGxiYWNrKTsKICAgICAgICAgc2hvdWxkQmUoImFkZGVkTm90
aWZpY2F0aW9uIiwgInRydWUiKTsKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nl
c3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbi1vbi1pbWFnZS5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbi1vbi1p
bWFnZS5odG1sCShyZXZpc2lvbiA1NzE5NSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9h
Y2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbi1vbi1pbWFnZS5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0xOCw4ICsxOCwxMCBAQCB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7CiAKICAg
ICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IEFSSUEgbGl2ZSByZWdpb25zIHRoYXQgaXMg
b24gYW4gaW1hZ2Ugd2lsbCB3b3JrIHdoZW4gdGhlIGFsdCB0YWcgaXMgY2hhbmdlZC4iKTsKIAor
ICAgIHZhciBpbWFnZSA9IDA7CiAgICAgZnVuY3Rpb24gYXJpYUNhbGxiYWNrKG5vdGlmaWNhdGlv
bikgewogICAgICAgICBpZiAobm90aWZpY2F0aW9uID09ICJBWExpdmVSZWdpb25DaGFuZ2VkIikg
eworICAgICAgICAgICAgaW1hZ2UucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKICAgICAg
ICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CiAgICAgICAg
IH0KICAgICB9CkBAIC0yOCw3ICszMCw3IEBAIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxz
ZTsKICAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
IAogICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW1hZ2UiKS5mb2N1cygpOwotICAg
ICAgICB2YXIgaW1hZ2UgPSB3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVs
ZW1lbnQ7CisgICAgICAgIGltYWdlID0gd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZv
Y3VzZWRFbGVtZW50OwogCiAgICAgICAgIHZhciBhZGRlZE5vdGlmaWNhdGlvbiA9IGltYWdlLmFk
ZE5vdGlmaWNhdGlvbkxpc3RlbmVyKGFyaWFDYWxsYmFjayk7CiAgICAgICAgIHNob3VsZEJlKCJh
ZGRlZE5vdGlmaWNhdGlvbiIsICJ0cnVlIik7CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLWFkZGVkZWxlbWVudC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkv
YXJpYS1saXZlcmVnaW9ucy1hZGRlZGVsZW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9u
cy1hZGRlZGVsZW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBA
CitBTEVSVDogU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIEFYTGl2ZVJlZ2lvbkNoYW5nZWQKK3RleHQK
KworaGVsbG9uZXcgdGV4dCBlbGVtZW50CitUaGlzIHRlc3RzIHRoYXQgYWRkaW5nIGFuIGVsZW1l
bnQgdG8gYSBsaXZlIHJlZ2lvbiB3aWxsIHRyaWdnZXIgdGhlIHJpZ2h0IG5vdGlmaWNhdGlvbi4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYWRkZWROb3RpZmljYXRpb24g
aXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2
ZXJlZ2lvbnMtYWRkZWRlbGVtZW50Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1hZGRlZGVsZW1lbnQuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5
L2FyaWEtbGl2ZXJlZ2lvbnMtYWRkZWRlbGVtZW50Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQ+Cit2YXIgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eSBpZD0iYm9keSI+CisKKzxkaXYgcm9sZT0iZ3JvdXAiIHRhYmluZGV4PTAgaWQ9ImxpdmVyZWdp
b24iIGFyaWEtbGl2ZT0icG9saXRlIiBhcmlhLXJlbGV2YW50PSJhZGRpdGlvbnMiPgorPGgzIGlk
PSJpbm5lcmxpdmUiPnRleHQ8L2gzPgorPGRpdiBpZD0iYWRkcmVnaW9uIj5oZWxsbzwvZGl2Pgor
PC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+CisKKzxzY3JpcHQ+CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IGFkZGlu
ZyBhbiBlbGVtZW50IHRvIGEgbGl2ZSByZWdpb24gd2lsbCB0cmlnZ2VyIHRoZSByaWdodCBub3Rp
ZmljYXRpb24uIik7CisKKyAgICB2YXIgbGl2ZVJlZ2lvbiA9IDA7CisgICAgZnVuY3Rpb24gYXJp
YUNhbGxiYWNrKG5vdGlmaWNhdGlvbikgeworICAgICAgICBpZiAobm90aWZpY2F0aW9uID09ICJB
WExpdmVSZWdpb25DaGFuZ2VkIikgeworICAgICAgICAgICBhbGVydCgiU3VjY2Vzc2Z1bGx5IHJl
Y2VpdmVkICIgKyBub3RpZmljYXRpb24pOworICAgICAgICAgICBsaXZlUmVnaW9uLnJlbW92ZU5v
dGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAod2luZG93LmFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImxpdmVyZWdpb24iKS5mb2N1cygpOworICAgICAgICBsaXZlUmVnaW9uID0gd2luZG93LmFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworCisgICAgICAgIHZhciBhZGRlZE5v
dGlmaWNhdGlvbiA9IGxpdmVSZWdpb24uYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoYXJpYUNhbGxi
YWNrKTsKKyAgICAgICAgc2hvdWxkQmUoImFkZGVkTm90aWZpY2F0aW9uIiwgInRydWUiKTsKKwor
ICAgICAgICAvLyB0aGlzIHNob3VsZCB0cmlnZ2VyIG91ciBsaXZlIHJlZ2lvbiBjYWxsYmFjayBm
b3IgYSBuZXcgZWxlbWVudC4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkZHJl
Z2lvbiIpLmlubmVySFRNTCArPSAibmV3IHRleHQgZWxlbWVudCI7CisgICAgfQorCisgICAgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2Fy
aWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZGFsdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1jaGFu
Z2VkYWx0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZGFsdC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK0FMRVJUOiBTdWNjZXNzZnVsbHkgcmVj
ZWl2ZWQgQVhMaXZlUmVnaW9uQ2hhbmdlZAorCitUaGlzIHRlc3RzIHRoYXQgY2hhbmdpbmcgdGhl
IGFsdCB0YWcgb2YgYW4gaW1hZ2UgaW4gYSBsaXZlIHJlZ2lvbiB0cmlnZ2VycyBhIGxpdmUgcmVn
aW9uIG5vdGlmaWNhdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
YWRkZWROb3RpZmljYXRpb24gaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nl
c3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZGFsdC5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMt
Y2hhbmdlZGFsdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1jaGFuZ2VkYWx0Lmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQ+
Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisKKzxkaXYgcm9sZT0iZ3JvdXAiIHRhYmluZGV4PTAg
aWQ9ImxpdmVyZWdpb24iIGFyaWEtbGl2ZT0icG9saXRlIiBhcmlhLXJlbGV2YW50PSJhZGRpdGlv
bnMiPgorPGltZyBzcmM9InRlc3QuZ2lmIiB3aWR0aD0xMDAgaGVpZ2h0PTEwMCBhbHQ9ImFsdCB0
ZXh0IiBpZD0iaW1hZ2UiPgorPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBkZXNjcmlwdGlvbigiVGhp
cyB0ZXN0cyB0aGF0IGNoYW5naW5nIHRoZSBhbHQgdGFnIG9mIGFuIGltYWdlIGluIGEgbGl2ZSBy
ZWdpb24gdHJpZ2dlcnMgYSBsaXZlIHJlZ2lvbiBub3RpZmljYXRpb24uIik7CisKKyAgICB2YXIg
bGl2ZVJlZ2lvbkFsdCA9IDA7CisgICAgZnVuY3Rpb24gYXJpYUNhbGxiYWNrQWx0KG5vdGlmaWNh
dGlvbikgeworICAgICAgICBpZiAobm90aWZpY2F0aW9uID09ICJBWExpdmVSZWdpb25DaGFuZ2Vk
IikgeworICAgICAgICAgICBhbGVydCgiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkICIgKyBub3RpZmlj
YXRpb24pOworICAgICAgICAgICBsaXZlUmVnaW9uQWx0LnJlbW92ZU5vdGlmaWNhdGlvbkxpc3Rl
bmVyKCk7CisgICAgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250
cm9sbGVyKSB7CisgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxpdmVyZWdpb24iKS5m
b2N1cygpOworICAgICAgICBsaXZlUmVnaW9uQWx0ID0gd2luZG93LmFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmZvY3VzZWRFbGVtZW50OworCisgICAgICAgIHZhciBhZGRlZE5vdGlmaWNhdGlvbiA9
IGxpdmVSZWdpb25BbHQuYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoYXJpYUNhbGxiYWNrQWx0KTsK
KyAgICAgICAgc2hvdWxkQmUoImFkZGVkTm90aWZpY2F0aW9uIiwgInRydWUiKTsKKworICAgICAg
ICAvLyB0aGlzIHNob3VsZCBhbHNvIHRyaWdnZXIgb3VyIGxpdmUgcmVnaW9uIGNoYW5nZSBiZWNh
dXNlIGl0cyBhIHRleHQgYWx0ZXJuYXRpdmUgY2hhbmdlLiAKKyAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImltYWdlIikuc2V0QXR0cmlidXRlKCdhbHQnLCAibmV3IGltYWdlIHRleHQi
KTsKKyAgICB9CisKKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisK
KzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1jaGFuZ2VkdGV4dC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkv
YXJpYS1saXZlcmVnaW9ucy1jaGFuZ2VkdGV4dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb25z
LWNoYW5nZWR0ZXh0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAor
QUxFUlQ6IFN1Y2Nlc3NmdWxseSByZWNlaXZlZCBBWExpdmVSZWdpb25DaGFuZ2VkCitjaGFuZ2Vk
IHRleHQKKworVGhpcyB0ZXN0cyB0aGF0IHdoZW4geW91IGNoYW5nZSB0ZXh0IGluIGEgbGl2ZSBy
ZWdpb24sIHRoZSBwcm9wZXIgbm90aWZpY2F0aW9uIGlzIHNlbnQuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIGFkZGVkTm90aWZpY2F0aW9uIGlzIHRydWUKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLWNoYW5nZWR0
ZXh0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvYXJpYS1saXZlcmVnaW9ucy1jaGFuZ2VkdGV4dC5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1j
aGFuZ2VkdGV4dC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0PgordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNl
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgaWQ9ImJvZHkiPgorCis8ZGl2
IHJvbGU9Imdyb3VwIiB0YWJpbmRleD0wIGlkPSJsaXZlcmVnaW9uIiBhcmlhLWxpdmU9InBvbGl0
ZSIgYXJpYS1yZWxldmFudD0iYWRkaXRpb25zIj4KKzxoMyBpZD0iaW5uZXJsaXZlIj50ZXh0PC9o
Mz4KKzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorCis8c2NyaXB0PgorCisgICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCB3
aGVuIHlvdSBjaGFuZ2UgdGV4dCBpbiBhIGxpdmUgcmVnaW9uLCB0aGUgcHJvcGVyIG5vdGlmaWNh
dGlvbiBpcyBzZW50LiIpOworCisgICAgdmFyIGxpdmVSZWdpb25UZXh0ID0gMDsKKyAgICBmdW5j
dGlvbiBhcmlhQ2FsbGJhY2tUZXh0KG5vdGlmaWNhdGlvbikgeworICAgICAgICBpZiAobm90aWZp
Y2F0aW9uID09ICJBWExpdmVSZWdpb25DaGFuZ2VkIikgeworICAgICAgICAgICBhbGVydCgiU3Vj
Y2Vzc2Z1bGx5IHJlY2VpdmVkICIgKyBub3RpZmljYXRpb24pOworICAgICAgICAgICBsaXZlUmVn
aW9uVGV4dC5yZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpOworICAgICAgICAgICB3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICB3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCisgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJsaXZlcmVnaW9uIikuZm9jdXMoKTsKKyAgICAgICAgbGl2ZVJlZ2lv
blRleHQgPSB3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisK
KyAgICAgICAgdmFyIGFkZGVkTm90aWZpY2F0aW9uID0gbGl2ZVJlZ2lvblRleHQuYWRkTm90aWZp
Y2F0aW9uTGlzdGVuZXIoYXJpYUNhbGxiYWNrVGV4dCk7CisgICAgICAgIHNob3VsZEJlKCJhZGRl
ZE5vdGlmaWNhdGlvbiIsICJ0cnVlIik7CisKKyAgICAgICAgLy8gdGhpcyBzaG91bGQgdHJpZ2dl
ciBvdXIgbGl2ZSByZWdpb24gY2FsbGJhY2sgZm9yIGEgdGV4dCBjaGFuZ2UuCisgICAgICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbm5lcmxpdmUiKS5pbm5lclRleHQgPSAiY2hhbmdlZCB0
ZXh0IjsKKyAgICB9CisKKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+
CisKKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1ub3RpZmljYXRpb25zLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJp
YS1saXZlcmVnaW9ucy1ub3RpZmljYXRpb25zLmh0bWwJKHJldmlzaW9uIDU3MTk1KQorKysgTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1ub3Rp
ZmljYXRpb25zLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAgdmFyIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IGZhbHNlOwogCiAgICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhh
dCBBUklBIGxpdmUgcmVnaW9ucyBhcmUgc2VuZGluZyBvdXQgdGhlIGNvcnJlY3Qgbm90aWZpY2F0
aW9ucy4gV2UgcGVyZm9ybSBmb3VyIG9wZXJhdGlvbnMgKGFkZCwgcmVtb3ZlLCBjaGFuZ2UgdGV4
dCwgY2hhbmdlIGFsdCB0YWcpLCBlYWNoIG9uZSBzaG91bGQgdHJpZ2dlciBhIGxpdmUgcmVnaW9u
IG5vdGlmaWNhdGlvbiIpOwogCisgICAgdmFyIGxpdmVSZWdpb24gPSAwOwogICAgIHZhciBsaXZl
UmVnaW9uQ2hhbmdlQ291bnQgPSAwOwogICAgIGZ1bmN0aW9uIGFyaWFDYWxsYmFjayhub3RpZmlj
YXRpb24pIHsKICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbiA9PSAiQVhMaXZlUmVnaW9uQ2hhbmdl
ZCIpIHsKQEAgLTI4LDYgKzI5LDcgQEAgdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOwog
CiAgICAgICAgICAgICAvLyBXZSBzaG91bGQgZ2V0IGEgdG90YWwgb2YgNCBsaXZlIHJlZ2lvbiBj
aGFuZ2VzLgogICAgICAgICAgICAgaWYgKGxpdmVSZWdpb25DaGFuZ2VDb3VudCA9PSA0KSB7Cisg
ICAgICAgICAgICAgICBsaXZlUmVnaW9uLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CiAg
ICAgICAgICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zNyw3ICszOSw3IEBAIHZhciBzdWNjZXNzZnVs
bHlQYXJzZWQgPSBmYWxzZTsKICAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKIAogICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibGl2ZXJl
Z2lvbiIpLmZvY3VzKCk7Ci0gICAgICAgIHZhciBsaXZlUmVnaW9uID0gd2luZG93LmFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworICAgICAgICBsaXZlUmVnaW9uID0gd2lu
ZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OwogCiAgICAgICAgIHZh
ciBhZGRlZE5vdGlmaWNhdGlvbiA9IGxpdmVSZWdpb24uYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIo
YXJpYUNhbGxiYWNrKTsKICAgICAgICAgc2hvdWxkQmUoImFkZGVkTm90aWZpY2F0aW9uIiwgInRy
dWUiKTsKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEt
bGl2ZXJlZ2lvbnMtcmVtb3ZlZGVsZW1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtcmVt
b3ZlZGVsZW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1yZW1vdmVkZWxlbWVudC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK0FMRVJUOiBTdWNjZXNz
ZnVsbHkgcmVjZWl2ZWQgQVhMaXZlUmVnaW9uQ2hhbmdlZAorCitUaGlzIHRlc3RzIHRoYXQgQVJJ
QSByZW1vdmluZyBhbiBlbGVtZW50IGZyb20gYSBsaXZlIHJlZ2lvbiBzZW5kcyB0aGUgY29ycmVj
dCBub3RpZmljYXRpb24uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGFk
ZGVkTm90aWZpY2F0aW9uIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNz
aWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLXJlbW92ZWRlbGVtZW50Lmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9u
cy1yZW1vdmVkZWxlbWVudC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1yZW1vdmVkZWxlbWVudC5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+
Cis8c2NyaXB0PgordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOworPC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHkgaWQ9ImJvZHkiPgorCis8ZGl2IHJvbGU9Imdyb3VwIiB0
YWJpbmRleD0wIGlkPSJsaXZlcmVnaW9uIiBhcmlhLWxpdmU9InBvbGl0ZSIgYXJpYS1yZWxldmFu
dD0iYWRkaXRpb25zIj4KKzxoMyBpZD0iaW5uZXJsaXZlIj50ZXh0PC9oMz4KKzxpbWcgc3JjPSJ0
ZXN0LmdpZiIgd2lkdGg9MTAwIGhlaWdodD0xMDAgYWx0PSJhbHQgdGV4dCIgdGFiaW5kZXg9MCBp
ZD0iaW1hZ2UiPgorPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0
cyB0aGF0IEFSSUEgcmVtb3ZpbmcgYW4gZWxlbWVudCBmcm9tIGEgbGl2ZSByZWdpb24gc2VuZHMg
dGhlIGNvcnJlY3Qgbm90aWZpY2F0aW9uLiIpOworCisgICAgdmFyIGxpdmVSZWdpb24gPSAwOwor
ICAgIGZ1bmN0aW9uIGFyaWFDYWxsYmFjayhub3RpZmljYXRpb24pIHsKKyAgICAgICAgaWYgKG5v
dGlmaWNhdGlvbiA9PSAiQVhMaXZlUmVnaW9uQ2hhbmdlZCIpIHsKKyAgICAgICAgICAgYWxlcnQo
IlN1Y2Nlc3NmdWxseSByZWNlaXZlZCAiICsgbm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgbGl2
ZVJlZ2lvbi5yZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpOworICAgICAgICAgICB3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICB3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCisgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJsaXZlcmVnaW9uIikuZm9jdXMoKTsKKyAgICAgICAgbGl2ZVJlZ2lv
biA9IHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKworICAg
ICAgICB2YXIgYWRkZWROb3RpZmljYXRpb24gPSBsaXZlUmVnaW9uLmFkZE5vdGlmaWNhdGlvbkxp
c3RlbmVyKGFyaWFDYWxsYmFjayk7CisgICAgICAgIHNob3VsZEJlKCJhZGRlZE5vdGlmaWNhdGlv
biIsICJ0cnVlIik7CisKKyAgICAgICAgLy8gdGhpcyBzaG91bGQgdHJpZ2dlciBvdXIgbGl2ZSBy
ZWdpb24gY2FsbGJhY2sgZm9yIGEgcmVtb3ZlZCBlbGVtZW50LgorICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgibGl2ZXJlZ2lvbiIpLnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJpbm5lcmxpdmUiKSk7IAorICAgIH0KKworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9
IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9jaGFuZ2Utbm90aWZpY2F0aW9u
LW9uLXNjcm9sbC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9h
Y2Nlc3NpYmlsaXR5L2NoYW5nZS1ub3RpZmljYXRpb24tb24tc2Nyb2xsLmh0bWwJKHJldmlzaW9u
IDU3MTk1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvY2hhbmdl
LW5vdGlmaWNhdGlvbi1vbi1zY3JvbGwuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTEsMTAgKzEx
LDEyIEBAIGhlbGxvIGhlbGxvIGhlbGxvIGhlbGxvIGhlbGxvIGhlbGxvIGhlbGwKICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQogICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CiAKKyAgICB2YXIgdGV4dGFyZWEgPSAwOwogICAgIGZ1bmN0aW9uIGFy
aWFDYWxsYmFjayhub3RpZmljYXRpb24pIHsKICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbiA9PSAi
QVhWYWx1ZUNoYW5nZWQiKSB7CiAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInJlc3VsdCIpOwogICAgICAgICAgICAgcmVzdWx0LmlubmVySFRNTCA9ICJT
dWNjZXNzISI7IAorICAgICAgICAgICAgdGV4dGFyZWEucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVu
ZXIoKTsKICAgICAgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMiw3ICsyNCw3IEBAIGhlbGxvIGhlbGxvIGhlbGxv
IGhlbGxvIGhlbGxvIGhlbGxvIGhlbGwKICAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250
cm9sbGVyKSB7CiAgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CiAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0YXJlYSIpLmZvY3Vz
KCk7Ci0gICAgICAgIHZhciB0ZXh0YXJlYSA9IHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5mb2N1c2VkRWxlbWVudDsKKyAgICAgICAgdGV4dGFyZWEgPSB3aW5kb3cuYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CiAgICAgICAgIAogICAgICAgICB2YXIgYWRkZWRO
b3RpZmljYXRpb24gPSB0ZXh0YXJlYS5hZGROb3RpZmljYXRpb25MaXN0ZW5lcihhcmlhQ2FsbGJh
Y2spOwogICAgICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52746</attachid>
            <date>2010-04-07 10:19:46 -0700</date>
            <delta_ts>2010-04-09 23:10:39 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>31365</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzIxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDQtMDcgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBhcmlhLWxpdmVyZWdpb24tbm90aWZpY2F0aW9ucy5odG1sIGZhaWxzIG9uIGxlb3BhcmQgcmVs
ZWFzZSBib3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM3MTEyCisKKyAgICAgICAgQ2hhbmdlIHRoZSBtZXRob2QgdGhhdCBEUlQgdXNlcyB0byBtb25p
dG9yIEFYIG5vdGlmaWNhdGlvbnMgc28gdGhhdCBpdHMgcm9idXN0CisgICAgICAgIGJ5IGp1c3Qg
c2VuZGluZyBvdXQgTlNOb3RpZmljYXRpb24gdGhhdCBjYW4gYmUgbGlzdGVuZWQgdG8gYnkgYW55
b25lLCBpbnN0ZWFkCisgICAgICAgIG9mIGtlZXBpbmcgYSBzdGF0aWMgZnVuY3Rpb24gcG9pbnRl
ciBhcm91bmQuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgYWltZWQgdG8gYXZvaWQgZmxha2lu
ZXNzIHNlZW4gaW4gRFJUIHdoZW4gdGhlIG5vdGlmaWNhdGlvbiBoYW5kbGVycworICAgICAgICBh
cmUgbm90IGJlaW5nIGNhbGxlZCBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZS4KKworICAgICAgICBU
ZXN0czogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1hZGRlZGVs
ZW1lbnQuaHRtbAorICAgICAgICAgICAgICAgcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJp
YS1saXZlcmVnaW9ucy1jaGFuZ2VkYWx0Lmh0bWwKKyAgICAgICAgICAgICAgIHBsYXRmb3JtL21h
Yy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZHRleHQuaHRtbAorICAgICAg
ICAgICAgICAgcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1yZW1v
dmVkZWxlbWVudC5odG1sCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlci5tbToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgYWNjZXNzaWJpbGl0eVNldFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM6XSk6CisgICAgICAg
ICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmlj
YXRpb246XSk6CisKIDIwMTAtMDQtMDcgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5YXR0LgpJbmRleDogV2ViS2l0VG9vbHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24g
NTcyMTYpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwzMiBAQAorMjAxMC0wNC0wNyAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGFyaWEt
bGl2ZXJlZ2lvbi1ub3RpZmljYXRpb25zLmh0bWwgZmFpbHMgb24gbGVvcGFyZCByZWxlYXNlIGJv
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcxMTIK
KworICAgICAgICBDaGFuZ2UgdGhlIHdheSB0aGF0IG5vdGlmaWNhdGlvbnMgYXJlIGxpc3RlbmVk
IGZvciBieSBmb3JjaW5nIGNsaWVudHMKKyAgICAgICAgdG8gY2FsbCBhIHJlbW92ZSBsaXN0ZW5l
ciBhcyB3ZWxsIHRvIG1hdGNoIHRoZSBhZGQgbGlzdGVuZXIuIERSVCB3aWxsCisgICAgICAgIGFz
c2VydCBpZiB0aG9zZSBhcmUgbm90IGRvbmUgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuICAgICAgICAK
KworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwOgor
ICAgICAgICAocmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRKU0NsYXNzKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Lmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
bWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW06CisgICAgICAgICgtW0FjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyIGluaXRXaXRoUGxhdGZvcm1FbGVtZW50Ol0pOgorICAgICAg
ICAoLVtBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBkZWFsbG9jXSk6CisgICAgICAg
ICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIF9ub3RpZmljYXRpb25SZWNlaXZl
ZDpdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgc2V0Q2Fs
bGJhY2s6XSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6On5BY2Nlc3NpYmls
aXR5VUlFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlm
aWNhdGlvbkxpc3RlbmVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92
ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcik6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvd2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorCiAyMDEwLTAzLTMx
ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBB
ZGFtIEJhcnRoLgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTcyMTYpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOSBAQAorMjAxMC0wNC0wNyAgQ2hyaXMg
RmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIGFyaWEtbGl2ZXJlZ2lvbi1ub3RpZmljYXRpb25zLmh0
bWwgZmFpbHMgb24gbGVvcGFyZCByZWxlYXNlIGJvdAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcxMTIKKworICAgICAgICBBZGQgZm91ciBtb3JlIHRl
c3RzIHRoYXQgdGVzdCBzcGVjaWZpYyBsaXZlIHJlZ2lvbiBmdW5jdGlvbmFsaXR5LiBIYXZpbmcg
dGhlc2UKKyAgICAgICAgZm91ciB0ZXN0cyBydW4gaW4gb3JkZXIgc2VlbXMgdG8gc3RyZXNzIHRo
ZSBub3RpZmljYXRpb24gbWVjaGFuaXNtIGFuZCB3aWxsIGV4cG9zZSBpc3N1ZXMgCisgICAgICAg
IG1vcmUgZnJlcXVlbnRseS4KKyAgICAgICAgTW9kaWZ5IHRlc3RzIHRoYXQgdXNlIG5vdGlmaWNh
dGlvbiBsaXN0ZW5lcnMgdG8gYWxzbyAicmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIiLgorCisg
ICAgICAgICogcGxhdGZvcm0vbWFjLWxlb3BhcmQvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpc3Rib3gtc2VsZWN0ZWRjaGlsZHJlbi1jaGFuZ2Uu
aHRtbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdp
b24tb24taW1hZ2UuaHRtbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9h
cmlhLWxpdmVyZWdpb25zLWFkZGVkZWxlbWVudC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtYWRkZWRlbGVt
ZW50Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2Fy
aWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZGFsdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZGFsdC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxp
dmVyZWdpb25zLWNoYW5nZWR0ZXh0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1jaGFuZ2VkdGV4dC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVy
ZWdpb25zLW5vdGlmaWNhdGlvbnMuaHRtbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNz
aWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLXJlbW92ZWRlbGVtZW50LWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9u
cy1yZW1vdmVkZWxlbWVudC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNj
ZXNzaWJpbGl0eS9jaGFuZ2Utbm90aWZpY2F0aW9uLW9uLXNjcm9sbC5odG1sOgorCiAyMDEwLTA0
LTA2ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGF2ZSBIeWF0dC4KSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkocmV2aXNpb24gNTcxNjUpCisr
KyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjU3LDIyICsyNjU3LDE5IEBACiAgICAgcmV0dXJuIFtzdXBl
ciBhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVWYWx1ZXM6YXR0cmlidXRlIGluZGV4OmluZGV4
IG1heENvdW50Om1heENvdW50XTsKIH0KIAotLy8gVGhlc2UgYXJlIHVzZWQgYnkgRFJUIHNvIHRo
YXQgaXQgY2FuIGtub3cgd2hlbiBub3RpZmljYXRpb25zIGFyZSBzZW50LgotLy8gU2luY2UgdGhl
eSBhcmUgc3RhdGljLCBvbmx5IG9uZSBjYWxsYmFjayBjYW4gYmUgaW5zdGFsbGVkIGF0IGEgdGlt
ZSAodGhhdCdzIGFsbCBEUlQgc2hvdWxkIG5lZWQpLgotdHlwZWRlZiB2b2lkICgqQVhQb3N0ZWRO
b3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwgTlNTdHJpbmcqIG5vdGlmaWNhdGlvbiwg
dm9pZCogY29udGV4dCk7Ci1zdGF0aWMgQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjayBBWE5v
dGlmaWNhdGlvbkNhbGxiYWNrID0gMDsKLXN0YXRpYyB2b2lkKiBBWFBvc3RlZE5vdGlmaWNhdGlv
bkNvbnRleHQgPSAwOwotCi0tICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRQb3N0ZWROb3RpZmljYXRp
b25DYWxsYmFjazooQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjaylmdW5jdGlvbiB3aXRoQ29u
dGV4dDoodm9pZCopY29udGV4dAorLy8gVGhpcyBpcyBzZXQgYnkgRFJUIHdoZW4gaXQgd2FudHMg
dG8gbGlzdGVuIGZvciBub3RpZmljYXRpb25zLgorc3RhdGljIEJPT0wgQVhTaG91bGRSZXBvc3RO
b3RpZmljYXRpb25zID0gTk87CistICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRTaG91bGRSZXBvc3RO
b3RpZmljYXRpb25zOihCT09MKXJlcG9zdAogewotICAgIEFYTm90aWZpY2F0aW9uQ2FsbGJhY2sg
PSBmdW5jdGlvbjsKLSAgICBBWFBvc3RlZE5vdGlmaWNhdGlvbkNvbnRleHQgPSBjb250ZXh0Owor
ICAgIEFYU2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9ucyA9IHJlcG9zdDsKIH0KIAogLSAodm9pZClh
Y2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOihOU1N0cmluZyAqKW5vdGlmaWNhdGlvbgog
ewotICAgIGlmIChBWE5vdGlmaWNhdGlvbkNhbGxiYWNrKQotICAgICAgICBBWE5vdGlmaWNhdGlv
bkNhbGxiYWNrKHNlbGYsIG5vdGlmaWNhdGlvbiwgQVhQb3N0ZWROb3RpZmljYXRpb25Db250ZXh0
KTsKKyAgICBpZiAoQVhTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zKSB7CisgICAgICAgIE5TRGlj
dGlvbmFyeSogdXNlckluZm8gPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0Fu
ZEtleXM6bm90aWZpY2F0aW9uLCBAIm5vdGlmaWNhdGlvbiIsIG5pbF07CisgICAgICAgIFtbTlNO
b3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6QCJB
WERSVE5vdGlmaWNhdGlvbiIgb2JqZWN0Om5pbCB1c2VySW5mbzp1c2VySW5mb107CisgICAgfQog
fQogCiBAZW5kCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAkocmV2aXNpb24gNTcxNjUpCisrKyBXZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjE4LDYgKzYxOCwxMiBAQAogICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29u
dGV4dCwgc3VjY2VlZGVkKTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgcmVtb3ZlTm90aWZpY2F0
aW9uTGlzdGVuZXJDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
dG9BWEVsZW1lbnQodGhpc09iamVjdCktPnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCiAvLyBEZXN0cnVj
dGlvbgogCiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU09iamVjdFJlZiB0aGlzT2JqZWN0KQpAQCAt
NzIxLDYgKzcyNyw3IEBACiAgICAgICAgIHsgInNlbGVjdGVkUm93QXRJbmRleCIsIHNlbGVjdGVk
Um93QXRJbmRleENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImlzRXF1YWwiLCBpc0VxdWFs
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIiLCBh
ZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInJlbW92
ZU5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAogICAgICAgICB7ICJ0YWtlRm9jdXMiLCB0YWtlRm9jdXNDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogICAgICAgICB7ICJ0YWtlU2VsZWN0aW9uIiwgdGFrZVNlbGVjdGlvbkNhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCiAgICAgICAgIHsgImFkZFNlbGVjdGlvbiIsIGFkZFNlbGVjdGlvbkNhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwCShyZXZpc2lvbiA1NzE2NSkKKysr
IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50R3Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc3LDYgKzU3NywxMSBAQAogICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKK3sKKyAgICAvLyBGSVhNRTog
aW1wbGVtZW50Cit9CisKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2F0
aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYgZnVuY3Rpb25DYWxsYmFjaykKIHsKICAgICAvLyBGSVhN
RTogaW1wbGVtZW50CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQkocmV2aXNpb24gNTcxNjUp
CisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTcsMzMgKzU3LDExIEBACiAKIEBpbnRlcmZhY2Ug
TlNPYmplY3QgKFdlYktpdEFjY2Vzc2liaWxpdHlBZGRpdGlvbnMpCiAtIChOU0FycmF5ICopYWNj
ZXNzaWJpbGl0eUFycmF5QXR0cmlidXRlVmFsdWVzOihOU1N0cmluZyAqKWF0dHJpYnV0ZSBpbmRl
eDooTlNVSW50ZWdlcilpbmRleCBtYXhDb3VudDooTlNVSW50ZWdlciltYXhDb3VudDsKLS0gKHZv
aWQpYWNjZXNzaWJpbGl0eVNldFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiYWNrOihBWFBvc3RlZE5v
dGlmaWNhdGlvbkNhbGxiYWNrKWZ1bmN0aW9uIHdpdGhDb250ZXh0Oih2b2lkKiljb250ZXh0Owor
LSAodm9pZClhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczooQk9PTCly
ZXBvc3Q7CiAtIChOU1VJbnRlZ2VyKWFjY2Vzc2liaWxpdHlJbmRleE9mQ2hpbGQ6KGlkKWNoaWxk
OwogLSAoTlNVSW50ZWdlcilhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVDb3VudDooTlNTdHJp
bmcgKilhdHRyaWJ1dGU7CiBAZW5kCiAKLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCkKLSAgICA6IG1fZWxlbWVu
dChlbGVtZW50KQotICAgICwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKDApCi17Ci0g
ICAgW21fZWxlbWVudCByZXRhaW5dOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50KGNvbnN0IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQmIG90aGVyKQot
ICAgIDogbV9lbGVtZW50KG90aGVyLm1fZWxlbWVudCkKLSAgICAsIG1fbm90aWZpY2F0aW9uRnVu
Y3Rpb25DYWxsYmFjaygwKQotewotICAgIFttX2VsZW1lbnQgcmV0YWluXTsKLX0KLQotQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6fkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoKQotewotICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IG91ciBub3RpZmljYXRpb24gY2FsbGJhY2sgZG9lcyBub3Qgc3RpY2sgYXJv
dW5kLgotICAgIGlmIChtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spCi0gICAgICAgIFtt
X2VsZW1lbnQgYWNjZXNzaWJpbGl0eVNldFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiYWNrOjAgd2l0
aENvbnRleHQ6MF07Ci0gICAgW21fZWxlbWVudCByZWxlYXNlXTsKLX0KLQogQGludGVyZmFjZSBO
U1N0cmluZyAoSlNTdHJpbmdSZWZBZGRpdGlvbnMpCiArIChOU1N0cmluZyAqKXN0cmluZ1dpdGhK
U1N0cmluZ1JlZjooSlNTdHJpbmdSZWYpanNTdHJpbmdSZWY7CiAtIChKU1N0cmluZ1JlZiljcmVh
dGVKU1N0cmluZ1JlZjsKQEAgLTEwNyw2ICs4NSw3NiBAQAogCiBAZW5kCiAKK0BpbnRlcmZhY2Ug
QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgOiBOU09iamVjdAoreworICAgIGlkIG1f
cGxhdGZvcm1FbGVtZW50OworICAgIEpTT2JqZWN0UmVmIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25D
YWxsYmFjazsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gQWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvbkhhbmRsZXIKKworLSAoaWQpaW5pdFdpdGhQbGF0Zm9ybUVsZW1lbnQ6KGlkKXBsYXRm
b3JtRWxlbWVudAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisKKyAgICBtX3BsYXRmb3Jt
RWxlbWVudCA9IHBsYXRmb3JtRWxlbWVudDsKKyAgICAKKyAgICAvLyBPbmNlIHdoZW4gb2JqZWN0
IHN0YXJ0cyByZXF1ZXN0aW5nIG5vdGlmaWNhdGlvbnMsIGl0cyBvbiBmb3IgdGhlIGR1cmF0aW9u
IG9mIHRoZSBwcm9ncmFtLgorICAgIC8vIFRoaXMgaXMgdG8gYXZvaWQgYW55IHJhY2UgY29uZGl0
aW9ucyBiZXR3ZWVuIHRlc3RzIHR1cm5pbmcgdGhpcyBmbGFnIG9uIGFuZCBvZmYuIEluc3RlYWQK
KyAgICAvLyBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBjYW4ganVzdCBsaXN0ZW4g
d2hlbiB0aGV5IHdhbnQgdG8uCisgICAgW21fcGxhdGZvcm1FbGVtZW50IGFjY2Vzc2liaWxpdHlT
ZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOllFU107CisgICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihf
bm90aWZpY2F0aW9uUmVjZWl2ZWQ6KSBuYW1lOkAiQVhEUlROb3RpZmljYXRpb24iIG9iamVjdDpu
aWxdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisgCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBb
W05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZd
OworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClfbm90aWZpY2F0aW9uUmVjZWl2
ZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgTlNTdHJpbmcqIG5vdGlm
aWNhdGlvbk5hbWUgPSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkAibm90
aWZpY2F0aW9uIl07CisgICAgaWYgKCFub3RpZmljYXRpb25OYW1lKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzTm90aWZpY2F0aW9uKEFkb3B0
LCBbbm90aWZpY2F0aW9uTmFtZSBjcmVhdGVKU1N0cmluZ1JlZl0pOworICAgIEpTVmFsdWVSZWYg
YXJndW1lbnQgPSBKU1ZhbHVlTWFrZVN0cmluZyhbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRdLCBq
c05vdGlmaWNhdGlvbi5nZXQoKSk7CisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihbbWFpbkZy
YW1lIGdsb2JhbENvbnRleHRdLCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2ssIE5VTEws
IDEsICZhcmd1bWVudCwgTlVMTCk7Cit9CisKKy0gKHZvaWQpc2V0Q2FsbGJhY2s6KEpTT2JqZWN0
UmVmKWNhbGxiYWNrCit7CisgICAgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrID0gY2Fs
bGJhY2s7Cit9CisKK0BlbmQKKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50KQorICAgIDogbV9lbGVtZW50KGVs
ZW1lbnQpCisgICAgLCBtX25vdGlmaWNhdGlvbkhhbmRsZXIoMCkKK3sKKyAgICBbbV9lbGVtZW50
IHJldGFpbl07Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCYgb3RoZXIpCisgICAgOiBtX2VsZW1l
bnQob3RoZXIubV9lbGVtZW50KQorICAgICwgbV9ub3RpZmljYXRpb25IYW5kbGVyKDApCit7Cisg
ICAgW21fZWxlbWVudCByZXRhaW5dOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp+QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCgpCit7CisgICAgLy8gVGhlIG5vdGlmaWNhdGlvbiBoYW5kbGVy
IHNob3VsZCBiZSBuaWwgYmVjYXVzZSByZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpIHNob3Vs
ZCBoYXZlIGJlZW4gY2FsbGVkIGluIHRoZSB0ZXN0LgorICAgIGFzc2VydCghbV9ub3RpZmljYXRp
b25IYW5kbGVyKTsKKyAgICBbbV9lbGVtZW50IHJlbGVhc2VdOworfQorCiBzdGF0aWMgTlNTdHJp
bmcqIGRlc2NyaXB0aW9uT2ZWYWx1ZShpZCB2YWx1ZU9iamVjdCwgaWQgZm9jdXNlZEFjY2Vzc2li
aWxpdHlPYmplY3QpCiB7CiAgICAgaWYgKCF2YWx1ZU9iamVjdCkKQEAgLTc3NCwyOCArODIyLDI3
IEBACiAgICAgcmV0dXJuIFtbdXJsIGFic29sdXRlU3RyaW5nXSBjcmVhdGVKU1N0cmluZ1JlZl07
ICAgIAogfQogCi1zdGF0aWMgdm9pZCBfYWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkNhbGxiYWNr
KGlkIGVsZW1lbnQsIE5TU3RyaW5nKiBub3RpZmljYXRpb24sIHZvaWQqIGNvbnRleHQpCi17Ci0g
ICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU09iamVjdFJlZiBmdW5j
dGlvbkNhbGxiYWNrID0gc3RhdGljX2Nhc3Q8SlNPYmplY3RSZWY+KGNvbnRleHQpOwotCi0gICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzTm90aWZpY2F0aW9uKEFkb3B0LCBbbm90aWZpY2F0
aW9uIGNyZWF0ZUpTU3RyaW5nUmVmXSk7Ci0gICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFs
dWVNYWtlU3RyaW5nKFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIGpzTm90aWZpY2F0aW9uLmdl
dCgpKTsKLSAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKFttYWluRnJhbWUgZ2xvYmFsQ29udGV4
dF0sIGZ1bmN0aW9uQ2FsbGJhY2ssIE5VTEwsIDEsICZhcmd1bWVudCwgTlVMTCk7Ci19Ci0KIGJv
b2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmpl
Y3RSZWYgZnVuY3Rpb25DYWxsYmFjaykKIHsKICAgICBpZiAoIWZ1bmN0aW9uQ2FsbGJhY2spCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAKLSAgICBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJh
Y2sgPSBmdW5jdGlvbkNhbGxiYWNrOwotICAgIFtwbGF0Zm9ybVVJRWxlbWVudCgpIGFjY2Vzc2li
aWxpdHlTZXRQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjazpfYWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbkNhbGxiYWNrIHdpdGhDb250ZXh0OnJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fbm90aWZp
Y2F0aW9uRnVuY3Rpb25DYWxsYmFjayldOworICAgIC8vIEFscmVhZHkgYWRkZWQgb25jZS4KKyAg
ICBpZiAobV9ub3RpZmljYXRpb25IYW5kbGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgbV9ub3RpZmljYXRpb25IYW5kbGVyID0gW1tBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9u
SGFuZGxlciBhbGxvY10gaW5pdFdpdGhQbGF0Zm9ybUVsZW1lbnQ6cGxhdGZvcm1VSUVsZW1lbnQo
KV07CisgICAgWyhBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciopbV9ub3RpZmljYXRp
b25IYW5kbGVyIHNldENhbGxiYWNrOmZ1bmN0aW9uQ2FsbGJhY2tdOworCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlTm90aWZpY2F0aW9u
TGlzdGVuZXIoKQoreworICAgIFsoaWQpbV9ub3RpZmljYXRpb25IYW5kbGVyIHJlbGVhc2VdOwor
ICAgIG1fbm90aWZpY2F0aW9uSGFuZGxlciA9IDA7Cit9CisKIGJvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNTZWxlY3RhYmxlKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50
CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudC5oCShyZXZpc2lvbiA1NzE2NSkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDEyICsx
NzMsMTQgQEAKICAgICAvLyBOb3RpZmljYXRpb25zCiAgICAgLy8gRnVuY3Rpb24gY2FsbGJhY2sg
c2hvdWxkIHRha2Ugb25lIGFyZ3VtZW50LCB0aGUgbmFtZSBvZiB0aGUgbm90aWZpY2F0aW9uLgog
ICAgIGJvb2wgYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYgZnVuY3Rpb25DYWxs
YmFjayk7CisgICAgLy8gTWFrZSBzdXJlIHlvdSBjYWxsIHJlbW92ZSwgYmVjYXVzZSB5b3UgY2Fu
J3QgcmVseSBvbiBvYmplY3RzIGJlaW5nIGRlYWxsb2NhdGVkIGluIGEgdGltZWx5IGZhc2hpb24u
CisgICAgdm9pZCByZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpOwogICAgIAogcHJpdmF0ZToK
ICAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRKU0NsYXNzKCk7CiAKICAgICBQbGF0Zm9ybVVJRWxl
bWVudCBtX2VsZW1lbnQ7Ci0gICAgSlNPYmplY3RSZWYgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNh
bGxiYWNrOworICAgIHZvaWQqIG1fbm90aWZpY2F0aW9uSGFuZGxlcjsKIH07CiAKICNlbmRpZiAv
LyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50X2gKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVudFdpbi5jcHAJ
KHJldmlzaW9uIDU3MTY1KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDgsNiArNTQ4LDEx
IEBACiAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CiB9CiAK
K3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIo
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwogYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxi
YWNrKQogewogICAgIGlmICghZnVuY3Rpb25DYWxsYmFjaykKSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZGFsdC1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvYXJpYS1saXZlcmVnaW9ucy1jaGFuZ2VkYWx0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJl
Z2lvbnMtY2hhbmdlZGFsdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIg
QEAKK0FMRVJUOiBTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgQVhMaXZlUmVnaW9uQ2hhbmdlZAorCitU
aGlzIHRlc3RzIHRoYXQgY2hhbmdpbmcgdGhlIGFsdCB0YWcgb2YgYW4gaW1hZ2UgaW4gYSBsaXZl
IHJlZ2lvbiB0cmlnZ2VycyBhIGxpdmUgcmVnaW9uIG5vdGlmaWNhdGlvbi4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYWRkZWROb3RpZmljYXRpb24gaXMgdHJ1ZQorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hh
bmdlZHRleHQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZHRleHQtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxp
dHkvYXJpYS1saXZlcmVnaW9ucy1jaGFuZ2VkdGV4dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTMgQEAKK0FMRVJUOiBTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgQVhMaXZlUmVn
aW9uQ2hhbmdlZAorY2hhbmdlZCB0ZXh0CisKK1RoaXMgdGVzdHMgdGhhdCB3aGVuIHlvdSBjaGFu
Z2UgdGV4dCBpbiBhIGxpdmUgcmVnaW9uLCB0aGUgcHJvcGVyIG5vdGlmaWNhdGlvbiBpcyBzZW50
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBhZGRlZE5vdGlmaWNhdGlv
biBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1s
aXN0Ym94LXNlbGVjdGVkY2hpbGRyZW4tY2hhbmdlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXN0Ym94LXNlbGVjdGVkY2hp
bGRyZW4tY2hhbmdlLmh0bWwJKHJldmlzaW9uIDU3MTY1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXN0Ym94LXNlbGVjdGVkY2hpbGRyZW4tY2hhbmdl
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKIAogICAgIGRlc2NyaXB0aW9u
KCJUaGlzIHRlc3RzIHRoYXQgd2hlbiBhcmlhLXNlbGVjdGVkIGlzIGNoYW5nZWQgaW4gYSBsaXN0
Ym94LCB0aGUgY29ycmVjdCBub3RpZmljYXRpb24gaXMgc2VudC4iKTsKIAorICAgIHZhciBsaXN0
Ym94ID0gMDsKICAgICB2YXIgbm90aWZpY2F0aW9uQ291bnQgPSAwOwogICAgIGZ1bmN0aW9uIGFy
aWFDYWxsYmFjayhub3RpZmljYXRpb24pIHsKICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbiA9PSAi
QVhTZWxlY3RlZENoaWxkcmVuQ2hhbmdlZCIpIHsKQEAgLTI5LDYgKzMwLDcgQEAKIAogICAgICAg
ICAgICAgLy8gV2Ugc2hvdWxkIGdldCBhIHRvdGFsIG9mIDQgbGl2ZSByZWdpb24gY2hhbmdlcy4K
ICAgICAgICAgICAgIGlmIChub3RpZmljYXRpb25Db3VudCA9PSAyKSB7CisgICAgICAgICAgICAg
ICBsaXN0Ym94LnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CiAgICAgICAgICAgICAgICB3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC0zOCw3ICs0MCw3IEBACiAgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCk7CiAKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImxpc3Rib3giKS5mb2N1cygpOwotICAgICAgICB2YXIgbGlzdGJveCA9IHdpbmRvdy5hY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKyAgICAgICAgbGlzdGJveCA9IHdp
bmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKIAogICAgICAgICB2
YXIgYWRkZWROb3RpZmljYXRpb24gPSBsaXN0Ym94LmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKGFy
aWFDYWxsYmFjayk7CiAgICAgICAgIHNob3VsZEJlKCJhZGRlZE5vdGlmaWNhdGlvbiIsICJ0cnVl
Iik7CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxp
dmVyZWdpb25zLWFkZGVkZWxlbWVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1hZGRlZGVs
ZW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1hZGRlZGVsZW1lbnQtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACitBTEVSVDogU3VjY2Vzc2Z1bGx5IHJl
Y2VpdmVkIEFYTGl2ZVJlZ2lvbkNoYW5nZWQKK3RleHQKKworaGVsbG9uZXcgdGV4dCBlbGVtZW50
CitUaGlzIHRlc3RzIHRoYXQgYWRkaW5nIGFuIGVsZW1lbnQgdG8gYSBsaXZlIHJlZ2lvbiB3aWxs
IHRyaWdnZXIgdGhlIHJpZ2h0IG5vdGlmaWNhdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgYWRkZWROb3RpZmljYXRpb24gaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZGFsdC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2Fy
aWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZGFsdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1jaGFuZ2VkYWx0
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisKKzxkaXYgcm9sZT0iZ3Jv
dXAiIHRhYmluZGV4PTAgaWQ9ImxpdmVyZWdpb24iIGFyaWEtbGl2ZT0icG9saXRlIiBhcmlhLXJl
bGV2YW50PSJhZGRpdGlvbnMiPgorPGltZyBzcmM9InRlc3QuZ2lmIiB3aWR0aD0xMDAgaGVpZ2h0
PTEwMCBhbHQ9ImFsdCB0ZXh0IiBpZD0iaW1hZ2UiPgorPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBk
ZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IGNoYW5naW5nIHRoZSBhbHQgdGFnIG9mIGFuIGlt
YWdlIGluIGEgbGl2ZSByZWdpb24gdHJpZ2dlcnMgYSBsaXZlIHJlZ2lvbiBub3RpZmljYXRpb24u
Iik7CisKKyAgICB2YXIgbGl2ZVJlZ2lvbkFsdCA9IDA7CisgICAgZnVuY3Rpb24gYXJpYUNhbGxi
YWNrQWx0KG5vdGlmaWNhdGlvbikgeworICAgICAgICBpZiAobm90aWZpY2F0aW9uID09ICJBWExp
dmVSZWdpb25DaGFuZ2VkIikgeworICAgICAgICAgICBhbGVydCgiU3VjY2Vzc2Z1bGx5IHJlY2Vp
dmVkICIgKyBub3RpZmljYXRpb24pOworICAgICAgICAgICBsaXZlUmVnaW9uQWx0LnJlbW92ZU5v
dGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAod2luZG93LmFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImxpdmVyZWdpb24iKS5mb2N1cygpOworICAgICAgICBsaXZlUmVnaW9uQWx0ID0gd2luZG93LmFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworCisgICAgICAgIHZhciBhZGRl
ZE5vdGlmaWNhdGlvbiA9IGxpdmVSZWdpb25BbHQuYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoYXJp
YUNhbGxiYWNrQWx0KTsKKyAgICAgICAgc2hvdWxkQmUoImFkZGVkTm90aWZpY2F0aW9uIiwgInRy
dWUiKTsKKworICAgICAgICAvLyB0aGlzIHNob3VsZCBhbHNvIHRyaWdnZXIgb3VyIGxpdmUgcmVn
aW9uIGNoYW5nZSBiZWNhdXNlIGl0cyBhIHRleHQgYWx0ZXJuYXRpdmUgY2hhbmdlLiAKKyAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImltYWdlIikuc2V0QXR0cmlidXRlKCdhbHQnLCAi
bmV3IGltYWdlIHRleHQiKTsKKyAgICB9CisKKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1jaGFuZ2Vk
dGV4dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3Np
YmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZHRleHQuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMt
Y2hhbmdlZHRleHQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdD4KK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxz
ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKworPGRp
diByb2xlPSJncm91cCIgdGFiaW5kZXg9MCBpZD0ibGl2ZXJlZ2lvbiIgYXJpYS1saXZlPSJwb2xp
dGUiIGFyaWEtcmVsZXZhbnQ9ImFkZGl0aW9ucyI+Cis8aDMgaWQ9ImlubmVybGl2ZSI+dGV4dDwv
aDM+Cis8L2Rpdj4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKworPHNjcmlwdD4KKworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQg
d2hlbiB5b3UgY2hhbmdlIHRleHQgaW4gYSBsaXZlIHJlZ2lvbiwgdGhlIHByb3BlciBub3RpZmlj
YXRpb24gaXMgc2VudC4iKTsKKworICAgIHZhciBsaXZlUmVnaW9uVGV4dCA9IDA7CisgICAgZnVu
Y3Rpb24gYXJpYUNhbGxiYWNrVGV4dChub3RpZmljYXRpb24pIHsKKyAgICAgICAgaWYgKG5vdGlm
aWNhdGlvbiA9PSAiQVhMaXZlUmVnaW9uQ2hhbmdlZCIpIHsKKyAgICAgICAgICAgYWxlcnQoIlN1
Y2Nlc3NmdWxseSByZWNlaXZlZCAiICsgbm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgbGl2ZVJl
Z2lvblRleHQucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKKyAgICAgICAgICAgd2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgd2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworICAgICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgibGl2ZXJlZ2lvbiIpLmZvY3VzKCk7CisgICAgICAgIGxpdmVSZWdp
b25UZXh0ID0gd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50Owor
CisgICAgICAgIHZhciBhZGRlZE5vdGlmaWNhdGlvbiA9IGxpdmVSZWdpb25UZXh0LmFkZE5vdGlm
aWNhdGlvbkxpc3RlbmVyKGFyaWFDYWxsYmFja1RleHQpOworICAgICAgICBzaG91bGRCZSgiYWRk
ZWROb3RpZmljYXRpb24iLCAidHJ1ZSIpOworCisgICAgICAgIC8vIHRoaXMgc2hvdWxkIHRyaWdn
ZXIgb3VyIGxpdmUgcmVnaW9uIGNhbGxiYWNrIGZvciBhIHRleHQgY2hhbmdlLgorICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW5uZXJsaXZlIikuaW5uZXJUZXh0ID0gImNoYW5nZWQg
dGV4dCI7CisgICAgfQorCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0
PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtYWRkZWRlbGVtZW50Lmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJp
YS1saXZlcmVnaW9ucy1hZGRlZGVsZW1lbnQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtYWRkZWRlbGVt
ZW50Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIj4KKzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisKKzxkaXYgcm9sZT0i
Z3JvdXAiIHRhYmluZGV4PTAgaWQ9ImxpdmVyZWdpb24iIGFyaWEtbGl2ZT0icG9saXRlIiBhcmlh
LXJlbGV2YW50PSJhZGRpdGlvbnMiPgorPGgzIGlkPSJpbm5lcmxpdmUiPnRleHQ8L2gzPgorPGRp
diBpZD0iYWRkcmVnaW9uIj5oZWxsbzwvZGl2PgorPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBkZXNj
cmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IGFkZGluZyBhbiBlbGVtZW50IHRvIGEgbGl2ZSByZWdp
b24gd2lsbCB0cmlnZ2VyIHRoZSByaWdodCBub3RpZmljYXRpb24uIik7CisKKyAgICB2YXIgbGl2
ZVJlZ2lvbiA9IDA7CisgICAgZnVuY3Rpb24gYXJpYUNhbGxiYWNrKG5vdGlmaWNhdGlvbikgewor
ICAgICAgICBpZiAobm90aWZpY2F0aW9uID09ICJBWExpdmVSZWdpb25DaGFuZ2VkIikgeworICAg
ICAgICAgICBhbGVydCgiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkICIgKyBub3RpZmljYXRpb24pOwor
ICAgICAgICAgICBsaXZlUmVnaW9uLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAg
ICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7Cisg
ICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKKyAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxpdmVyZWdpb24iKS5mb2N1cygpOworICAg
ICAgICBsaXZlUmVnaW9uID0gd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRF
bGVtZW50OworCisgICAgICAgIHZhciBhZGRlZE5vdGlmaWNhdGlvbiA9IGxpdmVSZWdpb24uYWRk
Tm90aWZpY2F0aW9uTGlzdGVuZXIoYXJpYUNhbGxiYWNrKTsKKyAgICAgICAgc2hvdWxkQmUoImFk
ZGVkTm90aWZpY2F0aW9uIiwgInRydWUiKTsKKworICAgICAgICAvLyB0aGlzIHNob3VsZCB0cmln
Z2VyIG91ciBsaXZlIHJlZ2lvbiBjYWxsYmFjayBmb3IgYSBuZXcgZWxlbWVudC4KKyAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkZHJlZ2lvbiIpLmlubmVySFRNTCArPSAibmV3IHRl
eHQgZWxlbWVudCI7CisgICAgfQorCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwv
c2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtbm90aWZpY2F0aW9u
cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmls
aXR5L2FyaWEtbGl2ZXJlZ2lvbnMtbm90aWZpY2F0aW9ucy5odG1sCShyZXZpc2lvbiA1NzE2NSkK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lv
bnMtbm90aWZpY2F0aW9ucy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAK
ICAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IEFSSUEgbGl2ZSByZWdpb25zIGFyZSBz
ZW5kaW5nIG91dCB0aGUgY29ycmVjdCBub3RpZmljYXRpb25zLiBXZSBwZXJmb3JtIGZvdXIgb3Bl
cmF0aW9ucyAoYWRkLCByZW1vdmUsIGNoYW5nZSB0ZXh0LCBjaGFuZ2UgYWx0IHRhZyksIGVhY2gg
b25lIHNob3VsZCB0cmlnZ2VyIGEgbGl2ZSByZWdpb24gbm90aWZpY2F0aW9uIik7CiAKKyAgICB2
YXIgbGl2ZVJlZ2lvbiA9IDA7CiAgICAgdmFyIGxpdmVSZWdpb25DaGFuZ2VDb3VudCA9IDA7CiAg
ICAgZnVuY3Rpb24gYXJpYUNhbGxiYWNrKG5vdGlmaWNhdGlvbikgewogICAgICAgICBpZiAobm90
aWZpY2F0aW9uID09ICJBWExpdmVSZWdpb25DaGFuZ2VkIikgewpAQCAtMjgsNiArMjksNyBAQAog
CiAgICAgICAgICAgICAvLyBXZSBzaG91bGQgZ2V0IGEgdG90YWwgb2YgNCBsaXZlIHJlZ2lvbiBj
aGFuZ2VzLgogICAgICAgICAgICAgaWYgKGxpdmVSZWdpb25DaGFuZ2VDb3VudCA9PSA0KSB7Cisg
ICAgICAgICAgICAgICBsaXZlUmVnaW9uLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CiAg
ICAgICAgICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zNyw3ICszOSw3IEBACiAgICAgICAgIHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiAKICAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImxpdmVyZWdpb24iKS5mb2N1cygpOwotICAgICAgICB2YXIgbGl2
ZVJlZ2lvbiA9IHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsK
KyAgICAgICAgbGl2ZVJlZ2lvbiA9IHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1
c2VkRWxlbWVudDsKIAogICAgICAgICB2YXIgYWRkZWROb3RpZmljYXRpb24gPSBsaXZlUmVnaW9u
LmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKGFyaWFDYWxsYmFjayk7CiAgICAgICAgIHNob3VsZEJl
KCJhZGRlZE5vdGlmaWNhdGlvbiIsICJ0cnVlIik7CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvYWNjZXNzaWJpbGl0eS9jaGFuZ2Utbm90aWZpY2F0aW9uLW9uLXNjcm9sbC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2NoYW5n
ZS1ub3RpZmljYXRpb24tb24tc2Nyb2xsLmh0bWwJKHJldmlzaW9uIDU3MTY1KQorKysgTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvY2hhbmdlLW5vdGlmaWNhdGlvbi1vbi1z
Y3JvbGwuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTEsMTAgKzExLDEyIEBACiAgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOwogCisgICAgdmFyIHRleHRhcmVhID0gMDsKICAgICBmdW5jdGlvbiBhcmlh
Q2FsbGJhY2sobm90aWZpY2F0aW9uKSB7CiAgICAgICAgIGlmIChub3RpZmljYXRpb24gPT0gIkFY
VmFsdWVDaGFuZ2VkIikgewogICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJyZXN1bHQiKTsKICAgICAgICAgICAgIHJlc3VsdC5pbm5lckhUTUwgPSAiU3Vj
Y2VzcyEiOyAKKyAgICAgICAgICAgIHRleHRhcmVhLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVy
KCk7CiAgICAgICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OwogICAgICAgICB9CiAgICAgfQpAQCAtMjIsNyArMjQsNyBAQAogICAgIGlmICh3aW5kb3cuYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKICAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRl
eHRhcmVhIikuZm9jdXMoKTsKLSAgICAgICAgdmFyIHRleHRhcmVhID0gd2luZG93LmFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworICAgICAgICB0ZXh0YXJlYSA9IHdpbmRv
dy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKICAgICAgICAgCiAgICAg
ICAgIHZhciBhZGRlZE5vdGlmaWNhdGlvbiA9IHRleHRhcmVhLmFkZE5vdGlmaWNhdGlvbkxpc3Rl
bmVyKGFyaWFDYWxsYmFjayk7CiAgICAgICAgIApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9uLW9uLWltYWdlLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVn
aW9uLW9uLWltYWdlLmh0bWwJKHJldmlzaW9uIDU3MTY1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9uLW9uLWltYWdlLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTE4LDggKzE4LDEwIEBACiAKICAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0
cyB0aGF0IEFSSUEgbGl2ZSByZWdpb25zIHRoYXQgaXMgb24gYW4gaW1hZ2Ugd2lsbCB3b3JrIHdo
ZW4gdGhlIGFsdCB0YWcgaXMgY2hhbmdlZC4iKTsKIAorICAgIHZhciBpbWFnZSA9IDA7CiAgICAg
ZnVuY3Rpb24gYXJpYUNhbGxiYWNrKG5vdGlmaWNhdGlvbikgewogICAgICAgICBpZiAobm90aWZp
Y2F0aW9uID09ICJBWExpdmVSZWdpb25DaGFuZ2VkIikgeworICAgICAgICAgICAgaW1hZ2UucmVt
b3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKICAgICAgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yOCw3ICszMCw3
IEBACiAgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CiAKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImltYWdlIikuZm9jdXMoKTsKLSAg
ICAgICAgdmFyIGltYWdlID0gd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRF
bGVtZW50OworICAgICAgICBpbWFnZSA9IHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5m
b2N1c2VkRWxlbWVudDsKIAogICAgICAgICB2YXIgYWRkZWROb3RpZmljYXRpb24gPSBpbWFnZS5h
ZGROb3RpZmljYXRpb25MaXN0ZW5lcihhcmlhQ2FsbGJhY2spOwogICAgICAgICBzaG91bGRCZSgi
YWRkZWROb3RpZmljYXRpb24iLCAidHJ1ZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1yZW1vdmVkZWxlbWVudC1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxp
dHkvYXJpYS1saXZlcmVnaW9ucy1yZW1vdmVkZWxlbWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVy
ZWdpb25zLXJlbW92ZWRlbGVtZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMiBAQAorQUxFUlQ6IFN1Y2Nlc3NmdWxseSByZWNlaXZlZCBBWExpdmVSZWdpb25DaGFuZ2Vk
CisKK1RoaXMgdGVzdHMgdGhhdCBBUklBIHJlbW92aW5nIGFuIGVsZW1lbnQgZnJvbSBhIGxpdmUg
cmVnaW9uIHNlbmRzIHRoZSBjb3JyZWN0IG5vdGlmaWNhdGlvbi4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1MgYWRkZWROb3RpZmljYXRpb24gaXMgdHJ1ZQorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtcmVtb3ZlZGVs
ZW1lbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNz
aWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLXJlbW92ZWRlbGVtZW50Lmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdp
b25zLXJlbW92ZWRlbGVtZW50Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKzwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhl
YWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2Vk
ID0gZmFsc2U7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+
CisKKzxkaXYgcm9sZT0iZ3JvdXAiIHRhYmluZGV4PTAgaWQ9ImxpdmVyZWdpb24iIGFyaWEtbGl2
ZT0icG9saXRlIiBhcmlhLXJlbGV2YW50PSJhZGRpdGlvbnMiPgorPGgzIGlkPSJpbm5lcmxpdmUi
PnRleHQ8L2gzPgorPGltZyBzcmM9InRlc3QuZ2lmIiB3aWR0aD0xMDAgaGVpZ2h0PTEwMCBhbHQ9
ImFsdCB0ZXh0IiB0YWJpbmRleD0wIGlkPSJpbWFnZSI+Cis8L2Rpdj4KKworPHAgaWQ9ImRlc2Ny
aXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KKworICAg
IGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQgQVJJQSByZW1vdmluZyBhbiBlbGVtZW50IGZy
b20gYSBsaXZlIHJlZ2lvbiBzZW5kcyB0aGUgY29ycmVjdCBub3RpZmljYXRpb24uIik7CisKKyAg
ICB2YXIgbGl2ZVJlZ2lvbiA9IDA7CisgICAgZnVuY3Rpb24gYXJpYUNhbGxiYWNrKG5vdGlmaWNh
dGlvbikgeworICAgICAgICBpZiAobm90aWZpY2F0aW9uID09ICJBWExpdmVSZWdpb25DaGFuZ2Vk
IikgeworICAgICAgICAgICBhbGVydCgiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkICIgKyBub3RpZmlj
YXRpb24pOworICAgICAgICAgICBsaXZlUmVnaW9uLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVy
KCk7CisgICAgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9s
bGVyKSB7CisgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7CisKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxpdmVyZWdpb24iKS5mb2N1
cygpOworICAgICAgICBsaXZlUmVnaW9uID0gd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmZvY3VzZWRFbGVtZW50OworCisgICAgICAgIHZhciBhZGRlZE5vdGlmaWNhdGlvbiA9IGxpdmVS
ZWdpb24uYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoYXJpYUNhbGxiYWNrKTsKKyAgICAgICAgc2hv
dWxkQmUoImFkZGVkTm90aWZpY2F0aW9uIiwgInRydWUiKTsKKworICAgICAgICAvLyB0aGlzIHNo
b3VsZCB0cmlnZ2VyIG91ciBsaXZlIHJlZ2lvbiBjYWxsYmFjayBmb3IgYSByZW1vdmVkIGVsZW1l
bnQuCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsaXZlcmVnaW9uIikucmVtb3Zl
Q2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlubmVybGl2ZSIpKTsgCisgICAgfQorCisg
ICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="36311"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53032</attachid>
            <date>2010-04-09 23:10:39 -0700</date>
            <delta_ts>2010-04-20 12:51:05 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>33618</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzQwNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDQtMDkgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBhcmlhLWxpdmVyZWdpb24tbm90aWZpY2F0aW9ucy5odG1sIGZhaWxzIG9uIGxlb3BhcmQgcmVs
ZWFzZSBib3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM3MTEyCisKKyAgICAgICAgQ2hhbmdlIHRoZSBtZXRob2QgdGhhdCBEUlQgdXNlcyB0byBtb25p
dG9yIEFYIG5vdGlmaWNhdGlvbnMgc28gdGhhdCBpdHMgcm9idXN0CisgICAgICAgIGJ5IGp1c3Qg
c2VuZGluZyBvdXQgTlNOb3RpZmljYXRpb24gdGhhdCBjYW4gYmUgbGlzdGVuZWQgdG8gYnkgYW55
b25lLCBpbnN0ZWFkCisgICAgICAgIG9mIGtlZXBpbmcgYSBzdGF0aWMgZnVuY3Rpb24gcG9pbnRl
ciBhcm91bmQuCisgIAorICAgICAgICBUaGlzIGNoYW5nZSBpcyBhaW1lZCB0byBhdm9pZCBmbGFr
aW5lc3Mgc2VlbiBpbiBEUlQgd2hlbiB0aGUgbm90aWZpY2F0aW9uIGhhbmRsZXJzCisgICAgICAg
IGFyZSBub3QgYmVpbmcgY2FsbGVkIGF0IHRoZSBhcHByb3ByaWF0ZSB0aW1lLgorCisgICAgICAg
IFRlc3RzOiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLWFkZGVk
ZWxlbWVudC5odG1sCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9h
cmlhLWxpdmVyZWdpb25zLWNoYW5nZWRhbHQuaHRtbAorICAgICAgICAgICAgICAgcGxhdGZvcm0v
bWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1jaGFuZ2VkdGV4dC5odG1sCisgICAg
ICAgICAgICAgICBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLXJl
bW92ZWRlbGVtZW50Lmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIubW06CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIGFjY2Vzc2liaWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOl0pOgorICAg
ICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5UG9zdGVkTm90
aWZpY2F0aW9uOl0pOgorCiAyMDEwLTA0LTA5ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KSW5kZXg6
IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyLmgJKHJldmlzaW9uIDU3MTk1KQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21h
Yy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1
Myw3IEBAIEBpbnRlcmZhY2UgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgOiAKIC0gKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3QqKWFjY2Vzc2liaWxpdHlPYmplY3Q7CiAKIC8vIFVzZWQg
dG8gaW5mb3JtIGFuIGVsZW1lbnQgd2hlbiBhIG5vdGlmaWNhdGlvbiBpcyBwb3N0ZWQgZm9yIGl0
LiBVc2VkIGJ5IERSVC4KLS0gKHZvaWQpYWNjZXNzaWJpbGl0eVBvc3RlZE5vdGlmaWNhdGlvbjoo
TlNTdHJpbmcgKilub3RpZmljYXRpb247CistICh2b2lkKWFjY2Vzc2liaWxpdHlQb3N0ZWROb3Rp
ZmljYXRpb246KE5TU3RyaW5nICopbm90aWZpY2F0aW9uTmFtZTsKIAogLSAoTlNWaWV3KilhdHRh
Y2htZW50VmlldzsKIApJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCShyZXZpc2lvbiA1NzE5NSkKKysrIFdl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI2NTcsMjIgKzI2NTcsMTkgQEAgLSAoTlNBcnJheSAqKWFjY2Vzc2li
aWxpdHlBcnJheUF0dHJpYnV0ZQogICAgIHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUFycmF5
QXR0cmlidXRlVmFsdWVzOmF0dHJpYnV0ZSBpbmRleDppbmRleCBtYXhDb3VudDptYXhDb3VudF07
CiB9CiAKLS8vIFRoZXNlIGFyZSB1c2VkIGJ5IERSVCBzbyB0aGF0IGl0IGNhbiBrbm93IHdoZW4g
bm90aWZpY2F0aW9ucyBhcmUgc2VudC4KLS8vIFNpbmNlIHRoZXkgYXJlIHN0YXRpYywgb25seSBv
bmUgY2FsbGJhY2sgY2FuIGJlIGluc3RhbGxlZCBhdCBhIHRpbWUgKHRoYXQncyBhbGwgRFJUIHNo
b3VsZCBuZWVkKS4KLXR5cGVkZWYgdm9pZCAoKkFYUG9zdGVkTm90aWZpY2F0aW9uQ2FsbGJhY2sp
KGlkIGVsZW1lbnQsIE5TU3RyaW5nKiBub3RpZmljYXRpb24sIHZvaWQqIGNvbnRleHQpOwotc3Rh
dGljIEFYUG9zdGVkTm90aWZpY2F0aW9uQ2FsbGJhY2sgQVhOb3RpZmljYXRpb25DYWxsYmFjayA9
IDA7Ci1zdGF0aWMgdm9pZCogQVhQb3N0ZWROb3RpZmljYXRpb25Db250ZXh0ID0gMDsKLQotLSAo
dm9pZClhY2Nlc3NpYmlsaXR5U2V0UG9zdGVkTm90aWZpY2F0aW9uQ2FsbGJhY2s6KEFYUG9zdGVk
Tm90aWZpY2F0aW9uQ2FsbGJhY2spZnVuY3Rpb24gd2l0aENvbnRleHQ6KHZvaWQqKWNvbnRleHQK
Ky8vIFRoaXMgaXMgc2V0IGJ5IERSVCB3aGVuIGl0IHdhbnRzIHRvIGxpc3RlbiBmb3Igbm90aWZp
Y2F0aW9ucy4KK3N0YXRpYyBCT09MIEFYU2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9ucyA9IE5POwor
LSAodm9pZClhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczooQk9PTCly
ZXBvc3QKIHsKLSAgICBBWE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb247Ci0gICAgQVhQ
b3N0ZWROb3RpZmljYXRpb25Db250ZXh0ID0gY29udGV4dDsKKyAgICBBWFNob3VsZFJlcG9zdE5v
dGlmaWNhdGlvbnMgPSByZXBvc3Q7CiB9CiAKLS0gKHZvaWQpYWNjZXNzaWJpbGl0eVBvc3RlZE5v
dGlmaWNhdGlvbjooTlNTdHJpbmcgKilub3RpZmljYXRpb24KKy0gKHZvaWQpYWNjZXNzaWJpbGl0
eVBvc3RlZE5vdGlmaWNhdGlvbjooTlNTdHJpbmcgKilub3RpZmljYXRpb25OYW1lCiB7Ci0gICAg
aWYgKEFYTm90aWZpY2F0aW9uQ2FsbGJhY2spCi0gICAgICAgIEFYTm90aWZpY2F0aW9uQ2FsbGJh
Y2soc2VsZiwgbm90aWZpY2F0aW9uLCBBWFBvc3RlZE5vdGlmaWNhdGlvbkNvbnRleHQpOworICAg
IGlmIChBWFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnMpIHsKKyAgICAgICAgTlNEaWN0aW9uYXJ5
KiB1c2VySW5mbyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpu
b3RpZmljYXRpb25OYW1lLCBAIm5vdGlmaWNhdGlvbk5hbWUiLCBuaWxdOworICAgICAgICBbW05T
Tm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHBvc3ROb3RpZmljYXRpb25OYW1lOkAi
QVhEUlROb3RpZmljYXRpb24iIG9iamVjdDpuaWwgdXNlckluZm86dXNlckluZm9dOworICAgIH0K
IH0KIAogQGVuZApJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNTc0MDUpCisrKyBXZWJLaXRUb29scy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wNC0wOSAgQ2hyaXMg
RmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIGFyaWEtbGl2ZXJlZ2lvbi1ub3RpZmljYXRpb25zLmh0
bWwgZmFpbHMgb24gbGVvcGFyZCByZWxlYXNlIGJvdAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcxMTIKKworICAgICAgICBDaGFuZ2UgdGhlIHdheSB0
aGF0IG5vdGlmaWNhdGlvbnMgYXJlIGxpc3RlbmVkIGZvciBieSBmb3JjaW5nIGNsaWVudHMKKyAg
ICAgICAgdG8gY2FsbCBhIHJlbW92ZSBsaXN0ZW5lciBhcyB3ZWxsIHRvIG1hdGNoIHRoZSBhZGQg
bGlzdGVuZXIuIERSVCB3aWxsCisgICAgICAgIGFzc2VydCBpZiB0aG9zZSBhcmUgbm90IGRvbmUg
aW4gdGhlIGNvcnJlY3Qgb3JkZXIuIAorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5jcHA6CisgICAgICAgIChyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5l
ckNhbGxiYWNrKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldEpTQ2xhc3Mp
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaDoKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHA6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVOb3RpZmljYXRpb25MaXN0
ZW5lcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRNYWMubW06CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIGlu
aXRXaXRoUGxhdGZvcm1FbGVtZW50Ol0pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlciBkZWFsbG9jXSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyIF9ub3RpZmljYXRpb25SZWNlaXZlZDpdKToKKyAgICAgICAgKC1bQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgc2V0Q2FsbGJhY2s6XSk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6On5BY2Nlc3NpYmlsaXR5VUlFbGVtZW50KToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVudFdpbi5j
cHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVOb3RpZmljYXRpb25M
aXN0ZW5lcik6CisKIDIwMTAtMDQtMDkgIEtldmluIFdhdHRlcnMgIDxrZXZpbndhdHRlcnNAZ21h
aWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5j
cHAJKHJldmlzaW9uIDU3MTk1KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxOCw2ICs2MTgsMTIgQEAg
c3RhdGljIEpTVmFsdWVSZWYgYWRkTm90aWZpY2F0aW9uTGlzdGVuZQogICAgIHJldHVybiBKU1Zh
bHVlTWFrZUJvb2xlYW4oY29udGV4dCwgc3VjY2VlZGVkKTsKIH0KIAorc3RhdGljIEpTVmFsdWVS
ZWYgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgdG9BWEVsZW1lbnQodGhpc09iamVjdCktPnJlbW92ZU5vdGlmaWNh
dGlvbkxpc3RlbmVyKCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworfQorCiAvLyBEZXN0cnVjdGlvbgogCiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU09iamVjdFJl
ZiB0aGlzT2JqZWN0KQpAQCAtNzIxLDYgKzcyNyw3IEBAIEpTQ2xhc3NSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Z2V0SlMKICAgICAgICAgeyAic2VsZWN0ZWRSb3dBdEluZGV4Iiwgc2VsZWN0
ZWRSb3dBdEluZGV4Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiaXNFcXVhbCIsIGlzRXF1
YWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJhZGROb3RpZmljYXRpb25MaXN0ZW5lciIs
IGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAicmVt
b3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIiLCByZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCiAgICAgICAgIHsgInRha2VGb2N1cyIsIHRha2VGb2N1c0NhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCiAgICAgICAgIHsgInRha2VTZWxlY3Rpb24iLCB0YWtlU2VsZWN0aW9uQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKICAgICAgICAgeyAiYWRkU2VsZWN0aW9uIiwgYWRkU2VsZWN0aW9uQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50LmgJKHJldmlzaW9uIDU3MTk1KQorKysgV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzMsMTIgKzE3MywyMiBAQCBwdWJsaWM6CiAgICAgLy8gTm90aWZpY2F0aW9ucwogICAgIC8vIEZ1
bmN0aW9uIGNhbGxiYWNrIHNob3VsZCB0YWtlIG9uZSBhcmd1bWVudCwgdGhlIG5hbWUgb2YgdGhl
IG5vdGlmaWNhdGlvbi4KICAgICBib29sIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKEpTT2JqZWN0
UmVmIGZ1bmN0aW9uQ2FsbGJhY2spOworICAgIC8vIE1ha2Ugc3VyZSB5b3UgY2FsbCByZW1vdmUs
IGJlY2F1c2UgeW91IGNhbid0IHJlbHkgb24gb2JqZWN0cyBiZWluZyBkZWFsbG9jYXRlZCBpbiBh
IHRpbWVseSBmYXNoaW9uLgorICAgIHZvaWQgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsK
ICAgICAKIHByaXZhdGU6CiAgICAgc3RhdGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFzcygpOwogCisg
ICAgLy8gVGhlIFBsYXRmb3JtVUlFbGVtZW50IHNob3VsZCBiZSByZXRhaW5lZC4KICAgICBQbGF0
Zm9ybVVJRWxlbWVudCBtX2VsZW1lbnQ7Ci0gICAgSlNPYmplY3RSZWYgbV9ub3RpZmljYXRpb25G
dW5jdGlvbkNhbGxiYWNrOworICAgIAorICAgIC8vIEEgcmV0YWluZWQsIHBsYXRmb3JtIHNwZWNp
ZmljIG9iamVjdCB1c2VkIHRvIGhlbHAgbWFuYWdlIG5vdGlmaWNhdGlvbnMgZm9yIHRoaXMgb2Jq
ZWN0LgorI2lmIFBMQVRGT1JNKE1BQykKKyNpZmRlZiBfX09CSkNfXworICAgIGlkIG1fbm90aWZp
Y2F0aW9uSGFuZGxlcjsKKyNlbmRpZiAKKyNlbmRpZgorICAgIAogfTsKIAogI2VuZGlmIC8vIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRfaApJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcAkocmV2
aXNpb24gNTcxOTUpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Myw2ICs1ODMsMTEgQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3RpZmljYQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVOb3RpZmljYXRpb25M
aXN0ZW5lcigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCiBib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGlt
cGxlbWVudApJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0JKHJldmlzaW9uIDU3MTk1KQorKysg
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTU3LDMzICs1NywxMSBAQCB0eXBlZGVmIHZvaWQgKCpBWFBv
c3RlZE5vdGlmaWNhdGlvbkNhbGxiCiAKIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYktpdEFjY2Vz
c2liaWxpdHlBZGRpdGlvbnMpCiAtIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUFycmF5QXR0cmli
dXRlVmFsdWVzOihOU1N0cmluZyAqKWF0dHJpYnV0ZSBpbmRleDooTlNVSW50ZWdlcilpbmRleCBt
YXhDb3VudDooTlNVSW50ZWdlciltYXhDb3VudDsKLS0gKHZvaWQpYWNjZXNzaWJpbGl0eVNldFBv
c3RlZE5vdGlmaWNhdGlvbkNhbGxiYWNrOihBWFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiYWNrKWZ1
bmN0aW9uIHdpdGhDb250ZXh0Oih2b2lkKiljb250ZXh0OworLSAodm9pZClhY2Nlc3NpYmlsaXR5
U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczooQk9PTClyZXBvc3Q7CiAtIChOU1VJbnRlZ2Vy
KWFjY2Vzc2liaWxpdHlJbmRleE9mQ2hpbGQ6KGlkKWNoaWxkOwogLSAoTlNVSW50ZWdlcilhY2Nl
c3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVDb3VudDooTlNTdHJpbmcgKilhdHRyaWJ1dGU7CiBAZW5k
CiAKLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoUGxhdGZv
cm1VSUVsZW1lbnQgZWxlbWVudCkKLSAgICA6IG1fZWxlbWVudChlbGVtZW50KQotICAgICwgbV9u
b3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKDApCi17Ci0gICAgW21fZWxlbWVudCByZXRhaW5d
OwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNv
bnN0IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQmIG90aGVyKQotICAgIDogbV9lbGVtZW50KG90aGVy
Lm1fZWxlbWVudCkKLSAgICAsIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjaygwKQotewot
ICAgIFttX2VsZW1lbnQgcmV0YWluXTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6fkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQoKQotewotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG91ciBub3Rp
ZmljYXRpb24gY2FsbGJhY2sgZG9lcyBub3Qgc3RpY2sgYXJvdW5kLgotICAgIGlmIChtX25vdGlm
aWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spCi0gICAgICAgIFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0
eVNldFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiYWNrOjAgd2l0aENvbnRleHQ6MF07Ci0gICAgW21f
ZWxlbWVudCByZWxlYXNlXTsKLX0KLQogQGludGVyZmFjZSBOU1N0cmluZyAoSlNTdHJpbmdSZWZB
ZGRpdGlvbnMpCiArIChOU1N0cmluZyAqKXN0cmluZ1dpdGhKU1N0cmluZ1JlZjooSlNTdHJpbmdS
ZWYpanNTdHJpbmdSZWY7CiAtIChKU1N0cmluZ1JlZiljcmVhdGVKU1N0cmluZ1JlZjsKQEAgLTEw
Nyw2ICs4NSw3NiBAQCAtIChKU1N0cmluZ1JlZiljcmVhdGVKU1N0cmluZ1JlZgogCiBAZW5kCiAK
K0BpbnRlcmZhY2UgQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgOiBOU09iamVjdAor
eworICAgIGlkIG1fcGxhdGZvcm1FbGVtZW50OworICAgIEpTT2JqZWN0UmVmIG1fbm90aWZpY2F0
aW9uRnVuY3Rpb25DYWxsYmFjazsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIKKworLSAoaWQpaW5pdFdpdGhQbGF0Zm9ybUVsZW1l
bnQ6KGlkKXBsYXRmb3JtRWxlbWVudAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisKKyAg
ICBtX3BsYXRmb3JtRWxlbWVudCA9IHBsYXRmb3JtRWxlbWVudDsKKyAgICAKKyAgICAvLyBPbmNl
IHdoZW4gb2JqZWN0IHN0YXJ0cyByZXF1ZXN0aW5nIG5vdGlmaWNhdGlvbnMsIGl0cyBvbiBmb3Ig
dGhlIGR1cmF0aW9uIG9mIHRoZSBwcm9ncmFtLgorICAgIC8vIFRoaXMgaXMgdG8gYXZvaWQgYW55
IHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIHRlc3RzIHR1cm5pbmcgdGhpcyBmbGFnIG9uIGFuZCBv
ZmYuIEluc3RlYWQKKyAgICAvLyBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBjYW4g
anVzdCBsaXN0ZW4gd2hlbiB0aGV5IHdhbnQgdG8uCisgICAgW21fcGxhdGZvcm1FbGVtZW50IGFj
Y2Vzc2liaWxpdHlTZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOllFU107CisgICAgW1tOU05v
dGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9y
OkBzZWxlY3Rvcihfbm90aWZpY2F0aW9uUmVjZWl2ZWQ6KSBuYW1lOkAiQVhEUlROb3RpZmljYXRp
b24iIG9iamVjdDpuaWxdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisgCistICh2b2lkKWRlYWxs
b2MKK3sKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9i
c2VydmVyOnNlbGZdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClfbm90aWZp
Y2F0aW9uUmVjZWl2ZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgTlNT
dHJpbmcqIG5vdGlmaWNhdGlvbk5hbWUgPSBbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0
Rm9yS2V5OkAibm90aWZpY2F0aW9uTmFtZSJdOworICAgIGlmICghbm90aWZpY2F0aW9uTmFtZSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc05v
dGlmaWNhdGlvbihBZG9wdCwgW25vdGlmaWNhdGlvbk5hbWUgY3JlYXRlSlNTdHJpbmdSZWZdKTsK
KyAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50ID0gSlNWYWx1ZU1ha2VTdHJpbmcoW21haW5GcmFtZSBn
bG9iYWxDb250ZXh0XSwganNOb3RpZmljYXRpb24uZ2V0KCkpOworICAgIEpTT2JqZWN0Q2FsbEFz
RnVuY3Rpb24oW21haW5GcmFtZSBnbG9iYWxDb250ZXh0XSwgbV9ub3RpZmljYXRpb25GdW5jdGlv
bkNhbGxiYWNrLCBOVUxMLCAxLCAmYXJndW1lbnQsIE5VTEwpOworfQorCistICh2b2lkKXNldENh
bGxiYWNrOihKU09iamVjdFJlZiljYWxsYmFjaworeworICAgIG1fbm90aWZpY2F0aW9uRnVuY3Rp
b25DYWxsYmFjayA9IGNhbGxiYWNrOworfQorCitAZW5kCisKK0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCkKKyAg
ICA6IG1fZWxlbWVudChlbGVtZW50KQorICAgICwgbV9ub3RpZmljYXRpb25IYW5kbGVyKDApCit7
CisgICAgW21fZWxlbWVudCByZXRhaW5dOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnN0IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQmIG90aGVy
KQorICAgIDogbV9lbGVtZW50KG90aGVyLm1fZWxlbWVudCkKKyAgICAsIG1fbm90aWZpY2F0aW9u
SGFuZGxlcigwKQoreworICAgIFttX2VsZW1lbnQgcmV0YWluXTsKK30KKworQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6fkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoKQoreworICAgIC8vIFRoZSBub3Rp
ZmljYXRpb24gaGFuZGxlciBzaG91bGQgYmUgbmlsIGJlY2F1c2UgcmVtb3ZlTm90aWZpY2F0aW9u
TGlzdGVuZXIoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBpbiB0aGUgdGVzdC4KKyAgICBhc3Nl
cnQoIW1fbm90aWZpY2F0aW9uSGFuZGxlcik7CisgICAgW21fZWxlbWVudCByZWxlYXNlXTsKK30K
Kwogc3RhdGljIE5TU3RyaW5nKiBkZXNjcmlwdGlvbk9mVmFsdWUoaWQgdmFsdWVPYmplY3QsIGlk
IGZvY3VzZWRBY2Nlc3NpYmlsaXR5T2JqZWN0KQogewogICAgIGlmICghdmFsdWVPYmplY3QpCkBA
IC03NzQsMjggKzgyMiwyNiBAQCBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1
cmwoCiAgICAgcmV0dXJuIFtbdXJsIGFic29sdXRlU3RyaW5nXSBjcmVhdGVKU1N0cmluZ1JlZl07
ICAgIAogfQogCi1zdGF0aWMgdm9pZCBfYWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkNhbGxiYWNr
KGlkIGVsZW1lbnQsIE5TU3RyaW5nKiBub3RpZmljYXRpb24sIHZvaWQqIGNvbnRleHQpCi17Ci0g
ICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU09iamVjdFJlZiBmdW5j
dGlvbkNhbGxiYWNrID0gc3RhdGljX2Nhc3Q8SlNPYmplY3RSZWY+KGNvbnRleHQpOwotCi0gICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzTm90aWZpY2F0aW9uKEFkb3B0LCBbbm90aWZpY2F0
aW9uIGNyZWF0ZUpTU3RyaW5nUmVmXSk7Ci0gICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFs
dWVNYWtlU3RyaW5nKFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIGpzTm90aWZpY2F0aW9uLmdl
dCgpKTsKLSAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKFttYWluRnJhbWUgZ2xvYmFsQ29udGV4
dF0sIGZ1bmN0aW9uQ2FsbGJhY2ssIE5VTEwsIDEsICZhcmd1bWVudCwgTlVMTCk7Ci19Ci0KIGJv
b2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmpl
Y3RSZWYgZnVuY3Rpb25DYWxsYmFjaykKIHsKICAgICBpZiAoIWZ1bmN0aW9uQ2FsbGJhY2spCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAKLSAgICBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJh
Y2sgPSBmdW5jdGlvbkNhbGxiYWNrOwotICAgIFtwbGF0Zm9ybVVJRWxlbWVudCgpIGFjY2Vzc2li
aWxpdHlTZXRQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjazpfYWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbkNhbGxiYWNrIHdpdGhDb250ZXh0OnJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fbm90aWZp
Y2F0aW9uRnVuY3Rpb25DYWxsYmFjayldOworICAgIC8vIEFscmVhZHkgYWRkZWQgb25jZSwgcHJv
Z3JhbW1lciBzaG91bGQgbm90IHRyeSB0byBhZGQgYWdhaW4uCisgICAgYXNzZXJ0KCFtX25vdGlm
aWNhdGlvbkhhbmRsZXIpOworICAgIAorICAgIG1fbm90aWZpY2F0aW9uSGFuZGxlciA9IFtbQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgYWxsb2NdIGluaXRXaXRoUGxhdGZvcm1FbGVt
ZW50OnBsYXRmb3JtVUlFbGVtZW50KCldOworICAgIFttX25vdGlmaWNhdGlvbkhhbmRsZXIgc2V0
Q2FsbGJhY2s6ZnVuY3Rpb25DYWxsYmFja107CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCit7
CisgICAgW21fbm90aWZpY2F0aW9uSGFuZGxlciByZWxlYXNlXTsKKyAgICBtX25vdGlmaWNhdGlv
bkhhbmRsZXIgPSBuaWw7Cit9CisKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxl
Y3RhYmxlKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CkluZGV4OiBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVudFdpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRXaW4uY3BwCShyZXZpc2lvbiA1NzE5NSkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTU3LDYgKzU1NywxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlm
aWNhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
K30KKwogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGUoKSBjb25zdAog
ewogICAgIERXT1JEIHN0YXRlID0gYWNjZXNzaWJpbGl0eVN0YXRlKG1fZWxlbWVudCk7CkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA1NzQwNSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDEwLTA0LTA5ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVp
emFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgYXJpYS1saXZlcmVnaW9uLW5vdGlmaWNhdGlvbnMuaHRtbCBmYWlscyBvbiBsZW9w
YXJkIHJlbGVhc2UgYm90CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNzExMgorCisgICAgICAgIEFkZCBmb3VyIG1vcmUgdGVzdHMgdGhhdCB0ZXN0IHNw
ZWNpZmljIGxpdmUgcmVnaW9uIGZ1bmN0aW9uYWxpdHkuIEhhdmluZyB0aGVzZQorICAgICAgICBm
b3VyIHRlc3RzIHJ1biBpbiBvcmRlciBzZWVtcyB0byBzdHJlc3MgdGhlIG5vdGlmaWNhdGlvbiBt
ZWNoYW5pc20gYW5kIHdpbGwgZXhwb3NlIGlzc3VlcyAKKyAgICAgICAgbW9yZSBmcmVxdWVudGx5
LgorICAgICAgICBNb2RpZnkgdGVzdHMgdGhhdCB1c2Ugbm90aWZpY2F0aW9uIGxpc3RlbmVycyB0
byBhbHNvICJyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lciIuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMtbGVvcGFyZC9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmls
aXR5L2FyaWEtbGlzdGJveC1zZWxlY3RlZGNoaWxkcmVuLWNoYW5nZS5odG1sOgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbi1vbi1pbWFnZS5odG1s
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMt
YWRkZWRlbGVtZW50LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFj
L2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1hZGRlZGVsZW1lbnQuaHRtbDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1j
aGFuZ2VkYWx0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Fj
Y2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1jaGFuZ2VkYWx0Lmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdl
ZHRleHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNz
aWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLWNoYW5nZWR0ZXh0Lmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtbm90aWZpY2F0
aW9ucy5odG1sOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2
ZXJlZ2lvbnMtcmVtb3ZlZGVsZW1lbnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLXJlbW92ZWRlbGVtZW50
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2NoYW5n
ZS1ub3RpZmljYXRpb24tb24tc2Nyb2xsLmh0bWw6CisKIDIwMTAtMDQtMDkgIFBhdmVsIEZlbGRt
YW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBo
IFBlY29yYXJvLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLWxlb3BhcmQvU2tpcHBl
ZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtbGVvcGFyZC9Ta2lwcGVk
CShyZXZpc2lvbiA1NzE5NSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy1sZW9wYXJkL1Nr
aXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTksOCArOSw2IEBAIHN2Zy9jc3MvZ2x5cGgtb3JpZW50
YXRpb24tcm91bmRpbmctdGVzdC4KIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3RhYmxlLW11
bHRpLWJvZGllcy5odG1sCiAjIExpc3RzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIExlb3BhcmQuCiBw
bGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWRpcmVjdG9yeS5odG1sCi0jIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzExMiBMaXZlIHJlZ2lvbnMgZmFpbHMg
b24gbGVvcGFyZCByZWxlYXNlIGJvdC4KLXBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEt
bGl2ZXJlZ2lvbnMtbm90aWZpY2F0aW9ucy5odG1sCiAKICMgVGVzdHMgb2YgZm9udCBmZWF0dXJl
cyBub3Qgc3VwcG9ydGVkIGJ5IEFUU1VJCiBwbGF0Zm9ybS9tYWMvZmFzdC90ZXh0L215YW5tYXIt
c2hhcGluZy5odG1sCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0
eS9hcmlhLWxpc3Rib3gtc2VsZWN0ZWRjaGlsZHJlbi1jaGFuZ2UuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpc3Rib3gtc2Vs
ZWN0ZWRjaGlsZHJlbi1jaGFuZ2UuaHRtbAkocmV2aXNpb24gNTcxOTUpCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpc3Rib3gtc2VsZWN0ZWRjaGlsZHJl
bi1jaGFuZ2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQCB2YXIgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gZmFsc2U7CiAKICAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0
IHdoZW4gYXJpYS1zZWxlY3RlZCBpcyBjaGFuZ2VkIGluIGEgbGlzdGJveCwgdGhlIGNvcnJlY3Qg
bm90aWZpY2F0aW9uIGlzIHNlbnQuIik7CiAKKyAgICB2YXIgbGlzdGJveCA9IDA7CiAgICAgdmFy
IG5vdGlmaWNhdGlvbkNvdW50ID0gMDsKICAgICBmdW5jdGlvbiBhcmlhQ2FsbGJhY2sobm90aWZp
Y2F0aW9uKSB7CiAgICAgICAgIGlmIChub3RpZmljYXRpb24gPT0gIkFYU2VsZWN0ZWRDaGlsZHJl
bkNoYW5nZWQiKSB7CkBAIC0yOSw2ICszMCw3IEBAIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBm
YWxzZTsKIAogICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGdldCBhIHRvdGFsIG9mIDQgbGl2ZSBy
ZWdpb24gY2hhbmdlcy4KICAgICAgICAgICAgIGlmIChub3RpZmljYXRpb25Db3VudCA9PSAyKSB7
CisgICAgICAgICAgICAgICBsaXN0Ym94LnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CiAg
ICAgICAgICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zOCw3ICs0MCw3IEBAIHZhciBzdWNjZXNzZnVs
bHlQYXJzZWQgPSBmYWxzZTsKICAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKIAogICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibGlzdGJv
eCIpLmZvY3VzKCk7Ci0gICAgICAgIHZhciBsaXN0Ym94ID0gd2luZG93LmFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworICAgICAgICBsaXN0Ym94ID0gd2luZG93LmFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OwogCiAgICAgICAgIHZhciBhZGRlZE5v
dGlmaWNhdGlvbiA9IGxpc3Rib3guYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoYXJpYUNhbGxiYWNr
KTsKICAgICAgICAgc2hvdWxkQmUoImFkZGVkTm90aWZpY2F0aW9uIiwgInRydWUiKTsKSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbi1v
bi1pbWFnZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nl
c3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbi1vbi1pbWFnZS5odG1sCShyZXZpc2lvbiA1NzE5NSkK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lv
bi1vbi1pbWFnZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xOCw4ICsxOCwxMCBAQCB2YXIgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7CiAKICAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0
aGF0IEFSSUEgbGl2ZSByZWdpb25zIHRoYXQgaXMgb24gYW4gaW1hZ2Ugd2lsbCB3b3JrIHdoZW4g
dGhlIGFsdCB0YWcgaXMgY2hhbmdlZC4iKTsKIAorICAgIHZhciBpbWFnZSA9IDA7CiAgICAgZnVu
Y3Rpb24gYXJpYUNhbGxiYWNrKG5vdGlmaWNhdGlvbikgewogICAgICAgICBpZiAobm90aWZpY2F0
aW9uID09ICJBWExpdmVSZWdpb25DaGFuZ2VkIikgeworICAgICAgICAgICAgaW1hZ2UucmVtb3Zl
Tm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKICAgICAgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yOCw3ICszMCw3IEBA
IHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKICAgICAgICAgd2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKIAogICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiaW1hZ2UiKS5mb2N1cygpOwotICAgICAgICB2YXIgaW1hZ2UgPSB3aW5kb3cuYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAgICAgIGltYWdlID0gd2lu
ZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OwogCiAgICAgICAgIHZh
ciBhZGRlZE5vdGlmaWNhdGlvbiA9IGltYWdlLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKGFyaWFD
YWxsYmFjayk7CiAgICAgICAgIHNob3VsZEJlKCJhZGRlZE5vdGlmaWNhdGlvbiIsICJ0cnVlIik7
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVy
ZWdpb25zLWFkZGVkZWxlbWVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1hZGRlZGVsZW1l
bnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1hZGRlZGVsZW1lbnQtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACitBTEVSVDogU3VjY2Vzc2Z1bGx5IHJlY2Vp
dmVkIEFYTGl2ZVJlZ2lvbkNoYW5nZWQKK3RleHQKKworaGVsbG9uZXcgdGV4dCBlbGVtZW50CitU
aGlzIHRlc3RzIHRoYXQgYWRkaW5nIGFuIGVsZW1lbnQgdG8gYSBsaXZlIHJlZ2lvbiB3aWxsIHRy
aWdnZXIgdGhlIHJpZ2h0IG5vdGlmaWNhdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1MgYWRkZWROb3RpZmljYXRpb24gaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtYWRkZWRlbGVtZW50Lmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJp
YS1saXZlcmVnaW9ucy1hZGRlZGVsZW1lbnQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtYWRkZWRlbGVt
ZW50Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIj4KKzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisKKzxkaXYgcm9sZT0i
Z3JvdXAiIHRhYmluZGV4PTAgaWQ9ImxpdmVyZWdpb24iIGFyaWEtbGl2ZT0icG9saXRlIiBhcmlh
LXJlbGV2YW50PSJhZGRpdGlvbnMiPgorPGgzIGlkPSJpbm5lcmxpdmUiPnRleHQ8L2gzPgorPGRp
diBpZD0iYWRkcmVnaW9uIj5oZWxsbzwvZGl2PgorPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBkZXNj
cmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IGFkZGluZyBhbiBlbGVtZW50IHRvIGEgbGl2ZSByZWdp
b24gd2lsbCB0cmlnZ2VyIHRoZSByaWdodCBub3RpZmljYXRpb24uIik7CisKKyAgICB2YXIgbGl2
ZVJlZ2lvbiA9IDA7CisgICAgZnVuY3Rpb24gYXJpYUNhbGxiYWNrKG5vdGlmaWNhdGlvbikgewor
ICAgICAgICBpZiAobm90aWZpY2F0aW9uID09ICJBWExpdmVSZWdpb25DaGFuZ2VkIikgeworICAg
ICAgICAgICBhbGVydCgiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkICIgKyBub3RpZmljYXRpb24pOwor
ICAgICAgICAgICBsaXZlUmVnaW9uLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAg
ICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7Cisg
ICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKKyAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxpdmVyZWdpb24iKS5mb2N1cygpOworICAg
ICAgICBsaXZlUmVnaW9uID0gd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRF
bGVtZW50OworCisgICAgICAgIHZhciBhZGRlZE5vdGlmaWNhdGlvbiA9IGxpdmVSZWdpb24uYWRk
Tm90aWZpY2F0aW9uTGlzdGVuZXIoYXJpYUNhbGxiYWNrKTsKKyAgICAgICAgc2hvdWxkQmUoImFk
ZGVkTm90aWZpY2F0aW9uIiwgInRydWUiKTsKKworICAgICAgICAvLyB0aGlzIHNob3VsZCB0cmln
Z2VyIG91ciBsaXZlIHJlZ2lvbiBjYWxsYmFjayBmb3IgYSBuZXcgZWxlbWVudC4KKyAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkZHJlZ2lvbiIpLmlubmVySFRNTCArPSAibmV3IHRl
eHQgZWxlbWVudCI7CisgICAgfQorCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwv
c2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZGFsdC1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vz
c2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1jaGFuZ2VkYWx0LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2
ZXJlZ2lvbnMtY2hhbmdlZGFsdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTIgQEAKK0FMRVJUOiBTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgQVhMaXZlUmVnaW9uQ2hhbmdlZAor
CitUaGlzIHRlc3RzIHRoYXQgY2hhbmdpbmcgdGhlIGFsdCB0YWcgb2YgYW4gaW1hZ2UgaW4gYSBs
aXZlIHJlZ2lvbiB0cmlnZ2VycyBhIGxpdmUgcmVnaW9uIG5vdGlmaWNhdGlvbi4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYWRkZWROb3RpZmljYXRpb24gaXMgdHJ1ZQor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMt
Y2hhbmdlZGFsdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9h
Y2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZGFsdC5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVn
aW9ucy1jaGFuZ2VkYWx0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
ZmFsc2U7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisK
KzxkaXYgcm9sZT0iZ3JvdXAiIHRhYmluZGV4PTAgaWQ9ImxpdmVyZWdpb24iIGFyaWEtbGl2ZT0i
cG9saXRlIiBhcmlhLXJlbGV2YW50PSJhZGRpdGlvbnMiPgorPGltZyBzcmM9InRlc3QuZ2lmIiB3
aWR0aD0xMDAgaGVpZ2h0PTEwMCBhbHQ9ImFsdCB0ZXh0IiBpZD0iaW1hZ2UiPgorPC9kaXY+CisK
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxz
Y3JpcHQ+CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IGNoYW5naW5nIHRoZSBh
bHQgdGFnIG9mIGFuIGltYWdlIGluIGEgbGl2ZSByZWdpb24gdHJpZ2dlcnMgYSBsaXZlIHJlZ2lv
biBub3RpZmljYXRpb24uIik7CisKKyAgICB2YXIgbGl2ZVJlZ2lvbkFsdCA9IDA7CisgICAgZnVu
Y3Rpb24gYXJpYUNhbGxiYWNrQWx0KG5vdGlmaWNhdGlvbikgeworICAgICAgICBpZiAobm90aWZp
Y2F0aW9uID09ICJBWExpdmVSZWdpb25DaGFuZ2VkIikgeworICAgICAgICAgICBhbGVydCgiU3Vj
Y2Vzc2Z1bGx5IHJlY2VpdmVkICIgKyBub3RpZmljYXRpb24pOworICAgICAgICAgICBsaXZlUmVn
aW9uQWx0LnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAgICAgICAgIHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgICAgIHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKKyAgICAgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImxpdmVyZWdpb24iKS5mb2N1cygpOworICAgICAgICBsaXZlUmVnaW9u
QWx0ID0gd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworCisg
ICAgICAgIHZhciBhZGRlZE5vdGlmaWNhdGlvbiA9IGxpdmVSZWdpb25BbHQuYWRkTm90aWZpY2F0
aW9uTGlzdGVuZXIoYXJpYUNhbGxiYWNrQWx0KTsKKyAgICAgICAgc2hvdWxkQmUoImFkZGVkTm90
aWZpY2F0aW9uIiwgInRydWUiKTsKKworICAgICAgICAvLyB0aGlzIHNob3VsZCBhbHNvIHRyaWdn
ZXIgb3VyIGxpdmUgcmVnaW9uIGNoYW5nZSBiZWNhdXNlIGl0cyBhIHRleHQgYWx0ZXJuYXRpdmUg
Y2hhbmdlLiAKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImltYWdlIikuc2V0QXR0
cmlidXRlKCdhbHQnLCAibmV3IGltYWdlIHRleHQiKTsKKyAgICB9CisKKyAgICBzdWNjZXNzZnVs
bHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZl
cmVnaW9ucy1jaGFuZ2VkdGV4dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1jaGFuZ2VkdGV4
dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
YWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLWNoYW5nZWR0ZXh0LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorQUxFUlQ6IFN1Y2Nlc3NmdWxseSByZWNlaXZl
ZCBBWExpdmVSZWdpb25DaGFuZ2VkCitjaGFuZ2VkIHRleHQKKworVGhpcyB0ZXN0cyB0aGF0IHdo
ZW4geW91IGNoYW5nZSB0ZXh0IGluIGEgbGl2ZSByZWdpb24sIHRoZSBwcm9wZXIgbm90aWZpY2F0
aW9uIGlzIHNlbnQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGFkZGVk
Tm90aWZpY2F0aW9uIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJp
bGl0eS9hcmlhLWxpdmVyZWdpb25zLWNoYW5nZWR0ZXh0Lmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1jaGFu
Z2VkdGV4dC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Fj
Y2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1jaGFuZ2VkdGV4dC5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBI
VE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIu
Li8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0Pgor
dmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHkgaWQ9ImJvZHkiPgorCis8ZGl2IHJvbGU9Imdyb3VwIiB0YWJpbmRleD0wIGlk
PSJsaXZlcmVnaW9uIiBhcmlhLWxpdmU9InBvbGl0ZSIgYXJpYS1yZWxldmFudD0iYWRkaXRpb25z
Ij4KKzxoMyBpZD0iaW5uZXJsaXZlIj50ZXh0PC9oMz4KKzwvZGl2PgorCis8cCBpZD0iZGVzY3Jp
cHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorCisgICAg
ZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCB3aGVuIHlvdSBjaGFuZ2UgdGV4dCBpbiBhIGxp
dmUgcmVnaW9uLCB0aGUgcHJvcGVyIG5vdGlmaWNhdGlvbiBpcyBzZW50LiIpOworCisgICAgdmFy
IGxpdmVSZWdpb25UZXh0ID0gMDsKKyAgICBmdW5jdGlvbiBhcmlhQ2FsbGJhY2tUZXh0KG5vdGlm
aWNhdGlvbikgeworICAgICAgICBpZiAobm90aWZpY2F0aW9uID09ICJBWExpdmVSZWdpb25DaGFu
Z2VkIikgeworICAgICAgICAgICBhbGVydCgiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkICIgKyBub3Rp
ZmljYXRpb24pOworICAgICAgICAgICBsaXZlUmVnaW9uVGV4dC5yZW1vdmVOb3RpZmljYXRpb25M
aXN0ZW5lcigpOworICAgICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcikgeworICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsaXZlcmVnaW9u
IikuZm9jdXMoKTsKKyAgICAgICAgbGl2ZVJlZ2lvblRleHQgPSB3aW5kb3cuYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisKKyAgICAgICAgdmFyIGFkZGVkTm90aWZpY2F0
aW9uID0gbGl2ZVJlZ2lvblRleHQuYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoYXJpYUNhbGxiYWNr
VGV4dCk7CisgICAgICAgIHNob3VsZEJlKCJhZGRlZE5vdGlmaWNhdGlvbiIsICJ0cnVlIik7CisK
KyAgICAgICAgLy8gdGhpcyBzaG91bGQgdHJpZ2dlciBvdXIgbGl2ZSByZWdpb24gY2FsbGJhY2sg
Zm9yIGEgdGV4dCBjaGFuZ2UuCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbm5l
cmxpdmUiKS5pbm5lclRleHQgPSAiY2hhbmdlZCB0ZXh0IjsKKyAgICB9CisKKyAgICBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1s
aXZlcmVnaW9ucy1ub3RpZmljYXRpb25zLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1ub3RpZmljYXRpb25z
Lmh0bWwJKHJldmlzaW9uIDU3MTk1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vz
c2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1ub3RpZmljYXRpb25zLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDYgKzIxLDcgQEAgdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOwogCiAg
ICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCBBUklBIGxpdmUgcmVnaW9ucyBhcmUgc2Vu
ZGluZyBvdXQgdGhlIGNvcnJlY3Qgbm90aWZpY2F0aW9ucy4gV2UgcGVyZm9ybSBmb3VyIG9wZXJh
dGlvbnMgKGFkZCwgcmVtb3ZlLCBjaGFuZ2UgdGV4dCwgY2hhbmdlIGFsdCB0YWcpLCBlYWNoIG9u
ZSBzaG91bGQgdHJpZ2dlciBhIGxpdmUgcmVnaW9uIG5vdGlmaWNhdGlvbiIpOwogCisgICAgdmFy
IGxpdmVSZWdpb24gPSAwOwogICAgIHZhciBsaXZlUmVnaW9uQ2hhbmdlQ291bnQgPSAwOwogICAg
IGZ1bmN0aW9uIGFyaWFDYWxsYmFjayhub3RpZmljYXRpb24pIHsKICAgICAgICAgaWYgKG5vdGlm
aWNhdGlvbiA9PSAiQVhMaXZlUmVnaW9uQ2hhbmdlZCIpIHsKQEAgLTI4LDYgKzI5LDcgQEAgdmFy
IHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOwogCiAgICAgICAgICAgICAvLyBXZSBzaG91bGQg
Z2V0IGEgdG90YWwgb2YgNCBsaXZlIHJlZ2lvbiBjaGFuZ2VzLgogICAgICAgICAgICAgaWYgKGxp
dmVSZWdpb25DaGFuZ2VDb3VudCA9PSA0KSB7CisgICAgICAgICAgICAgICBsaXZlUmVnaW9uLnJl
bW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CiAgICAgICAgICAgICAgICB3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0zNyw3ICszOSw3IEBAIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKICAgICAgICAg
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKIAogICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgibGl2ZXJlZ2lvbiIpLmZvY3VzKCk7Ci0gICAgICAgIHZh
ciBsaXZlUmVnaW9uID0gd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVt
ZW50OworICAgICAgICBsaXZlUmVnaW9uID0gd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmZvY3VzZWRFbGVtZW50OwogCiAgICAgICAgIHZhciBhZGRlZE5vdGlmaWNhdGlvbiA9IGxpdmVS
ZWdpb24uYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoYXJpYUNhbGxiYWNrKTsKICAgICAgICAgc2hv
dWxkQmUoImFkZGVkTm90aWZpY2F0aW9uIiwgInRydWUiKTsKSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtcmVtb3ZlZGVsZW1lbnQt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nl
c3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtcmVtb3ZlZGVsZW1lbnQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJp
YS1saXZlcmVnaW9ucy1yZW1vdmVkZWxlbWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTIgQEAKK0FMRVJUOiBTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgQVhMaXZlUmVnaW9u
Q2hhbmdlZAorCitUaGlzIHRlc3RzIHRoYXQgQVJJQSByZW1vdmluZyBhbiBlbGVtZW50IGZyb20g
YSBsaXZlIHJlZ2lvbiBzZW5kcyB0aGUgY29ycmVjdCBub3RpZmljYXRpb24uCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGFkZGVkTm90aWZpY2F0aW9uIGlzIHRydWUKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLXJl
bW92ZWRlbGVtZW50Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1yZW1vdmVkZWxlbWVudC5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1s
aXZlcmVnaW9ucy1yZW1vdmVkZWxlbWVudC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUx
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0PgordmFyIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IGZhbHNlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgaWQ9
ImJvZHkiPgorCis8ZGl2IHJvbGU9Imdyb3VwIiB0YWJpbmRleD0wIGlkPSJsaXZlcmVnaW9uIiBh
cmlhLWxpdmU9InBvbGl0ZSIgYXJpYS1yZWxldmFudD0iYWRkaXRpb25zIj4KKzxoMyBpZD0iaW5u
ZXJsaXZlIj50ZXh0PC9oMz4KKzxpbWcgc3JjPSJ0ZXN0LmdpZiIgd2lkdGg9MTAwIGhlaWdodD0x
MDAgYWx0PSJhbHQgdGV4dCIgdGFiaW5kZXg9MCBpZD0iaW1hZ2UiPgorPC9kaXY+CisKKzxwIGlk
PSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+
CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IEFSSUEgcmVtb3ZpbmcgYW4gZWxl
bWVudCBmcm9tIGEgbGl2ZSByZWdpb24gc2VuZHMgdGhlIGNvcnJlY3Qgbm90aWZpY2F0aW9uLiIp
OworCisgICAgdmFyIGxpdmVSZWdpb24gPSAwOworICAgIGZ1bmN0aW9uIGFyaWFDYWxsYmFjayhu
b3RpZmljYXRpb24pIHsKKyAgICAgICAgaWYgKG5vdGlmaWNhdGlvbiA9PSAiQVhMaXZlUmVnaW9u
Q2hhbmdlZCIpIHsKKyAgICAgICAgICAgYWxlcnQoIlN1Y2Nlc3NmdWxseSByZWNlaXZlZCAiICsg
bm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgbGl2ZVJlZ2lvbi5yZW1vdmVOb3RpZmljYXRpb25M
aXN0ZW5lcigpOworICAgICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcikgeworICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsaXZlcmVnaW9u
IikuZm9jdXMoKTsKKyAgICAgICAgbGl2ZVJlZ2lvbiA9IHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKworICAgICAgICB2YXIgYWRkZWROb3RpZmljYXRpb24g
PSBsaXZlUmVnaW9uLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKGFyaWFDYWxsYmFjayk7CisgICAg
ICAgIHNob3VsZEJlKCJhZGRlZE5vdGlmaWNhdGlvbiIsICJ0cnVlIik7CisKKyAgICAgICAgLy8g
dGhpcyBzaG91bGQgdHJpZ2dlciBvdXIgbGl2ZSByZWdpb24gY2FsbGJhY2sgZm9yIGEgcmVtb3Zl
ZCBlbGVtZW50LgorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibGl2ZXJlZ2lvbiIp
LnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbm5lcmxpdmUiKSk7IAorICAg
IH0KKworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlw
dCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNj
ZXNzaWJpbGl0eS9jaGFuZ2Utbm90aWZpY2F0aW9uLW9uLXNjcm9sbC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2NoYW5nZS1ub3RpZmlj
YXRpb24tb24tc2Nyb2xsLmh0bWwJKHJldmlzaW9uIDU3MTk1KQorKysgTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvY2hhbmdlLW5vdGlmaWNhdGlvbi1vbi1zY3JvbGwuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMTEsMTAgKzExLDEyIEBAIGhlbGxvIGhlbGxvIGhlbGxvIGhl
bGxvIGhlbGxvIGhlbGxvIGhlbGwKICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQogICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CiAKKyAgICB2YXIg
dGV4dGFyZWEgPSAwOwogICAgIGZ1bmN0aW9uIGFyaWFDYWxsYmFjayhub3RpZmljYXRpb24pIHsK
ICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbiA9PSAiQVhWYWx1ZUNoYW5nZWQiKSB7CiAgICAgICAg
ICAgICB2YXIgcmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpOwogICAg
ICAgICAgICAgcmVzdWx0LmlubmVySFRNTCA9ICJTdWNjZXNzISI7IAorICAgICAgICAgICAgdGV4
dGFyZWEucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKICAgICAgICAgICAgIHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0y
Miw3ICsyNCw3IEBAIGhlbGxvIGhlbGxvIGhlbGxvIGhlbGxvIGhlbGxvIGhlbGxvIGhlbGwKICAg
ICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CiAgICAgICAgIHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiAgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJ0ZXh0YXJlYSIpLmZvY3VzKCk7Ci0gICAgICAgIHZhciB0ZXh0YXJlYSA9
IHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKyAgICAgICAg
dGV4dGFyZWEgPSB3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7
CiAgICAgICAgIAogICAgICAgICB2YXIgYWRkZWROb3RpZmljYXRpb24gPSB0ZXh0YXJlYS5hZGRO
b3RpZmljYXRpb25MaXN0ZW5lcihhcmlhQ2FsbGJhY2spOwogICAgICAgICAK
</data>
<flag name="review"
          id="36681"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53868</attachid>
            <date>2010-04-20 12:51:05 -0700</date>
            <delta_ts>2010-04-20 13:16:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>35302</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzkwNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMDktMDQtMjAgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBhcmlhLWxpdmVyZWdpb24tbm90aWZpY2F0aW9ucy5odG1sIGZhaWxzIG9uIGxlb3BhcmQgcmVs
ZWFzZSBib3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM3MTEyCisKKyAgICAgICAgQ2hhbmdlIHRoZSBtZXRob2QgdGhhdCBEUlQgdXNlcyB0byBtb25p
dG9yIEFYIG5vdGlmaWNhdGlvbnMgc28gdGhhdCBpdHMgcm9idXN0CisgICAgICAgIGJ5IGp1c3Qg
c2VuZGluZyBvdXQgTlNOb3RpZmljYXRpb24gdGhhdCBjYW4gYmUgbGlzdGVuZWQgdG8gYnkgYW55
b25lLCBpbnN0ZWFkCisgICAgICAgIG9mIGtlZXBpbmcgYSBzdGF0aWMgZnVuY3Rpb24gcG9pbnRl
ciBhcm91bmQuCisgICAKKyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgYWltZWQgdG8gYXZvaWQgZmxh
a2luZXNzIHNlZW4gaW4gRFJUIHdoZW4gdGhlIG5vdGlmaWNhdGlvbiBoYW5kbGVycworICAgICAg
ICBhcmUgbm90IGJlaW5nIGNhbGxlZCBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZS4KKworICAgICAg
ICBUZXN0czogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1hZGRl
ZGVsZW1lbnQuaHRtbAorICAgICAgICAgICAgICAgcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkv
YXJpYS1saXZlcmVnaW9ucy1jaGFuZ2VkYWx0Lmh0bWwKKyAgICAgICAgICAgICAgIHBsYXRmb3Jt
L21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZHRleHQuaHRtbAorICAg
ICAgICAgICAgICAgcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1y
ZW1vdmVkZWxlbWVudC5odG1sCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlci5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyLm1tOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBhY2Nlc3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczpdKToKKyAg
ICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVBvc3RlZE5v
dGlmaWNhdGlvbjpdKToKKwogMjAxMC0wNC0yMCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNs
b3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCkluZGV4
OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlci5oCShyZXZpc2lvbiA1NzkwNSkKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9t
YWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyAr
NTMsNyBAQCBAaW50ZXJmYWNlIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIDogCiAtIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KilhY2Nlc3NpYmlsaXR5T2JqZWN0OwogCiAvLyBVc2Vk
IHRvIGluZm9ybSBhbiBlbGVtZW50IHdoZW4gYSBub3RpZmljYXRpb24gaXMgcG9zdGVkIGZvciBp
dC4gVXNlZCBieSBEUlQuCi0tICh2b2lkKWFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmljYXRpb246
KE5TU3RyaW5nICopbm90aWZpY2F0aW9uOworLSAodm9pZClhY2Nlc3NpYmlsaXR5UG9zdGVkTm90
aWZpY2F0aW9uOihOU1N0cmluZyAqKW5vdGlmaWNhdGlvbk5hbWU7CiAKIC0gKE5TVmlldyopYXR0
YWNobWVudFZpZXc7CiAKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkocmV2aXNpb24gNTc5MDUpCisrKyBX
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjY3LDIyICsyNjY3LDE5IEBAIC0gKE5TQXJyYXkgKilhY2Nlc3Np
YmlsaXR5QXJyYXlBdHRyaWJ1dGUKICAgICByZXR1cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlBcnJh
eUF0dHJpYnV0ZVZhbHVlczphdHRyaWJ1dGUgaW5kZXg6aW5kZXggbWF4Q291bnQ6bWF4Q291bnRd
OwogfQogCi0vLyBUaGVzZSBhcmUgdXNlZCBieSBEUlQgc28gdGhhdCBpdCBjYW4ga25vdyB3aGVu
IG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQuCi0vLyBTaW5jZSB0aGV5IGFyZSBzdGF0aWMsIG9ubHkg
b25lIGNhbGxiYWNrIGNhbiBiZSBpbnN0YWxsZWQgYXQgYSB0aW1lICh0aGF0J3MgYWxsIERSVCBz
aG91bGQgbmVlZCkuCi10eXBlZGVmIHZvaWQgKCpBWFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiYWNr
KShpZCBlbGVtZW50LCBOU1N0cmluZyogbm90aWZpY2F0aW9uLCB2b2lkKiBjb250ZXh0KTsKLXN0
YXRpYyBBWFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiYWNrIEFYTm90aWZpY2F0aW9uQ2FsbGJhY2sg
PSAwOwotc3RhdGljIHZvaWQqIEFYUG9zdGVkTm90aWZpY2F0aW9uQ29udGV4dCA9IDA7Ci0KLS0g
KHZvaWQpYWNjZXNzaWJpbGl0eVNldFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiYWNrOihBWFBvc3Rl
ZE5vdGlmaWNhdGlvbkNhbGxiYWNrKWZ1bmN0aW9uIHdpdGhDb250ZXh0Oih2b2lkKiljb250ZXh0
CisvLyBUaGlzIGlzIHNldCBieSBEUlQgd2hlbiBpdCB3YW50cyB0byBsaXN0ZW4gZm9yIG5vdGlm
aWNhdGlvbnMuCitzdGF0aWMgQk9PTCBhY2Nlc3NpYmlsaXR5U2hvdWxkUmVwb3N0Tm90aWZpY2F0
aW9uczsKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eVNldFNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnM6
KEJPT0wpcmVwb3N0CiB7Ci0gICAgQVhOb3RpZmljYXRpb25DYWxsYmFjayA9IGZ1bmN0aW9uOwot
ICAgIEFYUG9zdGVkTm90aWZpY2F0aW9uQ29udGV4dCA9IGNvbnRleHQ7CisgICAgYWNjZXNzaWJp
bGl0eVNob3VsZFJlcG9zdE5vdGlmaWNhdGlvbnMgPSByZXBvc3Q7CiB9CiAKLS0gKHZvaWQpYWNj
ZXNzaWJpbGl0eVBvc3RlZE5vdGlmaWNhdGlvbjooTlNTdHJpbmcgKilub3RpZmljYXRpb24KKy0g
KHZvaWQpYWNjZXNzaWJpbGl0eVBvc3RlZE5vdGlmaWNhdGlvbjooTlNTdHJpbmcgKilub3RpZmlj
YXRpb25OYW1lCiB7Ci0gICAgaWYgKEFYTm90aWZpY2F0aW9uQ2FsbGJhY2spCi0gICAgICAgIEFY
Tm90aWZpY2F0aW9uQ2FsbGJhY2soc2VsZiwgbm90aWZpY2F0aW9uLCBBWFBvc3RlZE5vdGlmaWNh
dGlvbkNvbnRleHQpOworICAgIGlmIChhY2Nlc3NpYmlsaXR5U2hvdWxkUmVwb3N0Tm90aWZpY2F0
aW9ucykgeworICAgICAgICBOU0RpY3Rpb25hcnkqIHVzZXJJbmZvID0gW05TRGljdGlvbmFyeSBk
aWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOm5vdGlmaWNhdGlvbk5hbWUsIEAibm90aWZpY2F0
aW9uTmFtZSIsIG5pbF07CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6QCJBWERSVE5vdGlmaWNhdGlvbiIgb2JqZWN0Om5p
bCB1c2VySW5mbzp1c2VySW5mb107CisgICAgfQogfQogCiBAZW5kCkluZGV4OiBXZWJLaXRUb29s
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lv
biA1NzkwNSkKKysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMzIEBACisyMDEwLTA0LTIwICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgYXJp
YS1saXZlcmVnaW9uLW5vdGlmaWNhdGlvbnMuaHRtbCBmYWlscyBvbiBsZW9wYXJkIHJlbGVhc2Ug
Ym90CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzEx
MgorCisgICAgICAgIENoYW5nZSB0aGUgd2F5IHRoYXQgbm90aWZpY2F0aW9ucyBhcmUgbGlzdGVu
ZWQgZm9yIGJ5IGZvcmNpbmcgY2xpZW50cworICAgICAgICB0byBjYWxsIGEgcmVtb3ZlIGxpc3Rl
bmVyIGFzIHdlbGwgdG8gbWF0Y2ggdGhlIGFkZCBsaXN0ZW5lci4gRFJUIHdpbGwKKyAgICAgICAg
YXNzZXJ0IGlmIHRob3NlIGFyZSBub3QgZG9uZSBpbiB0aGUgY29ycmVjdCBvcmRlci4gCisKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcDoKKyAgICAg
ICAgKHJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2spOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Z2V0SlNDbGFzcyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKyAgICAgICAgKC1bQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgaW5pdFdpdGhQbGF0Zm9ybUVsZW1lbnQ6XSk6Cisg
ICAgICAgICgtW0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIGRlYWxsb2NdKToKKyAg
ICAgICAgKC1bQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgX25vdGlmaWNhdGlvblJl
Y2VpdmVkOl0pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciBz
ZXRDYWxsYmFjazpdKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6fkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRk
Tm90aWZpY2F0aW9uTGlzdGVuZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dp
bi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKyAgICAgICAgKiBTY3JpcHRz
L3ByZXBhcmUtQ2hhbmdlTG9nOgorCiAyMDEwLTA0LTIwICBDaHJpcyBKZXJkb25layAgPGNqZXJk
b25la0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNoaW5pY2hpcm8gSGFtYWpp
LgpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5jcHAJKHJldmlzaW9uIDU3OTA1KQorKysgV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYy
NCw2ICs2MjQsMTIgQEAgc3RhdGljIEpTVmFsdWVSZWYgYWRkTm90aWZpY2F0aW9uTGlzdGVuZQog
ICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgc3VjY2VlZGVkKTsKIH0KIAor
c3RhdGljIEpTVmFsdWVSZWYgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgdG9BWEVsZW1lbnQodGhpc09iamVjdCkt
PnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworfQorCiAvLyBEZXN0cnVjdGlvbgogCiBzdGF0aWMgdm9pZCBmaW5h
bGl6ZShKU09iamVjdFJlZiB0aGlzT2JqZWN0KQpAQCAtNzI4LDYgKzczNCw3IEBAIEpTQ2xhc3NS
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0SlMKICAgICAgICAgeyAic2VsZWN0ZWRSb3dB
dEluZGV4Iiwgc2VsZWN0ZWRSb3dBdEluZGV4Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
aXNFcXVhbCIsIGlzRXF1YWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJhZGROb3RpZmlj
YXRpb25MaXN0ZW5lciIsIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
KyAgICAgICAgeyAicmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIiLCByZW1vdmVOb3RpZmljYXRp
b25MaXN0ZW5lckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInRha2VGb2N1cyIsIHRha2VG
b2N1c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInRha2VTZWxlY3Rpb24iLCB0YWtlU2Vs
ZWN0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiYWRkU2VsZWN0aW9uIiwgYWRkU2Vs
ZWN0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgJKHJldmlzaW9uIDU3OTA1KQorKysg
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxNCBAQCB0eXBlZGVmIEF0a09iamVjdCogUGxhdGZvcm1V
SUVsZW1lbnQ7CiB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtVUlFbGVtZW50OwogI2VuZGlmCiAKKyNp
ZiBQTEFURk9STShNQUMpCisjaWZkZWYgX19PQkpDX18KK3R5cGVkZWYgaWQgTm90aWZpY2F0aW9u
SGFuZGxlcjsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCogTm90aWZpY2F0aW9u
SGFuZGxlcjsKKyNlbmRpZgorI2VuZGlmCisKIGNsYXNzIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQg
ewogcHVibGljOgogICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQp
OwpAQCAtMTc0LDEyICsxODIsMTcgQEAgcHVibGljOgogICAgIC8vIE5vdGlmaWNhdGlvbnMKICAg
ICAvLyBGdW5jdGlvbiBjYWxsYmFjayBzaG91bGQgdGFrZSBvbmUgYXJndW1lbnQsIHRoZSBuYW1l
IG9mIHRoZSBub3RpZmljYXRpb24uCiAgICAgYm9vbCBhZGROb3RpZmljYXRpb25MaXN0ZW5lcihK
U09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKTsKKyAgICAvLyBNYWtlIHN1cmUgeW91IGNhbGwg
cmVtb3ZlLCBiZWNhdXNlIHlvdSBjYW4ndCByZWx5IG9uIG9iamVjdHMgYmVpbmcgZGVhbGxvY2F0
ZWQgaW4gYSB0aW1lbHkgZmFzaGlvbi4KKyAgICB2b2lkIHJlbW92ZU5vdGlmaWNhdGlvbkxpc3Rl
bmVyKCk7CiAgICAgCiBwcml2YXRlOgogICAgIHN0YXRpYyBKU0NsYXNzUmVmIGdldEpTQ2xhc3Mo
KTsKLQogICAgIFBsYXRmb3JtVUlFbGVtZW50IG1fZWxlbWVudDsKLSAgICBKU09iamVjdFJlZiBt
X25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2s7CisgICAgCisgICAgLy8gQSByZXRhaW5lZCwg
cGxhdGZvcm0gc3BlY2lmaWMgb2JqZWN0IHVzZWQgdG8gaGVscCBtYW5hZ2Ugbm90aWZpY2F0aW9u
cyBmb3IgdGhpcyBvYmplY3QuCisjaWYgUExBVEZPUk0oTUFDKQorICAgIE5vdGlmaWNhdGlvbkhh
bmRsZXIgbV9ub3RpZmljYXRpb25IYW5kbGVyOworI2VuZGlmCiB9OwogCiAjZW5kaWYgLy8gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudF9oCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9n
dGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwCShyZXZp
c2lvbiA1NzkwNSkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg4LDYgKzU4OCwxMSBAQCBi
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlmaWNhCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNhdGlvbkxp
c3RlbmVyKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKIGJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNTZWxlY3RhYmxlKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogaW1w
bGVtZW50CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQkocmV2aXNpb24gNTc5MDUpCisrKyBX
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNTcsMzMgKzU3LDExIEBAIHR5cGVkZWYgdm9pZCAoKkFYUG9z
dGVkTm90aWZpY2F0aW9uQ2FsbGIKIAogQGludGVyZmFjZSBOU09iamVjdCAoV2ViS2l0QWNjZXNz
aWJpbGl0eUFkZGl0aW9ucykKIC0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1
dGVWYWx1ZXM6KE5TU3RyaW5nICopYXR0cmlidXRlIGluZGV4OihOU1VJbnRlZ2VyKWluZGV4IG1h
eENvdW50OihOU1VJbnRlZ2VyKW1heENvdW50OwotLSAodm9pZClhY2Nlc3NpYmlsaXR5U2V0UG9z
dGVkTm90aWZpY2F0aW9uQ2FsbGJhY2s6KEFYUG9zdGVkTm90aWZpY2F0aW9uQ2FsbGJhY2spZnVu
Y3Rpb24gd2l0aENvbnRleHQ6KHZvaWQqKWNvbnRleHQ7CistICh2b2lkKWFjY2Vzc2liaWxpdHlT
ZXRTaG91bGRSZXBvc3ROb3RpZmljYXRpb25zOihCT09MKXJlcG9zdDsKIC0gKE5TVUludGVnZXIp
YWNjZXNzaWJpbGl0eUluZGV4T2ZDaGlsZDooaWQpY2hpbGQ7CiAtIChOU1VJbnRlZ2VyKWFjY2Vz
c2liaWxpdHlBcnJheUF0dHJpYnV0ZUNvdW50OihOU1N0cmluZyAqKWF0dHJpYnV0ZTsKIEBlbmQK
IAotQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChQbGF0Zm9y
bVVJRWxlbWVudCBlbGVtZW50KQotICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCi0gICAgLCBtX25v
dGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2soMCkKLXsKLSAgICBbbV9lbGVtZW50IHJldGFpbl07
Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY29u
c3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCYgb3RoZXIpCi0gICAgOiBtX2VsZW1lbnQob3RoZXIu
bV9lbGVtZW50KQotICAgICwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKDApCi17Ci0g
ICAgW21fZWxlbWVudCByZXRhaW5dOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp+QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCgpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgb3VyIG5vdGlm
aWNhdGlvbiBjYWxsYmFjayBkb2VzIG5vdCBzdGljayBhcm91bmQuCi0gICAgaWYgKG1fbm90aWZp
Y2F0aW9uRnVuY3Rpb25DYWxsYmFjaykKLSAgICAgICAgW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5
U2V0UG9zdGVkTm90aWZpY2F0aW9uQ2FsbGJhY2s6MCB3aXRoQ29udGV4dDowXTsKLSAgICBbbV9l
bGVtZW50IHJlbGVhc2VdOwotfQotCiBAaW50ZXJmYWNlIE5TU3RyaW5nIChKU1N0cmluZ1JlZkFk
ZGl0aW9ucykKICsgKE5TU3RyaW5nICopc3RyaW5nV2l0aEpTU3RyaW5nUmVmOihKU1N0cmluZ1Jl
Zilqc1N0cmluZ1JlZjsKIC0gKEpTU3RyaW5nUmVmKWNyZWF0ZUpTU3RyaW5nUmVmOwpAQCAtMTA3
LDYgKzg1LDgzIEBAIC0gKEpTU3RyaW5nUmVmKWNyZWF0ZUpTU3RyaW5nUmVmCiAKIEBlbmQKIAor
QGludGVyZmFjZSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlciA6IE5TT2JqZWN0Cit7
CisgICAgaWQgbV9wbGF0Zm9ybUVsZW1lbnQ7CisgICAgSlNPYmplY3RSZWYgbV9ub3RpZmljYXRp
b25GdW5jdGlvbkNhbGxiYWNrOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBBY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcgorCistIChpZClpbml0V2l0aFBsYXRmb3JtRWxlbWVu
dDooaWQpcGxhdGZvcm1FbGVtZW50Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKworICAg
IG1fcGxhdGZvcm1FbGVtZW50ID0gcGxhdGZvcm1FbGVtZW50OworICAgIAorICAgIC8vIE9uY2Ug
YW4gb2JqZWN0IHN0YXJ0cyByZXF1ZXN0aW5nIG5vdGlmaWNhdGlvbnMsIGl0J3Mgb24gZm9yIHRo
ZSBkdXJhdGlvbiBvZiB0aGUgcHJvZ3JhbS4KKyAgICAvLyBUaGlzIGlzIHRvIGF2b2lkIGFueSBy
YWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0ZXN0cyB0dXJuaW5nIHRoaXMgZmxhZyBvbiBhbmQgb2Zm
LiBJbnN0ZWFkCisgICAgLy8gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIgY2FuIGp1
c3QgbGlzdGVuIHdoZW4gdGhleSB3YW50IHRvLgorICAgIFttX3BsYXRmb3JtRWxlbWVudCBhY2Nl
c3NpYmlsaXR5U2V0U2hvdWxkUmVwb3N0Tm90aWZpY2F0aW9uczpZRVNdOworICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpA
c2VsZWN0b3IoX25vdGlmaWNhdGlvblJlY2VpdmVkOikgbmFtZTpAIkFYRFJUTm90aWZpY2F0aW9u
IiBvYmplY3Q6bmlsXTsKKworICAgIHJldHVybiBzZWxmOworfQorIAorLSAodm9pZClkZWFsbG9j
Cit7CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNl
cnZlcjpzZWxmXTsKKyAgICBKU1ZhbHVlVW5wcm90ZWN0KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4
dF0sIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayk7CisgICAgbV9ub3RpZmljYXRpb25G
dW5jdGlvbkNhbGxiYWNrID0gMDsKKyAgICAKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0g
KHZvaWQpX25vdGlmaWNhdGlvblJlY2VpdmVkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgoreworICAgIE5TU3RyaW5nICpub3RpZmljYXRpb25OYW1lID0gW1tub3RpZmljYXRpb24gdXNl
ckluZm9dIG9iamVjdEZvcktleTpAIm5vdGlmaWNhdGlvbk5hbWUiXTsKKyAgICBpZiAoIW5vdGlm
aWNhdGlvbk5hbWUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4ganNOb3RpZmljYXRpb24oQWRvcHQsIFtub3RpZmljYXRpb25OYW1lIGNyZWF0ZUpT
U3RyaW5nUmVmXSk7CisgICAgSlNWYWx1ZVJlZiBhcmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5n
KFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIGpzTm90aWZpY2F0aW9uLmdldCgpKTsKKyAgICBK
U09iamVjdENhbGxBc0Z1bmN0aW9uKFttYWluRnJhbWUgZ2xvYmFsQ29udGV4dF0sIG1fbm90aWZp
Y2F0aW9uRnVuY3Rpb25DYWxsYmFjaywgMCwgMSwgJmFyZ3VtZW50LCAwKTsKK30KKworLSAodm9p
ZClzZXRDYWxsYmFjazooSlNPYmplY3RSZWYpY2FsbGJhY2sKK3sKKyAgICBpZiAoIWNhbGxiYWNr
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxi
YWNrID0gY2FsbGJhY2s7CisgICAgSlNWYWx1ZVByb3RlY3QoW21haW5GcmFtZSBnbG9iYWxDb250
ZXh0XSwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKTsKK30KKworQGVuZAorCitBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFBsYXRmb3JtVUlFbGVt
ZW50IGVsZW1lbnQpCisgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAsIG1fbm90aWZpY2F0
aW9uSGFuZGxlcigwKQoreworICAgIFttX2VsZW1lbnQgcmV0YWluXTsKK30KKworQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChjb25zdCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50JiBvdGhlcikKKyAgICA6IG1fZWxlbWVudChvdGhlci5tX2VsZW1lbnQpCisgICAg
LCBtX25vdGlmaWNhdGlvbkhhbmRsZXIoMCkKK3sKKyAgICBbbV9lbGVtZW50IHJldGFpbl07Cit9
CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6On5BY2Nlc3NpYmlsaXR5VUlFbGVtZW50KCkKK3sK
KyAgICAvLyBUaGUgbm90aWZpY2F0aW9uIGhhbmRsZXIgc2hvdWxkIGJlIG5pbCBiZWNhdXNlIHJl
bW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgaW4gdGhl
IHRlc3QuCisgICAgQVNTRVJUKCFtX25vdGlmaWNhdGlvbkhhbmRsZXIpOworICAgIFttX2VsZW1l
bnQgcmVsZWFzZV07Cit9CisKIHN0YXRpYyBOU1N0cmluZyogZGVzY3JpcHRpb25PZlZhbHVlKGlk
IHZhbHVlT2JqZWN0LCBpZCBmb2N1c2VkQWNjZXNzaWJpbGl0eU9iamVjdCkKIHsKICAgICBpZiAo
IXZhbHVlT2JqZWN0KQpAQCAtNzgwLDI4ICs4MzUsMzAgQEAgSlNTdHJpbmdSZWYgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dXJsKAogICAgIHJldHVybiBbW3VybCBhYnNvbHV0ZVN0cmluZ10gY3Jl
YXRlSlNTdHJpbmdSZWZdOyAgICAKIH0KIAotc3RhdGljIHZvaWQgX2FjY2Vzc2liaWxpdHlOb3Rp
ZmljYXRpb25DYWxsYmFjayhpZCBlbGVtZW50LCBOU1N0cmluZyogbm90aWZpY2F0aW9uLCB2b2lk
KiBjb250ZXh0KQotewotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
SlNPYmplY3RSZWYgZnVuY3Rpb25DYWxsYmFjayA9IHN0YXRpY19jYXN0PEpTT2JqZWN0UmVmPihj
b250ZXh0KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc05vdGlmaWNhdGlvbihB
ZG9wdCwgW25vdGlmaWNhdGlvbiBjcmVhdGVKU1N0cmluZ1JlZl0pOwotICAgIEpTVmFsdWVSZWYg
YXJndW1lbnQgPSBKU1ZhbHVlTWFrZVN0cmluZyhbbWFpbkZyYW1lIGdsb2JhbENvbnRleHRdLCBq
c05vdGlmaWNhdGlvbi5nZXQoKSk7Ci0gICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihbbWFpbkZy
YW1lIGdsb2JhbENvbnRleHRdLCBmdW5jdGlvbkNhbGxiYWNrLCBOVUxMLCAxLCAmYXJndW1lbnQs
IE5VTEwpOwotfQotCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlmaWNhdGlv
bkxpc3RlbmVyKEpTT2JqZWN0UmVmIGZ1bmN0aW9uQ2FsbGJhY2spCiB7CiAgICAgaWYgKCFmdW5j
dGlvbkNhbGxiYWNrKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgCi0gICAgbV9ub3RpZmljYXRp
b25GdW5jdGlvbkNhbGxiYWNrID0gZnVuY3Rpb25DYWxsYmFjazsKLSAgICBbcGxhdGZvcm1VSUVs
ZW1lbnQoKSBhY2Nlc3NpYmlsaXR5U2V0UG9zdGVkTm90aWZpY2F0aW9uQ2FsbGJhY2s6X2FjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25DYWxsYmFjayB3aXRoQ29udGV4dDpyZWludGVycHJldF9jYXN0
PHZvaWQqPihtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spXTsKKyAgICAvLyBNYWMgcHJv
Z3JhbW1lcnMgc2hvdWxkIG5vdCBiZSBhZGRpbmcgbW9yZSB0aGFuIG9uZSBub3RpZmljYXRpb24g
bGlzdGVuZXIgcGVyIGVsZW1lbnQuCisgICAgLy8gT3RoZXIgcGxhdGZvcm1zIG1heSBiZSBkaWZm
ZXJlbnQuCisgICAgaWYgKG1fbm90aWZpY2F0aW9uSGFuZGxlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIG1fbm90aWZpY2F0aW9uSGFuZGxlciA9IFtbQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbkhhbmRsZXIgYWxsb2NdIGluaXRXaXRoUGxhdGZvcm1FbGVtZW50OnBsYXRmb3JtVUlFbGVt
ZW50KCldOworICAgIFttX25vdGlmaWNhdGlvbkhhbmRsZXIgc2V0Q2FsbGJhY2s6ZnVuY3Rpb25D
YWxsYmFja107CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCit7CisgICAgLy8gTWFjIHByb2dy
YW1tZXJzIHNob3VsZCBub3QgYmUgdHJ5aW5nIHRvIHJlbW92ZSBhIGxpc3RlbmVyIHRoYXQncyBh
bHJlYWR5IHJlbW92ZWQuCisgICAgQVNTRVJUKG1fbm90aWZpY2F0aW9uSGFuZGxlcik7CisKKyAg
ICBbbV9ub3RpZmljYXRpb25IYW5kbGVyIHJlbGVhc2VdOworICAgIG1fbm90aWZpY2F0aW9uSGFu
ZGxlciA9IG5pbDsKK30KKwogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFi
bGUoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKSW5kZXg6IFdlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxl
bWVudFdpbi5jcHAJKHJldmlzaW9uIDU3OTA1KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NjIsNiArNTYyLDExIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2EK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1v
dmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQor
CiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSgpIGNvbnN0CiB7CiAg
ICAgRFdPUkQgc3RhdGUgPSBhY2Nlc3NpYmlsaXR5U3RhdGUobV9lbGVtZW50KTsKSW5kZXg6IFdl
YktpdFRvb2xzL1NjcmlwdHMvcHJlcGFyZS1DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
VG9vbHMvU2NyaXB0cy9wcmVwYXJlLUNoYW5nZUxvZwkocmV2aXNpb24gNTc5MDUpCisrKyBXZWJL
aXRUb29scy9TY3JpcHRzL3ByZXBhcmUtQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAs
NyArMjYwLDcgQEAgaWYgKCRidWdOdW1iZXIpIHsKICAgICAkYnVnVVJMID0gImh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0kYnVnTnVtYmVyIjsKICAgICBteSAkYnVnWE1M
VVJMID0gIiRidWdVUkwmY3R5cGU9eG1sIjsKICAgICAjIFBlcmwgaGFzIG5vIGJ1aWx0IGluIFhN
TCBwcm9jZXNzaW5nLCBzbyB3ZSdsbCBmZXRjaCBhbmQgcGFyc2Ugd2l0aCBjdXJsIGFuZCBncmVw
Ci0gICAgbXkgJGRlc2NyaXB0aW9uTGluZSA9IGBjdXJsIC0tc2lsZW50ICIkYnVnWE1MVVJMIiB8
IGdyZXAgc2hvcnRfZGVzY2A7CisgICAgbXkgJGRlc2NyaXB0aW9uTGluZSA9IGBjdXJsIC1rIC0t
c2lsZW50ICIkYnVnWE1MVVJMIiB8IGdyZXAgc2hvcnRfZGVzY2A7CiAgICAgaWYgKCRkZXNjcmlw
dGlvbkxpbmUgIX4gLzxzaG9ydF9kZXNjPiguKik8XC9zaG9ydF9kZXNjPi8pIHsKICAgICAgICAg
cHJpbnQgU1RERVJSICIgIEJ1ZyAkYnVnTnVtYmVyIGhhcyBubyBidWcgZGVzY3JpcHRpb24uIE1h
eWJlIHlvdSBzZXQgd3JvbmcgYnVnIElEP1xuIjsKICAgICAgICAgcHJpbnQgU1RERVJSICIgIFRo
ZSBidWcgVVJMOiAkYnVnWE1MVVJMXG4iOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTc5MDUpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOSBAQAorMjAx
MC0wNC0yMCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGFyaWEtbGl2ZXJlZ2lvbi1u
b3RpZmljYXRpb25zLmh0bWwgZmFpbHMgb24gbGVvcGFyZCByZWxlYXNlIGJvdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcxMTIKKworICAgICAgICBB
ZGQgZm91ciBtb3JlIHRlc3RzIHRoYXQgdGVzdCBzcGVjaWZpYyBsaXZlIHJlZ2lvbiBmdW5jdGlv
bmFsaXR5LiBIYXZpbmcgdGhlc2UKKyAgICAgICAgZm91ciB0ZXN0cyBydW4gaW4gb3JkZXIgc2Vl
bXMgdG8gc3RyZXNzIHRoZSBub3RpZmljYXRpb24gbWVjaGFuaXNtIGFuZCB3aWxsIGV4cG9zZSBp
c3N1ZXMgCisgICAgICAgIG1vcmUgZnJlcXVlbnRseS4KKyAgICAgICAgTW9kaWZ5IHRlc3RzIHRo
YXQgdXNlIG5vdGlmaWNhdGlvbiBsaXN0ZW5lcnMgdG8gYWxzbyAicmVtb3ZlTm90aWZpY2F0aW9u
TGlzdGVuZXIiLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjLWxlb3BhcmQvU2tpcHBlZDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpc3Rib3gtc2VsZWN0ZWRj
aGlsZHJlbi1jaGFuZ2UuaHRtbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0
eS9hcmlhLWxpdmVyZWdpb24tb24taW1hZ2UuaHRtbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
YWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLWFkZGVkZWxlbWVudC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJl
Z2lvbnMtYWRkZWRlbGVtZW50Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9h
Y2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZGFsdC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lv
bnMtY2hhbmdlZGFsdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNz
aWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLWNoYW5nZWR0ZXh0LWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1j
aGFuZ2VkdGV4dC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJp
bGl0eS9hcmlhLWxpdmVyZWdpb25zLW5vdGlmaWNhdGlvbnMuaHRtbDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLXJlbW92ZWRlbGVtZW50LWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkv
YXJpYS1saXZlcmVnaW9ucy1yZW1vdmVkZWxlbWVudC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9jaGFuZ2Utbm90aWZpY2F0aW9uLW9uLXNjcm9sbC5o
dG1sOgorCiAyMDEwLTA0LTIwICBTZXJnZXkgVWxhbm92IDxzZXJnZXl1QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkLCBjaGVja2luZyBpbiBiYXNlbGluZXMgZHVlIHRvIGNoYW5n
ZXMgdG8gQ2hyb21pdW0ncyB2aWRlbyBzY2FsaW5nIGFsZ29yaXRobS4KSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy1sZW9wYXJkL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjLWxlb3BhcmQvU2tpcHBlZAkocmV2aXNpb24gNTc5MDUpCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMtbGVvcGFyZC9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC05
LDggKzksNiBAQCBzdmcvY3NzL2dseXBoLW9yaWVudGF0aW9uLXJvdW5kaW5nLXRlc3QuCiBwbGF0
Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS90YWJsZS1tdWx0aS1ib2RpZXMuaHRtbAogIyBMaXN0cyBh
cmUgbm90IHN1cHBvcnRlZCBvbiBMZW9wYXJkLgogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkv
YXJpYS1kaXJlY3RvcnkuaHRtbAotIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzcxMTIgTGl2ZSByZWdpb25zIGZhaWxzIG9uIGxlb3BhcmQgcmVsZWFzZSBib3QuCi1w
bGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLW5vdGlmaWNhdGlvbnMu
aHRtbAogCiAjIFRlc3RzIG9mIGZvbnQgZmVhdHVyZXMgbm90IHN1cHBvcnRlZCBieSBBVFNVSQog
cGxhdGZvcm0vbWFjL2Zhc3QvdGV4dC9teWFubWFyLXNoYXBpbmcuaHRtbApJbmRleDogTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXN0Ym94LXNlbGVjdGVkY2hp
bGRyZW4tY2hhbmdlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2FjY2Vzc2liaWxpdHkvYXJpYS1saXN0Ym94LXNlbGVjdGVkY2hpbGRyZW4tY2hhbmdlLmh0bWwJ
KHJldmlzaW9uIDU3OTA1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxp
dHkvYXJpYS1saXN0Ym94LXNlbGVjdGVkY2hpbGRyZW4tY2hhbmdlLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDYgKzIyLDcgQEAgdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOwogCiAg
ICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCB3aGVuIGFyaWEtc2VsZWN0ZWQgaXMgY2hh
bmdlZCBpbiBhIGxpc3Rib3gsIHRoZSBjb3JyZWN0IG5vdGlmaWNhdGlvbiBpcyBzZW50LiIpOwog
CisgICAgdmFyIGxpc3Rib3ggPSAwOwogICAgIHZhciBub3RpZmljYXRpb25Db3VudCA9IDA7CiAg
ICAgZnVuY3Rpb24gYXJpYUNhbGxiYWNrKG5vdGlmaWNhdGlvbikgewogICAgICAgICBpZiAobm90
aWZpY2F0aW9uID09ICJBWFNlbGVjdGVkQ2hpbGRyZW5DaGFuZ2VkIikgewpAQCAtMjksNiArMzAs
NyBAQCB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7CiAKICAgICAgICAgICAgIC8vIFdl
IHNob3VsZCBnZXQgYSB0b3RhbCBvZiA0IGxpdmUgcmVnaW9uIGNoYW5nZXMuCiAgICAgICAgICAg
ICBpZiAobm90aWZpY2F0aW9uQ291bnQgPT0gMikgeworICAgICAgICAgICAgICAgbGlzdGJveC5y
ZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpOwogICAgICAgICAgICAgICAgd2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMzgsNyArNDAsNyBAQCB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7CiAgICAgICAg
IHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiAKICAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxpc3Rib3giKS5mb2N1cygpOwotICAgICAgICB2YXIg
bGlzdGJveCA9IHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsK
KyAgICAgICAgbGlzdGJveCA9IHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2Vk
RWxlbWVudDsKIAogICAgICAgICB2YXIgYWRkZWROb3RpZmljYXRpb24gPSBsaXN0Ym94LmFkZE5v
dGlmaWNhdGlvbkxpc3RlbmVyKGFyaWFDYWxsYmFjayk7CiAgICAgICAgIHNob3VsZEJlKCJhZGRl
ZE5vdGlmaWNhdGlvbiIsICJ0cnVlIik7CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
YWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb24tb24taW1hZ2UuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb24t
b24taW1hZ2UuaHRtbAkocmV2aXNpb24gNTc5MDUpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb24tb24taW1hZ2UuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMTgsOCArMTgsMTAgQEAgdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOwog
CiAgICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCBBUklBIGxpdmUgcmVnaW9ucyB0aGF0
IGlzIG9uIGFuIGltYWdlIHdpbGwgd29yayB3aGVuIHRoZSBhbHQgdGFnIGlzIGNoYW5nZWQuIik7
CiAKKyAgICB2YXIgaW1hZ2UgPSAwOwogICAgIGZ1bmN0aW9uIGFyaWFDYWxsYmFjayhub3RpZmlj
YXRpb24pIHsKICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbiA9PSAiQVhMaXZlUmVnaW9uQ2hhbmdl
ZCIpIHsKKyAgICAgICAgICAgIGltYWdlLnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCk7CiAg
ICAgICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMjgsNyArMzAsNyBAQCB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
ZmFsc2U7CiAgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7CiAKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImltYWdlIikuZm9jdXMoKTsK
LSAgICAgICAgdmFyIGltYWdlID0gd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3Vz
ZWRFbGVtZW50OworICAgICAgICBpbWFnZSA9IHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5mb2N1c2VkRWxlbWVudDsKIAogICAgICAgICB2YXIgYWRkZWROb3RpZmljYXRpb24gPSBpbWFn
ZS5hZGROb3RpZmljYXRpb25MaXN0ZW5lcihhcmlhQ2FsbGJhY2spOwogICAgICAgICBzaG91bGRC
ZSgiYWRkZWROb3RpZmljYXRpb24iLCAidHJ1ZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1hZGRlZGVsZW1lbnQtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmls
aXR5L2FyaWEtbGl2ZXJlZ2lvbnMtYWRkZWRlbGVtZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJl
Z2lvbnMtYWRkZWRlbGVtZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NCBAQAorQUxFUlQ6IFN1Y2Nlc3NmdWxseSByZWNlaXZlZCBBWExpdmVSZWdpb25DaGFuZ2VkCit0
ZXh0CisKK2hlbGxvbmV3IHRleHQgZWxlbWVudAorVGhpcyB0ZXN0cyB0aGF0IGFkZGluZyBhbiBl
bGVtZW50IHRvIGEgbGl2ZSByZWdpb24gd2lsbCB0cmlnZ2VyIHRoZSByaWdodCBub3RpZmljYXRp
b24uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGFkZGVkTm90aWZpY2F0
aW9uIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlh
LWxpdmVyZWdpb25zLWFkZGVkZWxlbWVudC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtYWRkZWRlbGVtZW50
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJp
bGl0eS9hcmlhLWxpdmVyZWdpb25zLWFkZGVkZWxlbWVudC5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDUxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9F
TiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0PgordmFyIHN1
Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHkgaWQ9ImJvZHkiPgorCis8ZGl2IHJvbGU9Imdyb3VwIiB0YWJpbmRleD0wIGlkPSJsaXZl
cmVnaW9uIiBhcmlhLWxpdmU9InBvbGl0ZSIgYXJpYS1yZWxldmFudD0iYWRkaXRpb25zIj4KKzxo
MyBpZD0iaW5uZXJsaXZlIj50ZXh0PC9oMz4KKzxkaXYgaWQ9ImFkZHJlZ2lvbiI+aGVsbG88L2Rp
dj4KKzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorCis8c2NyaXB0PgorCisgICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCBh
ZGRpbmcgYW4gZWxlbWVudCB0byBhIGxpdmUgcmVnaW9uIHdpbGwgdHJpZ2dlciB0aGUgcmlnaHQg
bm90aWZpY2F0aW9uLiIpOworCisgICAgdmFyIGxpdmVSZWdpb24gPSAwOworICAgIGZ1bmN0aW9u
IGFyaWFDYWxsYmFjayhub3RpZmljYXRpb24pIHsKKyAgICAgICAgaWYgKG5vdGlmaWNhdGlvbiA9
PSAiQVhMaXZlUmVnaW9uQ2hhbmdlZCIpIHsKKyAgICAgICAgICAgYWxlcnQoIlN1Y2Nlc3NmdWxs
eSByZWNlaXZlZCAiICsgbm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgbGl2ZVJlZ2lvbi5yZW1v
dmVOb3RpZmljYXRpb25MaXN0ZW5lcigpOworICAgICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHdpbmRv
dy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJsaXZlcmVnaW9uIikuZm9jdXMoKTsKKyAgICAgICAgbGl2ZVJlZ2lvbiA9IHdpbmRvdy5h
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKworICAgICAgICB2YXIgYWRk
ZWROb3RpZmljYXRpb24gPSBsaXZlUmVnaW9uLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKGFyaWFD
YWxsYmFjayk7CisgICAgICAgIHNob3VsZEJlKCJhZGRlZE5vdGlmaWNhdGlvbiIsICJ0cnVlIik7
CisKKyAgICAgICAgLy8gdGhpcyBzaG91bGQgdHJpZ2dlciBvdXIgbGl2ZSByZWdpb24gY2FsbGJh
Y2sgZm9yIGEgbmV3IGVsZW1lbnQuCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJh
ZGRyZWdpb24iKS5pbm5lckhUTUwgKz0gIm5ldyB0ZXh0IGVsZW1lbnQiOworICAgIH0KKworICAg
IHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4u
Ly4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0
eS9hcmlhLWxpdmVyZWdpb25zLWNoYW5nZWRhbHQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMt
Y2hhbmdlZGFsdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLWNoYW5nZWRhbHQtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACitBTEVSVDogU3VjY2Vzc2Z1bGx5
IHJlY2VpdmVkIEFYTGl2ZVJlZ2lvbkNoYW5nZWQKKworVGhpcyB0ZXN0cyB0aGF0IGNoYW5naW5n
IHRoZSBhbHQgdGFnIG9mIGFuIGltYWdlIGluIGEgbGl2ZSByZWdpb24gdHJpZ2dlcnMgYSBsaXZl
IHJlZ2lvbiBub3RpZmljYXRpb24uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIGFkZGVkTm90aWZpY2F0aW9uIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
YWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb25zLWNoYW5nZWRhbHQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdp
b25zLWNoYW5nZWRhbHQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZGFsdC5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYv
L0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2Ny
aXB0PgordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOworPC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgaWQ9ImJvZHkiPgorCis8ZGl2IHJvbGU9Imdyb3VwIiB0YWJpbmRl
eD0wIGlkPSJsaXZlcmVnaW9uIiBhcmlhLWxpdmU9InBvbGl0ZSIgYXJpYS1yZWxldmFudD0iYWRk
aXRpb25zIj4KKzxpbWcgc3JjPSJ0ZXN0LmdpZiIgd2lkdGg9MTAwIGhlaWdodD0xMDAgYWx0PSJh
bHQgdGV4dCIgaWQ9ImltYWdlIj4KKzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorCisgICAgZGVzY3JpcHRpb24o
IlRoaXMgdGVzdHMgdGhhdCBjaGFuZ2luZyB0aGUgYWx0IHRhZyBvZiBhbiBpbWFnZSBpbiBhIGxp
dmUgcmVnaW9uIHRyaWdnZXJzIGEgbGl2ZSByZWdpb24gbm90aWZpY2F0aW9uLiIpOworCisgICAg
dmFyIGxpdmVSZWdpb25BbHQgPSAwOworICAgIGZ1bmN0aW9uIGFyaWFDYWxsYmFja0FsdChub3Rp
ZmljYXRpb24pIHsKKyAgICAgICAgaWYgKG5vdGlmaWNhdGlvbiA9PSAiQVhMaXZlUmVnaW9uQ2hh
bmdlZCIpIHsKKyAgICAgICAgICAgYWxlcnQoIlN1Y2Nlc3NmdWxseSByZWNlaXZlZCAiICsgbm90
aWZpY2F0aW9uKTsKKyAgICAgICAgICAgbGl2ZVJlZ2lvbkFsdC5yZW1vdmVOb3RpZmljYXRpb25M
aXN0ZW5lcigpOworICAgICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcikgeworICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsaXZlcmVnaW9u
IikuZm9jdXMoKTsKKyAgICAgICAgbGl2ZVJlZ2lvbkFsdCA9IHdpbmRvdy5hY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKworICAgICAgICB2YXIgYWRkZWROb3RpZmljYXRp
b24gPSBsaXZlUmVnaW9uQWx0LmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKGFyaWFDYWxsYmFja0Fs
dCk7CisgICAgICAgIHNob3VsZEJlKCJhZGRlZE5vdGlmaWNhdGlvbiIsICJ0cnVlIik7CisKKyAg
ICAgICAgLy8gdGhpcyBzaG91bGQgYWxzbyB0cmlnZ2VyIG91ciBsaXZlIHJlZ2lvbiBjaGFuZ2Ug
YmVjYXVzZSBpdHMgYSB0ZXh0IGFsdGVybmF0aXZlIGNoYW5nZS4gCisgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJpbWFnZSIpLnNldEF0dHJpYnV0ZSgnYWx0JywgIm5ldyBpbWFnZSB0
ZXh0Iik7CisgICAgfQorCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0
PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZHRleHQtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmls
aXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZHRleHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVn
aW9ucy1jaGFuZ2VkdGV4dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMg
QEAKK0FMRVJUOiBTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgQVhMaXZlUmVnaW9uQ2hhbmdlZAorY2hh
bmdlZCB0ZXh0CisKK1RoaXMgdGVzdHMgdGhhdCB3aGVuIHlvdSBjaGFuZ2UgdGV4dCBpbiBhIGxp
dmUgcmVnaW9uLCB0aGUgcHJvcGVyIG5vdGlmaWNhdGlvbiBpcyBzZW50LgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBhZGRlZE5vdGlmaWNhdGlvbiBpcyB0cnVlCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1jaGFu
Z2VkdGV4dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nl
c3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtY2hhbmdlZHRleHQuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lv
bnMtY2hhbmdlZHRleHQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorPCFET0NU
WVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4K
KzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdD4KK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBm
YWxzZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKwor
PGRpdiByb2xlPSJncm91cCIgdGFiaW5kZXg9MCBpZD0ibGl2ZXJlZ2lvbiIgYXJpYS1saXZlPSJw
b2xpdGUiIGFyaWEtcmVsZXZhbnQ9ImFkZGl0aW9ucyI+Cis8aDMgaWQ9ImlubmVybGl2ZSI+dGV4
dDwvaDM+Cis8L2Rpdj4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKworPHNjcmlwdD4KKworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRo
YXQgd2hlbiB5b3UgY2hhbmdlIHRleHQgaW4gYSBsaXZlIHJlZ2lvbiwgdGhlIHByb3BlciBub3Rp
ZmljYXRpb24gaXMgc2VudC4iKTsKKworICAgIHZhciBsaXZlUmVnaW9uVGV4dCA9IDA7CisgICAg
ZnVuY3Rpb24gYXJpYUNhbGxiYWNrVGV4dChub3RpZmljYXRpb24pIHsKKyAgICAgICAgaWYgKG5v
dGlmaWNhdGlvbiA9PSAiQVhMaXZlUmVnaW9uQ2hhbmdlZCIpIHsKKyAgICAgICAgICAgYWxlcnQo
IlN1Y2Nlc3NmdWxseSByZWNlaXZlZCAiICsgbm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgbGl2
ZVJlZ2lvblRleHQucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKKyAgICAgICAgICAgd2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgd2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgibGl2ZXJlZ2lvbiIpLmZvY3VzKCk7CisgICAgICAgIGxpdmVS
ZWdpb25UZXh0ID0gd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50
OworCisgICAgICAgIHZhciBhZGRlZE5vdGlmaWNhdGlvbiA9IGxpdmVSZWdpb25UZXh0LmFkZE5v
dGlmaWNhdGlvbkxpc3RlbmVyKGFyaWFDYWxsYmFja1RleHQpOworICAgICAgICBzaG91bGRCZSgi
YWRkZWROb3RpZmljYXRpb24iLCAidHJ1ZSIpOworCisgICAgICAgIC8vIHRoaXMgc2hvdWxkIHRy
aWdnZXIgb3VyIGxpdmUgcmVnaW9uIGNhbGxiYWNrIGZvciBhIHRleHQgY2hhbmdlLgorICAgICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW5uZXJsaXZlIikuaW5uZXJUZXh0ID0gImNoYW5n
ZWQgdGV4dCI7CisgICAgfQorCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2Ny
aXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtbm90aWZpY2F0aW9ucy5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5
L2FyaWEtbGl2ZXJlZ2lvbnMtbm90aWZpY2F0aW9ucy5odG1sCShyZXZpc2lvbiA1NzkwNSkKKysr
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMt
bm90aWZpY2F0aW9ucy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBAIHZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKIAogICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3Rz
IHRoYXQgQVJJQSBsaXZlIHJlZ2lvbnMgYXJlIHNlbmRpbmcgb3V0IHRoZSBjb3JyZWN0IG5vdGlm
aWNhdGlvbnMuIFdlIHBlcmZvcm0gZm91ciBvcGVyYXRpb25zIChhZGQsIHJlbW92ZSwgY2hhbmdl
IHRleHQsIGNoYW5nZSBhbHQgdGFnKSwgZWFjaCBvbmUgc2hvdWxkIHRyaWdnZXIgYSBsaXZlIHJl
Z2lvbiBub3RpZmljYXRpb24iKTsKIAorICAgIHZhciBsaXZlUmVnaW9uID0gMDsKICAgICB2YXIg
bGl2ZVJlZ2lvbkNoYW5nZUNvdW50ID0gMDsKICAgICBmdW5jdGlvbiBhcmlhQ2FsbGJhY2sobm90
aWZpY2F0aW9uKSB7CiAgICAgICAgIGlmIChub3RpZmljYXRpb24gPT0gIkFYTGl2ZVJlZ2lvbkNo
YW5nZWQiKSB7CkBAIC0yOCw2ICsyOSw3IEBAIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxz
ZTsKIAogICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGdldCBhIHRvdGFsIG9mIDQgbGl2ZSByZWdp
b24gY2hhbmdlcy4KICAgICAgICAgICAgIGlmIChsaXZlUmVnaW9uQ2hhbmdlQ291bnQgPT0gNCkg
eworICAgICAgICAgICAgICAgbGl2ZVJlZ2lvbi5yZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigp
OwogICAgICAgICAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzcsNyArMzksNyBAQCB2YXIgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gZmFsc2U7CiAgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CiAKICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxp
dmVyZWdpb24iKS5mb2N1cygpOwotICAgICAgICB2YXIgbGl2ZVJlZ2lvbiA9IHdpbmRvdy5hY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKyAgICAgICAgbGl2ZVJlZ2lvbiA9
IHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKIAogICAgICAg
ICB2YXIgYWRkZWROb3RpZmljYXRpb24gPSBsaXZlUmVnaW9uLmFkZE5vdGlmaWNhdGlvbkxpc3Rl
bmVyKGFyaWFDYWxsYmFjayk7CiAgICAgICAgIHNob3VsZEJlKCJhZGRlZE5vdGlmaWNhdGlvbiIs
ICJ0cnVlIik7CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9h
cmlhLWxpdmVyZWdpb25zLXJlbW92ZWRlbGVtZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLWxpdmVyZWdpb25z
LXJlbW92ZWRlbGVtZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtcmVtb3ZlZGVsZW1l
bnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACitBTEVSVDogU3Vj
Y2Vzc2Z1bGx5IHJlY2VpdmVkIEFYTGl2ZVJlZ2lvbkNoYW5nZWQKKworVGhpcyB0ZXN0cyB0aGF0
IEFSSUEgcmVtb3ZpbmcgYW4gZWxlbWVudCBmcm9tIGEgbGl2ZSByZWdpb24gc2VuZHMgdGhlIGNv
cnJlY3Qgbm90aWZpY2F0aW9uLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBhZGRlZE5vdGlmaWNhdGlvbiBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Fj
Y2Vzc2liaWxpdHkvYXJpYS1saXZlcmVnaW9ucy1yZW1vdmVkZWxlbWVudC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJl
Z2lvbnMtcmVtb3ZlZGVsZW1lbnQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtbGl2ZXJlZ2lvbnMtcmVtb3ZlZGVsZW1lbnQu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdD4KK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKworPGRpdiByb2xlPSJncm91
cCIgdGFiaW5kZXg9MCBpZD0ibGl2ZXJlZ2lvbiIgYXJpYS1saXZlPSJwb2xpdGUiIGFyaWEtcmVs
ZXZhbnQ9ImFkZGl0aW9ucyI+Cis8aDMgaWQ9ImlubmVybGl2ZSI+dGV4dDwvaDM+Cis8aW1nIHNy
Yz0idGVzdC5naWYiIHdpZHRoPTEwMCBoZWlnaHQ9MTAwIGFsdD0iYWx0IHRleHQiIHRhYmluZGV4
PTAgaWQ9ImltYWdlIj4KKzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorCisgICAgZGVzY3JpcHRpb24oIlRoaXMg
dGVzdHMgdGhhdCBBUklBIHJlbW92aW5nIGFuIGVsZW1lbnQgZnJvbSBhIGxpdmUgcmVnaW9uIHNl
bmRzIHRoZSBjb3JyZWN0IG5vdGlmaWNhdGlvbi4iKTsKKworICAgIHZhciBsaXZlUmVnaW9uID0g
MDsKKyAgICBmdW5jdGlvbiBhcmlhQ2FsbGJhY2sobm90aWZpY2F0aW9uKSB7CisgICAgICAgIGlm
IChub3RpZmljYXRpb24gPT0gIkFYTGl2ZVJlZ2lvbkNoYW5nZWQiKSB7CisgICAgICAgICAgIGFs
ZXJ0KCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgIiArIG5vdGlmaWNhdGlvbik7CisgICAgICAgICAg
IGxpdmVSZWdpb24ucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsKKyAgICAgICAgICAgd2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgd2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgibGl2ZXJlZ2lvbiIpLmZvY3VzKCk7CisgICAgICAgIGxpdmVS
ZWdpb24gPSB3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisK
KyAgICAgICAgdmFyIGFkZGVkTm90aWZpY2F0aW9uID0gbGl2ZVJlZ2lvbi5hZGROb3RpZmljYXRp
b25MaXN0ZW5lcihhcmlhQ2FsbGJhY2spOworICAgICAgICBzaG91bGRCZSgiYWRkZWROb3RpZmlj
YXRpb24iLCAidHJ1ZSIpOworCisgICAgICAgIC8vIHRoaXMgc2hvdWxkIHRyaWdnZXIgb3VyIGxp
dmUgcmVnaW9uIGNhbGxiYWNrIGZvciBhIHJlbW92ZWQgZWxlbWVudC4KKyAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImxpdmVyZWdpb24iKS5yZW1vdmVDaGlsZChkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiaW5uZXJsaXZlIikpOyAKKyAgICB9CisKKyAgICBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvY2hhbmdlLW5vdGlmaWNh
dGlvbi1vbi1zY3JvbGwuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS9jaGFuZ2Utbm90aWZpY2F0aW9uLW9uLXNjcm9sbC5odG1sCShyZXZp
c2lvbiA1NzkwNSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2No
YW5nZS1ub3RpZmljYXRpb24tb24tc2Nyb2xsLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTExLDEw
ICsxMSwxMiBAQCBoZWxsbyBoZWxsbyBoZWxsbyBoZWxsbyBoZWxsbyBoZWxsbyBoZWxsCiAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOwogCisgICAgdmFyIHRleHRhcmVhID0gMDsKICAgICBmdW5jdGlv
biBhcmlhQ2FsbGJhY2sobm90aWZpY2F0aW9uKSB7CiAgICAgICAgIGlmIChub3RpZmljYXRpb24g
PT0gIkFYVmFsdWVDaGFuZ2VkIikgewogICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKTsKICAgICAgICAgICAgIHJlc3VsdC5pbm5lckhUTUwg
PSAiU3VjY2VzcyEiOyAKKyAgICAgICAgICAgIHRleHRhcmVhLnJlbW92ZU5vdGlmaWNhdGlvbkxp
c3RlbmVyKCk7CiAgICAgICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjIsNyArMjQsNyBAQCBoZWxsbyBoZWxsbyBo
ZWxsbyBoZWxsbyBoZWxsbyBoZWxsbyBoZWxsCiAgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcikgewogICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOwogICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV4dGFyZWEiKS5m
b2N1cygpOwotICAgICAgICB2YXIgdGV4dGFyZWEgPSB3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAgICAgIHRleHRhcmVhID0gd2luZG93LmFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OwogICAgICAgICAKICAgICAgICAgdmFyIGFk
ZGVkTm90aWZpY2F0aW9uID0gdGV4dGFyZWEuYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoYXJpYUNh
bGxiYWNrKTsKICAgICAgICAgCg==
</data>
<flag name="review"
          id="37692"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>