<?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>37304</bug_id>
          
          <creation_ts>2010-04-08 20:17:56 -0700</creation_ts>
          <short_desc>WebKit does not support jpeg qulaity in canvas.toDataURL</short_desc>
          <delta_ts>2010-05-31 18:24:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>38494</blocked>
    
    <blocked>38492</blocked>
    
    <blocked>38495</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Leo Yang">leo.yang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>charles.wei</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>krit</cc>
    
    <cc>levin</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>staikos</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>210551</commentid>
    <comment_count>0</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-04-08 20:17:56 -0700</bug_when>
    <thetext>HTML5 draft spec says implementation shall support quality parameter in canvas.toDataURL(type, quality, ...) when the type is image/jpeg. WebKit does not support it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211494</commentid>
    <comment_count>1</comment_count>
      <attachid>53127</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-04-11 19:30:42 -0700</bug_when>
    <thetext>Created attachment 53127
Proposed patch

A proposed patch (including test cases) to the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211495</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-11 19:42:32 -0700</bug_when>
    <thetext>Attachment 53127 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/1694139</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211525</commentid>
    <comment_count>3</comment_count>
      <attachid>53143</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-04-11 20:40:32 -0700</bug_when>
    <thetext>Created attachment 53143
Update patch to fix build issue on chromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211528</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-11 20:53:00 -0700</bug_when>
    <thetext>Attachment 53143 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/1674233</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211542</commentid>
    <comment_count>5</comment_count>
      <attachid>53148</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-04-11 22:32:05 -0700</bug_when>
    <thetext>Created attachment 53148
Proposed patch - Fix a typo in the previous patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211562</commentid>
    <comment_count>6</comment_count>
      <attachid>53155</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-04-12 00:03:44 -0700</bug_when>
    <thetext>Created attachment 53155
Proposed patch - try to satisfy build bot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212691</commentid>
    <comment_count>7</comment_count>
      <attachid>53155</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2010-04-14 18:29:17 -0700</bug_when>
    <thetext>Comment on attachment 53155
Proposed patch - try to satisfy build bot

Generally looks good, but fails on mac:
WebKit/WebKitBuild/Release/DerivedSources/WebCore/DOMHTMLCanvasElement.mm: In function &apos;NSString* -[DOMHTMLCanvasElement toDataURL:](DOMHTMLCanvasElement*, objc_selector*, NSString*)&apos;:
WebKit/WebKitBuild/Release/DerivedSources/WebCore/DOMHTMLCanvasElement.mm:73: error: no matching function for call to &apos;WebCore::HTMLCanvasElement::toDataURL(NSString*&amp;, WebCore::ExceptionCode&amp;)&apos;
WebKit/WebCore/dom/CanvasSurface.h:62: note: candidates are: WebCore::String WebCore::CanvasSurface::toDataURL(const WebCore::String&amp;, double, WebCore::ExceptionCode&amp;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212704</commentid>
    <comment_count>8</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2010-04-14 19:47:23 -0700</bug_when>
    <thetext>Oliver, how do you think the ObjC binding should be done here?  Is there a concern about backwards compatibility?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212749</commentid>
    <comment_count>9</comment_count>
      <attachid>53408</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-04-14 22:06:57 -0700</bug_when>
    <thetext>Created attachment 53408
Fixed build issue for mac</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216703</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-04-23 23:33:46 -0700</bug_when>
    <thetext>Maybe this bug gets overlapped by bug 37117?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216720</commentid>
    <comment_count>11</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2010-04-24 06:04:20 -0700</bug_when>
    <thetext>I don&apos;t think so - platforms can do this 37117 their own way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216747</commentid>
    <comment_count>12</comment_count>
      <attachid>53408</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-24 12:50:23 -0700</bug_when>
    <thetext>Comment on attachment 53408
Fixed build issue for mac

This looks good and I would like to get this landed.  My one suggestion would be to put the test in platform independent location (if possible) and just skip it on platforms where this is not implemented (and file bugs for those platforms to implement the feature). You may also want to test that the quality argument does not effect non-jpep MIME types (if possible).

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216748</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-24 12:56:17 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 53408 [details])
&gt; This looks good and I would like to get this landed.  My one suggestion would
&gt; be to put the test in platform independent location (if possible) and just skip
&gt; it on platforms where this is not implemented (and file bugs for those
&gt; platforms to implement the feature). You may also want to test that the quality
&gt; argument does not effect non-jpep MIME types (if possible).
&gt; 
&gt; r=me.

One additional thing that occurred to me was that we may want an illegal value for the default value instead of 1.0.  For CG, for instance, the default compression for JPEG would not be 1.0, so we would want to know if no quality argument was passed.  Does that seem reasonable.  I suggest a value of -1.0 as the default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216749</commentid>
    <comment_count>14</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2010-04-24 13:38:27 -0700</bug_when>
    <thetext>Should it be committed and the follow up with the additional comments?  Seems reasonable...  If so then I&apos;ll add it to the commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216763</commentid>
    <comment_count>15</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-24 16:07:19 -0700</bug_when>
    <thetext>Yeah, that seems fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216770</commentid>
    <comment_count>16</comment_count>
      <attachid>53408</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-24 18:32:12 -0700</bug_when>
    <thetext>Comment on attachment 53408
Fixed build issue for mac

Rejecting patch 53408 from commit-queue.

Failed to run &quot;[u&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Sam Weinig&apos;, u&apos;--force&apos;]&quot; exit_code: 1
Last 500 characters of output:
platform/qt/fast/canvas/toDataURL-jpeg-quality-basic.html
patching file LayoutTests/platform/qt/fast/canvas/toDataURL-jpeg-quality-notnumber-expected.txt
patching file LayoutTests/platform/qt/fast/canvas/toDataURL-jpeg-quality-notnumber.html
patching file LayoutTests/platform/qt/fast/canvas/toDataURL-jpeg-quality-outsiderange-expected.txt
patching file LayoutTests/platform/qt/fast/canvas/toDataURL-jpeg-quality-outsiderange.html
patching file LayoutTests/platform/qt/fast/canvas/toDataURL-jpeg.js

Full output: http://webkit-commit-queue.appspot.com/results/1828089</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216884</commentid>
    <comment_count>17</comment_count>
      <attachid>54253</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-04-25 21:23:16 -0700</bug_when>
    <thetext>Created attachment 54253
Make the patch upstream</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217159</commentid>
    <comment_count>18</comment_count>
      <attachid>54253</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-26 09:55:07 -0700</bug_when>
    <thetext>Comment on attachment 54253
Make the patch upstream

&gt; +#include &lt;wtf/MathExtras.h&gt;

No need for MathExtras.h (see below).

&gt; +    double quality = 1.0;
&gt; +    if (args.size() &gt; 1) {
&gt; +        JSValue v = args.at(1);
&gt; +        if (v.isNumber())
&gt; +            quality = v.toNumber(exec);
&gt; +        if (quality &gt; 1.0 || quality &lt; 0.0 || !isfinite(quality))
&gt; +            quality = 1.0;
&gt; +    }

There is a simpler, cleaner way to write this.

    double quality = args.at(1).toNumber(exec);
    if (!(quality &gt;= 0 &amp;&amp; quality &lt; 1))
        quality = 1;

You don&apos;t need all those if statements. This correctly handles NAN, infinity, missing arguments, and the like. A NAN will return false from any comparison.

&gt; +#include &quot;PlatformString.h&quot;
&gt;  
&gt;  #include &lt;wtf/OwnPtr.h&gt;
&gt;  #include &lt;wtf/Noncopyable.h&gt;
&gt; @@ -41,7 +43,6 @@ class FloatSize;
&gt;  class GraphicsContext;
&gt;  class ImageBuffer;
&gt;  class IntPoint;
&gt; -class String;

There is no need to include the header here in CanvasSurface.h. You can pass a const String&amp; through to another const String&amp; without including the definition of the String class.

&gt; -        DOMString toDataURL(in [ConvertUndefinedOrNullToNullString] DOMString type)
&gt; +        // HTML5 draft spec: DOMString toDataURL(DOMString type, ...);
&gt; +        [Custom] DOMString toDataURL(in [ConvertUndefinedOrNullToNullString] DOMString type)
&gt;              raises(DOMException);

I don&apos;t understand this comment. You should leave it out unless it has something specific to say.

&gt; -    if (!m_data.m_pixmap.save(&amp;buffer, mimeType.substring(sizeof &quot;image&quot;).utf8().data()))
&gt; +    if (!m_data.m_pixmap.save(&amp;buffer, mimeType.substring(sizeof &quot;image&quot;).utf8().data(), quality*100+0.5))

This is not the correct way to scale a [0,1] floating point value to a [0,100] integer value. The correct way is &quot;quality * nextafter(100, 0)&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217449</commentid>
    <comment_count>19</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-04-26 19:35:00 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 54253 [details])
&gt; &gt; +#include &lt;wtf/MathExtras.h&gt;
&gt; 
&gt; No need for MathExtras.h (see below).
&gt; 
&gt; &gt; +    double quality = 1.0;
&gt; &gt; +    if (args.size() &gt; 1) {
&gt; &gt; +        JSValue v = args.at(1);
&gt; &gt; +        if (v.isNumber())
&gt; &gt; +            quality = v.toNumber(exec);
&gt; &gt; +        if (quality &gt; 1.0 || quality &lt; 0.0 || !isfinite(quality))
&gt; &gt; +            quality = 1.0;
&gt; &gt; +    }
&gt; 
&gt; There is a simpler, cleaner way to write this.
&gt; 
&gt;     double quality = args.at(1).toNumber(exec);
&gt;     if (!(quality &gt;= 0 &amp;&amp; quality &lt; 1))
&gt;         quality = 1;
&gt; 
&gt; You don&apos;t need all those if statements. This correctly handles NAN, infinity,
&gt; missing arguments, and the like. A NAN will return false from any comparison.
&gt; 
HTML 5 draft spec reuires quality must be with number type. So the simpler way can not handle one case in which quality is a numeric like string (e.g. String(&apos;0.01&apos;), per the spec, it should be converted to 100% quality)

&gt; &gt; +#include &quot;PlatformString.h&quot;
&gt; &gt;  
&gt; &gt;  #include &lt;wtf/OwnPtr.h&gt;
&gt; &gt;  #include &lt;wtf/Noncopyable.h&gt;
&gt; &gt; @@ -41,7 +43,6 @@ class FloatSize;
&gt; &gt;  class GraphicsContext;
&gt; &gt;  class ImageBuffer;
&gt; &gt;  class IntPoint;
&gt; &gt; -class String;
&gt; 
&gt; There is no need to include the header here in CanvasSurface.h. You can pass a
&gt; const String&amp; through to another const String&amp; without including the definition
&gt; of the String class.
I had thought it need not to include PlatformString.h, but CanvasSurface.cpp doesn&apos;t compile by gcc-4.3.3-Ubuntu. I think the reson is that inline function return non-reference type. So If I inlcude PlatformString.h in CavasSurface.cpp before line #include &quot;CanvasSurface.h&quot;, it&apos;s a bit violation of code style.

&gt; 
&gt; &gt; -        DOMString toDataURL(in [ConvertUndefinedOrNullToNullString] DOMString type)
&gt; &gt; +        // HTML5 draft spec: DOMString toDataURL(DOMString type, ...);
&gt; &gt; +        [Custom] DOMString toDataURL(in [ConvertUndefinedOrNullToNullString] DOMString type)
&gt; &gt;              raises(DOMException);
&gt; 
&gt; I don&apos;t understand this comment. You should leave it out unless it has
&gt; something specific to say.
&gt; 
OK. Will remove it

&gt; &gt; -    if (!m_data.m_pixmap.save(&amp;buffer, mimeType.substring(sizeof &quot;image&quot;).utf8().data()))
&gt; &gt; +    if (!m_data.m_pixmap.save(&amp;buffer, mimeType.substring(sizeof &quot;image&quot;).utf8().data(), quality*100+0.5))
&gt; 
&gt; This is not the correct way to scale a [0,1] floating point value to a [0,100]
&gt; integer value. The correct way is &quot;quality * nextafter(100, 0)&quot;.
quality * nextafter(100, 0) is not bad. But quality * 100 + 0.5 should be faster than the previous one, and the two ways has same precsion. Regard as correctness, if quality = 0.9995, the result is 99 if it adopts the previous way, but I think 100 is more resonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218228</commentid>
    <comment_count>20</comment_count>
      <attachid>54529</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-04-28 00:04:50 -0700</bug_when>
    <thetext>Created attachment 54529
Patch -- follow some comments from Dirk Schulze</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219965</commentid>
    <comment_count>21</comment_count>
      <attachid>53408</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-02 19:15:03 -0700</bug_when>
    <thetext>Comment on attachment 53408
Fixed build issue for mac

Cleared Sam Weinig&apos;s review+ from obsolete attachment 53408 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223852</commentid>
    <comment_count>22</comment_count>
      <attachid>55686</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-05-11 03:36:11 -0700</bug_when>
    <thetext>Created attachment 55686
patch

1. Follow some review comments.

2. Describe the purpose of each test cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224001</commentid>
    <comment_count>23</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-05-11 10:36:34 -0700</bug_when>
    <thetext>Could this be done without custom bindings?

Just take an optional double and then do the equivalent of

  if (!(0.0 &lt;= quality &amp;&amp; quality &lt;= 1.0))
      quality = 1.0;

in CanvasSurface::toDataURL?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224329</commentid>
    <comment_count>24</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-05-11 19:01:13 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Could this be done without custom bindings?
&gt; 
&gt; Just take an optional double and then do the equivalent of
&gt; 
&gt;   if (!(0.0 &lt;= quality &amp;&amp; quality &lt;= 1.0))
&gt;       quality = 1.0;
&gt; 
&gt; in CanvasSurface::toDataURL?
It can&apos;t. Just as I said in comment #19, we need to check the real type of quality parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228290</commentid>
    <comment_count>25</comment_count>
      <attachid>55686</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2010-05-20 02:50:06 -0700</bug_when>
    <thetext>Comment on attachment 55686
patch

Looks like everything has been addressed and it is well tested.  Also appears to be properly ported everywhere. Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232528</commentid>
    <comment_count>26</comment_count>
      <attachid>55686</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-05-31 15:28:10 -0700</bug_when>
    <thetext>Comment on attachment 55686
patch

Since this won&apos;t apply cleanly anymore, I am going to land this instead of the bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232565</commentid>
    <comment_count>27</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-05-31 18:24:28 -0700</bug_when>
    <thetext>Landed in r60458 with some fixes.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53127</attachid>
            <date>2010-04-11 19:30:42 -0700</date>
            <delta_ts>2010-04-11 20:40:32 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>toDataURL-jpeg-quality.patch</filename>
            <type>text/plain</type>
            <size>35154</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDU3MzI3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDQt
MDkgIExlbyBZYW5nICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBjYW52YXMudG9EYXRhVVJM
KHR5cGUsIHF1YWxpdHksIC4uLikgdG8gbGV0IGl0IHN1cHBvcnQgcXVhbGl0eSBwYXJhbWV0ZXIu
IAorICAgICAgICBBbmQgaW1wbGVtZW50IGl0IGluIFF0IHByb3RpbmcuIAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzczMDQKKworICAgICAgICAqIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAg
ICogV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHA6CisgICAgICAgICogV2ViQ29yZS9kb20v
Q2FudmFzU3VyZmFjZS5oOgorICAgICAgICAqIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVu
dC5pZGw6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
OgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyby5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcDoKKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0lt
YWdlQnVmZmVySGFpa3UuY3BwOgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvSW1hZ2VCdWZmZXJRdC5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcDoKKyAgICAgICAgKiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorCiAyMDEwLTA0LTA5ICBKb2Nl
bHluIFR1cmNvdHRlICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDU3MjQ5KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmls
ZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzUsNyBAQAogI2luY2x1ZGUgIldlYkdMQ29udGV4
dEF0dHJpYnV0ZXMuaCIKICNlbmRpZgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC04MSw0ICs4
MywyMiBAQCBKU1ZhbHVlIEpTSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoCiAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGNhbnZhcy0+Z2V0Q29u
dGV4dChjb250ZXh0SWQsIGF0dHJzLmdldCgpKSkpOwogfQogCitKU1ZhbHVlIEpTSFRNTENhbnZh
c0VsZW1lbnQ6OnRvRGF0YVVSTChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
Cit7CisgICAgY29uc3QgVVN0cmluZyYgdHlwZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVk
T3JOdWxsQ2hlY2soZXhlYywgYXJncy5hdCgwKSk7CisgICAgZG91YmxlIHF1YWxpdHkgPSAxLjA7
CisgICAgaWYgKGFyZ3Muc2l6ZSgpID4gMSkgeworICAgICAgICBKU1ZhbHVlIHYgPSBhcmdzLmF0
KDEpOworICAgICAgICBpZiAodi5pc051bWJlcigpKQorICAgICAgICAgICAgcXVhbGl0eSA9IHYu
dG9OdW1iZXIoZXhlYyk7CisgICAgICAgIGlmIChxdWFsaXR5ID4gMS4wIHx8IHF1YWxpdHkgPCAw
LjAgfHwgIWlzZmluaXRlKHF1YWxpdHkpKQorICAgICAgICAgICAgcXVhbGl0eSA9IDEuMDsKKyAg
ICB9CisgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHN0YXRpY19jYXN0PEhUTUxDYW52
YXNFbGVtZW50Kj4oaW1wbCgpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBKU0M6
OkpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmcoZXhlYywgY2FudmFzLT50b0RhdGFVUkwodHlwZSwg
cXVhbGl0eSwgZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9t
L0NhbnZhc1N1cmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZh
Y2UuY3BwCShyZXZpc2lvbiA1NzMyNSkKKysrIFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNyArNjUsNyBAQCB2b2lkIENhbnZh
c1N1cmZhY2U6OnNldFN1cmZhY2VTaXplKGNvbnN0CiAgICAgbV9pbWFnZUJ1ZmZlci5jbGVhcigp
OwogfQogCi1TdHJpbmcgQ2FudmFzU3VyZmFjZTo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorU3RyaW5nIENhbnZhc1N1cmZhY2U6OnRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUgcXVhbGl0eSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgaWYgKCFtX29yaWdpbkNsZWFuKSB7CiAgICAgICAgIGVjID0gU0VDVVJJVFlf
RVJSOwpAQCAtNzgsNyArNzksNyBAQCBTdHJpbmcgQ2FudmFzU3VyZmFjZTo6dG9EYXRhVVJMKGNv
bnN0IFN0CiAgICAgaWYgKG1pbWVUeXBlLmlzTnVsbCgpIHx8ICFNSU1FVHlwZVJlZ2lzdHJ5Ojpp
c1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpCiAgICAgICAgIHJl
dHVybiBidWZmZXIoKS0+dG9EYXRhVVJMKCJpbWFnZS9wbmciKTsKIAotICAgIHJldHVybiBidWZm
ZXIoKS0+dG9EYXRhVVJMKG1pbWVUeXBlKTsKKyAgICByZXR1cm4gYnVmZmVyKCktPnRvRGF0YVVS
TChtaW1lVHlwZSwgcXVhbGl0eSk7CiB9CiAKIHZvaWQgQ2FudmFzU3VyZmFjZTo6d2lsbERyYXco
Y29uc3QgRmxvYXRSZWN0JikKSW5kZXg6IFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmgJKHJldmlzaW9uIDU3MjQ5KQor
KysgV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28u
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTgsNyArNTksNyBAQCBwdWJsaWM6CiAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplLndpZHRoKCk7IH0KICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9z
aXplLmhlaWdodCgpOyB9CiAKLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGRvdWJsZSBxdWFsaXR5LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBjb25z
dCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmlkbAkocmV2aXNpb24gNTcyNDkpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBD
by4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMiw3ICszMyw4IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgYXR0cmlidXRlIGxv
bmcgd2lkdGg7CiAgICAgICAgIGF0dHJpYnV0ZSBsb25nIGhlaWdodDsKIAotICAgICAgICBET01T
dHJpbmcgdG9EYXRhVVJMKGluIFtDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nXSBE
T01TdHJpbmcgdHlwZSkKKyAgICAgICAgLy8gSFRNTDUgZHJhZnQgc3BlYzogRE9NU3RyaW5nIHRv
RGF0YVVSTChET01TdHJpbmcgdHlwZSwgLi4uKTsKKyAgICAgICAgW0N1c3RvbV0gRE9NU3RyaW5n
IHRvRGF0YVVSTChpbiBbQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3Ry
aW5nIHR5cGUpCiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAogI2lmICFkZWZp
bmVkKExBTkdVQUdFX09CSkVDVElWRV9DKSB8fCAhTEFOR1VBR0VfT0JKRUNUSVZFX0MKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDU3MjQ5KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Miw3ICs4Myw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VE
YXRhKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCk7CiAgICAgICAgIHZvaWQgcHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqLCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KTsKIAot
ICAgICAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Owor
ICAgICAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSBx
dWFsaXR5ID0gMS4wKSBjb25zdDsKICNpZiAhUExBVEZPUk0oQ0cpCiAgICAgICAgIEFmZmluZVRy
YW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7
IH0KICAgICAgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKEltYWdlQ29sb3JTcGFjZSBzcmND
b2xvclNwYWNlLCBJbWFnZUNvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJ
KHJldmlzaW9uIDU3MjQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2Vs
ZmlzaC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5n
KSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yODMsNyArMjg0LDcgQEAgc3RhdGljIGNhaXJvX3N0YXR1c190IHdyaXRlRnVu
Y3Rpb24odm9pZAogICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKIH0KIAotU3RyaW5n
IEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKK1N0
cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJs
ZSkgY29uc3QKIHsKICAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9fZ2V0X3Rhcmdl
dChjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBpZiAoIWltYWdlKQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCShyZXZp
c2lvbiA1NzI0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3NSw3ICsyNzYsNyBA
QCBzdGF0aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tTUlNCiAjZW5kaWYKIH0KIAot
U3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29u
c3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGRvdWJsZSkgY29uc3QKIHsKICAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0
ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKIApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwCShy
ZXZpc2lvbiA1NzI0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VC
dWZmZXJIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc2LDcg
Kzc3LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRAogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0
IFN0cmluZyYpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmLCBkb3VibGUpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4g
U3RyaW5nKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVy
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VC
dWZmZXJRdC5jcHAJKHJldmlzaW9uIDU3MjQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICog
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjY1LDkgKzI2
NiwxMCBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VECiAvLyBXZSBn
ZXQgYSBtaW1lVHlwZSBoZXJlIGJ1dCBRSW1hZ2VXcml0ZXIgZG9lcyBub3Qgc3VwcG9ydCBtaW1l
dHlwZXMgYnV0CiAvLyBvbmx5IGZvcm1hdHMgKHBuZywgZ2lmLCBqcGVnLi4uLCB4cG0pLiBTbyBh
c3N1bWUgd2UgZ2V0IGltYWdlLyBhcyBpbWFnZQogLy8gbWltZXR5cGVzIGFuZCB0aGVuIHJlbW92
ZSB0aGUgaW1hZ2UvIHRvIGdldCB0aGUgUXQgZm9ybWF0LgotU3RyaW5nIEltYWdlQnVmZmVyOjp0
b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZl
cjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSBxdWFsaXR5KSBjb25z
dAogewogICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5
cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworICAgIEFTU0VSVCgwLjAgPD0gcXVhbGl0eSAmJiBx
dWFsaXR5IDw9IDEuMCk7CiAKICAgICBpZiAoIW1pbWVUeXBlLnN0YXJ0c1dpdGgoImltYWdlLyIp
KQogICAgICAgICByZXR1cm4gImRhdGE6LCI7CkBAIC0yNzcsNyArMjc5LDcgQEAgU3RyaW5nIElt
YWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaQogICAgIFFCdWZmZXIgYnVmZmVyKCZkYXRh
KTsKICAgICBidWZmZXIub3BlbihRQnVmZmVyOjpXcml0ZU9ubHkpOwogCi0gICAgaWYgKCFtX2Rh
dGEubV9waXhtYXAuc2F2ZSgmYnVmZmVyLCBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFn
ZSIpLnV0ZjgoKS5kYXRhKCkpKQorICAgIGlmICghbV9kYXRhLm1fcGl4bWFwLnNhdmUoJmJ1ZmZl
ciwgbWltZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1hZ2UiKS51dGY4KCkuZGF0YSgpLCBxdWFs
aXR5KjEwMCswLjUpKQogICAgICAgICByZXR1cm4gImRhdGE6LCI7CiAKICAgICBidWZmZXIuY2xv
c2UoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNr
aWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiA1NzI0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQpAQCAtMjYwLDcgKzI2MSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxp
ZWRJbWFnZUQKICAgICBwdXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VS
ZWN0LCBkZXN0UG9pbnQsICpjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5iaXRtYXAoKSwg
bV9zaXplKTsKIH0KIAotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JikgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIGRv
dWJsZSkgY29uc3QKIHsKICAgICAvLyBFbmNvZGUgdGhlIGltYWdlIGludG8gYSB2ZWN0b3IuCiAg
ICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHBuZ0VuY29kZWREYXRhOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luY2UuY3BwCShy
ZXZpc2lvbiA1NzI0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VC
dWZmZXJXaW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMTQsNyArMjE1LDcg
QEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRAogICAgIHB1dEltYWdl
RGF0YTx0cnVlPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgbV9kYXRhLm1fYml0bWFw
LmdldCgpKTsKIH0KIAotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIGRvdWJsZSkgY29uc3QKIHsKICAgICBpZiAoIW1fZGF0YS5tX2JpdG1h
cC0+Ynl0ZXMoKSkKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCShyZXZpc2lvbiA1NzI0OSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEtldmlu
IE9sbGl2aWVyIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDcgKzc2LDcgQEAgdm9pZCBJbWFn
ZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0CitT
dHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmLCBkb3VibGUpIGNvbnN0
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzI0OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIzIEBACisyMDEwLTA0LTA5ICBMZW8gWWFuZyAgPGxlby55YW5nQHRvcmNo
bW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBGaXggY2FudmFzLnRvRGF0YVVSTCh0eXBlLCBxdWFsaXR5LCAuLi4pIHRvIGxldCBp
dCBzdXBwb3J0IHF1YWxpdHkgcGFyYW1ldGVyLiAKKyAgICAgICAgQW5kIGltcGxlbWVudCBpdCBp
biBRdCBwcm90aW5nLiAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM3MzA0CisKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFV
UkwtanBlZy1hbHBoYS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0
L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLWFscGhhLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXByaW1hcnljb2xvcnMtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0Rh
dGFVUkwtanBlZy1wcmltYXJ5Y29sb3JzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktYmFzaWMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBl
Zy1xdWFsaXR5LWJhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3Qv
Y2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktbm90bnVtYmVyLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVh
bGl0eS1ub3RudW1iZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9j
YW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1vdXRzaWRlcmFuZ2UtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1x
dWFsaXR5LW91dHNpZGVyYW5nZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9m
YXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy5qczogQWRkZWQuCisKIDIwMTAtMDQtMDcgIEVyaWMg
U2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFy
dGguCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwt
anBlZy1hbHBoYS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJM
LWpwZWctYWxwaGEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitQYXNz
ZWQKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1q
cGVnLWFscGhhLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFz
dC9jYW52YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLWFscGhhLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlw
dCBzcmM9InRvRGF0YVVSTC1qcGVnLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgIHdpbmRvdy5ub3RpZnlFbmRUZXN0
ID0gZnVuY3Rpb24gKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdFRvRGF0YVVSTChj
YW52YXMsIGN0eCkKKyAgICAgICAgeworICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICdyZ2Jh
KDEyOCwgMjU1LCAxMjgsIDAuNSknOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEw
MCwgNTApOworICAgICAgICAgICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0
aW5hdGlvbi1vdmVyJzsgLy8gc2hvdWxkIGJlIGlnbm9yZWQgYnkgdG9EYXRhVVJMCisgICAgICAg
ICAgICB2YXIgZGF0YSA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKTsKKyAgICAgICAg
ICAgIGN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLW92ZXInOworICAgICAg
ICAgICAgaWYgKCFkYXRhLm1hdGNoKC9eZGF0YTppbWFnZVwvanBlZ1s7LF0vKSkgeworICAgICAg
ICAgICAgICAgIF9hc3NlcnQodHJ1ZSwgInRydWUiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjZjAwJzsKKyAgICAgICAgICAgICAgICBj
dHguZmlsbFJlY3QoMCwgMCwgMTAwLCA1MCk7CisgICAgICAgICAgICAgICAgdmFyIGltZyA9IG5l
dyBJbWFnZSgpOworICAgICAgICAgICAgICAgIGRlZmVyVGVzdCgpOworICAgICAgICAgICAgICAg
IGltZy5vbmxvYWQgPSB3cmFwRnVuY3Rpb24oZnVuY3Rpb24gKCkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIF9hc3NlcnRQaXhlbEFwcHJveChjYW52
YXMsIDUwLDI1LCA2MywxMjcsNjMsMjU1LCAiNTAsMjUiLCAiNjMsMTI3LDYzLDI1NSIsIDgpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGltZy5zcmMgPSBkYXRhOworICAg
ICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBfYWRkVGVzdCh0ZXN0VG9EYXRhVVJMKTsKKyAgICA8
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxjYW52YXMgaWQ9ImMiIHdpZHRoPSIxMDAi
IGhlaWdodD0iNTAiPjwvY2FudmFzPgorICAgIDxwIGlkPSJkIj48L3A+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwt
anBlZy1wcmltYXJ5Y29sb3JzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1wcmltYXJ5Y29sb3JzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3Qv
Y2FudmFzL3RvRGF0YVVSTC1qcGVnLXByaW1hcnljb2xvcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxIEBACitQYXNzZWQKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0
L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXByaW1hcnljb2xvcnMuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1w
cmltYXJ5Y29sb3JzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9x
dC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1wcmltYXJ5Y29sb3JzLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTAgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9InRv
RGF0YVVSTC1qcGVnLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgIHdpbmRvdy5ub3RpZnlFbmRUZXN0ID0gZnVuY3Rp
b24gKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdFRvRGF0YVVSTChjYW52YXMsIGN0
eCkKKyAgICAgICAgeworICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjZmYwJzsKKyAgICAg
ICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCAyNSwgNDApOworICAgICAgICAgICAgY3R4LmZpbGxT
dHlsZSA9ICcjMGZmJzsKKyAgICAgICAgICAgIGN0eC5maWxsUmVjdCgyNSwgMCwgNTAsIDQwKTsK
KyAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAnIzAwZic7CisgICAgICAgICAgICBjdHguZmls
bFJlY3QoNzUsIDAsIDI1LCA0MCk7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyNmZmYn
OworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDQwLCAxMDAsIDEwKTsKKyAgICAgICAgICAg
IHZhciBkYXRhID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpOyAvLyBpdCBpcyBva2F5
IGlmIHRoaXMgcmV0dXJucyBhIFBORyBpbnN0ZWFkCisgICAgICAgICAgICBjdHguZmlsbFN0eWxl
ID0gJyNmMDAnOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgNTApOworICAg
ICAgICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpOworICAgICAgICAgICAgZGVmZXJUZXN0KCk7
CisKKyAgICAgICAgICAgIGltZy5vbmxvYWQgPSB3cmFwRnVuY3Rpb24oZnVuY3Rpb24gKCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7Cisg
ICAgICAgICAgICAgICAgX2Fzc2VydFBpeGVsQXBwcm94KGNhbnZhcywgMTIsMjAsIDI1NSwyNTUs
MCwyNTUsICIxMiwyMCIsICIyNTUsMjU1LDAsMjU1IiwgOCk7CisgICAgICAgICAgICAgICAgX2Fz
c2VydFBpeGVsQXBwcm94KGNhbnZhcywgNTAsMjAsIDAsMjU1LDI1NSwyNTUsICI1MCwyMCIsICIw
LDI1NSwyNTUsMjU1IiwgOCk7CisgICAgICAgICAgICAgICAgX2Fzc2VydFBpeGVsQXBwcm94KGNh
bnZhcywgODcsMjAsIDAsMCwyNTUsMjU1LCAiODcsMjAiLCAiMCwwLDI1NSwyNTUiLCA4KTsKKyAg
ICAgICAgICAgICAgICBfYXNzZXJ0UGl4ZWxBcHByb3goY2FudmFzLCA1MCw0NSwgMjU1LDI1NSwy
NTUsMjU1LCAiNTAsNDUiLCAiMjU1LDI1NSwyNTUsMjU1IiwgOCk7CisgICAgICAgICAgICB9KTsK
KworICAgICAgICAgICAgaW1nLnNyYyA9IGRhdGE7CisgICAgICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQorICAgICAgICBfYWRkVGVzdCh0ZXN0VG9EYXRh
VVJMKTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxjYW52YXMgaWQ9ImMi
IHdpZHRoPSIxMDAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorICAgIDxwIGlkPSJkIj48L3A+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZh
cy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LWJhc2ljLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFs
aXR5LWJhc2ljLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRm
b3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktYmFzaWMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitQYXNzZWQKSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktYmFzaWMuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0Rh
dGFVUkwtanBlZy1xdWFsaXR5LWJhc2ljLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LWJhc2ljLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNj
cmlwdCBzcmM9InRvRGF0YVVSTC1qcGVnLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAg
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgIHdpbmRvdy5ub3RpZnlFbmRU
ZXN0ID0gZnVuY3Rpb24gKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdFRvRGF0YVVS
TChjYW52YXMsIGN0eCkKKyAgICAgICAgeworICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcj
MDBmJzsKKyAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDUwKTsKKyAgICAgICAg
ICAgIGN0eC5maWxsU3R5bGUgPSAnIzBmZic7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwg
MywgMTAwLCAxKTsKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciBKUEVHIHN1cHBvcnQgZmlyc3QK
KyAgICAgICAgICAgIHZhciBkYXRhID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpOwor
ICAgICAgICAgICAgaWYgKCFkYXRhLm1hdGNoKC9eZGF0YTppbWFnZVwvanBlZ1s7LF0vKSkgewor
ICAgICAgICAgICAgICAgIF9hc3NlcnQodHJ1ZSwgInRydWUiKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgdmFyIGRhdGFfaGkgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFn
ZS9qcGVnJywgMC45OSk7CisgICAgICAgICAgICAgICAgdmFyIGRhdGFfbG8gPSBjYW52YXMudG9E
YXRhVVJMKCdpbWFnZS9qcGVnJywgMC4wMSk7CisgICAgICAgICAgICAgICAgY3R4LmZpbGxTdHls
ZSA9ICcjZjAwJzsKKyAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCA1MCk7
CisgICAgICAgICAgICAgICAgZGVmZXJUZXN0KCk7CisgICAgICAgICAgICAgICAgdmFyIGltZ19o
aSA9IG5ldyBJbWFnZSgpOworICAgICAgICAgICAgICAgIGltZ19oaS5vbmxvYWQgPSBmdW5jdGlv
biAoKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGltZ19sbyA9
IG5ldyBJbWFnZSgpOworICAgICAgICAgICAgICAgICAgICBpbWdfbG8ub25sb2FkID0gd3JhcEZ1
bmN0aW9uKGZ1bmN0aW9uICgpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nX2hpLCAwLCAwLCA1MCwgNTAsIDAsIDAsIDUwLCA1
MCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZ19sbywgMCwgMCwg
NTAsIDUwLCA1MCwgMCwgNTAsIDUwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgX2Fzc2VydChkYXRhX2hpLmxlbmd0aCA+IGRhdGFfbG8ubGVuZ3Ro
LCAiZGF0YV9oaS5sZW5ndGggPiBkYXRhX2xvLmxlbmd0aCIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgX2Fzc2VydFBpeGVsQXBwcm94KGNhbnZhcywgMjUsMjUsIDAsMCwyNTUsMjU1LCAiMjUs
MjUiLCAiMCwwLDI1NSwyNTUiLCAxMik7CisgICAgICAgICAgICAgICAgICAgICAgICBfYXNzZXJ0
UGl4ZWxBcHByb3goY2FudmFzLCA3NSwyNSwgMCwwLDI1NSwyNTUsICI3NSwyNSIsICIwLDAsMjU1
LDI1NSIsIDEyKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
IGltZ19sby5zcmMgPSBkYXRhX2xvOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAg
ICAgaW1nX2hpLnNyYyA9IGRhdGFfaGk7CisKKyAgICAgICAgICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBfYWRkVGVzdCh0ZXN0VG9EYXRhVVJMKTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorICAgIDxjYW52YXMgaWQ9ImMiIHdpZHRoPSIxMDAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgor
ICAgIDxwIGlkPSJkIj48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW5vdG51bWJlci1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9j
YW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1ub3RudW1iZXItZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJM
LWpwZWctcXVhbGl0eS1ub3RudW1iZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxIEBACitQYXNzZWQKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFz
L3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktbm90bnVtYmVyLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1u
b3RudW1iZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zh
c3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktbm90bnVtYmVyLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDQgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9InRv
RGF0YVVSTC1qcGVnLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgIHdpbmRvdy5ub3RpZnlFbmRUZXN0ID0gZnVuY3Rp
b24gKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdFRvRGF0YVVSTChjYW52YXMsIGN0
eCkKKyAgICAgICAgeworICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjMDBmJzsKKyAgICAg
ICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDUwKTsKKyAgICAgICAgICAgIGN0eC5maWxs
U3R5bGUgPSAnIzBmZic7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMywgMTAwLCAxKTsK
KyAgICAgICAgICAgIC8vIENoZWNrIGZvciBKUEVHIHN1cHBvcnQgZmlyc3QKKyAgICAgICAgICAg
IHZhciBkYXRhID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpOworICAgICAgICAgICAg
aWYgKCFkYXRhLm1hdGNoKC9eZGF0YTppbWFnZVwvanBlZ1s7LF0vKSkgeworICAgICAgICAgICAg
ICAgIF9hc3NlcnQodHJ1ZSwgInRydWUiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsICdib2d1
cycpLCBkYXRhLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsICdib2d1cycpIiwgImRh
dGEiKTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9EYXRhVVJMKCdpbWFn
ZS9qcGVnJywge30pLCBkYXRhLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHt9KSIs
ICJkYXRhIik7CisgICAgICAgICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFzLnRvRGF0YVVSTCgn
aW1hZ2UvanBlZycsIG51bGwpLCBkYXRhLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycs
IG51bGwpIiwgImRhdGEiKTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9E
YXRhVVJMKCdpbWFnZS9qcGVnJywgdW5kZWZpbmVkKSwgZGF0YSwgImNhbnZhcy50b0RhdGFVUkwo
J2ltYWdlL2pwZWcnLCB1bmRlZmluZWQpIiwgImRhdGEiKTsKKyAgICAgICAgICAgICAgICBfYXNz
ZXJ0U2FtZShjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgdHJ1ZSksIGRhdGEsICJjYW52
YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgdHJ1ZSkiLCAiZGF0YSIpOworICAgICAgICAgICAg
ICAgIF9hc3NlcnRTYW1lKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAnMC4wMScpLCBk
YXRhLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsICcwLjAxJykiLCAiZGF0YSIpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgX2FkZFRlc3QodGVz
dFRvRGF0YVVSTCk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8Y2FudmFz
IGlkPSJjIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKyAgICA8cCBpZD0iZCI+
PC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFz
dC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1vdXRzaWRlcmFuZ2UtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0
YVVSTC1qcGVnLXF1YWxpdHktb3V0c2lkZXJhbmdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1
YWxpdHktb3V0c2lkZXJhbmdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBA
QAorUGFzc2VkCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0Rh
dGFVUkwtanBlZy1xdWFsaXR5LW91dHNpZGVyYW5nZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktb3V0
c2lkZXJhbmdlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9m
YXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW91dHNpZGVyYW5nZS5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3Jj
PSJ0b0RhdGFVUkwtanBlZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICB3aW5kb3cubm90aWZ5RW5kVGVzdCA9IGZ1
bmN0aW9uICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIHRlc3RUb0RhdGFVUkwoY2FudmFz
LCBjdHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAnIzAwZic7Cisg
ICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCA1MCk7CisgICAgICAgICAgICBjdHgu
ZmlsbFN0eWxlID0gJyMwZmYnOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDMsIDEwMCwg
MSk7CisgICAgICAgICAgICAvLyBDaGVjayBmb3IgSlBFRyBzdXBwb3J0IGZpcnN0CisgICAgICAg
ICAgICB2YXIgZGF0YSA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKTsKKyAgICAgICAg
ICAgIGlmICghZGF0YS5tYXRjaCgvXmRhdGE6aW1hZ2VcL2pwZWdbOyxdLykpIHsKKyAgICAgICAg
ICAgICAgICBfYXNzZXJ0KHRydWUsICJ0cnVlIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIF9hc3NlcnRTYW1lKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAx
MCksIGRhdGEsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMTApIiwgImRhdGEiKTsK
KyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVn
JywgLTEwKSwgZGF0YSwgImNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAtMTApIiwgImRh
dGEiKTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9EYXRhVVJMKCdpbWFn
ZS9qcGVnJywgMS4wMSksIGRhdGEsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMS4w
MSkiLCAiZGF0YSIpOworICAgICAgICAgICAgICAgIF9hc3NlcnRTYW1lKGNhbnZhcy50b0RhdGFV
UkwoJ2ltYWdlL2pwZWcnLCAtMC4wMSksIGRhdGEsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9q
cGVnJywgLTAuMDEpIiwgImRhdGEiKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIF9h
c3NlcnQoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEpLmxlbmd0aCA+PSBjYW52YXMu
dG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMC45KS5sZW5ndGgsICJjYW52YXMudG9EYXRhVVJMKCdp
bWFnZS9qcGVnJywgMSkubGVuZ3RoID49IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAw
LjkpLmxlbmd0aCIpOworICAgICAgICAgICAgICAgIF9hc3NlcnQoY2FudmFzLnRvRGF0YVVSTCgn
aW1hZ2UvanBlZycsIDApLmxlbmd0aCA8PSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywg
MC4xKS5sZW5ndGgsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMCkubGVuZ3RoIDw9
IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAwLjEpLmxlbmd0aCIpOworICAgICAgICAg
ICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIF9hZGRUZXN0KHRlc3RUb0RhdGFVUkwpOworICAgIDwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPGNhbnZhcyBpZD0iYyIgd2lkdGg9IjEwMCIgaGVp
Z2h0PSI1MCI+PC9jYW52YXM+CisgICAgPHAgaWQ9ImQiPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVn
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3Rv
RGF0YVVSTC1qcGVnLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
ZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWcuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjU3
IEBACitmdW5jdGlvbiBfdmFsVG9TdHJpbmcodmFsKQoreworCWlmICh2YWwgPT09IHVuZGVmaW5l
ZCB8fCB2YWwgPT09IG51bGwpCisJCXJldHVybiAnWycgKyB0eXBlb2YodmFsKSArICddJzsKKwly
ZXR1cm4gdmFsLnRvU3RyaW5nKCkgKyAnWycgKyB0eXBlb2YodmFsKSArICddJzsKK30KKwordmFy
IF9oZXgyZGVjX3RhYmxlID0geworCTA6MCwgMToxLCAyOjIsIDM6MywgNDo0LCA1OjUsIDY6Niwg
Nzo3LCA4OjgsIDk6OSwKKwlhOjEwLCBiOjExLCBjOjEyLCBkOjEzLCBlOjE0LCBmOjE1LAorCUE6
MTAsIEI6MTEsIEM6MTIsIEQ6MTMsIEU6MTQsIEY6MTUKK307CitmdW5jdGlvbiBfaGV4MmRlYyho
ZXgpCit7CisJcmV0dXJuIF9oZXgyZGVjX3RhYmxlW2hleC5jaGFyQXQoMCldKjE2ICsgX2hleDJk
ZWNfdGFibGVbaGV4LmNoYXJBdCgxKV07Cit9CisKK3ZhciBfZmFpbGVkID0gZmFsc2U7Cit2YXIg
X2Fzc2VydGVkID0gZmFsc2U7CitmdW5jdGlvbiBfd2Fybih0ZXh0KQoreworCWRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdkJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGkn
KSkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpOworfQorZnVuY3Rp
b24gX2ZhaWwodGV4dCkKK3sKKwlfd2Fybih0ZXh0KTsKKwlfZmFpbGVkID0gdHJ1ZTsKK30KKwor
ZnVuY3Rpb24gX2Fzc2VydChjb25kLCB0ZXh0KQoreworCV9hc3NlcnRlZCA9IHRydWU7CisJaWYg
KCEgY29uZCkKKwkJX2ZhaWwoJ0ZhaWxlZCBhc3NlcnRpb246ICcgKyB0ZXh0KTsKK30KKworZnVu
Y3Rpb24gX2Fzc2VydFNhbWUoYSwgYiwgdGV4dF9hLCB0ZXh0X2IpCit7CisJX2Fzc2VydGVkID0g
dHJ1ZTsKKwlpZiAoYSAhPT0gYikKKwkJX2ZhaWwoJ0ZhaWxlZCBhc3NlcnRpb24gJyArIHRleHRf
YSArICcgPT09ICcgKyB0ZXh0X2IgKworCQkJCScgKGdvdCAnICsgX3ZhbFRvU3RyaW5nKGEpICsg
JywgZXhwZWN0ZWQgJyArIF92YWxUb1N0cmluZyhiKSArICcpJyk7Cit9CisKK2Z1bmN0aW9uIF9h
c3NlcnREaWZmZXJlbnQoYSwgYiwgdGV4dF9hLCB0ZXh0X2IpCit7CisJX2Fzc2VydGVkID0gdHJ1
ZTsKKwlpZiAoYSA9PT0gYikKKwkJX2ZhaWwoJ0ZhaWxlZCBhc3NlcnRpb24gJyArIHRleHRfYSAr
ICcgIT09ICcgKyB0ZXh0X2IgKworCQkJCScgKGdvdCAnICsgX3ZhbFRvU3RyaW5nKGEpICsgJywg
ZXhwZWN0ZWQgbm90ICcgKyBfdmFsVG9TdHJpbmcoYikgKyAnKScpOworfQorCitmdW5jdGlvbiBf
YXNzZXJ0RXF1YWwoYSwgYiwgdGV4dF9hLCB0ZXh0X2IpCit7CisJX2Fzc2VydGVkID0gdHJ1ZTsK
KwlpZiAoYSAhPSBiKQorCQlfZmFpbCgnRmFpbGVkIGFzc2VydGlvbiAnICsgdGV4dF9hICsgJyA9
PSAnICsgdGV4dF9iICsKKwkJCQknIChnb3QgJyArIF92YWxUb1N0cmluZyhhKSArICcsIGV4cGVj
dGVkICcgKyBfdmFsVG9TdHJpbmcoYikgKyAnKScpOworfQorCitmdW5jdGlvbiBfYXNzZXJ0TWF0
Y2goYSwgYiwgdGV4dF9hLCB0ZXh0X2IpCit7CisJX2Fzc2VydGVkID0gdHJ1ZTsKKwlpZiAoISBh
Lm1hdGNoKGIpKQorCQlfZmFpbCgnRmFpbGVkIGFzc2VydGlvbiAnICsgdGV4dF9hICsgJyBtYXRj
aGVzICcgKyB0ZXh0X2IgKworCQkJCScgKGdvdCAnICsgX3ZhbFRvU3RyaW5nKGEpICsgJyknKTsK
K30KKworCit2YXIgX21hbnVhbF9jaGVjayA9IGZhbHNlOworCitmdW5jdGlvbiBfcmVxdWlyZU1h
bnVhbENoZWNrKCkKK3sKKwlfbWFudWFsX2NoZWNrID0gdHJ1ZTsKK30KKworZnVuY3Rpb24gX2Ny
YXNoKCkKK3sKKwlfZmFpbCgnQWJvcnRlZCBkdWUgdG8gcHJlZGljdGVkIGNyYXNoJyk7Cit9CisK
K3ZhciBfZ2V0SW1hZ2VEYXRhQ2FsaWJyYXRlZCA9IGZhbHNlOwordmFyIF9nZXRJbWFnZURhdGFJ
c1ByZW11bCwgX2dldEltYWdlRGF0YUlzQkdSQTsKKworZnVuY3Rpb24gX2dldFBpeGVsKGNhbnZh
cywgeCx5KQoreworCXZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKwlpZiAoY3R4
ICYmIHR5cGVvZihjdHguZ2V0SW1hZ2VEYXRhKSAhPSAndW5kZWZpbmVkJykKKwl7CisJCXRyeSB7
CisJCQl2YXIgaW1nZGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoeCwgeSwgMSwgMSk7CisJCX0gY2F0
Y2ggKGUpIHsKKwkJCS8vIHByb2JhYmx5IGEgc2VjdXJpdHkgZXhjZXB0aW9uIGNhdXNlZCBieSBo
YXZpbmcgZHJhd24KKwkJCS8vIGRhdGE6IFVSTHMgb250byB0aGUgY2FudmFzCisJCQlpbWdkYXRh
ID0gbnVsbDsKKwkJfQorCQlpZiAoaW1nZGF0YSkKKwkJeworCQkJLy8gV29yayBhcm91bmQgZ2V0
SW1hZ2VEYXRhIGJ1Z3MsIHNpbmNlIHdlIHdhbnQgdGhlIG90aGVyIHRlc3RzIHRvCisJCQkvLyBj
YXJyeSBvbiB3b3JraW5nIGFzIHdlbGwgYXMgcG9zc2libGUKKwkJCWlmICghIF9nZXRJbWFnZURh
dGFDYWxpYnJhdGVkKQorCQkJeworCQkJCXZhciBjMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2NhbnZhcycpOworCQkJCWMyLndpZHRoID0gYzIuaGVpZ2h0ID0gMTsKKwkJCQl2YXIgY3R4MiA9
IGMyLmdldENvbnRleHQoJzJkJyk7CisJCQkJY3R4Mi5maWxsU3R5bGUgPSAncmdiYSgwLCAyNTUs
IDI1NSwgMC41KSc7CisJCQkJY3R4Mi5maWxsUmVjdCgwLCAwLCAxLCAxKTsKKwkJCQl2YXIgZGF0
YTIgPSBjdHgyLmdldEltYWdlRGF0YSgwLCAwLCAxLCAxKS5kYXRhOworCisJCQkJLy8gRmlyZWZv
eCByZXR1cm5zIHByZW11bHRpcGxpZWQgYWxwaGEKKworCQkJCWlmIChkYXRhMlsxXSA+IDEwMCAm
JiBkYXRhMlsxXSA8IDE1MCkKKwkJCQkJX2dldEltYWdlRGF0YUlzUHJlbXVsID0gdHJ1ZTsKKwkJ
CQllbHNlCisJCQkJCV9nZXRJbWFnZURhdGFJc1ByZW11bCA9IGZhbHNlOworCisJCQkJLy8gT3Bl
cmEgTWluaSA0IEJldGEgcmV0dXJucyBCR1JBIGluc3RlYWQgb2YgUkdCQQorCisJCQkJaWYgKGRh
dGEyWzBdID4gMjUwICYmIGRhdGEyWzJdIDwgNSkKKwkJCQkJX2dldEltYWdlRGF0YUlzQkdSQSA9
IHRydWU7CisJCQkJZWxzZQorCQkJCQlfZ2V0SW1hZ2VEYXRhSXNCR1JBID0gZmFsc2U7CisKKwkJ
CQlfZ2V0SW1hZ2VEYXRhQ2FsaWJyYXRlZCA9IHRydWU7CisJCQl9CisKKwkJCS8vIFVuZG8gdGhl
IEJHUkEgZmxpcHBpbmcKKwkJCXZhciByZ2JhID0gKF9nZXRJbWFnZURhdGFJc0JHUkEKKwkJCQk/
IFsgaW1nZGF0YS5kYXRhWzJdLCBpbWdkYXRhLmRhdGFbMV0sIGltZ2RhdGEuZGF0YVswXSwgaW1n
ZGF0YS5kYXRhWzNdIF0KKwkJCQk6IFsgaW1nZGF0YS5kYXRhWzBdLCBpbWdkYXRhLmRhdGFbMV0s
IGltZ2RhdGEuZGF0YVsyXSwgaW1nZGF0YS5kYXRhWzNdIF0pOworCisJCQlpZiAoISBfZ2V0SW1h
Z2VEYXRhSXNQcmVtdWwpCisJCQkJcmV0dXJuIHJnYmE7CisKKwkJCS8vIFVuZG8gdGhlIHByZW11
bHRpcGx5aW5nCisJCQlpZiAocmdiYVszXSA9PSAwKQorCQkJCXJldHVybiBbIDAsIDAsIDAsIDAg
XTsKKwkJCWVsc2UKKwkJCXsKKwkJCQl2YXIgYSA9IHJnYmFbM10gLyAyNTU7CisJCQkJcmV0dXJu
IFsKKwkJCQkJTWF0aC5yb3VuZChyZ2JhWzBdL2EpLAorCQkJCQlNYXRoLnJvdW5kKHJnYmFbMV0v
YSksCisJCQkJCU1hdGgucm91bmQocmdiYVsyXS9hKSwKKwkJCQkJcmdiYVszXQorCQkJCV07CisJ
CQl9CisJCX0KKwl9CisKKwl0cnkgeyBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnb3BlcmEtMmRn
YW1lJyk7IH0gY2F0Y2ggKGUpIHsgLyogRmlyZWZveCB0aHJvd3MgKi8gfQorCWlmIChjdHggJiYg
dHlwZW9mKGN0eC5nZXRQaXhlbCkgIT0gJ3VuZGVmaW5lZCcpCisJeworCQl0cnkgeworCQkJdmFy
IGMgPSBjdHguZ2V0UGl4ZWwoeCwgeSk7CisJCX0gY2F0Y2ggKGUpIHsKKwkJCS8vIHByb2JhYmx5
IGEgc2VjdXJpdHkgZXhjZXB0aW9uIGNhdXNlZCBieSBoYXZpbmcgZHJhd24KKwkJCS8vIGRhdGE6
IFVSTHMgb250byB0aGUgY2FudmFzCisJCQljID0gbnVsbDsKKwkJfQorCQlpZiAoYykKKwkJewor
CQkJdmFyIG1hdGNoZXMgPSAvXnJnYmFcKChcZCspLCAoXGQrKSwgKFxkKyksIChbXGRcLl0rKVwp
JC8uZXhlYyhjKTsKKwkJCWlmIChtYXRjaGVzKQorCQkJCXJldHVybiBbIG1hdGNoZXNbMV0sIG1h
dGNoZXNbMl0sIG1hdGNoZXNbM10sIE1hdGgucm91bmQobWF0Y2hlc1s0XSoyNTUpIF07CisJCQlt
YXRjaGVzID0gL14jKC4uKSguLikoLi4pJC8uZXhlYyhjKTsKKwkJCWlmIChtYXRjaGVzKQorCQkJ
CXJldHVybiBbIF9oZXgyZGVjKG1hdGNoZXNbMV0pLCBfaGV4MmRlYyhtYXRjaGVzWzJdKSwgX2hl
eDJkZWMobWF0Y2hlc1szXSksIDI1NSBdOworCQl9CisJfQorCS8vX3dhcm4oIihDYW4ndCB0ZXN0
IHBpeGVsIHZhbHVlKSIpOworCV9tYW51YWxfY2hlY2sgPSB0cnVlOworCXJldHVybiB1bmRlZmlu
ZWQ7Cit9CisKK2Z1bmN0aW9uIF9hc3NlcnRQaXhlbChjYW52YXMsIHgseSwgcixnLGIsYSwgcG9z
LCBjb2xvdXIpCit7CisJX2Fzc2VydGVkID0gdHJ1ZTsKKwl2YXIgYyA9IF9nZXRQaXhlbChjYW52
YXMsIHgseSk7CisJaWYgKGMgJiYgISAoY1swXSA9PSByICYmIGNbMV0gPT0gZyAmJiBjWzJdID09
IGIgJiYgY1szXSA9PSBhKSkKKwkJX2ZhaWwoJ0ZhaWxlZCBhc3NlcnRpb246IGdvdCBwaXhlbCBb
JyArIGMgKyAnXSBhdCAoJyt4KycsJyt5KycpLCBleHBlY3RlZCBbJytyKycsJytnKycsJytiKycs
JythKyddJyk7Cit9CisKK2Z1bmN0aW9uIF9hc3NlcnRQaXhlbEFwcHJveChjYW52YXMsIHgseSwg
cixnLGIsYSwgcG9zLCBjb2xvdXIsIHRvbGVyYW5jZSkKK3sKKwlfYXNzZXJ0ZWQgPSB0cnVlOwor
CXZhciBjID0gX2dldFBpeGVsKGNhbnZhcywgeCx5KTsKKwlpZiAoYykKKwl7CisJCXZhciBkaWZm
ID0gTWF0aC5tYXgoTWF0aC5hYnMoY1swXS1yKSwgTWF0aC5hYnMoY1sxXS1nKSwgTWF0aC5hYnMo
Y1syXS1iKSwgTWF0aC5hYnMoY1szXS1hKSk7CisJCWlmIChkaWZmID4gdG9sZXJhbmNlKQorCQkJ
X2ZhaWwoJ0ZhaWxlZCBhc3NlcnRpb246IGdvdCBwaXhlbCBbJyArIGMgKyAnXSBhdCAoJyt4Kycs
Jyt5KycpLCBleHBlY3RlZCBbJytyKycsJytnKycsJytiKycsJythKyddICsvLSAnK3RvbGVyYW5j
ZSk7CisJfQorfQorCitmdW5jdGlvbiBfYWRkVGVzdCh0ZXN0KQoreworCXZhciBkZWZlcnJlZCA9
IGZhbHNlOworCXdpbmRvdy5kZWZlclRlc3QgPSBmdW5jdGlvbiAoKSB7IGRlZmVycmVkID0gdHJ1
ZTsgfTsKKwlmdW5jdGlvbiBlbmRUZXN0KCkKKwl7CisJCWlmIChfZmFpbGVkKSAvLyB0ZXN0IGZh
aWxlZAorCQl7CisJCQlkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NOYW1lICs9ICcgZmFp
bCc7CisJCQl3aW5kb3cuX3Rlc3RTdGF0dXMgPSBbJ2ZhaWwnLCBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZCcpLmlubmVySFRNTF07CisJCX0KKwkJZWxzZSBpZiAoX21hbnVhbF9jaGVjayB8fCAh
X2Fzc2VydGVkKQorCQl7IC8vIHRlc3QgY2FzZSBleHBsaWNpdGx5IGFza2VkIGZvciBhIG1hbnVh
bCBjaGVjaywgb3Igbm8gYXV0b21hdGljIGFzc2VydGlvbnMgd2VyZSBwZXJmb3JtZWQKKwkJCWRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdkJykuaW5uZXJIVE1MICs9ICc8bGk+Q2Fubm90IGF1dG9t
YXRpY2FsbHkgdmVyaWZ5IHJlc3VsdCc7CisJCQlkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xh
c3NOYW1lICs9ICcgbmVlZHNfY2hlY2snOworCQkJd2luZG93Ll90ZXN0U3RhdHVzID0gWydjaGVj
aycsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkJykuaW5uZXJIVE1MXTsKKwkJfQorCQllbHNl
IC8vIHRlc3Qgc3VjY2VlZGVkCisJCXsKKwkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkJyku
aW5uZXJIVE1MID0gJ1Bhc3NlZCc7CisJCQlkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NO
YW1lICs9ICcgcGFzcyc7CisJCQl3aW5kb3cuX3Rlc3RTdGF0dXMgPSBbJ3Bhc3MnLCBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnZCcpLmlubmVySFRNTF07CisJCX0KKwkJaWYgKHdpbmRvdy5ub3Rp
ZnlFbmRUZXN0KQorCQkJbm90aWZ5RW5kVGVzdCgpOworCisJfQorCXdpbmRvdy5lbmRUZXN0ID0g
ZW5kVGVzdDsKKwl3aW5kb3cud3JhcEZ1bmN0aW9uID0gZnVuY3Rpb24gKGYpCisJeworCQlyZXR1
cm4gZnVuY3Rpb24oKQorCQl7CisJCQl0cnkKKwkJCXsKKwkJCQlmLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7CisJCQl9CisJCQljYXRjaCAoZSkKKwkJCXsKKwkJCQlfZmFpbCgnQWJvcnRlZCB3aXRo
IGV4Y2VwdGlvbjogJyArIGUubWVzc2FnZSk7CisJCQl9CisJCQllbmRUZXN0KCk7CisJCX0KKwl9
CisKKwl3aW5kb3cub25sb2FkID0gZnVuY3Rpb24gKCkKKwl7CisJCXRyeQorCQl7CisJCQl2YXIg
Y2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2MnKTsKKwkJCXZhciBjdHggPSBjYW52
YXMuZ2V0Q29udGV4dCgnMmQnKTsKKwkJCXRlc3QoY2FudmFzLCBjdHgpOworCQl9CisJCWNhdGNo
IChlKQorCQl7CisJCQlfZmFpbCgnQWJvcnRlZCB3aXRoIGV4Y2VwdGlvbjogJyArIGUubWVzc2Fn
ZSk7CisJCQlkZWZlcnJlZCA9IGZhbHNlOyAvLyBjYW5jZWwgYW55IGRlZmVyZW5jZQorCQl9CisK
KwkJaWYgKCEgZGVmZXJyZWQpCisJCQllbmRUZXN0KCk7CisJfTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53143</attachid>
            <date>2010-04-11 20:40:32 -0700</date>
            <delta_ts>2010-04-11 22:32:05 -0700</delta_ts>
            <desc>Update patch to fix build issue on chromium</desc>
            <filename>toDataURL-jpeg-quality-1.patch</filename>
            <type>text/plain</type>
            <size>36991</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDU3MzI3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDQt
MDkgIExlbyBZYW5nICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBjYW52YXMudG9EYXRhVVJM
KHR5cGUsIHF1YWxpdHksIC4uLikgdG8gbGV0IGl0IHN1cHBvcnQgcXVhbGl0eSBwYXJhbWV0ZXIu
IAorICAgICAgICBBbmQgaW1wbGVtZW50IGl0IGluIFF0IHByb3RpbmcuIAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzczMDQKKworICAgICAgICAqIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAg
ICogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5j
cHA6CisgICAgICAgICogV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHA6CisgICAgICAgICog
V2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5oOgorICAgICAgICAqIFdlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oOgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwOgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgICogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcDoKKyAgICAgICAg
KiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorCiAyMDEw
LTA0LTA5ICBKb2NlbHluIFR1cmNvdHRlICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDU3
MjQ5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzUsNyBAQAogI2luY2x1ZGUg
IldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKICNlbmRpZgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwog
CkBAIC04MSw0ICs4MywyMiBAQCBKU1ZhbHVlIEpTSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRl
eHQoCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGNh
bnZhcy0+Z2V0Q29udGV4dChjb250ZXh0SWQsIGF0dHJzLmdldCgpKSkpOwogfQogCitKU1ZhbHVl
IEpTSFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCit7CisgICAgY29uc3QgVVN0cmluZyYgdHlwZSA9IHZhbHVlVG9TdHJpbmdX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJncy5hdCgwKSk7CisgICAgZG91YmxlIHF1
YWxpdHkgPSAxLjA7CisgICAgaWYgKGFyZ3Muc2l6ZSgpID4gMSkgeworICAgICAgICBKU1ZhbHVl
IHYgPSBhcmdzLmF0KDEpOworICAgICAgICBpZiAodi5pc051bWJlcigpKQorICAgICAgICAgICAg
cXVhbGl0eSA9IHYudG9OdW1iZXIoZXhlYyk7CisgICAgICAgIGlmIChxdWFsaXR5ID4gMS4wIHx8
IHF1YWxpdHkgPCAwLjAgfHwgIWlzZmluaXRlKHF1YWxpdHkpKQorICAgICAgICAgICAgcXVhbGl0
eSA9IDEuMDsKKyAgICB9CisgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHN0YXRpY19j
YXN0PEhUTUxDYW52YXNFbGVtZW50Kj4oaW1wbCgpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmcoZXhlYywgY2FudmFzLT50b0Rh
dGFVUkwodHlwZSwgcXVhbGl0eSwgZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0Vs
ZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1NzI0OSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChC
ZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQpAQCAtMzQsNiArMzUsNyBAQAogI2luY2x1ZGUgIkNhbnZhc0NvbnRl
eHRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlICJXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5n
LmgiCiAjaW5jbHVkZSAiVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKQEAgLTQyLDYgKzQ0
LDcgQEAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogI2luY2x1ZGUgIlY4V2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgiCiAjZW5kaWYKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTg5LDQgKzkyLDIyIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OEhUTUxDYW52YXNFbGVtZW4KICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCit2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgZG91YmxlIHF1YWxpdHkgPSAxLjA7CisgICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgPiAxKSB7CisgICAgICAgIGlmIChhcmdzWzFdLT5Jc051bWJlcigpKQor
ICAgICAgICAgICAgcXVhbGl0eSA9IGFyZ3NbMV0tPk51bWJlclZhbHVlKCk7CisgICAgICAgIGlm
IChxdWFsaXR5ID4gMS4wIHx8IHF1YWxpdHkgPCAwLjAgfHwgIWlzZmluaXRlKHF1YWxpdHkpKQor
ICAgICAgICAgICAgcXVhbGl0eSA9IDEuMDsKKyAgICB9CisgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOworICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52
YXMgPSBWOEhUTUxDYW52YXNFbGVtZW50Ojp0b05hdGl2ZShob2xkZXIpOworICAgIFN0cmluZyB0
eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIFN0cmluZyByZXN1bHQgPSBjYW52YXMtPnRvRGF0YVVSTCh0eXBlLCBxdWFsaXR5LCBl
Yyk7CisgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKKyAgICByZXR1cm4gdjhTdHJp
bmdPclVuZGVmaW5lZChyZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9DYW52YXNTdXJmYWNlLmNwcAkocmV2aXNpb24gNTczMjUpCisrKyBXZWJDb3JlL2RvbS9DYW52
YXNTdXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDcgKzY1LDcg
QEAgdm9pZCBDYW52YXNTdXJmYWNlOjpzZXRTdXJmYWNlU2l6ZShjb25zdAogICAgIG1faW1hZ2VC
dWZmZXIuY2xlYXIoKTsKIH0KIAotU3RyaW5nIENhbnZhc1N1cmZhY2U6OnRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK1N0cmluZyBDYW52YXNTdXJm
YWNlOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgZG91YmxlIHF1YWxpdHksIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghbV9vcmlnaW5DbGVhbikgewogICAgICAgICBl
YyA9IFNFQ1VSSVRZX0VSUjsKQEAgLTc4LDcgKzc5LDcgQEAgU3RyaW5nIENhbnZhc1N1cmZhY2U6
OnRvRGF0YVVSTChjb25zdCBTdAogICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSB8fCAhTUlNRVR5
cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUp
KQogICAgICAgICByZXR1cm4gYnVmZmVyKCktPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7CiAKLSAg
ICByZXR1cm4gYnVmZmVyKCktPnRvRGF0YVVSTChtaW1lVHlwZSk7CisgICAgcmV0dXJuIGJ1ZmZl
cigpLT50b0RhdGFVUkwobWltZVR5cGUsIHF1YWxpdHkpOwogfQogCiB2b2lkIENhbnZhc1N1cmZh
Y2U6OndpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYpCkluZGV4OiBXZWJDb3JlL2RvbS9DYW52YXNT
dXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5oCShyZXZp
c2lvbiA1NzI0OSkKKysrIFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUg
KEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU5LDcgQEAgcHVibGljOgogICAgIGludCB3aWR0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9CiAgICAgaW50IGhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQogCi0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIHRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUgcXVhbGl0eSwgRXhjZXB0aW9uQ29kZSYp
OwogCiAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQog
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGwJKHJldmlzaW9uIDU3MjQ5KQorKysg
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmls
ZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzMsOCBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAg
IGF0dHJpYnV0ZSBsb25nIHdpZHRoOwogICAgICAgICBhdHRyaWJ1dGUgbG9uZyBoZWlnaHQ7CiAK
LSAgICAgICAgRE9NU3RyaW5nIHRvRGF0YVVSTChpbiBbQ29udmVydFVuZGVmaW5lZE9yTnVsbFRv
TnVsbFN0cmluZ10gRE9NU3RyaW5nIHR5cGUpCisgICAgICAgIC8vIEhUTUw1IGRyYWZ0IHNwZWM6
IERPTVN0cmluZyB0b0RhdGFVUkwoRE9NU3RyaW5nIHR5cGUsIC4uLik7CisgICAgICAgIFtDdXN0
b21dIERPTVN0cmluZyB0b0RhdGFVUkwoaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxT
dHJpbmddIERPTVN0cmluZyB0eXBlKQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7
CiAKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykgfHwgIUxBTkdVQUdFX09CSkVD
VElWRV9DCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZp
c2lvbiA1NzI0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsNyArODMs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgcHV0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKEltYWdlRGF0YSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQpOwogICAgICAgICB2b2lkIHB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEo
SW1hZ2VEYXRhKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCk7CiAKLSAgICAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBkb3VibGUgcXVhbGl0eSA9IDEuMCkgY29uc3Q7CiAjaWYgIVBMQVRGT1JNKENHKQogICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmlu
ZVRyYW5zZm9ybSgpOyB9CiAgICAgICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShJbWFnZUNv
bG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgSW1hZ2VDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA1NzI0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIgPHplY2tlQHNlbGZpc2gub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1v
YmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgzLDcgKzI4NCw3IEBAIHN0YXRpYyBjYWlyb19zdGF0
dXNfdCB3cml0ZUZ1bmN0aW9uKHZvaWQKICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7
CiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBkb3VibGUpIGNvbnN0CiB7CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNh
aXJvX2dldF90YXJnZXQoY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgaWYgKCFp
bWFnZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcAkocmV2aXNpb24gNTcyNDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
NzUsNyArMjc2LDcgQEAgc3RhdGljIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbU1JTQog
I2VuZGlmCiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBkb3VibGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0
cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZl
ckhhaWt1LmNwcAkocmV2aXNpb24gNTcyNDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBn
bWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBD
by4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC03Niw3ICs3Nyw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJ
bWFnZUQKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRv
RGF0YVVSTChjb25zdCBTdHJpbmcmKSBjb25zdAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFV
UkwoY29uc3QgU3RyaW5nJiwgZG91YmxlKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CiAgICAgcmV0dXJuIFN0cmluZygpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9JbWFnZUJ1ZmZlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCShyZXZpc2lvbiA1NzI0OSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIs
NiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2NSw5ICsyNjYsMTAgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZElt
YWdlRAogLy8gV2UgZ2V0IGEgbWltZVR5cGUgaGVyZSBidXQgUUltYWdlV3JpdGVyIGRvZXMgbm90
IHN1cHBvcnQgbWltZXR5cGVzIGJ1dAogLy8gb25seSBmb3JtYXRzIChwbmcsIGdpZiwganBlZy4u
LiwgeHBtKS4gU28gYXNzdW1lIHdlIGdldCBpbWFnZS8gYXMgaW1hZ2UKIC8vIG1pbWV0eXBlcyBh
bmQgdGhlbiByZW1vdmUgdGhlIGltYWdlLyB0byBnZXQgdGhlIFF0IGZvcm1hdC4KLVN0cmluZyBJ
bWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0CitTdHJp
bmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUg
cXVhbGl0eSkgY29uc3QKIHsKICAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0
ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICBBU1NFUlQoMC4wIDw9
IHF1YWxpdHkgJiYgcXVhbGl0eSA8PSAxLjApOwogCiAgICAgaWYgKCFtaW1lVHlwZS5zdGFydHNX
aXRoKCJpbWFnZS8iKSkKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwpAQCAtMjc3LDcgKzI3OSw3
IEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmkKICAgICBRQnVmZmVy
IGJ1ZmZlcigmZGF0YSk7CiAgICAgYnVmZmVyLm9wZW4oUUJ1ZmZlcjo6V3JpdGVPbmx5KTsKIAot
ICAgIGlmICghbV9kYXRhLm1fcGl4bWFwLnNhdmUoJmJ1ZmZlciwgbWltZVR5cGUuc3Vic3RyaW5n
KHNpemVvZiAiaW1hZ2UiKS51dGY4KCkuZGF0YSgpKSkKKyAgICBpZiAoIW1fZGF0YS5tX3BpeG1h
cC5zYXZlKCZidWZmZXIsIG1pbWVUeXBlLnN1YnN0cmluZyhzaXplb2YgImltYWdlIikudXRmOCgp
LmRhdGEoKSwgcXVhbGl0eSoxMDArMC41KSkKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwogCiAg
ICAgYnVmZmVyLmNsb3NlKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gNTcyNDkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChC
ZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKQEAgLTI2MCw3ICsyNjEsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpw
dXRQcmVtdWx0aXBsaWVkSW1hZ2VECiAgICAgcHV0SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHNv
dXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCAqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQo
KS0+Yml0bWFwKCksIG1fc2l6ZSk7CiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25z
dCBTdHJpbmcmLCBkb3VibGUpIGNvbnN0CiB7CiAgICAgLy8gRW5jb2RlIHRoZSBpbWFnZSBpbnRv
IGEgdmVjdG9yLgogICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBwbmdFbmNvZGVkRGF0YTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5jZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZl
cldpbmNlLmNwcAkocmV2aXNpb24gNTcyNDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL0ltYWdlQnVmZmVyV2luY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcp
IENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjE0LDcgKzIxNSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZUQK
ICAgICBwdXRJbWFnZURhdGE8dHJ1ZT4oc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1f
ZGF0YS5tX2JpdG1hcC5nZXQoKSk7CiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0
YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X2RhdGEubV9iaXRtYXAtPmJ5dGVzKCkpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAkocmV2
aXNpb24gNTcyNDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVy
V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwNyBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NSw3ICs3Niw3
IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZUQKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmKSBjb25zdAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwg
ZG91YmxlKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIFN0cmlu
ZygpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTcyNDkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxMC0wNC0wOSAgTGVvIFlhbmcgIDxs
ZW8ueWFuZ0B0b3JjaG1vYmlsZS5jb20uY24+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRml4IGNhbnZhcy50b0RhdGFVUkwodHlwZSwgcXVhbGl0eSwg
Li4uKSB0byBsZXQgaXQgc3VwcG9ydCBxdWFsaXR5IHBhcmFtZXRlci4gCisgICAgICAgIEFuZCBp
bXBsZW1lbnQgaXQgaW4gUXQgcHJvdGluZy4gCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNzMwNAorCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9j
YW52YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1hbHBoYS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1wcmlt
YXJ5Y29sb3JzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFz
dC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcHJpbWFyeWNvbG9ycy5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LWJhc2lj
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMv
dG9EYXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW5vdG51bWJlci1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0
YVVSTC1qcGVnLXF1YWxpdHktbm90bnVtYmVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktb3V0c2lkZXJhbmdlLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9E
YXRhVVJMLWpwZWctcXVhbGl0eS1vdXRzaWRlcmFuZ2UuaHRtbDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWcuanM6IEFkZGVkLgorCiAyMDEw
LTA0LTA3ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBZGFtIEJhcnRoLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52
YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLWFscGhhLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2Fu
dmFzL3RvRGF0YVVSTC1qcGVnLWFscGhhLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSBAQAorUGFzc2VkCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZh
cy90b0RhdGFVUkwtanBlZy1hbHBoYS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Bs
YXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLWFscGhhLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBl
Zy1hbHBoYS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACis8aHRtbD4KKzxoZWFk
PgorICAgIDxzY3JpcHQgc3JjPSJ0b0RhdGFVUkwtanBlZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICB3aW5kb3cu
bm90aWZ5RW5kVGVzdCA9IGZ1bmN0aW9uICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIHRl
c3RUb0RhdGFVUkwoY2FudmFzLCBjdHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGN0eC5maWxs
U3R5bGUgPSAncmdiYSgxMjgsIDI1NSwgMTI4LCAwLjUpJzsKKyAgICAgICAgICAgIGN0eC5maWxs
UmVjdCgwLCAwLCAxMDAsIDUwKTsKKyAgICAgICAgICAgIGN0eC5nbG9iYWxDb21wb3NpdGVPcGVy
YXRpb24gPSAnZGVzdGluYXRpb24tb3Zlcic7IC8vIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRvRGF0
YVVSTAorICAgICAgICAgICAgdmFyIGRhdGEgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVn
Jyk7CisgICAgICAgICAgICBjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ3NvdXJjZS1v
dmVyJzsKKyAgICAgICAgICAgIGlmICghZGF0YS5tYXRjaCgvXmRhdGE6aW1hZ2VcL2pwZWdbOyxd
LykpIHsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0KHRydWUsICJ0cnVlIik7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAnI2YwMCc7CisgICAg
ICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgNTApOworICAgICAgICAgICAgICAg
IHZhciBpbWcgPSBuZXcgSW1hZ2UoKTsKKyAgICAgICAgICAgICAgICBkZWZlclRlc3QoKTsKKyAg
ICAgICAgICAgICAgICBpbWcub25sb2FkID0gd3JhcEZ1bmN0aW9uKGZ1bmN0aW9uICgpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwg
MCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBfYXNzZXJ0UGl4
ZWxBcHByb3goY2FudmFzLCA1MCwyNSwgNjMsMTI3LDYzLDI1NSwgIjUwLDI1IiwgIjYzLDEyNyw2
MywyNTUiLCA4KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBpbWcuc3Jj
ID0gZGF0YTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgX2FkZFRlc3QodGVzdFRvRGF0
YVVSTCk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8Y2FudmFzIGlkPSJj
IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKyAgICA8cCBpZD0iZCI+PC9wPgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52
YXMvdG9EYXRhVVJMLWpwZWctcHJpbWFyeWNvbG9ycy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcHJp
bWFyeWNvbG9ycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1wcmltYXJ5Y29sb3JzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorUGFzc2VkCkluZGV4OiBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1wcmltYXJ5Y29sb3JzLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9E
YXRhVVJMLWpwZWctcHJpbWFyeWNvbG9ycy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcHJpbWFyeWNvbG9ycy5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxz
Y3JpcHQgc3JjPSJ0b0RhdGFVUkwtanBlZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICB3aW5kb3cubm90aWZ5RW5k
VGVzdCA9IGZ1bmN0aW9uICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIHRlc3RUb0RhdGFV
UkwoY2FudmFzLCBjdHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAn
I2ZmMCc7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgMjUsIDQwKTsKKyAgICAgICAg
ICAgIGN0eC5maWxsU3R5bGUgPSAnIzBmZic7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMjUs
IDAsIDUwLCA0MCk7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyMwMGYnOworICAgICAg
ICAgICAgY3R4LmZpbGxSZWN0KDc1LCAwLCAyNSwgNDApOworICAgICAgICAgICAgY3R4LmZpbGxT
dHlsZSA9ICcjZmZmJzsKKyAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCA0MCwgMTAwLCAxMCk7
CisgICAgICAgICAgICB2YXIgZGF0YSA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKTsg
Ly8gaXQgaXMgb2theSBpZiB0aGlzIHJldHVybnMgYSBQTkcgaW5zdGVhZAorICAgICAgICAgICAg
Y3R4LmZpbGxTdHlsZSA9ICcjZjAwJzsKKyAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCAx
MDAsIDUwKTsKKyAgICAgICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTsKKyAgICAgICAgICAg
IGRlZmVyVGVzdCgpOworCisgICAgICAgICAgICBpbWcub25sb2FkID0gd3JhcEZ1bmN0aW9uKGZ1
bmN0aW9uICgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShp
bWcsIDAsIDApOworICAgICAgICAgICAgICAgIF9hc3NlcnRQaXhlbEFwcHJveChjYW52YXMsIDEy
LDIwLCAyNTUsMjU1LDAsMjU1LCAiMTIsMjAiLCAiMjU1LDI1NSwwLDI1NSIsIDgpOworICAgICAg
ICAgICAgICAgIF9hc3NlcnRQaXhlbEFwcHJveChjYW52YXMsIDUwLDIwLCAwLDI1NSwyNTUsMjU1
LCAiNTAsMjAiLCAiMCwyNTUsMjU1LDI1NSIsIDgpOworICAgICAgICAgICAgICAgIF9hc3NlcnRQ
aXhlbEFwcHJveChjYW52YXMsIDg3LDIwLCAwLDAsMjU1LDI1NSwgIjg3LDIwIiwgIjAsMCwyNTUs
MjU1IiwgOCk7CisgICAgICAgICAgICAgICAgX2Fzc2VydFBpeGVsQXBwcm94KGNhbnZhcywgNTAs
NDUsIDI1NSwyNTUsMjU1LDI1NSwgIjUwLDQ1IiwgIjI1NSwyNTUsMjU1LDI1NSIsIDgpOworICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGltZy5zcmMgPSBkYXRhOworICAgICAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIH0KKyAgICAgICAgX2FkZFRl
c3QodGVzdFRvRGF0YVVSTCk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8
Y2FudmFzIGlkPSJjIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKyAgICA8cCBp
ZD0iZCI+PC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRh
VVJMLWpwZWctcXVhbGl0eS1iYXNpYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LWJh
c2ljLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorUGFzc2VkCkluZGV4
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFs
aXR5LWJhc2ljLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFz
dC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVh
bGl0eS1iYXNpYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5IEBACis8aHRtbD4KKzxo
ZWFkPgorICAgIDxzY3JpcHQgc3JjPSJ0b0RhdGFVUkwtanBlZy5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICB3aW5k
b3cubm90aWZ5RW5kVGVzdCA9IGZ1bmN0aW9uICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9u
IHRlc3RUb0RhdGFVUkwoY2FudmFzLCBjdHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGN0eC5m
aWxsU3R5bGUgPSAnIzAwZic7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCA1
MCk7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyMwZmYnOworICAgICAgICAgICAgY3R4
LmZpbGxSZWN0KDAsIDMsIDEwMCwgMSk7CisgICAgICAgICAgICAvLyBDaGVjayBmb3IgSlBFRyBz
dXBwb3J0IGZpcnN0CisgICAgICAgICAgICB2YXIgZGF0YSA9IGNhbnZhcy50b0RhdGFVUkwoJ2lt
YWdlL2pwZWcnKTsKKyAgICAgICAgICAgIGlmICghZGF0YS5tYXRjaCgvXmRhdGE6aW1hZ2VcL2pw
ZWdbOyxdLykpIHsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0KHRydWUsICJ0cnVlIik7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBkYXRhX2hpID0gY2FudmFzLnRv
RGF0YVVSTCgnaW1hZ2UvanBlZycsIDAuOTkpOworICAgICAgICAgICAgICAgIHZhciBkYXRhX2xv
ID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDAuMDEpOworICAgICAgICAgICAgICAg
IGN0eC5maWxsU3R5bGUgPSAnI2YwMCc7CisgICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAs
IDAsIDEwMCwgNTApOworICAgICAgICAgICAgICAgIGRlZmVyVGVzdCgpOworICAgICAgICAgICAg
ICAgIHZhciBpbWdfaGkgPSBuZXcgSW1hZ2UoKTsKKyAgICAgICAgICAgICAgICBpbWdfaGkub25s
b2FkID0gZnVuY3Rpb24gKCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBpbWdfbG8gPSBuZXcgSW1hZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgaW1nX2xvLm9u
bG9hZCA9IHdyYXBGdW5jdGlvbihmdW5jdGlvbiAoKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZ19oaSwgMCwgMCwgNTAsIDUw
LCAwLCAwLCA1MCwgNTApOworICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShp
bWdfbG8sIDAsIDAsIDUwLCA1MCwgNTAsIDAsIDUwLCA1MCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIF9hc3NlcnQoZGF0YV9oaS5sZW5ndGggPiBk
YXRhX2xvLmxlbmd0aCwgImRhdGFfaGkubGVuZ3RoID4gZGF0YV9sby5sZW5ndGgiKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIF9hc3NlcnRQaXhlbEFwcHJveChjYW52YXMsIDI1LDI1LCAwLDAs
MjU1LDI1NSwgIjI1LDI1IiwgIjAsMCwyNTUsMjU1IiwgMTIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgX2Fzc2VydFBpeGVsQXBwcm94KGNhbnZhcywgNzUsMjUsIDAsMCwyNTUsMjU1LCAiNzUs
MjUiLCAiMCwwLDI1NSwyNTUiLCAxMik7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgICAgICBpbWdfbG8uc3JjID0gZGF0YV9sbzsKKyAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgIGltZ19oaS5zcmMgPSBkYXRhX2hpOworCisgICAgICAgICAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgX2FkZFRlc3QodGVzdFRvRGF0YVVSTCk7CisgICAgPC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKyAgICA8Y2FudmFzIGlkPSJjIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUw
Ij48L2NhbnZhcz4KKyAgICA8cCBpZD0iZCI+PC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0
eS1ub3RudW1iZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktbm90bnVtYmVyLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2Fu
dmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktbm90bnVtYmVyLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSBAQAorUGFzc2VkCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9x
dC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW5vdG51bWJlci5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1q
cGVnLXF1YWxpdHktbm90bnVtYmVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW5vdG51bWJlci5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxz
Y3JpcHQgc3JjPSJ0b0RhdGFVUkwtanBlZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICB3aW5kb3cubm90aWZ5RW5k
VGVzdCA9IGZ1bmN0aW9uICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIHRlc3RUb0RhdGFV
UkwoY2FudmFzLCBjdHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAn
IzAwZic7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCA1MCk7CisgICAgICAg
ICAgICBjdHguZmlsbFN0eWxlID0gJyMwZmYnOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAs
IDMsIDEwMCwgMSk7CisgICAgICAgICAgICAvLyBDaGVjayBmb3IgSlBFRyBzdXBwb3J0IGZpcnN0
CisgICAgICAgICAgICB2YXIgZGF0YSA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKTsK
KyAgICAgICAgICAgIGlmICghZGF0YS5tYXRjaCgvXmRhdGE6aW1hZ2VcL2pwZWdbOyxdLykpIHsK
KyAgICAgICAgICAgICAgICBfYXNzZXJ0KHRydWUsICJ0cnVlIik7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIF9hc3NlcnRTYW1lKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdl
L2pwZWcnLCAnYm9ndXMnKSwgZGF0YSwgImNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAn
Ym9ndXMnKSIsICJkYXRhIik7CisgICAgICAgICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFzLnRv
RGF0YVVSTCgnaW1hZ2UvanBlZycsIHt9KSwgZGF0YSwgImNhbnZhcy50b0RhdGFVUkwoJ2ltYWdl
L2pwZWcnLCB7fSkiLCAiZGF0YSIpOworICAgICAgICAgICAgICAgIF9hc3NlcnRTYW1lKGNhbnZh
cy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCBudWxsKSwgZGF0YSwgImNhbnZhcy50b0RhdGFVUkwo
J2ltYWdlL2pwZWcnLCBudWxsKSIsICJkYXRhIik7CisgICAgICAgICAgICAgICAgX2Fzc2VydFNh
bWUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHVuZGVmaW5lZCksIGRhdGEsICJjYW52
YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgdW5kZWZpbmVkKSIsICJkYXRhIik7CisgICAgICAg
ICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHRydWUp
LCBkYXRhLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHRydWUpIiwgImRhdGEiKTsK
KyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVn
JywgJzAuMDEnKSwgZGF0YSwgImNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAnMC4wMScp
IiwgImRhdGEiKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IF9hZGRUZXN0KHRlc3RUb0RhdGFVUkwpOworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
CisgICAgPGNhbnZhcyBpZD0iYyIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI1MCI+PC9jYW52YXM+Cisg
ICAgPHAgaWQ9ImQiPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktb3V0c2lkZXJhbmdl
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0
L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW91dHNpZGVyYW5nZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0Rh
dGFVUkwtanBlZy1xdWFsaXR5LW91dHNpZGVyYW5nZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEgQEAKK1Bhc3NlZApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFz
dC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1vdXRzaWRlcmFuZ2UuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBl
Zy1xdWFsaXR5LW91dHNpZGVyYW5nZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
cGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1vdXRzaWRlcmFu
Z2UuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorPGh0bWw+Cis8aGVhZD4KKyAg
ICA8c2NyaXB0IHNyYz0idG9EYXRhVVJMLWpwZWcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+
CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgd2luZG93Lm5vdGlm
eUVuZFRlc3QgPSBmdW5jdGlvbiAoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiB0ZXN0VG9E
YXRhVVJMKGNhbnZhcywgY3R4KQorICAgICAgICB7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxl
ID0gJyMwMGYnOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgNTApOworICAg
ICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjMGZmJzsKKyAgICAgICAgICAgIGN0eC5maWxsUmVj
dCgwLCAzLCAxMDAsIDEpOworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIEpQRUcgc3VwcG9ydCBm
aXJzdAorICAgICAgICAgICAgdmFyIGRhdGEgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVn
Jyk7CisgICAgICAgICAgICBpZiAoIWRhdGEubWF0Y2goL15kYXRhOmltYWdlXC9qcGVnWzssXS8p
KSB7CisgICAgICAgICAgICAgICAgX2Fzc2VydCh0cnVlLCAidHJ1ZSIpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9EYXRhVVJMKCdp
bWFnZS9qcGVnJywgMTApLCBkYXRhLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEw
KSIsICJkYXRhIik7CisgICAgICAgICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFzLnRvRGF0YVVS
TCgnaW1hZ2UvanBlZycsIC0xMCksIGRhdGEsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVn
JywgLTEwKSIsICJkYXRhIik7CisgICAgICAgICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFzLnRv
RGF0YVVSTCgnaW1hZ2UvanBlZycsIDEuMDEpLCBkYXRhLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1h
Z2UvanBlZycsIDEuMDEpIiwgImRhdGEiKTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShj
YW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgLTAuMDEpLCBkYXRhLCAiY2FudmFzLnRvRGF0
YVVSTCgnaW1hZ2UvanBlZycsIC0wLjAxKSIsICJkYXRhIik7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBfYXNzZXJ0KGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAxKS5sZW5n
dGggPj0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDAuOSkubGVuZ3RoLCAiY2FudmFz
LnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEpLmxlbmd0aCA+PSBjYW52YXMudG9EYXRhVVJMKCdp
bWFnZS9qcGVnJywgMC45KS5sZW5ndGgiKTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0KGNhbnZh
cy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAwKS5sZW5ndGggPD0gY2FudmFzLnRvRGF0YVVSTCgn
aW1hZ2UvanBlZycsIDAuMSkubGVuZ3RoLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycs
IDApLmxlbmd0aCA8PSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMC4xKS5sZW5ndGgi
KTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBfYWRkVGVzdCh0ZXN0VG9EYXRhVVJM
KTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxjYW52YXMgaWQ9ImMiIHdp
ZHRoPSIxMDAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorICAgIDxwIGlkPSJkIj48L3A+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90
b0RhdGFVUkwtanBlZy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9m
YXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLmpzCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI1NyBAQAorZnVuY3Rpb24gX3ZhbFRvU3RyaW5nKHZhbCkKK3sKKwlpZiAodmFs
ID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBudWxsKQorCQlyZXR1cm4gJ1snICsgdHlwZW9mKHZh
bCkgKyAnXSc7CisJcmV0dXJuIHZhbC50b1N0cmluZygpICsgJ1snICsgdHlwZW9mKHZhbCkgKyAn
XSc7Cit9CisKK3ZhciBfaGV4MmRlY190YWJsZSA9IHsKKwkwOjAsIDE6MSwgMjoyLCAzOjMsIDQ6
NCwgNTo1LCA2OjYsIDc6NywgODo4LCA5OjksCisJYToxMCwgYjoxMSwgYzoxMiwgZDoxMywgZTox
NCwgZjoxNSwKKwlBOjEwLCBCOjExLCBDOjEyLCBEOjEzLCBFOjE0LCBGOjE1Cit9OworZnVuY3Rp
b24gX2hleDJkZWMoaGV4KQoreworCXJldHVybiBfaGV4MmRlY190YWJsZVtoZXguY2hhckF0KDAp
XSoxNiArIF9oZXgyZGVjX3RhYmxlW2hleC5jaGFyQXQoMSldOworfQorCit2YXIgX2ZhaWxlZCA9
IGZhbHNlOwordmFyIF9hc3NlcnRlZCA9IGZhbHNlOworZnVuY3Rpb24gX3dhcm4odGV4dCkKK3sK
Kwlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZCcpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2xpJykpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQp
KTsKK30KK2Z1bmN0aW9uIF9mYWlsKHRleHQpCit7CisJX3dhcm4odGV4dCk7CisJX2ZhaWxlZCA9
IHRydWU7Cit9CisKK2Z1bmN0aW9uIF9hc3NlcnQoY29uZCwgdGV4dCkKK3sKKwlfYXNzZXJ0ZWQg
PSB0cnVlOworCWlmICghIGNvbmQpCisJCV9mYWlsKCdGYWlsZWQgYXNzZXJ0aW9uOiAnICsgdGV4
dCk7Cit9CisKK2Z1bmN0aW9uIF9hc3NlcnRTYW1lKGEsIGIsIHRleHRfYSwgdGV4dF9iKQorewor
CV9hc3NlcnRlZCA9IHRydWU7CisJaWYgKGEgIT09IGIpCisJCV9mYWlsKCdGYWlsZWQgYXNzZXJ0
aW9uICcgKyB0ZXh0X2EgKyAnID09PSAnICsgdGV4dF9iICsKKwkJCQknIChnb3QgJyArIF92YWxU
b1N0cmluZyhhKSArICcsIGV4cGVjdGVkICcgKyBfdmFsVG9TdHJpbmcoYikgKyAnKScpOworfQor
CitmdW5jdGlvbiBfYXNzZXJ0RGlmZmVyZW50KGEsIGIsIHRleHRfYSwgdGV4dF9iKQoreworCV9h
c3NlcnRlZCA9IHRydWU7CisJaWYgKGEgPT09IGIpCisJCV9mYWlsKCdGYWlsZWQgYXNzZXJ0aW9u
ICcgKyB0ZXh0X2EgKyAnICE9PSAnICsgdGV4dF9iICsKKwkJCQknIChnb3QgJyArIF92YWxUb1N0
cmluZyhhKSArICcsIGV4cGVjdGVkIG5vdCAnICsgX3ZhbFRvU3RyaW5nKGIpICsgJyknKTsKK30K
KworZnVuY3Rpb24gX2Fzc2VydEVxdWFsKGEsIGIsIHRleHRfYSwgdGV4dF9iKQoreworCV9hc3Nl
cnRlZCA9IHRydWU7CisJaWYgKGEgIT0gYikKKwkJX2ZhaWwoJ0ZhaWxlZCBhc3NlcnRpb24gJyAr
IHRleHRfYSArICcgPT0gJyArIHRleHRfYiArCisJCQkJJyAoZ290ICcgKyBfdmFsVG9TdHJpbmco
YSkgKyAnLCBleHBlY3RlZCAnICsgX3ZhbFRvU3RyaW5nKGIpICsgJyknKTsKK30KKworZnVuY3Rp
b24gX2Fzc2VydE1hdGNoKGEsIGIsIHRleHRfYSwgdGV4dF9iKQoreworCV9hc3NlcnRlZCA9IHRy
dWU7CisJaWYgKCEgYS5tYXRjaChiKSkKKwkJX2ZhaWwoJ0ZhaWxlZCBhc3NlcnRpb24gJyArIHRl
eHRfYSArICcgbWF0Y2hlcyAnICsgdGV4dF9iICsKKwkJCQknIChnb3QgJyArIF92YWxUb1N0cmlu
ZyhhKSArICcpJyk7Cit9CisKKwordmFyIF9tYW51YWxfY2hlY2sgPSBmYWxzZTsKKworZnVuY3Rp
b24gX3JlcXVpcmVNYW51YWxDaGVjaygpCit7CisJX21hbnVhbF9jaGVjayA9IHRydWU7Cit9CisK
K2Z1bmN0aW9uIF9jcmFzaCgpCit7CisJX2ZhaWwoJ0Fib3J0ZWQgZHVlIHRvIHByZWRpY3RlZCBj
cmFzaCcpOworfQorCit2YXIgX2dldEltYWdlRGF0YUNhbGlicmF0ZWQgPSBmYWxzZTsKK3ZhciBf
Z2V0SW1hZ2VEYXRhSXNQcmVtdWwsIF9nZXRJbWFnZURhdGFJc0JHUkE7CisKK2Z1bmN0aW9uIF9n
ZXRQaXhlbChjYW52YXMsIHgseSkKK3sKKwl2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJk
Jyk7CisJaWYgKGN0eCAmJiB0eXBlb2YoY3R4LmdldEltYWdlRGF0YSkgIT0gJ3VuZGVmaW5lZCcp
CisJeworCQl0cnkgeworCQkJdmFyIGltZ2RhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKHgsIHksIDEs
IDEpOworCQl9IGNhdGNoIChlKSB7CisJCQkvLyBwcm9iYWJseSBhIHNlY3VyaXR5IGV4Y2VwdGlv
biBjYXVzZWQgYnkgaGF2aW5nIGRyYXduCisJCQkvLyBkYXRhOiBVUkxzIG9udG8gdGhlIGNhbnZh
cworCQkJaW1nZGF0YSA9IG51bGw7CisJCX0KKwkJaWYgKGltZ2RhdGEpCisJCXsKKwkJCS8vIFdv
cmsgYXJvdW5kIGdldEltYWdlRGF0YSBidWdzLCBzaW5jZSB3ZSB3YW50IHRoZSBvdGhlciB0ZXN0
cyB0bworCQkJLy8gY2Fycnkgb24gd29ya2luZyBhcyB3ZWxsIGFzIHBvc3NpYmxlCisJCQlpZiAo
ISBfZ2V0SW1hZ2VEYXRhQ2FsaWJyYXRlZCkKKwkJCXsKKwkJCQl2YXIgYzIgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdjYW52YXMnKTsKKwkJCQljMi53aWR0aCA9IGMyLmhlaWdodCA9IDE7CisJ
CQkJdmFyIGN0eDIgPSBjMi5nZXRDb250ZXh0KCcyZCcpOworCQkJCWN0eDIuZmlsbFN0eWxlID0g
J3JnYmEoMCwgMjU1LCAyNTUsIDAuNSknOworCQkJCWN0eDIuZmlsbFJlY3QoMCwgMCwgMSwgMSk7
CisJCQkJdmFyIGRhdGEyID0gY3R4Mi5nZXRJbWFnZURhdGEoMCwgMCwgMSwgMSkuZGF0YTsKKwor
CQkJCS8vIEZpcmVmb3ggcmV0dXJucyBwcmVtdWx0aXBsaWVkIGFscGhhCisKKwkJCQlpZiAoZGF0
YTJbMV0gPiAxMDAgJiYgZGF0YTJbMV0gPCAxNTApCisJCQkJCV9nZXRJbWFnZURhdGFJc1ByZW11
bCA9IHRydWU7CisJCQkJZWxzZQorCQkJCQlfZ2V0SW1hZ2VEYXRhSXNQcmVtdWwgPSBmYWxzZTsK
KworCQkJCS8vIE9wZXJhIE1pbmkgNCBCZXRhIHJldHVybnMgQkdSQSBpbnN0ZWFkIG9mIFJHQkEK
KworCQkJCWlmIChkYXRhMlswXSA+IDI1MCAmJiBkYXRhMlsyXSA8IDUpCisJCQkJCV9nZXRJbWFn
ZURhdGFJc0JHUkEgPSB0cnVlOworCQkJCWVsc2UKKwkJCQkJX2dldEltYWdlRGF0YUlzQkdSQSA9
IGZhbHNlOworCisJCQkJX2dldEltYWdlRGF0YUNhbGlicmF0ZWQgPSB0cnVlOworCQkJfQorCisJ
CQkvLyBVbmRvIHRoZSBCR1JBIGZsaXBwaW5nCisJCQl2YXIgcmdiYSA9IChfZ2V0SW1hZ2VEYXRh
SXNCR1JBCisJCQkJPyBbIGltZ2RhdGEuZGF0YVsyXSwgaW1nZGF0YS5kYXRhWzFdLCBpbWdkYXRh
LmRhdGFbMF0sIGltZ2RhdGEuZGF0YVszXSBdCisJCQkJOiBbIGltZ2RhdGEuZGF0YVswXSwgaW1n
ZGF0YS5kYXRhWzFdLCBpbWdkYXRhLmRhdGFbMl0sIGltZ2RhdGEuZGF0YVszXSBdKTsKKworCQkJ
aWYgKCEgX2dldEltYWdlRGF0YUlzUHJlbXVsKQorCQkJCXJldHVybiByZ2JhOworCisJCQkvLyBV
bmRvIHRoZSBwcmVtdWx0aXBseWluZworCQkJaWYgKHJnYmFbM10gPT0gMCkKKwkJCQlyZXR1cm4g
WyAwLCAwLCAwLCAwIF07CisJCQllbHNlCisJCQl7CisJCQkJdmFyIGEgPSByZ2JhWzNdIC8gMjU1
OworCQkJCXJldHVybiBbCisJCQkJCU1hdGgucm91bmQocmdiYVswXS9hKSwKKwkJCQkJTWF0aC5y
b3VuZChyZ2JhWzFdL2EpLAorCQkJCQlNYXRoLnJvdW5kKHJnYmFbMl0vYSksCisJCQkJCXJnYmFb
M10KKwkJCQldOworCQkJfQorCQl9CisJfQorCisJdHJ5IHsgY3R4ID0gY2FudmFzLmdldENvbnRl
eHQoJ29wZXJhLTJkZ2FtZScpOyB9IGNhdGNoIChlKSB7IC8qIEZpcmVmb3ggdGhyb3dzICovIH0K
KwlpZiAoY3R4ICYmIHR5cGVvZihjdHguZ2V0UGl4ZWwpICE9ICd1bmRlZmluZWQnKQorCXsKKwkJ
dHJ5IHsKKwkJCXZhciBjID0gY3R4LmdldFBpeGVsKHgsIHkpOworCQl9IGNhdGNoIChlKSB7CisJ
CQkvLyBwcm9iYWJseSBhIHNlY3VyaXR5IGV4Y2VwdGlvbiBjYXVzZWQgYnkgaGF2aW5nIGRyYXdu
CisJCQkvLyBkYXRhOiBVUkxzIG9udG8gdGhlIGNhbnZhcworCQkJYyA9IG51bGw7CisJCX0KKwkJ
aWYgKGMpCisJCXsKKwkJCXZhciBtYXRjaGVzID0gL15yZ2JhXCgoXGQrKSwgKFxkKyksIChcZCsp
LCAoW1xkXC5dKylcKSQvLmV4ZWMoYyk7CisJCQlpZiAobWF0Y2hlcykKKwkJCQlyZXR1cm4gWyBt
YXRjaGVzWzFdLCBtYXRjaGVzWzJdLCBtYXRjaGVzWzNdLCBNYXRoLnJvdW5kKG1hdGNoZXNbNF0q
MjU1KSBdOworCQkJbWF0Y2hlcyA9IC9eIyguLikoLi4pKC4uKSQvLmV4ZWMoYyk7CisJCQlpZiAo
bWF0Y2hlcykKKwkJCQlyZXR1cm4gWyBfaGV4MmRlYyhtYXRjaGVzWzFdKSwgX2hleDJkZWMobWF0
Y2hlc1syXSksIF9oZXgyZGVjKG1hdGNoZXNbM10pLCAyNTUgXTsKKwkJfQorCX0KKwkvL193YXJu
KCIoQ2FuJ3QgdGVzdCBwaXhlbCB2YWx1ZSkiKTsKKwlfbWFudWFsX2NoZWNrID0gdHJ1ZTsKKwly
ZXR1cm4gdW5kZWZpbmVkOworfQorCitmdW5jdGlvbiBfYXNzZXJ0UGl4ZWwoY2FudmFzLCB4LHks
IHIsZyxiLGEsIHBvcywgY29sb3VyKQoreworCV9hc3NlcnRlZCA9IHRydWU7CisJdmFyIGMgPSBf
Z2V0UGl4ZWwoY2FudmFzLCB4LHkpOworCWlmIChjICYmICEgKGNbMF0gPT0gciAmJiBjWzFdID09
IGcgJiYgY1syXSA9PSBiICYmIGNbM10gPT0gYSkpCisJCV9mYWlsKCdGYWlsZWQgYXNzZXJ0aW9u
OiBnb3QgcGl4ZWwgWycgKyBjICsgJ10gYXQgKCcreCsnLCcreSsnKSwgZXhwZWN0ZWQgWycrcisn
LCcrZysnLCcrYisnLCcrYSsnXScpOworfQorCitmdW5jdGlvbiBfYXNzZXJ0UGl4ZWxBcHByb3go
Y2FudmFzLCB4LHksIHIsZyxiLGEsIHBvcywgY29sb3VyLCB0b2xlcmFuY2UpCit7CisJX2Fzc2Vy
dGVkID0gdHJ1ZTsKKwl2YXIgYyA9IF9nZXRQaXhlbChjYW52YXMsIHgseSk7CisJaWYgKGMpCisJ
eworCQl2YXIgZGlmZiA9IE1hdGgubWF4KE1hdGguYWJzKGNbMF0tciksIE1hdGguYWJzKGNbMV0t
ZyksIE1hdGguYWJzKGNbMl0tYiksIE1hdGguYWJzKGNbM10tYSkpOworCQlpZiAoZGlmZiA+IHRv
bGVyYW5jZSkKKwkJCV9mYWlsKCdGYWlsZWQgYXNzZXJ0aW9uOiBnb3QgcGl4ZWwgWycgKyBjICsg
J10gYXQgKCcreCsnLCcreSsnKSwgZXhwZWN0ZWQgWycrcisnLCcrZysnLCcrYisnLCcrYSsnXSAr
Ly0gJyt0b2xlcmFuY2UpOworCX0KK30KKworZnVuY3Rpb24gX2FkZFRlc3QodGVzdCkKK3sKKwl2
YXIgZGVmZXJyZWQgPSBmYWxzZTsKKwl3aW5kb3cuZGVmZXJUZXN0ID0gZnVuY3Rpb24gKCkgeyBk
ZWZlcnJlZCA9IHRydWU7IH07CisJZnVuY3Rpb24gZW5kVGVzdCgpCisJeworCQlpZiAoX2ZhaWxl
ZCkgLy8gdGVzdCBmYWlsZWQKKwkJeworCQkJZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNz
TmFtZSArPSAnIGZhaWwnOworCQkJd2luZG93Ll90ZXN0U3RhdHVzID0gWydmYWlsJywgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2QnKS5pbm5lckhUTUxdOworCQl9CisJCWVsc2UgaWYgKF9tYW51
YWxfY2hlY2sgfHwgIV9hc3NlcnRlZCkKKwkJeyAvLyB0ZXN0IGNhc2UgZXhwbGljaXRseSBhc2tl
ZCBmb3IgYSBtYW51YWwgY2hlY2ssIG9yIG5vIGF1dG9tYXRpYyBhc3NlcnRpb25zIHdlcmUgcGVy
Zm9ybWVkCisJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZCcpLmlubmVySFRNTCArPSAnPGxp
PkNhbm5vdCBhdXRvbWF0aWNhbGx5IHZlcmlmeSByZXN1bHQnOworCQkJZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50LmNsYXNzTmFtZSArPSAnIG5lZWRzX2NoZWNrJzsKKwkJCXdpbmRvdy5fdGVzdFN0
YXR1cyA9IFsnY2hlY2snLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZCcpLmlubmVySFRNTF07
CisJCX0KKwkJZWxzZSAvLyB0ZXN0IHN1Y2NlZWRlZAorCQl7CisJCQlkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnZCcpLmlubmVySFRNTCA9ICdQYXNzZWQnOworCQkJZG9jdW1lbnQuZG9jdW1lbnRF
bGVtZW50LmNsYXNzTmFtZSArPSAnIHBhc3MnOworCQkJd2luZG93Ll90ZXN0U3RhdHVzID0gWydw
YXNzJywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2QnKS5pbm5lckhUTUxdOworCQl9CisJCWlm
ICh3aW5kb3cubm90aWZ5RW5kVGVzdCkKKwkJCW5vdGlmeUVuZFRlc3QoKTsKKworCX0KKwl3aW5k
b3cuZW5kVGVzdCA9IGVuZFRlc3Q7CisJd2luZG93LndyYXBGdW5jdGlvbiA9IGZ1bmN0aW9uIChm
KQorCXsKKwkJcmV0dXJuIGZ1bmN0aW9uKCkKKwkJeworCQkJdHJ5CisJCQl7CisJCQkJZi5hcHBs
eShudWxsLCBhcmd1bWVudHMpOworCQkJfQorCQkJY2F0Y2ggKGUpCisJCQl7CisJCQkJX2ZhaWwo
J0Fib3J0ZWQgd2l0aCBleGNlcHRpb246ICcgKyBlLm1lc3NhZ2UpOworCQkJfQorCQkJZW5kVGVz
dCgpOworCQl9CisJfQorCisJd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uICgpCisJeworCQl0cnkK
KwkJeworCQkJdmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjJyk7CisJCQl2
YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7CisJCQl0ZXN0KGNhbnZhcywgY3R4KTsK
KwkJfQorCQljYXRjaCAoZSkKKwkJeworCQkJX2ZhaWwoJ0Fib3J0ZWQgd2l0aCBleGNlcHRpb246
ICcgKyBlLm1lc3NhZ2UpOworCQkJZGVmZXJyZWQgPSBmYWxzZTsgLy8gY2FuY2VsIGFueSBkZWZl
cmVuY2UKKwkJfQorCisJCWlmICghIGRlZmVycmVkKQorCQkJZW5kVGVzdCgpOworCX07Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53148</attachid>
            <date>2010-04-11 22:32:05 -0700</date>
            <delta_ts>2010-04-12 00:03:44 -0700</delta_ts>
            <desc>Proposed patch - Fix a typo in the previous patch</desc>
            <filename>toDataURL-jpeg-quality-2.patch</filename>
            <type>text/plain</type>
            <size>37009</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDU3NDY5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDQt
MTEgIExlbyBZYW5nICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBjYW52YXMudG9EYXRhVVJM
KHR5cGUsIHF1YWxpdHksIC4uLikgdG8gbGV0IGl0IHN1cHBvcnQgcXVhbGl0eSBwYXJhbWV0ZXIu
IAorICAgICAgICBBbmQgaW1wbGVtZW50IGl0IGluIFF0IHByb3RpbmcuIAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzczMDQKKworICAgICAgICAqIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAg
ICogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5j
cHA6CisgICAgICAgICogV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHA6CisgICAgICAgICog
V2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5oOgorICAgICAgICAqIFdlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oOgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwOgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgICogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcDoKKyAgICAgICAg
KiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorCiAyMDEw
LTA0LTA5ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkIGNyYXNoIGZpeC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTc0NjcpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9i
aWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNSw3IEBACiAjaW5jbHVkZSAiV2ViR0xDb250
ZXh0QXR0cmlidXRlcy5oIgogI2VuZGlmCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTgxLDQg
KzgzLDIyIEBAIEpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dCgKICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoY2FudmFzLT5nZXRD
b250ZXh0KGNvbnRleHRJZCwgYXR0cnMuZ2V0KCkpKSk7CiB9CiAKK0pTVmFsdWUgSlNIVE1MQ2Fu
dmFzRWxlbWVudDo6dG9EYXRhVVJMKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKK3sKKyAgICBjb25zdCBVU3RyaW5nJiB0eXBlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmlu
ZWRPck51bGxDaGVjayhleGVjLCBhcmdzLmF0KDApKTsKKyAgICBkb3VibGUgcXVhbGl0eSA9IDEu
MDsKKyAgICBpZiAoYXJncy5zaXplKCkgPiAxKSB7CisgICAgICAgIEpTVmFsdWUgdiA9IGFyZ3Mu
YXQoMSk7CisgICAgICAgIGlmICh2LmlzTnVtYmVyKCkpCisgICAgICAgICAgICBxdWFsaXR5ID0g
di50b051bWJlcihleGVjKTsKKyAgICAgICAgaWYgKHF1YWxpdHkgPiAxLjAgfHwgcXVhbGl0eSA8
IDAuMCB8fCAhaXNmaW5pdGUocXVhbGl0eSkpCisgICAgICAgICAgICBxdWFsaXR5ID0gMS4wOwor
ICAgIH0KKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gc3RhdGljX2Nhc3Q8SFRNTENh
bnZhc0VsZW1lbnQqPihpbXBsKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIEpT
Qzo6SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZyhleGVjLCBjYW52YXMtPnRvRGF0YVVSTCh0eXBl
LCBxdWFsaXR5LCBlYykpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDU3NDY3KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENv
LiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCkBAIC0zNCw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ2FudmFzQ29udGV4dEF0dHJpYnV0
ZXMuaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRN
TENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUg
IldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNs
dWRlICJWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgpAQCAtNDIsNiArNDQsNyBAQAogI2lm
IEVOQUJMRSgzRF9DQU5WQVMpCiAjaW5jbHVkZSAiVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIK
ICNlbmRpZgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtODksNCArOTIsMjIgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTENhbnZh
c0VsZW1lbgogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEhUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkxDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQoreworICAgIGRvdWJsZSBxdWFsaXR5ID0gMS4wOworICAgIGlmIChh
cmdzLkxlbmd0aCgpID4gMSkgeworICAgICAgICBpZiAoYXJnc1sxXS0+SXNOdW1iZXIoKSkKKyAg
ICAgICAgICAgIHF1YWxpdHkgPSBhcmdzWzFdLT5OdW1iZXJWYWx1ZSgpOworICAgICAgICBpZiAo
cXVhbGl0eSA+IDEuMCB8fCBxdWFsaXR5IDwgMC4wIHx8ICFpc2Zpbml0ZShxdWFsaXR5KSkKKyAg
ICAgICAgICAgIHF1YWxpdHkgPSAxLjA7CisgICAgfQorICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFz
ID0gVjhIVE1MQ2FudmFzRWxlbWVudDo6dG9OYXRpdmUoaG9sZGVyKTsKKyAgICBTdHJpbmcgdHlw
ZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBTdHJpbmcgcmVzdWx0ID0gY2FudmFzLT50b0RhdGFVUkwodHlwZSwgcXVhbGl0eSwgZWMp
OworICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CisgICAgcmV0dXJuIHY4U3RyaW5n
T3JVbmRlZmluZWQocmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
Q2FudmFzU3VyZmFjZS5jcHAJKHJldmlzaW9uIDU3NDY3KQorKysgV2ViQ29yZS9kb20vQ2FudmFz
U3VyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2NSw3IEBA
IHZvaWQgQ2FudmFzU3VyZmFjZTo6c2V0U3VyZmFjZVNpemUoY29uc3QKICAgICBtX2ltYWdlQnVm
ZmVyLmNsZWFyKCk7CiB9CiAKLVN0cmluZyBDYW52YXNTdXJmYWNlOjp0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgQ2FudmFzU3VyZmFj
ZTo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSBxdWFsaXR5LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIW1fb3JpZ2luQ2xlYW4pIHsKICAgICAgICAgZWMg
PSBTRUNVUklUWV9FUlI7CkBAIC03OCw3ICs3OSw3IEBAIFN0cmluZyBDYW52YXNTdXJmYWNlOjp0
b0RhdGFVUkwoY29uc3QgU3QKICAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkgfHwgIU1JTUVUeXBl
UmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSkK
ICAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwoImltYWdlL3BuZyIpOwogCi0gICAg
cmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwobWltZVR5cGUpOworICAgIHJldHVybiBidWZmZXIo
KS0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5KTsKIH0KIAogdm9pZCBDYW52YXNTdXJmYWNl
Ojp3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmKQpJbmRleDogV2ViQ29yZS9kb20vQ2FudmFzU3Vy
ZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaAkocmV2aXNp
b24gNTc0NjcpCisrKyBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChC
ZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01OCw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBpbnQgd2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQogICAgIGludCBoZWlnaHQoKSBjb25zdCB7
IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KIAotICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFN0cmluZyB0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgZG91YmxlIHF1YWxpdHksIEV4Y2VwdGlvbkNvZGUmKTsK
IAogICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIApJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRsCShyZXZpc2lvbiA1NzQ2NykKKysrIFdl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUg
KEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMzLDggQEAgbW9kdWxlIGh0bWwgewogICAgICAgICBh
dHRyaWJ1dGUgbG9uZyB3aWR0aDsKICAgICAgICAgYXR0cmlidXRlIGxvbmcgaGVpZ2h0OwogCi0g
ICAgICAgIERPTVN0cmluZyB0b0RhdGFVUkwoaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxUb051
bGxTdHJpbmddIERPTVN0cmluZyB0eXBlKQorICAgICAgICAvLyBIVE1MNSBkcmFmdCBzcGVjOiBE
T01TdHJpbmcgdG9EYXRhVVJMKERPTVN0cmluZyB0eXBlLCAuLi4pOworICAgICAgICBbQ3VzdG9t
XSBET01TdHJpbmcgdG9EYXRhVVJMKGluIFtDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3Ry
aW5nXSBET01TdHJpbmcgdHlwZSkKICAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwog
CiAjaWYgIWRlZmluZWQoTEFOR1VBR0VfT0JKRUNUSVZFX0MpIHx8ICFMQU5HVUFHRV9PQkpFQ1RJ
VkVfQwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkocmV2aXNp
b24gNTc0NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgyLDcgKzgzLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHB1dFVubXVsdGlwbGllZEltYWdl
RGF0YShJbWFnZURhdGEqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50KTsKICAgICAgICAgdm9pZCBwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKElt
YWdlRGF0YSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQpOwogCi0gICAgICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkgY29uc3Q7CisgICAgICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgZG91YmxlIHF1YWxpdHkgPSAxLjApIGNvbnN0OwogI2lmICFQTEFURk9STShDRykKICAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0oKTsgfQogICAgICAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoSW1hZ2VDb2xv
clNwYWNlIHNyY0NvbG9yU3BhY2UsIEltYWdlQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcAkocmV2aXNpb24gNTc0NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
IDx6ZWNrZUBzZWxmaXNoLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2Jp
bGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4Myw3ICsyODQsNyBAQCBzdGF0aWMgY2Fpcm9fc3RhdHVz
X3Qgd3JpdGVGdW5jdGlvbih2b2lkCiAgICAgcmV0dXJuIENBSVJPX1NUQVRVU19TVUNDRVNTOwog
fQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KSBjb25zdAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgZG91YmxlKSBjb25zdAogewogICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBjYWly
b19nZXRfdGFyZ2V0KGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGlmICghaW1h
Z2UpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHAJKHJldmlzaW9uIDU3NDY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjc1
LDcgKzI3Niw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21NSU0KICNl
bmRpZgogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKSBjb25zdAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgZG91YmxlKSBjb25zdAogewogICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwogCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJI
YWlrdS5jcHAJKHJldmlzaW9uIDU3NDY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21h
aWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28u
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNzYsNyArNzcsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1h
Z2VECiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJikgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
ICAgIHJldHVybiBTdHJpbmcoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
SW1hZ2VCdWZmZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkocmV2aXNpb24gNTc0NjcpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYg
KzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNjUsOSArMjY2LDEwIEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFn
ZUQKIC8vIFdlIGdldCBhIG1pbWVUeXBlIGhlcmUgYnV0IFFJbWFnZVdyaXRlciBkb2VzIG5vdCBz
dXBwb3J0IG1pbWV0eXBlcyBidXQKIC8vIG9ubHkgZm9ybWF0cyAocG5nLCBnaWYsIGpwZWcuLi4s
IHhwbSkuIFNvIGFzc3VtZSB3ZSBnZXQgaW1hZ2UvIGFzIGltYWdlCiAvLyBtaW1ldHlwZXMgYW5k
IHRoZW4gcmVtb3ZlIHRoZSBpbWFnZS8gdG8gZ2V0IHRoZSBRdCBmb3JtYXQuCi1TdHJpbmcgSW1h
Z2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdAorU3RyaW5n
IEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgZG91YmxlIHF1
YWxpdHkpIGNvbnN0CiB7CiAgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVk
SW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisgICAgQVNTRVJUKDAuMCA8PSBx
dWFsaXR5ICYmIHF1YWxpdHkgPD0gMS4wKTsKIAogICAgIGlmICghbWltZVR5cGUuc3RhcnRzV2l0
aCgiaW1hZ2UvIikpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKQEAgLTI3Nyw3ICsyNzksNyBA
QCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpCiAgICAgUUJ1ZmZlciBi
dWZmZXIoJmRhdGEpOwogICAgIGJ1ZmZlci5vcGVuKFFCdWZmZXI6OldyaXRlT25seSk7CiAKLSAg
ICBpZiAoIW1fZGF0YS5tX3BpeG1hcC5zYXZlKCZidWZmZXIsIG1pbWVUeXBlLnN1YnN0cmluZyhz
aXplb2YgImltYWdlIikudXRmOCgpLmRhdGEoKSkpCisgICAgaWYgKCFtX2RhdGEubV9waXhtYXAu
c2F2ZSgmYnVmZmVyLCBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpLnV0ZjgoKS5k
YXRhKCksIHF1YWxpdHkqMTAwKzAuNSkpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKIAogICAg
IGJ1ZmZlci5jbG9zZSgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0lt
YWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9uIDU3NDY3KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA4LCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVp
amluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIAogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCkBAIC0yNjAsNyArMjYxLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0
UHJlbXVsdGlwbGllZEltYWdlRAogICAgIHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3Vy
Y2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkt
PmJpdG1hcCgpLCBtX3NpemUpOwogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChj
b25zdCBTdHJpbmcmKSBjb25zdAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiwgZG91YmxlKSBjb25zdAogewogICAgIC8vIEVuY29kZSB0aGUgaW1hZ2UgaW50byBh
IHZlY3Rvci4KICAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gcG5nRW5jb2RlZERhdGE7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJX
aW5jZS5jcHAJKHJldmlzaW9uIDU3NDY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBD
by4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIx
NSw3ICsyMTYsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VECiAg
ICAgcHV0SW1hZ2VEYXRhPHRydWU+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2Rh
dGEubV9iaXRtYXAuZ2V0KCkpOwogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFV
UkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgZG91YmxlKSBjb25zdAogewogICAgIGlmICghbV9k
YXRhLm1fYml0bWFwLT5ieXRlcygpKQogICAgICAgICByZXR1cm4gImRhdGE6LCI7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHJldmlz
aW9uIDU3NDY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgS2V2aW4gT2xsaXZpZXIgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzUsNyArNzYsNyBA
QCB2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VECiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JikgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIGRv
dWJsZSkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBTdHJpbmco
KTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU3NDY3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMDQtMTEgIExlbyBZYW5nICA8bGVv
LnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEZpeCBjYW52YXMudG9EYXRhVVJMKHR5cGUsIHF1YWxpdHksIC4u
LikgdG8gbGV0IGl0IHN1cHBvcnQgcXVhbGl0eSBwYXJhbWV0ZXIuIAorICAgICAgICBBbmQgaW1w
bGVtZW50IGl0IGluIFF0IHByb3RpbmcuIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzczMDQKKworICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvY2Fu
dmFzL3RvRGF0YVVSTC1qcGVnLWFscGhhLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEuaHRtbDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcHJpbWFy
eWNvbG9ycy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3Qv
Y2FudmFzL3RvRGF0YVVSTC1qcGVnLXByaW1hcnljb2xvcnMuaHRtbDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3Rv
RGF0YVVSTC1qcGVnLXF1YWxpdHktYmFzaWMuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1ub3RudW1iZXItZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFV
UkwtanBlZy1xdWFsaXR5LW5vdG51bWJlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW91dHNpZGVyYW5nZS1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0
YVVSTC1qcGVnLXF1YWxpdHktb3V0c2lkZXJhbmdlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLmpzOiBBZGRlZC4KKwogMjAxMC0w
NC0xMSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE5vdCByZXZp
ZXdlZCwgbGF5b3V0IHRlc3QgZml4IGZvciBRVCBib3RzLgpJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVS
TC1qcGVnLWFscGhhLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLWFscGhhLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorUGFzc2VkCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1hbHBoYS5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLWFs
cGhhLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2Nh
bnZhcy90b0RhdGFVUkwtanBlZy1hbHBoYS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2
IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSJ0b0RhdGFVUkwtanBlZy5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KworICAgICAgICB3aW5kb3cubm90aWZ5RW5kVGVzdCA9IGZ1bmN0aW9uICgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9OworCisg
ICAgICAgIGZ1bmN0aW9uIHRlc3RUb0RhdGFVUkwoY2FudmFzLCBjdHgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAncmdiYSgxMjgsIDI1NSwgMTI4LCAwLjUpJzsKKyAg
ICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDUwKTsKKyAgICAgICAgICAgIGN0eC5n
bG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tb3Zlcic7IC8vIHNob3VsZCBi
ZSBpZ25vcmVkIGJ5IHRvRGF0YVVSTAorICAgICAgICAgICAgdmFyIGRhdGEgPSBjYW52YXMudG9E
YXRhVVJMKCdpbWFnZS9qcGVnJyk7CisgICAgICAgICAgICBjdHguZ2xvYmFsQ29tcG9zaXRlT3Bl
cmF0aW9uID0gJ3NvdXJjZS1vdmVyJzsKKyAgICAgICAgICAgIGlmICghZGF0YS5tYXRjaCgvXmRh
dGE6aW1hZ2VcL2pwZWdbOyxdLykpIHsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0KHRydWUsICJ0
cnVlIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5
bGUgPSAnI2YwMCc7CisgICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgNTAp
OworICAgICAgICAgICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTsKKyAgICAgICAgICAgICAg
ICBkZWZlclRlc3QoKTsKKyAgICAgICAgICAgICAgICBpbWcub25sb2FkID0gd3JhcEZ1bmN0aW9u
KGZ1bmN0aW9uICgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjdHgu
ZHJhd0ltYWdlKGltZywgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBfYXNzZXJ0UGl4ZWxBcHByb3goY2FudmFzLCA1MCwyNSwgNjMsMTI3LDYzLDI1NSwg
IjUwLDI1IiwgIjYzLDEyNyw2MywyNTUiLCA4KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICBpbWcuc3JjID0gZGF0YTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
X2FkZFRlc3QodGVzdFRvRGF0YVVSTCk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KyAgICA8Y2FudmFzIGlkPSJjIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKyAg
ICA8cCBpZD0iZCI+PC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcHJpbWFyeWNvbG9ycy1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMv
dG9EYXRhVVJMLWpwZWctcHJpbWFyeWNvbG9ycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1wcmlt
YXJ5Y29sb3JzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorUGFzc2Vk
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBl
Zy1wcmltYXJ5Y29sb3JzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcHJpbWFyeWNvbG9ycy5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpw
ZWctcHJpbWFyeWNvbG9ycy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACis8aHRt
bD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSJ0b0RhdGFVUkwtanBlZy5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAg
ICB3aW5kb3cubm90aWZ5RW5kVGVzdCA9IGZ1bmN0aW9uICgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9OworCisgICAgICAgIGZ1
bmN0aW9uIHRlc3RUb0RhdGFVUkwoY2FudmFzLCBjdHgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGN0eC5maWxsU3R5bGUgPSAnI2ZmMCc7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwg
MjUsIDQwKTsKKyAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAnIzBmZic7CisgICAgICAgICAg
ICBjdHguZmlsbFJlY3QoMjUsIDAsIDUwLCA0MCk7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxl
ID0gJyMwMGYnOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDc1LCAwLCAyNSwgNDApOworICAg
ICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjZmZmJzsKKyAgICAgICAgICAgIGN0eC5maWxsUmVj
dCgwLCA0MCwgMTAwLCAxMCk7CisgICAgICAgICAgICB2YXIgZGF0YSA9IGNhbnZhcy50b0RhdGFV
UkwoJ2ltYWdlL2pwZWcnKTsgLy8gaXQgaXMgb2theSBpZiB0aGlzIHJldHVybnMgYSBQTkcgaW5z
dGVhZAorICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjZjAwJzsKKyAgICAgICAgICAgIGN0
eC5maWxsUmVjdCgwLCAwLCAxMDAsIDUwKTsKKyAgICAgICAgICAgIHZhciBpbWcgPSBuZXcgSW1h
Z2UoKTsKKyAgICAgICAgICAgIGRlZmVyVGVzdCgpOworCisgICAgICAgICAgICBpbWcub25sb2Fk
ID0gd3JhcEZ1bmN0aW9uKGZ1bmN0aW9uICgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApOworICAgICAgICAgICAgICAgIF9hc3NlcnRQaXhl
bEFwcHJveChjYW52YXMsIDEyLDIwLCAyNTUsMjU1LDAsMjU1LCAiMTIsMjAiLCAiMjU1LDI1NSww
LDI1NSIsIDgpOworICAgICAgICAgICAgICAgIF9hc3NlcnRQaXhlbEFwcHJveChjYW52YXMsIDUw
LDIwLCAwLDI1NSwyNTUsMjU1LCAiNTAsMjAiLCAiMCwyNTUsMjU1LDI1NSIsIDgpOworICAgICAg
ICAgICAgICAgIF9hc3NlcnRQaXhlbEFwcHJveChjYW52YXMsIDg3LDIwLCAwLDAsMjU1LDI1NSwg
Ijg3LDIwIiwgIjAsMCwyNTUsMjU1IiwgOCk7CisgICAgICAgICAgICAgICAgX2Fzc2VydFBpeGVs
QXBwcm94KGNhbnZhcywgNTAsNDUsIDI1NSwyNTUsMjU1LDI1NSwgIjUwLDQ1IiwgIjI1NSwyNTUs
MjU1LDI1NSIsIDgpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGltZy5zcmMgPSBk
YXRhOworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAg
IH0KKyAgICAgICAgX2FkZFRlc3QodGVzdFRvRGF0YVVSTCk7CisgICAgPC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKyAgICA8Y2FudmFzIGlkPSJjIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUwIj48
L2NhbnZhcz4KKyAgICA8cCBpZD0iZCI+PC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1i
YXNpYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
ZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFV
UkwtanBlZy1xdWFsaXR5LWJhc2ljLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSBAQAorUGFzc2VkCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90
b0RhdGFVUkwtanBlZy1xdWFsaXR5LWJhc2ljLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMv
dG9EYXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU5IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSJ0b0RhdGFVUkwtanBlZy5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKworICAgICAgICB3aW5kb3cubm90aWZ5RW5kVGVzdCA9IGZ1bmN0aW9uICgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9Owor
CisgICAgICAgIGZ1bmN0aW9uIHRlc3RUb0RhdGFVUkwoY2FudmFzLCBjdHgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAnIzAwZic7CisgICAgICAgICAgICBjdHguZmls
bFJlY3QoMCwgMCwgMTAwLCA1MCk7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyMwZmYn
OworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDMsIDEwMCwgMSk7CisgICAgICAgICAgICAv
LyBDaGVjayBmb3IgSlBFRyBzdXBwb3J0IGZpcnN0CisgICAgICAgICAgICB2YXIgZGF0YSA9IGNh
bnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKTsKKyAgICAgICAgICAgIGlmICghZGF0YS5tYXRj
aCgvXmRhdGE6aW1hZ2VcL2pwZWdbOyxdLykpIHsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0KHRy
dWUsICJ0cnVlIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBk
YXRhX2hpID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDAuOTkpOworICAgICAgICAg
ICAgICAgIHZhciBkYXRhX2xvID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDAuMDEp
OworICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAnI2YwMCc7CisgICAgICAgICAgICAg
ICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgNTApOworICAgICAgICAgICAgICAgIGRlZmVyVGVz
dCgpOworICAgICAgICAgICAgICAgIHZhciBpbWdfaGkgPSBuZXcgSW1hZ2UoKTsKKyAgICAgICAg
ICAgICAgICBpbWdfaGkub25sb2FkID0gZnVuY3Rpb24gKCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBpbWdfbG8gPSBuZXcgSW1hZ2UoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaW1nX2xvLm9ubG9hZCA9IHdyYXBGdW5jdGlvbihmdW5jdGlvbiAoKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKGlt
Z19oaSwgMCwgMCwgNTAsIDUwLCAwLCAwLCA1MCwgNTApOworICAgICAgICAgICAgICAgICAgICAg
ICAgY3R4LmRyYXdJbWFnZShpbWdfbG8sIDAsIDAsIDUwLCA1MCwgNTAsIDAsIDUwLCA1MCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIF9hc3NlcnQo
ZGF0YV9oaS5sZW5ndGggPiBkYXRhX2xvLmxlbmd0aCwgImRhdGFfaGkubGVuZ3RoID4gZGF0YV9s
by5sZW5ndGgiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9hc3NlcnRQaXhlbEFwcHJveChj
YW52YXMsIDI1LDI1LCAwLDAsMjU1LDI1NSwgIjI1LDI1IiwgIjAsMCwyNTUsMjU1IiwgMTIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgX2Fzc2VydFBpeGVsQXBwcm94KGNhbnZhcywgNzUsMjUs
IDAsMCwyNTUsMjU1LCAiNzUsMjUiLCAiMCwwLDI1NSwyNTUiLCAxMik7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBpbWdfbG8uc3JjID0gZGF0YV9sbzsKKyAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGltZ19oaS5zcmMgPSBkYXRhX2hpOwor
CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgX2FkZFRlc3QodGVzdFRvRGF0YVVSTCk7
CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8Y2FudmFzIGlkPSJjIiB3aWR0
aD0iMTAwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKyAgICA8cCBpZD0iZCI+PC9wPgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9E
YXRhVVJMLWpwZWctcXVhbGl0eS1ub3RudW1iZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxp
dHktbm90bnVtYmVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktbm90bnVtYmVyLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorUGFzc2VkCkluZGV4OiBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW5v
dG51bWJlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3Qv
Y2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktbm90bnVtYmVyLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1x
dWFsaXR5LW5vdG51bWJlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACis8aHRt
bD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSJ0b0RhdGFVUkwtanBlZy5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAg
ICB3aW5kb3cubm90aWZ5RW5kVGVzdCA9IGZ1bmN0aW9uICgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9OworCisgICAgICAgIGZ1
bmN0aW9uIHRlc3RUb0RhdGFVUkwoY2FudmFzLCBjdHgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGN0eC5maWxsU3R5bGUgPSAnIzAwZic7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwg
MTAwLCA1MCk7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyMwZmYnOworICAgICAgICAg
ICAgY3R4LmZpbGxSZWN0KDAsIDMsIDEwMCwgMSk7CisgICAgICAgICAgICAvLyBDaGVjayBmb3Ig
SlBFRyBzdXBwb3J0IGZpcnN0CisgICAgICAgICAgICB2YXIgZGF0YSA9IGNhbnZhcy50b0RhdGFV
UkwoJ2ltYWdlL2pwZWcnKTsKKyAgICAgICAgICAgIGlmICghZGF0YS5tYXRjaCgvXmRhdGE6aW1h
Z2VcL2pwZWdbOyxdLykpIHsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0KHRydWUsICJ0cnVlIik7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIF9hc3NlcnRTYW1lKGNhbnZh
cy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAnYm9ndXMnKSwgZGF0YSwgImNhbnZhcy50b0RhdGFV
UkwoJ2ltYWdlL2pwZWcnLCAnYm9ndXMnKSIsICJkYXRhIik7CisgICAgICAgICAgICAgICAgX2Fz
c2VydFNhbWUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHt9KSwgZGF0YSwgImNhbnZh
cy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCB7fSkiLCAiZGF0YSIpOworICAgICAgICAgICAgICAg
IF9hc3NlcnRTYW1lKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCBudWxsKSwgZGF0YSwg
ImNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCBudWxsKSIsICJkYXRhIik7CisgICAgICAg
ICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHVuZGVm
aW5lZCksIGRhdGEsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgdW5kZWZpbmVkKSIs
ICJkYXRhIik7CisgICAgICAgICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFzLnRvRGF0YVVSTCgn
aW1hZ2UvanBlZycsIHRydWUpLCBkYXRhLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycs
IHRydWUpIiwgImRhdGEiKTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9E
YXRhVVJMKCdpbWFnZS9qcGVnJywgJzAuMDEnKSwgZGF0YSwgImNhbnZhcy50b0RhdGFVUkwoJ2lt
YWdlL2pwZWcnLCAnMC4wMScpIiwgImRhdGEiKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIF9hZGRUZXN0KHRlc3RUb0RhdGFVUkwpOworICAgIDwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+CisgICAgPGNhbnZhcyBpZD0iYyIgd2lkdGg9IjEwMCIgaGVpZ2h0
PSI1MCI+PC9jYW52YXM+CisgICAgPHAgaWQ9ImQiPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1
YWxpdHktb3V0c2lkZXJhbmdlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW91dHNpZGVy
YW5nZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9x
dC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW91dHNpZGVyYW5nZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1Bhc3NlZApJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1vdXRzaWRl
cmFuZ2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2Nh
bnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW91dHNpZGVyYW5nZS5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWct
cXVhbGl0eS1vdXRzaWRlcmFuZ2UuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAor
PGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0idG9EYXRhVVJMLWpwZWcuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAg
ICAgICAgd2luZG93Lm5vdGlmeUVuZFRlc3QgPSBmdW5jdGlvbiAoKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBmdW5jdGlvbiB0ZXN0VG9EYXRhVVJMKGNhbnZhcywgY3R4KQorICAgICAgICB7CisgICAgICAg
ICAgICBjdHguZmlsbFN0eWxlID0gJyMwMGYnOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAs
IDAsIDEwMCwgNTApOworICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjMGZmJzsKKyAgICAg
ICAgICAgIGN0eC5maWxsUmVjdCgwLCAzLCAxMDAsIDEpOworICAgICAgICAgICAgLy8gQ2hlY2sg
Zm9yIEpQRUcgc3VwcG9ydCBmaXJzdAorICAgICAgICAgICAgdmFyIGRhdGEgPSBjYW52YXMudG9E
YXRhVVJMKCdpbWFnZS9qcGVnJyk7CisgICAgICAgICAgICBpZiAoIWRhdGEubWF0Y2goL15kYXRh
OmltYWdlXC9qcGVnWzssXS8pKSB7CisgICAgICAgICAgICAgICAgX2Fzc2VydCh0cnVlLCAidHJ1
ZSIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShj
YW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMTApLCBkYXRhLCAiY2FudmFzLnRvRGF0YVVS
TCgnaW1hZ2UvanBlZycsIDEwKSIsICJkYXRhIik7CisgICAgICAgICAgICAgICAgX2Fzc2VydFNh
bWUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIC0xMCksIGRhdGEsICJjYW52YXMudG9E
YXRhVVJMKCdpbWFnZS9qcGVnJywgLTEwKSIsICJkYXRhIik7CisgICAgICAgICAgICAgICAgX2Fz
c2VydFNhbWUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEuMDEpLCBkYXRhLCAiY2Fu
dmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEuMDEpIiwgImRhdGEiKTsKKyAgICAgICAgICAg
ICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgLTAuMDEpLCBk
YXRhLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIC0wLjAxKSIsICJkYXRhIik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBfYXNzZXJ0KGNhbnZhcy50b0RhdGFVUkwoJ2lt
YWdlL2pwZWcnLCAxKS5sZW5ndGggPj0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDAu
OSkubGVuZ3RoLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEpLmxlbmd0aCA+PSBj
YW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMC45KS5sZW5ndGgiKTsKKyAgICAgICAgICAg
ICAgICBfYXNzZXJ0KGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAwKS5sZW5ndGggPD0g
Y2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDAuMSkubGVuZ3RoLCAiY2FudmFzLnRvRGF0
YVVSTCgnaW1hZ2UvanBlZycsIDApLmxlbmd0aCA8PSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9q
cGVnJywgMC4xKS5sZW5ndGgiKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBfYWRk
VGVzdCh0ZXN0VG9EYXRhVVJMKTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAg
IDxjYW52YXMgaWQ9ImMiIHdpZHRoPSIxMDAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorICAgIDxw
IGlkPSJkIj48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVn
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1NyBAQAorZnVuY3Rpb24gX3ZhbFRvU3RyaW5n
KHZhbCkKK3sKKwlpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBudWxsKQorCQlyZXR1
cm4gJ1snICsgdHlwZW9mKHZhbCkgKyAnXSc7CisJcmV0dXJuIHZhbC50b1N0cmluZygpICsgJ1sn
ICsgdHlwZW9mKHZhbCkgKyAnXSc7Cit9CisKK3ZhciBfaGV4MmRlY190YWJsZSA9IHsKKwkwOjAs
IDE6MSwgMjoyLCAzOjMsIDQ6NCwgNTo1LCA2OjYsIDc6NywgODo4LCA5OjksCisJYToxMCwgYjox
MSwgYzoxMiwgZDoxMywgZToxNCwgZjoxNSwKKwlBOjEwLCBCOjExLCBDOjEyLCBEOjEzLCBFOjE0
LCBGOjE1Cit9OworZnVuY3Rpb24gX2hleDJkZWMoaGV4KQoreworCXJldHVybiBfaGV4MmRlY190
YWJsZVtoZXguY2hhckF0KDApXSoxNiArIF9oZXgyZGVjX3RhYmxlW2hleC5jaGFyQXQoMSldOwor
fQorCit2YXIgX2ZhaWxlZCA9IGZhbHNlOwordmFyIF9hc3NlcnRlZCA9IGZhbHNlOworZnVuY3Rp
b24gX3dhcm4odGV4dCkKK3sKKwlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZCcpLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJykpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKHRleHQpKTsKK30KK2Z1bmN0aW9uIF9mYWlsKHRleHQpCit7CisJX3dhcm4o
dGV4dCk7CisJX2ZhaWxlZCA9IHRydWU7Cit9CisKK2Z1bmN0aW9uIF9hc3NlcnQoY29uZCwgdGV4
dCkKK3sKKwlfYXNzZXJ0ZWQgPSB0cnVlOworCWlmICghIGNvbmQpCisJCV9mYWlsKCdGYWlsZWQg
YXNzZXJ0aW9uOiAnICsgdGV4dCk7Cit9CisKK2Z1bmN0aW9uIF9hc3NlcnRTYW1lKGEsIGIsIHRl
eHRfYSwgdGV4dF9iKQoreworCV9hc3NlcnRlZCA9IHRydWU7CisJaWYgKGEgIT09IGIpCisJCV9m
YWlsKCdGYWlsZWQgYXNzZXJ0aW9uICcgKyB0ZXh0X2EgKyAnID09PSAnICsgdGV4dF9iICsKKwkJ
CQknIChnb3QgJyArIF92YWxUb1N0cmluZyhhKSArICcsIGV4cGVjdGVkICcgKyBfdmFsVG9TdHJp
bmcoYikgKyAnKScpOworfQorCitmdW5jdGlvbiBfYXNzZXJ0RGlmZmVyZW50KGEsIGIsIHRleHRf
YSwgdGV4dF9iKQoreworCV9hc3NlcnRlZCA9IHRydWU7CisJaWYgKGEgPT09IGIpCisJCV9mYWls
KCdGYWlsZWQgYXNzZXJ0aW9uICcgKyB0ZXh0X2EgKyAnICE9PSAnICsgdGV4dF9iICsKKwkJCQkn
IChnb3QgJyArIF92YWxUb1N0cmluZyhhKSArICcsIGV4cGVjdGVkIG5vdCAnICsgX3ZhbFRvU3Ry
aW5nKGIpICsgJyknKTsKK30KKworZnVuY3Rpb24gX2Fzc2VydEVxdWFsKGEsIGIsIHRleHRfYSwg
dGV4dF9iKQoreworCV9hc3NlcnRlZCA9IHRydWU7CisJaWYgKGEgIT0gYikKKwkJX2ZhaWwoJ0Zh
aWxlZCBhc3NlcnRpb24gJyArIHRleHRfYSArICcgPT0gJyArIHRleHRfYiArCisJCQkJJyAoZ290
ICcgKyBfdmFsVG9TdHJpbmcoYSkgKyAnLCBleHBlY3RlZCAnICsgX3ZhbFRvU3RyaW5nKGIpICsg
JyknKTsKK30KKworZnVuY3Rpb24gX2Fzc2VydE1hdGNoKGEsIGIsIHRleHRfYSwgdGV4dF9iKQor
eworCV9hc3NlcnRlZCA9IHRydWU7CisJaWYgKCEgYS5tYXRjaChiKSkKKwkJX2ZhaWwoJ0ZhaWxl
ZCBhc3NlcnRpb24gJyArIHRleHRfYSArICcgbWF0Y2hlcyAnICsgdGV4dF9iICsKKwkJCQknIChn
b3QgJyArIF92YWxUb1N0cmluZyhhKSArICcpJyk7Cit9CisKKwordmFyIF9tYW51YWxfY2hlY2sg
PSBmYWxzZTsKKworZnVuY3Rpb24gX3JlcXVpcmVNYW51YWxDaGVjaygpCit7CisJX21hbnVhbF9j
aGVjayA9IHRydWU7Cit9CisKK2Z1bmN0aW9uIF9jcmFzaCgpCit7CisJX2ZhaWwoJ0Fib3J0ZWQg
ZHVlIHRvIHByZWRpY3RlZCBjcmFzaCcpOworfQorCit2YXIgX2dldEltYWdlRGF0YUNhbGlicmF0
ZWQgPSBmYWxzZTsKK3ZhciBfZ2V0SW1hZ2VEYXRhSXNQcmVtdWwsIF9nZXRJbWFnZURhdGFJc0JH
UkE7CisKK2Z1bmN0aW9uIF9nZXRQaXhlbChjYW52YXMsIHgseSkKK3sKKwl2YXIgY3R4ID0gY2Fu
dmFzLmdldENvbnRleHQoJzJkJyk7CisJaWYgKGN0eCAmJiB0eXBlb2YoY3R4LmdldEltYWdlRGF0
YSkgIT0gJ3VuZGVmaW5lZCcpCisJeworCQl0cnkgeworCQkJdmFyIGltZ2RhdGEgPSBjdHguZ2V0
SW1hZ2VEYXRhKHgsIHksIDEsIDEpOworCQl9IGNhdGNoIChlKSB7CisJCQkvLyBwcm9iYWJseSBh
IHNlY3VyaXR5IGV4Y2VwdGlvbiBjYXVzZWQgYnkgaGF2aW5nIGRyYXduCisJCQkvLyBkYXRhOiBV
UkxzIG9udG8gdGhlIGNhbnZhcworCQkJaW1nZGF0YSA9IG51bGw7CisJCX0KKwkJaWYgKGltZ2Rh
dGEpCisJCXsKKwkJCS8vIFdvcmsgYXJvdW5kIGdldEltYWdlRGF0YSBidWdzLCBzaW5jZSB3ZSB3
YW50IHRoZSBvdGhlciB0ZXN0cyB0bworCQkJLy8gY2Fycnkgb24gd29ya2luZyBhcyB3ZWxsIGFz
IHBvc3NpYmxlCisJCQlpZiAoISBfZ2V0SW1hZ2VEYXRhQ2FsaWJyYXRlZCkKKwkJCXsKKwkJCQl2
YXIgYzIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsKKwkJCQljMi53aWR0aCA9
IGMyLmhlaWdodCA9IDE7CisJCQkJdmFyIGN0eDIgPSBjMi5nZXRDb250ZXh0KCcyZCcpOworCQkJ
CWN0eDIuZmlsbFN0eWxlID0gJ3JnYmEoMCwgMjU1LCAyNTUsIDAuNSknOworCQkJCWN0eDIuZmls
bFJlY3QoMCwgMCwgMSwgMSk7CisJCQkJdmFyIGRhdGEyID0gY3R4Mi5nZXRJbWFnZURhdGEoMCwg
MCwgMSwgMSkuZGF0YTsKKworCQkJCS8vIEZpcmVmb3ggcmV0dXJucyBwcmVtdWx0aXBsaWVkIGFs
cGhhCisKKwkJCQlpZiAoZGF0YTJbMV0gPiAxMDAgJiYgZGF0YTJbMV0gPCAxNTApCisJCQkJCV9n
ZXRJbWFnZURhdGFJc1ByZW11bCA9IHRydWU7CisJCQkJZWxzZQorCQkJCQlfZ2V0SW1hZ2VEYXRh
SXNQcmVtdWwgPSBmYWxzZTsKKworCQkJCS8vIE9wZXJhIE1pbmkgNCBCZXRhIHJldHVybnMgQkdS
QSBpbnN0ZWFkIG9mIFJHQkEKKworCQkJCWlmIChkYXRhMlswXSA+IDI1MCAmJiBkYXRhMlsyXSA8
IDUpCisJCQkJCV9nZXRJbWFnZURhdGFJc0JHUkEgPSB0cnVlOworCQkJCWVsc2UKKwkJCQkJX2dl
dEltYWdlRGF0YUlzQkdSQSA9IGZhbHNlOworCisJCQkJX2dldEltYWdlRGF0YUNhbGlicmF0ZWQg
PSB0cnVlOworCQkJfQorCisJCQkvLyBVbmRvIHRoZSBCR1JBIGZsaXBwaW5nCisJCQl2YXIgcmdi
YSA9IChfZ2V0SW1hZ2VEYXRhSXNCR1JBCisJCQkJPyBbIGltZ2RhdGEuZGF0YVsyXSwgaW1nZGF0
YS5kYXRhWzFdLCBpbWdkYXRhLmRhdGFbMF0sIGltZ2RhdGEuZGF0YVszXSBdCisJCQkJOiBbIGlt
Z2RhdGEuZGF0YVswXSwgaW1nZGF0YS5kYXRhWzFdLCBpbWdkYXRhLmRhdGFbMl0sIGltZ2RhdGEu
ZGF0YVszXSBdKTsKKworCQkJaWYgKCEgX2dldEltYWdlRGF0YUlzUHJlbXVsKQorCQkJCXJldHVy
biByZ2JhOworCisJCQkvLyBVbmRvIHRoZSBwcmVtdWx0aXBseWluZworCQkJaWYgKHJnYmFbM10g
PT0gMCkKKwkJCQlyZXR1cm4gWyAwLCAwLCAwLCAwIF07CisJCQllbHNlCisJCQl7CisJCQkJdmFy
IGEgPSByZ2JhWzNdIC8gMjU1OworCQkJCXJldHVybiBbCisJCQkJCU1hdGgucm91bmQocmdiYVsw
XS9hKSwKKwkJCQkJTWF0aC5yb3VuZChyZ2JhWzFdL2EpLAorCQkJCQlNYXRoLnJvdW5kKHJnYmFb
Ml0vYSksCisJCQkJCXJnYmFbM10KKwkJCQldOworCQkJfQorCQl9CisJfQorCisJdHJ5IHsgY3R4
ID0gY2FudmFzLmdldENvbnRleHQoJ29wZXJhLTJkZ2FtZScpOyB9IGNhdGNoIChlKSB7IC8qIEZp
cmVmb3ggdGhyb3dzICovIH0KKwlpZiAoY3R4ICYmIHR5cGVvZihjdHguZ2V0UGl4ZWwpICE9ICd1
bmRlZmluZWQnKQorCXsKKwkJdHJ5IHsKKwkJCXZhciBjID0gY3R4LmdldFBpeGVsKHgsIHkpOwor
CQl9IGNhdGNoIChlKSB7CisJCQkvLyBwcm9iYWJseSBhIHNlY3VyaXR5IGV4Y2VwdGlvbiBjYXVz
ZWQgYnkgaGF2aW5nIGRyYXduCisJCQkvLyBkYXRhOiBVUkxzIG9udG8gdGhlIGNhbnZhcworCQkJ
YyA9IG51bGw7CisJCX0KKwkJaWYgKGMpCisJCXsKKwkJCXZhciBtYXRjaGVzID0gL15yZ2JhXCgo
XGQrKSwgKFxkKyksIChcZCspLCAoW1xkXC5dKylcKSQvLmV4ZWMoYyk7CisJCQlpZiAobWF0Y2hl
cykKKwkJCQlyZXR1cm4gWyBtYXRjaGVzWzFdLCBtYXRjaGVzWzJdLCBtYXRjaGVzWzNdLCBNYXRo
LnJvdW5kKG1hdGNoZXNbNF0qMjU1KSBdOworCQkJbWF0Y2hlcyA9IC9eIyguLikoLi4pKC4uKSQv
LmV4ZWMoYyk7CisJCQlpZiAobWF0Y2hlcykKKwkJCQlyZXR1cm4gWyBfaGV4MmRlYyhtYXRjaGVz
WzFdKSwgX2hleDJkZWMobWF0Y2hlc1syXSksIF9oZXgyZGVjKG1hdGNoZXNbM10pLCAyNTUgXTsK
KwkJfQorCX0KKwkvL193YXJuKCIoQ2FuJ3QgdGVzdCBwaXhlbCB2YWx1ZSkiKTsKKwlfbWFudWFs
X2NoZWNrID0gdHJ1ZTsKKwlyZXR1cm4gdW5kZWZpbmVkOworfQorCitmdW5jdGlvbiBfYXNzZXJ0
UGl4ZWwoY2FudmFzLCB4LHksIHIsZyxiLGEsIHBvcywgY29sb3VyKQoreworCV9hc3NlcnRlZCA9
IHRydWU7CisJdmFyIGMgPSBfZ2V0UGl4ZWwoY2FudmFzLCB4LHkpOworCWlmIChjICYmICEgKGNb
MF0gPT0gciAmJiBjWzFdID09IGcgJiYgY1syXSA9PSBiICYmIGNbM10gPT0gYSkpCisJCV9mYWls
KCdGYWlsZWQgYXNzZXJ0aW9uOiBnb3QgcGl4ZWwgWycgKyBjICsgJ10gYXQgKCcreCsnLCcreSsn
KSwgZXhwZWN0ZWQgWycrcisnLCcrZysnLCcrYisnLCcrYSsnXScpOworfQorCitmdW5jdGlvbiBf
YXNzZXJ0UGl4ZWxBcHByb3goY2FudmFzLCB4LHksIHIsZyxiLGEsIHBvcywgY29sb3VyLCB0b2xl
cmFuY2UpCit7CisJX2Fzc2VydGVkID0gdHJ1ZTsKKwl2YXIgYyA9IF9nZXRQaXhlbChjYW52YXMs
IHgseSk7CisJaWYgKGMpCisJeworCQl2YXIgZGlmZiA9IE1hdGgubWF4KE1hdGguYWJzKGNbMF0t
ciksIE1hdGguYWJzKGNbMV0tZyksIE1hdGguYWJzKGNbMl0tYiksIE1hdGguYWJzKGNbM10tYSkp
OworCQlpZiAoZGlmZiA+IHRvbGVyYW5jZSkKKwkJCV9mYWlsKCdGYWlsZWQgYXNzZXJ0aW9uOiBn
b3QgcGl4ZWwgWycgKyBjICsgJ10gYXQgKCcreCsnLCcreSsnKSwgZXhwZWN0ZWQgWycrcisnLCcr
ZysnLCcrYisnLCcrYSsnXSArLy0gJyt0b2xlcmFuY2UpOworCX0KK30KKworZnVuY3Rpb24gX2Fk
ZFRlc3QodGVzdCkKK3sKKwl2YXIgZGVmZXJyZWQgPSBmYWxzZTsKKwl3aW5kb3cuZGVmZXJUZXN0
ID0gZnVuY3Rpb24gKCkgeyBkZWZlcnJlZCA9IHRydWU7IH07CisJZnVuY3Rpb24gZW5kVGVzdCgp
CisJeworCQlpZiAoX2ZhaWxlZCkgLy8gdGVzdCBmYWlsZWQKKwkJeworCQkJZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50LmNsYXNzTmFtZSArPSAnIGZhaWwnOworCQkJd2luZG93Ll90ZXN0U3RhdHVz
ID0gWydmYWlsJywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2QnKS5pbm5lckhUTUxdOworCQl9
CisJCWVsc2UgaWYgKF9tYW51YWxfY2hlY2sgfHwgIV9hc3NlcnRlZCkKKwkJeyAvLyB0ZXN0IGNh
c2UgZXhwbGljaXRseSBhc2tlZCBmb3IgYSBtYW51YWwgY2hlY2ssIG9yIG5vIGF1dG9tYXRpYyBh
c3NlcnRpb25zIHdlcmUgcGVyZm9ybWVkCisJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZCcp
LmlubmVySFRNTCArPSAnPGxpPkNhbm5vdCBhdXRvbWF0aWNhbGx5IHZlcmlmeSByZXN1bHQnOwor
CQkJZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTmFtZSArPSAnIG5lZWRzX2NoZWNrJzsK
KwkJCXdpbmRvdy5fdGVzdFN0YXR1cyA9IFsnY2hlY2snLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnZCcpLmlubmVySFRNTF07CisJCX0KKwkJZWxzZSAvLyB0ZXN0IHN1Y2NlZWRlZAorCQl7CisJ
CQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZCcpLmlubmVySFRNTCA9ICdQYXNzZWQnOworCQkJ
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTmFtZSArPSAnIHBhc3MnOworCQkJd2luZG93
Ll90ZXN0U3RhdHVzID0gWydwYXNzJywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2QnKS5pbm5l
ckhUTUxdOworCQl9CisJCWlmICh3aW5kb3cubm90aWZ5RW5kVGVzdCkKKwkJCW5vdGlmeUVuZFRl
c3QoKTsKKworCX0KKwl3aW5kb3cuZW5kVGVzdCA9IGVuZFRlc3Q7CisJd2luZG93LndyYXBGdW5j
dGlvbiA9IGZ1bmN0aW9uIChmKQorCXsKKwkJcmV0dXJuIGZ1bmN0aW9uKCkKKwkJeworCQkJdHJ5
CisJCQl7CisJCQkJZi5hcHBseShudWxsLCBhcmd1bWVudHMpOworCQkJfQorCQkJY2F0Y2ggKGUp
CisJCQl7CisJCQkJX2ZhaWwoJ0Fib3J0ZWQgd2l0aCBleGNlcHRpb246ICcgKyBlLm1lc3NhZ2Up
OworCQkJfQorCQkJZW5kVGVzdCgpOworCQl9CisJfQorCisJd2luZG93Lm9ubG9hZCA9IGZ1bmN0
aW9uICgpCisJeworCQl0cnkKKwkJeworCQkJdmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjJyk7CisJCQl2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7CisJCQl0
ZXN0KGNhbnZhcywgY3R4KTsKKwkJfQorCQljYXRjaCAoZSkKKwkJeworCQkJX2ZhaWwoJ0Fib3J0
ZWQgd2l0aCBleGNlcHRpb246ICcgKyBlLm1lc3NhZ2UpOworCQkJZGVmZXJyZWQgPSBmYWxzZTsg
Ly8gY2FuY2VsIGFueSBkZWZlcmVuY2UKKwkJfQorCisJCWlmICghIGRlZmVycmVkKQorCQkJZW5k
VGVzdCgpOworCX07Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53155</attachid>
            <date>2010-04-12 00:03:44 -0700</date>
            <delta_ts>2010-04-14 22:06:57 -0700</delta_ts>
            <desc>Proposed patch - try to satisfy build bot</desc>
            <filename>toDataURL-jpeg-quality-3.patch</filename>
            <type>text/plain</type>
            <size>37009</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDU3NDY5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDQt
MTEgIExlbyBZYW5nICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBjYW52YXMudG9EYXRhVVJM
KHR5cGUsIHF1YWxpdHksIC4uLikgdG8gbGV0IGl0IHN1cHBvcnQgcXVhbGl0eSBwYXJhbWV0ZXIu
IAorICAgICAgICBBbmQgaW1wbGVtZW50IGl0IGluIFF0IHByb3RpbmcuIAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzczMDQKKworICAgICAgICAqIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAg
ICogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5j
cHA6CisgICAgICAgICogV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHA6CisgICAgICAgICog
V2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5oOgorICAgICAgICAqIFdlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oOgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwOgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgICogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcDoKKyAgICAgICAg
KiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorCiAyMDEw
LTA0LTA5ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkIGNyYXNoIGZpeC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTc0NjkpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9i
aWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNSw3IEBACiAjaW5jbHVkZSAiV2ViR0xDb250
ZXh0QXR0cmlidXRlcy5oIgogI2VuZGlmCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTgxLDQg
KzgzLDIyIEBAIEpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dCgKICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoY2FudmFzLT5nZXRD
b250ZXh0KGNvbnRleHRJZCwgYXR0cnMuZ2V0KCkpKSk7CiB9CiAKK0pTVmFsdWUgSlNIVE1MQ2Fu
dmFzRWxlbWVudDo6dG9EYXRhVVJMKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKK3sKKyAgICBjb25zdCBVU3RyaW5nJiB0eXBlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmlu
ZWRPck51bGxDaGVjayhleGVjLCBhcmdzLmF0KDApKTsKKyAgICBkb3VibGUgcXVhbGl0eSA9IDEu
MDsKKyAgICBpZiAoYXJncy5zaXplKCkgPiAxKSB7CisgICAgICAgIEpTVmFsdWUgdiA9IGFyZ3Mu
YXQoMSk7CisgICAgICAgIGlmICh2LmlzTnVtYmVyKCkpCisgICAgICAgICAgICBxdWFsaXR5ID0g
di50b051bWJlcihleGVjKTsKKyAgICAgICAgaWYgKHF1YWxpdHkgPiAxLjAgfHwgcXVhbGl0eSA8
IDAuMCB8fCAhaXNmaW5pdGUocXVhbGl0eSkpCisgICAgICAgICAgICBxdWFsaXR5ID0gMS4wOwor
ICAgIH0KKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gc3RhdGljX2Nhc3Q8SFRNTENh
bnZhc0VsZW1lbnQqPihpbXBsKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIEpT
Qzo6SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZyhleGVjLCBjYW52YXMtPnRvRGF0YVVSTCh0eXBl
LCBxdWFsaXR5LCBlYykpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDU3NDY5KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENv
LiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCkBAIC0zNCw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ2FudmFzQ29udGV4dEF0dHJpYnV0
ZXMuaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRN
TENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUg
IldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNs
dWRlICJWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgpAQCAtNDIsNiArNDQsNyBAQAogI2lm
IEVOQUJMRSgzRF9DQU5WQVMpCiAjaW5jbHVkZSAiVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIK
ICNlbmRpZgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtODksNCArOTIsMjIgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTENhbnZh
c0VsZW1lbgogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEhUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkxDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQoreworICAgIGRvdWJsZSBxdWFsaXR5ID0gMS4wOworICAgIGlmIChh
cmdzLkxlbmd0aCgpID4gMSkgeworICAgICAgICBpZiAoYXJnc1sxXS0+SXNOdW1iZXIoKSkKKyAg
ICAgICAgICAgIHF1YWxpdHkgPSBhcmdzWzFdLT5OdW1iZXJWYWx1ZSgpOworICAgICAgICBpZiAo
cXVhbGl0eSA+IDEuMCB8fCBxdWFsaXR5IDwgMC4wIHx8ICFpc2Zpbml0ZShxdWFsaXR5KSkKKyAg
ICAgICAgICAgIHF1YWxpdHkgPSAxLjA7CisgICAgfQorICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFz
ID0gVjhIVE1MQ2FudmFzRWxlbWVudDo6dG9OYXRpdmUoaG9sZGVyKTsKKyAgICBTdHJpbmcgdHlw
ZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBTdHJpbmcgcmVzdWx0ID0gY2FudmFzLT50b0RhdGFVUkwodHlwZSwgcXVhbGl0eSwgZWMp
OworICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CisgICAgcmV0dXJuIHY4U3RyaW5n
T3JVbmRlZmluZWQocmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
Q2FudmFzU3VyZmFjZS5jcHAJKHJldmlzaW9uIDU3NDY5KQorKysgV2ViQ29yZS9kb20vQ2FudmFz
U3VyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2NSw3IEBA
IHZvaWQgQ2FudmFzU3VyZmFjZTo6c2V0U3VyZmFjZVNpemUoY29uc3QKICAgICBtX2ltYWdlQnVm
ZmVyLmNsZWFyKCk7CiB9CiAKLVN0cmluZyBDYW52YXNTdXJmYWNlOjp0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgQ2FudmFzU3VyZmFj
ZTo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSBxdWFsaXR5LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIW1fb3JpZ2luQ2xlYW4pIHsKICAgICAgICAgZWMg
PSBTRUNVUklUWV9FUlI7CkBAIC03OCw3ICs3OSw3IEBAIFN0cmluZyBDYW52YXNTdXJmYWNlOjp0
b0RhdGFVUkwoY29uc3QgU3QKICAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkgfHwgIU1JTUVUeXBl
UmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSkK
ICAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwoImltYWdlL3BuZyIpOwogCi0gICAg
cmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwobWltZVR5cGUpOworICAgIHJldHVybiBidWZmZXIo
KS0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5KTsKIH0KIAogdm9pZCBDYW52YXNTdXJmYWNl
Ojp3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmKQpJbmRleDogV2ViQ29yZS9kb20vQ2FudmFzU3Vy
ZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaAkocmV2aXNp
b24gNTc0NjkpCisrKyBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChC
ZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01OCw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBpbnQgd2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQogICAgIGludCBoZWlnaHQoKSBjb25zdCB7
IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KIAotICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFN0cmluZyB0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgZG91YmxlIHF1YWxpdHksIEV4Y2VwdGlvbkNvZGUmKTsK
IAogICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIApJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRsCShyZXZpc2lvbiA1NzQ2OSkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUg
KEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMzLDggQEAgbW9kdWxlIGh0bWwgewogICAgICAgICBh
dHRyaWJ1dGUgbG9uZyB3aWR0aDsKICAgICAgICAgYXR0cmlidXRlIGxvbmcgaGVpZ2h0OwogCi0g
ICAgICAgIERPTVN0cmluZyB0b0RhdGFVUkwoaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxUb051
bGxTdHJpbmddIERPTVN0cmluZyB0eXBlKQorICAgICAgICAvLyBIVE1MNSBkcmFmdCBzcGVjOiBE
T01TdHJpbmcgdG9EYXRhVVJMKERPTVN0cmluZyB0eXBlLCAuLi4pOworICAgICAgICBbQ3VzdG9t
XSBET01TdHJpbmcgdG9EYXRhVVJMKGluIFtDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3Ry
aW5nXSBET01TdHJpbmcgdHlwZSkKICAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwog
CiAjaWYgIWRlZmluZWQoTEFOR1VBR0VfT0JKRUNUSVZFX0MpIHx8ICFMQU5HVUFHRV9PQkpFQ1RJ
VkVfQwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkocmV2aXNp
b24gNTc0NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgyLDcgKzgzLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHB1dFVubXVsdGlwbGllZEltYWdl
RGF0YShJbWFnZURhdGEqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50KTsKICAgICAgICAgdm9pZCBwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKElt
YWdlRGF0YSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQpOwogCi0gICAgICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkgY29uc3Q7CisgICAgICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgZG91YmxlIHF1YWxpdHkgPSAxLjApIGNvbnN0OwogI2lmICFQTEFURk9STShDRykKICAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0oKTsgfQogICAgICAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoSW1hZ2VDb2xv
clNwYWNlIHNyY0NvbG9yU3BhY2UsIEltYWdlQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcAkocmV2aXNpb24gNTc0NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
IDx6ZWNrZUBzZWxmaXNoLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2Jp
bGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4Myw3ICsyODQsNyBAQCBzdGF0aWMgY2Fpcm9fc3RhdHVz
X3Qgd3JpdGVGdW5jdGlvbih2b2lkCiAgICAgcmV0dXJuIENBSVJPX1NUQVRVU19TVUNDRVNTOwog
fQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KSBjb25zdAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgZG91YmxlKSBjb25zdAogewogICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBjYWly
b19nZXRfdGFyZ2V0KGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGlmICghaW1h
Z2UpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHAJKHJldmlzaW9uIDU3NDY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjc1
LDcgKzI3Niw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21NSU0KICNl
bmRpZgogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKSBjb25zdAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgZG91YmxlKSBjb25zdAogewogICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwogCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJI
YWlrdS5jcHAJKHJldmlzaW9uIDU3NDY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21h
aWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28u
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNzYsNyArNzcsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1h
Z2VECiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJikgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
ICAgIHJldHVybiBTdHJpbmcoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
SW1hZ2VCdWZmZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkocmV2aXNpb24gNTc0NjkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYg
KzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNjUsOSArMjY2LDEwIEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFn
ZUQKIC8vIFdlIGdldCBhIG1pbWVUeXBlIGhlcmUgYnV0IFFJbWFnZVdyaXRlciBkb2VzIG5vdCBz
dXBwb3J0IG1pbWV0eXBlcyBidXQKIC8vIG9ubHkgZm9ybWF0cyAocG5nLCBnaWYsIGpwZWcuLi4s
IHhwbSkuIFNvIGFzc3VtZSB3ZSBnZXQgaW1hZ2UvIGFzIGltYWdlCiAvLyBtaW1ldHlwZXMgYW5k
IHRoZW4gcmVtb3ZlIHRoZSBpbWFnZS8gdG8gZ2V0IHRoZSBRdCBmb3JtYXQuCi1TdHJpbmcgSW1h
Z2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdAorU3RyaW5n
IEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgZG91YmxlIHF1
YWxpdHkpIGNvbnN0CiB7CiAgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVk
SW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisgICAgQVNTRVJUKDAuMCA8PSBx
dWFsaXR5ICYmIHF1YWxpdHkgPD0gMS4wKTsKIAogICAgIGlmICghbWltZVR5cGUuc3RhcnRzV2l0
aCgiaW1hZ2UvIikpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKQEAgLTI3Nyw3ICsyNzksNyBA
QCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpCiAgICAgUUJ1ZmZlciBi
dWZmZXIoJmRhdGEpOwogICAgIGJ1ZmZlci5vcGVuKFFCdWZmZXI6OldyaXRlT25seSk7CiAKLSAg
ICBpZiAoIW1fZGF0YS5tX3BpeG1hcC5zYXZlKCZidWZmZXIsIG1pbWVUeXBlLnN1YnN0cmluZyhz
aXplb2YgImltYWdlIikudXRmOCgpLmRhdGEoKSkpCisgICAgaWYgKCFtX2RhdGEubV9waXhtYXAu
c2F2ZSgmYnVmZmVyLCBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpLnV0ZjgoKS5k
YXRhKCksIHF1YWxpdHkqMTAwKzAuNSkpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKIAogICAg
IGJ1ZmZlci5jbG9zZSgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0lt
YWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9uIDU3NDY5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA4LCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVp
amluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIAogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCkBAIC0yNjAsNyArMjYxLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0
UHJlbXVsdGlwbGllZEltYWdlRAogICAgIHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3Vy
Y2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkt
PmJpdG1hcCgpLCBtX3NpemUpOwogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChj
b25zdCBTdHJpbmcmKSBjb25zdAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiwgZG91YmxlKSBjb25zdAogewogICAgIC8vIEVuY29kZSB0aGUgaW1hZ2UgaW50byBh
IHZlY3Rvci4KICAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gcG5nRW5jb2RlZERhdGE7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJX
aW5jZS5jcHAJKHJldmlzaW9uIDU3NDY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBD
by4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIx
NSw3ICsyMTYsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VECiAg
ICAgcHV0SW1hZ2VEYXRhPHRydWU+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2Rh
dGEubV9iaXRtYXAuZ2V0KCkpOwogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFV
UkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgZG91YmxlKSBjb25zdAogewogICAgIGlmICghbV9k
YXRhLm1fYml0bWFwLT5ieXRlcygpKQogICAgICAgICByZXR1cm4gImRhdGE6LCI7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHJldmlz
aW9uIDU3NDY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgS2V2aW4gT2xsaXZpZXIgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzUsNyArNzYsNyBA
QCB2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VECiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JikgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIGRv
dWJsZSkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBTdHJpbmco
KTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU3NDY5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMDQtMTEgIExlbyBZYW5nICA8bGVv
LnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEZpeCBjYW52YXMudG9EYXRhVVJMKHR5cGUsIHF1YWxpdHksIC4u
LikgdG8gbGV0IGl0IHN1cHBvcnQgcXVhbGl0eSBwYXJhbWV0ZXIuIAorICAgICAgICBBbmQgaW1w
bGVtZW50IGl0IGluIFF0IHByb3RpbmcuIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzczMDQKKworICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvY2Fu
dmFzL3RvRGF0YVVSTC1qcGVnLWFscGhhLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEuaHRtbDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcHJpbWFy
eWNvbG9ycy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3Qv
Y2FudmFzL3RvRGF0YVVSTC1qcGVnLXByaW1hcnljb2xvcnMuaHRtbDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3Rv
RGF0YVVSTC1qcGVnLXF1YWxpdHktYmFzaWMuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1ub3RudW1iZXItZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFV
UkwtanBlZy1xdWFsaXR5LW5vdG51bWJlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW91dHNpZGVyYW5nZS1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0
YVVSTC1qcGVnLXF1YWxpdHktb3V0c2lkZXJhbmdlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLmpzOiBBZGRlZC4KKwogMjAxMC0w
NC0xMSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE5vdCByZXZp
ZXdlZCwgbGF5b3V0IHRlc3QgZml4IGZvciBRVCBib3RzLgpJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVS
TC1qcGVnLWFscGhhLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLWFscGhhLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorUGFzc2VkCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1hbHBoYS5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLWFs
cGhhLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2Nh
bnZhcy90b0RhdGFVUkwtanBlZy1hbHBoYS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2
IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSJ0b0RhdGFVUkwtanBlZy5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KworICAgICAgICB3aW5kb3cubm90aWZ5RW5kVGVzdCA9IGZ1bmN0aW9uICgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9OworCisg
ICAgICAgIGZ1bmN0aW9uIHRlc3RUb0RhdGFVUkwoY2FudmFzLCBjdHgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAncmdiYSgxMjgsIDI1NSwgMTI4LCAwLjUpJzsKKyAg
ICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDUwKTsKKyAgICAgICAgICAgIGN0eC5n
bG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tb3Zlcic7IC8vIHNob3VsZCBi
ZSBpZ25vcmVkIGJ5IHRvRGF0YVVSTAorICAgICAgICAgICAgdmFyIGRhdGEgPSBjYW52YXMudG9E
YXRhVVJMKCdpbWFnZS9qcGVnJyk7CisgICAgICAgICAgICBjdHguZ2xvYmFsQ29tcG9zaXRlT3Bl
cmF0aW9uID0gJ3NvdXJjZS1vdmVyJzsKKyAgICAgICAgICAgIGlmICghZGF0YS5tYXRjaCgvXmRh
dGE6aW1hZ2VcL2pwZWdbOyxdLykpIHsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0KHRydWUsICJ0
cnVlIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5
bGUgPSAnI2YwMCc7CisgICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgNTAp
OworICAgICAgICAgICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTsKKyAgICAgICAgICAgICAg
ICBkZWZlclRlc3QoKTsKKyAgICAgICAgICAgICAgICBpbWcub25sb2FkID0gd3JhcEZ1bmN0aW9u
KGZ1bmN0aW9uICgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjdHgu
ZHJhd0ltYWdlKGltZywgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBfYXNzZXJ0UGl4ZWxBcHByb3goY2FudmFzLCA1MCwyNSwgNjMsMTI3LDYzLDI1NSwg
IjUwLDI1IiwgIjYzLDEyNyw2MywyNTUiLCA4KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICBpbWcuc3JjID0gZGF0YTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
X2FkZFRlc3QodGVzdFRvRGF0YVVSTCk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KyAgICA8Y2FudmFzIGlkPSJjIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKyAg
ICA8cCBpZD0iZCI+PC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcHJpbWFyeWNvbG9ycy1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMv
dG9EYXRhVVJMLWpwZWctcHJpbWFyeWNvbG9ycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1wcmlt
YXJ5Y29sb3JzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorUGFzc2Vk
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBl
Zy1wcmltYXJ5Y29sb3JzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcHJpbWFyeWNvbG9ycy5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpw
ZWctcHJpbWFyeWNvbG9ycy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACis8aHRt
bD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSJ0b0RhdGFVUkwtanBlZy5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAg
ICB3aW5kb3cubm90aWZ5RW5kVGVzdCA9IGZ1bmN0aW9uICgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9OworCisgICAgICAgIGZ1
bmN0aW9uIHRlc3RUb0RhdGFVUkwoY2FudmFzLCBjdHgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGN0eC5maWxsU3R5bGUgPSAnI2ZmMCc7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwg
MjUsIDQwKTsKKyAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAnIzBmZic7CisgICAgICAgICAg
ICBjdHguZmlsbFJlY3QoMjUsIDAsIDUwLCA0MCk7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxl
ID0gJyMwMGYnOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDc1LCAwLCAyNSwgNDApOworICAg
ICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjZmZmJzsKKyAgICAgICAgICAgIGN0eC5maWxsUmVj
dCgwLCA0MCwgMTAwLCAxMCk7CisgICAgICAgICAgICB2YXIgZGF0YSA9IGNhbnZhcy50b0RhdGFV
UkwoJ2ltYWdlL2pwZWcnKTsgLy8gaXQgaXMgb2theSBpZiB0aGlzIHJldHVybnMgYSBQTkcgaW5z
dGVhZAorICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjZjAwJzsKKyAgICAgICAgICAgIGN0
eC5maWxsUmVjdCgwLCAwLCAxMDAsIDUwKTsKKyAgICAgICAgICAgIHZhciBpbWcgPSBuZXcgSW1h
Z2UoKTsKKyAgICAgICAgICAgIGRlZmVyVGVzdCgpOworCisgICAgICAgICAgICBpbWcub25sb2Fk
ID0gd3JhcEZ1bmN0aW9uKGZ1bmN0aW9uICgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApOworICAgICAgICAgICAgICAgIF9hc3NlcnRQaXhl
bEFwcHJveChjYW52YXMsIDEyLDIwLCAyNTUsMjU1LDAsMjU1LCAiMTIsMjAiLCAiMjU1LDI1NSww
LDI1NSIsIDgpOworICAgICAgICAgICAgICAgIF9hc3NlcnRQaXhlbEFwcHJveChjYW52YXMsIDUw
LDIwLCAwLDI1NSwyNTUsMjU1LCAiNTAsMjAiLCAiMCwyNTUsMjU1LDI1NSIsIDgpOworICAgICAg
ICAgICAgICAgIF9hc3NlcnRQaXhlbEFwcHJveChjYW52YXMsIDg3LDIwLCAwLDAsMjU1LDI1NSwg
Ijg3LDIwIiwgIjAsMCwyNTUsMjU1IiwgOCk7CisgICAgICAgICAgICAgICAgX2Fzc2VydFBpeGVs
QXBwcm94KGNhbnZhcywgNTAsNDUsIDI1NSwyNTUsMjU1LDI1NSwgIjUwLDQ1IiwgIjI1NSwyNTUs
MjU1LDI1NSIsIDgpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGltZy5zcmMgPSBk
YXRhOworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAg
IH0KKyAgICAgICAgX2FkZFRlc3QodGVzdFRvRGF0YVVSTCk7CisgICAgPC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKyAgICA8Y2FudmFzIGlkPSJjIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUwIj48
L2NhbnZhcz4KKyAgICA8cCBpZD0iZCI+PC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1i
YXNpYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
ZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFV
UkwtanBlZy1xdWFsaXR5LWJhc2ljLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSBAQAorUGFzc2VkCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90
b0RhdGFVUkwtanBlZy1xdWFsaXR5LWJhc2ljLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMv
dG9EYXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU5IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSJ0b0RhdGFVUkwtanBlZy5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKworICAgICAgICB3aW5kb3cubm90aWZ5RW5kVGVzdCA9IGZ1bmN0aW9uICgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9Owor
CisgICAgICAgIGZ1bmN0aW9uIHRlc3RUb0RhdGFVUkwoY2FudmFzLCBjdHgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAnIzAwZic7CisgICAgICAgICAgICBjdHguZmls
bFJlY3QoMCwgMCwgMTAwLCA1MCk7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyMwZmYn
OworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDMsIDEwMCwgMSk7CisgICAgICAgICAgICAv
LyBDaGVjayBmb3IgSlBFRyBzdXBwb3J0IGZpcnN0CisgICAgICAgICAgICB2YXIgZGF0YSA9IGNh
bnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKTsKKyAgICAgICAgICAgIGlmICghZGF0YS5tYXRj
aCgvXmRhdGE6aW1hZ2VcL2pwZWdbOyxdLykpIHsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0KHRy
dWUsICJ0cnVlIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBk
YXRhX2hpID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDAuOTkpOworICAgICAgICAg
ICAgICAgIHZhciBkYXRhX2xvID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDAuMDEp
OworICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAnI2YwMCc7CisgICAgICAgICAgICAg
ICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgNTApOworICAgICAgICAgICAgICAgIGRlZmVyVGVz
dCgpOworICAgICAgICAgICAgICAgIHZhciBpbWdfaGkgPSBuZXcgSW1hZ2UoKTsKKyAgICAgICAg
ICAgICAgICBpbWdfaGkub25sb2FkID0gZnVuY3Rpb24gKCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBpbWdfbG8gPSBuZXcgSW1hZ2UoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaW1nX2xvLm9ubG9hZCA9IHdyYXBGdW5jdGlvbihmdW5jdGlvbiAoKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKGlt
Z19oaSwgMCwgMCwgNTAsIDUwLCAwLCAwLCA1MCwgNTApOworICAgICAgICAgICAgICAgICAgICAg
ICAgY3R4LmRyYXdJbWFnZShpbWdfbG8sIDAsIDAsIDUwLCA1MCwgNTAsIDAsIDUwLCA1MCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIF9hc3NlcnQo
ZGF0YV9oaS5sZW5ndGggPiBkYXRhX2xvLmxlbmd0aCwgImRhdGFfaGkubGVuZ3RoID4gZGF0YV9s
by5sZW5ndGgiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9hc3NlcnRQaXhlbEFwcHJveChj
YW52YXMsIDI1LDI1LCAwLDAsMjU1LDI1NSwgIjI1LDI1IiwgIjAsMCwyNTUsMjU1IiwgMTIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgX2Fzc2VydFBpeGVsQXBwcm94KGNhbnZhcywgNzUsMjUs
IDAsMCwyNTUsMjU1LCAiNzUsMjUiLCAiMCwwLDI1NSwyNTUiLCAxMik7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBpbWdfbG8uc3JjID0gZGF0YV9sbzsKKyAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGltZ19oaS5zcmMgPSBkYXRhX2hpOwor
CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgX2FkZFRlc3QodGVzdFRvRGF0YVVSTCk7
CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8Y2FudmFzIGlkPSJjIiB3aWR0
aD0iMTAwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKyAgICA8cCBpZD0iZCI+PC9wPgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9E
YXRhVVJMLWpwZWctcXVhbGl0eS1ub3RudW1iZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxp
dHktbm90bnVtYmVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktbm90bnVtYmVyLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorUGFzc2VkCkluZGV4OiBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW5v
dG51bWJlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3Qv
Y2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktbm90bnVtYmVyLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1x
dWFsaXR5LW5vdG51bWJlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACis8aHRt
bD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSJ0b0RhdGFVUkwtanBlZy5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAg
ICB3aW5kb3cubm90aWZ5RW5kVGVzdCA9IGZ1bmN0aW9uICgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9OworCisgICAgICAgIGZ1
bmN0aW9uIHRlc3RUb0RhdGFVUkwoY2FudmFzLCBjdHgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGN0eC5maWxsU3R5bGUgPSAnIzAwZic7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwg
MTAwLCA1MCk7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyMwZmYnOworICAgICAgICAg
ICAgY3R4LmZpbGxSZWN0KDAsIDMsIDEwMCwgMSk7CisgICAgICAgICAgICAvLyBDaGVjayBmb3Ig
SlBFRyBzdXBwb3J0IGZpcnN0CisgICAgICAgICAgICB2YXIgZGF0YSA9IGNhbnZhcy50b0RhdGFV
UkwoJ2ltYWdlL2pwZWcnKTsKKyAgICAgICAgICAgIGlmICghZGF0YS5tYXRjaCgvXmRhdGE6aW1h
Z2VcL2pwZWdbOyxdLykpIHsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0KHRydWUsICJ0cnVlIik7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIF9hc3NlcnRTYW1lKGNhbnZh
cy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAnYm9ndXMnKSwgZGF0YSwgImNhbnZhcy50b0RhdGFV
UkwoJ2ltYWdlL2pwZWcnLCAnYm9ndXMnKSIsICJkYXRhIik7CisgICAgICAgICAgICAgICAgX2Fz
c2VydFNhbWUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHt9KSwgZGF0YSwgImNhbnZh
cy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCB7fSkiLCAiZGF0YSIpOworICAgICAgICAgICAgICAg
IF9hc3NlcnRTYW1lKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCBudWxsKSwgZGF0YSwg
ImNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCBudWxsKSIsICJkYXRhIik7CisgICAgICAg
ICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHVuZGVm
aW5lZCksIGRhdGEsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgdW5kZWZpbmVkKSIs
ICJkYXRhIik7CisgICAgICAgICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFzLnRvRGF0YVVSTCgn
aW1hZ2UvanBlZycsIHRydWUpLCBkYXRhLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycs
IHRydWUpIiwgImRhdGEiKTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9E
YXRhVVJMKCdpbWFnZS9qcGVnJywgJzAuMDEnKSwgZGF0YSwgImNhbnZhcy50b0RhdGFVUkwoJ2lt
YWdlL2pwZWcnLCAnMC4wMScpIiwgImRhdGEiKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIF9hZGRUZXN0KHRlc3RUb0RhdGFVUkwpOworICAgIDwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+CisgICAgPGNhbnZhcyBpZD0iYyIgd2lkdGg9IjEwMCIgaGVpZ2h0
PSI1MCI+PC9jYW52YXM+CisgICAgPHAgaWQ9ImQiPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1
YWxpdHktb3V0c2lkZXJhbmdlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW91dHNpZGVy
YW5nZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9x
dC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW91dHNpZGVyYW5nZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1Bhc3NlZApJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1vdXRzaWRl
cmFuZ2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2Nh
bnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW91dHNpZGVyYW5nZS5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWct
cXVhbGl0eS1vdXRzaWRlcmFuZ2UuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAor
PGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0idG9EYXRhVVJMLWpwZWcuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAg
ICAgICAgd2luZG93Lm5vdGlmeUVuZFRlc3QgPSBmdW5jdGlvbiAoKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBmdW5jdGlvbiB0ZXN0VG9EYXRhVVJMKGNhbnZhcywgY3R4KQorICAgICAgICB7CisgICAgICAg
ICAgICBjdHguZmlsbFN0eWxlID0gJyMwMGYnOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAs
IDAsIDEwMCwgNTApOworICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjMGZmJzsKKyAgICAg
ICAgICAgIGN0eC5maWxsUmVjdCgwLCAzLCAxMDAsIDEpOworICAgICAgICAgICAgLy8gQ2hlY2sg
Zm9yIEpQRUcgc3VwcG9ydCBmaXJzdAorICAgICAgICAgICAgdmFyIGRhdGEgPSBjYW52YXMudG9E
YXRhVVJMKCdpbWFnZS9qcGVnJyk7CisgICAgICAgICAgICBpZiAoIWRhdGEubWF0Y2goL15kYXRh
OmltYWdlXC9qcGVnWzssXS8pKSB7CisgICAgICAgICAgICAgICAgX2Fzc2VydCh0cnVlLCAidHJ1
ZSIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShj
YW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMTApLCBkYXRhLCAiY2FudmFzLnRvRGF0YVVS
TCgnaW1hZ2UvanBlZycsIDEwKSIsICJkYXRhIik7CisgICAgICAgICAgICAgICAgX2Fzc2VydFNh
bWUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIC0xMCksIGRhdGEsICJjYW52YXMudG9E
YXRhVVJMKCdpbWFnZS9qcGVnJywgLTEwKSIsICJkYXRhIik7CisgICAgICAgICAgICAgICAgX2Fz
c2VydFNhbWUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEuMDEpLCBkYXRhLCAiY2Fu
dmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEuMDEpIiwgImRhdGEiKTsKKyAgICAgICAgICAg
ICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgLTAuMDEpLCBk
YXRhLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIC0wLjAxKSIsICJkYXRhIik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBfYXNzZXJ0KGNhbnZhcy50b0RhdGFVUkwoJ2lt
YWdlL2pwZWcnLCAxKS5sZW5ndGggPj0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDAu
OSkubGVuZ3RoLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEpLmxlbmd0aCA+PSBj
YW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMC45KS5sZW5ndGgiKTsKKyAgICAgICAgICAg
ICAgICBfYXNzZXJ0KGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAwKS5sZW5ndGggPD0g
Y2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDAuMSkubGVuZ3RoLCAiY2FudmFzLnRvRGF0
YVVSTCgnaW1hZ2UvanBlZycsIDApLmxlbmd0aCA8PSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9q
cGVnJywgMC4xKS5sZW5ndGgiKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBfYWRk
VGVzdCh0ZXN0VG9EYXRhVVJMKTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAg
IDxjYW52YXMgaWQ9ImMiIHdpZHRoPSIxMDAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorICAgIDxw
IGlkPSJkIj48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVn
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1NyBAQAorZnVuY3Rpb24gX3ZhbFRvU3RyaW5n
KHZhbCkKK3sKKwlpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBudWxsKQorCQlyZXR1
cm4gJ1snICsgdHlwZW9mKHZhbCkgKyAnXSc7CisJcmV0dXJuIHZhbC50b1N0cmluZygpICsgJ1sn
ICsgdHlwZW9mKHZhbCkgKyAnXSc7Cit9CisKK3ZhciBfaGV4MmRlY190YWJsZSA9IHsKKwkwOjAs
IDE6MSwgMjoyLCAzOjMsIDQ6NCwgNTo1LCA2OjYsIDc6NywgODo4LCA5OjksCisJYToxMCwgYjox
MSwgYzoxMiwgZDoxMywgZToxNCwgZjoxNSwKKwlBOjEwLCBCOjExLCBDOjEyLCBEOjEzLCBFOjE0
LCBGOjE1Cit9OworZnVuY3Rpb24gX2hleDJkZWMoaGV4KQoreworCXJldHVybiBfaGV4MmRlY190
YWJsZVtoZXguY2hhckF0KDApXSoxNiArIF9oZXgyZGVjX3RhYmxlW2hleC5jaGFyQXQoMSldOwor
fQorCit2YXIgX2ZhaWxlZCA9IGZhbHNlOwordmFyIF9hc3NlcnRlZCA9IGZhbHNlOworZnVuY3Rp
b24gX3dhcm4odGV4dCkKK3sKKwlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZCcpLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJykpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKHRleHQpKTsKK30KK2Z1bmN0aW9uIF9mYWlsKHRleHQpCit7CisJX3dhcm4o
dGV4dCk7CisJX2ZhaWxlZCA9IHRydWU7Cit9CisKK2Z1bmN0aW9uIF9hc3NlcnQoY29uZCwgdGV4
dCkKK3sKKwlfYXNzZXJ0ZWQgPSB0cnVlOworCWlmICghIGNvbmQpCisJCV9mYWlsKCdGYWlsZWQg
YXNzZXJ0aW9uOiAnICsgdGV4dCk7Cit9CisKK2Z1bmN0aW9uIF9hc3NlcnRTYW1lKGEsIGIsIHRl
eHRfYSwgdGV4dF9iKQoreworCV9hc3NlcnRlZCA9IHRydWU7CisJaWYgKGEgIT09IGIpCisJCV9m
YWlsKCdGYWlsZWQgYXNzZXJ0aW9uICcgKyB0ZXh0X2EgKyAnID09PSAnICsgdGV4dF9iICsKKwkJ
CQknIChnb3QgJyArIF92YWxUb1N0cmluZyhhKSArICcsIGV4cGVjdGVkICcgKyBfdmFsVG9TdHJp
bmcoYikgKyAnKScpOworfQorCitmdW5jdGlvbiBfYXNzZXJ0RGlmZmVyZW50KGEsIGIsIHRleHRf
YSwgdGV4dF9iKQoreworCV9hc3NlcnRlZCA9IHRydWU7CisJaWYgKGEgPT09IGIpCisJCV9mYWls
KCdGYWlsZWQgYXNzZXJ0aW9uICcgKyB0ZXh0X2EgKyAnICE9PSAnICsgdGV4dF9iICsKKwkJCQkn
IChnb3QgJyArIF92YWxUb1N0cmluZyhhKSArICcsIGV4cGVjdGVkIG5vdCAnICsgX3ZhbFRvU3Ry
aW5nKGIpICsgJyknKTsKK30KKworZnVuY3Rpb24gX2Fzc2VydEVxdWFsKGEsIGIsIHRleHRfYSwg
dGV4dF9iKQoreworCV9hc3NlcnRlZCA9IHRydWU7CisJaWYgKGEgIT0gYikKKwkJX2ZhaWwoJ0Zh
aWxlZCBhc3NlcnRpb24gJyArIHRleHRfYSArICcgPT0gJyArIHRleHRfYiArCisJCQkJJyAoZ290
ICcgKyBfdmFsVG9TdHJpbmcoYSkgKyAnLCBleHBlY3RlZCAnICsgX3ZhbFRvU3RyaW5nKGIpICsg
JyknKTsKK30KKworZnVuY3Rpb24gX2Fzc2VydE1hdGNoKGEsIGIsIHRleHRfYSwgdGV4dF9iKQor
eworCV9hc3NlcnRlZCA9IHRydWU7CisJaWYgKCEgYS5tYXRjaChiKSkKKwkJX2ZhaWwoJ0ZhaWxl
ZCBhc3NlcnRpb24gJyArIHRleHRfYSArICcgbWF0Y2hlcyAnICsgdGV4dF9iICsKKwkJCQknIChn
b3QgJyArIF92YWxUb1N0cmluZyhhKSArICcpJyk7Cit9CisKKwordmFyIF9tYW51YWxfY2hlY2sg
PSBmYWxzZTsKKworZnVuY3Rpb24gX3JlcXVpcmVNYW51YWxDaGVjaygpCit7CisJX21hbnVhbF9j
aGVjayA9IHRydWU7Cit9CisKK2Z1bmN0aW9uIF9jcmFzaCgpCit7CisJX2ZhaWwoJ0Fib3J0ZWQg
ZHVlIHRvIHByZWRpY3RlZCBjcmFzaCcpOworfQorCit2YXIgX2dldEltYWdlRGF0YUNhbGlicmF0
ZWQgPSBmYWxzZTsKK3ZhciBfZ2V0SW1hZ2VEYXRhSXNQcmVtdWwsIF9nZXRJbWFnZURhdGFJc0JH
UkE7CisKK2Z1bmN0aW9uIF9nZXRQaXhlbChjYW52YXMsIHgseSkKK3sKKwl2YXIgY3R4ID0gY2Fu
dmFzLmdldENvbnRleHQoJzJkJyk7CisJaWYgKGN0eCAmJiB0eXBlb2YoY3R4LmdldEltYWdlRGF0
YSkgIT0gJ3VuZGVmaW5lZCcpCisJeworCQl0cnkgeworCQkJdmFyIGltZ2RhdGEgPSBjdHguZ2V0
SW1hZ2VEYXRhKHgsIHksIDEsIDEpOworCQl9IGNhdGNoIChlKSB7CisJCQkvLyBwcm9iYWJseSBh
IHNlY3VyaXR5IGV4Y2VwdGlvbiBjYXVzZWQgYnkgaGF2aW5nIGRyYXduCisJCQkvLyBkYXRhOiBV
UkxzIG9udG8gdGhlIGNhbnZhcworCQkJaW1nZGF0YSA9IG51bGw7CisJCX0KKwkJaWYgKGltZ2Rh
dGEpCisJCXsKKwkJCS8vIFdvcmsgYXJvdW5kIGdldEltYWdlRGF0YSBidWdzLCBzaW5jZSB3ZSB3
YW50IHRoZSBvdGhlciB0ZXN0cyB0bworCQkJLy8gY2Fycnkgb24gd29ya2luZyBhcyB3ZWxsIGFz
IHBvc3NpYmxlCisJCQlpZiAoISBfZ2V0SW1hZ2VEYXRhQ2FsaWJyYXRlZCkKKwkJCXsKKwkJCQl2
YXIgYzIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsKKwkJCQljMi53aWR0aCA9
IGMyLmhlaWdodCA9IDE7CisJCQkJdmFyIGN0eDIgPSBjMi5nZXRDb250ZXh0KCcyZCcpOworCQkJ
CWN0eDIuZmlsbFN0eWxlID0gJ3JnYmEoMCwgMjU1LCAyNTUsIDAuNSknOworCQkJCWN0eDIuZmls
bFJlY3QoMCwgMCwgMSwgMSk7CisJCQkJdmFyIGRhdGEyID0gY3R4Mi5nZXRJbWFnZURhdGEoMCwg
MCwgMSwgMSkuZGF0YTsKKworCQkJCS8vIEZpcmVmb3ggcmV0dXJucyBwcmVtdWx0aXBsaWVkIGFs
cGhhCisKKwkJCQlpZiAoZGF0YTJbMV0gPiAxMDAgJiYgZGF0YTJbMV0gPCAxNTApCisJCQkJCV9n
ZXRJbWFnZURhdGFJc1ByZW11bCA9IHRydWU7CisJCQkJZWxzZQorCQkJCQlfZ2V0SW1hZ2VEYXRh
SXNQcmVtdWwgPSBmYWxzZTsKKworCQkJCS8vIE9wZXJhIE1pbmkgNCBCZXRhIHJldHVybnMgQkdS
QSBpbnN0ZWFkIG9mIFJHQkEKKworCQkJCWlmIChkYXRhMlswXSA+IDI1MCAmJiBkYXRhMlsyXSA8
IDUpCisJCQkJCV9nZXRJbWFnZURhdGFJc0JHUkEgPSB0cnVlOworCQkJCWVsc2UKKwkJCQkJX2dl
dEltYWdlRGF0YUlzQkdSQSA9IGZhbHNlOworCisJCQkJX2dldEltYWdlRGF0YUNhbGlicmF0ZWQg
PSB0cnVlOworCQkJfQorCisJCQkvLyBVbmRvIHRoZSBCR1JBIGZsaXBwaW5nCisJCQl2YXIgcmdi
YSA9IChfZ2V0SW1hZ2VEYXRhSXNCR1JBCisJCQkJPyBbIGltZ2RhdGEuZGF0YVsyXSwgaW1nZGF0
YS5kYXRhWzFdLCBpbWdkYXRhLmRhdGFbMF0sIGltZ2RhdGEuZGF0YVszXSBdCisJCQkJOiBbIGlt
Z2RhdGEuZGF0YVswXSwgaW1nZGF0YS5kYXRhWzFdLCBpbWdkYXRhLmRhdGFbMl0sIGltZ2RhdGEu
ZGF0YVszXSBdKTsKKworCQkJaWYgKCEgX2dldEltYWdlRGF0YUlzUHJlbXVsKQorCQkJCXJldHVy
biByZ2JhOworCisJCQkvLyBVbmRvIHRoZSBwcmVtdWx0aXBseWluZworCQkJaWYgKHJnYmFbM10g
PT0gMCkKKwkJCQlyZXR1cm4gWyAwLCAwLCAwLCAwIF07CisJCQllbHNlCisJCQl7CisJCQkJdmFy
IGEgPSByZ2JhWzNdIC8gMjU1OworCQkJCXJldHVybiBbCisJCQkJCU1hdGgucm91bmQocmdiYVsw
XS9hKSwKKwkJCQkJTWF0aC5yb3VuZChyZ2JhWzFdL2EpLAorCQkJCQlNYXRoLnJvdW5kKHJnYmFb
Ml0vYSksCisJCQkJCXJnYmFbM10KKwkJCQldOworCQkJfQorCQl9CisJfQorCisJdHJ5IHsgY3R4
ID0gY2FudmFzLmdldENvbnRleHQoJ29wZXJhLTJkZ2FtZScpOyB9IGNhdGNoIChlKSB7IC8qIEZp
cmVmb3ggdGhyb3dzICovIH0KKwlpZiAoY3R4ICYmIHR5cGVvZihjdHguZ2V0UGl4ZWwpICE9ICd1
bmRlZmluZWQnKQorCXsKKwkJdHJ5IHsKKwkJCXZhciBjID0gY3R4LmdldFBpeGVsKHgsIHkpOwor
CQl9IGNhdGNoIChlKSB7CisJCQkvLyBwcm9iYWJseSBhIHNlY3VyaXR5IGV4Y2VwdGlvbiBjYXVz
ZWQgYnkgaGF2aW5nIGRyYXduCisJCQkvLyBkYXRhOiBVUkxzIG9udG8gdGhlIGNhbnZhcworCQkJ
YyA9IG51bGw7CisJCX0KKwkJaWYgKGMpCisJCXsKKwkJCXZhciBtYXRjaGVzID0gL15yZ2JhXCgo
XGQrKSwgKFxkKyksIChcZCspLCAoW1xkXC5dKylcKSQvLmV4ZWMoYyk7CisJCQlpZiAobWF0Y2hl
cykKKwkJCQlyZXR1cm4gWyBtYXRjaGVzWzFdLCBtYXRjaGVzWzJdLCBtYXRjaGVzWzNdLCBNYXRo
LnJvdW5kKG1hdGNoZXNbNF0qMjU1KSBdOworCQkJbWF0Y2hlcyA9IC9eIyguLikoLi4pKC4uKSQv
LmV4ZWMoYyk7CisJCQlpZiAobWF0Y2hlcykKKwkJCQlyZXR1cm4gWyBfaGV4MmRlYyhtYXRjaGVz
WzFdKSwgX2hleDJkZWMobWF0Y2hlc1syXSksIF9oZXgyZGVjKG1hdGNoZXNbM10pLCAyNTUgXTsK
KwkJfQorCX0KKwkvL193YXJuKCIoQ2FuJ3QgdGVzdCBwaXhlbCB2YWx1ZSkiKTsKKwlfbWFudWFs
X2NoZWNrID0gdHJ1ZTsKKwlyZXR1cm4gdW5kZWZpbmVkOworfQorCitmdW5jdGlvbiBfYXNzZXJ0
UGl4ZWwoY2FudmFzLCB4LHksIHIsZyxiLGEsIHBvcywgY29sb3VyKQoreworCV9hc3NlcnRlZCA9
IHRydWU7CisJdmFyIGMgPSBfZ2V0UGl4ZWwoY2FudmFzLCB4LHkpOworCWlmIChjICYmICEgKGNb
MF0gPT0gciAmJiBjWzFdID09IGcgJiYgY1syXSA9PSBiICYmIGNbM10gPT0gYSkpCisJCV9mYWls
KCdGYWlsZWQgYXNzZXJ0aW9uOiBnb3QgcGl4ZWwgWycgKyBjICsgJ10gYXQgKCcreCsnLCcreSsn
KSwgZXhwZWN0ZWQgWycrcisnLCcrZysnLCcrYisnLCcrYSsnXScpOworfQorCitmdW5jdGlvbiBf
YXNzZXJ0UGl4ZWxBcHByb3goY2FudmFzLCB4LHksIHIsZyxiLGEsIHBvcywgY29sb3VyLCB0b2xl
cmFuY2UpCit7CisJX2Fzc2VydGVkID0gdHJ1ZTsKKwl2YXIgYyA9IF9nZXRQaXhlbChjYW52YXMs
IHgseSk7CisJaWYgKGMpCisJeworCQl2YXIgZGlmZiA9IE1hdGgubWF4KE1hdGguYWJzKGNbMF0t
ciksIE1hdGguYWJzKGNbMV0tZyksIE1hdGguYWJzKGNbMl0tYiksIE1hdGguYWJzKGNbM10tYSkp
OworCQlpZiAoZGlmZiA+IHRvbGVyYW5jZSkKKwkJCV9mYWlsKCdGYWlsZWQgYXNzZXJ0aW9uOiBn
b3QgcGl4ZWwgWycgKyBjICsgJ10gYXQgKCcreCsnLCcreSsnKSwgZXhwZWN0ZWQgWycrcisnLCcr
ZysnLCcrYisnLCcrYSsnXSArLy0gJyt0b2xlcmFuY2UpOworCX0KK30KKworZnVuY3Rpb24gX2Fk
ZFRlc3QodGVzdCkKK3sKKwl2YXIgZGVmZXJyZWQgPSBmYWxzZTsKKwl3aW5kb3cuZGVmZXJUZXN0
ID0gZnVuY3Rpb24gKCkgeyBkZWZlcnJlZCA9IHRydWU7IH07CisJZnVuY3Rpb24gZW5kVGVzdCgp
CisJeworCQlpZiAoX2ZhaWxlZCkgLy8gdGVzdCBmYWlsZWQKKwkJeworCQkJZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50LmNsYXNzTmFtZSArPSAnIGZhaWwnOworCQkJd2luZG93Ll90ZXN0U3RhdHVz
ID0gWydmYWlsJywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2QnKS5pbm5lckhUTUxdOworCQl9
CisJCWVsc2UgaWYgKF9tYW51YWxfY2hlY2sgfHwgIV9hc3NlcnRlZCkKKwkJeyAvLyB0ZXN0IGNh
c2UgZXhwbGljaXRseSBhc2tlZCBmb3IgYSBtYW51YWwgY2hlY2ssIG9yIG5vIGF1dG9tYXRpYyBh
c3NlcnRpb25zIHdlcmUgcGVyZm9ybWVkCisJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZCcp
LmlubmVySFRNTCArPSAnPGxpPkNhbm5vdCBhdXRvbWF0aWNhbGx5IHZlcmlmeSByZXN1bHQnOwor
CQkJZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTmFtZSArPSAnIG5lZWRzX2NoZWNrJzsK
KwkJCXdpbmRvdy5fdGVzdFN0YXR1cyA9IFsnY2hlY2snLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnZCcpLmlubmVySFRNTF07CisJCX0KKwkJZWxzZSAvLyB0ZXN0IHN1Y2NlZWRlZAorCQl7CisJ
CQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZCcpLmlubmVySFRNTCA9ICdQYXNzZWQnOworCQkJ
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTmFtZSArPSAnIHBhc3MnOworCQkJd2luZG93
Ll90ZXN0U3RhdHVzID0gWydwYXNzJywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2QnKS5pbm5l
ckhUTUxdOworCQl9CisJCWlmICh3aW5kb3cubm90aWZ5RW5kVGVzdCkKKwkJCW5vdGlmeUVuZFRl
c3QoKTsKKworCX0KKwl3aW5kb3cuZW5kVGVzdCA9IGVuZFRlc3Q7CisJd2luZG93LndyYXBGdW5j
dGlvbiA9IGZ1bmN0aW9uIChmKQorCXsKKwkJcmV0dXJuIGZ1bmN0aW9uKCkKKwkJeworCQkJdHJ5
CisJCQl7CisJCQkJZi5hcHBseShudWxsLCBhcmd1bWVudHMpOworCQkJfQorCQkJY2F0Y2ggKGUp
CisJCQl7CisJCQkJX2ZhaWwoJ0Fib3J0ZWQgd2l0aCBleGNlcHRpb246ICcgKyBlLm1lc3NhZ2Up
OworCQkJfQorCQkJZW5kVGVzdCgpOworCQl9CisJfQorCisJd2luZG93Lm9ubG9hZCA9IGZ1bmN0
aW9uICgpCisJeworCQl0cnkKKwkJeworCQkJdmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjJyk7CisJCQl2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7CisJCQl0
ZXN0KGNhbnZhcywgY3R4KTsKKwkJfQorCQljYXRjaCAoZSkKKwkJeworCQkJX2ZhaWwoJ0Fib3J0
ZWQgd2l0aCBleGNlcHRpb246ICcgKyBlLm1lc3NhZ2UpOworCQkJZGVmZXJyZWQgPSBmYWxzZTsg
Ly8gY2FuY2VsIGFueSBkZWZlcmVuY2UKKwkJfQorCisJCWlmICghIGRlZmVycmVkKQorCQkJZW5k
VGVzdCgpOworCX07Cit9Cg==
</data>
<flag name="review"
          id="36795"
          type_id="1"
          status="-"
          setter="staikos"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53408</attachid>
            <date>2010-04-14 22:06:57 -0700</date>
            <delta_ts>2010-05-02 19:15:03 -0700</delta_ts>
            <desc>Fixed build issue for mac</desc>
            <filename>toDataURL-jpeg-quality-fix-mac.patch</filename>
            <type>text/plain</type>
            <size>37431</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDU3NDY5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDQt
MTEgIExlbyBZYW5nICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBjYW52YXMudG9EYXRhVVJM
KHR5cGUsIHF1YWxpdHksIC4uLikgdG8gbGV0IGl0IHN1cHBvcnQgcXVhbGl0eSBwYXJhbWV0ZXIu
IAorICAgICAgICBBbmQgaW1wbGVtZW50IGl0IGluIFF0IHByb3RpbmcuIAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzczMDQKKworICAgICAgICAqIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAg
ICogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5j
cHA6CisgICAgICAgICogV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHA6CisgICAgICAgICog
V2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5oOgorICAgICAgICAqIFdlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oOgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwOgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgICogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcDoKKyAgICAgICAg
KiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorCiAyMDEw
LTA0LTA5ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkIGNyYXNoIGZpeC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTc0NjkpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9i
aWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNSw3IEBACiAjaW5jbHVkZSAiV2ViR0xDb250
ZXh0QXR0cmlidXRlcy5oIgogI2VuZGlmCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTgxLDQg
KzgzLDIyIEBAIEpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dCgKICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoY2FudmFzLT5nZXRD
b250ZXh0KGNvbnRleHRJZCwgYXR0cnMuZ2V0KCkpKSk7CiB9CiAKK0pTVmFsdWUgSlNIVE1MQ2Fu
dmFzRWxlbWVudDo6dG9EYXRhVVJMKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKK3sKKyAgICBjb25zdCBVU3RyaW5nJiB0eXBlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmlu
ZWRPck51bGxDaGVjayhleGVjLCBhcmdzLmF0KDApKTsKKyAgICBkb3VibGUgcXVhbGl0eSA9IDEu
MDsKKyAgICBpZiAoYXJncy5zaXplKCkgPiAxKSB7CisgICAgICAgIEpTVmFsdWUgdiA9IGFyZ3Mu
YXQoMSk7CisgICAgICAgIGlmICh2LmlzTnVtYmVyKCkpCisgICAgICAgICAgICBxdWFsaXR5ID0g
di50b051bWJlcihleGVjKTsKKyAgICAgICAgaWYgKHF1YWxpdHkgPiAxLjAgfHwgcXVhbGl0eSA8
IDAuMCB8fCAhaXNmaW5pdGUocXVhbGl0eSkpCisgICAgICAgICAgICBxdWFsaXR5ID0gMS4wOwor
ICAgIH0KKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gc3RhdGljX2Nhc3Q8SFRNTENh
bnZhc0VsZW1lbnQqPihpbXBsKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIEpT
Qzo6SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZyhleGVjLCBjYW52YXMtPnRvRGF0YVVSTCh0eXBl
LCBxdWFsaXR5LCBlYykpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDU3NDY5KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENv
LiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCkBAIC0zNCw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ2FudmFzQ29udGV4dEF0dHJpYnV0
ZXMuaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRN
TENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUg
IldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNs
dWRlICJWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgpAQCAtNDIsNiArNDQsNyBAQAogI2lm
IEVOQUJMRSgzRF9DQU5WQVMpCiAjaW5jbHVkZSAiVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIK
ICNlbmRpZgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtODksNCArOTIsMjIgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTENhbnZh
c0VsZW1lbgogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEhUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkxDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQoreworICAgIGRvdWJsZSBxdWFsaXR5ID0gMS4wOworICAgIGlmIChh
cmdzLkxlbmd0aCgpID4gMSkgeworICAgICAgICBpZiAoYXJnc1sxXS0+SXNOdW1iZXIoKSkKKyAg
ICAgICAgICAgIHF1YWxpdHkgPSBhcmdzWzFdLT5OdW1iZXJWYWx1ZSgpOworICAgICAgICBpZiAo
cXVhbGl0eSA+IDEuMCB8fCBxdWFsaXR5IDwgMC4wIHx8ICFpc2Zpbml0ZShxdWFsaXR5KSkKKyAg
ICAgICAgICAgIHF1YWxpdHkgPSAxLjA7CisgICAgfQorICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFz
ID0gVjhIVE1MQ2FudmFzRWxlbWVudDo6dG9OYXRpdmUoaG9sZGVyKTsKKyAgICBTdHJpbmcgdHlw
ZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBTdHJpbmcgcmVzdWx0ID0gY2FudmFzLT50b0RhdGFVUkwodHlwZSwgcXVhbGl0eSwgZWMp
OworICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CisgICAgcmV0dXJuIHY4U3RyaW5n
T3JVbmRlZmluZWQocmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
Q2FudmFzU3VyZmFjZS5jcHAJKHJldmlzaW9uIDU3NDY5KQorKysgV2ViQ29yZS9kb20vQ2FudmFz
U3VyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2NSw3IEBA
IHZvaWQgQ2FudmFzU3VyZmFjZTo6c2V0U3VyZmFjZVNpemUoY29uc3QKICAgICBtX2ltYWdlQnVm
ZmVyLmNsZWFyKCk7CiB9CiAKLVN0cmluZyBDYW52YXNTdXJmYWNlOjp0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgQ2FudmFzU3VyZmFj
ZTo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSBxdWFsaXR5LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIW1fb3JpZ2luQ2xlYW4pIHsKICAgICAgICAgZWMg
PSBTRUNVUklUWV9FUlI7CkBAIC03OCw3ICs3OSw3IEBAIFN0cmluZyBDYW52YXNTdXJmYWNlOjp0
b0RhdGFVUkwoY29uc3QgU3QKICAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkgfHwgIU1JTUVUeXBl
UmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSkK
ICAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwoImltYWdlL3BuZyIpOwogCi0gICAg
cmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwobWltZVR5cGUpOworICAgIHJldHVybiBidWZmZXIo
KS0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5KTsKIH0KIAogdm9pZCBDYW52YXNTdXJmYWNl
Ojp3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmKQpJbmRleDogV2ViQ29yZS9kb20vQ2FudmFzU3Vy
ZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaAkocmV2aXNp
b24gNTc0NjkpCisrKyBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChC
ZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
IAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
QEAgLTQxLDcgKzQzLDYgQEAgY2xhc3MgRmxvYXRTaXplOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRQb2ludDsKLWNsYXNzIFN0cmluZzsKIAog
Y2xhc3MgQ1NTU3R5bGVTZWxlY3RvcjsKIGNsYXNzIFJlbmRlckJveDsKQEAgLTU4LDcgKzU5LDkg
QEAgcHVibGljOgogICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgp
OyB9CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQog
Ci0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRpb25D
b2RlJik7CisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNl
cHRpb25Db2RlJiBlYykgeyByZXR1cm4gdG9EYXRhVVJMKG1pbWVUeXBlLCAxLjAsIGVjKTsgfQor
CisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUgcXVh
bGl0eSwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGwJ
KHJldmlzaW9uIDU3NDY5KQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzMsOCBAQCBt
b2R1bGUgaHRtbCB7CiAgICAgICAgIGF0dHJpYnV0ZSBsb25nIHdpZHRoOwogICAgICAgICBhdHRy
aWJ1dGUgbG9uZyBoZWlnaHQ7CiAKLSAgICAgICAgRE9NU3RyaW5nIHRvRGF0YVVSTChpbiBbQ29u
dmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHR5cGUpCisgICAgICAg
IC8vIEhUTUw1IGRyYWZ0IHNwZWM6IERPTVN0cmluZyB0b0RhdGFVUkwoRE9NU3RyaW5nIHR5cGUs
IC4uLik7CisgICAgICAgIFtDdXN0b21dIERPTVN0cmluZyB0b0RhdGFVUkwoaW4gW0NvbnZlcnRV
bmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB0eXBlKQogICAgICAgICAgICAg
cmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVf
QykgfHwgIUxBTkdVQUdFX09CSkVDVElWRV9DCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiA1NzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamlu
ZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtODIsNyArODMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgcHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0YSosIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpOwogICAgICAgICB2b2lkIHB1dFBy
ZW11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCk7CiAKLSAgICAgICAgU3RyaW5nIHRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUgcXVhbGl0eSA9IDEuMCkgY29uc3Q7CiAj
aWYgIVBMQVRGT1JNKENHKQogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgp
IGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9CiAgICAgICAgIHZvaWQgdHJhbnNm
b3JtQ29sb3JTcGFjZShJbWFnZUNvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgSW1hZ2VDb2xvclNw
YWNlIGRzdENvbG9yU3BhY2UpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA1NzQ2OSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgzLDcgKzI4NCw3
IEBAIHN0YXRpYyBjYWlyb19zdGF0dXNfdCB3cml0ZUZ1bmN0aW9uKHZvaWQKICAgICByZXR1cm4g
Q0FJUk9fU1RBVFVTX1NVQ0NFU1M7CiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0
YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUpIGNvbnN0CiB7CiAgICAgY2Fpcm9f
c3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4dCgpLT5wbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgaWYgKCFpbWFnZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkocmV2aXNpb24gNTc0NjkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxl
IChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNzUsNyArMjc2LDcgQEAgc3RhdGljIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gdXRpRnJvbU1JTQogI2VuZGlmCiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6
OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29k
aW5nKG1pbWVUeXBlKSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
SW1hZ2VCdWZmZXJIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcAkocmV2aXNpb24gNTc0NjkpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUg
U2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9y
Y2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Niw3ICs3Nyw3IEBAIHZvaWQgSW1hZ2VCdWZm
ZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZUQKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1T
dHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmKSBjb25zdAorU3RyaW5n
IEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgZG91YmxlKSBjb25zdAogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIFN0cmluZygpOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCShyZXZpc2lvbiA1
NzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBN
b2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2NSw5ICsyNjYsMTAgQEAgdm9pZCBJbWFnZUJ1ZmZl
cjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRAogLy8gV2UgZ2V0IGEgbWltZVR5cGUgaGVyZSBidXQg
UUltYWdlV3JpdGVyIGRvZXMgbm90IHN1cHBvcnQgbWltZXR5cGVzIGJ1dAogLy8gb25seSBmb3Jt
YXRzIChwbmcsIGdpZiwganBlZy4uLiwgeHBtKS4gU28gYXNzdW1lIHdlIGdldCBpbWFnZS8gYXMg
aW1hZ2UKIC8vIG1pbWV0eXBlcyBhbmQgdGhlbiByZW1vdmUgdGhlIGltYWdlLyB0byBnZXQgdGhl
IFF0IGZvcm1hdC4KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBkb3VibGUgcXVhbGl0eSkgY29uc3QKIHsKICAgICBBU1NFUlQoTUlNRVR5
cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUp
KTsKKyAgICBBU1NFUlQoMC4wIDw9IHF1YWxpdHkgJiYgcXVhbGl0eSA8PSAxLjApOwogCiAgICAg
aWYgKCFtaW1lVHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKSkKICAgICAgICAgcmV0dXJuICJkYXRh
OiwiOwpAQCAtMjc3LDcgKzI3OSw3IEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNv
bnN0IFN0cmkKICAgICBRQnVmZmVyIGJ1ZmZlcigmZGF0YSk7CiAgICAgYnVmZmVyLm9wZW4oUUJ1
ZmZlcjo6V3JpdGVPbmx5KTsKIAotICAgIGlmICghbV9kYXRhLm1fcGl4bWFwLnNhdmUoJmJ1ZmZl
ciwgbWltZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1hZ2UiKS51dGY4KCkuZGF0YSgpKSkKKyAg
ICBpZiAoIW1fZGF0YS5tX3BpeG1hcC5zYXZlKCZidWZmZXIsIG1pbWVUeXBlLnN1YnN0cmluZyhz
aXplb2YgImltYWdlIikudXRmOCgpLmRhdGEoKSwgcXVhbGl0eSoxMDArMC41KSkKICAgICAgICAg
cmV0dXJuICJkYXRhOiwiOwogCiAgICAgYnVmZmVyLmNsb3NlKCk7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNp
b24gNTc0NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTI2MCw3ICsyNjEsNyBA
QCB2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VECiAgICAgcHV0SW1hZ2VE
YXRhPFByZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCAqY29udGV4
dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksIG1fc2l6ZSk7CiB9CiAKLVN0cmluZyBJ
bWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0CitTdHJpbmcgSW1hZ2VC
dWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmLCBkb3VibGUpIGNvbnN0CiB7CiAgICAgLy8g
RW5jb2RlIHRoZSBpbWFnZSBpbnRvIGEgdmVjdG9yLgogICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFy
PiBwbmdFbmNvZGVkRGF0YTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
SW1hZ2VCdWZmZXJXaW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcAkocmV2aXNpb24gNTc0NjkpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBN
b2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBU
b3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjE1LDcgKzIxNiw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1
dFByZW11bHRpcGxpZWRJbWFnZUQKICAgICBwdXRJbWFnZURhdGE8dHJ1ZT4oc291cmNlLCBzb3Vy
Y2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YS5tX2JpdG1hcC5nZXQoKSk7CiB9CiAKLVN0cmluZyBJ
bWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0CitTdHJp
bmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2RhdGEubV9iaXRtYXAtPmJ5dGVzKCkpCiAgICAgICAgIHJl
dHVybiAiZGF0YTosIjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VC
dWZmZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9J
bWFnZUJ1ZmZlcld4LmNwcAkocmV2aXNpb24gNTc0NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9s
bGl2aWVycy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5n
KSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03NSw3ICs3Niw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxp
ZWRJbWFnZUQKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6
OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmKSBjb25zdAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiwgZG91YmxlKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CiAgICAgcmV0dXJuIFN0cmluZygpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTc0NjkpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAx
MC0wNC0xMSAgTGVvIFlhbmcgIDxsZW8ueWFuZ0B0b3JjaG1vYmlsZS5jb20uY24+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGNhbnZhcy50b0Rh
dGFVUkwodHlwZSwgcXVhbGl0eSwgLi4uKSB0byBsZXQgaXQgc3VwcG9ydCBxdWFsaXR5IHBhcmFt
ZXRlci4gCisgICAgICAgIEFuZCBpbXBsZW1lbnQgaXQgaW4gUXQgcHJvdGluZy4gCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzMwNAorCisgICAgICAg
ICogcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwt
anBlZy1hbHBoYS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZh
cy90b0RhdGFVUkwtanBlZy1wcmltYXJ5Y29sb3JzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcHJpbWFyeWNvbG9y
cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFV
UkwtanBlZy1xdWFsaXR5LWJhc2ljLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1x
dWFsaXR5LW5vdG51bWJlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktbm90bnVtYmVyLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1
YWxpdHktb3V0c2lkZXJhbmdlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1vdXRzaWRlcmFuZ2UuaHRt
bDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpw
ZWcuanM6IEFkZGVkLgorCiAyMDEwLTA0LTExICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgTm90IHJldmlld2VkLCBsYXlvdXQgdGVzdCBmaXggZm9yIFFUIGJvdHMu
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBl
Zy1hbHBoYS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpw
ZWctYWxwaGEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitQYXNzZWQK
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVn
LWFscGhhLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9j
YW52YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLWFscGhhLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBz
cmM9InRvRGF0YVVSTC1qcGVnLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgIHdpbmRvdy5ub3RpZnlFbmRUZXN0ID0g
ZnVuY3Rpb24gKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdFRvRGF0YVVSTChjYW52
YXMsIGN0eCkKKyAgICAgICAgeworICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICdyZ2JhKDEy
OCwgMjU1LCAxMjgsIDAuNSknOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwg
NTApOworICAgICAgICAgICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5h
dGlvbi1vdmVyJzsgLy8gc2hvdWxkIGJlIGlnbm9yZWQgYnkgdG9EYXRhVVJMCisgICAgICAgICAg
ICB2YXIgZGF0YSA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKTsKKyAgICAgICAgICAg
IGN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLW92ZXInOworICAgICAgICAg
ICAgaWYgKCFkYXRhLm1hdGNoKC9eZGF0YTppbWFnZVwvanBlZ1s7LF0vKSkgeworICAgICAgICAg
ICAgICAgIF9hc3NlcnQodHJ1ZSwgInRydWUiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjZjAwJzsKKyAgICAgICAgICAgICAgICBjdHgu
ZmlsbFJlY3QoMCwgMCwgMTAwLCA1MCk7CisgICAgICAgICAgICAgICAgdmFyIGltZyA9IG5ldyBJ
bWFnZSgpOworICAgICAgICAgICAgICAgIGRlZmVyVGVzdCgpOworICAgICAgICAgICAgICAgIGlt
Zy5vbmxvYWQgPSB3cmFwRnVuY3Rpb24oZnVuY3Rpb24gKCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIF9hc3NlcnRQaXhlbEFwcHJveChjYW52YXMs
IDUwLDI1LCA2MywxMjcsNjMsMjU1LCAiNTAsMjUiLCAiNjMsMTI3LDYzLDI1NSIsIDgpOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGltZy5zcmMgPSBkYXRhOworICAgICAg
ICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBfYWRkVGVzdCh0ZXN0VG9EYXRhVVJMKTsKKyAgICA8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxjYW52YXMgaWQ9ImMiIHdpZHRoPSIxMDAiIGhl
aWdodD0iNTAiPjwvY2FudmFzPgorICAgIDxwIGlkPSJkIj48L3A+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBl
Zy1wcmltYXJ5Y29sb3JzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1wcmltYXJ5Y29sb3JzLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2Fu
dmFzL3RvRGF0YVVSTC1qcGVnLXByaW1hcnljb2xvcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxIEBACitQYXNzZWQKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zh
c3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXByaW1hcnljb2xvcnMuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1wcmlt
YXJ5Y29sb3JzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9m
YXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1wcmltYXJ5Y29sb3JzLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTAgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9InRvRGF0
YVVSTC1qcGVnLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworCisgICAgICAgIHdpbmRvdy5ub3RpZnlFbmRUZXN0ID0gZnVuY3Rpb24g
KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cisg
ICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdFRvRGF0YVVSTChjYW52YXMsIGN0eCkK
KyAgICAgICAgeworICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjZmYwJzsKKyAgICAgICAg
ICAgIGN0eC5maWxsUmVjdCgwLCAwLCAyNSwgNDApOworICAgICAgICAgICAgY3R4LmZpbGxTdHls
ZSA9ICcjMGZmJzsKKyAgICAgICAgICAgIGN0eC5maWxsUmVjdCgyNSwgMCwgNTAsIDQwKTsKKyAg
ICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAnIzAwZic7CisgICAgICAgICAgICBjdHguZmlsbFJl
Y3QoNzUsIDAsIDI1LCA0MCk7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyNmZmYnOwor
ICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDQwLCAxMDAsIDEwKTsKKyAgICAgICAgICAgIHZh
ciBkYXRhID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpOyAvLyBpdCBpcyBva2F5IGlm
IHRoaXMgcmV0dXJucyBhIFBORyBpbnN0ZWFkCisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0g
JyNmMDAnOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgNTApOworICAgICAg
ICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpOworICAgICAgICAgICAgZGVmZXJUZXN0KCk7CisK
KyAgICAgICAgICAgIGltZy5vbmxvYWQgPSB3cmFwRnVuY3Rpb24oZnVuY3Rpb24gKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7CisgICAg
ICAgICAgICAgICAgX2Fzc2VydFBpeGVsQXBwcm94KGNhbnZhcywgMTIsMjAsIDI1NSwyNTUsMCwy
NTUsICIxMiwyMCIsICIyNTUsMjU1LDAsMjU1IiwgOCk7CisgICAgICAgICAgICAgICAgX2Fzc2Vy
dFBpeGVsQXBwcm94KGNhbnZhcywgNTAsMjAsIDAsMjU1LDI1NSwyNTUsICI1MCwyMCIsICIwLDI1
NSwyNTUsMjU1IiwgOCk7CisgICAgICAgICAgICAgICAgX2Fzc2VydFBpeGVsQXBwcm94KGNhbnZh
cywgODcsMjAsIDAsMCwyNTUsMjU1LCAiODcsMjAiLCAiMCwwLDI1NSwyNTUiLCA4KTsKKyAgICAg
ICAgICAgICAgICBfYXNzZXJ0UGl4ZWxBcHByb3goY2FudmFzLCA1MCw0NSwgMjU1LDI1NSwyNTUs
MjU1LCAiNTAsNDUiLCAiMjU1LDI1NSwyNTUsMjU1IiwgOCk7CisgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgaW1nLnNyYyA9IGRhdGE7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQorICAgICAgICBfYWRkVGVzdCh0ZXN0VG9EYXRhVVJM
KTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxjYW52YXMgaWQ9ImMiIHdp
ZHRoPSIxMDAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorICAgIDxwIGlkPSJkIj48L3A+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90
b0RhdGFVUkwtanBlZy1xdWFsaXR5LWJhc2ljLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5
LWJhc2ljLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktYmFzaWMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitQYXNzZWQKSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktYmFzaWMuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFV
UkwtanBlZy1xdWFsaXR5LWJhc2ljLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LWJhc2ljLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlw
dCBzcmM9InRvRGF0YVVSTC1qcGVnLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgIHdpbmRvdy5ub3RpZnlFbmRUZXN0
ID0gZnVuY3Rpb24gKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdFRvRGF0YVVSTChj
YW52YXMsIGN0eCkKKyAgICAgICAgeworICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjMDBm
JzsKKyAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDUwKTsKKyAgICAgICAgICAg
IGN0eC5maWxsU3R5bGUgPSAnIzBmZic7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMywg
MTAwLCAxKTsKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciBKUEVHIHN1cHBvcnQgZmlyc3QKKyAg
ICAgICAgICAgIHZhciBkYXRhID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpOworICAg
ICAgICAgICAgaWYgKCFkYXRhLm1hdGNoKC9eZGF0YTppbWFnZVwvanBlZ1s7LF0vKSkgeworICAg
ICAgICAgICAgICAgIF9hc3NlcnQodHJ1ZSwgInRydWUiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgdmFyIGRhdGFfaGkgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9q
cGVnJywgMC45OSk7CisgICAgICAgICAgICAgICAgdmFyIGRhdGFfbG8gPSBjYW52YXMudG9EYXRh
VVJMKCdpbWFnZS9qcGVnJywgMC4wMSk7CisgICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9
ICcjZjAwJzsKKyAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCA1MCk7Cisg
ICAgICAgICAgICAgICAgZGVmZXJUZXN0KCk7CisgICAgICAgICAgICAgICAgdmFyIGltZ19oaSA9
IG5ldyBJbWFnZSgpOworICAgICAgICAgICAgICAgIGltZ19oaS5vbmxvYWQgPSBmdW5jdGlvbiAo
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGltZ19sbyA9IG5l
dyBJbWFnZSgpOworICAgICAgICAgICAgICAgICAgICBpbWdfbG8ub25sb2FkID0gd3JhcEZ1bmN0
aW9uKGZ1bmN0aW9uICgpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nX2hpLCAwLCAwLCA1MCwgNTAsIDAsIDAsIDUwLCA1MCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZ19sbywgMCwgMCwgNTAs
IDUwLCA1MCwgMCwgNTAsIDUwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgX2Fzc2VydChkYXRhX2hpLmxlbmd0aCA+IGRhdGFfbG8ubGVuZ3RoLCAi
ZGF0YV9oaS5sZW5ndGggPiBkYXRhX2xvLmxlbmd0aCIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgX2Fzc2VydFBpeGVsQXBwcm94KGNhbnZhcywgMjUsMjUsIDAsMCwyNTUsMjU1LCAiMjUsMjUi
LCAiMCwwLDI1NSwyNTUiLCAxMik7CisgICAgICAgICAgICAgICAgICAgICAgICBfYXNzZXJ0UGl4
ZWxBcHByb3goY2FudmFzLCA3NSwyNSwgMCwwLDI1NSwyNTUsICI3NSwyNSIsICIwLDAsMjU1LDI1
NSIsIDEyKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGlt
Z19sby5zcmMgPSBkYXRhX2xvOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
aW1nX2hpLnNyYyA9IGRhdGFfaGk7CisKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBf
YWRkVGVzdCh0ZXN0VG9EYXRhVVJMKTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
ICAgIDxjYW52YXMgaWQ9ImMiIHdpZHRoPSIxMDAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorICAg
IDxwIGlkPSJkIj48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW5vdG51bWJlci1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52
YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1ub3RudW1iZXItZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpw
ZWctcXVhbGl0eS1ub3RudW1iZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
IEBACitQYXNzZWQKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3Rv
RGF0YVVSTC1qcGVnLXF1YWxpdHktbm90bnVtYmVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1ub3Ru
dW1iZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3Qv
Y2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktbm90bnVtYmVyLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDQgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9InRvRGF0
YVVSTC1qcGVnLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworCisgICAgICAgIHdpbmRvdy5ub3RpZnlFbmRUZXN0ID0gZnVuY3Rpb24g
KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cisg
ICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdFRvRGF0YVVSTChjYW52YXMsIGN0eCkK
KyAgICAgICAgeworICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjMDBmJzsKKyAgICAgICAg
ICAgIGN0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDUwKTsKKyAgICAgICAgICAgIGN0eC5maWxsU3R5
bGUgPSAnIzBmZic7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMywgMTAwLCAxKTsKKyAg
ICAgICAgICAgIC8vIENoZWNrIGZvciBKUEVHIHN1cHBvcnQgZmlyc3QKKyAgICAgICAgICAgIHZh
ciBkYXRhID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpOworICAgICAgICAgICAgaWYg
KCFkYXRhLm1hdGNoKC9eZGF0YTppbWFnZVwvanBlZ1s7LF0vKSkgeworICAgICAgICAgICAgICAg
IF9hc3NlcnQodHJ1ZSwgInRydWUiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgX2Fzc2VydFNhbWUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsICdib2d1cycp
LCBkYXRhLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsICdib2d1cycpIiwgImRhdGEi
KTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9q
cGVnJywge30pLCBkYXRhLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHt9KSIsICJk
YXRhIik7CisgICAgICAgICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFzLnRvRGF0YVVSTCgnaW1h
Z2UvanBlZycsIG51bGwpLCBkYXRhLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIG51
bGwpIiwgImRhdGEiKTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9EYXRh
VVJMKCdpbWFnZS9qcGVnJywgdW5kZWZpbmVkKSwgZGF0YSwgImNhbnZhcy50b0RhdGFVUkwoJ2lt
YWdlL2pwZWcnLCB1bmRlZmluZWQpIiwgImRhdGEiKTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0
U2FtZShjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgdHJ1ZSksIGRhdGEsICJjYW52YXMu
dG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgdHJ1ZSkiLCAiZGF0YSIpOworICAgICAgICAgICAgICAg
IF9hc3NlcnRTYW1lKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAnMC4wMScpLCBkYXRh
LCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsICcwLjAxJykiLCAiZGF0YSIpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgX2FkZFRlc3QodGVzdFRv
RGF0YVVSTCk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8Y2FudmFzIGlk
PSJjIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKyAgICA8cCBpZD0iZCI+PC9w
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9j
YW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1vdXRzaWRlcmFuZ2UtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVS
TC1qcGVnLXF1YWxpdHktb3V0c2lkZXJhbmdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxp
dHktb3V0c2lkZXJhbmdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAor
UGFzc2VkCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFV
UkwtanBlZy1xdWFsaXR5LW91dHNpZGVyYW5nZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktb3V0c2lk
ZXJhbmdlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0
L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW91dHNpZGVyYW5nZS5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQ0IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSJ0
b0RhdGFVUkwtanBlZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICB3aW5kb3cubm90aWZ5RW5kVGVzdCA9IGZ1bmN0
aW9uICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIHRlc3RUb0RhdGFVUkwoY2FudmFzLCBj
dHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAnIzAwZic7CisgICAg
ICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCA1MCk7CisgICAgICAgICAgICBjdHguZmls
bFN0eWxlID0gJyMwZmYnOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDMsIDEwMCwgMSk7
CisgICAgICAgICAgICAvLyBDaGVjayBmb3IgSlBFRyBzdXBwb3J0IGZpcnN0CisgICAgICAgICAg
ICB2YXIgZGF0YSA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKTsKKyAgICAgICAgICAg
IGlmICghZGF0YS5tYXRjaCgvXmRhdGE6aW1hZ2VcL2pwZWdbOyxdLykpIHsKKyAgICAgICAgICAg
ICAgICBfYXNzZXJ0KHRydWUsICJ0cnVlIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIF9hc3NlcnRTYW1lKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAxMCks
IGRhdGEsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMTApIiwgImRhdGEiKTsKKyAg
ICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywg
LTEwKSwgZGF0YSwgImNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAtMTApIiwgImRhdGEi
KTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9q
cGVnJywgMS4wMSksIGRhdGEsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMS4wMSki
LCAiZGF0YSIpOworICAgICAgICAgICAgICAgIF9hc3NlcnRTYW1lKGNhbnZhcy50b0RhdGFVUkwo
J2ltYWdlL2pwZWcnLCAtMC4wMSksIGRhdGEsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVn
JywgLTAuMDEpIiwgImRhdGEiKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIF9hc3Nl
cnQoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEpLmxlbmd0aCA+PSBjYW52YXMudG9E
YXRhVVJMKCdpbWFnZS9qcGVnJywgMC45KS5sZW5ndGgsICJjYW52YXMudG9EYXRhVVJMKCdpbWFn
ZS9qcGVnJywgMSkubGVuZ3RoID49IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAwLjkp
Lmxlbmd0aCIpOworICAgICAgICAgICAgICAgIF9hc3NlcnQoY2FudmFzLnRvRGF0YVVSTCgnaW1h
Z2UvanBlZycsIDApLmxlbmd0aCA8PSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMC4x
KS5sZW5ndGgsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMCkubGVuZ3RoIDw9IGNh
bnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAwLjEpLmxlbmd0aCIpOworICAgICAgICAgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIF9hZGRUZXN0KHRlc3RUb0RhdGFVUkwpOworICAgIDwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+CisgICAgPGNhbnZhcyBpZD0iYyIgd2lkdGg9IjEwMCIgaGVpZ2h0
PSI1MCI+PC9jYW52YXM+CisgICAgPHAgaWQ9ImQiPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0
YVVSTC1qcGVnLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFz
dC9jYW52YXMvdG9EYXRhVVJMLWpwZWcuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjU3IEBA
CitmdW5jdGlvbiBfdmFsVG9TdHJpbmcodmFsKQoreworCWlmICh2YWwgPT09IHVuZGVmaW5lZCB8
fCB2YWwgPT09IG51bGwpCisJCXJldHVybiAnWycgKyB0eXBlb2YodmFsKSArICddJzsKKwlyZXR1
cm4gdmFsLnRvU3RyaW5nKCkgKyAnWycgKyB0eXBlb2YodmFsKSArICddJzsKK30KKwordmFyIF9o
ZXgyZGVjX3RhYmxlID0geworCTA6MCwgMToxLCAyOjIsIDM6MywgNDo0LCA1OjUsIDY6NiwgNzo3
LCA4OjgsIDk6OSwKKwlhOjEwLCBiOjExLCBjOjEyLCBkOjEzLCBlOjE0LCBmOjE1LAorCUE6MTAs
IEI6MTEsIEM6MTIsIEQ6MTMsIEU6MTQsIEY6MTUKK307CitmdW5jdGlvbiBfaGV4MmRlYyhoZXgp
Cit7CisJcmV0dXJuIF9oZXgyZGVjX3RhYmxlW2hleC5jaGFyQXQoMCldKjE2ICsgX2hleDJkZWNf
dGFibGVbaGV4LmNoYXJBdCgxKV07Cit9CisKK3ZhciBfZmFpbGVkID0gZmFsc2U7Cit2YXIgX2Fz
c2VydGVkID0gZmFsc2U7CitmdW5jdGlvbiBfd2Fybih0ZXh0KQoreworCWRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdkJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKSku
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpOworfQorZnVuY3Rpb24g
X2ZhaWwodGV4dCkKK3sKKwlfd2Fybih0ZXh0KTsKKwlfZmFpbGVkID0gdHJ1ZTsKK30KKworZnVu
Y3Rpb24gX2Fzc2VydChjb25kLCB0ZXh0KQoreworCV9hc3NlcnRlZCA9IHRydWU7CisJaWYgKCEg
Y29uZCkKKwkJX2ZhaWwoJ0ZhaWxlZCBhc3NlcnRpb246ICcgKyB0ZXh0KTsKK30KKworZnVuY3Rp
b24gX2Fzc2VydFNhbWUoYSwgYiwgdGV4dF9hLCB0ZXh0X2IpCit7CisJX2Fzc2VydGVkID0gdHJ1
ZTsKKwlpZiAoYSAhPT0gYikKKwkJX2ZhaWwoJ0ZhaWxlZCBhc3NlcnRpb24gJyArIHRleHRfYSAr
ICcgPT09ICcgKyB0ZXh0X2IgKworCQkJCScgKGdvdCAnICsgX3ZhbFRvU3RyaW5nKGEpICsgJywg
ZXhwZWN0ZWQgJyArIF92YWxUb1N0cmluZyhiKSArICcpJyk7Cit9CisKK2Z1bmN0aW9uIF9hc3Nl
cnREaWZmZXJlbnQoYSwgYiwgdGV4dF9hLCB0ZXh0X2IpCit7CisJX2Fzc2VydGVkID0gdHJ1ZTsK
KwlpZiAoYSA9PT0gYikKKwkJX2ZhaWwoJ0ZhaWxlZCBhc3NlcnRpb24gJyArIHRleHRfYSArICcg
IT09ICcgKyB0ZXh0X2IgKworCQkJCScgKGdvdCAnICsgX3ZhbFRvU3RyaW5nKGEpICsgJywgZXhw
ZWN0ZWQgbm90ICcgKyBfdmFsVG9TdHJpbmcoYikgKyAnKScpOworfQorCitmdW5jdGlvbiBfYXNz
ZXJ0RXF1YWwoYSwgYiwgdGV4dF9hLCB0ZXh0X2IpCit7CisJX2Fzc2VydGVkID0gdHJ1ZTsKKwlp
ZiAoYSAhPSBiKQorCQlfZmFpbCgnRmFpbGVkIGFzc2VydGlvbiAnICsgdGV4dF9hICsgJyA9PSAn
ICsgdGV4dF9iICsKKwkJCQknIChnb3QgJyArIF92YWxUb1N0cmluZyhhKSArICcsIGV4cGVjdGVk
ICcgKyBfdmFsVG9TdHJpbmcoYikgKyAnKScpOworfQorCitmdW5jdGlvbiBfYXNzZXJ0TWF0Y2go
YSwgYiwgdGV4dF9hLCB0ZXh0X2IpCit7CisJX2Fzc2VydGVkID0gdHJ1ZTsKKwlpZiAoISBhLm1h
dGNoKGIpKQorCQlfZmFpbCgnRmFpbGVkIGFzc2VydGlvbiAnICsgdGV4dF9hICsgJyBtYXRjaGVz
ICcgKyB0ZXh0X2IgKworCQkJCScgKGdvdCAnICsgX3ZhbFRvU3RyaW5nKGEpICsgJyknKTsKK30K
KworCit2YXIgX21hbnVhbF9jaGVjayA9IGZhbHNlOworCitmdW5jdGlvbiBfcmVxdWlyZU1hbnVh
bENoZWNrKCkKK3sKKwlfbWFudWFsX2NoZWNrID0gdHJ1ZTsKK30KKworZnVuY3Rpb24gX2NyYXNo
KCkKK3sKKwlfZmFpbCgnQWJvcnRlZCBkdWUgdG8gcHJlZGljdGVkIGNyYXNoJyk7Cit9CisKK3Zh
ciBfZ2V0SW1hZ2VEYXRhQ2FsaWJyYXRlZCA9IGZhbHNlOwordmFyIF9nZXRJbWFnZURhdGFJc1By
ZW11bCwgX2dldEltYWdlRGF0YUlzQkdSQTsKKworZnVuY3Rpb24gX2dldFBpeGVsKGNhbnZhcywg
eCx5KQoreworCXZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKwlpZiAoY3R4ICYm
IHR5cGVvZihjdHguZ2V0SW1hZ2VEYXRhKSAhPSAndW5kZWZpbmVkJykKKwl7CisJCXRyeSB7CisJ
CQl2YXIgaW1nZGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoeCwgeSwgMSwgMSk7CisJCX0gY2F0Y2gg
KGUpIHsKKwkJCS8vIHByb2JhYmx5IGEgc2VjdXJpdHkgZXhjZXB0aW9uIGNhdXNlZCBieSBoYXZp
bmcgZHJhd24KKwkJCS8vIGRhdGE6IFVSTHMgb250byB0aGUgY2FudmFzCisJCQlpbWdkYXRhID0g
bnVsbDsKKwkJfQorCQlpZiAoaW1nZGF0YSkKKwkJeworCQkJLy8gV29yayBhcm91bmQgZ2V0SW1h
Z2VEYXRhIGJ1Z3MsIHNpbmNlIHdlIHdhbnQgdGhlIG90aGVyIHRlc3RzIHRvCisJCQkvLyBjYXJy
eSBvbiB3b3JraW5nIGFzIHdlbGwgYXMgcG9zc2libGUKKwkJCWlmICghIF9nZXRJbWFnZURhdGFD
YWxpYnJhdGVkKQorCQkJeworCQkJCXZhciBjMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Nh
bnZhcycpOworCQkJCWMyLndpZHRoID0gYzIuaGVpZ2h0ID0gMTsKKwkJCQl2YXIgY3R4MiA9IGMy
LmdldENvbnRleHQoJzJkJyk7CisJCQkJY3R4Mi5maWxsU3R5bGUgPSAncmdiYSgwLCAyNTUsIDI1
NSwgMC41KSc7CisJCQkJY3R4Mi5maWxsUmVjdCgwLCAwLCAxLCAxKTsKKwkJCQl2YXIgZGF0YTIg
PSBjdHgyLmdldEltYWdlRGF0YSgwLCAwLCAxLCAxKS5kYXRhOworCisJCQkJLy8gRmlyZWZveCBy
ZXR1cm5zIHByZW11bHRpcGxpZWQgYWxwaGEKKworCQkJCWlmIChkYXRhMlsxXSA+IDEwMCAmJiBk
YXRhMlsxXSA8IDE1MCkKKwkJCQkJX2dldEltYWdlRGF0YUlzUHJlbXVsID0gdHJ1ZTsKKwkJCQll
bHNlCisJCQkJCV9nZXRJbWFnZURhdGFJc1ByZW11bCA9IGZhbHNlOworCisJCQkJLy8gT3BlcmEg
TWluaSA0IEJldGEgcmV0dXJucyBCR1JBIGluc3RlYWQgb2YgUkdCQQorCisJCQkJaWYgKGRhdGEy
WzBdID4gMjUwICYmIGRhdGEyWzJdIDwgNSkKKwkJCQkJX2dldEltYWdlRGF0YUlzQkdSQSA9IHRy
dWU7CisJCQkJZWxzZQorCQkJCQlfZ2V0SW1hZ2VEYXRhSXNCR1JBID0gZmFsc2U7CisKKwkJCQlf
Z2V0SW1hZ2VEYXRhQ2FsaWJyYXRlZCA9IHRydWU7CisJCQl9CisKKwkJCS8vIFVuZG8gdGhlIEJH
UkEgZmxpcHBpbmcKKwkJCXZhciByZ2JhID0gKF9nZXRJbWFnZURhdGFJc0JHUkEKKwkJCQk/IFsg
aW1nZGF0YS5kYXRhWzJdLCBpbWdkYXRhLmRhdGFbMV0sIGltZ2RhdGEuZGF0YVswXSwgaW1nZGF0
YS5kYXRhWzNdIF0KKwkJCQk6IFsgaW1nZGF0YS5kYXRhWzBdLCBpbWdkYXRhLmRhdGFbMV0sIGlt
Z2RhdGEuZGF0YVsyXSwgaW1nZGF0YS5kYXRhWzNdIF0pOworCisJCQlpZiAoISBfZ2V0SW1hZ2VE
YXRhSXNQcmVtdWwpCisJCQkJcmV0dXJuIHJnYmE7CisKKwkJCS8vIFVuZG8gdGhlIHByZW11bHRp
cGx5aW5nCisJCQlpZiAocmdiYVszXSA9PSAwKQorCQkJCXJldHVybiBbIDAsIDAsIDAsIDAgXTsK
KwkJCWVsc2UKKwkJCXsKKwkJCQl2YXIgYSA9IHJnYmFbM10gLyAyNTU7CisJCQkJcmV0dXJuIFsK
KwkJCQkJTWF0aC5yb3VuZChyZ2JhWzBdL2EpLAorCQkJCQlNYXRoLnJvdW5kKHJnYmFbMV0vYSks
CisJCQkJCU1hdGgucm91bmQocmdiYVsyXS9hKSwKKwkJCQkJcmdiYVszXQorCQkJCV07CisJCQl9
CisJCX0KKwl9CisKKwl0cnkgeyBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnb3BlcmEtMmRnYW1l
Jyk7IH0gY2F0Y2ggKGUpIHsgLyogRmlyZWZveCB0aHJvd3MgKi8gfQorCWlmIChjdHggJiYgdHlw
ZW9mKGN0eC5nZXRQaXhlbCkgIT0gJ3VuZGVmaW5lZCcpCisJeworCQl0cnkgeworCQkJdmFyIGMg
PSBjdHguZ2V0UGl4ZWwoeCwgeSk7CisJCX0gY2F0Y2ggKGUpIHsKKwkJCS8vIHByb2JhYmx5IGEg
c2VjdXJpdHkgZXhjZXB0aW9uIGNhdXNlZCBieSBoYXZpbmcgZHJhd24KKwkJCS8vIGRhdGE6IFVS
THMgb250byB0aGUgY2FudmFzCisJCQljID0gbnVsbDsKKwkJfQorCQlpZiAoYykKKwkJeworCQkJ
dmFyIG1hdGNoZXMgPSAvXnJnYmFcKChcZCspLCAoXGQrKSwgKFxkKyksIChbXGRcLl0rKVwpJC8u
ZXhlYyhjKTsKKwkJCWlmIChtYXRjaGVzKQorCQkJCXJldHVybiBbIG1hdGNoZXNbMV0sIG1hdGNo
ZXNbMl0sIG1hdGNoZXNbM10sIE1hdGgucm91bmQobWF0Y2hlc1s0XSoyNTUpIF07CisJCQltYXRj
aGVzID0gL14jKC4uKSguLikoLi4pJC8uZXhlYyhjKTsKKwkJCWlmIChtYXRjaGVzKQorCQkJCXJl
dHVybiBbIF9oZXgyZGVjKG1hdGNoZXNbMV0pLCBfaGV4MmRlYyhtYXRjaGVzWzJdKSwgX2hleDJk
ZWMobWF0Y2hlc1szXSksIDI1NSBdOworCQl9CisJfQorCS8vX3dhcm4oIihDYW4ndCB0ZXN0IHBp
eGVsIHZhbHVlKSIpOworCV9tYW51YWxfY2hlY2sgPSB0cnVlOworCXJldHVybiB1bmRlZmluZWQ7
Cit9CisKK2Z1bmN0aW9uIF9hc3NlcnRQaXhlbChjYW52YXMsIHgseSwgcixnLGIsYSwgcG9zLCBj
b2xvdXIpCit7CisJX2Fzc2VydGVkID0gdHJ1ZTsKKwl2YXIgYyA9IF9nZXRQaXhlbChjYW52YXMs
IHgseSk7CisJaWYgKGMgJiYgISAoY1swXSA9PSByICYmIGNbMV0gPT0gZyAmJiBjWzJdID09IGIg
JiYgY1szXSA9PSBhKSkKKwkJX2ZhaWwoJ0ZhaWxlZCBhc3NlcnRpb246IGdvdCBwaXhlbCBbJyAr
IGMgKyAnXSBhdCAoJyt4KycsJyt5KycpLCBleHBlY3RlZCBbJytyKycsJytnKycsJytiKycsJyth
KyddJyk7Cit9CisKK2Z1bmN0aW9uIF9hc3NlcnRQaXhlbEFwcHJveChjYW52YXMsIHgseSwgcixn
LGIsYSwgcG9zLCBjb2xvdXIsIHRvbGVyYW5jZSkKK3sKKwlfYXNzZXJ0ZWQgPSB0cnVlOworCXZh
ciBjID0gX2dldFBpeGVsKGNhbnZhcywgeCx5KTsKKwlpZiAoYykKKwl7CisJCXZhciBkaWZmID0g
TWF0aC5tYXgoTWF0aC5hYnMoY1swXS1yKSwgTWF0aC5hYnMoY1sxXS1nKSwgTWF0aC5hYnMoY1sy
XS1iKSwgTWF0aC5hYnMoY1szXS1hKSk7CisJCWlmIChkaWZmID4gdG9sZXJhbmNlKQorCQkJX2Zh
aWwoJ0ZhaWxlZCBhc3NlcnRpb246IGdvdCBwaXhlbCBbJyArIGMgKyAnXSBhdCAoJyt4KycsJyt5
KycpLCBleHBlY3RlZCBbJytyKycsJytnKycsJytiKycsJythKyddICsvLSAnK3RvbGVyYW5jZSk7
CisJfQorfQorCitmdW5jdGlvbiBfYWRkVGVzdCh0ZXN0KQoreworCXZhciBkZWZlcnJlZCA9IGZh
bHNlOworCXdpbmRvdy5kZWZlclRlc3QgPSBmdW5jdGlvbiAoKSB7IGRlZmVycmVkID0gdHJ1ZTsg
fTsKKwlmdW5jdGlvbiBlbmRUZXN0KCkKKwl7CisJCWlmIChfZmFpbGVkKSAvLyB0ZXN0IGZhaWxl
ZAorCQl7CisJCQlkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NOYW1lICs9ICcgZmFpbCc7
CisJCQl3aW5kb3cuX3Rlc3RTdGF0dXMgPSBbJ2ZhaWwnLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnZCcpLmlubmVySFRNTF07CisJCX0KKwkJZWxzZSBpZiAoX21hbnVhbF9jaGVjayB8fCAhX2Fz
c2VydGVkKQorCQl7IC8vIHRlc3QgY2FzZSBleHBsaWNpdGx5IGFza2VkIGZvciBhIG1hbnVhbCBj
aGVjaywgb3Igbm8gYXV0b21hdGljIGFzc2VydGlvbnMgd2VyZSBwZXJmb3JtZWQKKwkJCWRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdkJykuaW5uZXJIVE1MICs9ICc8bGk+Q2Fubm90IGF1dG9tYXRp
Y2FsbHkgdmVyaWZ5IHJlc3VsdCc7CisJCQlkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NO
YW1lICs9ICcgbmVlZHNfY2hlY2snOworCQkJd2luZG93Ll90ZXN0U3RhdHVzID0gWydjaGVjaycs
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkJykuaW5uZXJIVE1MXTsKKwkJfQorCQllbHNlIC8v
IHRlc3Qgc3VjY2VlZGVkCisJCXsKKwkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkJykuaW5u
ZXJIVE1MID0gJ1Bhc3NlZCc7CisJCQlkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NOYW1l
ICs9ICcgcGFzcyc7CisJCQl3aW5kb3cuX3Rlc3RTdGF0dXMgPSBbJ3Bhc3MnLCBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnZCcpLmlubmVySFRNTF07CisJCX0KKwkJaWYgKHdpbmRvdy5ub3RpZnlF
bmRUZXN0KQorCQkJbm90aWZ5RW5kVGVzdCgpOworCisJfQorCXdpbmRvdy5lbmRUZXN0ID0gZW5k
VGVzdDsKKwl3aW5kb3cud3JhcEZ1bmN0aW9uID0gZnVuY3Rpb24gKGYpCisJeworCQlyZXR1cm4g
ZnVuY3Rpb24oKQorCQl7CisJCQl0cnkKKwkJCXsKKwkJCQlmLmFwcGx5KG51bGwsIGFyZ3VtZW50
cyk7CisJCQl9CisJCQljYXRjaCAoZSkKKwkJCXsKKwkJCQlfZmFpbCgnQWJvcnRlZCB3aXRoIGV4
Y2VwdGlvbjogJyArIGUubWVzc2FnZSk7CisJCQl9CisJCQllbmRUZXN0KCk7CisJCX0KKwl9CisK
Kwl3aW5kb3cub25sb2FkID0gZnVuY3Rpb24gKCkKKwl7CisJCXRyeQorCQl7CisJCQl2YXIgY2Fu
dmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2MnKTsKKwkJCXZhciBjdHggPSBjYW52YXMu
Z2V0Q29udGV4dCgnMmQnKTsKKwkJCXRlc3QoY2FudmFzLCBjdHgpOworCQl9CisJCWNhdGNoIChl
KQorCQl7CisJCQlfZmFpbCgnQWJvcnRlZCB3aXRoIGV4Y2VwdGlvbjogJyArIGUubWVzc2FnZSk7
CisJCQlkZWZlcnJlZCA9IGZhbHNlOyAvLyBjYW5jZWwgYW55IGRlZmVyZW5jZQorCQl9CisKKwkJ
aWYgKCEgZGVmZXJyZWQpCisJCQllbmRUZXN0KCk7CisJfTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54253</attachid>
            <date>2010-04-25 21:23:16 -0700</date>
            <delta_ts>2010-04-26 09:55:06 -0700</delta_ts>
            <desc>Make the patch upstream</desc>
            <filename>toDataURL-jpeg-quality-upstream.patch</filename>
            <type>text/plain</type>
            <size>37547</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDU4MjMx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDQt
MjUgIExlbyBZYW5nICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBjYW52YXMudG9EYXRhVVJM
KHR5cGUsIHF1YWxpdHksIC4uLikgdG8gbGV0IGl0IHN1cHBvcnQgcXVhbGl0eSBwYXJhbWV0ZXIu
IAorICAgICAgICBBbmQgaW1wbGVtZW50IGl0IGluIFF0IHByb3RpbmcuIAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzczMDQKKworICAgICAgICAqIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAg
ICogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5j
cHA6CisgICAgICAgICogV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHA6CisgICAgICAgICog
V2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5oOgorICAgICAgICAqIFdlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oOgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwOgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgICogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcDoKKyAgICAgICAg
KiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorCiAyMDEw
LTA0LTIxICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNF
bGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1ODIzMSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWpp
bmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM0LDYgKzM1LDcgQEAKICNpbmNsdWRlICJXZWJHTENvbnRleHRBdHRyaWJ1
dGVzLmgiCiAjZW5kaWYKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtODEsNCArODMsMjIgQEAg
SlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KAogICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihjYW52YXMtPmdldENvbnRleHQodXN0
cmluZ1RvU3RyaW5nKGNvbnRleHRJZCksIGF0dHJzLmdldCgpKSkpOwogfQogCitKU1ZhbHVlIEpT
SFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCit7CisgICAgY29uc3QgU3RyaW5nJiB0eXBlID0gdmFsdWVUb1N0cmluZ1dpdGhV
bmRlZmluZWRPck51bGxDaGVjayhleGVjLCBhcmdzLmF0KDApKTsKKyAgICBkb3VibGUgcXVhbGl0
eSA9IDEuMDsKKyAgICBpZiAoYXJncy5zaXplKCkgPiAxKSB7CisgICAgICAgIEpTVmFsdWUgdiA9
IGFyZ3MuYXQoMSk7CisgICAgICAgIGlmICh2LmlzTnVtYmVyKCkpCisgICAgICAgICAgICBxdWFs
aXR5ID0gdi50b051bWJlcihleGVjKTsKKyAgICAgICAgaWYgKHF1YWxpdHkgPiAxLjAgfHwgcXVh
bGl0eSA8IDAuMCB8fCAhaXNmaW5pdGUocXVhbGl0eSkpCisgICAgICAgICAgICBxdWFsaXR5ID0g
MS4wOworICAgIH0KKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gc3RhdGljX2Nhc3Q8
SFRNTENhbnZhc0VsZW1lbnQqPihpbXBsKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZyhleGVjLCBjYW52YXMtPnRvRGF0YVVS
TCh0eXBlLCBxdWFsaXR5LCBlYykpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVu
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDU4MjMxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWpp
bmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCkBAIC0zNCw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ2FudmFzQ29udGV4dEF0
dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIK
ICNpbmNsdWRlICJWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgpAQCAtNDIsNiArNDQsNyBA
QAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAjaW5jbHVkZSAiVjhXZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaCIKICNlbmRpZgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtODksNCArOTIsMjIgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRN
TENhbnZhc0VsZW1lbgogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKK3Y4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOEhUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkxDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIGRvdWJsZSBxdWFsaXR5ID0gMS4wOworICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gMSkgeworICAgICAgICBpZiAoYXJnc1sxXS0+SXNOdW1iZXIo
KSkKKyAgICAgICAgICAgIHF1YWxpdHkgPSBhcmdzWzFdLT5OdW1iZXJWYWx1ZSgpOworICAgICAg
ICBpZiAocXVhbGl0eSA+IDEuMCB8fCBxdWFsaXR5IDwgMC4wIHx8ICFpc2Zpbml0ZShxdWFsaXR5
KSkKKyAgICAgICAgICAgIHF1YWxpdHkgPSAxLjA7CisgICAgfQorICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICBIVE1MQ2FudmFzRWxlbWVudCog
Y2FudmFzID0gVjhIVE1MQ2FudmFzRWxlbWVudDo6dG9OYXRpdmUoaG9sZGVyKTsKKyAgICBTdHJp
bmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBTdHJpbmcgcmVzdWx0ID0gY2FudmFzLT50b0RhdGFVUkwodHlwZSwgcXVhbGl0
eSwgZWMpOworICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CisgICAgcmV0dXJuIHY4
U3RyaW5nT3JVbmRlZmluZWQocmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vQ2FudmFzU3VyZmFjZS5jcHAJKHJldmlzaW9uIDU4MjMxKQorKysgV2ViQ29yZS9kb20v
Q2FudmFzU3VyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2
NSw3IEBAIHZvaWQgQ2FudmFzU3VyZmFjZTo6c2V0U3VyZmFjZVNpemUoY29uc3QKICAgICBtX2lt
YWdlQnVmZmVyLmNsZWFyKCk7CiB9CiAKLVN0cmluZyBDYW52YXNTdXJmYWNlOjp0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgQ2FudmFz
U3VyZmFjZTo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSBxdWFsaXR5
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIW1fb3JpZ2luQ2xlYW4pIHsKICAgICAg
ICAgZWMgPSBTRUNVUklUWV9FUlI7CkBAIC03OCw3ICs3OSw3IEBAIFN0cmluZyBDYW52YXNTdXJm
YWNlOjp0b0RhdGFVUkwoY29uc3QgU3QKICAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkgfHwgIU1J
TUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVU
eXBlKSkKICAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwoImltYWdlL3BuZyIpOwog
Ci0gICAgcmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwobWltZVR5cGUpOworICAgIHJldHVybiBi
dWZmZXIoKS0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5KTsKIH0KIAogdm9pZCBDYW52YXNT
dXJmYWNlOjp3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmKQpJbmRleDogV2ViQ29yZS9kb20vQ2Fu
dmFzU3VyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaAko
cmV2aXNpb24gNTgyMzEpCisrKyBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9i
aWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKIAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KQEAgLTQxLDcgKzQzLDYgQEAgY2xhc3MgRmxvYXRTaXplOwogY2xhc3MgR3JhcGhpY3ND
b250ZXh0OwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRQb2ludDsKLWNsYXNzIFN0cmlu
ZzsKIAogY2xhc3MgQ1NTU3R5bGVTZWxlY3RvcjsKIGNsYXNzIFJlbmRlckJveDsKQEAgLTU4LDcg
KzU5LDkgQEAgcHVibGljOgogICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53
aWR0aCgpOyB9CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQo
KTsgfQogCi0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNl
cHRpb25Db2RlJik7CisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBkb3VibGUgcXVhbGl0eSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgU3RyaW5nIHRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gdG9E
YXRhVVJMKG1pbWVUeXBlLCAxLjAsIGVjKTsgfQogCiAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVu
dC5pZGwJKHJldmlzaW9uIDU4MjMxKQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzMs
OCBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIGF0dHJpYnV0ZSBsb25nIHdpZHRoOwogICAgICAg
ICBhdHRyaWJ1dGUgbG9uZyBoZWlnaHQ7CiAKLSAgICAgICAgRE9NU3RyaW5nIHRvRGF0YVVSTChp
biBbQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHR5cGUpCisg
ICAgICAgIC8vIEhUTUw1IGRyYWZ0IHNwZWM6IERPTVN0cmluZyB0b0RhdGFVUkwoRE9NU3RyaW5n
IHR5cGUsIC4uLik7CisgICAgICAgIFtDdXN0b21dIERPTVN0cmluZyB0b0RhdGFVUkwoaW4gW0Nv
bnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB0eXBlKQogICAgICAg
ICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9PQkpF
Q1RJVkVfQykgfHwgIUxBTkdVQUdFX09CSkVDVElWRV9DCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiA1ODIzMSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAo
QmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODIsNyArODMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZvaWQgcHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0YSosIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpOwogICAgICAgICB2b2lk
IHB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCk7CiAKLSAgICAgICAgU3RyaW5nIHRv
RGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHRv
RGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUgcXVhbGl0eSA9IDEuMCkgY29u
c3Q7CiAjaWYgIVBMQVRGT1JNKENHKQogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9CiAgICAgICAgIHZvaWQg
dHJhbnNmb3JtQ29sb3JTcGFjZShJbWFnZUNvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgSW1hZ2VD
b2xvclNwYWNlIGRzdENvbG9yU3BhY2UpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA1ODIzMSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgzLDcg
KzI4NCw3IEBAIHN0YXRpYyBjYWlyb19zdGF0dXNfdCB3cml0ZUZ1bmN0aW9uKHZvaWQKICAgICBy
ZXR1cm4gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7CiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6
OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUpIGNvbnN0CiB7CiAgICAg
Y2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4dCgpLT5wbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgaWYgKCFpbWFnZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkocmV2aXNpb24gNTgyMzEpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2gg
TW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNzUsNyArMjc2LDcgQEAgc3RhdGljIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gdXRpRnJvbU1JTQogI2VuZGlmCiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZl
cjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VC
dWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZv
ckVuY29kaW5nKG1pbWVUeXBlKSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcAkocmV2aXNpb24gNTgyMzEpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBT
dGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgorICogQ29weXJpZ2h0IChDKSAyMDEw
IFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzA5LDcgKzMxMCw3IEBAIHZvaWQgSW1h
Z2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZUQKICAgICBwdXRJbWFnZURhdGEoc291cmNl
LCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSwgbV9zaXplLCB0cnVlKTsKIH0KIAotU3Ry
aW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QK
K1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRv
dWJsZSkgY29uc3QKIHsKICAgICBpZiAoIU1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1h
Z2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSkKICAgICAgICAgcmV0dXJuICJkYXRhOiwi
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQu
Y3BwCShyZXZpc2lvbiA1ODIzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1h
Z2VCdWZmZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2NSw5ICsyNjYsMTAgQEAg
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRAogLy8gV2UgZ2V0IGEgbWlt
ZVR5cGUgaGVyZSBidXQgUUltYWdlV3JpdGVyIGRvZXMgbm90IHN1cHBvcnQgbWltZXR5cGVzIGJ1
dAogLy8gb25seSBmb3JtYXRzIChwbmcsIGdpZiwganBlZy4uLiwgeHBtKS4gU28gYXNzdW1lIHdl
IGdldCBpbWFnZS8gYXMgaW1hZ2UKIC8vIG1pbWV0eXBlcyBhbmQgdGhlbiByZW1vdmUgdGhlIGlt
YWdlLyB0byBnZXQgdGhlIFF0IGZvcm1hdC4KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0
YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUgcXVhbGl0eSkgY29uc3QKIHsKICAg
ICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5j
b2RpbmcobWltZVR5cGUpKTsKKyAgICBBU1NFUlQoMC4wIDw9IHF1YWxpdHkgJiYgcXVhbGl0eSA8
PSAxLjApOwogCiAgICAgaWYgKCFtaW1lVHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKSkKICAgICAg
ICAgcmV0dXJuICJkYXRhOiwiOwpAQCAtMjc3LDcgKzI3OSw3IEBAIFN0cmluZyBJbWFnZUJ1ZmZl
cjo6dG9EYXRhVVJMKGNvbnN0IFN0cmkKICAgICBRQnVmZmVyIGJ1ZmZlcigmZGF0YSk7CiAgICAg
YnVmZmVyLm9wZW4oUUJ1ZmZlcjo6V3JpdGVPbmx5KTsKIAotICAgIGlmICghbV9kYXRhLm1fcGl4
bWFwLnNhdmUoJmJ1ZmZlciwgbWltZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1hZ2UiKS51dGY4
KCkuZGF0YSgpKSkKKyAgICBpZiAoIW1fZGF0YS5tX3BpeG1hcC5zYXZlKCZidWZmZXIsIG1pbWVU
eXBlLnN1YnN0cmluZyhzaXplb2YgImltYWdlIikudXRmOCgpLmRhdGEoKSwgcXVhbGl0eSoxMDAr
MC41KSkKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwogCiAgICAgYnVmZmVyLmNsb3NlKCk7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcAkocmV2aXNpb24gNTgyMzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAg
LTI2MCw3ICsyNjEsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VE
CiAgICAgcHV0SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVz
dFBvaW50LCAqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksIG1fc2l6ZSk7
CiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0
CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmLCBkb3VibGUpIGNv
bnN0CiB7CiAgICAgLy8gRW5jb2RlIHRoZSBpbWFnZSBpbnRvIGEgdmVjdG9yLgogICAgIFZlY3Rv
cjx1bnNpZ25lZCBjaGFyPiBwbmdFbmNvZGVkRGF0YTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcAkocmV2aXNpb24g
NTgyMzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2lu
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjE1LDcgKzIxNiw3IEBAIHZvaWQg
SW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZUQKICAgICBwdXRJbWFnZURhdGE8dHJ1
ZT4oc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YS5tX2JpdG1hcC5nZXQoKSk7
CiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBkb3VibGUpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2RhdGEubV9iaXRtYXAtPmJ5dGVz
KCkpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAkocmV2aXNpb24gNTgyMzEpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmll
ciA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2gg
TW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NSw3ICs3Niw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6
OnB1dFByZW11bHRpcGxpZWRJbWFnZUQKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1TdHJp
bmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmKSBjb25zdAorU3RyaW5nIElt
YWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgZG91YmxlKSBjb25zdAogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIFN0cmluZygpOwpJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gNTgyMzEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyMyBAQAorMjAxMC0wNC0yNSAgTGVvIFlhbmcgIDxsZW8ueWFuZ0B0b3JjaG1vYmlsZS5j
b20uY24+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rml4IGNhbnZhcy50b0RhdGFVUkwodHlwZSwgcXVhbGl0eSwgLi4uKSB0byBsZXQgaXQgc3VwcG9y
dCBxdWFsaXR5IHBhcmFtZXRlci4gCisgICAgICAgIEFuZCBpbXBsZW1lbnQgaXQgaW4gUXQgcHJv
dGluZy4gCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NzMwNAorCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWct
YWxwaGEtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2Nh
bnZhcy90b0RhdGFVUkwtanBlZy1hbHBoYS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1wcmltYXJ5Y29sb3JzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpw
ZWctcHJpbWFyeWNvbG9ycy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0
L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LWJhc2ljLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0
eS1iYXNpYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90
b0RhdGFVUkwtanBlZy1xdWFsaXR5LW5vdG51bWJlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktbm90
bnVtYmVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3Rv
RGF0YVVSTC1qcGVnLXF1YWxpdHktb3V0c2lkZXJhbmdlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1v
dXRzaWRlcmFuZ2UuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9jYW52
YXMvdG9EYXRhVVJMLWpwZWcuanM6IEFkZGVkLgorCiAyMDEwLTA0LTI1ICBBbmRyZXkgS29zeWFr
b3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0
aC4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1q
cGVnLWFscGhhLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1hbHBoYS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwt
anBlZy1hbHBoYS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1Bhc3Nl
ZApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpw
ZWctYWxwaGEuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0
L2NhbnZhcy90b0RhdGFVUkwtanBlZy1hbHBoYS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0
IHNyYz0idG9EYXRhVVJMLWpwZWcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgd2luZG93Lm5vdGlmeUVuZFRlc3Qg
PSBmdW5jdGlvbiAoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiB0ZXN0VG9EYXRhVVJMKGNh
bnZhcywgY3R4KQorICAgICAgICB7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJ3JnYmEo
MTI4LCAyNTUsIDEyOCwgMC41KSc7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgMTAw
LCA1MCk7CisgICAgICAgICAgICBjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3Rp
bmF0aW9uLW92ZXInOyAvLyBzaG91bGQgYmUgaWdub3JlZCBieSB0b0RhdGFVUkwKKyAgICAgICAg
ICAgIHZhciBkYXRhID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpOworICAgICAgICAg
ICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdzb3VyY2Utb3Zlcic7CisgICAgICAg
ICAgICBpZiAoIWRhdGEubWF0Y2goL15kYXRhOmltYWdlXC9qcGVnWzssXS8pKSB7CisgICAgICAg
ICAgICAgICAgX2Fzc2VydCh0cnVlLCAidHJ1ZSIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyNmMDAnOworICAgICAgICAgICAgICAgIGN0
eC5maWxsUmVjdCgwLCAwLCAxMDAsIDUwKTsKKyAgICAgICAgICAgICAgICB2YXIgaW1nID0gbmV3
IEltYWdlKCk7CisgICAgICAgICAgICAgICAgZGVmZXJUZXN0KCk7CisgICAgICAgICAgICAgICAg
aW1nLm9ubG9hZCA9IHdyYXBGdW5jdGlvbihmdW5jdGlvbiAoKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApOworICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgX2Fzc2VydFBpeGVsQXBwcm94KGNhbnZh
cywgNTAsMjUsIDYzLDEyNyw2MywyNTUsICI1MCwyNSIsICI2MywxMjcsNjMsMjU1IiwgOCk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGRhdGE7CisgICAg
ICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIF9hZGRUZXN0KHRlc3RUb0RhdGFVUkwpOworICAgIDwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPGNhbnZhcyBpZD0iYyIgd2lkdGg9IjEwMCIg
aGVpZ2h0PSI1MCI+PC9jYW52YXM+CisgICAgPHAgaWQ9ImQiPjwvcD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1q
cGVnLXByaW1hcnljb2xvcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXByaW1hcnljb2xvcnMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9j
YW52YXMvdG9EYXRhVVJMLWpwZWctcHJpbWFyeWNvbG9ycy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEgQEAKK1Bhc3NlZApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
ZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcHJpbWFyeWNvbG9ycy5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXBy
aW1hcnljb2xvcnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0
L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXByaW1hcnljb2xvcnMuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1MCBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0idG9E
YXRhVVJMLWpwZWcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgd2luZG93Lm5vdGlmeUVuZFRlc3QgPSBmdW5jdGlv
biAoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
KyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiB0ZXN0VG9EYXRhVVJMKGNhbnZhcywgY3R4
KQorICAgICAgICB7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyNmZjAnOworICAgICAg
ICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDI1LCA0MCk7CisgICAgICAgICAgICBjdHguZmlsbFN0
eWxlID0gJyMwZmYnOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDI1LCAwLCA1MCwgNDApOwor
ICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjMDBmJzsKKyAgICAgICAgICAgIGN0eC5maWxs
UmVjdCg3NSwgMCwgMjUsIDQwKTsKKyAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAnI2ZmZic7
CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgNDAsIDEwMCwgMTApOworICAgICAgICAgICAg
dmFyIGRhdGEgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJyk7IC8vIGl0IGlzIG9rYXkg
aWYgdGhpcyByZXR1cm5zIGEgUE5HIGluc3RlYWQKKyAgICAgICAgICAgIGN0eC5maWxsU3R5bGUg
PSAnI2YwMCc7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCA1MCk7CisgICAg
ICAgICAgICB2YXIgaW1nID0gbmV3IEltYWdlKCk7CisgICAgICAgICAgICBkZWZlclRlc3QoKTsK
KworICAgICAgICAgICAgaW1nLm9ubG9hZCA9IHdyYXBGdW5jdGlvbihmdW5jdGlvbiAoKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTsKKyAg
ICAgICAgICAgICAgICBfYXNzZXJ0UGl4ZWxBcHByb3goY2FudmFzLCAxMiwyMCwgMjU1LDI1NSww
LDI1NSwgIjEyLDIwIiwgIjI1NSwyNTUsMCwyNTUiLCA4KTsKKyAgICAgICAgICAgICAgICBfYXNz
ZXJ0UGl4ZWxBcHByb3goY2FudmFzLCA1MCwyMCwgMCwyNTUsMjU1LDI1NSwgIjUwLDIwIiwgIjAs
MjU1LDI1NSwyNTUiLCA4KTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0UGl4ZWxBcHByb3goY2Fu
dmFzLCA4NywyMCwgMCwwLDI1NSwyNTUsICI4NywyMCIsICIwLDAsMjU1LDI1NSIsIDgpOworICAg
ICAgICAgICAgICAgIF9hc3NlcnRQaXhlbEFwcHJveChjYW52YXMsIDUwLDQ1LCAyNTUsMjU1LDI1
NSwyNTUsICI1MCw0NSIsICIyNTUsMjU1LDI1NSwyNTUiLCA4KTsKKyAgICAgICAgICAgIH0pOwor
CisgICAgICAgICAgICBpbWcuc3JjID0gZGF0YTsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworICAgICAgICB9CisgICAgICAgIF9hZGRUZXN0KHRlc3RUb0RhdGFV
UkwpOworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPGNhbnZhcyBpZD0iYyIg
d2lkdGg9IjEwMCIgaGVpZ2h0PSI1MCI+PC9jYW52YXM+CisgICAgPHAgaWQ9ImQiPjwvcD4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFz
L3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktYmFzaWMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxp
dHktYmFzaWMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1Bhc3NlZApJbmRleDogTGF5b3V0VGVzdHMv
cGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0
YVVSTC1qcGVnLXF1YWxpdHktYmFzaWMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktYmFzaWMuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2Ny
aXB0IHNyYz0idG9EYXRhVVJMLWpwZWcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgd2luZG93Lm5vdGlmeUVuZFRl
c3QgPSBmdW5jdGlvbiAoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiB0ZXN0VG9EYXRhVVJM
KGNhbnZhcywgY3R4KQorICAgICAgICB7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyMw
MGYnOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgNTApOworICAgICAgICAg
ICAgY3R4LmZpbGxTdHlsZSA9ICcjMGZmJzsKKyAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAz
LCAxMDAsIDEpOworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIEpQRUcgc3VwcG9ydCBmaXJzdAor
ICAgICAgICAgICAgdmFyIGRhdGEgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJyk7Cisg
ICAgICAgICAgICBpZiAoIWRhdGEubWF0Y2goL15kYXRhOmltYWdlXC9qcGVnWzssXS8pKSB7Cisg
ICAgICAgICAgICAgICAgX2Fzc2VydCh0cnVlLCAidHJ1ZSIpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICB2YXIgZGF0YV9oaSA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdl
L2pwZWcnLCAwLjk5KTsKKyAgICAgICAgICAgICAgICB2YXIgZGF0YV9sbyA9IGNhbnZhcy50b0Rh
dGFVUkwoJ2ltYWdlL2pwZWcnLCAwLjAxKTsKKyAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxl
ID0gJyNmMDAnOworICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDUwKTsK
KyAgICAgICAgICAgICAgICBkZWZlclRlc3QoKTsKKyAgICAgICAgICAgICAgICB2YXIgaW1nX2hp
ID0gbmV3IEltYWdlKCk7CisgICAgICAgICAgICAgICAgaW1nX2hpLm9ubG9hZCA9IGZ1bmN0aW9u
ICgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2YXIgaW1nX2xvID0g
bmV3IEltYWdlKCk7CisgICAgICAgICAgICAgICAgICAgIGltZ19sby5vbmxvYWQgPSB3cmFwRnVu
Y3Rpb24oZnVuY3Rpb24gKCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWdfaGksIDAsIDAsIDUwLCA1MCwgMCwgMCwgNTAsIDUw
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nX2xvLCAwLCAwLCA1
MCwgNTAsIDUwLCAwLCA1MCwgNTApOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICBfYXNzZXJ0KGRhdGFfaGkubGVuZ3RoID4gZGF0YV9sby5sZW5ndGgs
ICJkYXRhX2hpLmxlbmd0aCA+IGRhdGFfbG8ubGVuZ3RoIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBfYXNzZXJ0UGl4ZWxBcHByb3goY2FudmFzLCAyNSwyNSwgMCwwLDI1NSwyNTUsICIyNSwy
NSIsICIwLDAsMjU1LDI1NSIsIDEyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9hc3NlcnRQ
aXhlbEFwcHJveChjYW52YXMsIDc1LDI1LCAwLDAsMjU1LDI1NSwgIjc1LDI1IiwgIjAsMCwyNTUs
MjU1IiwgMTIpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAg
aW1nX2xvLnNyYyA9IGRhdGFfbG87CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICBpbWdfaGkuc3JjID0gZGF0YV9oaTsKKworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IF9hZGRUZXN0KHRlc3RUb0RhdGFVUkwpOworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
CisgICAgPGNhbnZhcyBpZD0iYyIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI1MCI+PC9jYW52YXM+Cisg
ICAgPHAgaWQ9ImQiPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktbm90bnVtYmVyLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2Nh
bnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW5vdG51bWJlci1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwt
anBlZy1xdWFsaXR5LW5vdG51bWJlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEgQEAKK1Bhc3NlZApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMv
dG9EYXRhVVJMLWpwZWctcXVhbGl0eS1ub3RudW1iZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW5v
dG51bWJlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFz
dC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1ub3RudW1iZXIuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0NCBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0idG9E
YXRhVVJMLWpwZWcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgd2luZG93Lm5vdGlmeUVuZFRlc3QgPSBmdW5jdGlv
biAoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
KyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiB0ZXN0VG9EYXRhVVJMKGNhbnZhcywgY3R4
KQorICAgICAgICB7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyMwMGYnOworICAgICAg
ICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgNTApOworICAgICAgICAgICAgY3R4LmZpbGxT
dHlsZSA9ICcjMGZmJzsKKyAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAzLCAxMDAsIDEpOwor
ICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIEpQRUcgc3VwcG9ydCBmaXJzdAorICAgICAgICAgICAg
dmFyIGRhdGEgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJyk7CisgICAgICAgICAgICBp
ZiAoIWRhdGEubWF0Y2goL15kYXRhOmltYWdlXC9qcGVnWzssXS8pKSB7CisgICAgICAgICAgICAg
ICAgX2Fzc2VydCh0cnVlLCAidHJ1ZSIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgJ2JvZ3Vz
JyksIGRhdGEsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgJ2JvZ3VzJykiLCAiZGF0
YSIpOworICAgICAgICAgICAgICAgIF9hc3NlcnRTYW1lKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdl
L2pwZWcnLCB7fSksIGRhdGEsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywge30pIiwg
ImRhdGEiKTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9EYXRhVVJMKCdp
bWFnZS9qcGVnJywgbnVsbCksIGRhdGEsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywg
bnVsbCkiLCAiZGF0YSIpOworICAgICAgICAgICAgICAgIF9hc3NlcnRTYW1lKGNhbnZhcy50b0Rh
dGFVUkwoJ2ltYWdlL2pwZWcnLCB1bmRlZmluZWQpLCBkYXRhLCAiY2FudmFzLnRvRGF0YVVSTCgn
aW1hZ2UvanBlZycsIHVuZGVmaW5lZCkiLCAiZGF0YSIpOworICAgICAgICAgICAgICAgIF9hc3Nl
cnRTYW1lKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCB0cnVlKSwgZGF0YSwgImNhbnZh
cy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCB0cnVlKSIsICJkYXRhIik7CisgICAgICAgICAgICAg
ICAgX2Fzc2VydFNhbWUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsICcwLjAxJyksIGRh
dGEsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgJzAuMDEnKSIsICJkYXRhIik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBfYWRkVGVzdCh0ZXN0
VG9EYXRhVVJMKTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxjYW52YXMg
aWQ9ImMiIHdpZHRoPSIxMDAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorICAgIDxwIGlkPSJkIj48
L3A+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0
L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW91dHNpZGVyYW5nZS1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRh
VVJMLWpwZWctcXVhbGl0eS1vdXRzaWRlcmFuZ2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVh
bGl0eS1vdXRzaWRlcmFuZ2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBA
CitQYXNzZWQKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0
YVVSTC1qcGVnLXF1YWxpdHktb3V0c2lkZXJhbmdlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1vdXRz
aWRlcmFuZ2UuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zh
c3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktb3V0c2lkZXJhbmdlLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9
InRvRGF0YVVSTC1qcGVnLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgIHdpbmRvdy5ub3RpZnlFbmRUZXN0ID0gZnVu
Y3Rpb24gKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdFRvRGF0YVVSTChjYW52YXMs
IGN0eCkKKyAgICAgICAgeworICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjMDBmJzsKKyAg
ICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDUwKTsKKyAgICAgICAgICAgIGN0eC5m
aWxsU3R5bGUgPSAnIzBmZic7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMywgMTAwLCAx
KTsKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciBKUEVHIHN1cHBvcnQgZmlyc3QKKyAgICAgICAg
ICAgIHZhciBkYXRhID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpOworICAgICAgICAg
ICAgaWYgKCFkYXRhLm1hdGNoKC9eZGF0YTppbWFnZVwvanBlZ1s7LF0vKSkgeworICAgICAgICAg
ICAgICAgIF9hc3NlcnQodHJ1ZSwgInRydWUiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEw
KSwgZGF0YSwgImNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAxMCkiLCAiZGF0YSIpOwor
ICAgICAgICAgICAgICAgIF9hc3NlcnRTYW1lKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcn
LCAtMTApLCBkYXRhLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIC0xMCkiLCAiZGF0
YSIpOworICAgICAgICAgICAgICAgIF9hc3NlcnRTYW1lKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdl
L2pwZWcnLCAxLjAxKSwgZGF0YSwgImNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAxLjAx
KSIsICJkYXRhIik7CisgICAgICAgICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFzLnRvRGF0YVVS
TCgnaW1hZ2UvanBlZycsIC0wLjAxKSwgZGF0YSwgImNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pw
ZWcnLCAtMC4wMSkiLCAiZGF0YSIpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgX2Fz
c2VydChjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMSkubGVuZ3RoID49IGNhbnZhcy50
b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAwLjkpLmxlbmd0aCwgImNhbnZhcy50b0RhdGFVUkwoJ2lt
YWdlL2pwZWcnLCAxKS5sZW5ndGggPj0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDAu
OSkubGVuZ3RoIik7CisgICAgICAgICAgICAgICAgX2Fzc2VydChjYW52YXMudG9EYXRhVVJMKCdp
bWFnZS9qcGVnJywgMCkubGVuZ3RoIDw9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAw
LjEpLmxlbmd0aCwgImNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAwKS5sZW5ndGggPD0g
Y2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDAuMSkubGVuZ3RoIik7CisgICAgICAgICAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgX2FkZFRlc3QodGVzdFRvRGF0YVVSTCk7CisgICAgPC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8Y2FudmFzIGlkPSJjIiB3aWR0aD0iMTAwIiBoZWln
aHQ9IjUwIj48L2NhbnZhcz4KKyAgICA8cCBpZD0iZCI+PC9wPgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWcu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9E
YXRhVVJMLWpwZWcuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9m
YXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTcg
QEAKK2Z1bmN0aW9uIF92YWxUb1N0cmluZyh2YWwpCit7CisJaWYgKHZhbCA9PT0gdW5kZWZpbmVk
IHx8IHZhbCA9PT0gbnVsbCkKKwkJcmV0dXJuICdbJyArIHR5cGVvZih2YWwpICsgJ10nOworCXJl
dHVybiB2YWwudG9TdHJpbmcoKSArICdbJyArIHR5cGVvZih2YWwpICsgJ10nOworfQorCit2YXIg
X2hleDJkZWNfdGFibGUgPSB7CisJMDowLCAxOjEsIDI6MiwgMzozLCA0OjQsIDU6NSwgNjo2LCA3
OjcsIDg6OCwgOTo5LAorCWE6MTAsIGI6MTEsIGM6MTIsIGQ6MTMsIGU6MTQsIGY6MTUsCisJQTox
MCwgQjoxMSwgQzoxMiwgRDoxMywgRToxNCwgRjoxNQorfTsKK2Z1bmN0aW9uIF9oZXgyZGVjKGhl
eCkKK3sKKwlyZXR1cm4gX2hleDJkZWNfdGFibGVbaGV4LmNoYXJBdCgwKV0qMTYgKyBfaGV4MmRl
Y190YWJsZVtoZXguY2hhckF0KDEpXTsKK30KKwordmFyIF9mYWlsZWQgPSBmYWxzZTsKK3ZhciBf
YXNzZXJ0ZWQgPSBmYWxzZTsKK2Z1bmN0aW9uIF93YXJuKHRleHQpCit7CisJZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2QnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScp
KS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7Cit9CitmdW5jdGlv
biBfZmFpbCh0ZXh0KQoreworCV93YXJuKHRleHQpOworCV9mYWlsZWQgPSB0cnVlOworfQorCitm
dW5jdGlvbiBfYXNzZXJ0KGNvbmQsIHRleHQpCit7CisJX2Fzc2VydGVkID0gdHJ1ZTsKKwlpZiAo
ISBjb25kKQorCQlfZmFpbCgnRmFpbGVkIGFzc2VydGlvbjogJyArIHRleHQpOworfQorCitmdW5j
dGlvbiBfYXNzZXJ0U2FtZShhLCBiLCB0ZXh0X2EsIHRleHRfYikKK3sKKwlfYXNzZXJ0ZWQgPSB0
cnVlOworCWlmIChhICE9PSBiKQorCQlfZmFpbCgnRmFpbGVkIGFzc2VydGlvbiAnICsgdGV4dF9h
ICsgJyA9PT0gJyArIHRleHRfYiArCisJCQkJJyAoZ290ICcgKyBfdmFsVG9TdHJpbmcoYSkgKyAn
LCBleHBlY3RlZCAnICsgX3ZhbFRvU3RyaW5nKGIpICsgJyknKTsKK30KKworZnVuY3Rpb24gX2Fz
c2VydERpZmZlcmVudChhLCBiLCB0ZXh0X2EsIHRleHRfYikKK3sKKwlfYXNzZXJ0ZWQgPSB0cnVl
OworCWlmIChhID09PSBiKQorCQlfZmFpbCgnRmFpbGVkIGFzc2VydGlvbiAnICsgdGV4dF9hICsg
JyAhPT0gJyArIHRleHRfYiArCisJCQkJJyAoZ290ICcgKyBfdmFsVG9TdHJpbmcoYSkgKyAnLCBl
eHBlY3RlZCBub3QgJyArIF92YWxUb1N0cmluZyhiKSArICcpJyk7Cit9CisKK2Z1bmN0aW9uIF9h
c3NlcnRFcXVhbChhLCBiLCB0ZXh0X2EsIHRleHRfYikKK3sKKwlfYXNzZXJ0ZWQgPSB0cnVlOwor
CWlmIChhICE9IGIpCisJCV9mYWlsKCdGYWlsZWQgYXNzZXJ0aW9uICcgKyB0ZXh0X2EgKyAnID09
ICcgKyB0ZXh0X2IgKworCQkJCScgKGdvdCAnICsgX3ZhbFRvU3RyaW5nKGEpICsgJywgZXhwZWN0
ZWQgJyArIF92YWxUb1N0cmluZyhiKSArICcpJyk7Cit9CisKK2Z1bmN0aW9uIF9hc3NlcnRNYXRj
aChhLCBiLCB0ZXh0X2EsIHRleHRfYikKK3sKKwlfYXNzZXJ0ZWQgPSB0cnVlOworCWlmICghIGEu
bWF0Y2goYikpCisJCV9mYWlsKCdGYWlsZWQgYXNzZXJ0aW9uICcgKyB0ZXh0X2EgKyAnIG1hdGNo
ZXMgJyArIHRleHRfYiArCisJCQkJJyAoZ290ICcgKyBfdmFsVG9TdHJpbmcoYSkgKyAnKScpOwor
fQorCisKK3ZhciBfbWFudWFsX2NoZWNrID0gZmFsc2U7CisKK2Z1bmN0aW9uIF9yZXF1aXJlTWFu
dWFsQ2hlY2soKQoreworCV9tYW51YWxfY2hlY2sgPSB0cnVlOworfQorCitmdW5jdGlvbiBfY3Jh
c2goKQoreworCV9mYWlsKCdBYm9ydGVkIGR1ZSB0byBwcmVkaWN0ZWQgY3Jhc2gnKTsKK30KKwor
dmFyIF9nZXRJbWFnZURhdGFDYWxpYnJhdGVkID0gZmFsc2U7Cit2YXIgX2dldEltYWdlRGF0YUlz
UHJlbXVsLCBfZ2V0SW1hZ2VEYXRhSXNCR1JBOworCitmdW5jdGlvbiBfZ2V0UGl4ZWwoY2FudmFz
LCB4LHkpCit7CisJdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOworCWlmIChjdHgg
JiYgdHlwZW9mKGN0eC5nZXRJbWFnZURhdGEpICE9ICd1bmRlZmluZWQnKQorCXsKKwkJdHJ5IHsK
KwkJCXZhciBpbWdkYXRhID0gY3R4LmdldEltYWdlRGF0YSh4LCB5LCAxLCAxKTsKKwkJfSBjYXRj
aCAoZSkgeworCQkJLy8gcHJvYmFibHkgYSBzZWN1cml0eSBleGNlcHRpb24gY2F1c2VkIGJ5IGhh
dmluZyBkcmF3bgorCQkJLy8gZGF0YTogVVJMcyBvbnRvIHRoZSBjYW52YXMKKwkJCWltZ2RhdGEg
PSBudWxsOworCQl9CisJCWlmIChpbWdkYXRhKQorCQl7CisJCQkvLyBXb3JrIGFyb3VuZCBnZXRJ
bWFnZURhdGEgYnVncywgc2luY2Ugd2Ugd2FudCB0aGUgb3RoZXIgdGVzdHMgdG8KKwkJCS8vIGNh
cnJ5IG9uIHdvcmtpbmcgYXMgd2VsbCBhcyBwb3NzaWJsZQorCQkJaWYgKCEgX2dldEltYWdlRGF0
YUNhbGlicmF0ZWQpCisJCQl7CisJCQkJdmFyIGMyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
Y2FudmFzJyk7CisJCQkJYzIud2lkdGggPSBjMi5oZWlnaHQgPSAxOworCQkJCXZhciBjdHgyID0g
YzIuZ2V0Q29udGV4dCgnMmQnKTsKKwkJCQljdHgyLmZpbGxTdHlsZSA9ICdyZ2JhKDAsIDI1NSwg
MjU1LCAwLjUpJzsKKwkJCQljdHgyLmZpbGxSZWN0KDAsIDAsIDEsIDEpOworCQkJCXZhciBkYXRh
MiA9IGN0eDIuZ2V0SW1hZ2VEYXRhKDAsIDAsIDEsIDEpLmRhdGE7CisKKwkJCQkvLyBGaXJlZm94
IHJldHVybnMgcHJlbXVsdGlwbGllZCBhbHBoYQorCisJCQkJaWYgKGRhdGEyWzFdID4gMTAwICYm
IGRhdGEyWzFdIDwgMTUwKQorCQkJCQlfZ2V0SW1hZ2VEYXRhSXNQcmVtdWwgPSB0cnVlOworCQkJ
CWVsc2UKKwkJCQkJX2dldEltYWdlRGF0YUlzUHJlbXVsID0gZmFsc2U7CisKKwkJCQkvLyBPcGVy
YSBNaW5pIDQgQmV0YSByZXR1cm5zIEJHUkEgaW5zdGVhZCBvZiBSR0JBCisKKwkJCQlpZiAoZGF0
YTJbMF0gPiAyNTAgJiYgZGF0YTJbMl0gPCA1KQorCQkJCQlfZ2V0SW1hZ2VEYXRhSXNCR1JBID0g
dHJ1ZTsKKwkJCQllbHNlCisJCQkJCV9nZXRJbWFnZURhdGFJc0JHUkEgPSBmYWxzZTsKKworCQkJ
CV9nZXRJbWFnZURhdGFDYWxpYnJhdGVkID0gdHJ1ZTsKKwkJCX0KKworCQkJLy8gVW5kbyB0aGUg
QkdSQSBmbGlwcGluZworCQkJdmFyIHJnYmEgPSAoX2dldEltYWdlRGF0YUlzQkdSQQorCQkJCT8g
WyBpbWdkYXRhLmRhdGFbMl0sIGltZ2RhdGEuZGF0YVsxXSwgaW1nZGF0YS5kYXRhWzBdLCBpbWdk
YXRhLmRhdGFbM10gXQorCQkJCTogWyBpbWdkYXRhLmRhdGFbMF0sIGltZ2RhdGEuZGF0YVsxXSwg
aW1nZGF0YS5kYXRhWzJdLCBpbWdkYXRhLmRhdGFbM10gXSk7CisKKwkJCWlmICghIF9nZXRJbWFn
ZURhdGFJc1ByZW11bCkKKwkJCQlyZXR1cm4gcmdiYTsKKworCQkJLy8gVW5kbyB0aGUgcHJlbXVs
dGlwbHlpbmcKKwkJCWlmIChyZ2JhWzNdID09IDApCisJCQkJcmV0dXJuIFsgMCwgMCwgMCwgMCBd
OworCQkJZWxzZQorCQkJeworCQkJCXZhciBhID0gcmdiYVszXSAvIDI1NTsKKwkJCQlyZXR1cm4g
WworCQkJCQlNYXRoLnJvdW5kKHJnYmFbMF0vYSksCisJCQkJCU1hdGgucm91bmQocmdiYVsxXS9h
KSwKKwkJCQkJTWF0aC5yb3VuZChyZ2JhWzJdL2EpLAorCQkJCQlyZ2JhWzNdCisJCQkJXTsKKwkJ
CX0KKwkJfQorCX0KKworCXRyeSB7IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCdvcGVyYS0yZGdh
bWUnKTsgfSBjYXRjaCAoZSkgeyAvKiBGaXJlZm94IHRocm93cyAqLyB9CisJaWYgKGN0eCAmJiB0
eXBlb2YoY3R4LmdldFBpeGVsKSAhPSAndW5kZWZpbmVkJykKKwl7CisJCXRyeSB7CisJCQl2YXIg
YyA9IGN0eC5nZXRQaXhlbCh4LCB5KTsKKwkJfSBjYXRjaCAoZSkgeworCQkJLy8gcHJvYmFibHkg
YSBzZWN1cml0eSBleGNlcHRpb24gY2F1c2VkIGJ5IGhhdmluZyBkcmF3bgorCQkJLy8gZGF0YTog
VVJMcyBvbnRvIHRoZSBjYW52YXMKKwkJCWMgPSBudWxsOworCQl9CisJCWlmIChjKQorCQl7CisJ
CQl2YXIgbWF0Y2hlcyA9IC9ecmdiYVwoKFxkKyksIChcZCspLCAoXGQrKSwgKFtcZFwuXSspXCkk
Ly5leGVjKGMpOworCQkJaWYgKG1hdGNoZXMpCisJCQkJcmV0dXJuIFsgbWF0Y2hlc1sxXSwgbWF0
Y2hlc1syXSwgbWF0Y2hlc1szXSwgTWF0aC5yb3VuZChtYXRjaGVzWzRdKjI1NSkgXTsKKwkJCW1h
dGNoZXMgPSAvXiMoLi4pKC4uKSguLikkLy5leGVjKGMpOworCQkJaWYgKG1hdGNoZXMpCisJCQkJ
cmV0dXJuIFsgX2hleDJkZWMobWF0Y2hlc1sxXSksIF9oZXgyZGVjKG1hdGNoZXNbMl0pLCBfaGV4
MmRlYyhtYXRjaGVzWzNdKSwgMjU1IF07CisJCX0KKwl9CisJLy9fd2FybigiKENhbid0IHRlc3Qg
cGl4ZWwgdmFsdWUpIik7CisJX21hbnVhbF9jaGVjayA9IHRydWU7CisJcmV0dXJuIHVuZGVmaW5l
ZDsKK30KKworZnVuY3Rpb24gX2Fzc2VydFBpeGVsKGNhbnZhcywgeCx5LCByLGcsYixhLCBwb3Ms
IGNvbG91cikKK3sKKwlfYXNzZXJ0ZWQgPSB0cnVlOworCXZhciBjID0gX2dldFBpeGVsKGNhbnZh
cywgeCx5KTsKKwlpZiAoYyAmJiAhIChjWzBdID09IHIgJiYgY1sxXSA9PSBnICYmIGNbMl0gPT0g
YiAmJiBjWzNdID09IGEpKQorCQlfZmFpbCgnRmFpbGVkIGFzc2VydGlvbjogZ290IHBpeGVsIFsn
ICsgYyArICddIGF0ICgnK3grJywnK3krJyksIGV4cGVjdGVkIFsnK3IrJywnK2crJywnK2IrJywn
K2ErJ10nKTsKK30KKworZnVuY3Rpb24gX2Fzc2VydFBpeGVsQXBwcm94KGNhbnZhcywgeCx5LCBy
LGcsYixhLCBwb3MsIGNvbG91ciwgdG9sZXJhbmNlKQoreworCV9hc3NlcnRlZCA9IHRydWU7CisJ
dmFyIGMgPSBfZ2V0UGl4ZWwoY2FudmFzLCB4LHkpOworCWlmIChjKQorCXsKKwkJdmFyIGRpZmYg
PSBNYXRoLm1heChNYXRoLmFicyhjWzBdLXIpLCBNYXRoLmFicyhjWzFdLWcpLCBNYXRoLmFicyhj
WzJdLWIpLCBNYXRoLmFicyhjWzNdLWEpKTsKKwkJaWYgKGRpZmYgPiB0b2xlcmFuY2UpCisJCQlf
ZmFpbCgnRmFpbGVkIGFzc2VydGlvbjogZ290IHBpeGVsIFsnICsgYyArICddIGF0ICgnK3grJywn
K3krJyksIGV4cGVjdGVkIFsnK3IrJywnK2crJywnK2IrJywnK2ErJ10gKy8tICcrdG9sZXJhbmNl
KTsKKwl9Cit9CisKK2Z1bmN0aW9uIF9hZGRUZXN0KHRlc3QpCit7CisJdmFyIGRlZmVycmVkID0g
ZmFsc2U7CisJd2luZG93LmRlZmVyVGVzdCA9IGZ1bmN0aW9uICgpIHsgZGVmZXJyZWQgPSB0cnVl
OyB9OworCWZ1bmN0aW9uIGVuZFRlc3QoKQorCXsKKwkJaWYgKF9mYWlsZWQpIC8vIHRlc3QgZmFp
bGVkCisJCXsKKwkJCWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc05hbWUgKz0gJyBmYWls
JzsKKwkJCXdpbmRvdy5fdGVzdFN0YXR1cyA9IFsnZmFpbCcsIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdkJykuaW5uZXJIVE1MXTsKKwkJfQorCQllbHNlIGlmIChfbWFudWFsX2NoZWNrIHx8ICFf
YXNzZXJ0ZWQpCisJCXsgLy8gdGVzdCBjYXNlIGV4cGxpY2l0bHkgYXNrZWQgZm9yIGEgbWFudWFs
IGNoZWNrLCBvciBubyBhdXRvbWF0aWMgYXNzZXJ0aW9ucyB3ZXJlIHBlcmZvcm1lZAorCQkJZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2QnKS5pbm5lckhUTUwgKz0gJzxsaT5DYW5ub3QgYXV0b21h
dGljYWxseSB2ZXJpZnkgcmVzdWx0JzsKKwkJCWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFz
c05hbWUgKz0gJyBuZWVkc19jaGVjayc7CisJCQl3aW5kb3cuX3Rlc3RTdGF0dXMgPSBbJ2NoZWNr
JywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2QnKS5pbm5lckhUTUxdOworCQl9CisJCWVsc2Ug
Ly8gdGVzdCBzdWNjZWVkZWQKKwkJeworCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2QnKS5p
bm5lckhUTUwgPSAnUGFzc2VkJzsKKwkJCWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc05h
bWUgKz0gJyBwYXNzJzsKKwkJCXdpbmRvdy5fdGVzdFN0YXR1cyA9IFsncGFzcycsIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdkJykuaW5uZXJIVE1MXTsKKwkJfQorCQlpZiAod2luZG93Lm5vdGlm
eUVuZFRlc3QpCisJCQlub3RpZnlFbmRUZXN0KCk7CisKKwl9CisJd2luZG93LmVuZFRlc3QgPSBl
bmRUZXN0OworCXdpbmRvdy53cmFwRnVuY3Rpb24gPSBmdW5jdGlvbiAoZikKKwl7CisJCXJldHVy
biBmdW5jdGlvbigpCisJCXsKKwkJCXRyeQorCQkJeworCQkJCWYuYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKKwkJCX0KKwkJCWNhdGNoIChlKQorCQkJeworCQkJCV9mYWlsKCdBYm9ydGVkIHdpdGgg
ZXhjZXB0aW9uOiAnICsgZS5tZXNzYWdlKTsKKwkJCX0KKwkJCWVuZFRlc3QoKTsKKwkJfQorCX0K
KworCXdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbiAoKQorCXsKKwkJdHJ5CisJCXsKKwkJCXZhciBj
YW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYycpOworCQkJdmFyIGN0eCA9IGNhbnZh
cy5nZXRDb250ZXh0KCcyZCcpOworCQkJdGVzdChjYW52YXMsIGN0eCk7CisJCX0KKwkJY2F0Y2gg
KGUpCisJCXsKKwkJCV9mYWlsKCdBYm9ydGVkIHdpdGggZXhjZXB0aW9uOiAnICsgZS5tZXNzYWdl
KTsKKwkJCWRlZmVycmVkID0gZmFsc2U7IC8vIGNhbmNlbCBhbnkgZGVmZXJlbmNlCisJCX0KKwor
CQlpZiAoISBkZWZlcnJlZCkKKwkJCWVuZFRlc3QoKTsKKwl9OworfQo=
</data>
<flag name="review"
          id="38170"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54529</attachid>
            <date>2010-04-28 00:04:50 -0700</date>
            <delta_ts>2010-05-11 03:36:11 -0700</delta_ts>
            <desc>Patch -- follow some comments from Dirk Schulze</desc>
            <filename>toDataURL-jpeg-quality-f.patch</filename>
            <type>text/plain</type>
            <size>37298</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDU4MjMx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDQt
MjUgIExlbyBZYW5nICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBjYW52YXMudG9EYXRhVVJM
KHR5cGUsIHF1YWxpdHksIC4uLikgdG8gbGV0IGl0IHN1cHBvcnQgcXVhbGl0eSBwYXJhbWV0ZXIu
IAorICAgICAgICBBbmQgaW1wbGVtZW50IGl0IGluIFF0IHByb3RpbmcuIAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzczMDQKKworICAgICAgICAqIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAg
ICogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5j
cHA6CisgICAgICAgICogV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHA6CisgICAgICAgICog
V2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5oOgorICAgICAgICAqIFdlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oOgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwOgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgICogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcDoKKyAgICAgICAg
KiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorCiAyMDEw
LTA0LTIxICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNF
bGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1ODIzMSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWpp
bmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTgxLDQgKzgyLDIyIEBAIEpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6
Z2V0Q29udGV4dCgKICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpn
ZXRQdHIoY2FudmFzLT5nZXRDb250ZXh0KHVzdHJpbmdUb1N0cmluZyhjb250ZXh0SWQpLCBhdHRy
cy5nZXQoKSkpKTsKIH0KIAorSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkwo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGNvbnN0IFN0cmlu
ZyYgdHlwZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJn
cy5hdCgwKSk7CisgICAgZG91YmxlIHF1YWxpdHkgPSAxLjA7CisgICAgaWYgKGFyZ3Muc2l6ZSgp
ID4gMSkgeworICAgICAgICBKU1ZhbHVlIHYgPSBhcmdzLmF0KDEpOworICAgICAgICBpZiAodi5p
c051bWJlcigpKQorICAgICAgICAgICAgcXVhbGl0eSA9IHYudG9OdW1iZXIoZXhlYyk7CisgICAg
ICAgIGlmICghKDAuMCA8PSBxdWFsaXR5ICYmIHF1YWxpdHkgPD0gMS4wKSkKKyAgICAgICAgICAg
IHF1YWxpdHkgPSAxLjA7CisgICAgfQorICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBz
dGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KGltcGwoKSk7CisgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nKGV4ZWMsIGNhbnZh
cy0+dG9EYXRhVVJMKHR5cGUsIHF1YWxpdHksIGVjKSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxD
YW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTgyMzEpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1v
YmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM0LDYgKzM1LDcgQEAKICNpbmNsdWRlICJDYW52
YXNDb250ZXh0QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQu
aCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlY4
QmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCkBAIC00
Miw2ICs0NCw3IEBACiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKICNpbmNsdWRlICJWOFdlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oIgogI2VuZGlmCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04OSw0ICs5MiwyMiBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVuCiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0K
IAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTENh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgZG91YmxlIHF1YWxpdHkg
PSAxLjA7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAxKSB7CisgICAgICAgIGlmIChhcmdzWzFd
LT5Jc051bWJlcigpKQorICAgICAgICAgICAgcXVhbGl0eSA9IGFyZ3NbMV0tPk51bWJlclZhbHVl
KCk7CisgICAgICAgIGlmICghKDAuMCA8PSBxdWFsaXR5ICYmIHF1YWxpdHkgPD0gMS4wKSkKKyAg
ICAgICAgICAgIHF1YWxpdHkgPSAxLjA7CisgICAgfQorICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFz
ID0gVjhIVE1MQ2FudmFzRWxlbWVudDo6dG9OYXRpdmUoaG9sZGVyKTsKKyAgICBTdHJpbmcgdHlw
ZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBTdHJpbmcgcmVzdWx0ID0gY2FudmFzLT50b0RhdGFVUkwodHlwZSwgcXVhbGl0eSwgZWMp
OworICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CisgICAgcmV0dXJuIHY4U3RyaW5n
T3JVbmRlZmluZWQocmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
Q2FudmFzU3VyZmFjZS5jcHAJKHJldmlzaW9uIDU4MjMxKQorKysgV2ViQ29yZS9kb20vQ2FudmFz
U3VyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2NSw3IEBA
IHZvaWQgQ2FudmFzU3VyZmFjZTo6c2V0U3VyZmFjZVNpemUoY29uc3QKICAgICBtX2ltYWdlQnVm
ZmVyLmNsZWFyKCk7CiB9CiAKLVN0cmluZyBDYW52YXNTdXJmYWNlOjp0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgQ2FudmFzU3VyZmFj
ZTo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSBxdWFsaXR5LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIW1fb3JpZ2luQ2xlYW4pIHsKICAgICAgICAgZWMg
PSBTRUNVUklUWV9FUlI7CkBAIC03OCw3ICs3OSw3IEBAIFN0cmluZyBDYW52YXNTdXJmYWNlOjp0
b0RhdGFVUkwoY29uc3QgU3QKICAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkgfHwgIU1JTUVUeXBl
UmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSkK
ICAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwoImltYWdlL3BuZyIpOwogCi0gICAg
cmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwobWltZVR5cGUpOworICAgIHJldHVybiBidWZmZXIo
KS0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5KTsKIH0KIAogdm9pZCBDYW52YXNTdXJmYWNl
Ojp3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmKQpJbmRleDogV2ViQ29yZS9kb20vQ2FudmFzU3Vy
ZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaAkocmV2aXNp
b24gNTgyMzEpCisrKyBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChC
ZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
IAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
QEAgLTQxLDcgKzQzLDYgQEAgY2xhc3MgRmxvYXRTaXplOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRQb2ludDsKLWNsYXNzIFN0cmluZzsKIAog
Y2xhc3MgQ1NTU3R5bGVTZWxlY3RvcjsKIGNsYXNzIFJlbmRlckJveDsKQEAgLTU4LDcgKzU5LDkg
QEAgcHVibGljOgogICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgp
OyB9CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQog
Ci0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRpb25D
b2RlJik7CisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3Vi
bGUgcXVhbGl0eSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gdG9EYXRhVVJM
KG1pbWVUeXBlLCAxLjAsIGVjKTsgfQogCiAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGwJ
KHJldmlzaW9uIDU4MjMxKQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzMsNyBAQCBt
b2R1bGUgaHRtbCB7CiAgICAgICAgIGF0dHJpYnV0ZSBsb25nIHdpZHRoOwogICAgICAgICBhdHRy
aWJ1dGUgbG9uZyBoZWlnaHQ7CiAKLSAgICAgICAgRE9NU3RyaW5nIHRvRGF0YVVSTChpbiBbQ29u
dmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHR5cGUpCisgICAgICAg
IFtDdXN0b21dIERPTVN0cmluZyB0b0RhdGFVUkwoaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxU
b051bGxTdHJpbmddIERPTVN0cmluZyB0eXBlKQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2Vw
dGlvbik7CiAKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykgfHwgIUxBTkdVQUdF
X09CSkVDVElWRV9DCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CShyZXZpc2lvbiA1ODIzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIs
NyArODMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgcHV0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKEltYWdlRGF0YSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQpOwogICAgICAgICB2b2lkIHB1dFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoSW1hZ2VEYXRhKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCk7CiAKLSAgICAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBkb3VibGUgcXVhbGl0eSA9IDEuMCkgY29uc3Q7CiAjaWYgIVBMQVRGT1JNKENH
KQogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybSgpOyB9CiAgICAgICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShJ
bWFnZUNvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgSW1hZ2VDb2xvclNwYWNlIGRzdENvbG9yU3Bh
Y2UpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA1ODIzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIs
NiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRv
cmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgzLDcgKzI4NCw3IEBAIHN0YXRpYyBjYWly
b19zdGF0dXNfdCB3cml0ZUZ1bmN0aW9uKHZvaWQKICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1NV
Q0NFU1M7CiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBkb3VibGUpIGNvbnN0CiB7CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFn
ZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAg
aWYgKCFpbWFnZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcAkocmV2aXNpb24gNTgyMzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4g
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNzUsNyArMjc2LDcgQEAgc3RhdGljIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJv
bU1JTQogI2VuZGlmCiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKE1JTUVUeXBl
UmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7
CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlr
dS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFn
ZUJ1ZmZlckhhaWt1LmNwcAkocmV2aXNpb24gNTgyMzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJz
dGlwcGlAZ214LmRlPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamlu
ZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzA5LDcgKzMxMCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRp
cGxpZWRJbWFnZUQKICAgICBwdXRJbWFnZURhdGEoc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9p
bnQsIG1fZGF0YSwgbV9zaXplLCB0cnVlKTsKIH0KIAotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSkgY29uc3QKIHsKICAgICBp
ZiAoIU1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5n
KG1pbWVUeXBlKSkKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCShyZXZpc2lvbiA1ODIzMSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUg
KEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2NSw5ICsyNjYsMTAgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0
UHJlbXVsdGlwbGllZEltYWdlRAogLy8gV2UgZ2V0IGEgbWltZVR5cGUgaGVyZSBidXQgUUltYWdl
V3JpdGVyIGRvZXMgbm90IHN1cHBvcnQgbWltZXR5cGVzIGJ1dAogLy8gb25seSBmb3JtYXRzIChw
bmcsIGdpZiwganBlZy4uLiwgeHBtKS4gU28gYXNzdW1lIHdlIGdldCBpbWFnZS8gYXMgaW1hZ2UK
IC8vIG1pbWV0eXBlcyBhbmQgdGhlbiByZW1vdmUgdGhlIGltYWdlLyB0byBnZXQgdGhlIFF0IGZv
cm1hdC4KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBkb3VibGUgcXVhbGl0eSkgY29uc3QKIHsKICAgICBBU1NFUlQoTUlNRVR5cGVSZWdp
c3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAg
ICBBU1NFUlQoMC4wIDw9IHF1YWxpdHkgJiYgcXVhbGl0eSA8PSAxLjApOwogCiAgICAgaWYgKCFt
aW1lVHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKSkKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwpA
QCAtMjc3LDcgKzI3OSw3IEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0
cmkKICAgICBRQnVmZmVyIGJ1ZmZlcigmZGF0YSk7CiAgICAgYnVmZmVyLm9wZW4oUUJ1ZmZlcjo6
V3JpdGVPbmx5KTsKIAotICAgIGlmICghbV9kYXRhLm1fcGl4bWFwLnNhdmUoJmJ1ZmZlciwgbWlt
ZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1hZ2UiKS51dGY4KCkuZGF0YSgpKSkKKyAgICBpZiAo
IW1fZGF0YS5tX3BpeG1hcC5zYXZlKCZidWZmZXIsIG1pbWVUeXBlLnN1YnN0cmluZyhzaXplb2Yg
ImltYWdlIikudXRmOCgpLmRhdGEoKSwgcXVhbGl0eSoxMDArMC41KSkKICAgICAgICAgcmV0dXJu
ICJkYXRhOiwiOwogCiAgICAgYnVmZmVyLmNsb3NlKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gNTgy
MzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIw
MDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
VG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTI2MCw3ICsyNjEsNyBAQCB2b2lk
IEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VECiAgICAgcHV0SW1hZ2VEYXRhPFBy
ZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCAqY29udGV4dCgpLT5w
bGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksIG1fc2l6ZSk7CiB9CiAKLVN0cmluZyBJbWFnZUJ1
ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6
OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmLCBkb3VibGUpIGNvbnN0CiB7CiAgICAgLy8gRW5jb2Rl
IHRoZSBpbWFnZSBpbnRvIGEgdmVjdG9yLgogICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBwbmdF
bmNvZGVkRGF0YTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VC
dWZmZXJXaW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcAkocmV2aXNpb24gNTgyMzEpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBN
b2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjE1LDcgKzIxNiw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11
bHRpcGxpZWRJbWFnZUQKICAgICBwdXRJbWFnZURhdGE8dHJ1ZT4oc291cmNlLCBzb3VyY2VSZWN0
LCBkZXN0UG9pbnQsIG1fZGF0YS5tX2JpdG1hcC5nZXQoKSk7CiB9CiAKLVN0cmluZyBJbWFnZUJ1
ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0CitTdHJpbmcgSW1h
Z2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX2RhdGEubV9iaXRtYXAtPmJ5dGVzKCkpCiAgICAgICAgIHJldHVybiAi
ZGF0YTosIjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJX
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1
ZmZlcld4LmNwcAkocmV2aXNpb24gNTgyMzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3d4L0ltYWdlQnVmZmVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9sbGl2aWVy
cy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4g
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC03NSw3ICs3Niw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFn
ZUQKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0
YVVSTChjb25zdCBTdHJpbmcmKSBjb25zdAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiwgZG91YmxlKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAg
ICAgcmV0dXJuIFN0cmluZygpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTgyMzEpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxMC0wNC0y
NSAgTGVvIFlhbmcgIDxsZW8ueWFuZ0B0b3JjaG1vYmlsZS5jb20uY24+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGNhbnZhcy50b0RhdGFVUkwo
dHlwZSwgcXVhbGl0eSwgLi4uKSB0byBsZXQgaXQgc3VwcG9ydCBxdWFsaXR5IHBhcmFtZXRlci4g
CisgICAgICAgIEFuZCBpbXBsZW1lbnQgaXQgaW4gUXQgcHJvdGluZy4gCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzMwNAorCisgICAgICAgICogcGxh
dGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1h
bHBoYS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0Rh
dGFVUkwtanBlZy1wcmltYXJ5Y29sb3JzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcHJpbWFyeWNvbG9ycy5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBl
Zy1xdWFsaXR5LWJhc2ljLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
cXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5
LW5vdG51bWJlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2Zh
c3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktbm90bnVtYmVyLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHkt
b3V0c2lkZXJhbmdlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQv
ZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1vdXRzaWRlcmFuZ2UuaHRtbDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWcuanM6
IEFkZGVkLgorCiAyMDEwLTA0LTI1ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLWFscGhhLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0Rh
dGFVUkwtanBlZy1hbHBoYS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1hbHBoYS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1Bhc3NlZApJbmRleDogTGF5b3V0VGVzdHMv
cGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBl
Zy1hbHBoYS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFz
dC9jYW52YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NiBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0idG9EYXRhVVJMLWpwZWcu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisKKyAgICAgICAgd2luZG93Lm5vdGlmeUVuZFRlc3QgPSBmdW5jdGlvbiAoKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfTsK
KworICAgICAgICBmdW5jdGlvbiB0ZXN0VG9EYXRhVVJMKGNhbnZhcywgY3R4KQorICAgICAgICB7
CisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJ3JnYmEoMTI4LCAyNTUsIDEyOCwgMC41KSc7
CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCA1MCk7CisgICAgICAgICAgICBj
dHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLW92ZXInOyAvLyBzaG91
bGQgYmUgaWdub3JlZCBieSB0b0RhdGFVUkwKKyAgICAgICAgICAgIHZhciBkYXRhID0gY2FudmFz
LnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpOworICAgICAgICAgICAgY3R4Lmdsb2JhbENvbXBvc2l0
ZU9wZXJhdGlvbiA9ICdzb3VyY2Utb3Zlcic7CisgICAgICAgICAgICBpZiAoIWRhdGEubWF0Y2go
L15kYXRhOmltYWdlXC9qcGVnWzssXS8pKSB7CisgICAgICAgICAgICAgICAgX2Fzc2VydCh0cnVl
LCAidHJ1ZSIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjdHguZmls
bFN0eWxlID0gJyNmMDAnOworICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCAxMDAs
IDUwKTsKKyAgICAgICAgICAgICAgICB2YXIgaW1nID0gbmV3IEltYWdlKCk7CisgICAgICAgICAg
ICAgICAgZGVmZXJUZXN0KCk7CisgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IHdyYXBGdW5j
dGlvbihmdW5jdGlvbiAoKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Y3R4LmRyYXdJbWFnZShpbWcsIDAsIDApOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgX2Fzc2VydFBpeGVsQXBwcm94KGNhbnZhcywgNTAsMjUsIDYzLDEyNyw2Mywy
NTUsICI1MCwyNSIsICI2MywxMjcsNjMsMjU1IiwgOCk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgaW1nLnNyYyA9IGRhdGE7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIF9hZGRUZXN0KHRlc3RUb0RhdGFVUkwpOworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+CisgICAgPGNhbnZhcyBpZD0iYyIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI1MCI+PC9jYW52YXM+
CisgICAgPHAgaWQ9ImQiPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXByaW1hcnljb2xvcnMtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2Fu
dmFzL3RvRGF0YVVSTC1qcGVnLXByaW1hcnljb2xvcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWct
cHJpbWFyeWNvbG9ycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1Bh
c3NlZApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJM
LWpwZWctcHJpbWFyeWNvbG9ycy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXByaW1hcnljb2xvcnMuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVS
TC1qcGVnLXByaW1hcnljb2xvcnMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAor
PGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0idG9EYXRhVVJMLWpwZWcuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAg
ICAgICAgd2luZG93Lm5vdGlmeUVuZFRlc3QgPSBmdW5jdGlvbiAoKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBmdW5jdGlvbiB0ZXN0VG9EYXRhVVJMKGNhbnZhcywgY3R4KQorICAgICAgICB7CisgICAgICAg
ICAgICBjdHguZmlsbFN0eWxlID0gJyNmZjAnOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAs
IDAsIDI1LCA0MCk7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyMwZmYnOworICAgICAg
ICAgICAgY3R4LmZpbGxSZWN0KDI1LCAwLCA1MCwgNDApOworICAgICAgICAgICAgY3R4LmZpbGxT
dHlsZSA9ICcjMDBmJzsKKyAgICAgICAgICAgIGN0eC5maWxsUmVjdCg3NSwgMCwgMjUsIDQwKTsK
KyAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAnI2ZmZic7CisgICAgICAgICAgICBjdHguZmls
bFJlY3QoMCwgNDAsIDEwMCwgMTApOworICAgICAgICAgICAgdmFyIGRhdGEgPSBjYW52YXMudG9E
YXRhVVJMKCdpbWFnZS9qcGVnJyk7IC8vIGl0IGlzIG9rYXkgaWYgdGhpcyByZXR1cm5zIGEgUE5H
IGluc3RlYWQKKyAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAnI2YwMCc7CisgICAgICAgICAg
ICBjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCA1MCk7CisgICAgICAgICAgICB2YXIgaW1nID0gbmV3
IEltYWdlKCk7CisgICAgICAgICAgICBkZWZlclRlc3QoKTsKKworICAgICAgICAgICAgaW1nLm9u
bG9hZCA9IHdyYXBGdW5jdGlvbihmdW5jdGlvbiAoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0
UGl4ZWxBcHByb3goY2FudmFzLCAxMiwyMCwgMjU1LDI1NSwwLDI1NSwgIjEyLDIwIiwgIjI1NSwy
NTUsMCwyNTUiLCA4KTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0UGl4ZWxBcHByb3goY2FudmFz
LCA1MCwyMCwgMCwyNTUsMjU1LDI1NSwgIjUwLDIwIiwgIjAsMjU1LDI1NSwyNTUiLCA4KTsKKyAg
ICAgICAgICAgICAgICBfYXNzZXJ0UGl4ZWxBcHByb3goY2FudmFzLCA4NywyMCwgMCwwLDI1NSwy
NTUsICI4NywyMCIsICIwLDAsMjU1LDI1NSIsIDgpOworICAgICAgICAgICAgICAgIF9hc3NlcnRQ
aXhlbEFwcHJveChjYW52YXMsIDUwLDQ1LCAyNTUsMjU1LDI1NSwyNTUsICI1MCw0NSIsICIyNTUs
MjU1LDI1NSwyNTUiLCA4KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpbWcuc3Jj
ID0gZGF0YTsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAg
ICAgICB9CisgICAgICAgIF9hZGRUZXN0KHRlc3RUb0RhdGFVUkwpOworICAgIDwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+CisgICAgPGNhbnZhcyBpZD0iYyIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI1
MCI+PC9jYW52YXM+CisgICAgPHAgaWQ9ImQiPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxp
dHktYmFzaWMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktYmFzaWMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9E
YXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEgQEAKK1Bhc3NlZApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52
YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktYmFz
aWMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2Fu
dmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktYmFzaWMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1OSBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0idG9EYXRhVVJMLWpw
ZWcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisKKyAgICAgICAgd2luZG93Lm5vdGlmeUVuZFRlc3QgPSBmdW5jdGlvbiAoKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAg
fTsKKworICAgICAgICBmdW5jdGlvbiB0ZXN0VG9EYXRhVVJMKGNhbnZhcywgY3R4KQorICAgICAg
ICB7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyMwMGYnOworICAgICAgICAgICAgY3R4
LmZpbGxSZWN0KDAsIDAsIDEwMCwgNTApOworICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcj
MGZmJzsKKyAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAzLCAxMDAsIDEpOworICAgICAgICAg
ICAgLy8gQ2hlY2sgZm9yIEpQRUcgc3VwcG9ydCBmaXJzdAorICAgICAgICAgICAgdmFyIGRhdGEg
PSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJyk7CisgICAgICAgICAgICBpZiAoIWRhdGEu
bWF0Y2goL15kYXRhOmltYWdlXC9qcGVnWzssXS8pKSB7CisgICAgICAgICAgICAgICAgX2Fzc2Vy
dCh0cnVlLCAidHJ1ZSIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2
YXIgZGF0YV9oaSA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAwLjk5KTsKKyAgICAg
ICAgICAgICAgICB2YXIgZGF0YV9sbyA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAw
LjAxKTsKKyAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyNmMDAnOworICAgICAgICAg
ICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDUwKTsKKyAgICAgICAgICAgICAgICBkZWZl
clRlc3QoKTsKKyAgICAgICAgICAgICAgICB2YXIgaW1nX2hpID0gbmV3IEltYWdlKCk7CisgICAg
ICAgICAgICAgICAgaW1nX2hpLm9ubG9hZCA9IGZ1bmN0aW9uICgpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB2YXIgaW1nX2xvID0gbmV3IEltYWdlKCk7CisgICAgICAg
ICAgICAgICAgICAgIGltZ19sby5vbmxvYWQgPSB3cmFwRnVuY3Rpb24oZnVuY3Rpb24gKCkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFn
ZShpbWdfaGksIDAsIDAsIDUwLCA1MCwgMCwgMCwgNTAsIDUwKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nX2xvLCAwLCAwLCA1MCwgNTAsIDUwLCAwLCA1MCwgNTAp
OworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBfYXNz
ZXJ0KGRhdGFfaGkubGVuZ3RoID4gZGF0YV9sby5sZW5ndGgsICJkYXRhX2hpLmxlbmd0aCA+IGRh
dGFfbG8ubGVuZ3RoIik7CisgICAgICAgICAgICAgICAgICAgICAgICBfYXNzZXJ0UGl4ZWxBcHBy
b3goY2FudmFzLCAyNSwyNSwgMCwwLDI1NSwyNTUsICIyNSwyNSIsICIwLDAsMjU1LDI1NSIsIDEy
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9hc3NlcnRQaXhlbEFwcHJveChjYW52YXMsIDc1
LDI1LCAwLDAsMjU1LDI1NSwgIjc1LDI1IiwgIjAsMCwyNTUsMjU1IiwgMTIpOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgaW1nX2xvLnNyYyA9IGRhdGFfbG87
CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBpbWdfaGkuc3JjID0gZGF0YV9o
aTsKKworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIF9hZGRUZXN0KHRlc3RUb0RhdGFV
UkwpOworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPGNhbnZhcyBpZD0iYyIg
d2lkdGg9IjEwMCIgaGVpZ2h0PSI1MCI+PC9jYW52YXM+CisgICAgPHAgaWQ9ImQiPjwvcD4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFz
L3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktbm90bnVtYmVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1x
dWFsaXR5LW5vdG51bWJlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW5vdG51bWJl
ci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1Bhc3NlZApJbmRleDog
TGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0
eS1ub3RudW1iZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9m
YXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW5vdG51bWJlci5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpw
ZWctcXVhbGl0eS1ub3RudW1iZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAor
PGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0idG9EYXRhVVJMLWpwZWcuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAg
ICAgICAgd2luZG93Lm5vdGlmeUVuZFRlc3QgPSBmdW5jdGlvbiAoKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBmdW5jdGlvbiB0ZXN0VG9EYXRhVVJMKGNhbnZhcywgY3R4KQorICAgICAgICB7CisgICAgICAg
ICAgICBjdHguZmlsbFN0eWxlID0gJyMwMGYnOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAs
IDAsIDEwMCwgNTApOworICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjMGZmJzsKKyAgICAg
ICAgICAgIGN0eC5maWxsUmVjdCgwLCAzLCAxMDAsIDEpOworICAgICAgICAgICAgLy8gQ2hlY2sg
Zm9yIEpQRUcgc3VwcG9ydCBmaXJzdAorICAgICAgICAgICAgdmFyIGRhdGEgPSBjYW52YXMudG9E
YXRhVVJMKCdpbWFnZS9qcGVnJyk7CisgICAgICAgICAgICBpZiAoIWRhdGEubWF0Y2goL15kYXRh
OmltYWdlXC9qcGVnWzssXS8pKSB7CisgICAgICAgICAgICAgICAgX2Fzc2VydCh0cnVlLCAidHJ1
ZSIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShj
YW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgJ2JvZ3VzJyksIGRhdGEsICJjYW52YXMudG9E
YXRhVVJMKCdpbWFnZS9qcGVnJywgJ2JvZ3VzJykiLCAiZGF0YSIpOworICAgICAgICAgICAgICAg
IF9hc3NlcnRTYW1lKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCB7fSksIGRhdGEsICJj
YW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywge30pIiwgImRhdGEiKTsKKyAgICAgICAgICAg
ICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgbnVsbCksIGRh
dGEsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgbnVsbCkiLCAiZGF0YSIpOworICAg
ICAgICAgICAgICAgIF9hc3NlcnRTYW1lKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCB1
bmRlZmluZWQpLCBkYXRhLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHVuZGVmaW5l
ZCkiLCAiZGF0YSIpOworICAgICAgICAgICAgICAgIF9hc3NlcnRTYW1lKGNhbnZhcy50b0RhdGFV
UkwoJ2ltYWdlL2pwZWcnLCB0cnVlKSwgZGF0YSwgImNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pw
ZWcnLCB0cnVlKSIsICJkYXRhIik7CisgICAgICAgICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFz
LnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsICcwLjAxJyksIGRhdGEsICJjYW52YXMudG9EYXRhVVJM
KCdpbWFnZS9qcGVnJywgJzAuMDEnKSIsICJkYXRhIik7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBfYWRkVGVzdCh0ZXN0VG9EYXRhVVJMKTsKKyAgICA8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxjYW52YXMgaWQ9ImMiIHdpZHRoPSIxMDAiIGhl
aWdodD0iNTAiPjwvY2FudmFzPgorICAgIDxwIGlkPSJkIj48L3A+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBl
Zy1xdWFsaXR5LW91dHNpZGVyYW5nZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1vdXRz
aWRlcmFuZ2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1vdXRzaWRlcmFuZ2UtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitQYXNzZWQKSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktb3V0
c2lkZXJhbmdlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFz
dC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1vdXRzaWRlcmFuZ2UuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1q
cGVnLXF1YWxpdHktb3V0c2lkZXJhbmdlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQg
QEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9InRvRGF0YVVSTC1qcGVnLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
CisgICAgICAgIHdpbmRvdy5ub3RpZnlFbmRUZXN0ID0gZnVuY3Rpb24gKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIH07CisKKyAg
ICAgICAgZnVuY3Rpb24gdGVzdFRvRGF0YVVSTChjYW52YXMsIGN0eCkKKyAgICAgICAgeworICAg
ICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjMDBmJzsKKyAgICAgICAgICAgIGN0eC5maWxsUmVj
dCgwLCAwLCAxMDAsIDUwKTsKKyAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAnIzBmZic7Cisg
ICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMywgMTAwLCAxKTsKKyAgICAgICAgICAgIC8vIENo
ZWNrIGZvciBKUEVHIHN1cHBvcnQgZmlyc3QKKyAgICAgICAgICAgIHZhciBkYXRhID0gY2FudmFz
LnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpOworICAgICAgICAgICAgaWYgKCFkYXRhLm1hdGNoKC9e
ZGF0YTppbWFnZVwvanBlZ1s7LF0vKSkgeworICAgICAgICAgICAgICAgIF9hc3NlcnQodHJ1ZSwg
InRydWUiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgX2Fzc2VydFNh
bWUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEwKSwgZGF0YSwgImNhbnZhcy50b0Rh
dGFVUkwoJ2ltYWdlL2pwZWcnLCAxMCkiLCAiZGF0YSIpOworICAgICAgICAgICAgICAgIF9hc3Nl
cnRTYW1lKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAtMTApLCBkYXRhLCAiY2FudmFz
LnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIC0xMCkiLCAiZGF0YSIpOworICAgICAgICAgICAgICAg
IF9hc3NlcnRTYW1lKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAxLjAxKSwgZGF0YSwg
ImNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAxLjAxKSIsICJkYXRhIik7CisgICAgICAg
ICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIC0wLjAx
KSwgZGF0YSwgImNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAtMC4wMSkiLCAiZGF0YSIp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgX2Fzc2VydChjYW52YXMudG9EYXRhVVJM
KCdpbWFnZS9qcGVnJywgMSkubGVuZ3RoID49IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcn
LCAwLjkpLmxlbmd0aCwgImNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAxKS5sZW5ndGgg
Pj0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDAuOSkubGVuZ3RoIik7CisgICAgICAg
ICAgICAgICAgX2Fzc2VydChjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMCkubGVuZ3Ro
IDw9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAwLjEpLmxlbmd0aCwgImNhbnZhcy50
b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAwKS5sZW5ndGggPD0gY2FudmFzLnRvRGF0YVVSTCgnaW1h
Z2UvanBlZycsIDAuMSkubGVuZ3RoIik7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
X2FkZFRlc3QodGVzdFRvRGF0YVVSTCk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KyAgICA8Y2FudmFzIGlkPSJjIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKyAg
ICA8cCBpZD0iZCI+PC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWcuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWcuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwt
anBlZy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTcgQEAKK2Z1bmN0aW9uIF92YWxUb1N0
cmluZyh2YWwpCit7CisJaWYgKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbCkKKwkJ
cmV0dXJuICdbJyArIHR5cGVvZih2YWwpICsgJ10nOworCXJldHVybiB2YWwudG9TdHJpbmcoKSAr
ICdbJyArIHR5cGVvZih2YWwpICsgJ10nOworfQorCit2YXIgX2hleDJkZWNfdGFibGUgPSB7CisJ
MDowLCAxOjEsIDI6MiwgMzozLCA0OjQsIDU6NSwgNjo2LCA3OjcsIDg6OCwgOTo5LAorCWE6MTAs
IGI6MTEsIGM6MTIsIGQ6MTMsIGU6MTQsIGY6MTUsCisJQToxMCwgQjoxMSwgQzoxMiwgRDoxMywg
RToxNCwgRjoxNQorfTsKK2Z1bmN0aW9uIF9oZXgyZGVjKGhleCkKK3sKKwlyZXR1cm4gX2hleDJk
ZWNfdGFibGVbaGV4LmNoYXJBdCgwKV0qMTYgKyBfaGV4MmRlY190YWJsZVtoZXguY2hhckF0KDEp
XTsKK30KKwordmFyIF9mYWlsZWQgPSBmYWxzZTsKK3ZhciBfYXNzZXJ0ZWQgPSBmYWxzZTsKK2Z1
bmN0aW9uIF93YXJuKHRleHQpCit7CisJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2QnKS5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpKS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7Cit9CitmdW5jdGlvbiBfZmFpbCh0ZXh0KQoreworCV93
YXJuKHRleHQpOworCV9mYWlsZWQgPSB0cnVlOworfQorCitmdW5jdGlvbiBfYXNzZXJ0KGNvbmQs
IHRleHQpCit7CisJX2Fzc2VydGVkID0gdHJ1ZTsKKwlpZiAoISBjb25kKQorCQlfZmFpbCgnRmFp
bGVkIGFzc2VydGlvbjogJyArIHRleHQpOworfQorCitmdW5jdGlvbiBfYXNzZXJ0U2FtZShhLCBi
LCB0ZXh0X2EsIHRleHRfYikKK3sKKwlfYXNzZXJ0ZWQgPSB0cnVlOworCWlmIChhICE9PSBiKQor
CQlfZmFpbCgnRmFpbGVkIGFzc2VydGlvbiAnICsgdGV4dF9hICsgJyA9PT0gJyArIHRleHRfYiAr
CisJCQkJJyAoZ290ICcgKyBfdmFsVG9TdHJpbmcoYSkgKyAnLCBleHBlY3RlZCAnICsgX3ZhbFRv
U3RyaW5nKGIpICsgJyknKTsKK30KKworZnVuY3Rpb24gX2Fzc2VydERpZmZlcmVudChhLCBiLCB0
ZXh0X2EsIHRleHRfYikKK3sKKwlfYXNzZXJ0ZWQgPSB0cnVlOworCWlmIChhID09PSBiKQorCQlf
ZmFpbCgnRmFpbGVkIGFzc2VydGlvbiAnICsgdGV4dF9hICsgJyAhPT0gJyArIHRleHRfYiArCisJ
CQkJJyAoZ290ICcgKyBfdmFsVG9TdHJpbmcoYSkgKyAnLCBleHBlY3RlZCBub3QgJyArIF92YWxU
b1N0cmluZyhiKSArICcpJyk7Cit9CisKK2Z1bmN0aW9uIF9hc3NlcnRFcXVhbChhLCBiLCB0ZXh0
X2EsIHRleHRfYikKK3sKKwlfYXNzZXJ0ZWQgPSB0cnVlOworCWlmIChhICE9IGIpCisJCV9mYWls
KCdGYWlsZWQgYXNzZXJ0aW9uICcgKyB0ZXh0X2EgKyAnID09ICcgKyB0ZXh0X2IgKworCQkJCScg
KGdvdCAnICsgX3ZhbFRvU3RyaW5nKGEpICsgJywgZXhwZWN0ZWQgJyArIF92YWxUb1N0cmluZyhi
KSArICcpJyk7Cit9CisKK2Z1bmN0aW9uIF9hc3NlcnRNYXRjaChhLCBiLCB0ZXh0X2EsIHRleHRf
YikKK3sKKwlfYXNzZXJ0ZWQgPSB0cnVlOworCWlmICghIGEubWF0Y2goYikpCisJCV9mYWlsKCdG
YWlsZWQgYXNzZXJ0aW9uICcgKyB0ZXh0X2EgKyAnIG1hdGNoZXMgJyArIHRleHRfYiArCisJCQkJ
JyAoZ290ICcgKyBfdmFsVG9TdHJpbmcoYSkgKyAnKScpOworfQorCisKK3ZhciBfbWFudWFsX2No
ZWNrID0gZmFsc2U7CisKK2Z1bmN0aW9uIF9yZXF1aXJlTWFudWFsQ2hlY2soKQoreworCV9tYW51
YWxfY2hlY2sgPSB0cnVlOworfQorCitmdW5jdGlvbiBfY3Jhc2goKQoreworCV9mYWlsKCdBYm9y
dGVkIGR1ZSB0byBwcmVkaWN0ZWQgY3Jhc2gnKTsKK30KKwordmFyIF9nZXRJbWFnZURhdGFDYWxp
YnJhdGVkID0gZmFsc2U7Cit2YXIgX2dldEltYWdlRGF0YUlzUHJlbXVsLCBfZ2V0SW1hZ2VEYXRh
SXNCR1JBOworCitmdW5jdGlvbiBfZ2V0UGl4ZWwoY2FudmFzLCB4LHkpCit7CisJdmFyIGN0eCA9
IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOworCWlmIChjdHggJiYgdHlwZW9mKGN0eC5nZXRJbWFn
ZURhdGEpICE9ICd1bmRlZmluZWQnKQorCXsKKwkJdHJ5IHsKKwkJCXZhciBpbWdkYXRhID0gY3R4
LmdldEltYWdlRGF0YSh4LCB5LCAxLCAxKTsKKwkJfSBjYXRjaCAoZSkgeworCQkJLy8gcHJvYmFi
bHkgYSBzZWN1cml0eSBleGNlcHRpb24gY2F1c2VkIGJ5IGhhdmluZyBkcmF3bgorCQkJLy8gZGF0
YTogVVJMcyBvbnRvIHRoZSBjYW52YXMKKwkJCWltZ2RhdGEgPSBudWxsOworCQl9CisJCWlmIChp
bWdkYXRhKQorCQl7CisJCQkvLyBXb3JrIGFyb3VuZCBnZXRJbWFnZURhdGEgYnVncywgc2luY2Ug
d2Ugd2FudCB0aGUgb3RoZXIgdGVzdHMgdG8KKwkJCS8vIGNhcnJ5IG9uIHdvcmtpbmcgYXMgd2Vs
bCBhcyBwb3NzaWJsZQorCQkJaWYgKCEgX2dldEltYWdlRGF0YUNhbGlicmF0ZWQpCisJCQl7CisJ
CQkJdmFyIGMyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CisJCQkJYzIud2lk
dGggPSBjMi5oZWlnaHQgPSAxOworCQkJCXZhciBjdHgyID0gYzIuZ2V0Q29udGV4dCgnMmQnKTsK
KwkJCQljdHgyLmZpbGxTdHlsZSA9ICdyZ2JhKDAsIDI1NSwgMjU1LCAwLjUpJzsKKwkJCQljdHgy
LmZpbGxSZWN0KDAsIDAsIDEsIDEpOworCQkJCXZhciBkYXRhMiA9IGN0eDIuZ2V0SW1hZ2VEYXRh
KDAsIDAsIDEsIDEpLmRhdGE7CisKKwkJCQkvLyBGaXJlZm94IHJldHVybnMgcHJlbXVsdGlwbGll
ZCBhbHBoYQorCisJCQkJaWYgKGRhdGEyWzFdID4gMTAwICYmIGRhdGEyWzFdIDwgMTUwKQorCQkJ
CQlfZ2V0SW1hZ2VEYXRhSXNQcmVtdWwgPSB0cnVlOworCQkJCWVsc2UKKwkJCQkJX2dldEltYWdl
RGF0YUlzUHJlbXVsID0gZmFsc2U7CisKKwkJCQkvLyBPcGVyYSBNaW5pIDQgQmV0YSByZXR1cm5z
IEJHUkEgaW5zdGVhZCBvZiBSR0JBCisKKwkJCQlpZiAoZGF0YTJbMF0gPiAyNTAgJiYgZGF0YTJb
Ml0gPCA1KQorCQkJCQlfZ2V0SW1hZ2VEYXRhSXNCR1JBID0gdHJ1ZTsKKwkJCQllbHNlCisJCQkJ
CV9nZXRJbWFnZURhdGFJc0JHUkEgPSBmYWxzZTsKKworCQkJCV9nZXRJbWFnZURhdGFDYWxpYnJh
dGVkID0gdHJ1ZTsKKwkJCX0KKworCQkJLy8gVW5kbyB0aGUgQkdSQSBmbGlwcGluZworCQkJdmFy
IHJnYmEgPSAoX2dldEltYWdlRGF0YUlzQkdSQQorCQkJCT8gWyBpbWdkYXRhLmRhdGFbMl0sIGlt
Z2RhdGEuZGF0YVsxXSwgaW1nZGF0YS5kYXRhWzBdLCBpbWdkYXRhLmRhdGFbM10gXQorCQkJCTog
WyBpbWdkYXRhLmRhdGFbMF0sIGltZ2RhdGEuZGF0YVsxXSwgaW1nZGF0YS5kYXRhWzJdLCBpbWdk
YXRhLmRhdGFbM10gXSk7CisKKwkJCWlmICghIF9nZXRJbWFnZURhdGFJc1ByZW11bCkKKwkJCQly
ZXR1cm4gcmdiYTsKKworCQkJLy8gVW5kbyB0aGUgcHJlbXVsdGlwbHlpbmcKKwkJCWlmIChyZ2Jh
WzNdID09IDApCisJCQkJcmV0dXJuIFsgMCwgMCwgMCwgMCBdOworCQkJZWxzZQorCQkJeworCQkJ
CXZhciBhID0gcmdiYVszXSAvIDI1NTsKKwkJCQlyZXR1cm4gWworCQkJCQlNYXRoLnJvdW5kKHJn
YmFbMF0vYSksCisJCQkJCU1hdGgucm91bmQocmdiYVsxXS9hKSwKKwkJCQkJTWF0aC5yb3VuZChy
Z2JhWzJdL2EpLAorCQkJCQlyZ2JhWzNdCisJCQkJXTsKKwkJCX0KKwkJfQorCX0KKworCXRyeSB7
IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCdvcGVyYS0yZGdhbWUnKTsgfSBjYXRjaCAoZSkgeyAv
KiBGaXJlZm94IHRocm93cyAqLyB9CisJaWYgKGN0eCAmJiB0eXBlb2YoY3R4LmdldFBpeGVsKSAh
PSAndW5kZWZpbmVkJykKKwl7CisJCXRyeSB7CisJCQl2YXIgYyA9IGN0eC5nZXRQaXhlbCh4LCB5
KTsKKwkJfSBjYXRjaCAoZSkgeworCQkJLy8gcHJvYmFibHkgYSBzZWN1cml0eSBleGNlcHRpb24g
Y2F1c2VkIGJ5IGhhdmluZyBkcmF3bgorCQkJLy8gZGF0YTogVVJMcyBvbnRvIHRoZSBjYW52YXMK
KwkJCWMgPSBudWxsOworCQl9CisJCWlmIChjKQorCQl7CisJCQl2YXIgbWF0Y2hlcyA9IC9ecmdi
YVwoKFxkKyksIChcZCspLCAoXGQrKSwgKFtcZFwuXSspXCkkLy5leGVjKGMpOworCQkJaWYgKG1h
dGNoZXMpCisJCQkJcmV0dXJuIFsgbWF0Y2hlc1sxXSwgbWF0Y2hlc1syXSwgbWF0Y2hlc1szXSwg
TWF0aC5yb3VuZChtYXRjaGVzWzRdKjI1NSkgXTsKKwkJCW1hdGNoZXMgPSAvXiMoLi4pKC4uKSgu
LikkLy5leGVjKGMpOworCQkJaWYgKG1hdGNoZXMpCisJCQkJcmV0dXJuIFsgX2hleDJkZWMobWF0
Y2hlc1sxXSksIF9oZXgyZGVjKG1hdGNoZXNbMl0pLCBfaGV4MmRlYyhtYXRjaGVzWzNdKSwgMjU1
IF07CisJCX0KKwl9CisJLy9fd2FybigiKENhbid0IHRlc3QgcGl4ZWwgdmFsdWUpIik7CisJX21h
bnVhbF9jaGVjayA9IHRydWU7CisJcmV0dXJuIHVuZGVmaW5lZDsKK30KKworZnVuY3Rpb24gX2Fz
c2VydFBpeGVsKGNhbnZhcywgeCx5LCByLGcsYixhLCBwb3MsIGNvbG91cikKK3sKKwlfYXNzZXJ0
ZWQgPSB0cnVlOworCXZhciBjID0gX2dldFBpeGVsKGNhbnZhcywgeCx5KTsKKwlpZiAoYyAmJiAh
IChjWzBdID09IHIgJiYgY1sxXSA9PSBnICYmIGNbMl0gPT0gYiAmJiBjWzNdID09IGEpKQorCQlf
ZmFpbCgnRmFpbGVkIGFzc2VydGlvbjogZ290IHBpeGVsIFsnICsgYyArICddIGF0ICgnK3grJywn
K3krJyksIGV4cGVjdGVkIFsnK3IrJywnK2crJywnK2IrJywnK2ErJ10nKTsKK30KKworZnVuY3Rp
b24gX2Fzc2VydFBpeGVsQXBwcm94KGNhbnZhcywgeCx5LCByLGcsYixhLCBwb3MsIGNvbG91ciwg
dG9sZXJhbmNlKQoreworCV9hc3NlcnRlZCA9IHRydWU7CisJdmFyIGMgPSBfZ2V0UGl4ZWwoY2Fu
dmFzLCB4LHkpOworCWlmIChjKQorCXsKKwkJdmFyIGRpZmYgPSBNYXRoLm1heChNYXRoLmFicyhj
WzBdLXIpLCBNYXRoLmFicyhjWzFdLWcpLCBNYXRoLmFicyhjWzJdLWIpLCBNYXRoLmFicyhjWzNd
LWEpKTsKKwkJaWYgKGRpZmYgPiB0b2xlcmFuY2UpCisJCQlfZmFpbCgnRmFpbGVkIGFzc2VydGlv
bjogZ290IHBpeGVsIFsnICsgYyArICddIGF0ICgnK3grJywnK3krJyksIGV4cGVjdGVkIFsnK3Ir
JywnK2crJywnK2IrJywnK2ErJ10gKy8tICcrdG9sZXJhbmNlKTsKKwl9Cit9CisKK2Z1bmN0aW9u
IF9hZGRUZXN0KHRlc3QpCit7CisJdmFyIGRlZmVycmVkID0gZmFsc2U7CisJd2luZG93LmRlZmVy
VGVzdCA9IGZ1bmN0aW9uICgpIHsgZGVmZXJyZWQgPSB0cnVlOyB9OworCWZ1bmN0aW9uIGVuZFRl
c3QoKQorCXsKKwkJaWYgKF9mYWlsZWQpIC8vIHRlc3QgZmFpbGVkCisJCXsKKwkJCWRvY3VtZW50
LmRvY3VtZW50RWxlbWVudC5jbGFzc05hbWUgKz0gJyBmYWlsJzsKKwkJCXdpbmRvdy5fdGVzdFN0
YXR1cyA9IFsnZmFpbCcsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkJykuaW5uZXJIVE1MXTsK
KwkJfQorCQllbHNlIGlmIChfbWFudWFsX2NoZWNrIHx8ICFfYXNzZXJ0ZWQpCisJCXsgLy8gdGVz
dCBjYXNlIGV4cGxpY2l0bHkgYXNrZWQgZm9yIGEgbWFudWFsIGNoZWNrLCBvciBubyBhdXRvbWF0
aWMgYXNzZXJ0aW9ucyB3ZXJlIHBlcmZvcm1lZAorCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2QnKS5pbm5lckhUTUwgKz0gJzxsaT5DYW5ub3QgYXV0b21hdGljYWxseSB2ZXJpZnkgcmVzdWx0
JzsKKwkJCWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc05hbWUgKz0gJyBuZWVkc19jaGVj
ayc7CisJCQl3aW5kb3cuX3Rlc3RTdGF0dXMgPSBbJ2NoZWNrJywgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2QnKS5pbm5lckhUTUxdOworCQl9CisJCWVsc2UgLy8gdGVzdCBzdWNjZWVkZWQKKwkJ
eworCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2QnKS5pbm5lckhUTUwgPSAnUGFzc2VkJzsK
KwkJCWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc05hbWUgKz0gJyBwYXNzJzsKKwkJCXdp
bmRvdy5fdGVzdFN0YXR1cyA9IFsncGFzcycsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkJyku
aW5uZXJIVE1MXTsKKwkJfQorCQlpZiAod2luZG93Lm5vdGlmeUVuZFRlc3QpCisJCQlub3RpZnlF
bmRUZXN0KCk7CisKKwl9CisJd2luZG93LmVuZFRlc3QgPSBlbmRUZXN0OworCXdpbmRvdy53cmFw
RnVuY3Rpb24gPSBmdW5jdGlvbiAoZikKKwl7CisJCXJldHVybiBmdW5jdGlvbigpCisJCXsKKwkJ
CXRyeQorCQkJeworCQkJCWYuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKwkJCX0KKwkJCWNhdGNo
IChlKQorCQkJeworCQkJCV9mYWlsKCdBYm9ydGVkIHdpdGggZXhjZXB0aW9uOiAnICsgZS5tZXNz
YWdlKTsKKwkJCX0KKwkJCWVuZFRlc3QoKTsKKwkJfQorCX0KKworCXdpbmRvdy5vbmxvYWQgPSBm
dW5jdGlvbiAoKQorCXsKKwkJdHJ5CisJCXsKKwkJCXZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnYycpOworCQkJdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOwor
CQkJdGVzdChjYW52YXMsIGN0eCk7CisJCX0KKwkJY2F0Y2ggKGUpCisJCXsKKwkJCV9mYWlsKCdB
Ym9ydGVkIHdpdGggZXhjZXB0aW9uOiAnICsgZS5tZXNzYWdlKTsKKwkJCWRlZmVycmVkID0gZmFs
c2U7IC8vIGNhbmNlbCBhbnkgZGVmZXJlbmNlCisJCX0KKworCQlpZiAoISBkZWZlcnJlZCkKKwkJ
CWVuZFRlc3QoKTsKKwl9OworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55686</attachid>
            <date>2010-05-11 03:36:11 -0700</date>
            <delta_ts>2010-05-31 15:28:10 -0700</delta_ts>
            <desc>patch</desc>
            <filename>toDataURL-jpeg-quality-f1.patch</filename>
            <type>text/plain</type>
            <size>38571</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDU4MjMx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDQt
MjUgIExlbyBZYW5nICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBjYW52YXMudG9EYXRhVVJM
KHR5cGUsIHF1YWxpdHksIC4uLikgdG8gbGV0IGl0IHN1cHBvcnQgcXVhbGl0eSBwYXJhbWV0ZXIu
IAorICAgICAgICBBbmQgaW1wbGVtZW50IGl0IGluIFF0IHByb3RpbmcuIAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzczMDQKKworICAgICAgICAqIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAg
ICogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5j
cHA6CisgICAgICAgICogV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHA6CisgICAgICAgICog
V2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5oOgorICAgICAgICAqIFdlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5pZGw6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oOgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwOgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgICogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcDoKKyAgICAgICAg
KiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorCiAyMDEw
LTA0LTIxICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNF
bGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1ODIzMSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWpp
bmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTgxLDQgKzgyLDIyIEBAIEpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6
Z2V0Q29udGV4dCgKICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpn
ZXRQdHIoY2FudmFzLT5nZXRDb250ZXh0KHVzdHJpbmdUb1N0cmluZyhjb250ZXh0SWQpLCBhdHRy
cy5nZXQoKSkpKTsKIH0KIAorSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkwo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGNvbnN0IFN0cmlu
ZyYgdHlwZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJn
cy5hdCgwKSk7CisgICAgZG91YmxlIHF1YWxpdHkgPSAxLjA7CisgICAgaWYgKGFyZ3Muc2l6ZSgp
ID4gMSkgeworICAgICAgICBKU1ZhbHVlIHYgPSBhcmdzLmF0KDEpOworICAgICAgICBpZiAodi5p
c051bWJlcigpKQorICAgICAgICAgICAgcXVhbGl0eSA9IHYudG9OdW1iZXIoZXhlYyk7CisgICAg
ICAgIGlmICghKDAuMCA8PSBxdWFsaXR5ICYmIHF1YWxpdHkgPD0gMS4wKSkKKyAgICAgICAgICAg
IHF1YWxpdHkgPSAxLjA7CisgICAgfQorICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBz
dGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KGltcGwoKSk7CisgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nKGV4ZWMsIGNhbnZh
cy0+dG9EYXRhVVJMKHR5cGUsIHF1YWxpdHksIGVjKSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxD
YW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTgyMzEpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1v
YmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM0LDYgKzM1LDcgQEAKICNpbmNsdWRlICJDYW52
YXNDb250ZXh0QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQu
aCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlY4
QmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCkBAIC00
Miw2ICs0NCw3IEBACiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKICNpbmNsdWRlICJWOFdlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oIgogI2VuZGlmCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04OSw0ICs5MiwyMiBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVuCiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0K
IAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTENh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgZG91YmxlIHF1YWxpdHkg
PSAxLjA7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAxKSB7CisgICAgICAgIGlmIChhcmdzWzFd
LT5Jc051bWJlcigpKQorICAgICAgICAgICAgcXVhbGl0eSA9IGFyZ3NbMV0tPk51bWJlclZhbHVl
KCk7CisgICAgICAgIGlmICghKDAuMCA8PSBxdWFsaXR5ICYmIHF1YWxpdHkgPD0gMS4wKSkKKyAg
ICAgICAgICAgIHF1YWxpdHkgPSAxLjA7CisgICAgfQorICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFz
ID0gVjhIVE1MQ2FudmFzRWxlbWVudDo6dG9OYXRpdmUoaG9sZGVyKTsKKyAgICBTdHJpbmcgdHlw
ZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBTdHJpbmcgcmVzdWx0ID0gY2FudmFzLT50b0RhdGFVUkwodHlwZSwgcXVhbGl0eSwgZWMp
OworICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CisgICAgcmV0dXJuIHY4U3RyaW5n
T3JVbmRlZmluZWQocmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
Q2FudmFzU3VyZmFjZS5jcHAJKHJldmlzaW9uIDU4MjMxKQorKysgV2ViQ29yZS9kb20vQ2FudmFz
U3VyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw3ICs2NSw3IEBA
IHZvaWQgQ2FudmFzU3VyZmFjZTo6c2V0U3VyZmFjZVNpemUoY29uc3QKICAgICBtX2ltYWdlQnVm
ZmVyLmNsZWFyKCk7CiB9CiAKLVN0cmluZyBDYW52YXNTdXJmYWNlOjp0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgQ2FudmFzU3VyZmFj
ZTo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSBxdWFsaXR5LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIW1fb3JpZ2luQ2xlYW4pIHsKICAgICAgICAgZWMg
PSBTRUNVUklUWV9FUlI7CkBAIC03OCw3ICs3OSw3IEBAIFN0cmluZyBDYW52YXNTdXJmYWNlOjp0
b0RhdGFVUkwoY29uc3QgU3QKICAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkgfHwgIU1JTUVUeXBl
UmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSkK
ICAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwoImltYWdlL3BuZyIpOwogCi0gICAg
cmV0dXJuIGJ1ZmZlcigpLT50b0RhdGFVUkwobWltZVR5cGUpOworICAgIHJldHVybiBidWZmZXIo
KS0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5KTsKIH0KIAogdm9pZCBDYW52YXNTdXJmYWNl
Ojp3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmKQpJbmRleDogV2ViQ29yZS9kb20vQ2FudmFzU3Vy
ZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaAkocmV2aXNp
b24gNTgyMzEpCisrKyBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChC
ZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
IAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
QEAgLTQxLDcgKzQzLDYgQEAgY2xhc3MgRmxvYXRTaXplOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRQb2ludDsKLWNsYXNzIFN0cmluZzsKIAog
Y2xhc3MgQ1NTU3R5bGVTZWxlY3RvcjsKIGNsYXNzIFJlbmRlckJveDsKQEAgLTU4LDcgKzU5LDkg
QEAgcHVibGljOgogICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgp
OyB9CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQog
Ci0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRpb25D
b2RlJik7CisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3Vi
bGUgcXVhbGl0eSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gdG9EYXRhVVJM
KG1pbWVUeXBlLCAxLjAsIGVjKTsgfQogCiAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGwJ
KHJldmlzaW9uIDU4MjMxKQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzMsNyBAQCBt
b2R1bGUgaHRtbCB7CiAgICAgICAgIGF0dHJpYnV0ZSBsb25nIHdpZHRoOwogICAgICAgICBhdHRy
aWJ1dGUgbG9uZyBoZWlnaHQ7CiAKLSAgICAgICAgRE9NU3RyaW5nIHRvRGF0YVVSTChpbiBbQ29u
dmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHR5cGUpCisgICAgICAg
IFtDdXN0b21dIERPTVN0cmluZyB0b0RhdGFVUkwoaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxU
b051bGxTdHJpbmddIERPTVN0cmluZyB0eXBlKQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2Vw
dGlvbik7CiAKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykgfHwgIUxBTkdVQUdF
X09CSkVDVElWRV9DCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CShyZXZpc2lvbiA1ODIzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIs
NyArODMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgcHV0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKEltYWdlRGF0YSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQpOwogICAgICAgICB2b2lkIHB1dFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoSW1hZ2VEYXRhKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCk7CiAKLSAgICAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBkb3VibGUgcXVhbGl0eSA9IDEuMCkgY29uc3Q7CiAjaWYgIVBMQVRGT1JNKENH
KQogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybSgpOyB9CiAgICAgICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShJ
bWFnZUNvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgSW1hZ2VDb2xvclNwYWNlIGRzdENvbG9yU3Bh
Y2UpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA1ODIzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIs
NiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRv
cmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgzLDcgKzI4NCw3IEBAIHN0YXRpYyBjYWly
b19zdGF0dXNfdCB3cml0ZUZ1bmN0aW9uKHZvaWQKICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1NV
Q0NFU1M7CiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBkb3VibGUpIGNvbnN0CiB7CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFn
ZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAg
aWYgKCFpbWFnZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcAkocmV2aXNpb24gNTgyMzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4g
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNzUsNyArMjc2LDcgQEAgc3RhdGljIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJv
bU1JTQogI2VuZGlmCiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKE1JTUVUeXBl
UmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7
CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlr
dS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFn
ZUJ1ZmZlckhhaWt1LmNwcAkocmV2aXNpb24gNTgyMzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJz
dGlwcGlAZ214LmRlPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamlu
ZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzA5LDcgKzMxMCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRp
cGxpZWRJbWFnZUQKICAgICBwdXRJbWFnZURhdGEoc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9p
bnQsIG1fZGF0YSwgbV9zaXplLCB0cnVlKTsKIH0KIAotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSkgY29uc3QKIHsKICAgICBp
ZiAoIU1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5n
KG1pbWVUeXBlKSkKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCShyZXZpc2lvbiA1ODIzMSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUg
KEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2NSw5ICsyNjYsMTAgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0
UHJlbXVsdGlwbGllZEltYWdlRAogLy8gV2UgZ2V0IGEgbWltZVR5cGUgaGVyZSBidXQgUUltYWdl
V3JpdGVyIGRvZXMgbm90IHN1cHBvcnQgbWltZXR5cGVzIGJ1dAogLy8gb25seSBmb3JtYXRzIChw
bmcsIGdpZiwganBlZy4uLiwgeHBtKS4gU28gYXNzdW1lIHdlIGdldCBpbWFnZS8gYXMgaW1hZ2UK
IC8vIG1pbWV0eXBlcyBhbmQgdGhlbiByZW1vdmUgdGhlIGltYWdlLyB0byBnZXQgdGhlIFF0IGZv
cm1hdC4KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBkb3VibGUgcXVhbGl0eSkgY29uc3QKIHsKICAgICBBU1NFUlQoTUlNRVR5cGVSZWdp
c3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAg
ICBBU1NFUlQoMC4wIDw9IHF1YWxpdHkgJiYgcXVhbGl0eSA8PSAxLjApOwogCiAgICAgaWYgKCFt
aW1lVHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKSkKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwpA
QCAtMjc3LDggKzI3OSwxMCBAQCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBT
dHJpCiAgICAgUUJ1ZmZlciBidWZmZXIoJmRhdGEpOwogICAgIGJ1ZmZlci5vcGVuKFFCdWZmZXI6
OldyaXRlT25seSk7CiAKLSAgICBpZiAoIW1fZGF0YS5tX3BpeG1hcC5zYXZlKCZidWZmZXIsIG1p
bWVUeXBlLnN1YnN0cmluZyhzaXplb2YgImltYWdlIikudXRmOCgpLmRhdGEoKSkpCisgICAgaWYg
KCFtX2RhdGEubV9waXhtYXAuc2F2ZSgmYnVmZmVyLCBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9m
ICJpbWFnZSIpLnV0ZjgoKS5kYXRhKCksIHF1YWxpdHkgKiAxMDAgKyAwLjUpKSB7CisgICAgICAg
IGJ1ZmZlci5jbG9zZSgpOwogICAgICAgICByZXR1cm4gImRhdGE6LCI7CisgICAgfQogCiAgICAg
YnVmZmVyLmNsb3NlKCk7CiAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJkYXRhOiVzO2Jhc2U2
NCwlcyIsIG1pbWVUeXBlLnV0ZjgoKS5kYXRhKCksIGRhdGEudG9CYXNlNjQoKS5kYXRhKCkpOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVy
U2tpYS5jcHAJKHJldmlzaW9uIDU4MjMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChjKSAyMDA4LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIAogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC0yNjAsNyArMjYxLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdl
RAogICAgIHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVJlY3QsIGRl
c3RQb2ludCwgKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpLCBtX3NpemUp
OwogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmKSBjb25z
dAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgZG91YmxlKSBj
b25zdAogewogICAgIC8vIEVuY29kZSB0aGUgaW1hZ2UgaW50byBhIHZlY3Rvci4KICAgICBWZWN0
b3I8dW5zaWduZWQgY2hhcj4gcG5nRW5jb2RlZERhdGE7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5jZS5jcHAJKHJldmlzaW9u
IDU4MjMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldp
bmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxNSw3ICsyMTYsNyBAQCB2b2lk
IEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VECiAgICAgcHV0SW1hZ2VEYXRhPHRy
dWU+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEubV9iaXRtYXAuZ2V0KCkp
OwogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKSBjb25zdAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgZG91YmxlKSBjb25zdAogewogICAgIGlmICghbV9kYXRhLm1fYml0bWFwLT5ieXRl
cygpKQogICAgICAgICByZXR1cm4gImRhdGE6LCI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHJldmlzaW9uIDU4MjMxKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4gT2xsaXZp
ZXIgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNo
IE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzUsNyArNzYsNyBAQCB2b2lkIEltYWdlQnVmZmVy
OjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VECiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotU3Ry
aW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJikgY29uc3QKK1N0cmluZyBJ
bWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgY29uc3QKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBTdHJpbmcoKTsKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDU4MjMxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjMgQEAKKzIwMTAtMDQtMjUgIExlbyBZYW5nICA8bGVvLnlhbmdAdG9yY2htb2JpbGUu
Y29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEZpeCBjYW52YXMudG9EYXRhVVJMKHR5cGUsIHF1YWxpdHksIC4uLikgdG8gbGV0IGl0IHN1cHBv
cnQgcXVhbGl0eSBwYXJhbWV0ZXIuIAorICAgICAgICBBbmQgaW1wbGVtZW50IGl0IGluIFF0IHBy
b3RpbmcuIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzczMDQKKworICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVn
LWFscGhhLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9j
YW52YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcHJpbWFyeWNvbG9ycy1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1q
cGVnLXByaW1hcnljb2xvcnMuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFz
dC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1iYXNpYy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxp
dHktYmFzaWMuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMv
dG9EYXRhVVJMLWpwZWctcXVhbGl0eS1ub3RudW1iZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LW5v
dG51bWJlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90
b0RhdGFVUkwtanBlZy1xdWFsaXR5LW91dHNpZGVyYW5nZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHkt
b3V0c2lkZXJhbmdlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvY2Fu
dmFzL3RvRGF0YVVSTC1qcGVnLmpzOiBBZGRlZC4KKwogMjAxMC0wNC0yNSAgQW5kcmV5IEtvc3lh
a292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFy
dGguCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwt
anBlZy1hbHBoYS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJM
LWpwZWctYWxwaGEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1Rv
IHZlcmlmeSBqcGVnIGRhdGEgVVJMIHNob3VsZCB0YWtlIGFscGhhIGNvbXBvbmVudCBpbnRvIGFj
Y291bnQgaWYgY2FudmFzIGNvbG9yIGhhcyBhbHBoYSBjb21wb25lbnQKKworVGVzdCByZXN1bHQ6
IHBhc3NlZApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRh
VVJMLWpwZWctYWxwaGEuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9x
dC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1hbHBoYS5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctYWxwaGEu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8
c2NyaXB0IHNyYz0idG9EYXRhVVJMLWpwZWcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+Cisg
ICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgd2luZG93Lm5vdGlmeUVu
ZFRlc3QgPSBmdW5jdGlvbiAoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiB0ZXN0VG9EYXRh
VVJMKGNhbnZhcywgY3R4KQorICAgICAgICB7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0g
J3JnYmEoMTI4LCAyNTUsIDEyOCwgMC41KSc7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwg
MCwgMTAwLCA1MCk7CisgICAgICAgICAgICBjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0g
J2Rlc3RpbmF0aW9uLW92ZXInOyAvLyBzaG91bGQgYmUgaWdub3JlZCBieSB0b0RhdGFVUkwKKyAg
ICAgICAgICAgIHZhciBkYXRhID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpOworICAg
ICAgICAgICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdzb3VyY2Utb3Zlcic7Cisg
ICAgICAgICAgICBpZiAoIWRhdGEubWF0Y2goL15kYXRhOmltYWdlXC9qcGVnWzssXS8pKSB7Cisg
ICAgICAgICAgICAgICAgX2Fzc2VydCh0cnVlLCAidHJ1ZSIpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyNmMDAnOworICAgICAgICAgICAg
ICAgIGN0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDUwKTsKKyAgICAgICAgICAgICAgICB2YXIgaW1n
ID0gbmV3IEltYWdlKCk7CisgICAgICAgICAgICAgICAgZGVmZXJUZXN0KCk7CisgICAgICAgICAg
ICAgICAgaW1nLm9ubG9hZCA9IHdyYXBGdW5jdGlvbihmdW5jdGlvbiAoKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgX2Fzc2VydFBpeGVsQXBwcm94
KGNhbnZhcywgNTAsMjUsIDYzLDEyNyw2MywyNTUsICI1MCwyNSIsICI2MywxMjcsNjMsMjU1Iiwg
OCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGRhdGE7
CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIF9hZGRUZXN0KHRlc3RUb0RhdGFVUkwpOwor
ICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPHA+VG8gdmVyaWZ5IGpwZWcgZGF0
YSBVUkwgc2hvdWxkIHRha2UgYWxwaGEgY29tcG9uZW50IGludG8gYWNjb3VudCBpZiBjYW52YXMg
Y29sb3IgaGFzIGFscGhhIGNvbXBvbmVudDwvcD4KKyAgICA8Y2FudmFzIGlkPSJjIiB3aWR0aD0i
MTAwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKyAgICA8cCBpZD0iZCI+PC9wPgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRh
VVJMLWpwZWctcHJpbWFyeWNvbG9ycy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcHJpbWFyeWNvbG9y
cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9m
YXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1wcmltYXJ5Y29sb3JzLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUbyB2ZXJpZnkgY29sb3IgY29tcHJlc3NpbmcgbG9z
cyAod2hlbiB0aGUgcXVhbGl0eSBpcyAxLjApIGlzIGluIGEgdG9sZXJhYmxlIHJhbmdlCisKK1Rl
c3QgcmVzdWx0OiBwYXNzZWQKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2Fu
dmFzL3RvRGF0YVVSTC1qcGVnLXByaW1hcnljb2xvcnMuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1wcmltYXJ5Y29s
b3JzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2Nh
bnZhcy90b0RhdGFVUkwtanBlZy1wcmltYXJ5Y29sb3JzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTEgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9InRvRGF0YVVSTC1q
cGVnLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworCisgICAgICAgIHdpbmRvdy5ub3RpZnlFbmRUZXN0ID0gZnVuY3Rpb24gKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAg
IH07CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdFRvRGF0YVVSTChjYW52YXMsIGN0eCkKKyAgICAg
ICAgeworICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjZmYwJzsKKyAgICAgICAgICAgIGN0
eC5maWxsUmVjdCgwLCAwLCAyNSwgNDApOworICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcj
MGZmJzsKKyAgICAgICAgICAgIGN0eC5maWxsUmVjdCgyNSwgMCwgNTAsIDQwKTsKKyAgICAgICAg
ICAgIGN0eC5maWxsU3R5bGUgPSAnIzAwZic7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoNzUs
IDAsIDI1LCA0MCk7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyNmZmYnOworICAgICAg
ICAgICAgY3R4LmZpbGxSZWN0KDAsIDQwLCAxMDAsIDEwKTsKKyAgICAgICAgICAgIHZhciBkYXRh
ID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpOyAvLyBpdCBpcyBva2F5IGlmIHRoaXMg
cmV0dXJucyBhIFBORyBpbnN0ZWFkCisgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyNmMDAn
OworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgNTApOworICAgICAgICAgICAg
dmFyIGltZyA9IG5ldyBJbWFnZSgpOworICAgICAgICAgICAgZGVmZXJUZXN0KCk7CisKKyAgICAg
ICAgICAgIGltZy5vbmxvYWQgPSB3cmFwRnVuY3Rpb24oZnVuY3Rpb24gKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7CisgICAgICAgICAg
ICAgICAgX2Fzc2VydFBpeGVsQXBwcm94KGNhbnZhcywgMTIsMjAsIDI1NSwyNTUsMCwyNTUsICIx
MiwyMCIsICIyNTUsMjU1LDAsMjU1IiwgOCk7CisgICAgICAgICAgICAgICAgX2Fzc2VydFBpeGVs
QXBwcm94KGNhbnZhcywgNTAsMjAsIDAsMjU1LDI1NSwyNTUsICI1MCwyMCIsICIwLDI1NSwyNTUs
MjU1IiwgOCk7CisgICAgICAgICAgICAgICAgX2Fzc2VydFBpeGVsQXBwcm94KGNhbnZhcywgODcs
MjAsIDAsMCwyNTUsMjU1LCAiODcsMjAiLCAiMCwwLDI1NSwyNTUiLCA4KTsKKyAgICAgICAgICAg
ICAgICBfYXNzZXJ0UGl4ZWxBcHByb3goY2FudmFzLCA1MCw0NSwgMjU1LDI1NSwyNTUsMjU1LCAi
NTAsNDUiLCAiMjU1LDI1NSwyNTUsMjU1IiwgOCk7CisgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgaW1nLnNyYyA9IGRhdGE7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKKyAgICAgICAgfQorICAgICAgICBfYWRkVGVzdCh0ZXN0VG9EYXRhVVJMKTsKKyAg
ICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxwPlRvIHZlcmlmeSBjb2xvciBjb21w
cmVzc2luZyBsb3NzICh3aGVuIHRoZSBxdWFsaXR5IGlzIDEuMCkgaXMgaW4gYSB0b2xlcmFibGUg
cmFuZ2U8L3A+CisgICAgPGNhbnZhcyBpZD0iYyIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI1MCI+PC9j
YW52YXM+CisgICAgPHAgaWQ9ImQiPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktYmFz
aWMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zh
c3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktYmFzaWMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJM
LWpwZWctcXVhbGl0eS1iYXNpYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MyBAQAorVG8gdmVyaWZ5IGJhc2ljIGpwZWcgY29tcHJlc3NpbmcgbG9zczogMSkgTG93IHF1bGl0
eSBVUkwncyBsZW5ndGggc2hvdWxkIGJlIHNob3J0ZXIgdGhhbiBoaWdoIHF1bGl0eSBVUkwncyBs
ZW5ndGgsIDIpIENvbXByZXNzIGxvc3Mgc2hvdWxkIGJlIGluIGEgdG9sZXJhYmxlIHJhbmdlCisK
K1Rlc3QgcmVzdWx0OiBwYXNzZWQKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3Qv
Y2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktYmFzaWMuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5
LWJhc2ljLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0
L2NhbnZhcy90b0RhdGFVUkwtanBlZy1xdWFsaXR5LWJhc2ljLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjAgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9InRvRGF0YVVS
TC1qcGVnLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworCisgICAgICAgIHdpbmRvdy5ub3RpZnlFbmRUZXN0ID0gZnVuY3Rpb24gKCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAg
ICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdFRvRGF0YVVSTChjYW52YXMsIGN0eCkKKyAg
ICAgICAgeworICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjMDBmJzsKKyAgICAgICAgICAg
IGN0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDUwKTsKKyAgICAgICAgICAgIGN0eC5maWxsU3R5bGUg
PSAnIzBmZic7CisgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMywgMTAwLCAxKTsKKyAgICAg
ICAgICAgIC8vIENoZWNrIGZvciBKUEVHIHN1cHBvcnQgZmlyc3QKKyAgICAgICAgICAgIHZhciBk
YXRhID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpOworICAgICAgICAgICAgaWYgKCFk
YXRhLm1hdGNoKC9eZGF0YTppbWFnZVwvanBlZ1s7LF0vKSkgeworICAgICAgICAgICAgICAgIF9h
c3NlcnQodHJ1ZSwgInRydWUiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgdmFyIGRhdGFfaGkgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMC45OSk7Cisg
ICAgICAgICAgICAgICAgdmFyIGRhdGFfbG8gPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVn
JywgMC4wMSk7CisgICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjZjAwJzsKKyAgICAg
ICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCA1MCk7CisgICAgICAgICAgICAgICAg
ZGVmZXJUZXN0KCk7CisgICAgICAgICAgICAgICAgdmFyIGltZ19oaSA9IG5ldyBJbWFnZSgpOwor
ICAgICAgICAgICAgICAgIGltZ19oaS5vbmxvYWQgPSBmdW5jdGlvbiAoKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGltZ19sbyA9IG5ldyBJbWFnZSgpOworICAg
ICAgICAgICAgICAgICAgICBpbWdfbG8ub25sb2FkID0gd3JhcEZ1bmN0aW9uKGZ1bmN0aW9uICgp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5kcmF3
SW1hZ2UoaW1nX2hpLCAwLCAwLCA1MCwgNTAsIDAsIDAsIDUwLCA1MCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZ19sbywgMCwgMCwgNTAsIDUwLCA1MCwgMCwgNTAs
IDUwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
X2Fzc2VydChkYXRhX2hpLmxlbmd0aCA+IGRhdGFfbG8ubGVuZ3RoLCAiZGF0YV9oaS5sZW5ndGgg
PiBkYXRhX2xvLmxlbmd0aCIpOworICAgICAgICAgICAgICAgICAgICAgICAgX2Fzc2VydFBpeGVs
QXBwcm94KGNhbnZhcywgMjUsMjUsIDAsMCwyNTUsMjU1LCAiMjUsMjUiLCAiMCwwLDI1NSwyNTUi
LCAxMik7CisgICAgICAgICAgICAgICAgICAgICAgICBfYXNzZXJ0UGl4ZWxBcHByb3goY2FudmFz
LCA3NSwyNSwgMCwwLDI1NSwyNTUsICI3NSwyNSIsICIwLDAsMjU1LDI1NSIsIDEyKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGltZ19sby5zcmMgPSBkYXRh
X2xvOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgaW1nX2hpLnNyYyA9IGRh
dGFfaGk7CisKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBfYWRkVGVzdCh0ZXN0VG9E
YXRhVVJMKTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxwPlRvIHZlcmlm
eSBiYXNpYyBqcGVnIGNvbXByZXNzaW5nIGxvc3M6IDEpIExvdyBxdWxpdHkgVVJMJ3MgbGVuZ3Ro
IHNob3VsZCBiZSBzaG9ydGVyIHRoYW4gaGlnaCBxdWxpdHkgVVJMJ3MgbGVuZ3RoLCAyKSBDb21w
cmVzcyBsb3NzIHNob3VsZCBiZSBpbiBhIHRvbGVyYWJsZSByYW5nZTwvcD4KKyAgICA8Y2FudmFz
IGlkPSJjIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKyAgICA8cCBpZD0iZCI+
PC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFz
dC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1ub3RudW1iZXItZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVS
TC1qcGVnLXF1YWxpdHktbm90bnVtYmVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHkt
bm90bnVtYmVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitJZiB0
aGUgcXVhbGl0eSBwYXJhbWV0ZXIgaXMgbm90IGEgbnVtYmVyLCBpdCBzaG91bGQgYmUgdHJlYXRl
ZCBhcyAxLjAKKworVGVzdCByZXN1bHQ6IHBhc3NlZApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1ub3RudW1iZXIuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFV
UkwtanBlZy1xdWFsaXR5LW5vdG51bWJlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1ub3RudW1i
ZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorPGh0bWw+Cis8aGVhZD4KKyAg
ICA8c2NyaXB0IHNyYz0idG9EYXRhVVJMLWpwZWcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+
CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgd2luZG93Lm5vdGlm
eUVuZFRlc3QgPSBmdW5jdGlvbiAoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiB0ZXN0VG9E
YXRhVVJMKGNhbnZhcywgY3R4KQorICAgICAgICB7CisgICAgICAgICAgICBjdHguZmlsbFN0eWxl
ID0gJyMwMGYnOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgNTApOworICAg
ICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjMGZmJzsKKyAgICAgICAgICAgIGN0eC5maWxsUmVj
dCgwLCAzLCAxMDAsIDEpOworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIEpQRUcgc3VwcG9ydCBm
aXJzdAorICAgICAgICAgICAgdmFyIGRhdGEgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVn
Jyk7CisgICAgICAgICAgICBpZiAoIWRhdGEubWF0Y2goL15kYXRhOmltYWdlXC9qcGVnWzssXS8p
KSB7CisgICAgICAgICAgICAgICAgX2Fzc2VydCh0cnVlLCAidHJ1ZSIpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9EYXRhVVJMKCdp
bWFnZS9qcGVnJywgJ2JvZ3VzJyksIGRhdGEsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVn
JywgJ2JvZ3VzJykiLCAiZGF0YSIpOworICAgICAgICAgICAgICAgIF9hc3NlcnRTYW1lKGNhbnZh
cy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCB7fSksIGRhdGEsICJjYW52YXMudG9EYXRhVVJMKCdp
bWFnZS9qcGVnJywge30pIiwgImRhdGEiKTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShj
YW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgbnVsbCksIGRhdGEsICJjYW52YXMudG9EYXRh
VVJMKCdpbWFnZS9qcGVnJywgbnVsbCkiLCAiZGF0YSIpOworICAgICAgICAgICAgICAgIF9hc3Nl
cnRTYW1lKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCB1bmRlZmluZWQpLCBkYXRhLCAi
Y2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHVuZGVmaW5lZCkiLCAiZGF0YSIpOworICAg
ICAgICAgICAgICAgIF9hc3NlcnRTYW1lKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCB0
cnVlKSwgZGF0YSwgImNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCB0cnVlKSIsICJkYXRh
Iik7CisgICAgICAgICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2Uv
anBlZycsICcwLjAxJyksIGRhdGEsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgJzAu
MDEnKSIsICJkYXRhIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBfYWRkVGVzdCh0ZXN0VG9EYXRhVVJMKTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorICAgIDxwPklmIHRoZSBxdWFsaXR5IHBhcmFtZXRlciBpcyBub3QgYSBudW1iZXIsIGl0
IHNob3VsZCBiZSB0cmVhdGVkIGFzIDEuMDwvcD4KKyAgICA8Y2FudmFzIGlkPSJjIiB3aWR0aD0i
MTAwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKyAgICA8cCBpZD0iZCI+PC9wPgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRh
VVJMLWpwZWctcXVhbGl0eS1vdXRzaWRlcmFuZ2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxp
dHktb3V0c2lkZXJhbmdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL3F0L2Zhc3QvY2FudmFzL3RvRGF0YVVSTC1qcGVnLXF1YWxpdHktb3V0c2lkZXJh
bmdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitJZiB0aGUgcXVh
bGl0eSBwYXJhbWV0ZXIgaXMgb3V0IG9mIHJhbmdlLCBpdCBzaG91bGQgYmUgdHJlYXRlZCBhcyAx
LjAKKworVGVzdCByZXN1bHQ6IHBhc3NlZApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
ZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1vdXRzaWRlcmFuZ2UuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0RhdGFVUkwt
anBlZy1xdWFsaXR5LW91dHNpZGVyYW5nZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWctcXVhbGl0eS1vdXRzaWRl
cmFuZ2UuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorPGh0bWw+Cis8aGVhZD4K
KyAgICA8c2NyaXB0IHNyYz0idG9EYXRhVVJMLWpwZWcuanMiPjwvc2NyaXB0PgorICAgIDxzY3Jp
cHQ+CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgd2luZG93Lm5v
dGlmeUVuZFRlc3QgPSBmdW5jdGlvbiAoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiB0ZXN0
VG9EYXRhVVJMKGNhbnZhcywgY3R4KQorICAgICAgICB7CisgICAgICAgICAgICBjdHguZmlsbFN0
eWxlID0gJyMwMGYnOworICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgNTApOwor
ICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjMGZmJzsKKyAgICAgICAgICAgIGN0eC5maWxs
UmVjdCgwLCAzLCAxMDAsIDEpOworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIEpQRUcgc3VwcG9y
dCBmaXJzdAorICAgICAgICAgICAgdmFyIGRhdGEgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9q
cGVnJyk7CisgICAgICAgICAgICBpZiAoIWRhdGEubWF0Y2goL15kYXRhOmltYWdlXC9qcGVnWzss
XS8pKSB7CisgICAgICAgICAgICAgICAgX2Fzc2VydCh0cnVlLCAidHJ1ZSIpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2FtZShjYW52YXMudG9EYXRhVVJM
KCdpbWFnZS9qcGVnJywgMTApLCBkYXRhLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycs
IDEwKSIsICJkYXRhIik7CisgICAgICAgICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFzLnRvRGF0
YVVSTCgnaW1hZ2UvanBlZycsIC0xMCksIGRhdGEsICJjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9q
cGVnJywgLTEwKSIsICJkYXRhIik7CisgICAgICAgICAgICAgICAgX2Fzc2VydFNhbWUoY2FudmFz
LnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEuMDEpLCBkYXRhLCAiY2FudmFzLnRvRGF0YVVSTCgn
aW1hZ2UvanBlZycsIDEuMDEpIiwgImRhdGEiKTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0U2Ft
ZShjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgLTAuMDEpLCBkYXRhLCAiY2FudmFzLnRv
RGF0YVVSTCgnaW1hZ2UvanBlZycsIC0wLjAxKSIsICJkYXRhIik7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBfYXNzZXJ0KGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAxKS5s
ZW5ndGggPj0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDAuOSkubGVuZ3RoLCAiY2Fu
dmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEpLmxlbmd0aCA+PSBjYW52YXMudG9EYXRhVVJM
KCdpbWFnZS9qcGVnJywgMC45KS5sZW5ndGgiKTsKKyAgICAgICAgICAgICAgICBfYXNzZXJ0KGNh
bnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAwKS5sZW5ndGggPD0gY2FudmFzLnRvRGF0YVVS
TCgnaW1hZ2UvanBlZycsIDAuMSkubGVuZ3RoLCAiY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBl
ZycsIDApLmxlbmd0aCA8PSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMC4xKS5sZW5n
dGgiKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBfYWRkVGVzdCh0ZXN0VG9EYXRh
VVJMKTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxwPklmIHRoZSBxdWFs
aXR5IHBhcmFtZXRlciBpcyBvdXQgb2YgcmFuZ2UsIGl0IHNob3VsZCBiZSB0cmVhdGVkIGFzIDEu
MDwvcD4KKyAgICA8Y2FudmFzIGlkPSJjIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUwIj48L2NhbnZh
cz4KKyAgICA8cCBpZD0iZCI+PC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWcuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9jYW52YXMvdG9EYXRhVVJMLWpwZWcuanMJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2NhbnZhcy90b0Rh
dGFVUkwtanBlZy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTcgQEAKK2Z1bmN0aW9uIF92
YWxUb1N0cmluZyh2YWwpCit7CisJaWYgKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVs
bCkKKwkJcmV0dXJuICdbJyArIHR5cGVvZih2YWwpICsgJ10nOworCXJldHVybiB2YWwudG9TdHJp
bmcoKSArICdbJyArIHR5cGVvZih2YWwpICsgJ10nOworfQorCit2YXIgX2hleDJkZWNfdGFibGUg
PSB7CisJMDowLCAxOjEsIDI6MiwgMzozLCA0OjQsIDU6NSwgNjo2LCA3OjcsIDg6OCwgOTo5LAor
CWE6MTAsIGI6MTEsIGM6MTIsIGQ6MTMsIGU6MTQsIGY6MTUsCisJQToxMCwgQjoxMSwgQzoxMiwg
RDoxMywgRToxNCwgRjoxNQorfTsKK2Z1bmN0aW9uIF9oZXgyZGVjKGhleCkKK3sKKwlyZXR1cm4g
X2hleDJkZWNfdGFibGVbaGV4LmNoYXJBdCgwKV0qMTYgKyBfaGV4MmRlY190YWJsZVtoZXguY2hh
ckF0KDEpXTsKK30KKwordmFyIF9mYWlsZWQgPSBmYWxzZTsKK3ZhciBfYXNzZXJ0ZWQgPSBmYWxz
ZTsKK2Z1bmN0aW9uIF93YXJuKHRleHQpCit7CisJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Qn
KS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpKS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7Cit9CitmdW5jdGlvbiBfZmFpbCh0ZXh0KQor
eworCV93YXJuKHRleHQpOworCV9mYWlsZWQgPSB0cnVlOworfQorCitmdW5jdGlvbiBfYXNzZXJ0
KGNvbmQsIHRleHQpCit7CisJX2Fzc2VydGVkID0gdHJ1ZTsKKwlpZiAoISBjb25kKQorCQlfZmFp
bCgnRmFpbGVkIGFzc2VydGlvbjogJyArIHRleHQpOworfQorCitmdW5jdGlvbiBfYXNzZXJ0U2Ft
ZShhLCBiLCB0ZXh0X2EsIHRleHRfYikKK3sKKwlfYXNzZXJ0ZWQgPSB0cnVlOworCWlmIChhICE9
PSBiKQorCQlfZmFpbCgnRmFpbGVkIGFzc2VydGlvbiAnICsgdGV4dF9hICsgJyA9PT0gJyArIHRl
eHRfYiArCisJCQkJJyAoZ290ICcgKyBfdmFsVG9TdHJpbmcoYSkgKyAnLCBleHBlY3RlZCAnICsg
X3ZhbFRvU3RyaW5nKGIpICsgJyknKTsKK30KKworZnVuY3Rpb24gX2Fzc2VydERpZmZlcmVudChh
LCBiLCB0ZXh0X2EsIHRleHRfYikKK3sKKwlfYXNzZXJ0ZWQgPSB0cnVlOworCWlmIChhID09PSBi
KQorCQlfZmFpbCgnRmFpbGVkIGFzc2VydGlvbiAnICsgdGV4dF9hICsgJyAhPT0gJyArIHRleHRf
YiArCisJCQkJJyAoZ290ICcgKyBfdmFsVG9TdHJpbmcoYSkgKyAnLCBleHBlY3RlZCBub3QgJyAr
IF92YWxUb1N0cmluZyhiKSArICcpJyk7Cit9CisKK2Z1bmN0aW9uIF9hc3NlcnRFcXVhbChhLCBi
LCB0ZXh0X2EsIHRleHRfYikKK3sKKwlfYXNzZXJ0ZWQgPSB0cnVlOworCWlmIChhICE9IGIpCisJ
CV9mYWlsKCdGYWlsZWQgYXNzZXJ0aW9uICcgKyB0ZXh0X2EgKyAnID09ICcgKyB0ZXh0X2IgKwor
CQkJCScgKGdvdCAnICsgX3ZhbFRvU3RyaW5nKGEpICsgJywgZXhwZWN0ZWQgJyArIF92YWxUb1N0
cmluZyhiKSArICcpJyk7Cit9CisKK2Z1bmN0aW9uIF9hc3NlcnRNYXRjaChhLCBiLCB0ZXh0X2Es
IHRleHRfYikKK3sKKwlfYXNzZXJ0ZWQgPSB0cnVlOworCWlmICghIGEubWF0Y2goYikpCisJCV9m
YWlsKCdGYWlsZWQgYXNzZXJ0aW9uICcgKyB0ZXh0X2EgKyAnIG1hdGNoZXMgJyArIHRleHRfYiAr
CisJCQkJJyAoZ290ICcgKyBfdmFsVG9TdHJpbmcoYSkgKyAnKScpOworfQorCisKK3ZhciBfbWFu
dWFsX2NoZWNrID0gZmFsc2U7CisKK2Z1bmN0aW9uIF9yZXF1aXJlTWFudWFsQ2hlY2soKQorewor
CV9tYW51YWxfY2hlY2sgPSB0cnVlOworfQorCitmdW5jdGlvbiBfY3Jhc2goKQoreworCV9mYWls
KCdBYm9ydGVkIGR1ZSB0byBwcmVkaWN0ZWQgY3Jhc2gnKTsKK30KKwordmFyIF9nZXRJbWFnZURh
dGFDYWxpYnJhdGVkID0gZmFsc2U7Cit2YXIgX2dldEltYWdlRGF0YUlzUHJlbXVsLCBfZ2V0SW1h
Z2VEYXRhSXNCR1JBOworCitmdW5jdGlvbiBfZ2V0UGl4ZWwoY2FudmFzLCB4LHkpCit7CisJdmFy
IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOworCWlmIChjdHggJiYgdHlwZW9mKGN0eC5n
ZXRJbWFnZURhdGEpICE9ICd1bmRlZmluZWQnKQorCXsKKwkJdHJ5IHsKKwkJCXZhciBpbWdkYXRh
ID0gY3R4LmdldEltYWdlRGF0YSh4LCB5LCAxLCAxKTsKKwkJfSBjYXRjaCAoZSkgeworCQkJLy8g
cHJvYmFibHkgYSBzZWN1cml0eSBleGNlcHRpb24gY2F1c2VkIGJ5IGhhdmluZyBkcmF3bgorCQkJ
Ly8gZGF0YTogVVJMcyBvbnRvIHRoZSBjYW52YXMKKwkJCWltZ2RhdGEgPSBudWxsOworCQl9CisJ
CWlmIChpbWdkYXRhKQorCQl7CisJCQkvLyBXb3JrIGFyb3VuZCBnZXRJbWFnZURhdGEgYnVncywg
c2luY2Ugd2Ugd2FudCB0aGUgb3RoZXIgdGVzdHMgdG8KKwkJCS8vIGNhcnJ5IG9uIHdvcmtpbmcg
YXMgd2VsbCBhcyBwb3NzaWJsZQorCQkJaWYgKCEgX2dldEltYWdlRGF0YUNhbGlicmF0ZWQpCisJ
CQl7CisJCQkJdmFyIGMyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CisJCQkJ
YzIud2lkdGggPSBjMi5oZWlnaHQgPSAxOworCQkJCXZhciBjdHgyID0gYzIuZ2V0Q29udGV4dCgn
MmQnKTsKKwkJCQljdHgyLmZpbGxTdHlsZSA9ICdyZ2JhKDAsIDI1NSwgMjU1LCAwLjUpJzsKKwkJ
CQljdHgyLmZpbGxSZWN0KDAsIDAsIDEsIDEpOworCQkJCXZhciBkYXRhMiA9IGN0eDIuZ2V0SW1h
Z2VEYXRhKDAsIDAsIDEsIDEpLmRhdGE7CisKKwkJCQkvLyBGaXJlZm94IHJldHVybnMgcHJlbXVs
dGlwbGllZCBhbHBoYQorCisJCQkJaWYgKGRhdGEyWzFdID4gMTAwICYmIGRhdGEyWzFdIDwgMTUw
KQorCQkJCQlfZ2V0SW1hZ2VEYXRhSXNQcmVtdWwgPSB0cnVlOworCQkJCWVsc2UKKwkJCQkJX2dl
dEltYWdlRGF0YUlzUHJlbXVsID0gZmFsc2U7CisKKwkJCQkvLyBPcGVyYSBNaW5pIDQgQmV0YSBy
ZXR1cm5zIEJHUkEgaW5zdGVhZCBvZiBSR0JBCisKKwkJCQlpZiAoZGF0YTJbMF0gPiAyNTAgJiYg
ZGF0YTJbMl0gPCA1KQorCQkJCQlfZ2V0SW1hZ2VEYXRhSXNCR1JBID0gdHJ1ZTsKKwkJCQllbHNl
CisJCQkJCV9nZXRJbWFnZURhdGFJc0JHUkEgPSBmYWxzZTsKKworCQkJCV9nZXRJbWFnZURhdGFD
YWxpYnJhdGVkID0gdHJ1ZTsKKwkJCX0KKworCQkJLy8gVW5kbyB0aGUgQkdSQSBmbGlwcGluZwor
CQkJdmFyIHJnYmEgPSAoX2dldEltYWdlRGF0YUlzQkdSQQorCQkJCT8gWyBpbWdkYXRhLmRhdGFb
Ml0sIGltZ2RhdGEuZGF0YVsxXSwgaW1nZGF0YS5kYXRhWzBdLCBpbWdkYXRhLmRhdGFbM10gXQor
CQkJCTogWyBpbWdkYXRhLmRhdGFbMF0sIGltZ2RhdGEuZGF0YVsxXSwgaW1nZGF0YS5kYXRhWzJd
LCBpbWdkYXRhLmRhdGFbM10gXSk7CisKKwkJCWlmICghIF9nZXRJbWFnZURhdGFJc1ByZW11bCkK
KwkJCQlyZXR1cm4gcmdiYTsKKworCQkJLy8gVW5kbyB0aGUgcHJlbXVsdGlwbHlpbmcKKwkJCWlm
IChyZ2JhWzNdID09IDApCisJCQkJcmV0dXJuIFsgMCwgMCwgMCwgMCBdOworCQkJZWxzZQorCQkJ
eworCQkJCXZhciBhID0gcmdiYVszXSAvIDI1NTsKKwkJCQlyZXR1cm4gWworCQkJCQlNYXRoLnJv
dW5kKHJnYmFbMF0vYSksCisJCQkJCU1hdGgucm91bmQocmdiYVsxXS9hKSwKKwkJCQkJTWF0aC5y
b3VuZChyZ2JhWzJdL2EpLAorCQkJCQlyZ2JhWzNdCisJCQkJXTsKKwkJCX0KKwkJfQorCX0KKwor
CXRyeSB7IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCdvcGVyYS0yZGdhbWUnKTsgfSBjYXRjaCAo
ZSkgeyAvKiBGaXJlZm94IHRocm93cyAqLyB9CisJaWYgKGN0eCAmJiB0eXBlb2YoY3R4LmdldFBp
eGVsKSAhPSAndW5kZWZpbmVkJykKKwl7CisJCXRyeSB7CisJCQl2YXIgYyA9IGN0eC5nZXRQaXhl
bCh4LCB5KTsKKwkJfSBjYXRjaCAoZSkgeworCQkJLy8gcHJvYmFibHkgYSBzZWN1cml0eSBleGNl
cHRpb24gY2F1c2VkIGJ5IGhhdmluZyBkcmF3bgorCQkJLy8gZGF0YTogVVJMcyBvbnRvIHRoZSBj
YW52YXMKKwkJCWMgPSBudWxsOworCQl9CisJCWlmIChjKQorCQl7CisJCQl2YXIgbWF0Y2hlcyA9
IC9ecmdiYVwoKFxkKyksIChcZCspLCAoXGQrKSwgKFtcZFwuXSspXCkkLy5leGVjKGMpOworCQkJ
aWYgKG1hdGNoZXMpCisJCQkJcmV0dXJuIFsgbWF0Y2hlc1sxXSwgbWF0Y2hlc1syXSwgbWF0Y2hl
c1szXSwgTWF0aC5yb3VuZChtYXRjaGVzWzRdKjI1NSkgXTsKKwkJCW1hdGNoZXMgPSAvXiMoLi4p
KC4uKSguLikkLy5leGVjKGMpOworCQkJaWYgKG1hdGNoZXMpCisJCQkJcmV0dXJuIFsgX2hleDJk
ZWMobWF0Y2hlc1sxXSksIF9oZXgyZGVjKG1hdGNoZXNbMl0pLCBfaGV4MmRlYyhtYXRjaGVzWzNd
KSwgMjU1IF07CisJCX0KKwl9CisJLy9fd2FybigiKENhbid0IHRlc3QgcGl4ZWwgdmFsdWUpIik7
CisJX21hbnVhbF9jaGVjayA9IHRydWU7CisJcmV0dXJuIHVuZGVmaW5lZDsKK30KKworZnVuY3Rp
b24gX2Fzc2VydFBpeGVsKGNhbnZhcywgeCx5LCByLGcsYixhLCBwb3MsIGNvbG91cikKK3sKKwlf
YXNzZXJ0ZWQgPSB0cnVlOworCXZhciBjID0gX2dldFBpeGVsKGNhbnZhcywgeCx5KTsKKwlpZiAo
YyAmJiAhIChjWzBdID09IHIgJiYgY1sxXSA9PSBnICYmIGNbMl0gPT0gYiAmJiBjWzNdID09IGEp
KQorCQlfZmFpbCgnRmFpbGVkIGFzc2VydGlvbjogZ290IHBpeGVsIFsnICsgYyArICddIGF0ICgn
K3grJywnK3krJyksIGV4cGVjdGVkIFsnK3IrJywnK2crJywnK2IrJywnK2ErJ10nKTsKK30KKwor
ZnVuY3Rpb24gX2Fzc2VydFBpeGVsQXBwcm94KGNhbnZhcywgeCx5LCByLGcsYixhLCBwb3MsIGNv
bG91ciwgdG9sZXJhbmNlKQoreworCV9hc3NlcnRlZCA9IHRydWU7CisJdmFyIGMgPSBfZ2V0UGl4
ZWwoY2FudmFzLCB4LHkpOworCWlmIChjKQorCXsKKwkJdmFyIGRpZmYgPSBNYXRoLm1heChNYXRo
LmFicyhjWzBdLXIpLCBNYXRoLmFicyhjWzFdLWcpLCBNYXRoLmFicyhjWzJdLWIpLCBNYXRoLmFi
cyhjWzNdLWEpKTsKKwkJaWYgKGRpZmYgPiB0b2xlcmFuY2UpCisJCQlfZmFpbCgnRmFpbGVkIGFz
c2VydGlvbjogZ290IHBpeGVsIFsnICsgYyArICddIGF0ICgnK3grJywnK3krJyksIGV4cGVjdGVk
IFsnK3IrJywnK2crJywnK2IrJywnK2ErJ10gKy8tICcrdG9sZXJhbmNlKTsKKwl9Cit9CisKK2Z1
bmN0aW9uIF9hZGRUZXN0KHRlc3QpCit7CisJdmFyIGRlZmVycmVkID0gZmFsc2U7CisJd2luZG93
LmRlZmVyVGVzdCA9IGZ1bmN0aW9uICgpIHsgZGVmZXJyZWQgPSB0cnVlOyB9OworCWZ1bmN0aW9u
IGVuZFRlc3QoKQorCXsKKwkJaWYgKF9mYWlsZWQpIC8vIHRlc3QgZmFpbGVkCisJCXsKKwkJCWRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc05hbWUgKz0gJyBmYWlsJzsKKwkJCXdpbmRvdy5f
dGVzdFN0YXR1cyA9IFsnZmFpbCcsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkJykuaW5uZXJI
VE1MXTsKKwkJfQorCQllbHNlIGlmIChfbWFudWFsX2NoZWNrIHx8ICFfYXNzZXJ0ZWQpCisJCXsg
Ly8gdGVzdCBjYXNlIGV4cGxpY2l0bHkgYXNrZWQgZm9yIGEgbWFudWFsIGNoZWNrLCBvciBubyBh
dXRvbWF0aWMgYXNzZXJ0aW9ucyB3ZXJlIHBlcmZvcm1lZAorCQkJZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2QnKS5pbm5lckhUTUwgKz0gJzxsaT5DYW5ub3QgYXV0b21hdGljYWxseSB2ZXJpZnkg
cmVzdWx0JzsKKwkJCWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc05hbWUgKz0gJyBuZWVk
c19jaGVjayc7CisJCQl3aW5kb3cuX3Rlc3RTdGF0dXMgPSBbJ2NoZWNrJywgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2QnKS5pbm5lckhUTUxdOworCQl9CisJCWVsc2UgLy8gdGVzdCBzdWNjZWVk
ZWQKKwkJeworCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2QnKS5pbm5lckhUTUwgPSAnVGVz
dCByZXN1bHQ6IHBhc3NlZCc7CisJCQlkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NOYW1l
ICs9ICcgcGFzcyc7CisJCQl3aW5kb3cuX3Rlc3RTdGF0dXMgPSBbJ3Bhc3MnLCBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnZCcpLmlubmVySFRNTF07CisJCX0KKwkJaWYgKHdpbmRvdy5ub3RpZnlF
bmRUZXN0KQorCQkJbm90aWZ5RW5kVGVzdCgpOworCisJfQorCXdpbmRvdy5lbmRUZXN0ID0gZW5k
VGVzdDsKKwl3aW5kb3cud3JhcEZ1bmN0aW9uID0gZnVuY3Rpb24gKGYpCisJeworCQlyZXR1cm4g
ZnVuY3Rpb24oKQorCQl7CisJCQl0cnkKKwkJCXsKKwkJCQlmLmFwcGx5KG51bGwsIGFyZ3VtZW50
cyk7CisJCQl9CisJCQljYXRjaCAoZSkKKwkJCXsKKwkJCQlfZmFpbCgnQWJvcnRlZCB3aXRoIGV4
Y2VwdGlvbjogJyArIGUubWVzc2FnZSk7CisJCQl9CisJCQllbmRUZXN0KCk7CisJCX0KKwl9CisK
Kwl3aW5kb3cub25sb2FkID0gZnVuY3Rpb24gKCkKKwl7CisJCXRyeQorCQl7CisJCQl2YXIgY2Fu
dmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2MnKTsKKwkJCXZhciBjdHggPSBjYW52YXMu
Z2V0Q29udGV4dCgnMmQnKTsKKwkJCXRlc3QoY2FudmFzLCBjdHgpOworCQl9CisJCWNhdGNoIChl
KQorCQl7CisJCQlfZmFpbCgnQWJvcnRlZCB3aXRoIGV4Y2VwdGlvbjogJyArIGUubWVzc2FnZSk7
CisJCQlkZWZlcnJlZCA9IGZhbHNlOyAvLyBjYW5jZWwgYW55IGRlZmVyZW5jZQorCQl9CisKKwkJ
aWYgKCEgZGVmZXJyZWQpCisJCQllbmRUZXN0KCk7CisJfTsKK30K
</data>
<flag name="review"
          id="39934"
          type_id="1"
          status="+"
          setter="staikos"
    />
          </attachment>
      

    </bug>

</bugzilla>