<?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>34782</bug_id>
          
          <creation_ts>2010-02-09 18:16:39 -0800</creation_ts>
          <short_desc>Normalize custom ctors for Image, Option, Audio</short_desc>
          <delta_ts>2010-02-20 09:59:44 -0800</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>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yaar Schnitman">yaar</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>japhet</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>189199</commentid>
    <comment_count>0</comment_count>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-02-09 18:16:39 -0800</bug_when>
    <thetext>Normalize custom ctors for Image, Option, Audio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189202</commentid>
    <comment_count>1</comment_count>
      <attachid>48457</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-02-09 18:20:37 -0800</bug_when>
    <thetext>Created attachment 48457
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189205</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-09 18:27:28 -0800</bug_when>
    <thetext>Attachment 48457 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/250865</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189220</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-09 20:02:47 -0800</bug_when>
    <thetext>Attachment 48457 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/251891</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189243</commentid>
    <comment_count>4</comment_count>
      <attachid>48457</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-09 22:13:01 -0800</bug_when>
    <thetext>Comment on attachment 48457
Patch

This is *so* funny. I have a similar patch on my machine that I started working on earlier today. I chose to emphasize the fact that the create functions are for use with JavaScript constructors by using the name createForJSConstructor rather than just create for them. And I did the work for WebKit&apos;s built-in JavaScript engine too, not just for V8. As you should.

You&apos;re also using some non-standard formatting here. In the WebKit project we do not put each argument of a function on a separate line, even if there are many of them.

The arguments should be &quot;const String&amp;&quot; rather than &quot;String&quot;. And we name things &quot;document&quot;, not &quot;doc&quot;, in new code at least.

And we don&apos;t use PassRefPtr for local variables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189244</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-09 22:34:38 -0800</bug_when>
    <thetext>Attachment 48457 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/250962</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189397</commentid>
    <comment_count>6</comment_count>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-02-10 10:04:02 -0800</bug_when>
    <thetext>Very funny indeed!

Would you want to pick up from here, I should I continue working on this?

See my comments below:

(In reply to comment #4)
&gt; (From update of attachment 48457 [details])
&gt; I chose to emphasize the fact that the create functions are
&gt; for use with JavaScript constructors by using the name createForJSConstructor
&gt; rather than just create for them. 
That makes sense, but I want the create functions to follow the same naming conventions that already exist for XmlHttpRequest, Worker, etc.

&gt; JavaScript engine too, not just for V8. As you should.
True.

Once these ctors are normalized, we can refactor the code-generators to auto-generated the boiler-plate code around them. I&apos;m thinking about introducing new IDL ext attr&apos;s: &apos;ConstructViaNew&apos;, and &apos;ConstructWith=Document|ScriptExecutionContext&apos;, which will help V8/JSC populate the create dispatch. Another thing that will need to be solved is V8 not supporting [optional] parameters. Does JSC support [optional]?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189414</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-10 10:50:12 -0800</bug_when>
    <thetext>&gt; diff --git a/WebCore/html/HTMLImageElement.cpp b/WebCore/html/HTMLImageElement.cpp

&gt; +PassRefPtr&lt;HTMLImageElement&gt; HTMLImageElement::create(Document* doc, int width, int height)
&gt; +{
&gt; +    ASSERT(doc);
&gt; +    HTMLImageElement* image = new HTMLImageElement(imgTag, doc);
&gt; +    if (width &gt;= 0)
&gt; +        image-&gt;setWidth(width);
&gt; +    if (height &gt;= 0)
&gt; +        image-&gt;setHeight(height);
&gt; +    return image;

Shouldn&apos;t this be &quot;return adoptRef(image);&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190115</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-12 11:55:22 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Shouldn&apos;t this be &quot;return adoptRef(image);&quot;

No. Some DOM elements still start reference counts at 0. See bug 28068 for details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190116</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-12 11:57:13 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Would you want to pick up from here, I should I continue working on this?

I’ll post my partly done patch so you can merge the two. I need the media part of this for another bug fix I’m working on.

&gt; &gt; I chose to emphasize the fact that the create functions are
&gt; &gt; for use with JavaScript constructors by using the name createForJSConstructor
&gt; &gt; rather than just create for them. 
&gt; That makes sense, but I want the create functions to follow the same naming
&gt; conventions that already exist for XmlHttpRequest, Worker, etc.

One difference there is that those functions are only created from JavaScript.

&gt; Once these ctors are normalized, we can refactor the code-generators to
&gt; auto-generated the boiler-plate code around them. I&apos;m thinking about
&gt; introducing new IDL ext attr&apos;s: &apos;ConstructViaNew&apos;, and
&gt; &apos;ConstructWith=Document|ScriptExecutionContext&apos;, which will help V8/JSC
&gt; populate the create dispatch. Another thing that will need to be solved is V8
&gt; not supporting [optional] parameters. Does JSC support [optional]?

I don&apos;t know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190117</commentid>
    <comment_count>10</comment_count>
      <attachid>48655</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-12 11:58:40 -0800</bug_when>
    <thetext>Created attachment 48655
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191669</commentid>
    <comment_count>11</comment_count>
      <attachid>49032</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-02-18 11:07:21 -0800</bug_when>
    <thetext>Created attachment 49032
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191671</commentid>
    <comment_count>12</comment_count>
      <attachid>49032</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-02-18 11:14:16 -0800</bug_when>
    <thetext>Comment on attachment 49032
Patch

1. Darin and my patches are merged.
2. I adopted the createForJSConstructor naming.
3. Re: FIXME: always appending a text node to option: I think this is the right behavior for backward compatibility reasons and because option is quite useless without a text node with its content.
4. I liked the use of pointers for optional args, but I think it will make future auto-generation of the ctors too complex. Instead, I use default values. We can rethink this once the code-generation is fixed.
5. Added a layout test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191679</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-18 11:25:35 -0800</bug_when>
    <thetext>+    // Calling toJS on the document causes the JS document wrapper to be
+    // added to the window object. This is done to ensure that JSDocument::markChildren
+    // will be called, which will cause the audio element to be marked if necessary.
+    // FIXME: The correct way to do this would be to make HTMLMediaElement derive from
+    // ActiveDOMObject and use its interface to keep its wrapper alive. Then we would
+    // remove this code and the special case in isObservableThroughDOM.

Active DOM objects are marked from JSDocument::markChildren, so it seems that we would still need a document wrapper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191698</commentid>
    <comment_count>14</comment_count>
      <attachid>49032</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-18 12:39:04 -0800</bug_when>
    <thetext>Comment on attachment 49032
Patch

&gt; +// Image tests
&gt; +shouldBeNonNull(&quot;new Image()&quot;);
&gt; +shouldBe(&quot;new Image(100).width&quot;, &quot;100&quot;);
&gt; +shouldBe(&quot;new Image(100,200).height&quot;, &quot;200&quot;);

It&apos;s great to have some additional test coverage here. I&apos;d like to see a lot more things tested on these objects, though. These objects have tons of attributes, and this tests only the ones you can change with arguments. It would be easy to test a few more things, like making sure we have the right type of object and at least covering some of the other key attributes such as ownerDocument and form. You could even use tagName or outerHTML to check we get the right kind of element and possibly check that we get the correct prototype.

There should definitely be a test of width and height values for the cases where they are not set explicitly with constructor arguments.

There should be a test that autobuffer gets set for the new Audio element but not for document.createElement(&quot;audio&quot;).

&gt; +shouldBeEqualToString(&quot;new Option(&apos;data&apos;, &apos;value&apos;).value&quot;, &apos;value&apos;);

Same thing with value, a test where it is not set explicitly.

&gt; +        Normalize custom ctors for Image, Option, Audio
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=34782
&gt; +
&gt; +        Test: fast/js/custom-constructors.html

I&apos;m kind of disappointed at these change logs that are just automatically generated. I guess most people are doing that but I love the per function comments, even if brief.

&gt; - * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
&gt; + * Copyright (C) 2007, 2010 Apple Inc. All rights reserved.

Copyrights are followed by a list of years of publication. For a project like this where anyone can see things at any time, check-ins are roughly equivalent to publication. We should never remove a year as we are doing here with 2008. Did I do this in my patch? This should list the years that Apple work in this file was published. Lets just add 2010 without removing 2008.

&gt; +    // Calling toJS on the document causes the JS document wrapper to be
&gt; +    // added to the window object. This is done to ensure that JSDocument::markChildren
&gt; +    // will be called, which will cause the audio element to be marked if necessary.
&gt; +    // FIXME: The correct way to do this would be to make HTMLMediaElement derive from
&gt; +    // ActiveDOMObject and use its interface to keep its wrapper alive. Then we would
&gt; +    // remove this code and the special case in isObservableThroughDOM.
&gt; +    toJS(exec, jsConstructor-&gt;globalObject(), document);

This change is a bug fix. Ideally we need a test to demonstrate this bug; show that an audio element won&apos;t be deallocated while the audio is playing in the case this covers. We can probably live without that test case for now. Geoff Garen might have some advice on how to test this.

&gt; +    int width = -1;
&gt; +    int height = -1;

Why is it OK to use &quot;-1&quot; as a special value here? The old code went out of its way to not have any special values and track whether a value was passed separate from the actual value. I think it&apos;s possibly wrong to make negative numbers have a special meaning. I believe this changes behavior for the case where an actual negative number is passed. There should be test cases covering this and a rationale for why it&apos;s OK to change the behavior mentioned in the change log at least.

&gt; +    if (args.size() &gt; 0 &amp;&amp; !args.at(0).isUndefinedOrNull())
&gt; +        width = args.at(0).toInt32(exec);
&gt; +    if (args.size() &gt; 1 &amp;&amp; !args.at(1).isUndefinedOrNull())
&gt; +        height = args.at(1).toInt32(exec);

The code here is doing extra work. The isUndefinedOrNull() check will work without any check of args.size, so you don&apos;t need both.

The old code in this function did not have a special case for undefined or null, treating both as &quot;0&quot;, not as &quot;no value specified&quot;. You changed the behavior but did not add any test cases covering these cases you changed nor did you give any rationale for changing this.

&gt;      }
&gt; -    
&gt; +
&gt;      if (attrName == borderAttr || attrName == alignAttr) {

What&apos;s the reason for all this trailing whitespace stripping? This will gratuitously mark various unchanged lines as changed in Subversion history, and is not typically something we do in WebKit patches. Maybe it&apos;s something done at Google?

&gt; +    static PassRefPtr&lt;HTMLImageElement&gt; createForJSConstructor(Document*, const int width, const int height);

The &quot;const&quot; modifiers here have no effect and should be omitted.

Everything else looks good.

I&apos;m going to mark this as review- because I don&apos;t think the behavior changes for negative numbers and for undefined or null arguments for the image constructor should be combined with the rest of the change. If that behavior should change, I&apos;d like to see a test case covering it and have it done either before or after this refactoring instead of at the same time as the refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191714</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-18 13:34:28 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; +    // Calling toJS on the document causes the JS document wrapper to be
&gt; +    // added to the window object. This is done to ensure that
&gt; JSDocument::markChildren
&gt; +    // will be called, which will cause the audio element to be marked if
&gt; necessary.
&gt; +    // FIXME: The correct way to do this would be to make HTMLMediaElement
&gt; derive from
&gt; +    // ActiveDOMObject and use its interface to keep its wrapper alive. Then
&gt; we would
&gt; +    // remove this code and the special case in isObservableThroughDOM.
&gt; 
&gt; Active DOM objects are marked from JSDocument::markChildren, so it seems that
&gt; we would still need a document wrapper.

Good point. It seems the FIXME that I wrote that Yaar merged into his patch is wrong. Lets just leave the FIXME part of the comment out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191751</commentid>
    <comment_count>16</comment_count>
      <attachid>49044</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-02-18 14:57:58 -0800</bug_when>
    <thetext>Created attachment 49044
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191753</commentid>
    <comment_count>17</comment_count>
      <attachid>49044</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-02-18 15:03:04 -0800</bug_when>
    <thetext>Comment on attachment 49044
Patch

1. I added more tests.
2. Removed wrong FIXMEs
3. Uses const int* optionals

I also run the new tests against old safari and chromium to verify constructors behave the same. 

BTW, audio.autobuffer is true by default, but I tested anyway.

p.s. Whitespace changes: AFAIK, the latest webkit style rule about whitespace changes is that if I made real edits elsewhere in these files, its ok. I&apos;m using an automated tool to fix whitespace changes, and the new changes are correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191812</commentid>
    <comment_count>18</comment_count>
      <attachid>49044</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-18 21:00:57 -0800</bug_when>
    <thetext>Comment on attachment 49044
Patch

Clearing flags on attachment: 49044

Committed r54999: &lt;http://trac.webkit.org/changeset/54999&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191813</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-18 21:01:03 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192181</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-20 09:31:57 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; BTW, audio.autobuffer is true by default, but I tested anyway.

I suggest removing the unneeded line of code setting autobuffer, then.

    audio-&gt;setAutobuffer(true);

If it&apos;s true by default that line should not be needed.

&gt; p.s. Whitespace changes: AFAIK, the latest webkit style rule about whitespace
&gt; changes is that if I made real edits elsewhere in these files, its ok. I&apos;m
&gt; using an automated tool to fix whitespace changes, and the new changes are
&gt; correct.

I think this rule is strange, and I don&apos;t agree with it; I&apos;m not sure how it became the &quot;latest rule&quot;. I don&apos;t think it&apos;s good to have automated tools making insignificant changes that harm our ability to find real changes in file history and provide no tangible benefit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192184</commentid>
    <comment_count>21</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-02-20 09:37:47 -0800</bug_when>
    <thetext>&gt; &gt; p.s. Whitespace changes: AFAIK, the latest webkit style rule about whitespace
&gt; &gt; changes is that if I made real edits elsewhere in these files, its ok. I&apos;m
&gt; &gt; using an automated tool to fix whitespace changes, and the new changes are
&gt; &gt; correct.
&gt; 
&gt; I think this rule is strange, and I don&apos;t agree with it; I&apos;m not sure how it
&gt; became the &quot;latest rule&quot;. I don&apos;t think it&apos;s good to have automated tools
&gt; making insignificant changes that harm our ability to find real changes in file
&gt; history and provide no tangible benefit.

This might be a bit of a Chromium / WebKit culture clash.  Chromium-land is more aggressive about cleaning up style violations than WebKit-land is.  For folks that work in both code bases, it&apos;s easy to transplant cultural norms from one to the other.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192188</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-20 09:56:52 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; What&apos;s the reason for all this trailing whitespace stripping? This will
&gt; gratuitously mark various unchanged lines as changed in Subversion history, and
&gt; is not typically something we do in WebKit patches. Maybe it&apos;s something done
&gt; at Google?

(In reply to comment #21)
&gt; This might be a bit of a Chromium / WebKit culture clash.

I think it could be, yes. As I said in the comment quoted above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192189</commentid>
    <comment_count>23</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-02-20 09:59:44 -0800</bug_when>
    <thetext>Ah, I missed that.  I didn&apos;t read the whole code review.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48457</attachid>
            <date>2010-02-09 18:20:37 -0800</date>
            <delta_ts>2010-02-18 11:07:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34782-20100209182036.patch</filename>
            <type>text/plain</type>
            <size>16891</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWZkZjJjZi4uY2E1YWMwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMC0wMi0wOSAgWWFhciBTY2huaXRt
YW4gIDx5YWFyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBOb3JtYWxpemUgY3VzdG9tIGN0b3JzIGZvciBJbWFnZSwgT3B0aW9u
LCBBdWRpbworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzQ3ODIKKworICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2OEhUTUxBdWRpb0VsZW1lbnRDb25z
dHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1h
Z2VFbGVtZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6djhIVE1MSW1hZ2VF
bGVtZW50Q29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2
OEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgICogaHRtbC9I
VE1MQXVkaW9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdWRpb0VsZW1lbnQ6
OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9IVE1MQXVkaW9FbGVtZW50Lmg6CisgICAgICAgICog
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVs
ZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjptYXBU
b0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZVJlbmRl
cmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OmF0dGFjaCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW1hZ2VFbGVtZW50OjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdl
RWxlbWVudDo6bmF0dXJhbEhlaWdodCk6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50
Lmg6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxP
cHRpb25FbGVtZW50Ojpvd25lclNlbGVjdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9wdGlvbkVsZW1lbnQ6Om5vblJlbmRlcmVyUmVuZGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmRpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxP
cHRpb25FbGVtZW50OjppbnNlcnRlZEludG9UcmVlKToKKyAgICAgICAgKiBodG1sL0hUTUxPcHRp
b25FbGVtZW50Lmg6CisKIDIwMTAtMDItMDggIERvbWluaWMgQ29vbmV5ICA8ZG9taW5pY2NAZ29v
Z2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3Iu
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3Ry
dWN0b3IuY3BwCmluZGV4IDA2YzZjMWQuLjk1MjMwMTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5j
cHAKQEAgLTE0LDcgKzE0LDcgQEAKICAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgog
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtNjMsMTIgKzYz
LDExIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhIVE1MQXVkaW9FbGVtZW50Q29u
c3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJnCiAgICAgLy8gbWF5IGVuZCB1cCBiZWluZyB0
aGUgb25seSBub2RlIGluIHRoZSBtYXAgYW5kIGdldCBnYXJiYWdlLWNjb2xsZWN0ZWQgcHJlbWF0
dXJlbHkuCiAgICAgdG9WOChkb2N1bWVudCk7CiAKLSAgICBSZWZQdHI8SFRNTEF1ZGlvRWxlbWVu
dD4gYXVkaW8gPSBuZXcgSFRNTEF1ZGlvRWxlbWVudChIVE1MTmFtZXM6OmF1ZGlvVGFnLCBkb2N1
bWVudCk7Ci0gICAgYXVkaW8tPnNldEF1dG9idWZmZXIodHJ1ZSk7Ci0gICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgPiAwKSB7Ci0gICAgICAgIGF1ZGlvLT5zZXRTcmModG9XZWJDb3JlU3RyaW5nKGFyZ3Nb
MF0pKTsKLSAgICAgICAgYXVkaW8tPnNjaGVkdWxlTG9hZCgpOwotICAgIH0KKworICAgIFN0cmlu
ZyBzcmM7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAwKQorICAgICAgICBzcmMgPSB0b1dlYkNv
cmVTdHJpbmcoYXJnc1swXSk7CisgICAgUGFzc1JlZlB0cjxIVE1MQXVkaW9FbGVtZW50PiBhdWRp
byA9IEhUTUxBdWRpb0VsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgc3JjKTsKIAogICAgIFY4RE9N
V3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCBWOENsYXNzSW5kZXg6OlRvSW50
KFY4Q2xhc3NJbmRleDo6QVVESU8pLCBhdWRpby5nZXQoKSk7CiAgICAgYXVkaW8tPnJlZigpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50
Q29uc3RydWN0b3IuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VF
bGVtZW50Q29uc3RydWN0b3IuY3BwCmluZGV4IDE4NzMxODguLjUwYWVkZWEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9y
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRD
b25zdHJ1Y3Rvci5jcHAKQEAgLTE0LDcgKzE0LDcgQEAKICAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpA
QCAtNjMsMTMgKzYzLDExIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhIVE1MSW1h
Z2VFbGVtZW50Q29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJnCiAgICAgLy8gbWF5IGVu
ZCB1cCBiZWluZyB0aGUgb25seSBub2RlIGluIHRoZSBtYXAgYW5kIGdldCBnYXJiYWdlLWNjb2xs
ZWN0ZWQgcHJlbWF0dXJlbHkuCiAgICAgdG9WOChkb2N1bWVudCk7CiAKLSAgICBSZWZQdHI8SFRN
TEltYWdlRWxlbWVudD4gaW1hZ2UgPSBuZXcgSFRNTEltYWdlRWxlbWVudChIVE1MTmFtZXM6Omlt
Z1RhZywgZG9jdW1lbnQpOwotICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMCkgewotICAgICAgICBp
bWFnZS0+c2V0V2lkdGgodG9JbnQzMihhcmdzWzBdKSk7Ci0gICAgICAgIGlmIChhcmdzLkxlbmd0
aCgpID4gMSkKLSAgICAgICAgICAgIGltYWdlLT5zZXRIZWlnaHQodG9JbnQzMihhcmdzWzFdKSk7
Ci0gICAgfQogCisgICAgaW50IHdpZHRoID0gYXJncy5MZW5ndGgoKSA+PSAxID8gdG9JbnQzMihh
cmdzWzBdKSA6IC0xOworICAgIGludCBoZWlnaHQgPSBhcmdzLkxlbmd0aCgpID49IDIgPyB0b0lu
dDMyKGFyZ3NbMV0pIDogLTE7CisKKyAgICBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4gaW1hZ2Ug
PSBIVE1MSW1hZ2VFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIHdpZHRoLCBoZWlnaHQpOwogICAg
IFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCBWOENsYXNzSW5kZXg6
OlRvSW50KFY4Q2xhc3NJbmRleDo6SU1BR0UpLCBpbWFnZS5nZXQoKSk7CiAgICAgaW1hZ2UtPnJl
ZigpOwogICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NTm9kZShpbWFnZS5nZXQo
KSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25FbGVtZW50Q29u
c3RydWN0b3IuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxl
bWVudENvbnN0cnVjdG9yLmNwcAppbmRleCAzMTEzZWI1Li4yMGE5YjJmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3Iu
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbkVsZW1lbnRD
b25zdHJ1Y3Rvci5jcHAKQEAgLTE0LDcgKzE0LDcgQEAKICAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpA
QCAtNTksMzIgKzU5LDI1IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhIVE1MT3B0
aW9uRWxlbWVudENvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyCiAgICAgaWYgKCFkb2N1
bWVudCkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk9wdGlvbiBjb25zdHJ1Y3RvciBhc3Nv
Y2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIiwgVjhQcm94eTo6UmVmZXJlbmNlRXJyb3Ip
OwogCi0gICAgUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiBvcHRpb24gPSBuZXcgSFRNTE9wdGlv
bkVsZW1lbnQoSFRNTE5hbWVzOjpvcHRpb25UYWcsIGRvY3VtZW50KTsKLQogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxUZXh0PiB0ZXh0ID0gZG9jdW1lbnQtPmNyZWF0ZVRl
eHROb2RlKCIiKTsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDApIHsKLSAgICAgICAgaWYgKCFh
cmdzWzBdLT5Jc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICB0ZXh0LT5zZXREYXRhKHRvV2Vi
Q29yZVN0cmluZyhhcmdzWzBdKSwgZWMpOwotICAgICAgICAgICAgaWYgKGVjKQotICAgICAgICAg
ICAgICAgIHRocm93RXJyb3IoZWMpOwotICAgICAgICB9Ci0KLSAgICAgICAgb3B0aW9uLT5hcHBl
bmRDaGlsZCh0ZXh0LnJlbGVhc2UoKSwgZWMpOwotICAgICAgICBpZiAoZWMpCi0gICAgICAgICAg
ICB0aHJvd0Vycm9yKGVjKTsKLQotICAgICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEpIHsKLSAg
ICAgICAgICAgIGlmICghYXJnc1sxXS0+SXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBv
cHRpb24tPnNldFZhbHVlKHRvV2ViQ29yZVN0cmluZyhhcmdzWzFdKSk7Ci0KLSAgICAgICAgICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gMikgewotICAgICAgICAgICAgICAgIG9wdGlvbi0+c2V0RGVm
YXVsdFNlbGVjdGVkKGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBp
ZiAoYXJncy5MZW5ndGgoKSA+IDMpCi0gICAgICAgICAgICAgICAgICAgIG9wdGlvbi0+c2V0U2Vs
ZWN0ZWQoYXJnc1szXS0+Qm9vbGVhblZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQorICAgIFN0cmluZyBvcHRpb25UZXh0OworICAgIFN0cmluZyBvcHRpb25WYWx1ZTsK
KyAgICBib29sIGRlZmF1bHRTZWxlY3RlZCA9IGZhbHNlOworICAgIGJvb2wgc2VsZWN0ZWQgPSBm
YWxzZTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDAgJiYgIWFyZ3NbMF0tPklzVW5kZWZpbmVk
KCkpCisgICAgICAgIG9wdGlvblRleHQgPSBhcmdzWzBdLT5Jc1VuZGVmaW5lZCgpID8gIiIgOiB0
b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAxICYmICFh
cmdzWzFdLT5Jc1VuZGVmaW5lZCgpKQorICAgICAgICBvcHRpb25WYWx1ZSA9IHRvV2ViQ29yZVN0
cmluZyhhcmdzWzFdKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDIpCisgICAgICAgIGRlZmF1
bHRTZWxlY3RlZCA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOworICAgIGlmIChhcmdzLkxlbmd0
aCgpID4gMykKKyAgICAgICAgc2VsZWN0ZWQgPSBhcmdzWzNdLT5Cb29sZWFuVmFsdWUoKTsKKwor
ICAgIFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4gb3B0aW9uID0gSFRNTE9wdGlvbkVsZW1lbnQ6
OmNyZWF0ZSgKKyAgICAgICAgZG9jdW1lbnQsIG9wdGlvblRleHQsIG9wdGlvblZhbHVlLCBkZWZh
dWx0U2VsZWN0ZWQsIHNlbGVjdGVkLCBlYyk7CisKKyAgICBpZiAoZWMpCisgICAgICAgIHRocm93
RXJyb3IoZWMpOwogCiAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVy
KCksIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpPUFRJT04pLCBvcHRpb24uZ2V0
KCkpOwogICAgIG9wdGlvbi0+cmVmKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEF1
ZGlvRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5jcHAKaW5kZXgg
NmFkZjllYS4uZWVkODEzNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1l
bnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmNwcApAQCAtMjAsNyAr
MjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC00
MCw1ICs0MCwxNyBAQCBIVE1MQXVkaW9FbGVtZW50OjpIVE1MQXVkaW9FbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgQVNTRVJUKGhhc1RhZ05h
bWUoYXVkaW9UYWcpKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MQXVkaW9FbGVtZW50PiBIVE1MQXVk
aW9FbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvYywgU3RyaW5nIHNyYykKK3sKKyAgICBBU1NF
UlQoZG9jKTsKKyAgICBIVE1MQXVkaW9FbGVtZW50KiBhdWRpbyA9IG5ldyBIVE1MQXVkaW9FbGVt
ZW50KGF1ZGlvVGFnLCBkb2MpOworICAgIGF1ZGlvLT5zZXRBdXRvYnVmZmVyKHRydWUpOworICAg
IGlmICghc3JjLmlzTnVsbCgpKSB7CisgICAgICAgIGF1ZGlvLT5zZXRTcmMoc3JjKTsKKyAgICAg
ICAgYXVkaW8tPnNjaGVkdWxlTG9hZCgpOworICAgIH0KKyAgICByZXR1cm4gYWRvcHRSZWYoYXVk
aW8pOworfQorCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9F
bGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5oCmluZGV4IDFkYmU0NGYu
LjkzMWI3NTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmgKKysr
IGIvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaApAQCAtMjAsNyArMjAsNyBAQAogICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIEhUTUxBdWRpb0VsZW1lbnRfaApAQCAtMzUsNyAr
MzUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTEF1ZGlvRWxlbWVudCA6IHB1
YmxpYyBIVE1MTWVkaWFFbGVtZW50IHsKIHB1YmxpYzoKICAgICBIVE1MQXVkaW9FbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwotICAgIAorCisgICAgLy8gVXNlZCBieSBK
YXZhU2NyaXB0ICJuZXcgQXVkaW8oKSIuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEF1ZGlv
RWxlbWVudD4gY3JlYXRlKERvY3VtZW50KiwgU3RyaW5nIHNyYyk7CisKICAgICB2aXJ0dWFsIGlu
dCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KIH07CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmNwcAppbmRleCA0NTkyNDYxLi43NWQ0YTc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0
bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1l
bnQuY3BwCkBAIC01OCw2ICs1OCwxNyBAQCBIVE1MSW1hZ2VFbGVtZW50Ojp+SFRNTEltYWdlRWxl
bWVudCgpCiAgICAgICAgIG1fZm9ybS0+cmVtb3ZlSW1nRWxlbWVudCh0aGlzKTsKIH0KIAorUGFz
c1JlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBIVE1MSW1hZ2VFbGVtZW50OjpjcmVhdGUoRG9jdW1l
bnQqIGRvYywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIEFTU0VSVChkb2MpOworICAg
IEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlID0gbmV3IEhUTUxJbWFnZUVsZW1lbnQoaW1nVGFnLCBk
b2MpOworICAgIGlmICh3aWR0aCA+PSAwKQorICAgICAgICBpbWFnZS0+c2V0V2lkdGgod2lkdGgp
OworICAgIGlmIChoZWlnaHQgPj0gMCkKKyAgICAgICAgaW1hZ2UtPnNldEhlaWdodChoZWlnaHQp
OworICAgIHJldHVybiBpbWFnZTsKK30KKwogYm9vbCBIVE1MSW1hZ2VFbGVtZW50OjptYXBUb0Vu
dHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdAogewogICAgIGlmIChhdHRyTmFtZSA9PSB3aWR0aEF0dHIgfHwKQEAgLTY4
LDcgKzc5LDcgQEAgYm9vbCBIVE1MSW1hZ2VFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGUKICAgICAgICAgcmVzdWx0ID0gZVVu
aXZlcnNhbDsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIGlmIChh
dHRyTmFtZSA9PSBib3JkZXJBdHRyIHx8IGF0dHJOYW1lID09IGFsaWduQXR0cikgewogICAgICAg
ICByZXN1bHQgPSBlUmVwbGFjZWQ7IC8vIFNoYXJlZCB3aXRoIGVtYmVkIGFuZCBpZnJhbWUgZWxl
bWVudHMuCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2MSw3ICsxNzIsNyBAQCBSZW5kZXJP
YmplY3QqIEhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVu
YSwgUmVuZGVyU3R5bGUqCiB7CiAgICAgIGlmIChzdHlsZS0+Y29udGVudERhdGEoKSkKICAgICAg
ICAgcmV0dXJuIFJlbmRlck9iamVjdDo6Y3JlYXRlT2JqZWN0KHRoaXMsIHN0eWxlKTsKLSAgICAg
CisKICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckltYWdlKHRoaXMpOwogfQogCkBAIC0x
NzQsNyArMTg1LDcgQEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjphdHRhY2goKQogICAgICAgICBp
ZiAoaW1hZ2VPYmotPmhhc0ltYWdlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlt
YWdlT2JqLT5zZXRDYWNoZWRJbWFnZShtX2ltYWdlTG9hZGVyLmltYWdlKCkpOwotICAgICAgICAK
KwogICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIGltYWdlIGF0IGFsbCBiZWNhdXNlIHdlIGhhdmUg
bm8gc3JjIGF0dHJpYnV0ZSwgc2V0CiAgICAgICAgIC8vIGltYWdlIGhlaWdodCBhbmQgd2lkdGgg
Zm9yIHRoZSBhbHQgdGV4dCBpbnN0ZWFkLgogICAgICAgICBpZiAoIW1faW1hZ2VMb2FkZXIuaW1h
Z2UoKSAmJiAhaW1hZ2VPYmotPmNhY2hlZEltYWdlKCkpCkBAIC0yNDEsNyArMjUyLDcgQEAgaW50
IEhUTUxJbWFnZUVsZW1lbnQ6OndpZHRoKGJvb2wgaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKSBj
b25zdAogICAgICAgICBpbnQgd2lkdGggPSBnZXRBdHRyaWJ1dGUod2lkdGhBdHRyKS50b0ludCgm
b2spOwogICAgICAgICBpZiAob2spCiAgICAgICAgICAgICByZXR1cm4gd2lkdGg7Ci0gICAgICAg
IAorCiAgICAgICAgIC8vIGlmIHRoZSBpbWFnZSBpcyBhdmFpbGFibGUsIHVzZSBpdHMgd2lkdGgK
ICAgICAgICAgaWYgKG1faW1hZ2VMb2FkZXIuaW1hZ2UoKSkgewogICAgICAgICAgICAgZmxvYXQg
em9vbUZhY3RvciA9IGRvY3VtZW50KCktPmZyYW1lKCkgPyBkb2N1bWVudCgpLT5mcmFtZSgpLT5w
YWdlWm9vbUZhY3RvcigpIDogMS4wZjsKQEAgLTI2NSw3ICsyNzYsNyBAQCBpbnQgSFRNTEltYWdl
RWxlbWVudDo6aGVpZ2h0KGJvb2wgaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKSBjb25zdAogICAg
ICAgICBpbnQgaGVpZ2h0ID0gZ2V0QXR0cmlidXRlKGhlaWdodEF0dHIpLnRvSW50KCZvayk7CiAg
ICAgICAgIGlmIChvaykKICAgICAgICAgICAgIHJldHVybiBoZWlnaHQ7Ci0gICAgICAgIAorCiAg
ICAgICAgIC8vIGlmIHRoZSBpbWFnZSBpcyBhdmFpbGFibGUsIHVzZSBpdHMgaGVpZ2h0CiAgICAg
ICAgIGlmIChtX2ltYWdlTG9hZGVyLmltYWdlKCkpIHsKICAgICAgICAgICAgIGZsb2F0IHpvb21G
YWN0b3IgPSBkb2N1bWVudCgpLT5mcmFtZSgpID8gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFnZVpv
b21GYWN0b3IoKSA6IDEuMGY7CkBAIC0yOTMsMTAgKzMwNCwxMCBAQCBpbnQgSFRNTEltYWdlRWxl
bWVudDo6bmF0dXJhbEhlaWdodCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltYWdlTG9hZGVyLmlt
YWdlKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIAorCiAgICAgcmV0dXJuIG1faW1hZ2VMb2Fk
ZXIuaW1hZ2UoKS0+aW1hZ2VTaXplKDEuMGYpLmhlaWdodCgpOwogfQotICAgIAorCiBib29sIEhU
TUxJbWFnZUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikgY29uc3QKIHsK
ICAgICByZXR1cm4gYXR0ci0+bmFtZSgpID09IHNyY0F0dHIKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5o
CmluZGV4IDE0ZTVmYTMuLjIyYTBjNzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaApAQCAtMzcs
NiArMzcsOSBAQCBwdWJsaWM6CiAgICAgSFRNTEltYWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7CiAgICAgfkhUTUxJbWFnZUVs
ZW1lbnQoKTsKIAorICAgIC8vIFVzZWQgYnkgSmF2YVNjcmlwdCAibmV3IEltYWdlKCkiLgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIGlu
dCB3aWR0aCwgaW50IGhlaWdodCk7CisKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KICAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIApAQCAtNTMsNyAr
NTYsNyBAQCBwdWJsaWM6CiAKICAgICBpbnQgbmF0dXJhbFdpZHRoKCkgY29uc3Q7CiAgICAgaW50
IG5hdHVyYWxIZWlnaHQoKSBjb25zdDsKLSAgICAKKwogICAgIGJvb2wgaXNTZXJ2ZXJNYXAoKSBj
b25zdCB7IHJldHVybiBpc21hcCAmJiB1c2VtYXAuaXNFbXB0eSgpOyB9CiAKICAgICBTdHJpbmcg
YWx0VGV4dCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVt
ZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKaW5kZXggODU5OGU4
Ny4uODQyZWJlMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNw
cAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCkBAIC00MSwxMSArNDEs
MjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
Ci1IVE1MT3B0aW9uRWxlbWVudDo6SFRNTE9wdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQotICAgIDogSFRN
TEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBkb2MsIGYpCi0gICAgLCBtX3N0eWxlKDApCitQ
YXNzUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiBIVE1MT3B0aW9uRWxlbWVudDo6Y3JlYXRlKAor
ICAgIERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBib29sIGRlZmF1bHRTZWxlY3RlZCwgYm9vbCBzZWxlY3RlZCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7Ci0gICAgQVNTRVJUKGhhc1RhZ05hbWUob3B0aW9uVGFnKSk7CisgICAgQVNTRVJU
KGRvY3VtZW50KTsKKyAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gbmV3IEhUTUxPcHRp
b25FbGVtZW50KG9wdGlvblRhZywgZG9jdW1lbnQpOworCisgICAgaWYgKCF0ZXh0LmlzTnVsbCgp
KSB7CisgICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0Tm9kZSA9IGRvY3VtZW50LT5jcmVhdGVUZXh0
Tm9kZSh0ZXh0KTsKKyAgICAgICAgb3B0aW9uLT5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSwgZWMpOwor
ICAgIH0KKyAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQorICAgICAgICBvcHRpb24tPnNldFZhbHVl
KHZhbHVlKTsKKyAgICBpZiAoZGVmYXVsdFNlbGVjdGVkKQorICAgICAgICBvcHRpb24tPnNldERl
ZmF1bHRTZWxlY3RlZChkZWZhdWx0U2VsZWN0ZWQpOworICAgIGlmIChzZWxlY3RlZCkKKyAgICAg
ICAgb3B0aW9uLT5zZXRTZWxlY3RlZChzZWxlY3RlZCk7CisKKyAgICByZXR1cm4gYWRvcHRSZWYo
b3B0aW9uKTsKIH0KIAogYm9vbCBIVE1MT3B0aW9uRWxlbWVudDo6Y2hlY2tEVEQoY29uc3QgTm9k
ZSogbmV3Q2hpbGQpCkBAIC0xNzQsNyArMTg3LDcgQEAgSFRNTFNlbGVjdEVsZW1lbnQqIEhUTUxP
cHRpb25FbGVtZW50Ojpvd25lclNlbGVjdEVsZW1lbnQoKSBjb25zdAogCiAgICAgaWYgKCFzZWxl
Y3QpCiAgICAgICAgIHJldHVybiAwOwotICAgIAorCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50Kj4oc2VsZWN0KTsKIH0KIApAQCAtMjAzLDkgKzIxNiw5IEBAIHZvaWQg
SFRNTE9wdGlvbkVsZW1lbnQ6OnNldFJlbmRlclN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IG5ld1N0eWxlKQogICAgIG1fc3R5bGUgPSBuZXdTdHlsZTsKIH0KIAotUmVuZGVyU3R5bGUqIEhU
TUxPcHRpb25FbGVtZW50Ojpub25SZW5kZXJlclJlbmRlclN0eWxlKCkgY29uc3QgCi17IAotICAg
IHJldHVybiBtX3N0eWxlLmdldCgpOyAKK1JlbmRlclN0eWxlKiBIVE1MT3B0aW9uRWxlbWVudDo6
bm9uUmVuZGVyZXJSZW5kZXJTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3R5bGUuZ2V0
KCk7CiB9CiAKIFN0cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6dGV4dEluZGVudGVkVG9SZXNwZWN0
R3JvdXBMYWJlbCgpIGNvbnN0CkBAIC0yMTQsOCArMjI3LDggQEAgU3RyaW5nIEhUTUxPcHRpb25F
bGVtZW50Ojp0ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCkgY29uc3QKIH0KIAogYm9v
bCBIVE1MT3B0aW9uRWxlbWVudDo6ZGlzYWJsZWQoKSBjb25zdAoteyAKLSAgICByZXR1cm4gb3du
RWxlbWVudERpc2FibGVkKCkgfHwgKHBhcmVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Kj4ocGFyZW50Tm9kZSgpKS0+ZGlzYWJsZWQoKSk7IAoreworICAgIHJl
dHVybiBvd25FbGVtZW50RGlzYWJsZWQoKSB8fCAocGFyZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihwYXJlbnROb2RlKCkpLT5kaXNhYmxlZCgpKTsKIH0K
IAogdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCkBA
IC0yMjcsNyArMjQwLDcgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJl
ZShib29sIGRlZXApCiAgICAgICAgICAgICBzZWxlY3QtPnNldFNlbGVjdGVkSW5kZXgoaW5kZXgo
KSwgZmFsc2UpOwogICAgICAgICBzZWxlY3QtPnNjcm9sbFRvU2VsZWN0aW9uKCk7CiAgICAgfQot
ICAgIAorCiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShkZWVw
KTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmggYi9X
ZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAppbmRleCA3YmU5ZTlhLi41YjVkOTU3IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAorKysgYi9XZWJDb3Jl
L2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaApAQCAtMzksNiArMzksMTUgQEAgY2xhc3MgSFRNTE9w
dGlvbkVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudCwgcHVibGljIE9wdGlv
bkVsZW1lbnQgewogcHVibGljOgogICAgIEhUTUxPcHRpb25FbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKIAorICAgIC8vIFVzZWQg
YnkgSmF2YVNjcmlwdCAibmV3IE9wdGlvbigpIi4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1M
T3B0aW9uRWxlbWVudD4gY3JlYXRlKAorICAgICAgICBEb2N1bWVudCosCisgICAgICAgIGNvbnN0
IFN0cmluZyYgdGV4dCwKKyAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSwKKyAgICAgICAgYm9v
bCBkZWZhdWx0U2VsZWN0ZWQsCisgICAgICAgIGJvb2wgc2VsZWN0ZWQsCisgICAgICAgIEV4Y2Vw
dGlvbkNvZGUmKTsKKwogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9CiAgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAyOyB9CiAgICAgdmlydHVhbCBib29sIGNoZWNr
RFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKTsKQEAgLTQ4LDcgKzU3LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldFJlbmRlclN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+KTsKLSAg
ICAKKwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBj
b25zdDsKIAogICAgIHZpcnR1YWwgU3RyaW5nIHRleHQoKSBjb25zdDsKQEAgLTc4LDEwICs4Nywx
MCBAQCBwdWJsaWM6CiAKICAgICBib29sIG93bkVsZW1lbnREaXNhYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVkKCk7IH0KICAgICB2aXJ0dWFsIGJv
b2wgZGlzYWJsZWQoKSBjb25zdDsKLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZElu
dG9UcmVlKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCk7Ci0g
ICAgCisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBSZW5kZXJTdHlsZSogbm9uUmVuZGVyZXJSZW5k
ZXJTdHlsZSgpIGNvbnN0OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48655</attachid>
            <date>2010-02-12 11:58:40 -0800</date>
            <delta_ts>2010-02-18 11:07:18 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>ConstructorPatch.txt</filename>
            <type>text/plain</type>
            <size>17323</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDU0Njg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMCArMzAsNyBAQAogI2luY2x1ZGUgIkpT
QXVkaW9Db25zdHJ1Y3Rvci5oIgogCiAjaW5jbHVkZSAiSFRNTEF1ZGlvRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkpTSFRNTEF1ZGlvRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJUZXh0LmgiCiAjaW5j
bHVkZSA8cnVudGltZS9FcnJvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtNDYsMjQg
KzQzLDM0IEBAIEpTQXVkaW9Db25zdHJ1Y3Rvcjo6SlNBdWRpb0NvbnN0cnVjdG9yKEUKICAgICA6
IERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50KEpTQXVkaW9Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlKGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpLCBnbG9iYWxPYmplY3QpCiB7
CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTSFRNTEF1
ZGlvRWxlbWVudFByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKLSAg
ICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywg
MSksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworICAgIHB1dERpcmVjdChleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAxKSwgUmVhZE9ubHkgfCBEb250
RGVsZXRlIHwgRG9udEVudW0pOwogfQogCiBzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdEF1ZGlv
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewotICAgIEpTQXVkaW9Db25zdHJ1Y3RvcioganNBdWRpbyA9IHN0YXRpY19jYXN0PEpT
QXVkaW9Db25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKLSAgICAvLyBGSVhNRTogV2h5IGRvZXNu
J3QgdGhpcyBuZWVkIHRoZSBjYWxsIHRvSlMgb24gdGhlIGRvY3VtZW50IGxpa2UgSlNJbWFnZUNv
bnN0cnVjdG9yPwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGpzQXVkaW8tPmRvY3VtZW50KCk7
CisgICAgSlNBdWRpb0NvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNB
dWRpb0NvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0ganNDb25zdHJ1Y3Rvci0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSZWZlcmVuY2VFcnJvciwgIkF1ZGlvIGNvbnN0cnVj
dG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKTsKIAotICAgIFJlZlB0cjxI
VE1MQXVkaW9FbGVtZW50PiBhdWRpbyA9IG5ldyBIVE1MQXVkaW9FbGVtZW50KEhUTUxOYW1lczo6
YXVkaW9UYWcsIGRvY3VtZW50KTsKLSAgICBhdWRpby0+c2V0QXV0b2J1ZmZlcih0cnVlKTsKLSAg
ICBpZiAoYXJncy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIGF1ZGlvLT5zZXRTcmMoYXJncy5hdCgw
KS50b1N0cmluZyhleGVjKSk7Ci0gICAgICAgIGF1ZGlvLT5zY2hlZHVsZUxvYWQoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGFzT2JqZWN0KHRvSlMoZXhlYywganNBdWRpby0+Z2xvYmFsT2JqZWN0KCks
IGF1ZGlvLnJlbGVhc2UoKSkpOworICAgIC8vIENhbGxpbmcgdG9KUyBvbiB0aGUgZG9jdW1lbnQg
Y2F1c2VzIHRoZSBKUyBkb2N1bWVudCB3cmFwcGVyIHRvIGJlCisgICAgLy8gYWRkZWQgdG8gdGhl
IHdpbmRvdyBvYmplY3QuIFRoaXMgaXMgZG9uZSB0byBlbnN1cmUgdGhhdCBKU0RvY3VtZW50Ojpt
YXJrQ2hpbGRyZW4KKyAgICAvLyB3aWxsIGJlIGNhbGxlZCwgd2hpY2ggd2lsbCBjYXVzZSB0aGUg
YXVkaW8gZWxlbWVudCB0byBiZSBtYXJrZWQgaWYgbmVjZXNzYXJ5LgorICAgIC8vIEZJWE1FOiBU
aGUgY29ycmVjdCB3YXkgdG8gZG8gdGhpcyB3b3VsZCBiZSB0byBtYWtlIEhUTUxNZWRpYUVsZW1l
bnQgZGVyaXZlIGZyb20KKyAgICAvLyBBY3RpdmVET01PYmplY3QgYW5kIHVzZSBpdHMgaW50ZXJm
YWNlIHRvIGtlZXAgaXRzIHdyYXBwZXIgYWxpdmUuIFRoZW4gd2Ugd291bGQKKyAgICAvLyByZW1v
dmUgdGhpcyBjb2RlIGFuZCB0aGUgc3BlY2lhbCBjYXNlIGluIGlzT2JzZXJ2YWJsZVRocm91Z2hE
T00uCisgICAgdG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgZG9jdW1l
bnQpOworCisgICAgLy8gRklYTUU6IFRoaXMgY29udmVydHMgYW4gdW5kZWZpbmVkIGFyZ3VtZW50
IHRvIHRoZSBzdHJpbmcgInVuZGVmaW5lZCIsIGJ1dCBwb3NzaWJseSB3ZQorICAgIC8vIHNob3Vs
ZCB0cmVhdCBpdCBhcyBpZiBubyBhcmd1bWVudCB3YXMgcGFzc2VkIGluc3RlYWQsIGJ5IGNoZWNr
aW5nIHRoZSB2YWx1ZSBvZiBhcmdzLmF0CisgICAgLy8gcmF0aGVyIHRoYW4gbG9va2luZyBhdCBh
cmdzLnNpemUuCisgICAgU3RyaW5nIHNyYzsKKyAgICBpZiAoYXJncy5zaXplKCkgPiAwKQorICAg
ICAgICBzcmMgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOworCisgICAgcmV0dXJuIGFzT2Jq
ZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksCisgICAgICAgIEhU
TUxBdWRpb0VsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoZG9jdW1lbnQsIHNyYykpKTsK
IH0KIAogQ29uc3RydWN0VHlwZSBKU0F1ZGlvQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEo
Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNJbWFnZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDU0Njg2KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKICNpbmNsdWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJK
U05vZGUuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSA8
cnVudGltZS9FcnJvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtNDMsMzUgKzQyLDM1
IEBAIEpTSW1hZ2VDb25zdHJ1Y3Rvcjo6SlNJbWFnZUNvbnN0cnVjdG9yKEUKIAogc3RhdGljIEpT
T2JqZWN0KiBjb25zdHJ1Y3RJbWFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1
Y3RvciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBib29sIHdpZHRoU2V0ID0gZmFsc2U7
Ci0gICAgYm9vbCBoZWlnaHRTZXQgPSBmYWxzZTsKLSAgICBpbnQgd2lkdGggPSAwOwotICAgIGlu
dCBoZWlnaHQgPSAwOwotICAgIGlmIChhcmdzLnNpemUoKSA+IDApIHsKLSAgICAgICAgd2lkdGhT
ZXQgPSB0cnVlOwotICAgICAgICB3aWR0aCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKLSAg
ICB9Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpID4gMSkgewotICAgICAgICBoZWlnaHRTZXQgPSB0cnVl
OwotICAgICAgICBoZWlnaHQgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgfQotCiAg
ICAgSlNJbWFnZUNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNJbWFn
ZUNvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOwogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGpz
Q29uc3RydWN0b3ItPmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgUmVmZXJlbmNlRXJyb3IsICJJbWFnZSBjb25zdHJ1Y3RvciBh
c3NvY2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIik7CiAKICAgICAvLyBDYWxsaW5nIHRv
SlMgb24gdGhlIGRvY3VtZW50IGNhdXNlcyB0aGUgSlMgZG9jdW1lbnQgd3JhcHBlciB0byBiZQot
ICAgIC8vIGFkZGVkIHRvIHRoZSB3aW5kb3cgb2JqZWN0LiBUaGlzIGlzIGRvbmUgdG8gZW5zdXJl
IHRoYXQgSlNEb2N1bWVudDo6bWFyawotICAgIC8vIHdpbGwgYmUgY2FsbGVkICh3aGljaCB3aWxs
IGNhdXNlIHRoZSBpbWFnZSBlbGVtZW50IHRvIGJlIG1hcmtlZCBpZiBuZWNlc3NhcnkpLgorICAg
IC8vIGFkZGVkIHRvIHRoZSB3aW5kb3cgb2JqZWN0LiBUaGlzIGlzIGRvbmUgdG8gZW5zdXJlIHRo
YXQgSlNEb2N1bWVudDo6bWFya0NoaWxkcmVuCisgICAgLy8gd2lsbCBiZSBjYWxsZWQsIHdoaWNo
IHdpbGwgY2F1c2UgdGhlIGltYWdlIGVsZW1lbnQgdG8gYmUgbWFya2VkIGlmIG5lY2Vzc2FyeS4K
KyAgICAvLyBGSVhNRTogVGhlIGNvcnJlY3Qgd2F5IHRvIGRvIHRoaXMgd291bGQgYmUgdG8gbWFr
ZSBIVE1MSW1hZ2VFbGVtZW50IGRlcml2ZSBmcm9tCisgICAgLy8gQWN0aXZlRE9NT2JqZWN0IGFu
ZCB1c2UgaXRzIGludGVyZmFjZSB0byBrZWVwIGl0cyB3cmFwcGVyIGFsaXZlLiBUaGVuIHdlIHdv
dWxkCisgICAgLy8gcmVtb3ZlIHRoaXMgY29kZSBhbmQgdGhlIHNwZWNpYWwgY2FzZSBpbiBpc09i
c2VydmFibGVUaHJvdWdoRE9NLgogICAgIHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFs
T2JqZWN0KCksIGRvY3VtZW50KTsKIAotICAgIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBpbWFn
ZSA9IG5ldyBIVE1MSW1hZ2VFbGVtZW50KEhUTUxOYW1lczo6aW1nVGFnLCBkb2N1bWVudCk7Ci0g
ICAgaWYgKHdpZHRoU2V0KQotICAgICAgICBpbWFnZS0+c2V0V2lkdGgod2lkdGgpOwotICAgIGlm
IChoZWlnaHRTZXQpCi0gICAgICAgIGltYWdlLT5zZXRIZWlnaHQoaGVpZ2h0KTsKLSAgICByZXR1
cm4gYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgaW1h
Z2UucmVsZWFzZSgpKSk7CisgICAgLy8gRklYTUU6IFRoaXMgY29udmVydHMgYW4gdW5kZWZpbmVk
IHdpZHRoIG9yIGhlaWdodCB0byAwIGluc3RlYWQgb2YgYXMgYSBtaXNzaW5nIHZhbHVlLgorICAg
IGludCogb3B0aW9uYWxXaWR0aCA9IDA7CisgICAgaW50KiBvcHRpb25hbEhlaWdodCA9IDA7Cisg
ICAgaW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisgICAgaWYgKGFyZ3Muc2l6ZSgpID4gMCkg
eworICAgICAgICB3aWR0aCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKKyAgICAgICAgb3B0
aW9uYWxXaWR0aCA9ICZ3aWR0aDsKKyAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID4gMSkgeworICAg
ICAgICAgICAgaGVpZ2h0ID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgICAgICAgICAg
b3B0aW9uYWxIZWlnaHQgPSAmaGVpZ2h0OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IGFzT2JqZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksCisgICAg
ICAgIEhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoZG9jdW1lbnQsIG9w
dGlvbmFsV2lkdGgsIG9wdGlvbmFsSGVpZ2h0KSkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIEpTSW1h
Z2VDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3RE
YXRhKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09wdGlvbkNvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTT3B0aW9uQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiA1NDY4NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNPcHRpb25Db25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDExICsyMCw4IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNPcHRpb25Db25zdHJ1Y3Rvci5oIgogCi0jaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKICNpbmNs
dWRlICJKU0hUTUxPcHRpb25FbGVtZW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgotI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC00OSwyMSArNDYsMTcgQEAgc3RhdGljIEpTT2JqZWN0
KiBjb25zdHJ1Y3RIVE1MT3B0aW9uRWxlbQogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCAiT3B0aW9uIGNvbnN0cnVjdG9y
IGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKTsKIAotICAgIFJlZlB0cjxIVE1M
T3B0aW9uRWxlbWVudD4gZWxlbWVudCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KEhUTUxOYW1lczo6b3B0aW9uVGFnLCBmYWxz
ZSkpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFRleHQ+IHRleHQg
PSBkb2N1bWVudC0+Y3JlYXRlVGV4dE5vZGUoIiIpOworICAgIFN0cmluZyBkYXRhOwogICAgIGlm
ICghYXJncy5hdCgwKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICB0ZXh0LT5zZXREYXRhKGFyZ3Mu
YXQoMCkudG9TdHJpbmcoZXhlYyksIGVjKTsKLSAgICBpZiAoZWMgPT0gMCkKLSAgICAgICAgZWxl
bWVudC0+YXBwZW5kQ2hpbGQodGV4dC5yZWxlYXNlKCksIGVjKTsKLSAgICBpZiAoZWMgPT0gMCAm
JiAhYXJncy5hdCgxKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICBlbGVtZW50LT5zZXRWYWx1ZShh
cmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBpZiAoZWMgPT0gMCkKLSAgICAgICAgZWxl
bWVudC0+c2V0RGVmYXVsdFNlbGVjdGVkKGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKLSAg
ICBpZiAoZWMgPT0gMCkKLSAgICAgICAgZWxlbWVudC0+c2V0U2VsZWN0ZWQoYXJncy5hdCgzKS50
b0Jvb2xlYW4oZXhlYykpOworICAgICAgICBkYXRhID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVj
KTsKKyAgICBTdHJpbmcgdmFsdWU7CisgICAgaWYgKCFhcmdzLmF0KDEpLmlzVW5kZWZpbmVkKCkp
CisgICAgICAgIHZhbHVlID0gYXJncy5hdCgxKS50b1N0cmluZyhleGVjKTsKKyAgICBib29sIGRl
ZmF1bHRTZWxlY3RlZCA9IGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpOworICAgIGJvb2wgc2Vs
ZWN0ZWQgPSBhcmdzLmF0KDMpLnRvQm9vbGVhbihleGVjKTsKIAorICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4gZWxlbWVudCA9IEhUTUxPcHRp
b25FbGVtZW50OjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKGRvY3VtZW50LCBkYXRhLCB2YWx1ZSwg
ZGVmYXVsdFNlbGVjdGVkLCBzZWxlY3RlZCwgZWMpOwogICAgIGlmIChlYykgewogICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1l
bnRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDU0Njg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MCwxNSArNjAsMTMgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEhUTUxB
dWRpbwogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQXVkaW8gY29uc3RydWN0b3IgYXNzb2Np
YXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZSIsIFY4UHJveHk6OlJlZmVyZW5jZUVycm9yKTsK
IAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgZG9jdW1lbnQgaXMgYWRkZWQgdG8gdGhlIERPTSBOb2Rl
IG1hcC4gT3RoZXJ3aXNlLCB0aGUgSFRNTEF1ZGlvRWxlbWVudCBpbnN0YW5jZQotICAgIC8vIG1h
eSBlbmQgdXAgYmVpbmcgdGhlIG9ubHkgbm9kZSBpbiB0aGUgbWFwIGFuZCBnZXQgZ2FyYmFnZS1j
Y29sbGVjdGVkIHByZW1hdHVyZWx5LgorICAgIC8vIG1heSBlbmQgdXAgYmVpbmcgdGhlIG9ubHkg
bm9kZSBpbiB0aGUgbWFwIGFuZCBnZXQgZ2FyYmFnZS1jb2xsZWN0ZWQgcHJlbWF0dXJlbHkuCiAg
ICAgdG9WOChkb2N1bWVudCk7CiAKLSAgICBSZWZQdHI8SFRNTEF1ZGlvRWxlbWVudD4gYXVkaW8g
PSBuZXcgSFRNTEF1ZGlvRWxlbWVudChIVE1MTmFtZXM6OmF1ZGlvVGFnLCBkb2N1bWVudCk7Ci0g
ICAgYXVkaW8tPnNldEF1dG9idWZmZXIodHJ1ZSk7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAw
KSB7Ci0gICAgICAgIGF1ZGlvLT5zZXRTcmModG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pKTsKLSAg
ICAgICAgYXVkaW8tPnNjaGVkdWxlTG9hZCgpOwotICAgIH0KKyAgICBTdHJpbmcgc3JjOworICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gMCkKKyAgICAgICAgc3JjID0gdG9XZWJDb3JlU3RyaW5nKGFy
Z3NbMF0pOworICAgIFJlZlB0cjxIVE1MQXVkaW9FbGVtZW50PiBhdWRpbyA9IG5ldyBIVE1MQXVk
aW9FbGVtZW50OjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKGRvY3VtZW50LCBzcmMpOwogCiAgICAg
VjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIFY4Q2xhc3NJbmRleDo6
VG9JbnQoVjhDbGFzc0luZGV4OjpBVURJTyksIGF1ZGlvLmdldCgpKTsKICAgICBhdWRpby0+cmVm
KCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1NDY4NikKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTIgKzYzLDE5IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdjhIVE1MSW1hZ2UKICAgICAvLyBtYXkgZW5kIHVwIGJlaW5nIHRoZSBvbmx5IG5v
ZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY2NvbGxlY3RlZCBwcmVtYXR1cmVseS4KICAg
ICB0b1Y4KGRvY3VtZW50KTsKIAotICAgIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBpbWFnZSA9
IG5ldyBIVE1MSW1hZ2VFbGVtZW50KEhUTUxOYW1lczo6aW1nVGFnLCBkb2N1bWVudCk7CisgICAg
aW50KiBvcHRpb25hbFdpZHRoID0gMDsKKyAgICBpbnQqIG9wdGlvbmFsSGVpZ2h0ID0gMDsKKyAg
ICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDAp
IHsKLSAgICAgICAgaW1hZ2UtPnNldFdpZHRoKHRvSW50MzIoYXJnc1swXSkpOwotICAgICAgICBp
ZiAoYXJncy5MZW5ndGgoKSA+IDEpCi0gICAgICAgICAgICBpbWFnZS0+c2V0SGVpZ2h0KHRvSW50
MzIoYXJnc1sxXSkpOworICAgICAgICB3aWR0aCA9IHRvSW50MzIoYXJnc1swXSk7CisgICAgICAg
IG9wdGlvbmFsV2lkdGggPSAmd2lkdGg7CisgICAgICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMSkg
eworICAgICAgICAgICAgaGVpZ2h0ID0gdG9JbnQzMihhcmdzWzFdKTsKKyAgICAgICAgICAgIG9w
dGlvbmFsV2lkdGggPSAmaGVpZ2h0OworICAgICAgICB9CiAgICAgfQorICAgIFJlZlB0cjxIVE1M
SW1hZ2VFbGVtZW50PiBpbWFnZSA9IEhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3Ry
dWN0b3IoZG9jdW1lbnQsIG9wdGlvbmFsV2lkdGgsIG9wdGlvbmFsSGVpZ2h0KTsKIAogICAgIFY4
RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCBWOENsYXNzSW5kZXg6OlRv
SW50KFY4Q2xhc3NJbmRleDo6SU1BR0UpLCBpbWFnZS5nZXQoKSk7CiAgICAgaW1hZ2UtPnJlZigp
OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmNwcAkocmV2aXNpb24gNTQ2ODYpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxMSAr
MzQsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCi1IVE1MQXVkaW9FbGVtZW50OjpIVE1MQXVkaW9FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCi0gICAgOiBIVE1MTWVkaWFFbGVtZW50KHRhZ05h
bWUsIGRvYykKK0hUTUxBdWRpb0VsZW1lbnQ6OkhUTUxBdWRpb0VsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTE1lZGlhRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShhdWRpb1Rh
ZykpOwogfQogCitQYXNzUmVmUHRyPEhUTUxBdWRpb0VsZW1lbnQ+IEhUTUxBdWRpb0VsZW1lbnQ6
OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcm
IHNyYykKK3sKKyAgICBSZWZQdHI8SFRNTEF1ZGlvRWxlbWVudD4gYXVkaW8gPSBuZXcgSFRNTEF1
ZGlvRWxlbWVudChhdWRpb1RhZywgZG9jdW1lbnQpOworICAgIGF1ZGlvLT5zZXRBdXRvYnVmZmVy
KHRydWUpOworICAgIGlmICghc3JjLmlzTnVsbCgpKSB7CisgICAgICAgIGF1ZGlvLT5zZXRTcmMo
c3JjKTsKKyAgICAgICAgYXVkaW8tPnNjaGVkdWxlTG9hZCgpOworICAgIH0KKyAgICByZXR1cm4g
YXVkaW8ucmVsZWFzZSgpOworfQorCiB9CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
QXVkaW9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1l
bnQuaAkocmV2aXNpb24gNTQ2ODYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzQsMTIgKzM0LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgSFRNTEF1ZGlvRWxlbWVudCA6IHB1YmxpYyBIVE1MTWVkaWFFbGVtZW50IHsKIHB1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MQXVkaW9FbGVtZW50PiBjcmVhdGVGb3JKU0Nv
bnN0cnVjdG9yKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBzcmMpOworCiAgICAgSFRNTEF1ZGlv
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLSAgICAKKworcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWRlbygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiB9OwogCiB9
IC8vbmFtZXNwYWNlCiAKICNlbmRpZgorCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
SW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxl
bWVudC5jcHAJKHJldmlzaW9uIDU0Njg2KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwxNiBAQCBIVE1MSW1hZ2VFbGVtZW50
Ojp+SFRNTEltYWdlRWxlbWVudCgpCiAgICAgICAgIG1fZm9ybS0+cmVtb3ZlSW1nRWxlbWVudCh0
aGlzKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBIVE1MSW1hZ2VFbGVtZW50
OjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgaW50KiBv
cHRpb25hbFdpZHRoLCBjb25zdCBpbnQqIG9wdGlvbmFsSGVpZ2h0KQoreworICAgIFJlZlB0cjxI
VE1MSW1hZ2VFbGVtZW50PiBpbWFnZSA9IG5ldyBIVE1MSW1hZ2VFbGVtZW50KGltZ1RhZywgZG9j
dW1lbnQpOworICAgIGlmIChvcHRpb25hbFdpZHRoKQorICAgICAgICBpbWFnZS0+c2V0V2lkdGgo
Km9wdGlvbmFsV2lkdGgpOworICAgIGlmIChvcHRpb25hbEhlaWdodCkKKyAgICAgICAgaW1hZ2Ut
PnNldEhlaWdodCgqb3B0aW9uYWxIZWlnaHQpOworICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7
Cit9CisKIGJvb2wgSFRNTEltYWdlRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAg
ICBpZiAoYXR0ck5hbWUgPT0gd2lkdGhBdHRyIHx8CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElt
YWdlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50
LmgJKHJldmlzaW9uIDU0Njg2KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQCBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CiBj
bGFzcyBIVE1MSW1hZ2VFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKICAgICBmcmllbmQg
Y2xhc3MgSFRNTEZvcm1FbGVtZW50OwogcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhU
TUxJbWFnZUVsZW1lbnQ+IGNyZWF0ZUZvckpTQ29uc3RydWN0b3IoRG9jdW1lbnQqLCBjb25zdCBp
bnQqIG9wdGlvbmFsV2lkdGgsIGNvbnN0IGludCogb3B0aW9uYWxIZWlnaHQpOworCiAgICAgSFRN
TEltYWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVs
ZW1lbnQqID0gMCk7CiAgICAgfkhUTUxJbWFnZUVsZW1lbnQoKTsKIApJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TE9wdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA1NDY4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1M
T3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSw0NCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxPcHRp
b25FbGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGYpCi0gICAgOiBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50KHRhZ05hbWUsIGRvYywgZikKK0hUTUxPcHRpb25FbGVtZW50OjpIVE1MT3B0aW9u
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQs
IEhUTUxGb3JtRWxlbWVudCogZm9ybSkKKyAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQodGFn
TmFtZSwgZG9jdW1lbnQsIGZvcm0pCiAgICAgLCBtX3N0eWxlKDApCiB7CiAgICAgQVNTRVJUKGhh
c1RhZ05hbWUob3B0aW9uVGFnKSk7CiB9CiAKK1Bhc3NSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+
IEhUTUxPcHRpb25FbGVtZW50OjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHZhbHVlLAorICAgICAgICBi
b29sIGRlZmF1bHRTZWxlY3RlZCwgYm9vbCBzZWxlY3RlZCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiBlbGVtZW50ID0gbmV3IEhUTUxPcHRpb25F
bGVtZW50KG9wdGlvblRhZywgZG9jdW1lbnQpOworCisgICAgLy8gRklYTUU6IFRoaXMgY3JlYXRl
cyBhbmQgaW5zZXJ0cyBhbiBlbXB0eSB0ZXh0IG5vZGUgaWYgZGF0YSBpcyBudWxsIG9yIGVtcHR5
IHN0cmluZy4KKyAgICAvLyBJJ20gZ3Vlc3NpbmcgdGhhdCBpcyBub3QgZGVzaXJhYmxlIGJlaGF2
aW9yLiBUaGVyZSdzIGFsc28gbm8gZ29vZCByZWFzb24gdG8gY3JlYXRlCisgICAgLy8gdGhlIHRl
eHQgbm9kZSB3aXRoIHRoZSBlbXB0eSBzdHJpbmcgZmlyc3QsIGFuZCB0aGVuIHNldCB0aGUgZGF0
YSB3aXRoIGEgc2VwYXJhdGUKKyAgICAvLyBET00gY2FsbC4KKyAgICBlYyA9IDA7CisgICAgUmVm
UHRyPFRleHQ+IHRleHQgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQsICIiKTsKKyAgICBpZiAoIWRh
dGEuaXNOdWxsKCkpIHsKKyAgICAgICAgdGV4dC0+c2V0RGF0YShkYXRhLCBlYyk7CisgICAgICAg
IGlmIChlYykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbGVtZW50LT5hcHBl
bmRDaGlsZCh0ZXh0LnJlbGVhc2UoKSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQorICAgICAgICBlbGVtZW50LT5zZXRWYWx1
ZSh2YWx1ZSk7CisgICAgZWxlbWVudC0+c2V0RGVmYXVsdFNlbGVjdGVkKGRlZmF1bHRTZWxlY3Rl
ZCk7CisgICAgZWxlbWVudC0+c2V0U2VsZWN0ZWQoc2VsZWN0ZWQpOworCisgICAgaWYgKGVjKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBlbGVtZW50LnJlbGVhc2UoKTsKK30KKwog
Ym9vbCBIVE1MT3B0aW9uRWxlbWVudDo6Y2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpCiB7
CiAgICAgcmV0dXJuIG5ld0NoaWxkLT5pc1RleHROb2RlKCkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05h
bWUoc2NyaXB0VGFnKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCShyZXZpc2lvbiA1
NDY4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNyw5IEBAIGNsYXNzIEhUTUxPcHRpb25FbGVtZW50IDogcHVibGljIEhUTUxG
b3IKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTWVudUxpc3Q7CiAKIHB1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4gY3JlYXRlRm9ySlNDb25zdHJ1Y3RvcihE
b2N1bWVudCosIGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwKKyAgICAg
ICAgYm9vbCBkZWZhdWx0U2VsZWN0ZWQsIGJvb2wgc2VsZWN0ZWQsIEV4Y2VwdGlvbkNvZGUmKTsK
KwogICAgIEhUTUxPcHRpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCos
IEhUTUxGb3JtRWxlbWVudCogPSAwKTsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRU
YWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49032</attachid>
            <date>2010-02-18 11:07:21 -0800</date>
            <delta_ts>2010-02-18 14:57:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34782-20100218110720.patch</filename>
            <type>text/plain</type>
            <size>33608</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwNmY0MTZkLi41M2JlNWM1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDIt
MTggIFlhYXIgU2Nobml0bWFuICA8eWFhckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm9ybWFsaXplIGN1c3RvbSBjdG9ycyBm
b3IgSW1hZ2UsIE9wdGlvbiwgQXVkaW8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM0NzgyCisKKyAgICAgICAgKiBmYXN0L2pzL2N1c3RvbS1jb25zdHJ1
Y3RvcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL2N1c3RvbS1jb25z
dHJ1Y3RvcnMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9zY3JpcHQtdGVzdHMvY3Vz
dG9tLWNvbnN0cnVjdG9ycy5qczogQWRkZWQuCisKIDIwMTAtMDItMTcgIE5pa29sYXMgWmltbWVy
bWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgTm90IHJldmlld2VkLiBUcnkg
dG8gdHVybiB3aW5kb3dzIHNsYXZlcyBhZ2FpbiwgYnkgc2tpcHBpbmcgdHdvIHdlYnNvY2tldCB0
ZXN0cyB0aGF0IGZhaWwgcmVsaWFibGUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pz
L2N1c3RvbS1jb25zdHJ1Y3RvcnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9j
dXN0b20tY29uc3RydWN0b3JzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4xYmE1ZmVmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9q
cy9jdXN0b20tY29uc3RydWN0b3JzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI1IEBACitUaGlz
IHRlc3QgY2hlY2tzIGNvbnN0cnVjdGlvbiBvZiBvYmplY3RzIHdpdGggY3VzdG9tIGNvbnN0cnVj
dG9ycy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgbmV3IEltYWdlKCkg
aXMgbm9uLW51bGwuCitQQVNTIG5ldyBJbWFnZSgxMDApLndpZHRoIGlzIDEwMAorUEFTUyBuZXcg
SW1hZ2UoMTAwLDIwMCkuaGVpZ2h0IGlzIDIwMAorUEFTUyBuZXcgT3B0aW9uKCkgaXMgbm9uLW51
bGwuCitQQVNTIG5ldyBPcHRpb24oKS5pbm5lclRleHQgaXMgIiIKK1BBU1MgbmV3IE9wdGlvbign
ZGF0YScpLmlubmVyVGV4dCBpcyAiZGF0YSIKK1BBU1MgbmV3IE9wdGlvbignZGF0YScsICd2YWx1
ZScpLnZhbHVlIGlzICJ2YWx1ZSIKK1BBU1MgbmV3IE9wdGlvbignZGF0YScsICd2YWx1ZScpLmRl
ZmF1bHRTZWxlY3RlZCBpcyBmYWxzZQorUEFTUyBuZXcgT3B0aW9uKCdkYXRhJywgJ3ZhbHVlJywg
ZmFsc2UpLmRlZmF1bHRTZWxlY3RlZCBpcyBmYWxzZQorUEFTUyBuZXcgT3B0aW9uKCdkYXRhJywg
J3ZhbHVlJywgdHJ1ZSkuZGVmYXVsdFNlbGVjdGVkIGlzIHRydWUKK1BBU1MgbmV3IE9wdGlvbign
ZGF0YScsICd2YWx1ZScsIHRydWUpLnNlbGVjdGVkIGlzIGZhbHNlCitQQVNTIG5ldyBPcHRpb24o
J2RhdGEnLCAndmFsdWUnLCB0cnVlLCBmYWxzZSkuc2VsZWN0ZWQgaXMgZmFsc2UKK1BBU1MgbmV3
IE9wdGlvbignZGF0YScsICd2YWx1ZScsIHRydWUsIHRydWUpLnNlbGVjdGVkIGlzIHRydWUKK1BB
U1MgbmV3IEF1ZGlvKCkgaXMgbm9uLW51bGwuCitQQVNTIG5ldyBBdWRpbygpLnNyYyBpcyAiIgor
UEFTUyBuZXcgQXVkaW8oJ2h0dHA6Ly9sb2NhbGhvc3Qvc29tZXVybCcpLnNyYyBpcyAiaHR0cDov
L2xvY2FsaG9zdC9zb21ldXJsIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvY3VzdG9tLWNv
bnN0cnVjdG9ycy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9jdXN0b20tY29uc3RydWN0b3Jz
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwY2JmOQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvY3VzdG9tLWNvbnN0cnVjdG9ycy5odG1s
CkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhU
TUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9u
Ij48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVz
dHMvY3VzdG9tLWNvbnN0cnVjdG9ycy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9jdXN0b20tY29uc3RydWN0b3Jz
LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvY3VzdG9tLWNvbnN0cnVjdG9y
cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjJiMWU2Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvY3VzdG9tLWNvbnN0
cnVjdG9ycy5qcwpAQCAtMCwwICsxLDI5IEBACitkZXNjcmlwdGlvbigKKyJUaGlzIHRlc3QgY2hl
Y2tzIGNvbnN0cnVjdGlvbiBvZiBvYmplY3RzIHdpdGggY3VzdG9tIGNvbnN0cnVjdG9ycy4iCisp
OworCisvLyBJbWFnZSB0ZXN0cworc2hvdWxkQmVOb25OdWxsKCJuZXcgSW1hZ2UoKSIpOworc2hv
dWxkQmUoIm5ldyBJbWFnZSgxMDApLndpZHRoIiwgIjEwMCIpOworc2hvdWxkQmUoIm5ldyBJbWFn
ZSgxMDAsMjAwKS5oZWlnaHQiLCAiMjAwIik7CisKKy8vIE9wdGlvbiB0ZXN0cworc2hvdWxkQmVO
b25OdWxsKCJuZXcgT3B0aW9uKCkiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygibmV3IE9wdGlv
bigpLmlubmVyVGV4dCIsICIiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygibmV3IE9wdGlvbign
ZGF0YScpLmlubmVyVGV4dCIsICJkYXRhIik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoIm5ldyBP
cHRpb24oJ2RhdGEnLCAndmFsdWUnKS52YWx1ZSIsICd2YWx1ZScpOworCitzaG91bGRCZUZhbHNl
KCJuZXcgT3B0aW9uKCdkYXRhJywgJ3ZhbHVlJykuZGVmYXVsdFNlbGVjdGVkIik7CitzaG91bGRC
ZUZhbHNlKCJuZXcgT3B0aW9uKCdkYXRhJywgJ3ZhbHVlJywgZmFsc2UpLmRlZmF1bHRTZWxlY3Rl
ZCIpOworc2hvdWxkQmVUcnVlKCJuZXcgT3B0aW9uKCdkYXRhJywgJ3ZhbHVlJywgdHJ1ZSkuZGVm
YXVsdFNlbGVjdGVkIik7CisKK3Nob3VsZEJlRmFsc2UoIm5ldyBPcHRpb24oJ2RhdGEnLCAndmFs
dWUnLCB0cnVlKS5zZWxlY3RlZCIpOworc2hvdWxkQmVGYWxzZSgibmV3IE9wdGlvbignZGF0YScs
ICd2YWx1ZScsIHRydWUsIGZhbHNlKS5zZWxlY3RlZCIpOworc2hvdWxkQmVUcnVlKCJuZXcgT3B0
aW9uKCdkYXRhJywgJ3ZhbHVlJywgdHJ1ZSwgdHJ1ZSkuc2VsZWN0ZWQiKTsKKworLy8gQXVkaW8g
dGVzdHMKK3Nob3VsZEJlTm9uTnVsbCgibmV3IEF1ZGlvKCkiKTsKK3Nob3VsZEJlRXF1YWxUb1N0
cmluZygibmV3IEF1ZGlvKCkuc3JjIiwgIiIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJuZXcg
QXVkaW8oJ2h0dHA6Ly9sb2NhbGhvc3Qvc29tZXVybCcpLnNyYyIsICJodHRwOi8vbG9jYWxob3N0
L3NvbWV1cmwiKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGVlYmYxMDcuLjJj
MzVlZjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTAtMDItMTggIFlhYXIgU2Nobml0bWFuICA8eWFhckBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm9ybWFsaXplIGN1c3RvbSBjdG9ycyBmb3IgSW1hZ2UsIE9wdGlvbiwgQXVkaW8KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NzgyCisKKyAg
ICAgICAgVGVzdDogZmFzdC9qcy9jdXN0b20tY29uc3RydWN0b3JzLmh0bWwKKworICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U0F1ZGlvQ29uc3RydWN0b3I6OkpTQXVkaW9Db25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdHJ1Y3RBdWRpbyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEltYWdlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU09wdGlvbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnN0cnVjdEhUTUxPcHRpb25FbGVtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6djhI
VE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnY4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yQ2FsbGJhY2spOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6djhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yQ2FsbGJhY2sp
OgorICAgICAgICAqIGh0bWwvSFRNTEF1ZGlvRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQXVkaW9FbGVtZW50OjpIVE1MQXVkaW9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxBdWRpb0VsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IpOgorICAgICAgICAqIGh0
bWwvSFRNTEF1ZGlvRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEltYWdlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpjcmVhdGVGb3JKU0NvbnN0
cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6Om1hcFRvRW50cnkp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6YXR0YWNoKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJ
bWFnZUVsZW1lbnQ6OmhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50
OjpuYXR1cmFsSGVpZ2h0KToKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxPcHRpb25FbGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MT3B0aW9uRWxlbWVudDo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6b3duZXJTZWxlY3RFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPcHRpb25FbGVtZW50Ojpub25SZW5kZXJlclJlbmRlclN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpkaXNhYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgICogaHRt
bC9IVE1MT3B0aW9uRWxlbWVudC5oOgorCiAyMDEwLTAyLTE3ICBZYWFyIFNjaG5pdG1hbiAgPHlh
YXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuY3BwCmluZGV4IDE3NGNjMTEu
LjZiYmQzMWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVj
dG9yLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgpAQCAtMzAsMTAgKzMwLDcgQEAKICNpbmNsdWRlICJKU0F1ZGlvQ29uc3RydWN0b3Iu
aCIKIAogI2luY2x1ZGUgIkhUTUxBdWRpb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJKU0hUTUxBdWRpb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJy
b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAgLTQ2LDI0ICs0MywzMyBAQCBKU0F1ZGlv
Q29uc3RydWN0b3I6OkpTQXVkaW9Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYQogICAgIDogRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQoSlNBdWRp
b0NvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5
cGUoKSksIGdsb2JhbE9iamVjdCkKIHsKICAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1l
cygpLnByb3RvdHlwZSwgSlNIVE1MQXVkaW9FbGVtZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGds
b2JhbE9iamVjdCksIE5vbmUpOwotICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoLCBqc051bWJlcihleGVjLCAxKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7
CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4
ZWMsIDEpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKIHN0YXRpYyBK
U09iamVjdCogY29uc3RydWN0QXVkaW8oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3Ry
dWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNBdWRpb0NvbnN0cnVjdG9yKiBq
c0F1ZGlvID0gc3RhdGljX2Nhc3Q8SlNBdWRpb0NvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOwot
ICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCB0aGlzIG5lZWQgdGhlIGNhbGwgdG9KUyBvbiB0aGUg
ZG9jdW1lbnQgbGlrZSBKU0ltYWdlQ29uc3RydWN0b3I/Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0ganNBdWRpby0+ZG9jdW1lbnQoKTsKKyAgICBKU0F1ZGlvQ29uc3RydWN0b3IqIGpzQ29uc3Ry
dWN0b3IgPSBzdGF0aWNfY2FzdDxKU0F1ZGlvQ29uc3RydWN0b3IqPihjb25zdHJ1Y3Rvcik7CisK
KyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBqc0NvbnN0cnVjdG9yLT5kb2N1bWVudCgpOwogICAg
IGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJlZmVyZW5j
ZUVycm9yLCAiQXVkaW8gY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWls
YWJsZSIpOwogCi0gICAgUmVmUHRyPEhUTUxBdWRpb0VsZW1lbnQ+IGF1ZGlvID0gbmV3IEhUTUxB
dWRpb0VsZW1lbnQoSFRNTE5hbWVzOjphdWRpb1RhZywgZG9jdW1lbnQpOwotICAgIGF1ZGlvLT5z
ZXRBdXRvYnVmZmVyKHRydWUpOwotICAgIGlmIChhcmdzLnNpemUoKSA+IDApIHsKLSAgICAgICAg
YXVkaW8tPnNldFNyYyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICAgICAgYXVkaW8t
PnNjaGVkdWxlTG9hZCgpOwotICAgIH0KLSAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCBq
c0F1ZGlvLT5nbG9iYWxPYmplY3QoKSwgYXVkaW8ucmVsZWFzZSgpKSk7CisgICAgLy8gQ2FsbGlu
ZyB0b0pTIG9uIHRoZSBkb2N1bWVudCBjYXVzZXMgdGhlIEpTIGRvY3VtZW50IHdyYXBwZXIgdG8g
YmUKKyAgICAvLyBhZGRlZCB0byB0aGUgd2luZG93IG9iamVjdC4gVGhpcyBpcyBkb25lIHRvIGVu
c3VyZSB0aGF0IEpTRG9jdW1lbnQ6Om1hcmtDaGlsZHJlbgorICAgIC8vIHdpbGwgYmUgY2FsbGVk
LCB3aGljaCB3aWxsIGNhdXNlIHRoZSBhdWRpbyBlbGVtZW50IHRvIGJlIG1hcmtlZCBpZiBuZWNl
c3NhcnkuCisgICAgLy8gRklYTUU6IFRoZSBjb3JyZWN0IHdheSB0byBkbyB0aGlzIHdvdWxkIGJl
IHRvIG1ha2UgSFRNTE1lZGlhRWxlbWVudCBkZXJpdmUgZnJvbQorICAgIC8vIEFjdGl2ZURPTU9i
amVjdCBhbmQgdXNlIGl0cyBpbnRlcmZhY2UgdG8ga2VlcCBpdHMgd3JhcHBlciBhbGl2ZS4gVGhl
biB3ZSB3b3VsZAorICAgIC8vIHJlbW92ZSB0aGlzIGNvZGUgYW5kIHRoZSBzcGVjaWFsIGNhc2Ug
aW4gaXNPYnNlcnZhYmxlVGhyb3VnaERPTS4KKyAgICB0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3It
Pmdsb2JhbE9iamVjdCgpLCBkb2N1bWVudCk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBjb252ZXJ0
cyBhbiB1bmRlZmluZWQgYXJndW1lbnQgdG8gdGhlIHN0cmluZyAidW5kZWZpbmVkIiwgYnV0IHBv
c3NpYmx5IHdlCisgICAgLy8gc2hvdWxkIHRyZWF0IGl0IGFzIGlmIG5vIGFyZ3VtZW50IHdhcyBw
YXNzZWQgaW5zdGVhZCwgYnkgY2hlY2tpbmcgdGhlIHZhbHVlIG9mIGFyZ3MuYXQKKyAgICAvLyBy
YXRoZXIgdGhhbiBsb29raW5nIGF0IGFyZ3Muc2l6ZS4KKyAgICBTdHJpbmcgc3JjOworICAgIGlm
IChhcmdzLnNpemUoKSA+IDApCisgICAgICAgIHNyYyA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhl
Yyk7CisgICAgcmV0dXJuIGFzT2JqZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFs
T2JqZWN0KCksCisgICAgICAgIEhUTUxBdWRpb0VsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0
b3IoZG9jdW1lbnQsIHNyYykpKTsKIH0KIAogQ29uc3RydWN0VHlwZSBKU0F1ZGlvQ29uc3RydWN0
b3I6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcAppbmRleCAwZjRhOTkxLi5hMDM0
YzQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5j
cHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNs
dWRlICJKU05vZGUuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5j
bHVkZSA8cnVudGltZS9FcnJvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtNDMsMzUg
KzQyLDI3IEBAIEpTSW1hZ2VDb25zdHJ1Y3Rvcjo6SlNJbWFnZUNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhCiAKIHN0YXRpYyBKU09iamVjdCogY29u
c3RydWN0SW1hZ2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgYm9vbCB3aWR0aFNldCA9IGZhbHNlOwotICAgIGJvb2wg
aGVpZ2h0U2V0ID0gZmFsc2U7Ci0gICAgaW50IHdpZHRoID0gMDsKLSAgICBpbnQgaGVpZ2h0ID0g
MDsKLSAgICBpZiAoYXJncy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIHdpZHRoU2V0ID0gdHJ1ZTsK
LSAgICAgICAgd2lkdGggPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgfQotICAgIGlm
IChhcmdzLnNpemUoKSA+IDEpIHsKLSAgICAgICAgaGVpZ2h0U2V0ID0gdHJ1ZTsKLSAgICAgICAg
aGVpZ2h0ID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOwotICAgIH0KLQogICAgIEpTSW1hZ2VD
b25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTSW1hZ2VDb25zdHJ1Y3Rv
cio+KGNvbnN0cnVjdG9yKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBqc0NvbnN0cnVjdG9y
LT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCAiSW1hZ2UgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBk
b2N1bWVudCBpcyB1bmF2YWlsYWJsZSIpOwogCiAgICAgLy8gQ2FsbGluZyB0b0pTIG9uIHRoZSBk
b2N1bWVudCBjYXVzZXMgdGhlIEpTIGRvY3VtZW50IHdyYXBwZXIgdG8gYmUKLSAgICAvLyBhZGRl
ZCB0byB0aGUgd2luZG93IG9iamVjdC4gVGhpcyBpcyBkb25lIHRvIGVuc3VyZSB0aGF0IEpTRG9j
dW1lbnQ6Om1hcmsKLSAgICAvLyB3aWxsIGJlIGNhbGxlZCAod2hpY2ggd2lsbCBjYXVzZSB0aGUg
aW1hZ2UgZWxlbWVudCB0byBiZSBtYXJrZWQgaWYgbmVjZXNzYXJ5KS4KKyAgICAvLyBhZGRlZCB0
byB0aGUgd2luZG93IG9iamVjdC4gVGhpcyBpcyBkb25lIHRvIGVuc3VyZSB0aGF0IEpTRG9jdW1l
bnQ6Om1hcmtDaGlsZHJlbgorICAgIC8vIHdpbGwgYmUgY2FsbGVkLCB3aGljaCB3aWxsIGNhdXNl
IHRoZSBpbWFnZSBlbGVtZW50IHRvIGJlIG1hcmtlZCBpZiBuZWNlc3NhcnkuCisgICAgLy8gRklY
TUU6IFRoZSBjb3JyZWN0IHdheSB0byBkbyB0aGlzIHdvdWxkIGJlIHRvIG1ha2UgSFRNTEltYWdl
RWxlbWVudCBkZXJpdmUgZnJvbQorICAgIC8vIEFjdGl2ZURPTU9iamVjdCBhbmQgdXNlIGl0cyBp
bnRlcmZhY2UgdG8ga2VlcCBpdHMgd3JhcHBlciBhbGl2ZS4gVGhlbiB3ZSB3b3VsZAorICAgIC8v
IHJlbW92ZSB0aGlzIGNvZGUgYW5kIHRoZSBzcGVjaWFsIGNhc2UgaW4gaXNPYnNlcnZhYmxlVGhy
b3VnaERPTS4KICAgICB0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBk
b2N1bWVudCk7CisgICAgaW50IHdpZHRoID0gLTE7CisgICAgaW50IGhlaWdodCA9IC0xOworICAg
IGlmIChhcmdzLnNpemUoKSA+IDAgJiYgIWFyZ3MuYXQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkK
KyAgICAgICAgd2lkdGggPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGFyZ3Mu
c2l6ZSgpID4gMSAmJiAhYXJncy5hdCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBo
ZWlnaHQgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7CiAKLSAgICBSZWZQdHI8SFRNTEltYWdl
RWxlbWVudD4gaW1hZ2UgPSBuZXcgSFRNTEltYWdlRWxlbWVudChIVE1MTmFtZXM6OmltZ1RhZywg
ZG9jdW1lbnQpOwotICAgIGlmICh3aWR0aFNldCkKLSAgICAgICAgaW1hZ2UtPnNldFdpZHRoKHdp
ZHRoKTsKLSAgICBpZiAoaGVpZ2h0U2V0KQotICAgICAgICBpbWFnZS0+c2V0SGVpZ2h0KGhlaWdo
dCk7Ci0gICAgcmV0dXJuIGFzT2JqZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFs
T2JqZWN0KCksIGltYWdlLnJlbGVhc2UoKSkpOworICAgIHJldHVybiBhc09iamVjdCh0b0pTKGV4
ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLAorICAgICAgICBIVE1MSW1hZ2VFbGVt
ZW50OjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKGRvY3VtZW50LCB3aWR0aCwgaGVpZ2h0KSkpOwog
fQogCiBDb25zdHJ1Y3RUeXBlIEpTSW1hZ2VDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShD
b25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU09wdGlvbkNvbnN0cnVjdG9yLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPcHRp
b25Db25zdHJ1Y3Rvci5jcHAKaW5kZXggN2RhMDY2Ni4uOTk1OTAzZSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU09wdGlvbkNvbnN0cnVjdG9yLmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTT3B0aW9uQ29uc3RydWN0b3IuY3BwCkBAIC00OSwyMSArNDksMTggQEAgc3Rh
dGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RIVE1MT3B0aW9uRWxlbWVudChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBjb25zdHJ1Y3QKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBSZWZlcmVuY2VFcnJvciwgIk9wdGlvbiBjb25zdHJ1Y3RvciBhc3Nv
Y2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIik7CiAKLSAgICBSZWZQdHI8SFRNTE9wdGlv
bkVsZW1lbnQ+IGVsZW1lbnQgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEhUTUxPcHRpb25FbGVtZW50
Pihkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChIVE1MTmFtZXM6Om9wdGlvblRhZywgZmFsc2UpKTsK
LQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxUZXh0PiB0ZXh0ID0gZG9j
dW1lbnQtPmNyZWF0ZVRleHROb2RlKCIiKTsKKyAgICBTdHJpbmcgZGF0YTsKICAgICBpZiAoIWFy
Z3MuYXQoMCkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgdGV4dC0+c2V0RGF0YShhcmdzLmF0KDAp
LnRvU3RyaW5nKGV4ZWMpLCBlYyk7Ci0gICAgaWYgKGVjID09IDApCi0gICAgICAgIGVsZW1lbnQt
PmFwcGVuZENoaWxkKHRleHQucmVsZWFzZSgpLCBlYyk7Ci0gICAgaWYgKGVjID09IDAgJiYgIWFy
Z3MuYXQoMSkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgZWxlbWVudC0+c2V0VmFsdWUoYXJncy5h
dCgxKS50b1N0cmluZyhleGVjKSk7Ci0gICAgaWYgKGVjID09IDApCi0gICAgICAgIGVsZW1lbnQt
PnNldERlZmF1bHRTZWxlY3RlZChhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7Ci0gICAgaWYg
KGVjID09IDApCi0gICAgICAgIGVsZW1lbnQtPnNldFNlbGVjdGVkKGFyZ3MuYXQoMykudG9Cb29s
ZWFuKGV4ZWMpKTsKKyAgICAgICAgZGF0YSA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7CiAK
KyAgICBTdHJpbmcgdmFsdWU7CisgICAgaWYgKCFhcmdzLmF0KDEpLmlzVW5kZWZpbmVkKCkpCisg
ICAgICAgIHZhbHVlID0gYXJncy5hdCgxKS50b1N0cmluZyhleGVjKTsKKyAgICBib29sIGRlZmF1
bHRTZWxlY3RlZCA9IGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpOworICAgIGJvb2wgc2VsZWN0
ZWQgPSBhcmdzLmF0KDMpLnRvQm9vbGVhbihleGVjKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4gZWxlbWVudCA9IEhUTUxPcHRpb25F
bGVtZW50OjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKGRvY3VtZW50LCBkYXRhLCB2YWx1ZSwgZGVm
YXVsdFNlbGVjdGVkLCBzZWxlY3RlZCwgZWMpOwogICAgIGlmIChlYykgewogICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVj
dG9yLmNwcAppbmRleCAwNmM2YzFkLi45Yjc1ZGI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3Bw
CkBAIC0xNCw3ICsxNCw3IEBACiAgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTYwLDE1ICs2MCwx
NCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4SFRNTEF1ZGlvRWxlbWVudENvbnN0
cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZwogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigi
QXVkaW8gY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZSIsIFY4
UHJveHk6OlJlZmVyZW5jZUVycm9yKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgZG9jdW1lbnQg
aXMgYWRkZWQgdG8gdGhlIERPTSBOb2RlIG1hcC4gT3RoZXJ3aXNlLCB0aGUgSFRNTEF1ZGlvRWxl
bWVudCBpbnN0YW5jZQotICAgIC8vIG1heSBlbmQgdXAgYmVpbmcgdGhlIG9ubHkgbm9kZSBpbiB0
aGUgbWFwIGFuZCBnZXQgZ2FyYmFnZS1jY29sbGVjdGVkIHByZW1hdHVyZWx5LgorICAgIC8vIG1h
eSBlbmQgdXAgYmVpbmcgdGhlIG9ubHkgbm9kZSBpbiB0aGUgbWFwIGFuZCBnZXQgZ2FyYmFnZS1j
b2xsZWN0ZWQgcHJlbWF0dXJlbHkuCiAgICAgdG9WOChkb2N1bWVudCk7CiAKLSAgICBSZWZQdHI8
SFRNTEF1ZGlvRWxlbWVudD4gYXVkaW8gPSBuZXcgSFRNTEF1ZGlvRWxlbWVudChIVE1MTmFtZXM6
OmF1ZGlvVGFnLCBkb2N1bWVudCk7Ci0gICAgYXVkaW8tPnNldEF1dG9idWZmZXIodHJ1ZSk7Ci0g
ICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIGF1ZGlvLT5zZXRTcmModG9XZWJD
b3JlU3RyaW5nKGFyZ3NbMF0pKTsKLSAgICAgICAgYXVkaW8tPnNjaGVkdWxlTG9hZCgpOwotICAg
IH0KKworICAgIFN0cmluZyBzcmM7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAwKQorICAgICAg
ICBzcmMgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CisgICAgUmVmUHRyPEhUTUxBdWRpb0Vs
ZW1lbnQ+IGF1ZGlvID0gSFRNTEF1ZGlvRWxlbWVudDo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3Rvcihk
b2N1bWVudCwgc3JjKTsKIAogICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhv
bGRlcigpLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6QVVESU8pLCBhdWRpby5n
ZXQoKSk7CiAgICAgYXVkaW8tPnJlZigpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuY3BwCmluZGV4IDE4
NzMxODguLjM2NzIxMjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTE0LDcgKzE0
LDcgQEAKICAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKICAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwog
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtNjEsMTQgKzYxLDE5IEBAIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3JDYWxsYmFj
ayhjb25zdCB2ODo6QXJnCiAKICAgICAvLyBNYWtlIHN1cmUgdGhlIGRvY3VtZW50IGlzIGFkZGVk
IHRvIHRoZSBET00gTm9kZSBtYXAuIE90aGVyd2lzZSwgdGhlIEhUTUxJbWFnZUVsZW1lbnQgaW5z
dGFuY2UKICAgICAvLyBtYXkgZW5kIHVwIGJlaW5nIHRoZSBvbmx5IG5vZGUgaW4gdGhlIG1hcCBh
bmQgZ2V0IGdhcmJhZ2UtY2NvbGxlY3RlZCBwcmVtYXR1cmVseS4KKyAgICAvLyBGSVhNRTogVGhl
IGNvcnJlY3Qgd2F5IHRvIGRvIHRoaXMgd291bGQgYmUgdG8gbWFrZSBIVE1MSW1hZ2VFbGVtZW50
IGRlcml2ZSBmcm9tCisgICAgLy8gQWN0aXZlRE9NT2JqZWN0IGFuZCB1c2UgaXRzIGludGVyZmFj
ZSB0byBrZWVwIGl0cyB3cmFwcGVyIGFsaXZlLiBUaGVuIHdlIHdvdWxkCisgICAgLy8gcmVtb3Zl
IHRoaXMgY29kZSBhbmQgdGhlIHNwZWNpYWwgY2FzZSBpbiBpc09ic2VydmFibGVUaHJvdWdoRE9N
LgogICAgIHRvVjgoZG9jdW1lbnQpOwogCi0gICAgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IGlt
YWdlID0gbmV3IEhUTUxJbWFnZUVsZW1lbnQoSFRNTE5hbWVzOjppbWdUYWcsIGRvY3VtZW50KTsK
LSAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDApIHsKLSAgICAgICAgaW1hZ2UtPnNldFdpZHRoKHRv
SW50MzIoYXJnc1swXSkpOwotICAgICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEpCi0gICAgICAg
ICAgICBpbWFnZS0+c2V0SGVpZ2h0KHRvSW50MzIoYXJnc1sxXSkpOwotICAgIH0KKyAgICBpbnQg
d2lkdGggPSAtMTsKKyAgICBpbnQgaGVpZ2h0ID0gLTE7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
PiAwICYmICFpc1VuZGVmaW5lZE9yTnVsbChhcmdzWzBdKSkKKyAgICAgICAgd2lkdGggPSB0b0lu
dDMyKGFyZ3NbMF0pOworICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMSAmJiAhaXNVbmRlZmluZWRP
ck51bGwoYXJnc1sxXSkpCisgICAgICAgIGhlaWdodCA9IHRvSW50MzIoYXJnc1sxXSk7CisKKyAg
ICBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4gaW1hZ2UgPSBIVE1MSW1hZ2VFbGVtZW50OjpjcmVh
dGVGb3JKU0NvbnN0cnVjdG9yKGRvY3VtZW50LCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIFY4RE9N
V3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCBWOENsYXNzSW5kZXg6OlRvSW50
KFY4Q2xhc3NJbmRleDo6SU1BR0UpLCBpbWFnZS5nZXQoKSk7CiAgICAgaW1hZ2UtPnJlZigpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVu
dENvbnN0cnVjdG9yLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlv
bkVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMzExM2ViNS4uMWZmMWQyZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVj
dG9yLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25FbGVt
ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0xNCw3ICsxNCw3IEBACiAgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQogICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKQEAgLTU5LDMyICs1OSwyNCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4SFRN
TE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcgogICAgIGlmICgh
ZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJPcHRpb24gY29uc3RydWN0b3Ig
YXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZSIsIFY4UHJveHk6OlJlZmVyZW5jZUVy
cm9yKTsKIAotICAgIFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4gb3B0aW9uID0gbmV3IEhUTUxP
cHRpb25FbGVtZW50KEhUTUxOYW1lczo6b3B0aW9uVGFnLCBkb2N1bWVudCk7CisgICAgU3RyaW5n
IGRhdGE7CisgICAgU3RyaW5nIHZhbHVlOworICAgIGJvb2wgZGVmYXVsdFNlbGVjdGVkID0gZmFs
c2U7CisgICAgYm9vbCBzZWxlY3RlZCA9IGZhbHNlOworICAgIGlmIChhcmdzLkxlbmd0aCgpID4g
MCAmJiAhYXJnc1swXS0+SXNVbmRlZmluZWQoKSkKKyAgICAgICAgZGF0YSA9IHRvV2ViQ29yZVN0
cmluZyhhcmdzWzBdKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEgJiYgIWFyZ3NbMV0tPklz
VW5kZWZpbmVkKCkpCisgICAgICAgIHZhbHVlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMV0pOwor
ICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMikKKyAgICAgICAgZGVmYXVsdFNlbGVjdGVkID0gYXJn
c1syXS0+Qm9vbGVhblZhbHVlKCk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAzKQorICAgICAg
ICBzZWxlY3RlZCA9IGFyZ3NbM10tPkJvb2xlYW5WYWx1ZSgpOwogCiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFRleHQ+IHRleHQgPSBkb2N1bWVudC0+Y3JlYXRlVGV4dE5v
ZGUoIiIpOwotICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMCkgewotICAgICAgICBpZiAoIWFyZ3Nb
MF0tPklzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgICAgIHRleHQtPnNldERhdGEodG9XZWJDb3Jl
U3RyaW5nKGFyZ3NbMF0pLCBlYyk7Ci0gICAgICAgICAgICBpZiAoZWMpCi0gICAgICAgICAgICAg
ICAgdGhyb3dFcnJvcihlYyk7Ci0gICAgICAgIH0KLQotICAgICAgICBvcHRpb24tPmFwcGVuZENo
aWxkKHRleHQucmVsZWFzZSgpLCBlYyk7Ci0gICAgICAgIGlmIChlYykKLSAgICAgICAgICAgIHRo
cm93RXJyb3IoZWMpOwotCi0gICAgICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMSkgewotICAgICAg
ICAgICAgaWYgKCFhcmdzWzFdLT5Jc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIG9wdGlv
bi0+c2V0VmFsdWUodG9XZWJDb3JlU3RyaW5nKGFyZ3NbMV0pKTsKLQotICAgICAgICAgICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgPiAyKSB7Ci0gICAgICAgICAgICAgICAgb3B0aW9uLT5zZXREZWZhdWx0
U2VsZWN0ZWQoYXJnc1syXS0+Qm9vbGVhblZhbHVlKCkpOwotICAgICAgICAgICAgICAgIGlmIChh
cmdzLkxlbmd0aCgpID4gMykKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9uLT5zZXRTZWxlY3Rl
ZChhcmdzWzNdLT5Cb29sZWFuVmFsdWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9CisgICAgUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiBvcHRpb24gPSBIVE1MT3B0aW9uRWxl
bWVudDo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3Rvcihkb2N1bWVudCwgZGF0YSwgdmFsdWUsIGRlZmF1
bHRTZWxlY3RlZCwgc2VsZWN0ZWQsIGVjKTsKKworICAgIGlmIChlYykKKyAgICAgICAgdGhyb3dF
cnJvcihlYyk7CiAKICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIo
KSwgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6Ok9QVElPTiksIG9wdGlvbi5nZXQo
KSk7CiAgICAgb3B0aW9uLT5yZWYoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MQXVk
aW9FbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmNwcAppbmRleCA2
YWRmOWVhLi4zNDdiOGM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVu
dC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuY3BwCkBAIC0xLDUgKzEs
NiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwLDcgKzIxLDcg
QEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMzQsMTEg
KzM1LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAotSFRNTEF1ZGlvRWxlbWVudDo6SFRNTEF1ZGlvRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQotICAgIDogSFRNTE1lZGlhRWxlbWVudCh0YWdO
YW1lLCBkb2MpCitIVE1MQXVkaW9FbGVtZW50OjpIVE1MQXVkaW9FbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxNZWRpYUVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoYXVkaW9U
YWcpKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MQXVkaW9FbGVtZW50PiBIVE1MQXVkaW9FbGVtZW50
OjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5n
JiBzcmMpCit7CisgICAgUmVmUHRyPEhUTUxBdWRpb0VsZW1lbnQ+IGF1ZGlvID0gbmV3IEhUTUxB
dWRpb0VsZW1lbnQoYXVkaW9UYWcsIGRvY3VtZW50KTsKKyAgICBhdWRpby0+c2V0QXV0b2J1ZmZl
cih0cnVlKTsKKyAgICBpZiAoIXNyYy5pc051bGwoKSkgeworICAgICAgICBhdWRpby0+c2V0U3Jj
KHNyYyk7CisgICAgICAgIGF1ZGlvLT5zY2hlZHVsZUxvYWQoKTsKKyAgICB9CisgICAgcmV0dXJu
IGF1ZGlvLnJlbGVhc2UoKTsKK30KKwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvSFRNTEF1ZGlvRWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaApp
bmRleCAwYzk3NzdkLi4yZjA2ZjFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlv
RWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmgKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMCw3ICsy
MSw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgSFRNTEF1ZGlvRWxlbWVudF9o
CkBAIC0yOCwxNCArMjksMTUgQEAKIAogI2lmIEVOQUJMRShWSURFTykKIAorI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEhUTUxBdWRpb0VsZW1lbnQgOiBwdWJsaWMgSFRNTE1lZGlhRWxlbWVu
dCB7CiBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEF1ZGlvRWxlbWVudD4gY3Jl
YXRlRm9ySlNDb25zdHJ1Y3RvcihEb2N1bWVudCosIGNvbnN0IFN0cmluZyYgc3JjKTsKICAgICBI
VE1MQXVkaW9FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwotCiBwcml2
YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9I
VE1MSW1hZ2VFbGVtZW50LmNwcAppbmRleCA0NTkyNDYxLi5lNTE5ODIzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJ
bWFnZUVsZW1lbnQuY3BwCkBAIC0xLDcgKzEsOCBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTgsNiArNTksMTYg
QEAgSFRNTEltYWdlRWxlbWVudDo6fkhUTUxJbWFnZUVsZW1lbnQoKQogICAgICAgICBtX2Zvcm0t
PnJlbW92ZUltZ0VsZW1lbnQodGhpcyk7CiB9CiAKK1Bhc3NSZWZQdHI8SFRNTEltYWdlRWxlbWVu
dD4gSFRNTEltYWdlRWxlbWVudDo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3RvcihEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCkKK3sKKyAgICBSZWZQdHI8
SFRNTEltYWdlRWxlbWVudD4gaW1hZ2UgPSBuZXcgSFRNTEltYWdlRWxlbWVudChpbWdUYWcsIGRv
Y3VtZW50KTsKKyAgICBpZiAod2lkdGggPj0gMCkKKyAgICAgICAgaW1hZ2UtPnNldFdpZHRoKHdp
ZHRoKTsKKyAgICBpZiAoaGVpZ2h0ID49IDApCisgICAgICAgIGltYWdlLT5zZXRIZWlnaHQoaGVp
Z2h0KTsKKyAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOworfQorCiBib29sIEhUTUxJbWFnZUVs
ZW1lbnQ6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0
dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKGF0dHJOYW1lID09IHdpZHRo
QXR0ciB8fApAQCAtNjgsNyArNzksNyBAQCBib29sIEhUTUxJbWFnZUVsZW1lbnQ6Om1hcFRvRW50
cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZQogICAgICAg
ICByZXN1bHQgPSBlVW5pdmVyc2FsOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAg
IAorCiAgICAgaWYgKGF0dHJOYW1lID09IGJvcmRlckF0dHIgfHwgYXR0ck5hbWUgPT0gYWxpZ25B
dHRyKSB7CiAgICAgICAgIHJlc3VsdCA9IGVSZXBsYWNlZDsgLy8gU2hhcmVkIHdpdGggZW1iZWQg
YW5kIGlmcmFtZSBlbGVtZW50cy4KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTYxLDcgKzE3
Miw3IEBAIFJlbmRlck9iamVjdCogSFRNTEltYWdlRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVu
ZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSoKIHsKICAgICAgaWYgKHN0eWxlLT5jb250ZW50
RGF0YSgpKQogICAgICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpjcmVhdGVPYmplY3QodGhpcywg
c3R5bGUpOwotICAgICAKKwogICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVySW1hZ2UodGhp
cyk7CiB9CiAKQEAgLTE3NCw3ICsxODUsNyBAQCB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OmF0dGFj
aCgpCiAgICAgICAgIGlmIChpbWFnZU9iai0+aGFzSW1hZ2UoKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgaW1hZ2VPYmotPnNldENhY2hlZEltYWdlKG1faW1hZ2VMb2FkZXIuaW1hZ2Uo
KSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIElmIHdlIGhhdmUgbm8gaW1hZ2UgYXQgYWxsIGJl
Y2F1c2Ugd2UgaGF2ZSBubyBzcmMgYXR0cmlidXRlLCBzZXQKICAgICAgICAgLy8gaW1hZ2UgaGVp
Z2h0IGFuZCB3aWR0aCBmb3IgdGhlIGFsdCB0ZXh0IGluc3RlYWQuCiAgICAgICAgIGlmICghbV9p
bWFnZUxvYWRlci5pbWFnZSgpICYmICFpbWFnZU9iai0+Y2FjaGVkSW1hZ2UoKSkKQEAgLTI0MSw3
ICsyNTIsNyBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6d2lkdGgoYm9vbCBpZ25vcmVQZW5kaW5n
U3R5bGVzaGVldHMpIGNvbnN0CiAgICAgICAgIGludCB3aWR0aCA9IGdldEF0dHJpYnV0ZSh3aWR0
aEF0dHIpLnRvSW50KCZvayk7CiAgICAgICAgIGlmIChvaykKICAgICAgICAgICAgIHJldHVybiB3
aWR0aDsKLSAgICAgICAgCisKICAgICAgICAgLy8gaWYgdGhlIGltYWdlIGlzIGF2YWlsYWJsZSwg
dXNlIGl0cyB3aWR0aAogICAgICAgICBpZiAobV9pbWFnZUxvYWRlci5pbWFnZSgpKSB7CiAgICAg
ICAgICAgICBmbG9hdCB6b29tRmFjdG9yID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSA/IGRvY3VtZW50
KCktPmZyYW1lKCktPnBhZ2Vab29tRmFjdG9yKCkgOiAxLjBmOwpAQCAtMjY1LDcgKzI3Niw3IEBA
IGludCBIVE1MSW1hZ2VFbGVtZW50OjpoZWlnaHQoYm9vbCBpZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMpIGNvbnN0CiAgICAgICAgIGludCBoZWlnaHQgPSBnZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciku
dG9JbnQoJm9rKTsKICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAgcmV0dXJuIGhlaWdodDsK
LSAgICAgICAgCisKICAgICAgICAgLy8gaWYgdGhlIGltYWdlIGlzIGF2YWlsYWJsZSwgdXNlIGl0
cyBoZWlnaHQKICAgICAgICAgaWYgKG1faW1hZ2VMb2FkZXIuaW1hZ2UoKSkgewogICAgICAgICAg
ICAgZmxvYXQgem9vbUZhY3RvciA9IGRvY3VtZW50KCktPmZyYW1lKCkgPyBkb2N1bWVudCgpLT5m
cmFtZSgpLT5wYWdlWm9vbUZhY3RvcigpIDogMS4wZjsKQEAgLTI5MywxMCArMzA0LDEwIEBAIGlu
dCBIVE1MSW1hZ2VFbGVtZW50OjpuYXR1cmFsSGVpZ2h0KCkgY29uc3QKIHsKICAgICBpZiAoIW1f
aW1hZ2VMb2FkZXIuaW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCisKICAgICByZXR1
cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpLT5pbWFnZVNpemUoMS4wZikuaGVpZ2h0KCk7CiB9Ci0g
ICAgCisKIGJvb2wgSFRNTEltYWdlRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKiBh
dHRyKSBjb25zdAogewogICAgIHJldHVybiBhdHRyLT5uYW1lKCkgPT0gc3JjQXR0cgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1M
SW1hZ2VFbGVtZW50LmgKaW5kZXggMTRlNWZhMy4uZDQyYmQ1YSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxl
bWVudC5oCkBAIC0xLDcgKzEsOCBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwOCwgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MzQsNiArMzUsOCBAQCBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CiBjbGFzcyBIVE1MSW1hZ2VFbGVt
ZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKICAgICBmcmllbmQgY2xhc3MgSFRNTEZvcm1FbGVt
ZW50OwogcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IGNy
ZWF0ZUZvckpTQ29uc3RydWN0b3IoRG9jdW1lbnQqLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGlu
dCBoZWlnaHQpOworCiAgICAgSFRNTEltYWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7CiAgICAgfkhUTUxJbWFnZUVsZW1lbnQo
KTsKIApAQCAtNTMsNyArNTYsNyBAQCBwdWJsaWM6CiAKICAgICBpbnQgbmF0dXJhbFdpZHRoKCkg
Y29uc3Q7CiAgICAgaW50IG5hdHVyYWxIZWlnaHQoKSBjb25zdDsKLSAgICAKKwogICAgIGJvb2wg
aXNTZXJ2ZXJNYXAoKSBjb25zdCB7IHJldHVybiBpc21hcCAmJiB1c2VtYXAuaXNFbXB0eSgpOyB9
CiAKICAgICBTdHJpbmcgYWx0VGV4dCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25FbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5j
cHAKaW5kZXggODU5OGU4Ny4uYjMzZjYyOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxP
cHRpb25FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3Bw
CkBAIC0yLDggKzIsOSBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4KICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBv
cC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQxLDEzICs0Miwz
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
LUhUTUxPcHRpb25FbGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGYpCi0gICAgOiBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvYywgZikKK0hUTUxPcHRpb25FbGVtZW50OjpI
VE1MT3B0aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKKyAgICA6IEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pCiAgICAgLCBtX3N0eWxlKDApCiB7CiAgICAg
QVNTRVJUKGhhc1RhZ05hbWUob3B0aW9uVGFnKSk7CiB9CiAKK1Bhc3NSZWZQdHI8SFRNTE9wdGlv
bkVsZW1lbnQ+IEhUTUxPcHRpb25FbGVtZW50OjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHZhbHVlLAor
ICAgICAgICBib29sIGRlZmF1bHRTZWxlY3RlZCwgYm9vbCBzZWxlY3RlZCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiBlbGVtZW50ID0gbmV3IEhU
TUxPcHRpb25FbGVtZW50KG9wdGlvblRhZywgZG9jdW1lbnQpOworCisgICAgUmVmUHRyPFRleHQ+
IHRleHQgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQsIGRhdGEuaXNOdWxsKCkgPyAiIiA6IGRhdGEp
OworCisgICAgZWMgPSAwOworICAgIGVsZW1lbnQtPmFwcGVuZENoaWxkKHRleHQucmVsZWFzZSgp
LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghdmFsdWUu
aXNOdWxsKCkpCisgICAgICAgIGVsZW1lbnQtPnNldFZhbHVlKHZhbHVlKTsKKyAgICBlbGVtZW50
LT5zZXREZWZhdWx0U2VsZWN0ZWQoZGVmYXVsdFNlbGVjdGVkKTsKKyAgICBlbGVtZW50LT5zZXRT
ZWxlY3RlZChzZWxlY3RlZCk7CisKKyAgICByZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7Cit9CisK
IGJvb2wgSFRNTE9wdGlvbkVsZW1lbnQ6OmNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKQog
ewogICAgIHJldHVybiBuZXdDaGlsZC0+aXNUZXh0Tm9kZSgpIHx8IG5ld0NoaWxkLT5oYXNUYWdO
YW1lKHNjcmlwdFRhZyk7CkBAIC0xNzQsNyArMTk1LDcgQEAgSFRNTFNlbGVjdEVsZW1lbnQqIEhU
TUxPcHRpb25FbGVtZW50Ojpvd25lclNlbGVjdEVsZW1lbnQoKSBjb25zdAogCiAgICAgaWYgKCFz
ZWxlY3QpCiAgICAgICAgIHJldHVybiAwOwotICAgIAorCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxTZWxlY3RFbGVtZW50Kj4oc2VsZWN0KTsKIH0KIApAQCAtMjAzLDkgKzIyNCw5IEBAIHZv
aWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldFJlbmRlclN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IG5ld1N0eWxlKQogICAgIG1fc3R5bGUgPSBuZXdTdHlsZTsKIH0KIAotUmVuZGVyU3R5bGUq
IEhUTUxPcHRpb25FbGVtZW50Ojpub25SZW5kZXJlclJlbmRlclN0eWxlKCkgY29uc3QgCi17IAot
ICAgIHJldHVybiBtX3N0eWxlLmdldCgpOyAKK1JlbmRlclN0eWxlKiBIVE1MT3B0aW9uRWxlbWVu
dDo6bm9uUmVuZGVyZXJSZW5kZXJTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3R5bGUu
Z2V0KCk7CiB9CiAKIFN0cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6dGV4dEluZGVudGVkVG9SZXNw
ZWN0R3JvdXBMYWJlbCgpIGNvbnN0CkBAIC0yMTQsOCArMjM1LDggQEAgU3RyaW5nIEhUTUxPcHRp
b25FbGVtZW50Ojp0ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCkgY29uc3QKIH0KIAog
Ym9vbCBIVE1MT3B0aW9uRWxlbWVudDo6ZGlzYWJsZWQoKSBjb25zdAoteyAKLSAgICByZXR1cm4g
b3duRWxlbWVudERpc2FibGVkKCkgfHwgKHBhcmVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Kj4ocGFyZW50Tm9kZSgpKS0+ZGlzYWJsZWQoKSk7IAoreworICAg
IHJldHVybiBvd25FbGVtZW50RGlzYWJsZWQoKSB8fCAocGFyZW50Tm9kZSgpICYmIHN0YXRpY19j
YXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihwYXJlbnROb2RlKCkpLT5kaXNhYmxlZCgpKTsK
IH0KIAogdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXAp
CkBAIC0yMjcsNyArMjQ4LDcgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
VHJlZShib29sIGRlZXApCiAgICAgICAgICAgICBzZWxlY3QtPnNldFNlbGVjdGVkSW5kZXgoaW5k
ZXgoKSwgZmFsc2UpOwogICAgICAgICBzZWxlY3QtPnNjcm9sbFRvU2VsZWN0aW9uKCk7CiAgICAg
fQotICAgIAorCiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShk
ZWVwKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50Lmgg
Yi9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAppbmRleCA3YmU5ZTlhLi40MjU1ZjI1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAorKysgYi9XZWJD
b3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaApAQCAtMyw2ICszLDcgQEAKICAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTM5LDYgKzQwLDkgQEAgY2xhc3MgSFRNTE9wdGlvbkVsZW1lbnQgOiBwdWJsaWMgSFRN
TEZvcm1Db250cm9sRWxlbWVudCwgcHVibGljIE9wdGlvbkVsZW1lbnQgewogcHVibGljOgogICAg
IEhUTUxPcHRpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxG
b3JtRWxlbWVudCogPSAwKTsKIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxPcHRpb25FbGVt
ZW50PiBjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBkYXRh
LCBjb25zdCBTdHJpbmcmIHZhbHVlLAorICAgICAgIGJvb2wgZGVmYXVsdFNlbGVjdGVkLCBib29s
IHNlbGVjdGVkLCBFeGNlcHRpb25Db2RlJik7CisKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMg
ZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25hbDsgfQog
ICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMjsgfQogICAgIHZp
cnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCk7CkBAIC00OCw3ICs1Miw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lk
IGRldGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRSZW5kZXJTdHlsZShQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPik7Ci0gICAgCisKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9y
bUNvbnRyb2xUeXBlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIFN0cmluZyB0ZXh0KCkgY29uc3Q7
CkBAIC03OCwxMCArODIsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBvd25FbGVtZW50RGlzYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZCgpOyB9
CiAgICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29uc3Q7Ci0gICAgCisKICAgICB2aXJ0dWFs
IHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5
QWN0aW9uKGJvb2wpOwotICAgIAorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUq
IG5vblJlbmRlcmVyUmVuZGVyU3R5bGUoKSBjb25zdDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49044</attachid>
            <date>2010-02-18 14:57:58 -0800</date>
            <delta_ts>2010-02-18 21:00:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34782-20100218145757.patch</filename>
            <type>text/plain</type>
            <size>36403</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwNmY0MTZkLi41M2JlNWM1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDIt
MTggIFlhYXIgU2Nobml0bWFuICA8eWFhckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm9ybWFsaXplIGN1c3RvbSBjdG9ycyBm
b3IgSW1hZ2UsIE9wdGlvbiwgQXVkaW8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM0NzgyCisKKyAgICAgICAgKiBmYXN0L2pzL2N1c3RvbS1jb25zdHJ1
Y3RvcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL2N1c3RvbS1jb25z
dHJ1Y3RvcnMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9zY3JpcHQtdGVzdHMvY3Vz
dG9tLWNvbnN0cnVjdG9ycy5qczogQWRkZWQuCisKIDIwMTAtMDItMTcgIE5pa29sYXMgWmltbWVy
bWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgTm90IHJldmlld2VkLiBUcnkg
dG8gdHVybiB3aW5kb3dzIHNsYXZlcyBhZ2FpbiwgYnkgc2tpcHBpbmcgdHdvIHdlYnNvY2tldCB0
ZXN0cyB0aGF0IGZhaWwgcmVsaWFibGUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pz
L2N1c3RvbS1jb25zdHJ1Y3RvcnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9j
dXN0b20tY29uc3RydWN0b3JzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5lMDgyZDEwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9q
cy9jdXN0b20tY29uc3RydWN0b3JzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQ4IEBACitUaGlz
IHRlc3QgY2hlY2tzIGNvbnN0cnVjdGlvbiBvZiBvYmplY3RzIHdpdGggY3VzdG9tIGNvbnN0cnVj
dG9ycy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgbmV3IEltYWdlKCkg
aXMgbm9uLW51bGwuCitQQVNTIG5ldyBJbWFnZSgpLnRhZ05hbWUgaXMgIklNRyIKK1BBU1MgbmV3
IEltYWdlKCkuaGVpZ2h0IGlzIDAKK1BBU1MgbmV3IEltYWdlKCkud2lkdGggaXMgMAorUEFTUyBu
ZXcgSW1hZ2UoMTAwKS53aWR0aCBpcyAxMDAKK1BBU1MgbmV3IEltYWdlKDEwMCwgMjAwKS5oZWln
aHQgaXMgMjAwCitQQVNTIG5ldyBJbWFnZSgtMTAwKS53aWR0aCBpcyAtMTAwCitQQVNTIG5ldyBJ
bWFnZSgtMTAwLCAtMjAwKS5oZWlnaHQgaXMgLTIwMAorUEFTUyBuZXcgSW1hZ2UoKS5vdXRlckhU
TUwgaXMgIjxpbWc+IgorUEFTUyBuZXcgSW1hZ2UoMTAwLCAxMDApLm91dGVySFRNTC5yZXBsYWNl
KC8iL2csICInIikgaXMgIjxpbWcgd2lkdGg9JzEwMCcgaGVpZ2h0PScxMDAnPiIKK1BBU1MgbmV3
IE9wdGlvbigpIGlzIG5vbi1udWxsLgorUEFTUyBuZXcgT3B0aW9uKCkudGFnTmFtZSBpcyAiT1BU
SU9OIgorUEFTUyBuZXcgT3B0aW9uKCkuaW5uZXJUZXh0IGlzICIiCitQQVNTIG5ldyBPcHRpb24o
bnVsbCkuaW5uZXJUZXh0IGlzICJudWxsIgorUEFTUyBuZXcgT3B0aW9uKHVuZGVmaW5lZCkuaW5u
ZXJUZXh0IGlzICIiCitQQVNTIG5ldyBPcHRpb24oJ3NvbWVkYXRhJykuaW5uZXJUZXh0IGlzICJz
b21lZGF0YSIKK1BBU1MgbmV3IE9wdGlvbigpLnZhbHVlIGlzICIiCitQQVNTIG5ldyBPcHRpb24o
J3NvbWVkYXRhJywgbnVsbCkudmFsdWUgaXMgIm51bGwiCitQQVNTIG5ldyBPcHRpb24oJ3NvbWVk
YXRhJywgdW5kZWZpbmVkKS52YWx1ZSBpcyAic29tZWRhdGEiCitQQVNTIG5ldyBPcHRpb24oJ3Nv
bWVkYXRhJywgJ3NvbWV2YWx1ZScpLnZhbHVlIGlzICJzb21ldmFsdWUiCitQQVNTIG5ldyBPcHRp
b24oKS5kZWZhdWx0U2VsZWN0ZWQgaXMgZmFsc2UKK1BBU1MgbmV3IE9wdGlvbignc29tZWRhdGEn
LCAnc29tZXZhbHVlJykuZGVmYXVsdFNlbGVjdGVkIGlzIGZhbHNlCitQQVNTIG5ldyBPcHRpb24o
J3NvbWVkYXRhJywgJ3NvbWV2YWx1ZScsIGZhbHNlKS5kZWZhdWx0U2VsZWN0ZWQgaXMgZmFsc2UK
K1BBU1MgbmV3IE9wdGlvbignc29tZWRhdGEnLCAnc29tZXZhbHVlJywgdHJ1ZSkuZGVmYXVsdFNl
bGVjdGVkIGlzIHRydWUKK1BBU1MgbmV3IE9wdGlvbigpLnNlbGVjdGVkIGlzIGZhbHNlCitQQVNT
IG5ldyBPcHRpb24oJ3NvbWVkYXRhJywgJ3NvbWV2YWx1ZScpLnNlbGVjdGVkIGlzIGZhbHNlCitQ
QVNTIG5ldyBPcHRpb24oJ3NvbWVkYXRhJywgJ3NvbWV2YWx1ZScsIGZhbHNlKS5zZWxlY3RlZCBp
cyBmYWxzZQorUEFTUyBuZXcgT3B0aW9uKCdzb21lZGF0YScsICdzb21ldmFsdWUnLCB0cnVlKS5z
ZWxlY3RlZCBpcyBmYWxzZQorUEFTUyBuZXcgT3B0aW9uKCdzb21lZGF0YScsICdzb21ldmFsdWUn
LCB0cnVlLCBmYWxzZSkuc2VsZWN0ZWQgaXMgZmFsc2UKK1BBU1MgbmV3IE9wdGlvbignc29tZWRh
dGEnLCAnc29tZXZhbHVlJywgdHJ1ZSwgdHJ1ZSkuc2VsZWN0ZWQgaXMgdHJ1ZQorUEFTUyBuZXcg
T3B0aW9uKCkub3V0ZXJIVE1MIGlzICI8b3B0aW9uPjwvb3B0aW9uPiIKK1BBU1MgbmV3IE9wdGlv
bignc29tZWRhdGEnLCAnc29tZXZhbHVlJywgZmFsc2UpLm91dGVySFRNTC5yZXBsYWNlKC8iL2cs
IiciKSBpcyAiPG9wdGlvbiB2YWx1ZT0nc29tZXZhbHVlJz5zb21lZGF0YTwvb3B0aW9uPiIKK1BB
U1MgbmV3IE9wdGlvbignc29tZWRhdGEnLCAnc29tZXZhbHVlJywgdHJ1ZSkub3V0ZXJIVE1MLnJl
cGxhY2UoLyIvZywiJyIpIGlzICI8b3B0aW9uIHZhbHVlPSdzb21ldmFsdWUnIHNlbGVjdGVkPScn
PnNvbWVkYXRhPC9vcHRpb24+IgorUEFTUyBuZXcgQXVkaW8oKSBpcyBub24tbnVsbC4KK1BBU1Mg
bmV3IEF1ZGlvKCkudGFnTmFtZSBpcyAiQVVESU8iCitQQVNTIG5ldyBBdWRpbygpLnNyYyBpcyAi
IgorUEFTUyBuZXcgQXVkaW8oKS5hdXRvYnVmZmVyIGlzIHRydWUKK1BBU1MgbmV3IEF1ZGlvKCdo
dHRwOi8vbG9jYWxob3N0L3NvbWV1cmwnKS5zcmMgaXMgImh0dHA6Ly9sb2NhbGhvc3Qvc29tZXVy
bCIKK1BBU1MgbmV3IEF1ZGlvKCdodHRwOi8vbG9jYWxob3N0L3NvbWV1cmwnKS5hdXRvYnVmZmVy
IGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL2N1c3RvbS1jb25zdHJ1Y3RvcnMu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvanMvY3VzdG9tLWNvbnN0cnVjdG9ycy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMGNiZjkKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2pzL2N1c3RvbS1jb25zdHJ1Y3RvcnMuaHRtbApAQCAtMCwwICsx
LDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvanMt
dGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2N1c3RvbS1j
b25zdHJ1Y3RvcnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvY3VzdG9tLWNvbnN0cnVjdG9ycy5qcyBiL0xheW91
dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2N1c3RvbS1jb25zdHJ1Y3RvcnMuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0NWU1NwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2N1c3RvbS1jb25zdHJ1Y3RvcnMuanMK
QEAgLTAsMCArMSw1OSBAQAorZGVzY3JpcHRpb24oCisiVGhpcyB0ZXN0IGNoZWNrcyBjb25zdHJ1
Y3Rpb24gb2Ygb2JqZWN0cyB3aXRoIGN1c3RvbSBjb25zdHJ1Y3RvcnMuIgorKTsKKworLy8gSW1h
Z2UgdGVzdHMKK3Nob3VsZEJlTm9uTnVsbCgibmV3IEltYWdlKCkiKTsKK3Nob3VsZEJlRXF1YWxU
b1N0cmluZygibmV3IEltYWdlKCkudGFnTmFtZSIsICJJTUciKTsKKworc2hvdWxkQmUoIm5ldyBJ
bWFnZSgpLmhlaWdodCIsICIwIik7CitzaG91bGRCZSgibmV3IEltYWdlKCkud2lkdGgiLCAiMCIp
Oworc2hvdWxkQmUoIm5ldyBJbWFnZSgxMDApLndpZHRoIiwgIjEwMCIpOworc2hvdWxkQmUoIm5l
dyBJbWFnZSgxMDAsIDIwMCkuaGVpZ2h0IiwgIjIwMCIpOworc2hvdWxkQmUoIm5ldyBJbWFnZSgt
MTAwKS53aWR0aCIsICItMTAwIik7CitzaG91bGRCZSgibmV3IEltYWdlKC0xMDAsIC0yMDApLmhl
aWdodCIsICItMjAwIik7CisKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygibmV3IEltYWdlKCkub3V0
ZXJIVE1MIiwiPGltZz4iKTsKKy8vIEZJWE1FOiBzaG91bGRCZUVxdWFsVG9TdHJpbmcgc3RyaXBz
IHF1b3RlcyBmcm9tIHRoZSBzdHJpbmcuCitzaG91bGRCZUVxdWFsVG9TdHJpbmcoIm5ldyBJbWFn
ZSgxMDAsIDEwMCkub3V0ZXJIVE1MLnJlcGxhY2UoL1wiL2csIFwiJ1wiKSIsICI8aW1nIHdpZHRo
PScxMDAnIGhlaWdodD0nMTAwJz4iKTsKKworLy8gT3B0aW9uIHRlc3RzCitzaG91bGRCZU5vbk51
bGwoIm5ldyBPcHRpb24oKSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJuZXcgT3B0aW9uKCku
dGFnTmFtZSIsICJPUFRJT04iKTsKKworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJuZXcgT3B0aW9u
KCkuaW5uZXJUZXh0IiwgIiIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJuZXcgT3B0aW9uKG51
bGwpLmlubmVyVGV4dCIsICJudWxsIik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoIm5ldyBPcHRp
b24odW5kZWZpbmVkKS5pbm5lclRleHQiLCAiIik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoIm5l
dyBPcHRpb24oJ3NvbWVkYXRhJykuaW5uZXJUZXh0IiwgInNvbWVkYXRhIik7CisKK3Nob3VsZEJl
RXF1YWxUb1N0cmluZygibmV3IE9wdGlvbigpLnZhbHVlIiwgIiIpOworc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCJuZXcgT3B0aW9uKCdzb21lZGF0YScsIG51bGwpLnZhbHVlIiwgIm51bGwiKTsKK3No
b3VsZEJlRXF1YWxUb1N0cmluZygibmV3IE9wdGlvbignc29tZWRhdGEnLCB1bmRlZmluZWQpLnZh
bHVlIiwgInNvbWVkYXRhIik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoIm5ldyBPcHRpb24oJ3Nv
bWVkYXRhJywgJ3NvbWV2YWx1ZScpLnZhbHVlIiwgInNvbWV2YWx1ZSIpOworCitzaG91bGRCZUZh
bHNlKCJuZXcgT3B0aW9uKCkuZGVmYXVsdFNlbGVjdGVkIik7CitzaG91bGRCZUZhbHNlKCJuZXcg
T3B0aW9uKCdzb21lZGF0YScsICdzb21ldmFsdWUnKS5kZWZhdWx0U2VsZWN0ZWQiKTsKK3Nob3Vs
ZEJlRmFsc2UoIm5ldyBPcHRpb24oJ3NvbWVkYXRhJywgJ3NvbWV2YWx1ZScsIGZhbHNlKS5kZWZh
dWx0U2VsZWN0ZWQiKTsKK3Nob3VsZEJlVHJ1ZSgibmV3IE9wdGlvbignc29tZWRhdGEnLCAnc29t
ZXZhbHVlJywgdHJ1ZSkuZGVmYXVsdFNlbGVjdGVkIik7CisKK3Nob3VsZEJlRmFsc2UoIm5ldyBP
cHRpb24oKS5zZWxlY3RlZCIpOworc2hvdWxkQmVGYWxzZSgibmV3IE9wdGlvbignc29tZWRhdGEn
LCAnc29tZXZhbHVlJykuc2VsZWN0ZWQiKTsKK3Nob3VsZEJlRmFsc2UoIm5ldyBPcHRpb24oJ3Nv
bWVkYXRhJywgJ3NvbWV2YWx1ZScsIGZhbHNlKS5zZWxlY3RlZCIpOworc2hvdWxkQmVGYWxzZSgi
bmV3IE9wdGlvbignc29tZWRhdGEnLCAnc29tZXZhbHVlJywgdHJ1ZSkuc2VsZWN0ZWQiKTsKK3No
b3VsZEJlRmFsc2UoIm5ldyBPcHRpb24oJ3NvbWVkYXRhJywgJ3NvbWV2YWx1ZScsIHRydWUsIGZh
bHNlKS5zZWxlY3RlZCIpOworc2hvdWxkQmVUcnVlKCJuZXcgT3B0aW9uKCdzb21lZGF0YScsICdz
b21ldmFsdWUnLCB0cnVlLCB0cnVlKS5zZWxlY3RlZCIpOworCitzaG91bGRCZUVxdWFsVG9TdHJp
bmcoIm5ldyBPcHRpb24oKS5vdXRlckhUTUwiLCI8b3B0aW9uPjwvb3B0aW9uPiIpOworc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCJuZXcgT3B0aW9uKCdzb21lZGF0YScsICdzb21ldmFsdWUnLCBmYWxz
ZSkub3V0ZXJIVE1MLnJlcGxhY2UoL1wiL2csXCInXCIpIiwgIjxvcHRpb24gdmFsdWU9J3NvbWV2
YWx1ZSc+c29tZWRhdGE8L29wdGlvbj4iKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygibmV3IE9w
dGlvbignc29tZWRhdGEnLCAnc29tZXZhbHVlJywgdHJ1ZSkub3V0ZXJIVE1MLnJlcGxhY2UoL1wi
L2csXCInXCIpIiwgIjxvcHRpb24gdmFsdWU9J3NvbWV2YWx1ZScgc2VsZWN0ZWQ9Jyc+c29tZWRh
dGE8L29wdGlvbj4iKTsKKworLy8gQXVkaW8gdGVzdHMKK3Nob3VsZEJlTm9uTnVsbCgibmV3IEF1
ZGlvKCkiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygibmV3IEF1ZGlvKCkudGFnTmFtZSIsICJB
VURJTyIpOworCitzaG91bGRCZUVxdWFsVG9TdHJpbmcoIm5ldyBBdWRpbygpLnNyYyIsICIiKTsK
K3Nob3VsZEJlVHJ1ZSgibmV3IEF1ZGlvKCkuYXV0b2J1ZmZlciIpOworc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCJuZXcgQXVkaW8oJ2h0dHA6Ly9sb2NhbGhvc3Qvc29tZXVybCcpLnNyYyIsICJodHRw
Oi8vbG9jYWxob3N0L3NvbWV1cmwiKTsKK3Nob3VsZEJlVHJ1ZSgibmV3IEF1ZGlvKCdodHRwOi8v
bG9jYWxob3N0L3NvbWV1cmwnKS5hdXRvYnVmZmVyIik7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCBlZWJmMTA3Li4yYzM1ZWY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEwLTAyLTE4ICBZ
YWFyIFNjaG5pdG1hbiAgPHlhYXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vcm1hbGl6ZSBjdXN0b20gY3RvcnMgZm9yIElt
YWdlLCBPcHRpb24sIEF1ZGlvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zNDc4MgorCisgICAgICAgIFRlc3Q6IGZhc3QvanMvY3VzdG9tLWNvbnN0cnVj
dG9ycy5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNBdWRpb0NvbnN0cnVjdG9yOjpKU0F1ZGlvQ29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0QXVkaW8pOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1
Y3RJbWFnZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNPcHRpb25Db25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RIVE1MT3B0aW9uRWxlbWVudCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yQ2FsbGJhY2sp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2OEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rv
ckNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxl
bWVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnY4SFRNTE9wdGlvbkVsZW1l
bnRDb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAgKiBodG1sL0hUTUxBdWRpb0VsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEF1ZGlvRWxlbWVudDo6SFRNTEF1ZGlvRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXVkaW9FbGVtZW50OjpjcmVhdGVGb3JKU0NvbnN0
cnVjdG9yKToKKyAgICAgICAgKiBodG1sL0hUTUxBdWRpb0VsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxl
bWVudDo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1h
Z2VFbGVtZW50OjptYXBUb0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1l
bnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6
OmF0dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpoZWlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEltYWdlRWxlbWVudDo6bmF0dXJhbEhlaWdodCk6CisgICAgICAgICogaHRtbC9I
VE1MSW1hZ2VFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6SFRNTE9wdGlvbkVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3Ry
dWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyU2VsZWN0
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6bm9uUmVuZGVy
ZXJSZW5kZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6ZGlz
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6Omluc2VydGVkSW50
b1RyZWUpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaDoKKwogMjAxMC0wMi0x
NyAgWWFhciBTY2huaXRtYW4gIDx5YWFyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNB
dWRpb0NvbnN0cnVjdG9yLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVj
dG9yLmNwcAppbmRleCAxNzRjYzExLi43N2JiMTIwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0F1ZGlvQ29uc3RydWN0b3IuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTMwLDEwICszMCw3IEBACiAj
aW5jbHVkZSAiSlNBdWRpb0NvbnN0cnVjdG9yLmgiCiAKICNpbmNsdWRlICJIVE1MQXVkaW9FbGVt
ZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSlNIVE1MQXVkaW9FbGVt
ZW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlRl
eHQuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CkBAIC00NiwyNCArNDMsMzAgQEAgSlNBdWRpb0NvbnN0cnVjdG9yOjpKU0F1ZGlvQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmEKICAgICA6IERPTUNv
bnN0cnVjdG9yV2l0aERvY3VtZW50KEpTQXVkaW9Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpLCBnbG9iYWxPYmplY3QpCiB7CiAgICAg
cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTSFRNTEF1ZGlvRWxl
bWVudFByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKLSAgICBwdXRE
aXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMSksIFJl
YWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRl
IHwgRG9udEVudW0pOwogfQogCiBzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdEF1ZGlvKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewotICAgIEpTQXVkaW9Db25zdHJ1Y3RvcioganNBdWRpbyA9IHN0YXRpY19jYXN0PEpTQXVkaW9D
b25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKLSAgICAvLyBGSVhNRTogV2h5IGRvZXNuJ3QgdGhp
cyBuZWVkIHRoZSBjYWxsIHRvSlMgb24gdGhlIGRvY3VtZW50IGxpa2UgSlNJbWFnZUNvbnN0cnVj
dG9yPwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGpzQXVkaW8tPmRvY3VtZW50KCk7CisgICAg
SlNBdWRpb0NvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNBdWRpb0Nv
bnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0ganND
b25zdHJ1Y3Rvci0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBSZWZlcmVuY2VFcnJvciwgIkF1ZGlvIGNvbnN0cnVjdG9yIGFz
c29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKTsKIAotICAgIFJlZlB0cjxIVE1MQXVk
aW9FbGVtZW50PiBhdWRpbyA9IG5ldyBIVE1MQXVkaW9FbGVtZW50KEhUTUxOYW1lczo6YXVkaW9U
YWcsIGRvY3VtZW50KTsKLSAgICBhdWRpby0+c2V0QXV0b2J1ZmZlcih0cnVlKTsKLSAgICBpZiAo
YXJncy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIGF1ZGlvLT5zZXRTcmMoYXJncy5hdCgwKS50b1N0
cmluZyhleGVjKSk7Ci0gICAgICAgIGF1ZGlvLT5zY2hlZHVsZUxvYWQoKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGFzT2JqZWN0KHRvSlMoZXhlYywganNBdWRpby0+Z2xvYmFsT2JqZWN0KCksIGF1ZGlv
LnJlbGVhc2UoKSkpOworICAgIC8vIENhbGxpbmcgdG9KUyBvbiB0aGUgZG9jdW1lbnQgY2F1c2Vz
IHRoZSBKUyBkb2N1bWVudCB3cmFwcGVyIHRvIGJlCisgICAgLy8gYWRkZWQgdG8gdGhlIHdpbmRv
dyBvYmplY3QuIFRoaXMgaXMgZG9uZSB0byBlbnN1cmUgdGhhdCBKU0RvY3VtZW50OjptYXJrQ2hp
bGRyZW4KKyAgICAvLyB3aWxsIGJlIGNhbGxlZCwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgYXVkaW8g
ZWxlbWVudCB0byBiZSBtYXJrZWQgaWYgbmVjZXNzYXJ5LgorICAgIHRvSlMoZXhlYywganNDb25z
dHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIGRvY3VtZW50KTsKKworICAgIC8vIEZJWE1FOiBUaGlz
IGNvbnZlcnRzIGFuIHVuZGVmaW5lZCBhcmd1bWVudCB0byB0aGUgc3RyaW5nICJ1bmRlZmluZWQi
LCBidXQgcG9zc2libHkgd2UKKyAgICAvLyBzaG91bGQgdHJlYXQgaXQgYXMgaWYgbm8gYXJndW1l
bnQgd2FzIHBhc3NlZCBpbnN0ZWFkLCBieSBjaGVja2luZyB0aGUgdmFsdWUgb2YgYXJncy5hdAor
ICAgIC8vIHJhdGhlciB0aGFuIGxvb2tpbmcgYXQgYXJncy5zaXplLgorICAgIFN0cmluZyBzcmM7
CisgICAgaWYgKGFyZ3Muc2l6ZSgpID4gMCkKKyAgICAgICAgc3JjID0gYXJncy5hdCgwKS50b1N0
cmluZyhleGVjKTsKKyAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9y
LT5nbG9iYWxPYmplY3QoKSwKKyAgICAgICAgSFRNTEF1ZGlvRWxlbWVudDo6Y3JlYXRlRm9ySlND
b25zdHJ1Y3Rvcihkb2N1bWVudCwgc3JjKSkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIEpTQXVkaW9D
b25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRh
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3Bw
IGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwCmluZGV4IDBmNGE5
OTEuLmE1NzQzMjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0
cnVjdG9yLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5j
cHAKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNyArMjQsNiBA
QAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5o
IgogI2luY2x1ZGUgIkpTTm9kZS5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBA
IC00MywzNSArNDIsMzAgQEAgSlNJbWFnZUNvbnN0cnVjdG9yOjpKU0ltYWdlQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmEKIAogc3RhdGljIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3RJbWFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3Rv
ciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBib29sIHdpZHRoU2V0ID0gZmFsc2U7Ci0g
ICAgYm9vbCBoZWlnaHRTZXQgPSBmYWxzZTsKLSAgICBpbnQgd2lkdGggPSAwOwotICAgIGludCBo
ZWlnaHQgPSAwOwotICAgIGlmIChhcmdzLnNpemUoKSA+IDApIHsKLSAgICAgICAgd2lkdGhTZXQg
PSB0cnVlOwotICAgICAgICB3aWR0aCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKLSAgICB9
Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpID4gMSkgewotICAgICAgICBoZWlnaHRTZXQgPSB0cnVlOwot
ICAgICAgICBoZWlnaHQgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgfQotCiAgICAg
SlNJbWFnZUNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNJbWFnZUNv
bnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOwogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGpzQ29u
c3RydWN0b3ItPmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgUmVmZXJlbmNlRXJyb3IsICJJbWFnZSBjb25zdHJ1Y3RvciBhc3Nv
Y2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIik7CiAKICAgICAvLyBDYWxsaW5nIHRvSlMg
b24gdGhlIGRvY3VtZW50IGNhdXNlcyB0aGUgSlMgZG9jdW1lbnQgd3JhcHBlciB0byBiZQotICAg
IC8vIGFkZGVkIHRvIHRoZSB3aW5kb3cgb2JqZWN0LiBUaGlzIGlzIGRvbmUgdG8gZW5zdXJlIHRo
YXQgSlNEb2N1bWVudDo6bWFyawotICAgIC8vIHdpbGwgYmUgY2FsbGVkICh3aGljaCB3aWxsIGNh
dXNlIHRoZSBpbWFnZSBlbGVtZW50IHRvIGJlIG1hcmtlZCBpZiBuZWNlc3NhcnkpLgorICAgIC8v
IGFkZGVkIHRvIHRoZSB3aW5kb3cgb2JqZWN0LiBUaGlzIGlzIGRvbmUgdG8gZW5zdXJlIHRoYXQg
SlNEb2N1bWVudDo6bWFya0NoaWxkcmVuCisgICAgLy8gd2lsbCBiZSBjYWxsZWQsIHdoaWNoIHdp
bGwgY2F1c2UgdGhlIGltYWdlIGVsZW1lbnQgdG8gYmUgbWFya2VkIGlmIG5lY2Vzc2FyeS4KICAg
ICB0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBkb2N1bWVudCk7Cisg
ICAgaW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisgICAgaW50KiBvcHRpb25hbFdpZHRoID0g
MDsKKyAgICBpbnQqIG9wdGlvbmFsSGVpZ2h0ID0gMDsKKyAgICBpZiAoYXJncy5zaXplKCkgPiAw
KSB7CisgICAgICAgIHdpZHRoID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOworICAgICAgICBv
cHRpb25hbFdpZHRoID0gJndpZHRoOworICAgIH0KKyAgICBpZiAoYXJncy5zaXplKCkgPiAxKSB7
CisgICAgICAgIGhlaWdodCA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKKyAgICAgICAgb3B0
aW9uYWxIZWlnaHQgPSAmaGVpZ2h0OworICAgIH0KIAotICAgIFJlZlB0cjxIVE1MSW1hZ2VFbGVt
ZW50PiBpbWFnZSA9IG5ldyBIVE1MSW1hZ2VFbGVtZW50KEhUTUxOYW1lczo6aW1nVGFnLCBkb2N1
bWVudCk7Ci0gICAgaWYgKHdpZHRoU2V0KQotICAgICAgICBpbWFnZS0+c2V0V2lkdGgod2lkdGgp
OwotICAgIGlmIChoZWlnaHRTZXQpCi0gICAgICAgIGltYWdlLT5zZXRIZWlnaHQoaGVpZ2h0KTsK
LSAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmpl
Y3QoKSwgaW1hZ2UucmVsZWFzZSgpKSk7CisgICAgcmV0dXJuIGFzT2JqZWN0KHRvSlMoZXhlYywg
anNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksCisgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQ6
OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoZG9jdW1lbnQsIG9wdGlvbmFsV2lkdGgsIG9wdGlvbmFs
SGVpZ2h0KSkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIEpTSW1hZ2VDb25zdHJ1Y3Rvcjo6Z2V0Q29u
c3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU09wdGlvbkNvbnN0cnVjdG9yLmNwcCBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNPcHRpb25Db25zdHJ1Y3Rvci5jcHAKaW5kZXggN2RhMDY2Ni4uOTk1OTAzZSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09wdGlvbkNvbnN0cnVjdG9yLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT3B0aW9uQ29uc3RydWN0b3IuY3BwCkBAIC00OSwyMSAr
NDksMTggQEAgc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RIVE1MT3B0aW9uRWxlbWVudChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3QKICAgICBpZiAoIWRvY3VtZW50KQogICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSZWZlcmVuY2VFcnJvciwgIk9wdGlvbiBjb25z
dHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIik7CiAKLSAgICBSZWZQ
dHI8SFRNTE9wdGlvbkVsZW1lbnQ+IGVsZW1lbnQgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEhUTUxP
cHRpb25FbGVtZW50Pihkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChIVE1MTmFtZXM6Om9wdGlvblRh
ZywgZmFsc2UpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxUZXh0
PiB0ZXh0ID0gZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKCIiKTsKKyAgICBTdHJpbmcgZGF0YTsK
ICAgICBpZiAoIWFyZ3MuYXQoMCkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgdGV4dC0+c2V0RGF0
YShhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBlYyk7Ci0gICAgaWYgKGVjID09IDApCi0gICAg
ICAgIGVsZW1lbnQtPmFwcGVuZENoaWxkKHRleHQucmVsZWFzZSgpLCBlYyk7Ci0gICAgaWYgKGVj
ID09IDAgJiYgIWFyZ3MuYXQoMSkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgZWxlbWVudC0+c2V0
VmFsdWUoYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSk7Ci0gICAgaWYgKGVjID09IDApCi0gICAg
ICAgIGVsZW1lbnQtPnNldERlZmF1bHRTZWxlY3RlZChhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVj
KSk7Ci0gICAgaWYgKGVjID09IDApCi0gICAgICAgIGVsZW1lbnQtPnNldFNlbGVjdGVkKGFyZ3Mu
YXQoMykudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICAgICAgZGF0YSA9IGFyZ3MuYXQoMCkudG9TdHJp
bmcoZXhlYyk7CiAKKyAgICBTdHJpbmcgdmFsdWU7CisgICAgaWYgKCFhcmdzLmF0KDEpLmlzVW5k
ZWZpbmVkKCkpCisgICAgICAgIHZhbHVlID0gYXJncy5hdCgxKS50b1N0cmluZyhleGVjKTsKKyAg
ICBib29sIGRlZmF1bHRTZWxlY3RlZCA9IGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpOworICAg
IGJvb2wgc2VsZWN0ZWQgPSBhcmdzLmF0KDMpLnRvQm9vbGVhbihleGVjKTsKKworICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4gZWxlbWVudCA9
IEhUTUxPcHRpb25FbGVtZW50OjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKGRvY3VtZW50LCBkYXRh
LCB2YWx1ZSwgZGVmYXVsdFNlbGVjdGVkLCBzZWxlY3RlZCwgZWMpOwogICAgIGlmIChlYykgewog
ICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgICAgICByZXR1cm4gMDsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENv
bnN0cnVjdG9yLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxl
bWVudENvbnN0cnVjdG9yLmNwcAppbmRleCAwNmM2YzFkLi45Yjc1ZGI4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5j
cHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29u
c3RydWN0b3IuY3BwCkBAIC0xNCw3ICsxNCw3IEBACiAgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAg
LTYwLDE1ICs2MCwxNCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4SFRNTEF1ZGlv
RWxlbWVudENvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZwogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcigiQXVkaW8gY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2
YWlsYWJsZSIsIFY4UHJveHk6OlJlZmVyZW5jZUVycm9yKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0
aGUgZG9jdW1lbnQgaXMgYWRkZWQgdG8gdGhlIERPTSBOb2RlIG1hcC4gT3RoZXJ3aXNlLCB0aGUg
SFRNTEF1ZGlvRWxlbWVudCBpbnN0YW5jZQotICAgIC8vIG1heSBlbmQgdXAgYmVpbmcgdGhlIG9u
bHkgbm9kZSBpbiB0aGUgbWFwIGFuZCBnZXQgZ2FyYmFnZS1jY29sbGVjdGVkIHByZW1hdHVyZWx5
LgorICAgIC8vIG1heSBlbmQgdXAgYmVpbmcgdGhlIG9ubHkgbm9kZSBpbiB0aGUgbWFwIGFuZCBn
ZXQgZ2FyYmFnZS1jb2xsZWN0ZWQgcHJlbWF0dXJlbHkuCiAgICAgdG9WOChkb2N1bWVudCk7CiAK
LSAgICBSZWZQdHI8SFRNTEF1ZGlvRWxlbWVudD4gYXVkaW8gPSBuZXcgSFRNTEF1ZGlvRWxlbWVu
dChIVE1MTmFtZXM6OmF1ZGlvVGFnLCBkb2N1bWVudCk7Ci0gICAgYXVkaW8tPnNldEF1dG9idWZm
ZXIodHJ1ZSk7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIGF1ZGlvLT5z
ZXRTcmModG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pKTsKLSAgICAgICAgYXVkaW8tPnNjaGVkdWxl
TG9hZCgpOwotICAgIH0KKworICAgIFN0cmluZyBzcmM7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
PiAwKQorICAgICAgICBzcmMgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CisgICAgUmVmUHRy
PEhUTUxBdWRpb0VsZW1lbnQ+IGF1ZGlvID0gSFRNTEF1ZGlvRWxlbWVudDo6Y3JlYXRlRm9ySlND
b25zdHJ1Y3Rvcihkb2N1bWVudCwgc3JjKTsKIAogICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3Jh
cHBlcihhcmdzLkhvbGRlcigpLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6QVVE
SU8pLCBhdWRpby5nZXQoKSk7CiAgICAgYXVkaW8tPnJlZigpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3Iu
Y3BwCmluZGV4IDE4NzMxODguLjI5YjQ4MTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmNwcAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
QEAgLTE0LDcgKzE0LDcgQEAKICAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtNjEsMTUgKzYxLDI1
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhIVE1MSW1hZ2VFbGVtZW50Q29uc3Ry
dWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJnCiAKICAgICAvLyBNYWtlIHN1cmUgdGhlIGRvY3Vt
ZW50IGlzIGFkZGVkIHRvIHRoZSBET00gTm9kZSBtYXAuIE90aGVyd2lzZSwgdGhlIEhUTUxJbWFn
ZUVsZW1lbnQgaW5zdGFuY2UKICAgICAvLyBtYXkgZW5kIHVwIGJlaW5nIHRoZSBvbmx5IG5vZGUg
aW4gdGhlIG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY2NvbGxlY3RlZCBwcmVtYXR1cmVseS4KKyAgICAv
LyBGSVhNRTogVGhlIGNvcnJlY3Qgd2F5IHRvIGRvIHRoaXMgd291bGQgYmUgdG8gbWFrZSBIVE1M
SW1hZ2VFbGVtZW50IGRlcml2ZSBmcm9tCisgICAgLy8gQWN0aXZlRE9NT2JqZWN0IGFuZCB1c2Ug
aXRzIGludGVyZmFjZSB0byBrZWVwIGl0cyB3cmFwcGVyIGFsaXZlLiBUaGVuIHdlIHdvdWxkCisg
ICAgLy8gcmVtb3ZlIHRoaXMgY29kZSBhbmQgdGhlIHNwZWNpYWwgY2FzZSBpbiBpc09ic2VydmFi
bGVUaHJvdWdoRE9NLgogICAgIHRvVjgoZG9jdW1lbnQpOwogCi0gICAgUmVmUHRyPEhUTUxJbWFn
ZUVsZW1lbnQ+IGltYWdlID0gbmV3IEhUTUxJbWFnZUVsZW1lbnQoSFRNTE5hbWVzOjppbWdUYWcs
IGRvY3VtZW50KTsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsKKyAgICBpbnQqIG9w
dGlvbmFsV2lkdGggPSAwOworICAgIGludCogb3B0aW9uYWxIZWlnaHQgPSAwOwogICAgIGlmIChh
cmdzLkxlbmd0aCgpID4gMCkgewotICAgICAgICBpbWFnZS0+c2V0V2lkdGgodG9JbnQzMihhcmdz
WzBdKSk7Ci0gICAgICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMSkKLSAgICAgICAgICAgIGltYWdl
LT5zZXRIZWlnaHQodG9JbnQzMihhcmdzWzFdKSk7CisgICAgICAgIHdpZHRoID0gdG9JbnQzMihh
cmdzWzBdKTsKKyAgICAgICAgb3B0aW9uYWxXaWR0aCA9ICZ3aWR0aDsKKyAgICB9CisgICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgPiAxKSB7CisgICAgICAgIGhlaWdodCA9IHRvSW50MzIoYXJnc1sxXSk7
CisgICAgICAgIG9wdGlvbmFsSGVpZ2h0ID0gJmhlaWdodDsKICAgICB9CiAKKyAgICBSZWZQdHI8
SFRNTEltYWdlRWxlbWVudD4gaW1hZ2UgPSBIVE1MSW1hZ2VFbGVtZW50OjpjcmVhdGVGb3JKU0Nv
bnN0cnVjdG9yKGRvY3VtZW50LCBvcHRpb25hbFdpZHRoLCBvcHRpb25hbEhlaWdodCk7CiAgICAg
VjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIFY4Q2xhc3NJbmRleDo6
VG9JbnQoVjhDbGFzc0luZGV4OjpJTUFHRSksIGltYWdlLmdldCgpKTsKICAgICBpbWFnZS0+cmVm
KCk7CiAgICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01Ob2RlKGltYWdlLmdldCgp
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGFyZ3MuSG9sZGVyKCkpKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbkVsZW1lbnRDb25z
dHJ1Y3Rvci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25FbGVt
ZW50Q29uc3RydWN0b3IuY3BwCmluZGV4IDMxMTNlYjUuLjFmZjFkMmUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5j
cHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVudENv
bnN0cnVjdG9yLmNwcApAQCAtMTQsNyArMTQsNyBAQAogICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBA
IC01OSwzMiArNTksMjQgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEhUTUxPcHRp
b25FbGVtZW50Q29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXIKICAgICBpZiAoIWRvY3Vt
ZW50KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiT3B0aW9uIGNvbnN0cnVjdG9yIGFzc29j
aWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiLCBWOFByb3h5OjpSZWZlcmVuY2VFcnJvcik7
CiAKLSAgICBSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+IG9wdGlvbiA9IG5ldyBIVE1MT3B0aW9u
RWxlbWVudChIVE1MTmFtZXM6Om9wdGlvblRhZywgZG9jdW1lbnQpOworICAgIFN0cmluZyBkYXRh
OworICAgIFN0cmluZyB2YWx1ZTsKKyAgICBib29sIGRlZmF1bHRTZWxlY3RlZCA9IGZhbHNlOwor
ICAgIGJvb2wgc2VsZWN0ZWQgPSBmYWxzZTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDAgJiYg
IWFyZ3NbMF0tPklzVW5kZWZpbmVkKCkpCisgICAgICAgIGRhdGEgPSB0b1dlYkNvcmVTdHJpbmco
YXJnc1swXSk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAxICYmICFhcmdzWzFdLT5Jc1VuZGVm
aW5lZCgpKQorICAgICAgICB2YWx1ZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzFdKTsKKyAgICBp
ZiAoYXJncy5MZW5ndGgoKSA+IDIpCisgICAgICAgIGRlZmF1bHRTZWxlY3RlZCA9IGFyZ3NbMl0t
PkJvb2xlYW5WYWx1ZSgpOworICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMykKKyAgICAgICAgc2Vs
ZWN0ZWQgPSBhcmdzWzNdLT5Cb29sZWFuVmFsdWUoKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIFJlZlB0cjxUZXh0PiB0ZXh0ID0gZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKCIi
KTsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDApIHsKLSAgICAgICAgaWYgKCFhcmdzWzBdLT5J
c1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICB0ZXh0LT5zZXREYXRhKHRvV2ViQ29yZVN0cmlu
ZyhhcmdzWzBdKSwgZWMpOwotICAgICAgICAgICAgaWYgKGVjKQotICAgICAgICAgICAgICAgIHRo
cm93RXJyb3IoZWMpOwotICAgICAgICB9Ci0KLSAgICAgICAgb3B0aW9uLT5hcHBlbmRDaGlsZCh0
ZXh0LnJlbGVhc2UoKSwgZWMpOwotICAgICAgICBpZiAoZWMpCi0gICAgICAgICAgICB0aHJvd0Vy
cm9yKGVjKTsKLQotICAgICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAg
IGlmICghYXJnc1sxXS0+SXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBvcHRpb24tPnNl
dFZhbHVlKHRvV2ViQ29yZVN0cmluZyhhcmdzWzFdKSk7Ci0KLSAgICAgICAgICAgIGlmIChhcmdz
Lkxlbmd0aCgpID4gMikgewotICAgICAgICAgICAgICAgIG9wdGlvbi0+c2V0RGVmYXVsdFNlbGVj
dGVkKGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJncy5M
ZW5ndGgoKSA+IDMpCi0gICAgICAgICAgICAgICAgICAgIG9wdGlvbi0+c2V0U2VsZWN0ZWQoYXJn
c1szXS0+Qm9vbGVhblZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQor
ICAgIFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4gb3B0aW9uID0gSFRNTE9wdGlvbkVsZW1lbnQ6
OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoZG9jdW1lbnQsIGRhdGEsIHZhbHVlLCBkZWZhdWx0U2Vs
ZWN0ZWQsIHNlbGVjdGVkLCBlYyk7CisKKyAgICBpZiAoZWMpCisgICAgICAgIHRocm93RXJyb3Io
ZWMpOwogCiAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIFY4
Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpPUFRJT04pLCBvcHRpb24uZ2V0KCkpOwog
ICAgIG9wdGlvbi0+cmVmKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxl
bWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5jcHAKaW5kZXggNmFkZjll
YS4uMzQ3YjhjNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuY3Bw
CisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmNwcApAQCAtMSw1ICsxLDYgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMCw3ICsyMSw3IEBACiAg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTM0LDExICszNSwy
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
LUhUTUxBdWRpb0VsZW1lbnQ6OkhUTUxBdWRpb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKLSAgICA6IEhUTUxNZWRpYUVsZW1lbnQodGFnTmFtZSwg
ZG9jKQorSFRNTEF1ZGlvRWxlbWVudDo6SFRNTEF1ZGlvRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBIVE1MTWVkaWFFbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGF1ZGlvVGFnKSk7
CiB9CiAKK1Bhc3NSZWZQdHI8SFRNTEF1ZGlvRWxlbWVudD4gSFRNTEF1ZGlvRWxlbWVudDo6Y3Jl
YXRlRm9ySlNDb25zdHJ1Y3RvcihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgc3Jj
KQoreworICAgIFJlZlB0cjxIVE1MQXVkaW9FbGVtZW50PiBhdWRpbyA9IG5ldyBIVE1MQXVkaW9F
bGVtZW50KGF1ZGlvVGFnLCBkb2N1bWVudCk7CisgICAgYXVkaW8tPnNldEF1dG9idWZmZXIodHJ1
ZSk7CisgICAgaWYgKCFzcmMuaXNOdWxsKCkpIHsKKyAgICAgICAgYXVkaW8tPnNldFNyYyhzcmMp
OworICAgICAgICBhdWRpby0+c2NoZWR1bGVMb2FkKCk7CisgICAgfQorICAgIHJldHVybiBhdWRp
by5yZWxlYXNlKCk7Cit9CisKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hU
TUxBdWRpb0VsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmgKaW5kZXgg
MGM5Nzc3ZC4uMmYwNmYxYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1l
bnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5oCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjAsNyArMjEsNyBA
QAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIEhUTUxBdWRpb0VsZW1lbnRfaApAQCAt
MjgsMTQgKzI5LDE1IEBACiAKICNpZiBFTkFCTEUoVklERU8pCiAKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBIVE1MQXVkaW9FbGVtZW50IDogcHVibGljIEhUTUxNZWRpYUVsZW1lbnQgewog
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxBdWRpb0VsZW1lbnQ+IGNyZWF0ZUZv
ckpTQ29uc3RydWN0b3IoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIHNyYyk7CiAgICAgSFRNTEF1
ZGlvRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLQogcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIGJvb2wgaXNWaWRlbygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTElt
YWdlRWxlbWVudC5jcHAKaW5kZXggNDU5MjQ2MS4uZDNjZWE5MiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmNwcApAQCAtMSw3ICsxLDggQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTU4LDYgKzU5LDE2IEBAIEhU
TUxJbWFnZUVsZW1lbnQ6On5IVE1MSW1hZ2VFbGVtZW50KCkKICAgICAgICAgbV9mb3JtLT5yZW1v
dmVJbWdFbGVtZW50KHRoaXMpOwogfQogCitQYXNzUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IEhU
TUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBpbnQqIG9wdGlvbmFsV2lkdGgsIGNvbnN0IGludCogb3B0aW9uYWxIZWlnaHQpCit7
CisgICAgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IGltYWdlID0gbmV3IEhUTUxJbWFnZUVsZW1l
bnQoaW1nVGFnLCBkb2N1bWVudCk7CisgICAgaWYgKG9wdGlvbmFsV2lkdGgpCisgICAgICAgIGlt
YWdlLT5zZXRXaWR0aCgqb3B0aW9uYWxXaWR0aCk7CisgICAgaWYgKG9wdGlvbmFsSGVpZ2h0ID4g
MCkKKyAgICAgICAgaW1hZ2UtPnNldEhlaWdodCgqb3B0aW9uYWxIZWlnaHQpOworICAgIHJldHVy
biBpbWFnZS5yZWxlYXNlKCk7Cit9CisKIGJvb2wgSFRNTEltYWdlRWxlbWVudDo6bWFwVG9FbnRy
eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJl
c3VsdCkgY29uc3QKIHsKICAgICBpZiAoYXR0ck5hbWUgPT0gd2lkdGhBdHRyIHx8CkBAIC02OCw3
ICs3OSw3IEBAIGJvb2wgSFRNTEltYWdlRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlCiAgICAgICAgIHJlc3VsdCA9IGVVbml2
ZXJzYWw7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoYXR0
ck5hbWUgPT0gYm9yZGVyQXR0ciB8fCBhdHRyTmFtZSA9PSBhbGlnbkF0dHIpIHsKICAgICAgICAg
cmVzdWx0ID0gZVJlcGxhY2VkOyAvLyBTaGFyZWQgd2l0aCBlbWJlZCBhbmQgaWZyYW1lIGVsZW1l
bnRzLgogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNjEsNyArMTcyLDcgQEAgUmVuZGVyT2Jq
ZWN0KiBIVE1MSW1hZ2VFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEs
IFJlbmRlclN0eWxlKgogewogICAgICBpZiAoc3R5bGUtPmNvbnRlbnREYXRhKCkpCiAgICAgICAg
IHJldHVybiBSZW5kZXJPYmplY3Q6OmNyZWF0ZU9iamVjdCh0aGlzLCBzdHlsZSk7Ci0gICAgIAor
CiAgICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJJbWFnZSh0aGlzKTsKIH0KIApAQCAtMTc0
LDcgKzE4NSw3IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6YXR0YWNoKCkKICAgICAgICAgaWYg
KGltYWdlT2JqLT5oYXNJbWFnZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpbWFn
ZU9iai0+c2V0Q2FjaGVkSW1hZ2UobV9pbWFnZUxvYWRlci5pbWFnZSgpKTsKLSAgICAgICAgCisK
ICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBpbWFnZSBhdCBhbGwgYmVjYXVzZSB3ZSBoYXZlIG5v
IHNyYyBhdHRyaWJ1dGUsIHNldAogICAgICAgICAvLyBpbWFnZSBoZWlnaHQgYW5kIHdpZHRoIGZv
ciB0aGUgYWx0IHRleHQgaW5zdGVhZC4KICAgICAgICAgaWYgKCFtX2ltYWdlTG9hZGVyLmltYWdl
KCkgJiYgIWltYWdlT2JqLT5jYWNoZWRJbWFnZSgpKQpAQCAtMjQxLDcgKzI1Miw3IEBAIGludCBI
VE1MSW1hZ2VFbGVtZW50Ojp3aWR0aChib29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykgY29u
c3QKICAgICAgICAgaW50IHdpZHRoID0gZ2V0QXR0cmlidXRlKHdpZHRoQXR0cikudG9JbnQoJm9r
KTsKICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAgcmV0dXJuIHdpZHRoOwotICAgICAgICAK
KwogICAgICAgICAvLyBpZiB0aGUgaW1hZ2UgaXMgYXZhaWxhYmxlLCB1c2UgaXRzIHdpZHRoCiAg
ICAgICAgIGlmIChtX2ltYWdlTG9hZGVyLmltYWdlKCkpIHsKICAgICAgICAgICAgIGZsb2F0IHpv
b21GYWN0b3IgPSBkb2N1bWVudCgpLT5mcmFtZSgpID8gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFn
ZVpvb21GYWN0b3IoKSA6IDEuMGY7CkBAIC0yNjUsNyArMjc2LDcgQEAgaW50IEhUTUxJbWFnZUVs
ZW1lbnQ6OmhlaWdodChib29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykgY29uc3QKICAgICAg
ICAgaW50IGhlaWdodCA9IGdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKS50b0ludCgmb2spOwogICAg
ICAgICBpZiAob2spCiAgICAgICAgICAgICByZXR1cm4gaGVpZ2h0OwotICAgICAgICAKKwogICAg
ICAgICAvLyBpZiB0aGUgaW1hZ2UgaXMgYXZhaWxhYmxlLCB1c2UgaXRzIGhlaWdodAogICAgICAg
ICBpZiAobV9pbWFnZUxvYWRlci5pbWFnZSgpKSB7CiAgICAgICAgICAgICBmbG9hdCB6b29tRmFj
dG9yID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSA/IGRvY3VtZW50KCktPmZyYW1lKCktPnBhZ2Vab29t
RmFjdG9yKCkgOiAxLjBmOwpAQCAtMjkzLDEwICszMDQsMTAgQEAgaW50IEhUTUxJbWFnZUVsZW1l
bnQ6Om5hdHVyYWxIZWlnaHQoKSBjb25zdAogewogICAgIGlmICghbV9pbWFnZUxvYWRlci5pbWFn
ZSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIHJldHVybiBtX2ltYWdlTG9hZGVy
LmltYWdlKCktPmltYWdlU2l6ZSgxLjBmKS5oZWlnaHQoKTsKIH0KLSAgICAKKwogYm9vbCBIVE1M
SW1hZ2VFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGF0dHItPm5hbWUoKSA9PSBzcmNBdHRyCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvSFRNTEltYWdlRWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaApp
bmRleCAxNGU1ZmEzLi5kN2RmMWRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEltYWdl
RWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgKQEAgLTEsNyAr
MSw4IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNCw2ICszNSw4IEBAIGNs
YXNzIEhUTUxGb3JtRWxlbWVudDsKIGNsYXNzIEhUTUxJbWFnZUVsZW1lbnQgOiBwdWJsaWMgSFRN
TEVsZW1lbnQgewogICAgIGZyaWVuZCBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CiBwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4gY3JlYXRlRm9ySlNDb25zdHJ1
Y3RvcihEb2N1bWVudCosIGNvbnN0IGludCogb3B0aW9uYWxXaWR0aCwgY29uc3QgaW50KiBvcHRp
b25hbEhlaWdodCk7CisKICAgICBIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKICAgICB+SFRNTEltYWdlRWxlbWVu
dCgpOwogCkBAIC01Myw3ICs1Niw3IEBAIHB1YmxpYzoKIAogICAgIGludCBuYXR1cmFsV2lkdGgo
KSBjb25zdDsKICAgICBpbnQgbmF0dXJhbEhlaWdodCgpIGNvbnN0OwotICAgIAorCiAgICAgYm9v
bCBpc1NlcnZlck1hcCgpIGNvbnN0IHsgcmV0dXJuIGlzbWFwICYmIHVzZW1hcC5pc0VtcHR5KCk7
IH0KIAogICAgIFN0cmluZyBhbHRUZXh0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50
LmNwcAppbmRleCA4NTk4ZTg3Li5iMzNmNjI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRN
TE9wdGlvbkVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5j
cHAKQEAgLTIsOCArMiw5IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJA
a2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55
cG9wLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDEsMTMgKzQy
LDMzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAotSFRNTE9wdGlvbkVsZW1lbnQ6OkhUTUxPcHRpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZikKLSAgICA6IEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQodGFnTmFtZSwgZG9jLCBmKQorSFRNTE9wdGlvbkVsZW1lbnQ6
OkhUTUxPcHRpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQorICAgIDogSFRNTEZvcm1Db250cm9s
RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgZm9ybSkKICAgICAsIG1fc3R5bGUoMCkKIHsKICAg
ICBBU1NFUlQoaGFzVGFnTmFtZShvcHRpb25UYWcpKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MT3B0
aW9uRWxlbWVudD4gSFRNTE9wdGlvbkVsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgdmFsdWUs
CisgICAgICAgIGJvb2wgZGVmYXVsdFNlbGVjdGVkLCBib29sIHNlbGVjdGVkLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+IGVsZW1lbnQgPSBuZXcg
SFRNTE9wdGlvbkVsZW1lbnQob3B0aW9uVGFnLCBkb2N1bWVudCk7CisKKyAgICBSZWZQdHI8VGV4
dD4gdGV4dCA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCwgZGF0YS5pc051bGwoKSA/ICIiIDogZGF0
YSk7CisKKyAgICBlYyA9IDA7CisgICAgZWxlbWVudC0+YXBwZW5kQ2hpbGQodGV4dC5yZWxlYXNl
KCksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCF2YWx1
ZS5pc051bGwoKSkKKyAgICAgICAgZWxlbWVudC0+c2V0VmFsdWUodmFsdWUpOworICAgIGVsZW1l
bnQtPnNldERlZmF1bHRTZWxlY3RlZChkZWZhdWx0U2VsZWN0ZWQpOworICAgIGVsZW1lbnQtPnNl
dFNlbGVjdGVkKHNlbGVjdGVkKTsKKworICAgIHJldHVybiBlbGVtZW50LnJlbGVhc2UoKTsKK30K
KwogYm9vbCBIVE1MT3B0aW9uRWxlbWVudDo6Y2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQp
CiB7CiAgICAgcmV0dXJuIG5ld0NoaWxkLT5pc1RleHROb2RlKCkgfHwgbmV3Q2hpbGQtPmhhc1Rh
Z05hbWUoc2NyaXB0VGFnKTsKQEAgLTE3NCw3ICsxOTUsNyBAQCBIVE1MU2VsZWN0RWxlbWVudCog
SFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyU2VsZWN0RWxlbWVudCgpIGNvbnN0CiAKICAgICBpZiAo
IXNlbGVjdCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCisKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihzZWxlY3QpOwogfQogCkBAIC0yMDMsOSArMjI0LDkgQEAg
dm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0UmVuZGVyU3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gbmV3U3R5bGUpCiAgICAgbV9zdHlsZSA9IG5ld1N0eWxlOwogfQogCi1SZW5kZXJTdHls
ZSogSFRNTE9wdGlvbkVsZW1lbnQ6Om5vblJlbmRlcmVyUmVuZGVyU3R5bGUoKSBjb25zdCAKLXsg
Ci0gICAgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IAorUmVuZGVyU3R5bGUqIEhUTUxPcHRpb25FbGVt
ZW50Ojpub25SZW5kZXJlclJlbmRlclN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHls
ZS5nZXQoKTsKIH0KIAogU3RyaW5nIEhUTUxPcHRpb25FbGVtZW50Ojp0ZXh0SW5kZW50ZWRUb1Jl
c3BlY3RHcm91cExhYmVsKCkgY29uc3QKQEAgLTIxNCw4ICsyMzUsOCBAQCBTdHJpbmcgSFRNTE9w
dGlvbkVsZW1lbnQ6OnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKSBjb25zdAogfQog
CiBib29sIEhUTUxPcHRpb25FbGVtZW50OjpkaXNhYmxlZCgpIGNvbnN0Ci17IAotICAgIHJldHVy
biBvd25FbGVtZW50RGlzYWJsZWQoKSB8fCAocGFyZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqPihwYXJlbnROb2RlKCkpLT5kaXNhYmxlZCgpKTsgCit7Cisg
ICAgcmV0dXJuIG93bkVsZW1lbnREaXNhYmxlZCgpIHx8IChwYXJlbnROb2RlKCkgJiYgc3RhdGlj
X2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KHBhcmVudE5vZGUoKSktPmRpc2FibGVkKCkp
OwogfQogCiB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVl
cCkKQEAgLTIyNyw3ICsyNDgsNyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjppbnNlcnRlZElu
dG9UcmVlKGJvb2wgZGVlcCkKICAgICAgICAgICAgIHNlbGVjdC0+c2V0U2VsZWN0ZWRJbmRleChp
bmRleCgpLCBmYWxzZSk7CiAgICAgICAgIHNlbGVjdC0+c2Nyb2xsVG9TZWxlY3Rpb24oKTsKICAg
ICB9Ci0gICAgCisKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjppbnNlcnRlZEludG9UcmVl
KGRlZXApOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQu
aCBiL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCmluZGV4IDdiZTllOWEuLjQyNTVm
MjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCisrKyBiL1dl
YkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCkBAIC0zLDYgKzMsNyBAQAogICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMzksNiArNDAsOSBAQCBjbGFzcyBIVE1MT3B0aW9uRWxlbWVudCA6IHB1YmxpYyBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50LCBwdWJsaWMgT3B0aW9uRWxlbWVudCB7CiBwdWJsaWM6CiAg
ICAgSFRNTE9wdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRN
TEZvcm1FbGVtZW50KiA9IDApOwogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTE9wdGlvbkVs
ZW1lbnQ+IGNyZWF0ZUZvckpTQ29uc3RydWN0b3IoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIGRh
dGEsIGNvbnN0IFN0cmluZyYgdmFsdWUsCisgICAgICAgYm9vbCBkZWZhdWx0U2VsZWN0ZWQsIGJv
b2wgc2VsZWN0ZWQsIEV4Y2VwdGlvbkNvZGUmKTsKKwogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1
cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9
CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAyOyB9CiAgICAg
dmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKTsKQEAgLTQ4LDcgKzUy
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZv
aWQgZGV0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFJlbmRlclN0eWxlKFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+KTsKLSAgICAKKwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBm
b3JtQ29udHJvbFR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgU3RyaW5nIHRleHQoKSBjb25z
dDsKQEAgLTc4LDEwICs4MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIG93bkVsZW1lbnREaXNh
YmxlZCgpIGNvbnN0IHsgcmV0dXJuIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVkKCk7
IH0KICAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25zdDsKLSAgICAKKwogICAgIHZpcnR1
YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NL
ZXlBY3Rpb24oYm9vbCk7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBSZW5kZXJTdHls
ZSogbm9uUmVuZGVyZXJSZW5kZXJTdHlsZSgpIGNvbnN0OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>