<?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>102655</bug_id>
          
          <creation_ts>2012-11-19 00:45:27 -0800</creation_ts>
          <short_desc>REGRESSION (r129670): SVG animation examples no longer working</short_desc>
          <delta_ts>2015-04-27 15:14:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dominic Mazzoni">dmazzoni</reporter>
          <assigned_to name="Philip Rogers">pdr</assigned_to>
          <cc>d-r</cc>
    
    <cc>eric</cc>
    
    <cc>fmalita</cc>
    
    <cc>pdr</cc>
    
    <cc>schenney</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>770432</commentid>
    <comment_count>0</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-11-19 00:45:27 -0800</bug_when>
    <thetext>It appears that after r129670 (https://bugs.webkit.org/show_bug.cgi?id=96697), the following two SVG examples no longer animate (tested in Chromium):

http://www.kelvinlawrence.net/svg/animate-lines.html
http://www.kelvinlawrence.net/svg/animate-lines2.html

I only bisected to the range 129568 ... 129708, so my apologies if it was a different revision within that range that broke these examples, but this one seems the most likely to me. The example used to work fine, and it still works fine in Firefox.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771555</commentid>
    <comment_count>1</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-11-19 23:07:42 -0800</bug_when>
    <thetext>Confirmed. Thank you for taking the time to report this and file a nice repro.

The issue is this works:
  &lt;rect x1=&quot;100&quot; y=&quot;100&quot; width=&quot;100&quot; height=&quot;100&quot; id=&quot;rect&quot; fill=&quot;green&quot; /&gt;
  &lt;animate attributeName=&quot;x&quot; xlink:href=&quot;#rect&quot; dur=&quot;5s&quot; from=&quot;200&quot; to=&quot;400&quot; fill=&quot;freeze&quot;/&gt;
but this does not:
  &lt;animate attributeName=&quot;x&quot; xlink:href=&quot;#rect&quot; dur=&quot;5s&quot; from=&quot;200&quot; to=&quot;400&quot; fill=&quot;freeze&quot;/&gt;
  &lt;rect x1=&quot;100&quot; y=&quot;100&quot; width=&quot;100&quot; height=&quot;100&quot; id=&quot;rect&quot; fill=&quot;green&quot; /&gt;

If you need a temporary workaround, moving the defs below the animating elements will fix things.


It looks like https://bugs.webkit.org/show_bug.cgi?id=96697 regressed this case; I&apos;m surprised we do not have tests covering this. The fix is to hook animate elements into our resource tracking which, thankfully, we just finished the infrastructure for: http://trac.webkit.org/changeset/132847.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775623</commentid>
    <comment_count>2</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-11-26 10:28:20 -0800</bug_when>
    <thetext>Just a quick update, I was offline last week (holiday) but I&apos;m still hacking away at this and hope to have a patch up by EOD.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777332</commentid>
    <comment_count>3</comment_count>
      <attachid>176362</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-11-27 16:17:34 -0800</bug_when>
    <thetext>Created attachment 176362
Preview patch - not yet ready for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777582</commentid>
    <comment_count>4</comment_count>
      <attachid>176414</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-11-27 23:54:42 -0800</bug_when>
    <thetext>Created attachment 176414
Preview patch 2 - almost ready for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778361</commentid>
    <comment_count>5</comment_count>
      <attachid>176582</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-11-28 14:43:36 -0800</bug_when>
    <thetext>Created attachment 176582
Remove redundant SVG animation target tracking framework.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779092</commentid>
    <comment_count>6</comment_count>
      <attachid>176582</attachid>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2012-11-29 09:27:15 -0800</bug_when>
    <thetext>Comment on attachment 176582
Remove redundant SVG animation target tracking framework.

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

I&apos;m not familiar with animations, but this sounds like a neat idea!

&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:174
&gt; +        if (hasPendingResources())
&gt; +            return;

This looks problematic: if href is updated while still pending the initial resource, it seems this would prevent us from registering the new id. You should also add a test to cover this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780238</commentid>
    <comment_count>7</comment_count>
      <attachid>176582</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-30 10:59:45 -0800</bug_when>
    <thetext>Comment on attachment 176582
Remove redundant SVG animation target tracking framework.

Seems reasonable.  But Antti and Niko are going to have much more context in this code than I.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780284</commentid>
    <comment_count>8</comment_count>
      <attachid>176582</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-11-30 12:06:05 -0800</bug_when>
    <thetext>Comment on attachment 176582
Remove redundant SVG animation target tracking framework.

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

Nice patch, I look forward to when its landed.

&gt; Source/WebCore/svg/SVGAnimateElement.cpp:415
&gt; +    // FIXME: unify with setTargetElement.

I just wanted to propose this. Shouldn&apos;t be too hard, I&apos;d include this here.

&gt;&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:174
&gt;&gt; +            return;
&gt; 
&gt; This looks problematic: if href is updated while still pending the initial resource, it seems this would prevent us from registering the new id. You should also add a test to cover this case.

Good catch. For the generic case (not for animation elements) SVGStyledElement::buildPendingResourcesIfNeeded() takes care of that IIRC (handling removal). Usually it&apos;s handled like this:
void SVGStyledElement::svgAttributeChanged(const QualifiedName&amp; attrName)
{
...
    if (isIdAttributeName(attrName)) {
        RenderObject* object = renderer();
        // Notify resources about id changes, this is important as we cache resources by id in SVGDocumentExtensions
        if (object &amp;&amp; object-&gt;isSVGResourceContainer())
            object-&gt;toRenderSVGResourceContainer()-&gt;idChanged();
        if (inDocument())
            buildPendingResourcesIfNeeded();
        SVGElementInstance::invalidateAllInstancesOfElement(this);
        return;
    }
}

If an animation element references an element with the id #foobar (during buildPendingResources in your patch) which is not available, it&apos;s registered as pending resource.
Now the expectation is that buildPendingResourceIfNeeded() is called via the SVGStyledElement code path I quoted above, as soon as &quot;foobar&quot; appears. &quot;foobar&quot; has the responsibility
of notifying the other resources depending on it, that it&apos;s now available. This deregisteres foobar as pending.

If the referenced ID changes from #foobar, to #blub, before #foobar came available, then Florin is right nothing would happen, even if #blub exists.
SVGFEImageElement for instance if the xlink:href changes, just calls buildPendingResources()  (I think just like Philip did), but it fails to deregister the old ID as pending.

I fear there&apos;s still a flaw in the current design that we should resolve before converting animations to use it as well. Agreed?

We basically need to check all callers of addPendingResources() within svg/ (rendering/ is not affected, eg. clip-path=&quot;#blub&quot; references are handled differently via SVGResources).
It&apos;s basically SVGMPathElement, TextPathElement, FEImageElement, .. A grep should help :-)

What do you think?

&gt; Source/WebCore/svg/animation/SVGSMILElement.h:-36
&gt; -enum ResolveTarget { DoNotResolveNewTarget, ResolveNewTarget };

Great this hack is gone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780682</commentid>
    <comment_count>9</comment_count>
      <attachid>177095</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-12-01 00:25:40 -0800</bug_when>
    <thetext>Created attachment 177095
Unify SVG&apos;s animation and target tracking systems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780683</commentid>
    <comment_count>10</comment_count>
      <attachid>177096</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-12-01 00:26:02 -0800</bug_when>
    <thetext>Created attachment 177096
Unify SVG&apos;s animation and target tracking systems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780687</commentid>
    <comment_count>11</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-12-01 00:43:56 -0800</bug_when>
    <thetext>Florin and Niko&apos;s catch was a great one: we can leave extra pending resource entries around. I investigated fixing this in this bug but I think it&apos;s out of scope. The issue comes down to needing to track {Element*, AttributeName} -&gt; id instead of just Element* -&gt; id. I&apos;ve created a proposal for fixing this fundamental flaw but I&apos;d like to track it separately in https://bugs.webkit.org/show_bug.cgi?id=103811.

The extra pending resource entries will only occur in fairly non-standard scenarios and don&apos;t have security implications. I think this patch is valuable without that fundamental fix. Do you guys agree or should 103811 block this?

(In reply to comment #8)
&gt; (From update of attachment 176582 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=176582&amp;action=review
&gt; 
&gt; Nice patch, I look forward to when its landed.
&gt; 
&gt; &gt; Source/WebCore/svg/SVGAnimateElement.cpp:415
&gt; &gt; +    // FIXME: unify with setTargetElement.
&gt; 
&gt; I just wanted to propose this. Shouldn&apos;t be too hard, I&apos;d include this here.

Done.

&gt; 
&gt; &gt;&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:174
&gt; &gt;&gt; +            return;
&gt; &gt; 
&gt; &gt; This looks problematic: if href is updated while still pending the initial resource, it seems this would prevent us from registering the new id. You should also add a test to cover this case.
&gt; 
&gt; Good catch. For the generic case (not for animation elements) SVGStyledElement::buildPendingResourcesIfNeeded() takes care of that IIRC (handling removal). Usually it&apos;s handled like this:
&gt; void SVGStyledElement::svgAttributeChanged(const QualifiedName&amp; attrName)
&gt; {
&gt; ...
&gt;     if (isIdAttributeName(attrName)) {
&gt;         RenderObject* object = renderer();
&gt;         // Notify resources about id changes, this is important as we cache resources by id in SVGDocumentExtensions
&gt;         if (object &amp;&amp; object-&gt;isSVGResourceContainer())
&gt;             object-&gt;toRenderSVGResourceContainer()-&gt;idChanged();
&gt;         if (inDocument())
&gt;             buildPendingResourcesIfNeeded();
&gt;         SVGElementInstance::invalidateAllInstancesOfElement(this);
&gt;         return;
&gt;     }
&gt; }
&gt; 
&gt; If an animation element references an element with the id #foobar (during buildPendingResources in your patch) which is not available, it&apos;s registered as pending resource.
&gt; Now the expectation is that buildPendingResourceIfNeeded() is called via the SVGStyledElement code path I quoted above, as soon as &quot;foobar&quot; appears. &quot;foobar&quot; has the responsibility
&gt; of notifying the other resources depending on it, that it&apos;s now available. This deregisteres foobar as pending.
&gt; 
&gt; If the referenced ID changes from #foobar, to #blub, before #foobar came available, then Florin is right nothing would happen, even if #blub exists.
&gt; SVGFEImageElement for instance if the xlink:href changes, just calls buildPendingResources()  (I think just like Philip did), but it fails to deregister the old ID as pending.
&gt; 
&gt; I fear there&apos;s still a flaw in the current design that we should resolve before converting animations to use it as well. Agreed?
&gt; 
&gt; We basically need to check all callers of addPendingResources() within svg/ (rendering/ is not affected, eg. clip-path=&quot;#blub&quot; references are handled differently via SVGResources).
&gt; It&apos;s basically SVGMPathElement, TextPathElement, FEImageElement, .. A grep should help :-)
&gt; 
&gt; What do you think?
&gt; 
&gt; &gt; Source/WebCore/svg/animation/SVGSMILElement.h:-36
&gt; &gt; -enum ResolveTarget { DoNotResolveNewTarget, ResolveNewTarget };
&gt; 
&gt; Great this hack is gone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780689</commentid>
    <comment_count>12</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-12-01 00:45:56 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 176582 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=176582&amp;action=review
&gt; 
&gt; I&apos;m not familiar with animations, but this sounds like a neat idea!
&gt; 
&gt; &gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:174
&gt; &gt; +        if (hasPendingResources())
&gt; &gt; +            return;
&gt; 
&gt; This looks problematic: if href is updated while still pending the initial resource, it seems this would prevent us from registering the new id. You should also add a test to cover this case.

Fantastic catch. I&apos;ve fixed the other cases (SVGMPathElement and SVGTextPathElement), fixed the code, and added a test that failed with the previous patch but now passes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784270</commentid>
    <comment_count>13</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-12-05 16:45:54 -0800</bug_when>
    <thetext>Ping for reviews</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784579</commentid>
    <comment_count>14</comment_count>
      <attachid>177096</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-12-05 21:43:31 -0800</bug_when>
    <thetext>Comment on attachment 177096
Unify SVG&apos;s animation and target tracking systems.

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

Is the diff broken, or the tool? I get:

(see the test.)
addPendingResource
addPendingResource
addPendingResource

At the end.

&gt; Source/WebCore/ChangeLog:25
&gt; +        which fixes a bug (see the test.)

s/(see the test.)/(see the test)./ ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785165</commentid>
    <comment_count>15</comment_count>
      <attachid>178064</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-12-06 12:52:16 -0800</bug_when>
    <thetext>Created attachment 178064
Fix egregious Changelog error and rebaseline</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785166</commentid>
    <comment_count>16</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-12-06 12:53:10 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 177096 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=177096&amp;action=review
&gt; 
&gt; Is the diff broken, or the tool? I get:
&gt; 
&gt; (see the test.)
&gt; addPendingResource
&gt; addPendingResource
&gt; addPendingResource
&gt; 
&gt; At the end.

Not sure what&apos;s up here but lets see if the updated patch fixes this.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:25
&gt; &gt; +        which fixes a bug (see the test.)
&gt; 
&gt; s/(see the test.)/(see the test)./ ;)

Fixed! I&apos;m ashamed :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785359</commentid>
    <comment_count>17</comment_count>
      <attachid>178064</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-12-06 15:53:34 -0800</bug_when>
    <thetext>Comment on attachment 178064
Fix egregious Changelog error and rebaseline

It looks good to me. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785389</commentid>
    <comment_count>18</comment_count>
      <attachid>178064</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-06 16:22:53 -0800</bug_when>
    <thetext>Comment on attachment 178064
Fix egregious Changelog error and rebaseline

Clearing flags on attachment: 178064

Committed r136906: &lt;http://trac.webkit.org/changeset/136906&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785390</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-06 16:22:58 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795383</commentid>
    <comment_count>20</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-12-20 05:35:53 -0800</bug_when>
    <thetext>Again thanks for that great patch, looks much more unified now :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089224</commentid>
    <comment_count>21</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-04-27 15:14:13 -0700</bug_when>
    <thetext>*** Bug 99957 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176362</attachid>
            <date>2012-11-27 16:17:34 -0800</date>
            <delta_ts>2012-11-27 23:54:42 -0800</delta_ts>
            <desc>Preview patch - not yet ready for review</desc>
            <filename>102655.1.patch</filename>
            <type>text/plain</type>
            <size>30743</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNTkzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDEyLTExLTI3ICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHJlZHVuZGFudCBTVkcg
YW5pbWF0aW9uIHRhcmdldCB0cmFja2luZyBmcmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjY1NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBwcmV2aWV3IHBhdGNoIGFuZCBp
cyBub3QgeWV0IHJlYWR5IHRvIHN1Ym1pdC4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMg
b3VyIHJlZHVuZGFudCBTVkcgYW5pbWF0aW9uIHRhcmdldCB0cmFja2luZyBmcmFtZXdvcmsgYW5k
CisgICAgICAgIHJlZmFjdG9ycyBTVkcgYW5pbWF0aW9ucyB0byB1c2UgdGhlIG5vcm1hbCBTVkcg
dGFyZ2V0IHJlc291cmNlIHRyYWNraW5nIGZyYW1ld29yay4KKyAgICAgICAgVGhpcyBmaXhlcyBh
IGJ1ZyAoV0sxMDI2NTUpIHdoZXJlIGFuaW1hdGlvbnMgZGlkIG5vdCBzdXBwb3J0IHBlbmRpbmcg
aWQgcmVmZXJlbmNlcywKKyAgICAgICAgc2ltcGxpZmllcyBvdXIgY29kZSwgYW5kLCBtb3N0IGlt
cG9ydGFudGx5LCByZWR1Y2VzIHRoZSBzdXJmYWNlIGFyZWEgZm9yIHNlY3VyaXR5IGJ1Z3MuCisK
KyAgICAgICAgTmVlZCB0byBhZGQgYSB0ZXN0LiBUT0RPIQorCisgICAgICAgICogc3ZnL1NWR0Fu
aW1hdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50Ojpj
bGVhckFuaW1hdGVkVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6
c2V0VGFyZ2V0RWxlbWVudCk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVFbGVtZW50Lmg6Cisg
ICAgICAgIChTVkdBbmltYXRlRWxlbWVudCk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
OjpjbGVhckFuaW1hdGVkVHlwZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50Lmg6CisgICAgICAgIChTVkdBbmltYXRlTW90aW9uRWxlbWVudCk6CisgICAgICAgICogc3Zn
L1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9u
RWxlbWVudDo6flNWR0FuaW1hdGlvbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpjbGVhclJlc291cmNlUmVmZXJlbmNl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpidWlsZFBlbmRpbmdS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojppc1N1cHBv
cnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1l
bnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50
OjpyZW1vdmVkRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojpz
ZXRBdHRyaWJ1dGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6
OnNldFRhcmdldEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVu
dDo6c2V0QXR0cmlidXRlTmFtZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQu
aDoKKyAgICAgICAgKFNWR0FuaW1hdGlvbkVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdEb2N1
bWVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjp+U1ZHRG9jdW1lbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaDoKKyAgICAgICAgKFNWR0RvY3VtZW50RXh0
ZW5zaW9ucyk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRWxlbWVudDo6flNWR0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVu
dDo6cmVtb3ZlZEZyb20pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6YXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVs
ZW1lbnQpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OlNWR1NNSUxFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Ojp+U1ZHU01JTEVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU01JTEVsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxF
bGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6
OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Ojppc1N1cHBv
cnRlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6c2V0VGFy
Z2V0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6cHJvZ3Jlc3Mp
OgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnRhcmdldEVsZW1lbnQp
OgorICAgICAgICAoU1ZHU01JTEVsZW1lbnQpOgorCiAyMDEyLTExLTI3ICBEZWFuIEphY2tzb24g
IDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIHRyYWNrIGxpc3QgY29udHJvbCBhY3Rp
dmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAkocmV2aXNp
b24gMTM1NzAxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzE2LDE5ICszMTYsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIG5v
dGlmeVRhcmdldEFuZEluc3RhbgogICAgIH0KIH0KIAotdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6
Y2xlYXJBbmltYXRlZFR5cGUoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkKK3ZvaWQgU1ZHQW5p
bWF0ZUVsZW1lbnQ6OmNsZWFyQW5pbWF0ZWRUeXBlKCkKIHsKICAgICBpZiAoIW1fYW5pbWF0ZWRU
eXBlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXRhcmdldEVsZW1lbnQpIHsKKyAgICBp
ZiAoIXRhcmdldEVsZW1lbnQoKSkgewogICAgICAgICBtX2FuaW1hdGVkVHlwZS5jbGVhcigpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzLmlz
RW1wdHkoKSkgewogICAgICAgICAvLyBDU1MgcHJvcGVydGllcyBhbmltYXRpb24gY29kZS1wYXRo
LgotICAgICAgICByZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXRBbmRJbnN0YW5jZXModGFyZ2V0
RWxlbWVudCwgYXR0cmlidXRlTmFtZSgpKTsKKyAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHlGcm9t
VGFyZ2V0QW5kSW5zdGFuY2VzKHRhcmdldEVsZW1lbnQoKSwgYXR0cmlidXRlTmFtZSgpKTsKICAg
ICAgICAgbV9hbmltYXRlZFR5cGUuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTMzNiw3ICszMzYsNyBAQCB2b2lkIFNWR0FuaW1hdGVFbGVtZW50OjpjbGVhckFuaW1hdGVkVHlw
CiAgICAgLy8gU1ZHIERPTSBhbmltVmFsIGFuaW1hdGlvbiBjb2RlLXBhdGguCiAgICAgaWYgKG1f
YW5pbWF0b3IpIHsKICAgICAgICAgbV9hbmltYXRvci0+c3RvcEFuaW1WYWxBbmltYXRpb24obV9h
bmltYXRlZFByb3BlcnRpZXMpOwotICAgICAgICBub3RpZnlUYXJnZXRBbmRJbnN0YW5jZXNBYm91
dEFuaW1WYWxDaGFuZ2UodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSgpKTsKKyAgICAgICAg
bm90aWZ5VGFyZ2V0QW5kSW5zdGFuY2VzQWJvdXRBbmltVmFsQ2hhbmdlKHRhcmdldEVsZW1lbnQo
KSwgYXR0cmlidXRlTmFtZSgpKTsKICAgICB9CiAKICAgICBtX2FuaW1hdGVkUHJvcGVydGllcy5j
bGVhcigpOwpAQCAtMzk2LDE2ICszOTYsMTYgQEAgZmxvYXQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNh
bGN1bGF0ZURpc3RhbgogICAgIHJldHVybiBlbnN1cmVBbmltYXRvcigpLT5jYWxjdWxhdGVEaXN0
YW5jZShmcm9tU3RyaW5nLCB0b1N0cmluZyk7CiB9CiAKLXZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6
OnRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQqIGN1cnJlbnRUYXJnZXQsIFNWR0Vs
ZW1lbnQqIG5ld1RhcmdldCkKK3ZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OnNldFRhcmdldEVsZW1l
bnQoU1ZHRWxlbWVudCogdGFyZ2V0KQogewotICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRhcmdl
dEVsZW1lbnRXaWxsQ2hhbmdlKGN1cnJlbnRUYXJnZXQsIG5ld1RhcmdldCk7CisgICAgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0RWxlbWVudCh0YXJnZXQpOwogCiAgICAgQVNTRVJUKCFt
X2FuaW1hdGVkVHlwZSk7CiAgICAgbV9mcm9tVHlwZS5jbGVhcigpOwogICAgIG1fdG9UeXBlLmNs
ZWFyKCk7CiAgICAgbV90b0F0RW5kT2ZEdXJhdGlvblR5cGUuY2xlYXIoKTsKICAgICBtX2FuaW1h
dG9yLmNsZWFyKCk7Ci0gICAgbV9hbmltYXRlZFByb3BlcnR5VHlwZSA9IG5ld1RhcmdldCA/IGRl
dGVybWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKG5ld1RhcmdldCkgOiBBbmltYXRlZFN0cmluZzsK
KyAgICBtX2FuaW1hdGVkUHJvcGVydHlUeXBlID0gdGFyZ2V0ID8gZGV0ZXJtaW5lQW5pbWF0ZWRQ
cm9wZXJ0eVR5cGUodGFyZ2V0KSA6IEFuaW1hdGVkU3RyaW5nOwogfQogCiBTVkdBbmltYXRlZFR5
cGVBbmltYXRvciogU1ZHQW5pbWF0ZUVsZW1lbnQ6OmVuc3VyZUFuaW1hdG9yKCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oCShyZXZpc2lvbiAxMzU3MDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsNyArNDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgU1ZHQW5pbWF0ZUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRBbmltYXRl
ZFR5cGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbmltYXRlZFR5cGUoU1ZHRWxlbWVudCog
dGFyZ2V0RWxlbWVudCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQW5pbWF0ZWRUeXBlKCk7CiAg
ICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZVRvQXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3Ry
aW5nJiB0b0F0RW5kT2ZEdXJhdGlvblN0cmluZyk7CiAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0
ZUZyb21BbmRUb1ZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYg
dG9TdHJpbmcpOwogICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29u
c3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKTsKQEAgLTUzLDcg
KzUzLDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgZmxvYXQgY2FsY3VsYXRlRGlzdGFuY2Uo
Y29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKTsKICAgICB2
aXJ0dWFsIGJvb2wgaXNBZGRpdGl2ZSgpIGNvbnN0IE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2
b2lkIHRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQqIGN1cnJlbnRUYXJnZXQsIFNW
R0VsZW1lbnQqIG9sZFRhcmdldCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFRhcmdl
dEVsZW1lbnQoU1ZHRWxlbWVudCopIE9WRVJSSURFOwogCiAgICAgQW5pbWF0ZWRQcm9wZXJ0eVR5
cGUgbV9hbmltYXRlZFByb3BlcnR5VHlwZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzU3MDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODksMTEgKzE4OSwxMSBAQCB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpyZXNl
dEFuaW1hCiAgICAgICAgIHRyYW5zZm9ybS0+bWFrZUlkZW50aXR5KCk7CiB9CiAKLXZvaWQgU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNsZWFyQW5pbWF0ZWRUeXBlKFNWR0VsZW1lbnQqIHRhcmdl
dEVsZW1lbnQpCit2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjbGVhckFuaW1hdGVkVHlw
ZSgpCiB7Ci0gICAgaWYgKCF0YXJnZXRFbGVtZW50KQorICAgIGlmICghdGFyZ2V0RWxlbWVudCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKEFmZmluZVRyYW5zZm9ybSogdHJhbnNmb3JtID0g
dGFyZ2V0RWxlbWVudC0+c3VwcGxlbWVudGFsVHJhbnNmb3JtKCkpCisgICAgaWYgKEFmZmluZVRy
YW5zZm9ybSogdHJhbnNmb3JtID0gdGFyZ2V0RWxlbWVudCgpLT5zdXBwbGVtZW50YWxUcmFuc2Zv
cm0oKSkKICAgICAgICAgdHJhbnNmb3JtLT5tYWtlSWRlbnRpdHkoKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDEz
NTcwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcm
KSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgdm9pZCByZXNldEFuaW1hdGVkVHlwZSgpOwotICAg
IHZpcnR1YWwgdm9pZCBjbGVhckFuaW1hdGVkVHlwZShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbmltYXRlZFR5cGUoKTsKICAgICB2aXJ0dWFsIGJv
b2wgY2FsY3VsYXRlVG9BdEVuZE9mRHVyYXRpb25WYWx1ZShjb25zdCBTdHJpbmcmIHRvQXRFbmRP
ZkR1cmF0aW9uU3RyaW5nKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFs
dWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZyk7CiAg
ICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhjb25zdCBTdHJpbmcmIGZy
b21TdHJpbmcsIGNvbnN0IFN0cmluZyYgYnlTdHJpbmcpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMTM1NzAxKQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxMCArMzUsMTQgQEAKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTVkdBbmltYXRlRWxlbWVudC5oIgorI2luY2x1ZGUg
IlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5o
IgorI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNW
R1N0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKKyNpbmNsdWRl
ICJYTGlua05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNjQsNiArNjgsNTAgQEAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6U1ZHQW5p
bWF0aW9uRWxlbWVudAogICAgIHJlZ2lzdGVyQW5pbWF0ZWRQcm9wZXJ0aWVzRm9yU1ZHQW5pbWF0
aW9uRWxlbWVudCgpOwogfQogCitTVkdBbmltYXRpb25FbGVtZW50Ojp+U1ZHQW5pbWF0aW9uRWxl
bWVudCgpCit7CisgICAgY2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKTsKK30KKwordm9pZCBTVkdB
bmltYXRpb25FbGVtZW50OjpjbGVhclJlc291cmNlUmVmZXJlbmNlcygpCit7CisgICAgQVNTRVJU
KGRvY3VtZW50KCkpOworICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVt
b3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQodGhpcyk7CisgICAgYW5pbWF0aW9uQXR0
cmlidXRlQ2hhbmdlZCgpOworfQorCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmJ1aWxkUGVu
ZGluZ1Jlc291cmNlKCkKK3sKKyAgICBjbGVhclJlc291cmNlUmVmZXJlbmNlcygpOworICAgIGlm
ICghaW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgaWQ7CisgICAg
U3RyaW5nIGhyZWYgPSBnZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOworICAgIEVs
ZW1lbnQqIHRhcmdldDsKKyAgICBpZiAoaHJlZi5pc0VtcHR5KCkpCisgICAgICAgIHRhcmdldCA9
IHBhcmVudE5vZGUoKSAmJiBwYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSA/IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihwYXJlbnROb2RlKCkpIDogMDsKKyAgICBlbHNlCisgICAgICAgIHRhcmdl
dCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZiwgZG9j
dW1lbnQoKSwgJmlkKTsKKyAgICBTVkdFbGVtZW50KiBzdmdUYXJnZXQgPSB0YXJnZXQgJiYgdGFy
Z2V0LT5pc1NWR0VsZW1lbnQoKSA/IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPih0YXJnZXQpIDog
MDsKKworICAgIHNldFRhcmdldEVsZW1lbnQoc3ZnVGFyZ2V0KTsKKworICAgIGlmICghc3ZnVGFy
Z2V0KSB7CisgICAgICAgIGlmIChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGRvY3Vt
ZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+YWRkUGVuZGluZ1Jlc291cmNlKGlkLCB0aGlz
KTsKKyAgICAgICAgICAgIEFTU0VSVChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gUmVnaXN0ZXIgdXMgd2l0aCB0aGUgdGFyZ2V0IGlu
IHRoZSBkZXBlbmRlbmNpZXMgbWFwLiBBbnkgY2hhbmdlIG9mIGhyZWZFbGVtZW50CisgICAgICAg
IC8vIHRoYXQgbGVhZHMgdG8gcmVsYXlvdXQvcmVwYWludGluZyBub3cgaW5mb3JtcyB1cywgc28g
d2UgY2FuIHJlYWN0IHRvIGl0LgorICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNp
b25zKCktPmFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldCh0aGlzLCBzdmdUYXJnZXQpOworICAg
IH0KK30KKwogc3RhdGljIHZvaWQgcGFyc2VLZXlUaW1lcyhjb25zdCBTdHJpbmcmIHBhcnNlLCBW
ZWN0b3I8ZmxvYXQ+JiByZXN1bHQsIGJvb2wgdmVyaWZ5T3JkZXIpCiB7CiAgICAgcmVzdWx0LmNs
ZWFyKCk7CkBAIC0xNTUsNiArMjAzLDcgQEAgYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc1N1
cHBvcnRlZEF0dAogICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6ZnJv
bUF0dHIpOwogICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6dG9BdHRy
KTsKICAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmJ5QXR0cik7Cisg
ICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKICAg
ICB9CiAgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnM8UXVhbGlmaWVkTmFt
ZSwgU1ZHQXR0cmlidXRlSGFzaFRyYW5zbGF0b3I+KGF0dHJOYW1lKTsKIH0KQEAgLTIxNiw2ICsy
NjUsOCBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlCiAgICAgICAg
IHJldHVybjsKICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VBdHRy
aWJ1dGUobmFtZSwgdmFsdWUpKQogICAgICAgICByZXR1cm47CisgICAgaWYgKG5hbWUubWF0Y2hl
cyhYTGlua05hbWVzOjpocmVmQXR0cikpCisgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQpAQCAtMjI3LDYgKzI3OCwxMyBAQCB2b2lkIFNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBTVkdF
bGVtZW50SW5zdGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMp
OworCisgICAgaWYgKGF0dHJOYW1lLm1hdGNoZXMoWExpbmtOYW1lczo6aHJlZkF0dHIpKQorICAg
ICAgICBidWlsZFBlbmRpbmdSZXNvdXJjZSgpOworICAgIGVsc2UgaWYgKFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICByZXR1
cm47CisKICAgICBhbmltYXRpb25BdHRyaWJ1dGVDaGFuZ2VkKCk7CiB9CiAKQEAgLTIzNyw2ICsy
OTUsMjEgQEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjphbmltYXRpb25BdHRyaQogICAgIHNl
dEluYWN0aXZlKCk7CiB9CiAKK05vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqIHJvb3RQYXJlbnQp
Cit7CisgICAgU1ZHU01JTEVsZW1lbnQ6Omluc2VydGVkSW50byhyb290UGFyZW50KTsKKyAgICBp
ZiAocm9vdFBhcmVudC0+aW5Eb2N1bWVudCgpKQorICAgICAgICBidWlsZFBlbmRpbmdSZXNvdXJj
ZSgpOworICAgIHJldHVybiBJbnNlcnRpb25Eb25lOworfQorCit2b2lkIFNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqIHJvb3RQYXJlbnQpCit7CisgICAgU1ZH
U01JTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKHJvb3RQYXJlbnQpOworICAgIGlmIChyb290UGFyZW50
LT5pbkRvY3VtZW50KCkpCisgICAgICAgIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7Cit9CisK
IGZsb2F0IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldFN0YXJ0VGltZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoaW50ZXJ2YWxCZWdpbigpLnZhbHVlKCkpOwpA
QCAtMzE5LDcgKzM5Miw3IEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0QXR0cmlidXRl
VHkKICAgICAgICAgbV9hdHRyaWJ1dGVUeXBlID0gQXR0cmlidXRlVHlwZVhNTDsKICAgICBlbHNl
CiAgICAgICAgIG1fYXR0cmlidXRlVHlwZSA9IEF0dHJpYnV0ZVR5cGVBdXRvOwotICAgIGNoZWNr
SW52YWxpZENTU0F0dHJpYnV0ZVR5cGUodGFyZ2V0RWxlbWVudChEb05vdFJlc29sdmVOZXdUYXJn
ZXQpKTsKKyAgICBjaGVja0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKHRhcmdldEVsZW1lbnQoKSk7
CiB9CiAKIFN0cmluZyBTVkdBbmltYXRpb25FbGVtZW50Ojp0b1ZhbHVlKCkgY29uc3QKQEAgLTY3
NywxOCArNzUwLDE2IEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6ZGV0ZXJtaW5lUHJvcGUK
ICAgICAgICAgbV90b1Byb3BlcnR5VmFsdWVUeXBlID0gSW5oZXJpdFZhbHVlOwogfQogCi12b2lk
IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQq
IGN1cnJlbnRUYXJnZXQsIFNWR0VsZW1lbnQqIG5ld1RhcmdldCkKK3ZvaWQgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6c2V0VGFyZ2V0RWxlbWVudChTVkdFbGVtZW50KiB0YXJnZXQpCiB7Ci0gICAgU1ZH
U01JTEVsZW1lbnQ6OnRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKGN1cnJlbnRUYXJnZXQsIG5ld1Rh
cmdldCk7Ci0KLSAgICBjaGVja0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKG5ld1RhcmdldCk7Cisg
ICAgU1ZHU01JTEVsZW1lbnQ6OnNldFRhcmdldEVsZW1lbnQodGFyZ2V0KTsKKyAgICBjaGVja0lu
dmFsaWRDU1NBdHRyaWJ1dGVUeXBlKHRhcmdldCk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0aW9uRWxl
bWVudDo6c2V0QXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1l
KQogewogICAgIFNWR1NNSUxFbGVtZW50OjpzZXRBdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUp
OwotCi0gICAgY2hlY2tJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSh0YXJnZXRFbGVtZW50KERvTm90
UmVzb2x2ZU5ld1RhcmdldCkpOworICAgIGNoZWNrSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUodGFy
Z2V0RWxlbWVudCgpKTsKIH0KIAogdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpjaGVja0ludmFs
aWRDU1NBdHRyaWJ1dGVUeXBlKFNWR0VsZW1lbnQqIHRhcmdldCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMTM1NzAxKQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
MTAgKzI5LDEyIEBACiAjaW5jbHVkZSAiRWxlbWVudFRpbWVDb250cm9sLmgiCiAjaW5jbHVkZSAi
U01JTFRpbWUuaCIKICNpbmNsdWRlICJTVkdBbmltYXRlZEJvb2xlYW4uaCIKKyNpbmNsdWRlICJT
VkdBbmltYXRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQuaCIKICNpbmNsdWRlICJTVkdTTUlMRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1N0cmluZ0xp
c3QuaCIKICNpbmNsdWRlICJTVkdUZXN0cy5oIgorI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5o
IgogI2luY2x1ZGUgIlVuaXRCZXppZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzEs
NiArNzMsOCBAQCBjbGFzcyBTVkdBbmltYXRpb25FbGVtZW50IDogcHVibGljIFNWR1NNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIEVsZW1lbnRUaW1lQ29udHJv
bCB7CiBwdWJsaWM6CisgICAgdmlydHVhbCB+U1ZHQW5pbWF0aW9uRWxlbWVudCgpOworCiAgICAg
Ly8gU1ZHQW5pbWF0aW9uRWxlbWVudAogICAgIGZsb2F0IGdldFN0YXJ0VGltZSgpIGNvbnN0Owog
ICAgIGZsb2F0IGdldEN1cnJlbnRUaW1lKCkgY29uc3Q7CkBAIC04OCw2ICs5Miw3IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzQWNjdW11bGF0ZWQoKSBjb25zdDsKICAgICBBbmltYXRpb25Nb2RlIGFu
aW1hdGlvbk1vZGUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbk1vZGU7IH0KICAgICBDYWxj
TW9kZSBjYWxjTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsY01vZGU7IH0KKyAgICAKIAogICAg
IGVudW0gU2hvdWxkQXBwbHlBbmltYXRpb24gewogICAgICAgICBEb250QXBwbHlBbmltYXRpb24s
CkBAIC0xOTcsNyArMjAyLDcgQEAgcHJvdGVjdGVkOgogICAgIEFuaW1hdGVkUHJvcGVydHlWYWx1
ZVR5cGUgbV9mcm9tUHJvcGVydHlWYWx1ZVR5cGU7CiAgICAgQW5pbWF0ZWRQcm9wZXJ0eVZhbHVl
VHlwZSBtX3RvUHJvcGVydHlWYWx1ZVR5cGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdGFyZ2V0RWxl
bWVudFdpbGxDaGFuZ2UoU1ZHRWxlbWVudCogY3VycmVudFRhcmdldCwgU1ZHRWxlbWVudCogb2xk
VGFyZ2V0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGFyZ2V0RWxlbWVudChTVkdF
bGVtZW50KikgT1ZFUlJJREU7CiAgICAgYm9vbCBoYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1faGFzSW52YWxpZENTU0F0dHJpYnV0ZVR5cGU7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVBbmltYXRpb25Nb2RlKCk7CkBAIC0yMDUsNiArMjEwLDExIEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIHNldENhbGNNb2RlKENhbGNNb2RlIGNhbGNNb2RlKSB7IG1fY2Fs
Y01vZGUgPSBjYWxjTW9kZTsgfQogCiBwcml2YXRlOgorICAgIHZvaWQgYnVpbGRQZW5kaW5nUmVz
b3VyY2UoKTsKKyAgICB2b2lkIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7CisgICAgdmlydHVh
bCBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2Rl
KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUq
KSBPVkVSUklERTsKKwogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25BdHRyaWJ1dGVDaGFuZ2Vk
KCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHNldEF0dHJpYnV0ZU5hbWUoY29uc3QgUXVh
bGlmaWVkTmFtZSYpIE9WRVJSSURFOwogICAgIHZvaWQgc2V0QXR0cmlidXRlVHlwZShjb25zdCBB
dG9taWNTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVu
c2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4
dGVuc2lvbnMuY3BwCShyZXZpc2lvbiAxMzU3MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RG9jdW1lbnRFeHRlbnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNiBAQCBT
VkdEb2N1bWVudEV4dGVuc2lvbnM6OlNWR0RvY3VtZW50RXh0ZW5zCiAKIFNWR0RvY3VtZW50RXh0
ZW5zaW9uczo6flNWR0RvY3VtZW50RXh0ZW5zaW9ucygpCiB7Ci0gICAgZGVsZXRlQWxsVmFsdWVz
KG1fYW5pbWF0ZWRFbGVtZW50cyk7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fcGVuZGluZ1Jlc291
cmNlcyk7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fcGVuZGluZ1Jlc291cmNlc0ZvclJlbW92YWwp
OwogfQpAQCAtMTMzLDU4ICsxMzIsNiBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6ZGlz
cGF0Y2hTVkdMCiAgICAgfQogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkQW5p
bWF0aW9uRWxlbWVudFRvVGFyZ2V0KFNWR1NNSUxFbGVtZW50KiBhbmltYXRpb25FbGVtZW50LCBT
VkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KQotewotICAgIEFTU0VSVCh0YXJnZXRFbGVtZW50KTsK
LSAgICBBU1NFUlQoYW5pbWF0aW9uRWxlbWVudCk7Ci0KLSAgICBpZiAoSGFzaFNldDxTVkdTTUlM
RWxlbWVudCo+KiBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCA9IG1fYW5pbWF0ZWRFbGVtZW50
cy5nZXQodGFyZ2V0RWxlbWVudCkpIHsKLSAgICAgICAgYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJn
ZXQtPmFkZChhbmltYXRpb25FbGVtZW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiogYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBu
ZXcgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+OwotICAgIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFy
Z2V0LT5hZGQoYW5pbWF0aW9uRWxlbWVudCk7Ci0gICAgbV9hbmltYXRlZEVsZW1lbnRzLnNldCh0
YXJnZXRFbGVtZW50LCBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldCk7Ci19Ci0KLXZvaWQgU1ZH
RG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbmltYXRpb25FbGVtZW50RnJvbVRhcmdldChTVkdT
TUlMRWxlbWVudCogYW5pbWF0aW9uRWxlbWVudCwgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkK
LXsKLSAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7Ci0gICAgQVNTRVJUKGFuaW1hdGlvbkVsZW1l
bnQpOwotCi0gICAgSGFzaE1hcDxTVkdFbGVtZW50KiwgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+
KiA+OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0ZWRFbGVtZW50cy5maW5kKHRhcmdldEVsZW1lbnQp
OwotICAgIEFTU0VSVChpdCAhPSBtX2FuaW1hdGVkRWxlbWVudHMuZW5kKCkpOwotICAgIAotICAg
IEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiogYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBp
dC0+dmFsdWU7Ci0gICAgQVNTRVJUKCFhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldC0+aXNFbXB0
eSgpKTsKLQotICAgIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0LT5yZW1vdmUoYW5pbWF0aW9u
RWxlbWVudCk7Ci0gICAgaWYgKGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0LT5pc0VtcHR5KCkp
IHsKLSAgICAgICAgbV9hbmltYXRlZEVsZW1lbnRzLnJlbW92ZShpdCk7Ci0gICAgICAgIGRlbGV0
ZSBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldDsKLSAgICB9Ci19Ci0KLXZvaWQgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjpyZW1vdmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQoU1ZHRWxl
bWVudCogdGFyZ2V0RWxlbWVudCkKLXsKLSAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7Ci0gICAg
SGFzaE1hcDxTVkdFbGVtZW50KiwgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiA+OjppdGVyYXRv
ciBpdCA9IG1fYW5pbWF0ZWRFbGVtZW50cy5maW5kKHRhcmdldEVsZW1lbnQpOwotICAgIGlmIChp
dCA9PSBtX2FuaW1hdGVkRWxlbWVudHMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhh
c2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiogYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBpdC0+
dmFsdWU7Ci0gICAgVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj4gdG9CZVJlc2V0OwotCi0gICAgSGFz
aFNldDxTVkdTTUlMRWxlbWVudCo+OjppdGVyYXRvciBlbmQgPSBhbmltYXRpb25FbGVtZW50c0Zv
clRhcmdldC0+ZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj46Oml0ZXJh
dG9yIGl0ID0gYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgdG9CZVJlc2V0LmFwcGVuZCgqaXQpOwotCi0gICAgVmVjdG9yPFNWR1NN
SUxFbGVtZW50Kj46Oml0ZXJhdG9yIHZlY3RvckVuZCA9IHRvQmVSZXNldC5lbmQoKTsKLSAgICBm
b3IgKFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+OjppdGVyYXRvciB2ZWN0b3JJdCA9IHRvQmVSZXNl
dC5iZWdpbigpOyB2ZWN0b3JJdCAhPSB2ZWN0b3JFbmQ7ICsrdmVjdG9ySXQpCi0gICAgICAgICgq
dmVjdG9ySXQpLT5yZXNldFRhcmdldEVsZW1lbnQoKTsKLX0KLQogLy8gRklYTUU6IENhbGxlcnMg
c2hvdWxkIHByb2JhYmx5IHVzZSBTY3JpcHRDb250cm9sbGVyOjpldmVudEhhbmRsZXJMaW5lTnVt
YmVyKCkKIHN0YXRpYyBpbnQgcGFyc2VyTGluZU51bWJlcihEb2N1bWVudCogZG9jdW1lbnQpCiB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCShyZXZp
c2lvbiAxMzU3MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEwICs1OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHBh
dXNlQW5pbWF0aW9ucygpOwogICAgIHZvaWQgdW5wYXVzZUFuaW1hdGlvbnMoKTsKICAgICB2b2lk
IGRpc3BhdGNoU1ZHTG9hZEV2ZW50VG9PdXRlcm1vc3RTVkdFbGVtZW50cygpOwotICAgIAotICAg
IHZvaWQgYWRkQW5pbWF0aW9uRWxlbWVudFRvVGFyZ2V0KFNWR1NNSUxFbGVtZW50KiwgU1ZHRWxl
bWVudCopOwotICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQoU1ZHU01J
TEVsZW1lbnQqLCBTVkdFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVBbGxBbmltYXRpb25FbGVt
ZW50c0Zyb21UYXJnZXQoU1ZHRWxlbWVudCopOwogCiAgICAgdm9pZCByZXBvcnRXYXJuaW5nKGNv
bnN0IFN0cmluZyYpOwogICAgIHZvaWQgcmVwb3J0RXJyb3IoY29uc3QgU3RyaW5nJik7CkBAIC04
Myw3ICs3OSw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7
IC8vIHdlYWsgcmVmZXJlbmNlCiAgICAgSGFzaFNldDxTVkdTVkdFbGVtZW50Kj4gbV90aW1lQ29u
dGFpbmVyczsgLy8gRm9yIFNWRyAxLjIgc3VwcG9ydCB0aGlzIHdpbGwgbmVlZCB0byBiZSBtYWRl
IG1vcmUgZ2VuZXJhbC4KLSAgICBIYXNoTWFwPFNWR0VsZW1lbnQqLCBIYXNoU2V0PFNWR1NNSUxF
bGVtZW50Kj4qID4gbV9hbmltYXRlZEVsZW1lbnRzOwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAg
ICAgSGFzaFNldDxTVkdGb250RmFjZUVsZW1lbnQqPiBtX3N2Z0ZvbnRGYWNlRWxlbWVudHM7CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNTcwMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODMsNyArODMsNiBAQCBTVkdFbGVtZW50Ojp+U1ZHRWxlbWVudCgpCiAgICAgICAgIHJhcmVEYXRh
TWFwLnJlbW92ZShpdCk7CiAgICAgfQogICAgIEFTU0VSVChkb2N1bWVudCgpKTsKLSAgICBkb2N1
bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFsbEFuaW1hdGlvbkVsZW1lbnRz
RnJvbVRhcmdldCh0aGlzKTsKICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCkt
PnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KHRoaXMpOwogfQogCkBAIC0xODMs
NyArMTgyLDYgQEAgdm9pZCBTVkdFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJObwogICAg
IFN0eWxlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tKHJvb3RQYXJlbnQpOwogCiAgICAgaWYgKHdhc0lu
RG9jdW1lbnQpIHsKLSAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5y
ZW1vdmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQodGhpcyk7CiAgICAgICAgIGRvY3Vt
ZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNG
b3JUYXJnZXQodGhpcyk7CiAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS0+cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKHRoaXMpOwogICAgIH0KQEAgLTU0
NSwxMCArNTQzLDggQEAgdm9pZCBTVkdFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IAog
ICAgIGlmIChpc1N5bmNocm9uaXppbmdTVkdBdHRyaWJ1dGVzKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChpc0lkQXR0cmlidXRlTmFtZShuYW1lKSkgewotICAgICAgICBkb2N1bWVudCgp
LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFsbEFuaW1hdGlvbkVsZW1lbnRzRnJvbVRh
cmdldCh0aGlzKTsKKyAgICBpZiAoaXNJZEF0dHJpYnV0ZU5hbWUobmFtZSkpCiAgICAgICAgIGRv
Y3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5j
ZXNGb3JUYXJnZXQodGhpcyk7Ci0gICAgfQogCiAgICAgLy8gQ2hhbmdlcyB0byB0aGUgc3R5bGUg
YXR0cmlidXRlIGFyZSBwcm9jZXNzZWQgbGF6aWx5IChzZWUgRWxlbWVudDo6Z2V0QXR0cmlidXRl
KCkgYW5kIHJlbGF0ZWQgbWV0aG9kcyksCiAgICAgLy8gc28gd2UgZG9uJ3Qgd2FudCBjaGFuZ2Vz
IHRvIHRoZSBzdHlsZSBhdHRyaWJ1dGUgdG8gcmVzdWx0IGluIGV4dHJhIHdvcmsgaGVyZS4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAx
MzU3MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQwLDE0ICsxNDAsNiBAQCB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6
aW52YWxpZGF0ZUFsbEluCiAgICAgICAgIEFTU0VSVCgoKml0KS0+Y29ycmVzcG9uZGluZ0VsZW1l
bnQoKSA9PSBlbGVtZW50KTsKICAgICAgICAgKCppdCktPnNoYWRvd1RyZWVFbGVtZW50KCktPnNl
dENvcnJlc3BvbmRpbmdFbGVtZW50KDApOwogCi0gICAgICAgIC8vIFRoZSBzaGFkb3cgdHJlZSwg
d2hpY2ggaXMgZXZlbnR1YWxseSBhbmltYXRlZCwgaXMgbXV0YXRlZC4gSW4gb3JkZXIgdG8ga2Vl
cCB0aGUgYW5pbVZhbAotICAgICAgICAvLyBsb2dpYyBjb3JyZWN0LCB3ZSBoYXZlIHRvIHN0b3Ag
dGhlIGFuaW1hdGlvbiwgYW5kIHJlc3RhcnQgaXQgb25jZSB0aGUgc2hhZG93IHRyZWUgaGFzCi0g
ICAgICAgIC8vIHJlY2xvbmVkLiBPdGhlcndpc2Ugd2UgbWlzcyB0byBjYWxsIHN0b3BBbmltVmFs
QW5pbWF0aW9uKCkgb24gdGhlIG9sZCBzaGFkb3cgdHJlZSBlbGVtZW50Ci0gICAgICAgIC8vIHdo
aWNoIGxlYWRzIHRvIGFuIGFzc2VydGlvbiBvbmNlIGdhcmJhZ2UgaXMgY29sbGVjdGVkLCBpZiB0
aGUgYW5pbVZhbCBiaW5kaW5ncyBoYXZlIGJlZW4KLSAgICAgICAgLy8gYWNjZXNzZWQgZnJvbSBK
Uy4gSXQgd291bGQgYWxzbyBhc3NlcnQgb24gdGhlIG5leHQgdXBkYXRlQW5pbWF0aW9ucygpIGNh
bGwgYXMgdGhlIG5ldwotICAgICAgICAvLyBTVkdBbmltYXRlZFByb3BlcnR5IG9iamVjdCBoYXNu
J3QgYmVlbiBpbml0aWFsaXplZCB5ZXQgKHVzaW5nIHN0YXJ0QW5pbVZhbEFuaW1hdGlvbikuCi0g
ICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3Zl
QWxsQW5pbWF0aW9uRWxlbWVudHNGcm9tVGFyZ2V0KGVsZW1lbnQpOwotCiAgICAgICAgIGlmIChT
VkdVc2VFbGVtZW50KiBlbGVtZW50ID0gKCppdCktPmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KCkp
IHsKICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50LT5pbkRvY3VtZW50KCkpOwogICAgICAgICAg
ICAgZWxlbWVudC0+aW52YWxpZGF0ZVNoYWRvd1RyZWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzU3MDEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsMTIgKzM3LDkgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJTTUlMVGltZUNvbnRhaW5lci5oIgotI2lu
Y2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAj
aW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5o
IgotI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIK
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0xMTYsNyArMTEzLDYgQEAgU1ZHU01JTEVs
ZW1lbnQ6OkNvbmRpdGlvbjo6Q29uZGl0aW9uKFR5cAogU1ZHU01JTEVsZW1lbnQ6OlNWR1NNSUxF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAg
OiBTVkdFbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIG1fYXR0cmlidXRlTmFtZShhbnlRTmFt
ZSgpKQotICAgICwgbV90YXJnZXRFbGVtZW50KDApCiAgICAgLCBtX2NvbmRpdGlvbnNDb25uZWN0
ZWQoZmFsc2UpCiAgICAgLCBtX2hhc0VuZEV2ZW50Q29uZGl0aW9ucyhmYWxzZSkKICAgICAsIG1f
aXNXYWl0aW5nRm9yRmlyc3RJbnRlcnZhbCh0cnVlKQpAQCAtMTMzLDYgKzEyOSw3IEBAIFNWR1NN
SUxFbGVtZW50OjpTVkdTTUlMRWxlbWVudChjb25zdCBRdWEKICAgICAsIG1fY2FjaGVkUmVwZWF0
Q291bnQoaW52YWxpZENhY2hlZFRpbWUpCiAgICAgLCBtX2NhY2hlZE1pbihpbnZhbGlkQ2FjaGVk
VGltZSkKICAgICAsIG1fY2FjaGVkTWF4KGludmFsaWRDYWNoZWRUaW1lKQorICAgICwgbV90YXJn
ZXRFbGVtZW50KDApCiB7CiAgICAgcmVzb2x2ZUZpcnN0SW50ZXJ2YWwoKTsKIH0KQEAgLTE0Miw4
ICsxMzksNiBAQCBTVkdTTUlMRWxlbWVudDo6flNWR1NNSUxFbGVtZW50KCkKICAgICBkaXNjb25u
ZWN0Q29uZGl0aW9ucygpOwogICAgIGlmIChtX3RpbWVDb250YWluZXIgJiYgbV90YXJnZXRFbGVt
ZW50ICYmIGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpKQogICAgICAgICBtX3RpbWVDb250YWluZXIt
PnVuc2NoZWR1bGUodGhpcywgbV90YXJnZXRFbGVtZW50LCBtX2F0dHJpYnV0ZU5hbWUpOwotICAg
IGlmIChtX3RhcmdldEVsZW1lbnQpCi0gICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVu
c2lvbnMoKS0+cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQodGhpcywgbV90YXJnZXRF
bGVtZW50KTsKIH0KIAogc3RhdGljIGlubGluZSBRdWFsaWZpZWROYW1lIGNvbnN0cnVjdFF1YWxp
ZmllZE5hbWUoY29uc3QgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCwgY29uc3QgU3RyaW5nJiBhdHRy
aWJ1dGVOYW1lKQpAQCAtMTc4LDcgKzE3Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhclRp
bWVzV2l0aER5bmFtaWMKIAogdm9pZCBTVkdTTUlMRWxlbWVudDo6cmVzZXQoKQogewotICAgIGNs
ZWFyQW5pbWF0ZWRUeXBlKG1fdGFyZ2V0RWxlbWVudCk7CisgICAgY2xlYXJBbmltYXRlZFR5cGUo
KTsKIAogICAgIG1fYWN0aXZlU3RhdGUgPSBJbmFjdGl2ZTsKICAgICBtX2lzV2FpdGluZ0ZvckZp
cnN0SW50ZXJ2YWwgPSB0cnVlOwpAQCAtMjE2LDkgKzIxMSw2IEBAIE5vZGU6Okluc2VydGlvbk5v
dGlmaWNhdGlvblJlcXVlc3QgU1ZHU00KICAgICBpZiAobV9pc1dhaXRpbmdGb3JGaXJzdEludGVy
dmFsKQogICAgICAgICByZXNvbHZlRmlyc3RJbnRlcnZhbCgpOwogCi0gICAgLy8gRm9yY2UgcmVz
b2x1dGlvbiBvZiB0YXJnZXQgZWxlbWVudAotICAgIGlmICghbV90YXJnZXRFbGVtZW50KQotICAg
ICAgICB0YXJnZXRFbGVtZW50KCk7CiAgICAgaWYgKG1fdGltZUNvbnRhaW5lcikKICAgICAgICAg
bV90aW1lQ29udGFpbmVyLT5ub3RpZnlJbnRlcnZhbHNDaGFuZ2VkKCk7CiAKQEAgLTIzOCwxMSAr
MjMwLDkgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbgogICAgICAg
ICBSZWZQdHI8U1ZHU01JTEVsZW1lbnQ+IGtlZXBBbGl2ZSh0aGlzKTsKICAgICAgICAgZGlzY29u
bmVjdENvbmRpdGlvbnMoKTsKIAotICAgICAgICAvLyBDbGVhciB0YXJnZXQgbm93LCBiZWNhdXNl
IGRpc2Nvbm5lY3RDb25kaXRpb25zIGNhbGxzIHRhcmdldEVsZW1lbnQoKSB3aGljaCB3aWxsIHJl
Y3JlYXRlIHRoZSB0YXJnZXQgaWYgd2UgcmVtb3ZlZCBpdCBzb29uZXIuIAotICAgICAgICBpZiAo
bV90YXJnZXRFbGVtZW50KQotICAgICAgICAgICAgcmVzZXRUYXJnZXRFbGVtZW50KERvTm90UmVz
b2x2ZU5ld1RhcmdldCk7Ci0KKyAgICAgICAgc2V0VGFyZ2V0RWxlbWVudCgwKTsKICAgICAgICAg
c2V0QXR0cmlidXRlTmFtZShhbnlRTmFtZSgpKTsKKyAgICAgICAgYW5pbWF0aW9uQXR0cmlidXRl
Q2hhbmdlZCgpOwogICAgIH0KIAogICAgIFNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tKHJvb3RQYXJl
bnQpOwpAQCAtNDIxLDcgKzQxMSw2IEBAIGJvb2wgU1ZHU01JTEVsZW1lbnQ6OmlzU3VwcG9ydGVk
QXR0cmlidXQKICAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om1pbkF0
dHIpOwogICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6bWF4QXR0cik7
CiAgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjphdHRyaWJ1dGVOYW1l
QXR0cik7Ci0gICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFhMaW5rTmFtZXM6OmhyZWZB
dHRyKTsKICAgICB9CiAgICAgcmV0dXJuIHN1cHBvcnRlZEF0dHJpYnV0ZXMuY29udGFpbnM8UXVh
bGlmaWVkTmFtZSwgU1ZHQXR0cmlidXRlSGFzaFRyYW5zbGF0b3I+KGF0dHJOYW1lKTsKIH0KQEAg
LTQ3NCwxNCArNDYzLDYgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZAogICAgICAgICAgICAgZW5kTGlzdENoYW5nZWQoZWxhcHNlZCgpKTsKICAgICAgICAgZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmF0dHJpYnV0ZU5hbWVBdHRyKSB7CiAgICAgICAgICAg
ICBzZXRBdHRyaWJ1dGVOYW1lKGNvbnN0cnVjdFF1YWxpZmllZE5hbWUodGhpcywgZmFzdEdldEF0
dHJpYnV0ZShTVkdOYW1lczo6YXR0cmlidXRlTmFtZUF0dHIpKSk7Ci0gICAgICAgICAgICBpZiAo
bV90YXJnZXRFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgcmVzZXRUYXJnZXRFbGVtZW50KCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
aWYgKGF0dHJOYW1lLm1hdGNoZXMoWExpbmtOYW1lczo6aHJlZkF0dHIpKSB7Ci0gICAgICAgICAg
ICAvLyB0YXJnZXRFbGVtZW50IGlzIHJlc29sdmVkIGxhemlseSBidXQgdGFyZ2V0RWxlbWVudCgp
IHdpbGwgaGFuZGxlIGNhbGxpbmcgdGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UoKS4KLSAgICAgICAg
ICAgIGlmIChTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgp
KQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVt
b3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNGcm9tVGFyZ2V0KHRhcmdldEVsZW1lbnQpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC01NjQsNTUgKzU0NSwyNCBAQCB2b2lkIFNWR1NNSUxFbGVtZW50Ojpz
ZXRBdHRyaWJ1dGVOYW1lKGNvCiAgICAgICAgIG1fYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5h
bWU7CiB9CiAKLVNWR0VsZW1lbnQqIFNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVtZW50KFJlc29s
dmVUYXJnZXQgcmVzb2x2ZVRhcmdldCkKLXsKLSAgICBpZiAobV90YXJnZXRFbGVtZW50KQotICAg
ICAgICByZXR1cm4gbV90YXJnZXRFbGVtZW50OwotCi0gICAgaWYgKCFpbkRvY3VtZW50KCkgfHwg
cmVzb2x2ZVRhcmdldCA9PSBEb05vdFJlc29sdmVOZXdUYXJnZXQpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgU3RyaW5nIGhyZWYgPSBnZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIp
OwotICAgIENvbnRhaW5lck5vZGUqIHRhcmdldCA9IGhyZWYuaXNFbXB0eSgpID8gcGFyZW50Tm9k
ZSgpIDogU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmLCBk
b2N1bWVudCgpKTsKLSAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LT5pc1NWR0VsZW1lbnQoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHRhcmdldCk7Ci0gICAgdGFyZ2V0RWxlbWVudFdpbGxDaGFu
Z2UobV90YXJnZXRFbGVtZW50LCB0YXJnZXRFbGVtZW50KTsKLSAgICBtX3RhcmdldEVsZW1lbnQg
PSB0YXJnZXRFbGVtZW50OwotICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+
YWRkQW5pbWF0aW9uRWxlbWVudFRvVGFyZ2V0KHRoaXMsIG1fdGFyZ2V0RWxlbWVudCk7Ci0gICAg
cmV0dXJuIG1fdGFyZ2V0RWxlbWVudDsKLX0KLQotdm9pZCBTVkdTTUlMRWxlbWVudDo6dGFyZ2V0
RWxlbWVudFdpbGxDaGFuZ2UoU1ZHRWxlbWVudCogY3VycmVudFRhcmdldCwgU1ZHRWxlbWVudCog
bmV3VGFyZ2V0KQordm9pZCBTVkdTTUlMRWxlbWVudDo6c2V0VGFyZ2V0RWxlbWVudChTVkdFbGVt
ZW50KiB0YXJnZXQpCiB7CiAgICAgaWYgKG1fdGltZUNvbnRhaW5lciAmJiBoYXNWYWxpZEF0dHJp
YnV0ZU5hbWUoKSkgewotICAgICAgICBpZiAoY3VycmVudFRhcmdldCkKLSAgICAgICAgICAgIG1f
dGltZUNvbnRhaW5lci0+dW5zY2hlZHVsZSh0aGlzLCBjdXJyZW50VGFyZ2V0LCBtX2F0dHJpYnV0
ZU5hbWUpOwotICAgICAgICBpZiAobmV3VGFyZ2V0KQotICAgICAgICAgICAgbV90aW1lQ29udGFp
bmVyLT5zY2hlZHVsZSh0aGlzLCBuZXdUYXJnZXQsIG1fYXR0cmlidXRlTmFtZSk7CisgICAgICAg
IGlmIChtX3RhcmdldEVsZW1lbnQpCisgICAgICAgICAgICBtX3RpbWVDb250YWluZXItPnVuc2No
ZWR1bGUodGhpcywgbV90YXJnZXRFbGVtZW50LCBtX2F0dHJpYnV0ZU5hbWUpOworICAgICAgICBp
ZiAodGFyZ2V0KQorICAgICAgICAgICAgbV90aW1lQ29udGFpbmVyLT5zY2hlZHVsZSh0aGlzLCB0
YXJnZXQsIG1fYXR0cmlidXRlTmFtZSk7CiAgICAgfQogCiAgICAgLy8gT25seSBjbGVhciB0aGUg
YW5pbWF0ZWQgdHlwZSwgaWYgd2UgaGFkIGEgdGFyZ2V0IGJlZm9yZS4KLSAgICBpZiAoY3VycmVu
dFRhcmdldCkKLSAgICAgICAgY2xlYXJBbmltYXRlZFR5cGUoY3VycmVudFRhcmdldCk7CisgICAg
aWYgKG1fdGFyZ2V0RWxlbWVudCkKKyAgICAgICAgY2xlYXJBbmltYXRlZFR5cGUoKTsKIAogICAg
IC8vIElmIHRoZSBhbmltYXRpb24gc3RhdGUgaXMgbm90IEluYWN0aXZlLCBhbHdheXMgcmVzZXQg
dG8gYSBjbGVhciBzdGF0ZSBiZWZvcmUgbGVhdmluZyB0aGUgb2xkIHRhcmdldCBlbGVtZW50Lgog
ICAgIGlmIChtX2FjdGl2ZVN0YXRlICE9IEluYWN0aXZlKQogICAgICAgICBlbmRlZEFjdGl2ZUlu
dGVydmFsKCk7Ci19CiAKLXZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlc2V0VGFyZ2V0RWxlbWVudChS
ZXNvbHZlVGFyZ2V0IHJlc29sdmVUYXJnZXQpCi17Ci0gICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLT5yZW1vdmVBbmltYXRpb25FbGVtZW50RnJvbVRhcmdldCh0aGlzLCBtX3Rh
cmdldEVsZW1lbnQpOwotICAgIHRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKG1fdGFyZ2V0RWxlbWVu
dCwgMCk7Ci0gICAgbV90YXJnZXRFbGVtZW50ID0gMDsKLQotICAgIC8vIEltbWVkaWF0ZWx5IHJl
c29sdmUgdGhlIG5ldyB0YXJnZXRFbGVtZW50IChhbmQgY2FsbCB0YXJnZXRFbGVtZW50V2lsbENo
YW5nZSBpZiBuZWVkZWQpIGluc3RlYWQgb2YgZG9pbmcgaXQgbGF6aWx5LgotICAgIGlmIChyZXNv
bHZlVGFyZ2V0ID09IFJlc29sdmVOZXdUYXJnZXQpCi0gICAgICAgIHRhcmdldEVsZW1lbnQoKTsK
LQotICAgIGFuaW1hdGlvbkF0dHJpYnV0ZUNoYW5nZWQoKTsKKyAgICBtX3RhcmdldEVsZW1lbnQg
PSB0YXJnZXQ7CiB9CiAKIFNNSUxUaW1lIFNWR1NNSUxFbGVtZW50OjplbGFwc2VkKCkgY29uc3QK
QEAgLTExMTAsNyArMTA2MCw3IEBAIGJvb2wgU1ZHU01JTEVsZW1lbnQ6OnByb2dyZXNzKFNNSUxU
aW1lIGUKICAgICBpZiAob2xkQWN0aXZlU3RhdGUgPT0gQWN0aXZlICYmIG1fYWN0aXZlU3RhdGUg
IT0gQWN0aXZlKSB7CiAgICAgICAgIGVuZGVkQWN0aXZlSW50ZXJ2YWwoKTsKICAgICAgICAgaWYg
KG1fYWN0aXZlU3RhdGUgIT0gRnJvemVuKQotICAgICAgICAgICAgY2xlYXJBbmltYXRlZFR5cGUo
bV90YXJnZXRFbGVtZW50KTsKKyAgICAgICAgICAgIGNsZWFyQW5pbWF0ZWRUeXBlKCk7CiAgICAg
fQogCiAgICAgbV9uZXh0UHJvZ3Jlc3NUaW1lID0gY2FsY3VsYXRlTmV4dFByb2dyZXNzVGltZShl
bGFwc2VkKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxF
bGVtZW50LmgJKHJldmlzaW9uIDEzNTcwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRp
b24vU1ZHU01JTEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsNiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVudW0gUmVzb2x2ZVRhcmdldCB7IERvTm90UmVzb2x2ZU5l
d1RhcmdldCwgUmVzb2x2ZU5ld1RhcmdldCB9OwotCiBjbGFzcyBDb25kaXRpb25FdmVudExpc3Rl
bmVyOwogY2xhc3MgU01JTFRpbWVDb250YWluZXI7CiAKQEAgLTU4LDggKzU2LDcgQEAgcHVibGlj
OgogCiAgICAgU01JTFRpbWVDb250YWluZXIqIHRpbWVDb250YWluZXIoKSBjb25zdCB7IHJldHVy
biBtX3RpbWVDb250YWluZXIuZ2V0KCk7IH0KIAotICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1l
bnQoUmVzb2x2ZVRhcmdldCA9IFJlc29sdmVOZXdUYXJnZXQpOwotICAgIHZvaWQgcmVzZXRUYXJn
ZXRFbGVtZW50KFJlc29sdmVUYXJnZXQgPSBSZXNvbHZlTmV3VGFyZ2V0KTsKKyAgICBTVkdFbGVt
ZW50KiB0YXJnZXRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRFbGVtZW50OyB9CiAg
ICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YXR0cmlidXRlTmFtZTsgfQogCiAgICAgdm9pZCBiZWdpbkJ5TGlua0FjdGl2YXRpb24oKTsKQEAg
LTExMCw3ICsxMDcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBZGRpdGl2ZSgp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRBbmltYXRlZFR5cGUoKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGNsZWFyQW5pbWF0ZWRUeXBlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1l
bnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbmltYXRlZFR5cGUoKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGFwcGx5UmVzdWx0c1RvVGFyZ2V0KCkgPSAwOwogCiBwcm90ZWN0ZWQ6CkBA
IC0xMjAsNyArMTE3LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0SW5hY3RpdmUoKSB7IG1f
YWN0aXZlU3RhdGUgPSBJbmFjdGl2ZTsgfQogCiAgICAgLy8gU3ViLWNsYXNzZXMgbWF5IG5lZWQg
dG8gdGFrZSBhY3Rpb24gd2hlbiB0aGUgdGFyZ2V0IGlzIGNoYW5nZWQuCi0gICAgdmlydHVhbCB2
b2lkIHRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQqIGN1cnJlbnRUYXJnZXQsIFNW
R0VsZW1lbnQqIG5ld1RhcmdldCk7CisgICAgdmlydHVhbCB2b2lkIHNldFRhcmdldEVsZW1lbnQo
U1ZHRWxlbWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRyaWJ1dGVOYW1lKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKIAogcHJpdmF0ZToKQEAgLTE5NSw4ICsxOTIsNiBAQCBwcml2YXRlOgog
ICAgIGZsb2F0IGNhbGN1bGF0ZUFuaW1hdGlvblBlcmNlbnRBbmRSZXBlYXQoU01JTFRpbWUgZWxh
cHNlZCwgdW5zaWduZWQmIHJlcGVhdCkgY29uc3Q7CiAgICAgU01JTFRpbWUgY2FsY3VsYXRlTmV4
dFByb2dyZXNzVGltZShTTUlMVGltZSBlbGFwc2VkKSBjb25zdDsKIAotICAgIG11dGFibGUgU1ZH
RWxlbWVudCogbV90YXJnZXRFbGVtZW50OwotCiAgICAgVmVjdG9yPENvbmRpdGlvbj4gbV9jb25k
aXRpb25zOwogICAgIGJvb2wgbV9jb25kaXRpb25zQ29ubmVjdGVkOwogICAgIGJvb2wgbV9oYXNF
bmRFdmVudENvbmRpdGlvbnM7ICAgICAKQEAgLTIzMCw2ICsyMjUsNyBAQCBwcml2YXRlOgogICAg
IG11dGFibGUgU01JTFRpbWUgbV9jYWNoZWRSZXBlYXRDb3VudDsKICAgICBtdXRhYmxlIFNNSUxU
aW1lIG1fY2FjaGVkTWluOwogICAgIG11dGFibGUgU01JTFRpbWUgbV9jYWNoZWRNYXg7CisgICAg
U1ZHRWxlbWVudCogbV90YXJnZXRFbGVtZW50OwogCiAgICAgZnJpZW5kIGNsYXNzIENvbmRpdGlv
bkV2ZW50TGlzdGVuZXI7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176414</attachid>
            <date>2012-11-27 23:54:42 -0800</date>
            <delta_ts>2012-11-28 14:43:36 -0800</delta_ts>
            <desc>Preview patch 2 - almost ready for review</desc>
            <filename>102655.2.patch</filename>
            <type>text/plain</type>
            <size>31197</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNTk0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBACisyMDEyLTExLTI3ICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHJlZHVuZGFudCBTVkcg
YW5pbWF0aW9uIHRhcmdldCB0cmFja2luZyBmcmFtZXdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI2NTUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHVuaWZpZXMgb3VyIGFuaW1h
dGlvbiB0YXJnZXQgdHJhY2tpbmcgc3lzdGVtIGFuZCByZWd1bGFyCisgICAgICAgIHRhcmdldCB0
cmFja2luZyBzeXN0ZW0uIFRoaXMgc2ltcGxpZmllcyB0aGUgY29kZSwgZml4ZXMgYSBidWcsIGFu
ZAorICAgICAgICBjbGVhbnMgdXAgYSBoaXN0b3JpY2FsbHkgc2VjdXJpdHktc2Vuc2l0aXZlIGFy
ZWEuCisKKyAgICAgICAgQmFja2dyb3VuZDogV2hlbiA8dXNlPiwgPG1wYXRoPiwgPGFuaW1hdGU+
LCBldGMuIHJlZmVyZW5jZSBhbm90aGVyIGVsZW1lbnQKKyAgICAgICAgdXNpbmcgeGxpbms6aHJl
Zj0iI3NvbWVJZCIsIHdlIG5lZWQgdG8gdHJhY2sgd2hlbiAjc29tZUlkIGNoYW5nZXMgdG8gI290
aGVySWQsCisgICAgICAgIHdoZW4gI3NvbWVJZCBpcyByZW1vdmVkLCBldGMuIFRoaXMgYm9va2tl
ZXBpbmcgb2YgZWxlbWVudCAtPiB0YXJnZXQgaXMgZG9uZSBpbgorICAgICAgICBTVkdEb2N1bWVu
dEV4dGVuc2lvbnMuCisKKworICAgICAgICBUT0RPOiBtb3JlIGRldGFpbHMgaGVyZS4KKworCisg
ICAgICAgIEEgdGVzdCBoYXMgYmVlbiBhZGRlZCB0byB0ZXN0IHRoYXQgdGhlIG9yZGVyIG9mIGFu
aW1hdGlvbiBlbGVtZW50cyBkb2VzIG5vdCBtYXR0ZXIuCisgICAgICAgIFRoZSBhbmltYXRpb24g
dGFyZ2V0IHRyYWNraW5nIGZyYW1ld29yayBkaWQgbm90IHN1cHBvcnQgdGhhdCwgd2hlcmVhcyB0
aGUgcHJvcGVyCisgICAgICAgIFNWRyB0YXJnZXQgdHJhY2tpbmcgZnJhbWV3b3JrIGRvZXMuCisK
KyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0ZUVsZW1lbnQ6OmNsZWFyQW5pbWF0ZWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVFbGVtZW50OjpzZXRUYXJnZXRFbGVtZW50KToKKyAgICAgICAgKiBzdmcvU1ZH
QW5pbWF0ZUVsZW1lbnQuaDoKKyAgICAgICAgKFNWR0FuaW1hdGVFbGVtZW50KToKKyAgICAgICAg
KiBzdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNsZWFyQW5pbWF0ZWRUeXBlKToKKyAgICAgICAgKiBzdmcv
U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKFNWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojp+U1ZHQW5pbWF0aW9uRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNs
ZWFyUmVzb3VyY2VSZWZlcmVuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGlvbkVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGlvbkVsZW1lbnQ6OnNldEF0dHJpYnV0ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRpb25FbGVtZW50OjpzZXRBdHRyaWJ1dGVOYW1lKToKKyAgICAgICAgKiBzdmcv
U1ZHQW5pbWF0aW9uRWxlbWVudC5oOgorICAgICAgICAoU1ZHQW5pbWF0aW9uRWxlbWVudCk6Cisg
ICAgICAgICogc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6On5TVkdEb2N1bWVudEV4dGVuc2lvbnMpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oOgorICAg
ICAgICAoU1ZHRG9jdW1lbnRFeHRlbnNpb25zKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojp+U1ZHRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudElu
c3RhbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRJbnN0YW5jZTo6aW52YWxp
ZGF0ZUFsbEluc3RhbmNlc09mRWxlbWVudCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdT
TUlMRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6U1ZHU01J
TEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6On5TVkdTTUlMRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6cmVzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTTUlMRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U01JTEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1NNSUxFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1NNSUxFbGVtZW50OjpzZXRUYXJnZXRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NN
SUxFbGVtZW50Ojpwcm9ncmVzcyk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxl
bWVudC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxl
bWVudDo6dGFyZ2V0RWxlbWVudCk6CisgICAgICAgIChTVkdTTUlMRWxlbWVudCk6CisKIDIwMTIt
MTEtMjcgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIEF0dGVtcHRl
ZCBidWlsZCBmaXggZm9yIG15IGxhc3QgY29tbWl0LiBUaGUgcHJpdmF0ZSBtZW1iZXIgdmFyaWFi
bGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAkocmV2aXNp
b24gMTM1NzAxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzk2LDE2ICszOTYsMjkgQEAgZmxvYXQgU1ZHQW5pbWF0ZUVsZW1l
bnQ6OmNhbGN1bGF0ZURpc3RhbgogICAgIHJldHVybiBlbnN1cmVBbmltYXRvcigpLT5jYWxjdWxh
dGVEaXN0YW5jZShmcm9tU3RyaW5nLCB0b1N0cmluZyk7CiB9CiAKLXZvaWQgU1ZHQW5pbWF0ZUVs
ZW1lbnQ6OnRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQqIGN1cnJlbnRUYXJnZXQs
IFNWR0VsZW1lbnQqIG5ld1RhcmdldCkKK3ZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OnNldFRhcmdl
dEVsZW1lbnQoU1ZHRWxlbWVudCogdGFyZ2V0KQogewotICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OnRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKGN1cnJlbnRUYXJnZXQsIG5ld1RhcmdldCk7CisgICAg
U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0RWxlbWVudCh0YXJnZXQpOwogCiAgICAgQVNT
RVJUKCFtX2FuaW1hdGVkVHlwZSk7CiAgICAgbV9mcm9tVHlwZS5jbGVhcigpOwogICAgIG1fdG9U
eXBlLmNsZWFyKCk7CiAgICAgbV90b0F0RW5kT2ZEdXJhdGlvblR5cGUuY2xlYXIoKTsKICAgICBt
X2FuaW1hdG9yLmNsZWFyKCk7Ci0gICAgbV9hbmltYXRlZFByb3BlcnR5VHlwZSA9IG5ld1Rhcmdl
dCA/IGRldGVybWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKG5ld1RhcmdldCkgOiBBbmltYXRlZFN0
cmluZzsKKyAgICBtX2FuaW1hdGVkUHJvcGVydHlUeXBlID0gdGFyZ2V0ID8gZGV0ZXJtaW5lQW5p
bWF0ZWRQcm9wZXJ0eVR5cGUodGFyZ2V0KSA6IEFuaW1hdGVkU3RyaW5nOworfQorCit2b2lkIFNW
R0FuaW1hdGVFbGVtZW50OjpzZXRBdHRyaWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJpYnV0ZU5hbWUpCit7CisgICAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0QXR0cmlidXRlTmFt
ZShhdHRyaWJ1dGVOYW1lKTsKKworICAgIC8vIEZJWE1FOiB1bmlmeSB3aXRoIHNldFRhcmdldEVs
ZW1lbnQsIHBvc3NpYmx5IGluIGNsZWFyQXR0cmlidXRlVHlwZSgpLgorICAgIEFTU0VSVCghbV9h
bmltYXRlZFR5cGUpOworICAgIG1fZnJvbVR5cGUuY2xlYXIoKTsKKyAgICBtX3RvVHlwZS5jbGVh
cigpOworICAgIG1fdG9BdEVuZE9mRHVyYXRpb25UeXBlLmNsZWFyKCk7CisgICAgbV9hbmltYXRv
ci5jbGVhcigpOworICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgPSB0YXJnZXRFbGVtZW50KCkg
PyBkZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlwZSh0YXJnZXRFbGVtZW50KCkpIDogQW5pbWF0
ZWRTdHJpbmc7CiB9CiAKIFNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yKiBTVkdBbmltYXRlRWxlbWVu
dDo6ZW5zdXJlQW5pbWF0b3IoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVt
ZW50LmgJKHJldmlzaW9uIDEzNTcwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHByb3RlY3RlZDoKICAg
ICBTVkdBbmltYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCByZXNldEFuaW1hdGVkVHlwZSgpOwotICAgIHZpcnR1YWwgdm9pZCBj
bGVhckFuaW1hdGVkVHlwZShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJBbmltYXRlZFR5cGUoU1ZHRWxlbWVudCopOwogICAgIHZpcnR1YWwgYm9vbCBj
YWxjdWxhdGVUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKGNvbnN0IFN0cmluZyYgdG9BdEVuZE9mRHVy
YXRpb25TdHJpbmcpOwogICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMo
Y29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKTsKICAgICB2
aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0
cmluZywgY29uc3QgU3RyaW5nJiBieVN0cmluZyk7CkBAIC01Myw3ICs1Myw4IEBAIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIGZsb2F0IGNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmluZyYgZnJv
bVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZyk7CiAgICAgdmlydHVhbCBib29sIGlzQWRk
aXRpdmUoKSBjb25zdCBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCB0YXJnZXRFbGVtZW50
V2lsbENoYW5nZShTVkdFbGVtZW50KiBjdXJyZW50VGFyZ2V0LCBTVkdFbGVtZW50KiBvbGRUYXJn
ZXQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRUYXJnZXRFbGVtZW50KFNWR0VsZW1l
bnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0cmlidXRlTmFtZShjb25zdCBR
dWFsaWZpZWROYW1lJikgT1ZFUlJJREU7CiAKICAgICBBbmltYXRlZFByb3BlcnR5VHlwZSBtX2Fu
aW1hdGVkUHJvcGVydHlUeXBlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMTM1NzAxKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQy
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIE9WRVJSSURFOwogCiAgICAgdmlydHVh
bCB2b2lkIHJlc2V0QW5pbWF0ZWRUeXBlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyQW5pbWF0
ZWRUeXBlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpOworICAgIHZpcnR1YWwgdm9pZCBjbGVh
ckFuaW1hdGVkVHlwZShTVkdFbGVtZW50Kik7CiAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZVRv
QXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5nJiB0b0F0RW5kT2ZEdXJhdGlvblN0cmlu
Zyk7CiAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhjb25zdCBTdHJp
bmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpOwogICAgIHZpcnR1YWwgYm9v
bCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25z
dCBTdHJpbmcmIGJ5U3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRp
b25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNTcwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDE0IEBA
CiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdEb2N1bWVudEV4
dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNp
bmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50
LmgiCisjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiWExpbmtOYW1lcy5o
IgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTY0LDYgKzY4LDUwIEBAIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OlNWR0FuaW1hdGlvbkVsZW1lbnQK
ICAgICByZWdpc3RlckFuaW1hdGVkUHJvcGVydGllc0ZvclNWR0FuaW1hdGlvbkVsZW1lbnQoKTsK
IH0KIAorU1ZHQW5pbWF0aW9uRWxlbWVudDo6flNWR0FuaW1hdGlvbkVsZW1lbnQoKQoreworICAg
IGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7Cit9CisKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKQoreworICAgIEFTU0VSVChkb2N1bWVudCgpKTsK
KyAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFsbFRhcmdldFJl
ZmVyZW5jZXNGb3JFbGVtZW50KHRoaXMpOworfQorCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OmJ1aWxkUGVuZGluZ1Jlc291cmNlKCkKK3sKKyAgICBjbGVhclJlc291cmNlUmVmZXJlbmNlcygp
OworICAgIGlmICghaW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcg
aWQ7CisgICAgU3RyaW5nIGhyZWYgPSBnZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIp
OworICAgIEVsZW1lbnQqIHRhcmdldDsKKyAgICBpZiAoaHJlZi5pc0VtcHR5KCkpCisgICAgICAg
IHRhcmdldCA9IHBhcmVudE5vZGUoKSAmJiBwYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSA/
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihwYXJlbnROb2RlKCkpIDogMDsKKyAgICBlbHNlCisgICAg
ICAgIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmco
aHJlZiwgZG9jdW1lbnQoKSwgJmlkKTsKKyAgICBTVkdFbGVtZW50KiBzdmdUYXJnZXQgPSB0YXJn
ZXQgJiYgdGFyZ2V0LT5pc1NWR0VsZW1lbnQoKSA/IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPih0
YXJnZXQpIDogMDsKKworICAgIGlmIChzdmdUYXJnZXQgIT0gdGFyZ2V0RWxlbWVudCgpKQorICAg
ICAgICBzZXRUYXJnZXRFbGVtZW50KHN2Z1RhcmdldCk7CisKKyAgICBpZiAoIXN2Z1RhcmdldCkg
eworICAgICAgICBpZiAoaGFzUGVuZGluZ1Jlc291cmNlcygpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBkb2N1bWVudCgp
LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgdGhpcyk7Cisg
ICAgICAgICAgICBBU1NFUlQoaGFzUGVuZGluZ1Jlc291cmNlcygpKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIFJlZ2lzdGVyIHVzIHdpdGggdGhlIHRhcmdldCBpbiB0aGUg
ZGVwZW5kZW5jaWVzIG1hcC4gQW55IGNoYW5nZSBvZiBocmVmRWxlbWVudAorICAgICAgICAvLyB0
aGF0IGxlYWRzIHRvIHJlbGF5b3V0L3JlcGFpbnRpbmcgbm93IGluZm9ybXMgdXMsIHNvIHdlIGNh
biByZWFjdCB0byBpdC4KKyAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygp
LT5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQodGhpcywgc3ZnVGFyZ2V0KTsKKyAgICB9Cit9
CisKIHN0YXRpYyB2b2lkIHBhcnNlS2V5VGltZXMoY29uc3QgU3RyaW5nJiBwYXJzZSwgVmVjdG9y
PGZsb2F0PiYgcmVzdWx0LCBib29sIHZlcmlmeU9yZGVyKQogewogICAgIHJlc3VsdC5jbGVhcigp
OwpAQCAtMTU1LDYgKzIwMyw3IEBAIGJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNTdXBwb3J0
ZWRBdHQKICAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OmZyb21BdHRy
KTsKICAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnRvQXR0cik7CiAg
ICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpieUF0dHIpOworICAgICAg
ICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChYTGlua05hbWVzOjpocmVmQXR0cik7CiAgICAgfQog
ICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRhaW5zPFF1YWxpZmllZE5hbWUsIFNW
R0F0dHJpYnV0ZUhhc2hUcmFuc2xhdG9yPihhdHRyTmFtZSk7CiB9CkBAIC0yMTYsNiArMjY1LDgg
QEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZQogICAgICAgICByZXR1
cm47CiAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlQXR0cmlidXRl
KG5hbWUsIHZhbHVlKSkKICAgICAgICAgcmV0dXJuOworICAgIGlmIChuYW1lLm1hdGNoZXMoWExp
bmtOYW1lczo6aHJlZkF0dHIpKQorICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KQEAgLTIyNyw2ICsyNzgsMTMgQEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgU1ZHRWxlbWVu
dEluc3RhbmNlOjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKwor
ICAgIGlmIChhdHRyTmFtZS5tYXRjaGVzKFhMaW5rTmFtZXM6OmhyZWZBdHRyKSkKKyAgICAgICAg
YnVpbGRQZW5kaW5nUmVzb3VyY2UoKTsKKyAgICBlbHNlIGlmIChTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgYW5pbWF0aW9uQXR0cmlidXRlQ2hhbmdlZCgpOwogfQogCkBAIC0yMzcsNiArMjk1LDIx
IEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YW5pbWF0aW9uQXR0cmkKICAgICBzZXRJbmFj
dGl2ZSgpOwogfQogCitOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR0FuaW1h
dGlvbkVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlKiByb290UGFyZW50KQorewor
ICAgIFNWR1NNSUxFbGVtZW50OjppbnNlcnRlZEludG8ocm9vdFBhcmVudCk7CisgICAgaWYgKHJv
b3RQYXJlbnQtPmluRG9jdW1lbnQoKSkKKyAgICAgICAgYnVpbGRQZW5kaW5nUmVzb3VyY2UoKTsK
KyAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKK30KKwordm9pZCBTVkdBbmltYXRpb25FbGVtZW50
OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlKiByb290UGFyZW50KQoreworICAgIFNWR1NNSUxF
bGVtZW50OjpyZW1vdmVkRnJvbShyb290UGFyZW50KTsKKyAgICBpZiAocm9vdFBhcmVudC0+aW5E
b2N1bWVudCgpKQorICAgICAgICBjbGVhclJlc291cmNlUmVmZXJlbmNlcygpOworfQorCiBmbG9h
dCBTVkdBbmltYXRpb25FbGVtZW50OjpnZXRTdGFydFRpbWUoKSBjb25zdAogewogICAgIHJldHVy
biBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGludGVydmFsQmVnaW4oKS52YWx1ZSgpKTsKQEAgLTMx
OSw3ICszOTIsNyBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldEF0dHJpYnV0ZVR5CiAg
ICAgICAgIG1fYXR0cmlidXRlVHlwZSA9IEF0dHJpYnV0ZVR5cGVYTUw7CiAgICAgZWxzZQogICAg
ICAgICBtX2F0dHJpYnV0ZVR5cGUgPSBBdHRyaWJ1dGVUeXBlQXV0bzsKLSAgICBjaGVja0ludmFs
aWRDU1NBdHRyaWJ1dGVUeXBlKHRhcmdldEVsZW1lbnQoRG9Ob3RSZXNvbHZlTmV3VGFyZ2V0KSk7
CisgICAgY2hlY2tJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSh0YXJnZXRFbGVtZW50KCkpOwogfQog
CiBTdHJpbmcgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dG9WYWx1ZSgpIGNvbnN0CkBAIC02NzcsMTgg
Kzc1MCwxNiBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmRldGVybWluZVByb3BlCiAgICAg
ICAgIG1fdG9Qcm9wZXJ0eVZhbHVlVHlwZSA9IEluaGVyaXRWYWx1ZTsKIH0KIAotdm9pZCBTVkdB
bmltYXRpb25FbGVtZW50Ojp0YXJnZXRFbGVtZW50V2lsbENoYW5nZShTVkdFbGVtZW50KiBjdXJy
ZW50VGFyZ2V0LCBTVkdFbGVtZW50KiBuZXdUYXJnZXQpCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1l
bnQ6OnNldFRhcmdldEVsZW1lbnQoU1ZHRWxlbWVudCogdGFyZ2V0KQogewotICAgIFNWR1NNSUxF
bGVtZW50Ojp0YXJnZXRFbGVtZW50V2lsbENoYW5nZShjdXJyZW50VGFyZ2V0LCBuZXdUYXJnZXQp
OwotCi0gICAgY2hlY2tJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZShuZXdUYXJnZXQpOworICAgIFNW
R1NNSUxFbGVtZW50OjpzZXRUYXJnZXRFbGVtZW50KHRhcmdldCk7CisgICAgY2hlY2tJbnZhbGlk
Q1NTQXR0cmlidXRlVHlwZSh0YXJnZXQpOwogfQogCiB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OnNldEF0dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKIHsK
ICAgICBTVkdTTUlMRWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKTsKLQot
ICAgIGNoZWNrSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUodGFyZ2V0RWxlbWVudChEb05vdFJlc29s
dmVOZXdUYXJnZXQpKTsKKyAgICBjaGVja0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKHRhcmdldEVs
ZW1lbnQoKSk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2hlY2tJbnZhbGlkQ1NT
QXR0cmlidXRlVHlwZShTVkdFbGVtZW50KiB0YXJnZXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHJldmlzaW9uIDEzNTcwMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsy
OSwxMiBAQAogI2luY2x1ZGUgIkVsZW1lbnRUaW1lQ29udHJvbC5oIgogI2luY2x1ZGUgIlNNSUxU
aW1lLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRCb29sZWFuLmgiCisjaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRTdHJpbmcuaCIKICNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgi
CiAjaW5jbHVkZSAiU1ZHU01JTEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTdHJpbmdMaXN0Lmgi
CiAjaW5jbHVkZSAiU1ZHVGVzdHMuaCIKKyNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKICNp
bmNsdWRlICJVbml0QmV6aWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTcxLDYgKzcz
LDggQEAgY2xhc3MgU1ZHQW5pbWF0aW9uRWxlbWVudCA6IHB1YmxpYyBTVkdTTQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBFbGVtZW50VGltZUNvbnRyb2wgewog
cHVibGljOgorICAgIHZpcnR1YWwgflNWR0FuaW1hdGlvbkVsZW1lbnQoKTsKKwogICAgIC8vIFNW
R0FuaW1hdGlvbkVsZW1lbnQKICAgICBmbG9hdCBnZXRTdGFydFRpbWUoKSBjb25zdDsKICAgICBm
bG9hdCBnZXRDdXJyZW50VGltZSgpIGNvbnN0OwpAQCAtMTk3LDcgKzIwMSw4IEBAIHByb3RlY3Rl
ZDoKICAgICBBbmltYXRlZFByb3BlcnR5VmFsdWVUeXBlIG1fZnJvbVByb3BlcnR5VmFsdWVUeXBl
OwogICAgIEFuaW1hdGVkUHJvcGVydHlWYWx1ZVR5cGUgbV90b1Byb3BlcnR5VmFsdWVUeXBlOwog
Ci0gICAgdmlydHVhbCB2b2lkIHRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQqIGN1
cnJlbnRUYXJnZXQsIFNWR0VsZW1lbnQqIG9sZFRhcmdldCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHNldFRhcmdldEVsZW1lbnQoU1ZHRWxlbWVudCopIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBzZXRBdHRyaWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBPVkVSUklERTsK
ICAgICBib29sIGhhc0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFu
aW1hdGlvbk1vZGUoKTsKQEAgLTIwNSw4ICsyMTAsMTIgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQg
c2V0Q2FsY01vZGUoQ2FsY01vZGUgY2FsY01vZGUpIHsgbV9jYWxjTW9kZSA9IGNhbGNNb2RlOyB9
CiAKIHByaXZhdGU6CisgICAgdm9pZCBidWlsZFBlbmRpbmdSZXNvdXJjZSgpOworICAgIHZvaWQg
Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKTsKKyAgICB2aXJ0dWFsIEluc2VydGlvbk5vdGlmaWNh
dGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSopIE9WRVJSSURFOworCiAgICAg
dmlydHVhbCB2b2lkIGFuaW1hdGlvbkF0dHJpYnV0ZUNoYW5nZWQoKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0QXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJikgT1ZFUlJJ
REU7CiAgICAgdm9pZCBzZXRBdHRyaWJ1dGVUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAg
ICAgdm9pZCBjaGVja0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKFNWR0VsZW1lbnQqKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCShyZXZpc2lv
biAxMzU3MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNiBAQCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OlNWR0RvY3VtZW50RXh0ZW5zCiAKIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6flNWR0RvY3VtZW50
RXh0ZW5zaW9ucygpCiB7Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG1fYW5pbWF0ZWRFbGVtZW50cyk7
CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fcGVuZGluZ1Jlc291cmNlcyk7CiAgICAgZGVsZXRlQWxs
VmFsdWVzKG1fcGVuZGluZ1Jlc291cmNlc0ZvclJlbW92YWwpOwogfQpAQCAtMTMzLDU4ICsxMzIs
NiBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6ZGlzcGF0Y2hTVkdMCiAgICAgfQogfQog
Ci12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkQW5pbWF0aW9uRWxlbWVudFRvVGFyZ2V0
KFNWR1NNSUxFbGVtZW50KiBhbmltYXRpb25FbGVtZW50LCBTVkdFbGVtZW50KiB0YXJnZXRFbGVt
ZW50KQotewotICAgIEFTU0VSVCh0YXJnZXRFbGVtZW50KTsKLSAgICBBU1NFUlQoYW5pbWF0aW9u
RWxlbWVudCk7Ci0KLSAgICBpZiAoSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25F
bGVtZW50c0ZvclRhcmdldCA9IG1fYW5pbWF0ZWRFbGVtZW50cy5nZXQodGFyZ2V0RWxlbWVudCkp
IHsKLSAgICAgICAgYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQtPmFkZChhbmltYXRpb25FbGVt
ZW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEhhc2hTZXQ8U1ZHU01JTEVsZW1l
bnQqPiogYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBuZXcgSGFzaFNldDxTVkdTTUlMRWxl
bWVudCo+OwotICAgIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0LT5hZGQoYW5pbWF0aW9uRWxl
bWVudCk7Ci0gICAgbV9hbmltYXRlZEVsZW1lbnRzLnNldCh0YXJnZXRFbGVtZW50LCBhbmltYXRp
b25FbGVtZW50c0ZvclRhcmdldCk7Ci19Ci0KLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpy
ZW1vdmVBbmltYXRpb25FbGVtZW50RnJvbVRhcmdldChTVkdTTUlMRWxlbWVudCogYW5pbWF0aW9u
RWxlbWVudCwgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkKLXsKLSAgICBBU1NFUlQodGFyZ2V0
RWxlbWVudCk7Ci0gICAgQVNTRVJUKGFuaW1hdGlvbkVsZW1lbnQpOwotCi0gICAgSGFzaE1hcDxT
VkdFbGVtZW50KiwgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiA+OjppdGVyYXRvciBpdCA9IG1f
YW5pbWF0ZWRFbGVtZW50cy5maW5kKHRhcmdldEVsZW1lbnQpOwotICAgIEFTU0VSVChpdCAhPSBt
X2FuaW1hdGVkRWxlbWVudHMuZW5kKCkpOwotICAgIAotICAgIEhhc2hTZXQ8U1ZHU01JTEVsZW1l
bnQqPiogYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBpdC0+dmFsdWU7Ci0gICAgQVNTRVJU
KCFhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldC0+aXNFbXB0eSgpKTsKLQotICAgIGFuaW1hdGlv
bkVsZW1lbnRzRm9yVGFyZ2V0LT5yZW1vdmUoYW5pbWF0aW9uRWxlbWVudCk7Ci0gICAgaWYgKGFu
aW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9hbmltYXRl
ZEVsZW1lbnRzLnJlbW92ZShpdCk7Ci0gICAgICAgIGRlbGV0ZSBhbmltYXRpb25FbGVtZW50c0Zv
clRhcmdldDsKLSAgICB9Ci19Ci0KLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVB
bGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkK
LXsKLSAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7Ci0gICAgSGFzaE1hcDxTVkdFbGVtZW50Kiwg
SGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiA+OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0ZWRFbGVt
ZW50cy5maW5kKHRhcmdldEVsZW1lbnQpOwotICAgIGlmIChpdCA9PSBtX2FuaW1hdGVkRWxlbWVu
dHMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQq
PiogYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBpdC0+dmFsdWU7Ci0gICAgVmVjdG9yPFNW
R1NNSUxFbGVtZW50Kj4gdG9CZVJlc2V0OwotCi0gICAgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+
OjppdGVyYXRvciBlbmQgPSBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldC0+ZW5kKCk7Ci0gICAg
Zm9yIChIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj46Oml0ZXJhdG9yIGl0ID0gYW5pbWF0aW9uRWxl
bWVudHNGb3JUYXJnZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdG9CZVJl
c2V0LmFwcGVuZCgqaXQpOwotCi0gICAgVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj46Oml0ZXJhdG9y
IHZlY3RvckVuZCA9IHRvQmVSZXNldC5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxTVkdTTUlMRWxl
bWVudCo+OjppdGVyYXRvciB2ZWN0b3JJdCA9IHRvQmVSZXNldC5iZWdpbigpOyB2ZWN0b3JJdCAh
PSB2ZWN0b3JFbmQ7ICsrdmVjdG9ySXQpCi0gICAgICAgICgqdmVjdG9ySXQpLT5yZXNldFRhcmdl
dEVsZW1lbnQoKTsKLX0KLQogLy8gRklYTUU6IENhbGxlcnMgc2hvdWxkIHByb2JhYmx5IHVzZSBT
Y3JpcHRDb250cm9sbGVyOjpldmVudEhhbmRsZXJMaW5lTnVtYmVyKCkKIHN0YXRpYyBpbnQgcGFy
c2VyTGluZU51bWJlcihEb2N1bWVudCogZG9jdW1lbnQpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCShyZXZpc2lvbiAxMzU3MDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDEwICs1OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhdXNlQW5pbWF0aW9ucygpOwogICAg
IHZvaWQgdW5wYXVzZUFuaW1hdGlvbnMoKTsKICAgICB2b2lkIGRpc3BhdGNoU1ZHTG9hZEV2ZW50
VG9PdXRlcm1vc3RTVkdFbGVtZW50cygpOwotICAgIAotICAgIHZvaWQgYWRkQW5pbWF0aW9uRWxl
bWVudFRvVGFyZ2V0KFNWR1NNSUxFbGVtZW50KiwgU1ZHRWxlbWVudCopOwotICAgIHZvaWQgcmVt
b3ZlQW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQoU1ZHU01JTEVsZW1lbnQqLCBTVkdFbGVtZW50
Kik7Ci0gICAgdm9pZCByZW1vdmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQoU1ZHRWxl
bWVudCopOwogCiAgICAgdm9pZCByZXBvcnRXYXJuaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZv
aWQgcmVwb3J0RXJyb3IoY29uc3QgU3RyaW5nJik7CkBAIC04Myw3ICs3OSw2IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7IC8vIHdlYWsgcmVmZXJlbmNlCiAg
ICAgSGFzaFNldDxTVkdTVkdFbGVtZW50Kj4gbV90aW1lQ29udGFpbmVyczsgLy8gRm9yIFNWRyAx
LjIgc3VwcG9ydCB0aGlzIHdpbGwgbmVlZCB0byBiZSBtYWRlIG1vcmUgZ2VuZXJhbC4KLSAgICBI
YXNoTWFwPFNWR0VsZW1lbnQqLCBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qID4gbV9hbmltYXRl
ZEVsZW1lbnRzOwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgSGFzaFNldDxTVkdGb250RmFj
ZUVsZW1lbnQqPiBtX3N2Z0ZvbnRGYWNlRWxlbWVudHM7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNTcwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNiBAQCBTVkdFbGVt
ZW50Ojp+U1ZHRWxlbWVudCgpCiAgICAgICAgIHJhcmVEYXRhTWFwLnJlbW92ZShpdCk7CiAgICAg
fQogICAgIEFTU0VSVChkb2N1bWVudCgpKTsKLSAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRl
bnNpb25zKCktPnJlbW92ZUFsbEFuaW1hdGlvbkVsZW1lbnRzRnJvbVRhcmdldCh0aGlzKTsKICAg
ICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFsbEVsZW1lbnRSZWZl
cmVuY2VzRm9yVGFyZ2V0KHRoaXMpOwogfQogCkBAIC0xODMsNyArMTgyLDYgQEAgdm9pZCBTVkdF
bGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJObwogICAgIFN0eWxlZEVsZW1lbnQ6OnJlbW92
ZWRGcm9tKHJvb3RQYXJlbnQpOwogCiAgICAgaWYgKHdhc0luRG9jdW1lbnQpIHsKLSAgICAgICAg
ZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVBbGxBbmltYXRpb25FbGVt
ZW50c0Zyb21UYXJnZXQodGhpcyk7CiAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVu
c2lvbnMoKS0+cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQodGhpcyk7CiAgICAg
ICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlRWxlbWVudEZyb21Q
ZW5kaW5nUmVzb3VyY2VzKHRoaXMpOwogICAgIH0KQEAgLTU0NSwxMCArNTQzLDggQEAgdm9pZCBT
VkdFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IAogICAgIGlmIChpc1N5bmNocm9uaXpp
bmdTVkdBdHRyaWJ1dGVzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChpc0lkQXR0cmli
dXRlTmFtZShuYW1lKSkgewotICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25z
KCktPnJlbW92ZUFsbEFuaW1hdGlvbkVsZW1lbnRzRnJvbVRhcmdldCh0aGlzKTsKKyAgICBpZiAo
aXNJZEF0dHJpYnV0ZU5hbWUobmFtZSkpCiAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS0+cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQodGhpcyk7Ci0g
ICAgfQogCiAgICAgLy8gQ2hhbmdlcyB0byB0aGUgc3R5bGUgYXR0cmlidXRlIGFyZSBwcm9jZXNz
ZWQgbGF6aWx5IChzZWUgRWxlbWVudDo6Z2V0QXR0cmlidXRlKCkgYW5kIHJlbGF0ZWQgbWV0aG9k
cyksCiAgICAgLy8gc28gd2UgZG9uJ3Qgd2FudCBjaGFuZ2VzIHRvIHRoZSBzdHlsZSBhdHRyaWJ1
dGUgdG8gcmVzdWx0IGluIGV4dHJhIHdvcmsgaGVyZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCShyZXZpc2lvbiAxMzU3MDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDE0
ICsxNDAsNiBAQCB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6aW52YWxpZGF0ZUFsbEluCiAgICAg
ICAgIEFTU0VSVCgoKml0KS0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSA9PSBlbGVtZW50KTsKICAg
ICAgICAgKCppdCktPnNoYWRvd1RyZWVFbGVtZW50KCktPnNldENvcnJlc3BvbmRpbmdFbGVtZW50
KDApOwogCi0gICAgICAgIC8vIFRoZSBzaGFkb3cgdHJlZSwgd2hpY2ggaXMgZXZlbnR1YWxseSBh
bmltYXRlZCwgaXMgbXV0YXRlZC4gSW4gb3JkZXIgdG8ga2VlcCB0aGUgYW5pbVZhbAotICAgICAg
ICAvLyBsb2dpYyBjb3JyZWN0LCB3ZSBoYXZlIHRvIHN0b3AgdGhlIGFuaW1hdGlvbiwgYW5kIHJl
c3RhcnQgaXQgb25jZSB0aGUgc2hhZG93IHRyZWUgaGFzCi0gICAgICAgIC8vIHJlY2xvbmVkLiBP
dGhlcndpc2Ugd2UgbWlzcyB0byBjYWxsIHN0b3BBbmltVmFsQW5pbWF0aW9uKCkgb24gdGhlIG9s
ZCBzaGFkb3cgdHJlZSBlbGVtZW50Ci0gICAgICAgIC8vIHdoaWNoIGxlYWRzIHRvIGFuIGFzc2Vy
dGlvbiBvbmNlIGdhcmJhZ2UgaXMgY29sbGVjdGVkLCBpZiB0aGUgYW5pbVZhbCBiaW5kaW5ncyBo
YXZlIGJlZW4KLSAgICAgICAgLy8gYWNjZXNzZWQgZnJvbSBKUy4gSXQgd291bGQgYWxzbyBhc3Nl
cnQgb24gdGhlIG5leHQgdXBkYXRlQW5pbWF0aW9ucygpIGNhbGwgYXMgdGhlIG5ldwotICAgICAg
ICAvLyBTVkdBbmltYXRlZFByb3BlcnR5IG9iamVjdCBoYXNuJ3QgYmVlbiBpbml0aWFsaXplZCB5
ZXQgKHVzaW5nIHN0YXJ0QW5pbVZhbEFuaW1hdGlvbikuCi0gICAgICAgIGVsZW1lbnQtPmRvY3Vt
ZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNG
cm9tVGFyZ2V0KGVsZW1lbnQpOwotCiAgICAgICAgIGlmIChTVkdVc2VFbGVtZW50KiBlbGVtZW50
ID0gKCppdCktPmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KCkpIHsKICAgICAgICAgICAgIEFTU0VS
VChlbGVtZW50LT5pbkRvY3VtZW50KCkpOwogICAgICAgICAgICAgZWxlbWVudC0+aW52YWxpZGF0
ZVNoYWRvd1RyZWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01J
TEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24v
U1ZHU01JTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzU3MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTIg
KzM3LDkgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJTTUlMVGltZUNvbnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0
ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1VSSVJl
ZmVyZW5jZS5oIgotI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CkBAIC0xNDIsOCArMTM5LDYgQEAgU1ZHU01JTEVsZW1lbnQ6On5TVkdTTUlMRWxlbWVu
dCgpCiAgICAgZGlzY29ubmVjdENvbmRpdGlvbnMoKTsKICAgICBpZiAobV90aW1lQ29udGFpbmVy
ICYmIG1fdGFyZ2V0RWxlbWVudCAmJiBoYXNWYWxpZEF0dHJpYnV0ZU5hbWUoKSkKICAgICAgICAg
bV90aW1lQ29udGFpbmVyLT51bnNjaGVkdWxlKHRoaXMsIG1fdGFyZ2V0RWxlbWVudCwgbV9hdHRy
aWJ1dGVOYW1lKTsKLSAgICBpZiAobV90YXJnZXRFbGVtZW50KQotICAgICAgICBkb2N1bWVudCgp
LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFuaW1hdGlvbkVsZW1lbnRGcm9tVGFyZ2V0
KHRoaXMsIG1fdGFyZ2V0RWxlbWVudCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgUXVhbGlmaWVkTmFt
ZSBjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKGNvbnN0IFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQsIGNv
bnN0IFN0cmluZyYgYXR0cmlidXRlTmFtZSkKQEAgLTIxNiw5ICsyMTEsNiBAQCBOb2RlOjpJbnNl
cnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR1NNCiAgICAgaWYgKG1faXNXYWl0aW5nRm9yRmly
c3RJbnRlcnZhbCkKICAgICAgICAgcmVzb2x2ZUZpcnN0SW50ZXJ2YWwoKTsKIAotICAgIC8vIEZv
cmNlIHJlc29sdXRpb24gb2YgdGFyZ2V0IGVsZW1lbnQKLSAgICBpZiAoIW1fdGFyZ2V0RWxlbWVu
dCkKLSAgICAgICAgdGFyZ2V0RWxlbWVudCgpOwogICAgIGlmIChtX3RpbWVDb250YWluZXIpCiAg
ICAgICAgIG1fdGltZUNvbnRhaW5lci0+bm90aWZ5SW50ZXJ2YWxzQ2hhbmdlZCgpOwogCkBAIC0y
MzgsMTEgKzIzMCw5IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW4K
ICAgICAgICAgUmVmUHRyPFNWR1NNSUxFbGVtZW50PiBrZWVwQWxpdmUodGhpcyk7CiAgICAgICAg
IGRpc2Nvbm5lY3RDb25kaXRpb25zKCk7CiAKLSAgICAgICAgLy8gQ2xlYXIgdGFyZ2V0IG5vdywg
YmVjYXVzZSBkaXNjb25uZWN0Q29uZGl0aW9ucyBjYWxscyB0YXJnZXRFbGVtZW50KCkgd2hpY2gg
d2lsbCByZWNyZWF0ZSB0aGUgdGFyZ2V0IGlmIHdlIHJlbW92ZWQgaXQgc29vbmVyLiAKLSAgICAg
ICAgaWYgKG1fdGFyZ2V0RWxlbWVudCkKLSAgICAgICAgICAgIHJlc2V0VGFyZ2V0RWxlbWVudChE
b05vdFJlc29sdmVOZXdUYXJnZXQpOwotCisgICAgICAgIHNldFRhcmdldEVsZW1lbnQoMCk7CiAg
ICAgICAgIHNldEF0dHJpYnV0ZU5hbWUoYW55UU5hbWUoKSk7CisgICAgICAgIGFuaW1hdGlvbkF0
dHJpYnV0ZUNoYW5nZWQoKTsKICAgICB9CiAKICAgICBTVkdFbGVtZW50OjpyZW1vdmVkRnJvbShy
b290UGFyZW50KTsKQEAgLTQyMSw3ICs0MTEsNiBAQCBib29sIFNWR1NNSUxFbGVtZW50Ojppc1N1
cHBvcnRlZEF0dHJpYnV0CiAgICAgICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVz
OjptaW5BdHRyKTsKICAgICAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6Om1h
eEF0dHIpOwogICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChTVkdOYW1lczo6YXR0cmli
dXRlTmFtZUF0dHIpOwotICAgICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChYTGlua05hbWVz
OjpocmVmQXR0cik7CiAgICAgfQogICAgIHJldHVybiBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmNvbnRh
aW5zPFF1YWxpZmllZE5hbWUsIFNWR0F0dHJpYnV0ZUhhc2hUcmFuc2xhdG9yPihhdHRyTmFtZSk7
CiB9CkBAIC00NzQsMTQgKzQ2Myw2IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQKICAgICAgICAgICAgIGVuZExpc3RDaGFuZ2VkKGVsYXBzZWQoKSk7CiAgICAgICAg
IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjphdHRyaWJ1dGVOYW1lQXR0cikgewogICAg
ICAgICAgICAgc2V0QXR0cmlidXRlTmFtZShjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKHRoaXMsIGZh
c3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmF0dHJpYnV0ZU5hbWVBdHRyKSkpOwotICAgICAgICAg
ICAgaWYgKG1fdGFyZ2V0RWxlbWVudCkgewotICAgICAgICAgICAgICAgIHJlc2V0VGFyZ2V0RWxl
bWVudCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIGlmIChhdHRyTmFtZS5tYXRjaGVzKFhMaW5rTmFtZXM6OmhyZWZBdHRyKSkgewotICAg
ICAgICAgICAgLy8gdGFyZ2V0RWxlbWVudCBpcyByZXNvbHZlZCBsYXppbHkgYnV0IHRhcmdldEVs
ZW1lbnQoKSB3aWxsIGhhbmRsZSBjYWxsaW5nIHRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKCkuCi0g
ICAgICAgICAgICBpZiAoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVs
ZW1lbnQoKSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25z
KCktPnJlbW92ZUFsbEFuaW1hdGlvbkVsZW1lbnRzRnJvbVRhcmdldCh0YXJnZXRFbGVtZW50KTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtNTYyLDU3ICs1NDMsMzAgQEAgdm9pZCBTVkdTTUlMRWxl
bWVudDo6c2V0QXR0cmlidXRlTmFtZShjbwogICAgICAgICAgICAgbV90aW1lQ29udGFpbmVyLT5z
Y2hlZHVsZSh0aGlzLCBtX3RhcmdldEVsZW1lbnQsIG1fYXR0cmlidXRlTmFtZSk7CiAgICAgfSBl
bHNlCiAgICAgICAgIG1fYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWU7Ci19CiAKLVNWR0Vs
ZW1lbnQqIFNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVtZW50KFJlc29sdmVUYXJnZXQgcmVzb2x2
ZVRhcmdldCkKLXsKKyAgICAvLyBPbmx5IGNsZWFyIHRoZSBhbmltYXRlZCB0eXBlLCBpZiB3ZSBo
YWQgYSB0YXJnZXQgYmVmb3JlLgogICAgIGlmIChtX3RhcmdldEVsZW1lbnQpCi0gICAgICAgIHJl
dHVybiBtX3RhcmdldEVsZW1lbnQ7Ci0KLSAgICBpZiAoIWluRG9jdW1lbnQoKSB8fCByZXNvbHZl
VGFyZ2V0ID09IERvTm90UmVzb2x2ZU5ld1RhcmdldCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBTdHJpbmcgaHJlZiA9IGdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7Ci0gICAg
Q29udGFpbmVyTm9kZSogdGFyZ2V0ID0gaHJlZi5pc0VtcHR5KCkgPyBwYXJlbnROb2RlKCkgOiBT
VkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYsIGRvY3VtZW50
KCkpOwotICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQtPmlzU1ZHRWxlbWVudCgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxTVkdFbGVtZW50Kj4odGFyZ2V0KTsKLSAgICB0YXJnZXRFbGVtZW50V2lsbENoYW5nZShtX3Rh
cmdldEVsZW1lbnQsIHRhcmdldEVsZW1lbnQpOwotICAgIG1fdGFyZ2V0RWxlbWVudCA9IHRhcmdl
dEVsZW1lbnQ7Ci0gICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5hZGRBbmlt
YXRpb25FbGVtZW50VG9UYXJnZXQodGhpcywgbV90YXJnZXRFbGVtZW50KTsKLSAgICByZXR1cm4g
bV90YXJnZXRFbGVtZW50OworICAgICAgICBjbGVhckFuaW1hdGVkVHlwZShtX3RhcmdldEVsZW1l
bnQpOwogfQogCi12b2lkIFNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVtZW50V2lsbENoYW5nZShT
VkdFbGVtZW50KiBjdXJyZW50VGFyZ2V0LCBTVkdFbGVtZW50KiBuZXdUYXJnZXQpCit2b2lkIFNW
R1NNSUxFbGVtZW50OjpzZXRUYXJnZXRFbGVtZW50KFNWR0VsZW1lbnQqIHRhcmdldCkKIHsKICAg
ICBpZiAobV90aW1lQ29udGFpbmVyICYmIGhhc1ZhbGlkQXR0cmlidXRlTmFtZSgpKSB7Ci0gICAg
ICAgIGlmIChjdXJyZW50VGFyZ2V0KQotICAgICAgICAgICAgbV90aW1lQ29udGFpbmVyLT51bnNj
aGVkdWxlKHRoaXMsIGN1cnJlbnRUYXJnZXQsIG1fYXR0cmlidXRlTmFtZSk7Ci0gICAgICAgIGlm
IChuZXdUYXJnZXQpCi0gICAgICAgICAgICBtX3RpbWVDb250YWluZXItPnNjaGVkdWxlKHRoaXMs
IG5ld1RhcmdldCwgbV9hdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgaWYgKG1fdGFyZ2V0RWxlbWVu
dCkKKyAgICAgICAgICAgIG1fdGltZUNvbnRhaW5lci0+dW5zY2hlZHVsZSh0aGlzLCBtX3Rhcmdl
dEVsZW1lbnQsIG1fYXR0cmlidXRlTmFtZSk7CisgICAgICAgIGlmICh0YXJnZXQpCisgICAgICAg
ICAgICBtX3RpbWVDb250YWluZXItPnNjaGVkdWxlKHRoaXMsIHRhcmdldCwgbV9hdHRyaWJ1dGVO
YW1lKTsKICAgICB9CiAKICAgICAvLyBPbmx5IGNsZWFyIHRoZSBhbmltYXRlZCB0eXBlLCBpZiB3
ZSBoYWQgYSB0YXJnZXQgYmVmb3JlLgotICAgIGlmIChjdXJyZW50VGFyZ2V0KQotICAgICAgICBj
bGVhckFuaW1hdGVkVHlwZShjdXJyZW50VGFyZ2V0KTsKKyAgICBpZiAobV90YXJnZXRFbGVtZW50
KQorICAgICAgICBjbGVhckFuaW1hdGVkVHlwZShtX3RhcmdldEVsZW1lbnQpOwogCiAgICAgLy8g
SWYgdGhlIGFuaW1hdGlvbiBzdGF0ZSBpcyBub3QgSW5hY3RpdmUsIGFsd2F5cyByZXNldCB0byBh
IGNsZWFyIHN0YXRlIGJlZm9yZSBsZWF2aW5nIHRoZSBvbGQgdGFyZ2V0IGVsZW1lbnQuCiAgICAg
aWYgKG1fYWN0aXZlU3RhdGUgIT0gSW5hY3RpdmUpCiAgICAgICAgIGVuZGVkQWN0aXZlSW50ZXJ2
YWwoKTsKLX0KLQotdm9pZCBTVkdTTUlMRWxlbWVudDo6cmVzZXRUYXJnZXRFbGVtZW50KFJlc29s
dmVUYXJnZXQgcmVzb2x2ZVRhcmdldCkKLXsKLSAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRl
bnNpb25zKCktPnJlbW92ZUFuaW1hdGlvbkVsZW1lbnRGcm9tVGFyZ2V0KHRoaXMsIG1fdGFyZ2V0
RWxlbWVudCk7Ci0gICAgdGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UobV90YXJnZXRFbGVtZW50LCAw
KTsKLSAgICBtX3RhcmdldEVsZW1lbnQgPSAwOwotCi0gICAgLy8gSW1tZWRpYXRlbHkgcmVzb2x2
ZSB0aGUgbmV3IHRhcmdldEVsZW1lbnQgKGFuZCBjYWxsIHRhcmdldEVsZW1lbnRXaWxsQ2hhbmdl
IGlmIG5lZWRlZCkgaW5zdGVhZCBvZiBkb2luZyBpdCBsYXppbHkuCi0gICAgaWYgKHJlc29sdmVU
YXJnZXQgPT0gUmVzb2x2ZU5ld1RhcmdldCkKLSAgICAgICAgdGFyZ2V0RWxlbWVudCgpOwogCi0g
ICAgYW5pbWF0aW9uQXR0cmlidXRlQ2hhbmdlZCgpOworICAgIG1fdGFyZ2V0RWxlbWVudCA9IHRh
cmdldDsKIH0KIAogU01JTFRpbWUgU1ZHU01JTEVsZW1lbnQ6OmVsYXBzZWQoKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAkocmV2
aXNpb24gMTM1NzAxKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw2IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotZW51bSBSZXNvbHZlVGFyZ2V0IHsgRG9Ob3RSZXNvbHZlTmV3VGFyZ2V0LCBSZXNv
bHZlTmV3VGFyZ2V0IH07Ci0KIGNsYXNzIENvbmRpdGlvbkV2ZW50TGlzdGVuZXI7CiBjbGFzcyBT
TUlMVGltZUNvbnRhaW5lcjsKIApAQCAtNTgsOCArNTYsNyBAQCBwdWJsaWM6CiAKICAgICBTTUlM
VGltZUNvbnRhaW5lciogdGltZUNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fdGltZUNvbnRh
aW5lci5nZXQoKTsgfQogCi0gICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudChSZXNvbHZlVGFy
Z2V0ID0gUmVzb2x2ZU5ld1RhcmdldCk7Ci0gICAgdm9pZCByZXNldFRhcmdldEVsZW1lbnQoUmVz
b2x2ZVRhcmdldCA9IFJlc29sdmVOZXdUYXJnZXQpOworICAgIFNWR0VsZW1lbnQqIHRhcmdldEVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEVsZW1lbnQ7IH0KICAgICBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVOYW1l
OyB9CiAKICAgICB2b2lkIGJlZ2luQnlMaW5rQWN0aXZhdGlvbigpOwpAQCAtMTEwLDcgKzEwNyw3
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc0FkZGl0aXZlKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCByZXNldEFuaW1hdGVkVHlwZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJBbmltYXRlZFR5cGUoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjbGVhckFuaW1hdGVkVHlwZShTVkdFbGVtZW50KikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBhcHBseVJlc3VsdHNUb1RhcmdldCgpID0gMDsKIAogcHJvdGVjdGVkOgpAQCAt
MTIwLDcgKzExNyw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldEluYWN0aXZlKCkgeyBtX2Fj
dGl2ZVN0YXRlID0gSW5hY3RpdmU7IH0KIAogICAgIC8vIFN1Yi1jbGFzc2VzIG1heSBuZWVkIHRv
IHRha2UgYWN0aW9uIHdoZW4gdGhlIHRhcmdldCBpcyBjaGFuZ2VkLgotICAgIHZpcnR1YWwgdm9p
ZCB0YXJnZXRFbGVtZW50V2lsbENoYW5nZShTVkdFbGVtZW50KiBjdXJyZW50VGFyZ2V0LCBTVkdF
bGVtZW50KiBuZXdUYXJnZXQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRUYXJnZXRFbGVtZW50KFNW
R0VsZW1lbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0cmlidXRlTmFtZShjb25zdCBRdWFs
aWZpZWROYW1lJik7CiAKIHByaXZhdGU6CkBAIC0xOTUsNyArMTkyLDcgQEAgcHJpdmF0ZToKICAg
ICBmbG9hdCBjYWxjdWxhdGVBbmltYXRpb25QZXJjZW50QW5kUmVwZWF0KFNNSUxUaW1lIGVsYXBz
ZWQsIHVuc2lnbmVkJiByZXBlYXQpIGNvbnN0OwogICAgIFNNSUxUaW1lIGNhbGN1bGF0ZU5leHRQ
cm9ncmVzc1RpbWUoU01JTFRpbWUgZWxhcHNlZCkgY29uc3Q7CiAKLSAgICBtdXRhYmxlIFNWR0Vs
ZW1lbnQqIG1fdGFyZ2V0RWxlbWVudDsKKyAgICBTVkdFbGVtZW50KiBtX3RhcmdldEVsZW1lbnQ7
CiAKICAgICBWZWN0b3I8Q29uZGl0aW9uPiBtX2NvbmRpdGlvbnM7CiAgICAgYm9vbCBtX2NvbmRp
dGlvbnNDb25uZWN0ZWQ7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzU5NDYpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0xMS0yNyAg
UGhpbGlwIFJvZ2VycyAgPHBkckBnb29nbGUuY29tPgorCisgICAgICAgIFJlbW92ZSByZWR1bmRh
bnQgU1ZHIGFuaW1hdGlvbiB0YXJnZXQgdHJhY2tpbmcgZnJhbWV3b3JrLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNjU1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlv
biBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBw
ZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgKiBzdmcv
YW5pbWF0aW9ucy9zdmctYW5pbWF0aW9uLW9yZGVyLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHN2Zy9hbmltYXRpb25zL3N2Zy1hbmltYXRpb24tb3JkZXIuaHRtbDogQWRkZWQuCisK
IDIwMTItMTEtMjcgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkLCBsYW5kIHVwZGF0ZWQgUXQgcmVzdWx0cyBhZnRlciB0cmFjayBsaW1pdGVyIHJl
bW92YWwuCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zdmctYW5pbWF0aW9uLW9y
ZGVyLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlv
bnMvc3ZnLWFuaW1hdGlvbi1vcmRlci1leHBlY3RlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc3ZnLWFuaW1hdGlvbi1vcmRlci1leHBlY3RlZC5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24i
PlRlc3QgdGhhdCB0aGUgb3JkZXIgb2YgZWxlbWVudHMgZG9lcyBub3QgYWZmZWN0IGFuaW1hdGlv
bnMuPC9wPgorPHN2ZyBpZD0ic3ZnIiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCI+CisgIDxyZWN0
IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIiBmaWxsPSJncmVlbiIvPgorPC9z
dmc+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9z
dmctYW5pbWF0aW9uLW9yZGVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2Fu
aW1hdGlvbnMvc3ZnLWFuaW1hdGlvbi1vcmRlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc3ZnLWFuaW1hdGlvbi1vcmRlci5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDMwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBI
VE1MLy9FTiI+Cis8aHRtbD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBydW5UZXN0KCkgeworICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisKKyAg
Ly8gRGVmZXIgdG8gYWxsb3cgYW5pbWF0aW9ucyB0byBydW4uCisgIHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7CisgIH0sIDApOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3Qo
KSI+Cis8cCBpZD0iZGVzY3JpcHRpb24iPlRlc3QgdGhhdCB0aGUgb3JkZXIgb2YgZWxlbWVudHMg
ZG9lcyBub3QgYWZmZWN0IGFuaW1hdGlvbnMuPC9wPgorPHN2ZyBpZD0ic3ZnIiB3aWR0aD0iMzAw
IiBoZWlnaHQ9IjMwMCI+CisgIDwhLS0gVGhpcyByZWQgc3F1YXJlIHNob3VsZCBiZSBjb3ZlcmVk
IHVwIGlmIHdlIHBhc3MuIC0tPgorICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWln
aHQ9IjEwMCIgZmlsbD0icmVkIi8+CisKKyAgPCEtLSBBbmltYXRlIG9uZSBncmVlbiByZWN0YW5n
bGUgb3ZlciB0aGUgdG9wIGhhbGYgb2YgdGhlIHJlZCBzcXVhcmUuIC0tPgorICA8cmVjdCBpZD0i
cmVjdDEiICB4PSItMTAwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUwIiBmaWxsPSJncmVl
biIgLz4KKyAgPHNldCBhdHRyaWJ1dGVOYW1lPSJ4IiB4bGluazpocmVmPSIjcmVjdDEiIHRvPSIw
Ii8+CisKKyAgPCEtLSBBbmltYXRlIGEgc2Vjb25kIGdyZWVuIHJlY3RhbmdsZSBvdmVyIHRoZSB0
b3AgaGFsZiBvZiB0aGUgcmVkIHNxdWFyZS4gLS0+CisgIDxzZXQgYXR0cmlidXRlTmFtZT0ieCIg
eGxpbms6aHJlZj0iI3JlY3QyIiB0bz0iMCIvPgorICA8cmVjdCBpZD0icmVjdDIiICB4PSItMTAw
IiB5PSI1MCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI1MCIgZmlsbD0iZ3JlZW4iIC8+Cis8L3N2Zz4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176582</attachid>
            <date>2012-11-28 14:43:36 -0800</date>
            <delta_ts>2012-12-01 00:25:40 -0800</delta_ts>
            <desc>Remove redundant SVG animation target tracking framework.</desc>
            <filename>102655.3.patch</filename>
            <type>text/plain</type>
            <size>25819</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjA1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDEyLTExLTI4ICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHJlZHVuZGFudCBTVkcg
YW5pbWF0aW9uIHRhcmdldCB0cmFja2luZyBmcmFtZXdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI2NTUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHVuaWZpZXMgb3VyIGFuaW1h
dGlvbiB0YXJnZXQgdHJhY2tpbmcgc3lzdGVtIGFuZCByZWd1bGFyIHRhcmdldCB0cmFja2luZyBz
eXN0ZW0uCisgICAgICAgIFRoaXMgc2ltcGxpZmllcyB0aGUgY29kZSwgZml4ZXMgYSBidWcsIGFu
ZCBjbGVhbnMgdXAgYSBoaXN0b3JpY2FsbHkgc2VjdXJpdHktc2Vuc2l0aXZlIGFyZWEuCisKKyAg
ICAgICAgQmFja2dyb3VuZDogV2hlbiA8dXNlPiwgPG1wYXRoPiwgPGFuaW1hdGU+LCBldGMuIHJl
ZmVyZW5jZSBhbm90aGVyIGVsZW1lbnQgdXNpbmcKKyAgICAgICAgeGxpbms6aHJlZj0iI2lkIiwg
d2UgbmVlZCB0byB0cmFjayB3aGVuICNpZCBjaGFuZ2VzIHRvICNvdGhlcklkLCB3aGVuICNpZCBp
cyByZW1vdmVkLCBldGMuCisgICAgICAgIFRoaXMgYm9va2tlZXBpbmcgb2YgZWxlbWVudCAtPiB0
YXJnZXQgaXMgZG9uZSBpbiBTVkdEb2N1bWVudEV4dGVuc2lvbnMuIEFkZGl0aW9uYWxseSwgd2hl
bgorICAgICAgICBhIHRhcmdldCBjaGFuZ2VzIHRoYXQgY2F1c2VzIGxheW91dCAoZS5nLiwgcmVj
dC54IGlzIGNoYW5nZWQpLCBhbGwgZGVwZW5kZW50IGVsZW1lbnRzIHdpdGgKKyAgICAgICAgcmVu
ZGVyZXJzIGFyZSBub3RpZmllZCAoPGFuaW1hdGU+IGhhcyBubyByZW5kZXJlciBhbmQgd2lsbCBu
b3QgdXNlIHRoaXMuKQorCisgICAgICAgIFByZXZpb3VzbHksIHhsaW5rOmhyZWYgY2hhbmdlcyB3
ZXJlIGxhemlseSByZXNvbHZlZCB3aGVuIHRhcmdldEVsZW1lbnQoKSB3YXMgY2FsbGVkLCB0YXJn
ZXQKKyAgICAgICAgY2hhbmdlcyB3ZXJlIHRyYWNrZWQgdXNpbmcgdGhlIGFuaW1hdGlvbiB0cmFj
a2luZyBmcmFtZXdvcmssIGFuZCBwZW5kaW5nIHRhcmdldHMgZGlkIG5vdAorICAgICAgICB3b3Jr
IChlLmcuLCA8YW5pbWF0ZSB4bGluazpocmVmPSIjcCI+PCEtLWFuaW1hdGUgaXMgbm93IHBlbmRp
bmcgI3AgLS0+PHJlY3QgaWQ9InAiLz4pLgorCisgICAgICAgIEFmdGVyIHRoaXMgcGF0Y2gsIHdl
IG5vIGxvbmdlciBsYXppbHkgcmVzb2x2ZSB0YXJnZXRFbGVtZW50KCkgYnV0IGluc3RlYWQgY2hh
bmdlIGl0IHdoZW4KKyAgICAgICAgb3VyIHhsaW5rOmhyZWYgYXR0cmlidXRlIGNoYW5nZXMuIElu
c3RlYWQgb2YgdXNpbmcgdGhlIGFuaW1hdGlvbiB0cmFja2luZyBmcmFtZXdvcmsgaW4KKyAgICAg
ICAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zLCB3ZSBub3cgdXNlIHRoZSByZWd1bGFyIHRhcmdldCB0
cmFja2luZyBmcmFtZXdvcmsuIExhc3RseSwgYnkgdXNpbmcKKyAgICAgICAgdGhlIHJlZ3VsYXIg
dGFyZ2V0IHRyYWNraW5nIGZyYW1ld29yayB3ZSBhcmUgYWJsZSB0byBob29rIGludG8gdGhlIHBl
bmRpbmcgcmVzb3VyY2UgaGFuZGxpbmcKKyAgICAgICAgd2hpY2ggZml4ZXMgYSBidWcgKHNlZSB0
aGUgdGVzdC4pCisKKyAgICAgICAgQSB0ZXN0IGhhcyBiZWVuIGFkZGVkIHRvIHRlc3QgdGhhdCB0
aGUgb3JkZXIgb2YgYW5pbWF0aW9uIGVsZW1lbnRzIGRvZXMgbm90IG1hdHRlci4KKyAgICAgICAg
VGVzdDogc3ZnL2FuaW1hdGlvbnMvc3ZnLWFuaW1hdGlvbi1vcmRlci5odG1sCisKKyAgICAgICAg
KiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZUVsZW1lbnQ6OnNldFRhcmdldEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZSk6CisgICAgICAg
ICogc3ZnL1NWR0FuaW1hdGVFbGVtZW50Lmg6CisgICAgICAgIChTVkdBbmltYXRlRWxlbWVudCk6
CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0QXR0cmlidXRlVHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5hbWUpOgorICAgICAgICAq
IHN2Zy9TVkdBbmltYXRpb25FbGVtZW50Lmg6CisgICAgICAgIChTVkdBbmltYXRpb25FbGVtZW50
KToKKyAgICAgICAgKiBzdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6flNWR0RvY3VtZW50RXh0ZW5zaW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBzdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmg6
CisgICAgICAgIChTVkdEb2N1bWVudEV4dGVuc2lvbnMpOgorICAgICAgICAqIHN2Zy9TVkdFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6On5TVkdFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0VsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdFbGVt
ZW50SW5zdGFuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudEluc3RhbmNlOjpp
bnZhbGlkYXRlQWxsSW5zdGFuY2VzT2ZFbGVtZW50KToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9u
L1NWR1NNSUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Ojp+
U1ZHU01JTEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTTUlMRWxlbWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU01JTEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1NNSUxFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U01JTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVt
ZW50OjpzZXRBdHRyaWJ1dGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50
OjpzZXRUYXJnZXRFbGVtZW50KToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVt
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVt
ZW50Ojp0YXJnZXRFbGVtZW50KToKKyAgICAgICAgKFNWR1NNSUxFbGVtZW50KToKKwogMjAxMi0x
MS0yOCAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0No
cm9taXVtXVtXaW5dIFJlbW92ZSBlbnN1cmVGb250TG9hZGVkIGZyb20gUGxhdGZvcm1TdXBwb3J0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAJKHJldmlzaW9u
IDEzNjAwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5NiwxNiArMzk2LDI5IEBAIGZsb2F0IFNWR0FuaW1hdGVFbGVtZW50
OjpjYWxjdWxhdGVEaXN0YW4KICAgICByZXR1cm4gZW5zdXJlQW5pbWF0b3IoKS0+Y2FsY3VsYXRl
RGlzdGFuY2UoZnJvbVN0cmluZywgdG9TdHJpbmcpOwogfQogCi12b2lkIFNWR0FuaW1hdGVFbGVt
ZW50Ojp0YXJnZXRFbGVtZW50V2lsbENoYW5nZShTVkdFbGVtZW50KiBjdXJyZW50VGFyZ2V0LCBT
VkdFbGVtZW50KiBuZXdUYXJnZXQpCit2b2lkIFNWR0FuaW1hdGVFbGVtZW50OjpzZXRUYXJnZXRF
bGVtZW50KFNWR0VsZW1lbnQqIHRhcmdldCkKIHsKLSAgICBTVkdBbmltYXRpb25FbGVtZW50Ojp0
YXJnZXRFbGVtZW50V2lsbENoYW5nZShjdXJyZW50VGFyZ2V0LCBuZXdUYXJnZXQpOworICAgIFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEVsZW1lbnQodGFyZ2V0KTsKIAogICAgIEFTU0VS
VCghbV9hbmltYXRlZFR5cGUpOwogICAgIG1fZnJvbVR5cGUuY2xlYXIoKTsKICAgICBtX3RvVHlw
ZS5jbGVhcigpOwogICAgIG1fdG9BdEVuZE9mRHVyYXRpb25UeXBlLmNsZWFyKCk7CiAgICAgbV9h
bmltYXRvci5jbGVhcigpOwotICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgPSBuZXdUYXJnZXQg
PyBkZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlwZShuZXdUYXJnZXQpIDogQW5pbWF0ZWRTdHJp
bmc7CisgICAgbV9hbmltYXRlZFByb3BlcnR5VHlwZSA9IHRhcmdldCA/IGRldGVybWluZUFuaW1h
dGVkUHJvcGVydHlUeXBlKHRhcmdldCkgOiBBbmltYXRlZFN0cmluZzsKK30KKwordm9pZCBTVkdB
bmltYXRlRWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
aWJ1dGVOYW1lKQoreworICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5hbWUo
YXR0cmlidXRlTmFtZSk7CisKKyAgICAvLyBGSVhNRTogdW5pZnkgd2l0aCBzZXRUYXJnZXRFbGVt
ZW50LgorICAgIEFTU0VSVCghbV9hbmltYXRlZFR5cGUpOworICAgIG1fZnJvbVR5cGUuY2xlYXIo
KTsKKyAgICBtX3RvVHlwZS5jbGVhcigpOworICAgIG1fdG9BdEVuZE9mRHVyYXRpb25UeXBlLmNs
ZWFyKCk7CisgICAgbV9hbmltYXRvci5jbGVhcigpOworICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eVR5
cGUgPSB0YXJnZXRFbGVtZW50KCkgPyBkZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlwZSh0YXJn
ZXRFbGVtZW50KCkpIDogQW5pbWF0ZWRTdHJpbmc7CiB9CiAKIFNWR0FuaW1hdGVkVHlwZUFuaW1h
dG9yKiBTVkdBbmltYXRlRWxlbWVudDo6ZW5zdXJlQW5pbWF0b3IoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKHJldmlzaW9uIDEzNjAwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1
Myw4IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGZsb2F0IGNhbGN1bGF0ZURpc3RhbmNlKGNv
bnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZyk7CiAgICAgdmly
dHVhbCBib29sIGlzQWRkaXRpdmUoKSBjb25zdCBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9p
ZCB0YXJnZXRFbGVtZW50V2lsbENoYW5nZShTVkdFbGVtZW50KiBjdXJyZW50VGFyZ2V0LCBTVkdF
bGVtZW50KiBvbGRUYXJnZXQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRUYXJnZXRF
bGVtZW50KFNWR0VsZW1lbnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0cmli
dXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJikgT1ZFUlJJREU7CiAKICAgICBBbmltYXRlZFBy
b3BlcnR5VHlwZSBtX2FuaW1hdGVkUHJvcGVydHlUeXBlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzYwMDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxOSw3ICszMTksNyBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldEF0dHJpYnV0ZVR5
CiAgICAgICAgIG1fYXR0cmlidXRlVHlwZSA9IEF0dHJpYnV0ZVR5cGVYTUw7CiAgICAgZWxzZQog
ICAgICAgICBtX2F0dHJpYnV0ZVR5cGUgPSBBdHRyaWJ1dGVUeXBlQXV0bzsKLSAgICBjaGVja0lu
dmFsaWRDU1NBdHRyaWJ1dGVUeXBlKHRhcmdldEVsZW1lbnQoRG9Ob3RSZXNvbHZlTmV3VGFyZ2V0
KSk7CisgICAgY2hlY2tJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSh0YXJnZXRFbGVtZW50KCkpOwog
fQogCiBTdHJpbmcgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dG9WYWx1ZSgpIGNvbnN0CkBAIC02Nzcs
MTggKzY3NywxNiBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmRldGVybWluZVByb3BlCiAg
ICAgICAgIG1fdG9Qcm9wZXJ0eVZhbHVlVHlwZSA9IEluaGVyaXRWYWx1ZTsKIH0KIAotdm9pZCBT
VkdBbmltYXRpb25FbGVtZW50Ojp0YXJnZXRFbGVtZW50V2lsbENoYW5nZShTVkdFbGVtZW50KiBj
dXJyZW50VGFyZ2V0LCBTVkdFbGVtZW50KiBuZXdUYXJnZXQpCit2b2lkIFNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OnNldFRhcmdldEVsZW1lbnQoU1ZHRWxlbWVudCogdGFyZ2V0KQogewotICAgIFNWR1NN
SUxFbGVtZW50Ojp0YXJnZXRFbGVtZW50V2lsbENoYW5nZShjdXJyZW50VGFyZ2V0LCBuZXdUYXJn
ZXQpOwotCi0gICAgY2hlY2tJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZShuZXdUYXJnZXQpOworICAg
IFNWR1NNSUxFbGVtZW50OjpzZXRUYXJnZXRFbGVtZW50KHRhcmdldCk7CisgICAgY2hlY2tJbnZh
bGlkQ1NTQXR0cmlidXRlVHlwZSh0YXJnZXQpOwogfQogCiB2b2lkIFNWR0FuaW1hdGlvbkVsZW1l
bnQ6OnNldEF0dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkK
IHsKICAgICBTVkdTTUlMRWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKTsK
LQotICAgIGNoZWNrSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUodGFyZ2V0RWxlbWVudChEb05vdFJl
c29sdmVOZXdUYXJnZXQpKTsKKyAgICBjaGVja0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKHRhcmdl
dEVsZW1lbnQoKSk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2hlY2tJbnZhbGlk
Q1NTQXR0cmlidXRlVHlwZShTVkdFbGVtZW50KiB0YXJnZXQpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHJldmlzaW9uIDEzNjAwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3
ICsxOTcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgQW5pbWF0ZWRQcm9wZXJ0eVZhbHVlVHlwZSBtX2Zy
b21Qcm9wZXJ0eVZhbHVlVHlwZTsKICAgICBBbmltYXRlZFByb3BlcnR5VmFsdWVUeXBlIG1fdG9Q
cm9wZXJ0eVZhbHVlVHlwZTsKIAotICAgIHZpcnR1YWwgdm9pZCB0YXJnZXRFbGVtZW50V2lsbENo
YW5nZShTVkdFbGVtZW50KiBjdXJyZW50VGFyZ2V0LCBTVkdFbGVtZW50KiBvbGRUYXJnZXQpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRUYXJnZXRFbGVtZW50KFNWR0VsZW1lbnQqKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZp
ZWROYW1lJikgT1ZFUlJJREU7CiAgICAgYm9vbCBoYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1faGFzSW52YWxpZENTU0F0dHJpYnV0ZVR5cGU7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVBbmltYXRpb25Nb2RlKCk7CkBAIC0yMDYsNyArMjA3LDYgQEAgcHJv
dGVjdGVkOgogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25BdHRyaWJ1dGVD
aGFuZ2VkKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEF0dHJpYnV0ZU5hbWUoY29u
c3QgUXVhbGlmaWVkTmFtZSYpIE9WRVJSSURFOwogICAgIHZvaWQgc2V0QXR0cmlidXRlVHlwZShj
b25zdCBBdG9taWNTdHJpbmcmKTsKIAogICAgIHZvaWQgY2hlY2tJbnZhbGlkQ1NTQXR0cmlidXRl
VHlwZShTVkdFbGVtZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRF
eHRlbnNpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1l
bnRFeHRlbnNpb25zLmNwcAkocmV2aXNpb24gMTM2MDA5KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYg
QEAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpTVkdEb2N1bWVudEV4dGVucwogCiBTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6On5TVkdEb2N1bWVudEV4dGVuc2lvbnMoKQogewotICAgIGRlbGV0ZUFsbFZh
bHVlcyhtX2FuaW1hdGVkRWxlbWVudHMpOwogICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3BlbmRpbmdS
ZXNvdXJjZXMpOwogICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3BlbmRpbmdSZXNvdXJjZXNGb3JSZW1v
dmFsKTsKIH0KQEAgLTEzMyw1OCArMTMyLDYgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OmRpc3BhdGNoU1ZHTAogICAgIH0KIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFk
ZEFuaW1hdGlvbkVsZW1lbnRUb1RhcmdldChTVkdTTUlMRWxlbWVudCogYW5pbWF0aW9uRWxlbWVu
dCwgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkKLXsKLSAgICBBU1NFUlQodGFyZ2V0RWxlbWVu
dCk7Ci0gICAgQVNTRVJUKGFuaW1hdGlvbkVsZW1lbnQpOwotCi0gICAgaWYgKEhhc2hTZXQ8U1ZH
U01JTEVsZW1lbnQqPiogYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBtX2FuaW1hdGVkRWxl
bWVudHMuZ2V0KHRhcmdldEVsZW1lbnQpKSB7Ci0gICAgICAgIGFuaW1hdGlvbkVsZW1lbnRzRm9y
VGFyZ2V0LT5hZGQoYW5pbWF0aW9uRWxlbWVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0
ID0gbmV3IEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPjsKLSAgICBhbmltYXRpb25FbGVtZW50c0Zv
clRhcmdldC0+YWRkKGFuaW1hdGlvbkVsZW1lbnQpOwotICAgIG1fYW5pbWF0ZWRFbGVtZW50cy5z
ZXQodGFyZ2V0RWxlbWVudCwgYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQpOwotfQotCi12b2lk
IFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQo
U1ZHU01JTEVsZW1lbnQqIGFuaW1hdGlvbkVsZW1lbnQsIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1l
bnQpCi17Ci0gICAgQVNTRVJUKHRhcmdldEVsZW1lbnQpOwotICAgIEFTU0VSVChhbmltYXRpb25F
bGVtZW50KTsKLQotICAgIEhhc2hNYXA8U1ZHRWxlbWVudCosIEhhc2hTZXQ8U1ZHU01JTEVsZW1l
bnQqPiogPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGVkRWxlbWVudHMuZmluZCh0YXJnZXRFbGVt
ZW50KTsKLSAgICBBU1NFUlQoaXQgIT0gbV9hbmltYXRlZEVsZW1lbnRzLmVuZCgpKTsKLSAgICAK
LSAgICBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0
ID0gaXQtPnZhbHVlOwotICAgIEFTU0VSVCghYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQtPmlz
RW1wdHkoKSk7Ci0KLSAgICBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldC0+cmVtb3ZlKGFuaW1h
dGlvbkVsZW1lbnQpOwotICAgIGlmIChhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldC0+aXNFbXB0
eSgpKSB7Ci0gICAgICAgIG1fYW5pbWF0ZWRFbGVtZW50cy5yZW1vdmUoaXQpOwotICAgICAgICBk
ZWxldGUgYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQ7Ci0gICAgfQotfQotCi12b2lkIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNGcm9tVGFyZ2V0KFNW
R0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpCi17Ci0gICAgQVNTRVJUKHRhcmdldEVsZW1lbnQpOwot
ICAgIEhhc2hNYXA8U1ZHRWxlbWVudCosIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiogPjo6aXRl
cmF0b3IgaXQgPSBtX2FuaW1hdGVkRWxlbWVudHMuZmluZCh0YXJnZXRFbGVtZW50KTsKLSAgICBp
ZiAoaXQgPT0gbV9hbmltYXRlZEVsZW1lbnRzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0ID0g
aXQtPnZhbHVlOwotICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+IHRvQmVSZXNldDsKLQotICAg
IEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0gYW5pbWF0aW9uRWxlbWVu
dHNGb3JUYXJnZXQtPmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+Ojpp
dGVyYXRvciBpdCA9IGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0LT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIHRvQmVSZXNldC5hcHBlbmQoKml0KTsKLQotICAgIFZlY3RvcjxT
VkdTTUlMRWxlbWVudCo+OjppdGVyYXRvciB2ZWN0b3JFbmQgPSB0b0JlUmVzZXQuZW5kKCk7Ci0g
ICAgZm9yIChWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPjo6aXRlcmF0b3IgdmVjdG9ySXQgPSB0b0Jl
UmVzZXQuYmVnaW4oKTsgdmVjdG9ySXQgIT0gdmVjdG9yRW5kOyArK3ZlY3Rvckl0KQotICAgICAg
ICAoKnZlY3Rvckl0KS0+cmVzZXRUYXJnZXRFbGVtZW50KCk7Ci19Ci0KIC8vIEZJWE1FOiBDYWxs
ZXJzIHNob3VsZCBwcm9iYWJseSB1c2UgU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVyTGlu
ZU51bWJlcigpCiBzdGF0aWMgaW50IHBhcnNlckxpbmVOdW1iZXIoRG9jdW1lbnQqIGRvY3VtZW50
KQogewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaAko
cmV2aXNpb24gMTM2MDA5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5z
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMCArNTksNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBwYXVzZUFuaW1hdGlvbnMoKTsKICAgICB2b2lkIHVucGF1c2VBbmltYXRpb25zKCk7CiAgICAg
dm9pZCBkaXNwYXRjaFNWR0xvYWRFdmVudFRvT3V0ZXJtb3N0U1ZHRWxlbWVudHMoKTsKLSAgICAK
LSAgICB2b2lkIGFkZEFuaW1hdGlvbkVsZW1lbnRUb1RhcmdldChTVkdTTUlMRWxlbWVudCosIFNW
R0VsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbkVsZW1lbnRGcm9tVGFyZ2V0KFNW
R1NNSUxFbGVtZW50KiwgU1ZHRWxlbWVudCopOwotICAgIHZvaWQgcmVtb3ZlQWxsQW5pbWF0aW9u
RWxlbWVudHNGcm9tVGFyZ2V0KFNWR0VsZW1lbnQqKTsKIAogICAgIHZvaWQgcmVwb3J0V2Fybmlu
Zyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHJlcG9ydEVycm9yKGNvbnN0IFN0cmluZyYpOwpA
QCAtODMsNyArNzksNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIERvY3VtZW50KiBtX2RvY3Vt
ZW50OyAvLyB3ZWFrIHJlZmVyZW5jZQogICAgIEhhc2hTZXQ8U1ZHU1ZHRWxlbWVudCo+IG1fdGlt
ZUNvbnRhaW5lcnM7IC8vIEZvciBTVkcgMS4yIHN1cHBvcnQgdGhpcyB3aWxsIG5lZWQgdG8gYmUg
bWFkZSBtb3JlIGdlbmVyYWwuCi0gICAgSGFzaE1hcDxTVkdFbGVtZW50KiwgSGFzaFNldDxTVkdT
TUlMRWxlbWVudCo+KiA+IG1fYW5pbWF0ZWRFbGVtZW50czsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQogICAgIEhhc2hTZXQ8U1ZHRm9udEZhY2VFbGVtZW50Kj4gbV9zdmdGb250RmFjZUVsZW1lbnRz
OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzYw
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgzLDcgKzgzLDYgQEAgU1ZHRWxlbWVudDo6flNWR0VsZW1lbnQoKQogICAgICAgICByYXJl
RGF0YU1hcC5yZW1vdmUoaXQpOwogICAgIH0KICAgICBBU1NFUlQoZG9jdW1lbnQoKSk7Ci0gICAg
ZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVBbGxBbmltYXRpb25FbGVt
ZW50c0Zyb21UYXJnZXQodGhpcyk7CiAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9u
cygpLT5yZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldCh0aGlzKTsKIH0KIApAQCAt
MTgzLDcgKzE4Miw2IEBAIHZvaWQgU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm8K
ICAgICBTdHlsZWRFbGVtZW50OjpyZW1vdmVkRnJvbShyb290UGFyZW50KTsKIAogICAgIGlmICh3
YXNJbkRvY3VtZW50KSB7Ci0gICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS0+cmVtb3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNGcm9tVGFyZ2V0KHRoaXMpOwogICAgICAgICBk
b2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVu
Y2VzRm9yVGFyZ2V0KHRoaXMpOwogICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNp
b25zKCktPnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyh0aGlzKTsKICAgICB9CkBA
IC01MzcsMTAgKzUzNSw4IEBAIHZvaWQgU1ZHRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChjb25z
dAogewogICAgIFN0eWxlZEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQobmFtZSwgbmV3VmFsdWUp
OwogCi0gICAgaWYgKGlzSWRBdHRyaWJ1dGVOYW1lKG5hbWUpKSB7Ci0gICAgICAgIGRvY3VtZW50
KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNGcm9t
VGFyZ2V0KHRoaXMpOworICAgIGlmIChpc0lkQXR0cmlidXRlTmFtZShuYW1lKSkKICAgICAgICAg
ZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVBbGxFbGVtZW50UmVmZXJl
bmNlc0ZvclRhcmdldCh0aGlzKTsKLSAgICB9CiAKICAgICAvLyBDaGFuZ2VzIHRvIHRoZSBzdHls
ZSBhdHRyaWJ1dGUgYXJlIHByb2Nlc3NlZCBsYXppbHkgKHNlZSBFbGVtZW50OjpnZXRBdHRyaWJ1
dGUoKSBhbmQgcmVsYXRlZCBtZXRob2RzKSwKICAgICAvLyBzbyB3ZSBkb24ndCB3YW50IGNoYW5n
ZXMgdG8gdGhlIHN0eWxlIGF0dHJpYnV0ZSB0byByZXN1bHQgaW4gZXh0cmEgd29yayBoZXJlLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAJKHJldmlzaW9u
IDEzNjAwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDAsMTQgKzE0MCw2IEBAIHZvaWQgU1ZHRWxlbWVudEluc3RhbmNl
OjppbnZhbGlkYXRlQWxsSW4KICAgICAgICAgQVNTRVJUKCgqaXQpLT5jb3JyZXNwb25kaW5nRWxl
bWVudCgpID09IGVsZW1lbnQpOwogICAgICAgICAoKml0KS0+c2hhZG93VHJlZUVsZW1lbnQoKS0+
c2V0Q29ycmVzcG9uZGluZ0VsZW1lbnQoMCk7CiAKLSAgICAgICAgLy8gVGhlIHNoYWRvdyB0cmVl
LCB3aGljaCBpcyBldmVudHVhbGx5IGFuaW1hdGVkLCBpcyBtdXRhdGVkLiBJbiBvcmRlciB0byBr
ZWVwIHRoZSBhbmltVmFsCi0gICAgICAgIC8vIGxvZ2ljIGNvcnJlY3QsIHdlIGhhdmUgdG8gc3Rv
cCB0aGUgYW5pbWF0aW9uLCBhbmQgcmVzdGFydCBpdCBvbmNlIHRoZSBzaGFkb3cgdHJlZSBoYXMK
LSAgICAgICAgLy8gcmVjbG9uZWQuIE90aGVyd2lzZSB3ZSBtaXNzIHRvIGNhbGwgc3RvcEFuaW1W
YWxBbmltYXRpb24oKSBvbiB0aGUgb2xkIHNoYWRvdyB0cmVlIGVsZW1lbnQKLSAgICAgICAgLy8g
d2hpY2ggbGVhZHMgdG8gYW4gYXNzZXJ0aW9uIG9uY2UgZ2FyYmFnZSBpcyBjb2xsZWN0ZWQsIGlm
IHRoZSBhbmltVmFsIGJpbmRpbmdzIGhhdmUgYmVlbgotICAgICAgICAvLyBhY2Nlc3NlZCBmcm9t
IEpTLiBJdCB3b3VsZCBhbHNvIGFzc2VydCBvbiB0aGUgbmV4dCB1cGRhdGVBbmltYXRpb25zKCkg
Y2FsbCBhcyB0aGUgbmV3Ci0gICAgICAgIC8vIFNWR0FuaW1hdGVkUHJvcGVydHkgb2JqZWN0IGhh
c24ndCBiZWVuIGluaXRpYWxpemVkIHlldCAodXNpbmcgc3RhcnRBbmltVmFsQW5pbWF0aW9uKS4K
LSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1v
dmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQoZWxlbWVudCk7Ci0KICAgICAgICAgaWYg
KFNWR1VzZUVsZW1lbnQqIGVsZW1lbnQgPSAoKml0KS0+Y29ycmVzcG9uZGluZ1VzZUVsZW1lbnQo
KSkgewogICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmluRG9jdW1lbnQoKSk7CiAgICAgICAg
ICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU2hhZG93VHJlZSgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNjAw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzksMTEgKzEzOSw0OSBAQCBTVkdTTUlMRWxlbWVudDo6U1ZHU01J
TEVsZW1lbnQoY29uc3QgUXVhCiAKIFNWR1NNSUxFbGVtZW50Ojp+U1ZHU01JTEVsZW1lbnQoKQog
eworICAgIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7CiAgICAgZGlzY29ubmVjdENvbmRpdGlv
bnMoKTsKICAgICBpZiAobV90aW1lQ29udGFpbmVyICYmIG1fdGFyZ2V0RWxlbWVudCAmJiBoYXNW
YWxpZEF0dHJpYnV0ZU5hbWUoKSkKICAgICAgICAgbV90aW1lQ29udGFpbmVyLT51bnNjaGVkdWxl
KHRoaXMsIG1fdGFyZ2V0RWxlbWVudCwgbV9hdHRyaWJ1dGVOYW1lKTsKLSAgICBpZiAobV90YXJn
ZXRFbGVtZW50KQotICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJl
bW92ZUFuaW1hdGlvbkVsZW1lbnRGcm9tVGFyZ2V0KHRoaXMsIG1fdGFyZ2V0RWxlbWVudCk7Cit9
CisKK3ZvaWQgU1ZHU01JTEVsZW1lbnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCkKK3sKKyAg
ICBBU1NFUlQoZG9jdW1lbnQoKSk7CisgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9u
cygpLT5yZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCh0aGlzKTsKK30KKwordm9p
ZCBTVkdTTUlMRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UoKQoreworICAgIGNsZWFyUmVz
b3VyY2VSZWZlcmVuY2VzKCk7CisgICAgaWYgKCFpbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFN0cmluZyBpZDsKKyAgICBTdHJpbmcgaHJlZiA9IGdldEF0dHJpYnV0ZShYTGlu
a05hbWVzOjpocmVmQXR0cik7CisgICAgRWxlbWVudCogdGFyZ2V0OworICAgIGlmIChocmVmLmlz
RW1wdHkoKSkKKyAgICAgICAgdGFyZ2V0ID0gcGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUoKS0+
aXNFbGVtZW50Tm9kZSgpID8gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHBhcmVudE5vZGUoKSkgOiAw
OworICAgIGVsc2UKKyAgICAgICAgdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVt
ZW50RnJvbUlSSVN0cmluZyhocmVmLCBkb2N1bWVudCgpLCAmaWQpOworICAgIFNWR0VsZW1lbnQq
IHN2Z1RhcmdldCA9IHRhcmdldCAmJiB0YXJnZXQtPmlzU1ZHRWxlbWVudCgpID8gc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KHRhcmdldCkgOiAwOworCisgICAgaWYgKHN2Z1RhcmdldCAhPSB0YXJn
ZXRFbGVtZW50KCkpCisgICAgICAgIHNldFRhcmdldEVsZW1lbnQoc3ZnVGFyZ2V0KTsKKworICAg
IGlmICghc3ZnVGFyZ2V0KSB7CisgICAgICAgIGlmIChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+YWRkUGVuZGluZ1Jlc291
cmNlKGlkLCB0aGlzKTsKKyAgICAgICAgICAgIEFTU0VSVChoYXNQZW5kaW5nUmVzb3VyY2VzKCkp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gUmVnaXN0ZXIgdXMgd2l0aCB0
aGUgdGFyZ2V0IGluIHRoZSBkZXBlbmRlbmNpZXMgbWFwLiBBbnkgY2hhbmdlIG9mIGhyZWZFbGVt
ZW50CisgICAgICAgIC8vIHRoYXQgbGVhZHMgdG8gcmVsYXlvdXQvcmVwYWludGluZyBub3cgaW5m
b3JtcyB1cywgc28gd2UgY2FuIHJlYWN0IHRvIGl0LgorICAgICAgICBkb2N1bWVudCgpLT5hY2Nl
c3NTVkdFeHRlbnNpb25zKCktPmFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldCh0aGlzLCBzdmdU
YXJnZXQpOworICAgIH0KIH0KIAogc3RhdGljIGlubGluZSBRdWFsaWZpZWROYW1lIGNvbnN0cnVj
dFF1YWxpZmllZE5hbWUoY29uc3QgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCwgY29uc3QgU3RyaW5n
JiBhdHRyaWJ1dGVOYW1lKQpAQCAtMjE2LDEyICsyNTQsMTEgQEAgTm9kZTo6SW5zZXJ0aW9uTm90
aWZpY2F0aW9uUmVxdWVzdCBTVkdTTQogICAgIGlmIChtX2lzV2FpdGluZ0ZvckZpcnN0SW50ZXJ2
YWwpCiAgICAgICAgIHJlc29sdmVGaXJzdEludGVydmFsKCk7CiAKLSAgICAvLyBGb3JjZSByZXNv
bHV0aW9uIG9mIHRhcmdldCBlbGVtZW50Ci0gICAgaWYgKCFtX3RhcmdldEVsZW1lbnQpCi0gICAg
ICAgIHRhcmdldEVsZW1lbnQoKTsKICAgICBpZiAobV90aW1lQ29udGFpbmVyKQogICAgICAgICBt
X3RpbWVDb250YWluZXItPm5vdGlmeUludGVydmFsc0NoYW5nZWQoKTsKIAorICAgIGJ1aWxkUGVu
ZGluZ1Jlc291cmNlKCk7CisKICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKIH0KIApAQCAtMjM4
LDExICsyNzUsMTAgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbgog
ICAgICAgICBSZWZQdHI8U1ZHU01JTEVsZW1lbnQ+IGtlZXBBbGl2ZSh0aGlzKTsKICAgICAgICAg
ZGlzY29ubmVjdENvbmRpdGlvbnMoKTsKIAotICAgICAgICAvLyBDbGVhciB0YXJnZXQgbm93LCBi
ZWNhdXNlIGRpc2Nvbm5lY3RDb25kaXRpb25zIGNhbGxzIHRhcmdldEVsZW1lbnQoKSB3aGljaCB3
aWxsIHJlY3JlYXRlIHRoZSB0YXJnZXQgaWYgd2UgcmVtb3ZlZCBpdCBzb29uZXIuIAotICAgICAg
ICBpZiAobV90YXJnZXRFbGVtZW50KQotICAgICAgICAgICAgcmVzZXRUYXJnZXRFbGVtZW50KERv
Tm90UmVzb2x2ZU5ld1RhcmdldCk7Ci0KKyAgICAgICAgY2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMo
KTsKKyAgICAgICAgc2V0VGFyZ2V0RWxlbWVudCgwKTsKICAgICAgICAgc2V0QXR0cmlidXRlTmFt
ZShhbnlRTmFtZSgpKTsKKyAgICAgICAgYW5pbWF0aW9uQXR0cmlidXRlQ2hhbmdlZCgpOwogICAg
IH0KIAogICAgIFNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tKHJvb3RQYXJlbnQpOwpAQCAtNDcyLDE2
ICs1MDgsMTEgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZAogICAg
ICAgICAgICAgYmVnaW5MaXN0Q2hhbmdlZChlbGFwc2VkKCkpOwogICAgICAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6ZW5kQXR0cikKICAgICAgICAgICAgIGVuZExpc3RDaGFuZ2Vk
KGVsYXBzZWQoKSk7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjphdHRy
aWJ1dGVOYW1lQXR0cikgeworICAgICAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
YXR0cmlidXRlTmFtZUF0dHIpCiAgICAgICAgICAgICBzZXRBdHRyaWJ1dGVOYW1lKGNvbnN0cnVj
dFF1YWxpZmllZE5hbWUodGhpcywgZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6YXR0cmlidXRl
TmFtZUF0dHIpKSk7Ci0gICAgICAgICAgICBpZiAobV90YXJnZXRFbGVtZW50KSB7Ci0gICAgICAg
ICAgICAgICAgcmVzZXRUYXJnZXRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGF0dHJOYW1lLm1hdGNoZXMoWExpbmtO
YW1lczo6aHJlZkF0dHIpKSB7Ci0gICAgICAgICAgICAvLyB0YXJnZXRFbGVtZW50IGlzIHJlc29s
dmVkIGxhemlseSBidXQgdGFyZ2V0RWxlbWVudCgpIHdpbGwgaGFuZGxlIGNhbGxpbmcgdGFyZ2V0
RWxlbWVudFdpbGxDaGFuZ2UoKS4KLSAgICAgICAgICAgIGlmIChTVkdFbGVtZW50KiB0YXJnZXRF
bGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50
KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNGcm9t
VGFyZ2V0KHRhcmdldEVsZW1lbnQpOworICAgICAgICBlbHNlIGlmIChhdHRyTmFtZS5tYXRjaGVz
KFhMaW5rTmFtZXM6OmhyZWZBdHRyKSkgeworICAgICAgICAgICAgU1ZHRWxlbWVudEluc3RhbmNl
OjpJbnZhbGlkYXRpb25HdWFyZCBpbnZhbGlkYXRpb25HdWFyZCh0aGlzKTsKKyAgICAgICAgICAg
IGJ1aWxkUGVuZGluZ1Jlc291cmNlKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU2Miw1NyAr
NTkzLDMwIEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5hbWUoY28KICAgICAg
ICAgICAgIG1fdGltZUNvbnRhaW5lci0+c2NoZWR1bGUodGhpcywgbV90YXJnZXRFbGVtZW50LCBt
X2F0dHJpYnV0ZU5hbWUpOwogICAgIH0gZWxzZQogICAgICAgICBtX2F0dHJpYnV0ZU5hbWUgPSBh
dHRyaWJ1dGVOYW1lOwotfQogCi1TVkdFbGVtZW50KiBTVkdTTUlMRWxlbWVudDo6dGFyZ2V0RWxl
bWVudChSZXNvbHZlVGFyZ2V0IHJlc29sdmVUYXJnZXQpCi17CisgICAgLy8gT25seSBjbGVhciB0
aGUgYW5pbWF0ZWQgdHlwZSwgaWYgd2UgaGFkIGEgdGFyZ2V0IGJlZm9yZS4KICAgICBpZiAobV90
YXJnZXRFbGVtZW50KQotICAgICAgICByZXR1cm4gbV90YXJnZXRFbGVtZW50OwotCi0gICAgaWYg
KCFpbkRvY3VtZW50KCkgfHwgcmVzb2x2ZVRhcmdldCA9PSBEb05vdFJlc29sdmVOZXdUYXJnZXQp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgU3RyaW5nIGhyZWYgPSBnZXRBdHRyaWJ1dGUoWExp
bmtOYW1lczo6aHJlZkF0dHIpOwotICAgIENvbnRhaW5lck5vZGUqIHRhcmdldCA9IGhyZWYuaXNF
bXB0eSgpID8gcGFyZW50Tm9kZSgpIDogU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJv
bUlSSVN0cmluZyhocmVmLCBkb2N1bWVudCgpKTsKLSAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0
LT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTVkdFbGVtZW50KiB0
YXJnZXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHRhcmdldCk7Ci0gICAgdGFy
Z2V0RWxlbWVudFdpbGxDaGFuZ2UobV90YXJnZXRFbGVtZW50LCB0YXJnZXRFbGVtZW50KTsKLSAg
ICBtX3RhcmdldEVsZW1lbnQgPSB0YXJnZXRFbGVtZW50OwotICAgIGRvY3VtZW50KCktPmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKS0+YWRkQW5pbWF0aW9uRWxlbWVudFRvVGFyZ2V0KHRoaXMsIG1fdGFy
Z2V0RWxlbWVudCk7Ci0gICAgcmV0dXJuIG1fdGFyZ2V0RWxlbWVudDsKKyAgICAgICAgY2xlYXJB
bmltYXRlZFR5cGUobV90YXJnZXRFbGVtZW50KTsKIH0KIAotdm9pZCBTVkdTTUlMRWxlbWVudDo6
dGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UoU1ZHRWxlbWVudCogY3VycmVudFRhcmdldCwgU1ZHRWxl
bWVudCogbmV3VGFyZ2V0KQordm9pZCBTVkdTTUlMRWxlbWVudDo6c2V0VGFyZ2V0RWxlbWVudChT
VkdFbGVtZW50KiB0YXJnZXQpCiB7CiAgICAgaWYgKG1fdGltZUNvbnRhaW5lciAmJiBoYXNWYWxp
ZEF0dHJpYnV0ZU5hbWUoKSkgewotICAgICAgICBpZiAoY3VycmVudFRhcmdldCkKLSAgICAgICAg
ICAgIG1fdGltZUNvbnRhaW5lci0+dW5zY2hlZHVsZSh0aGlzLCBjdXJyZW50VGFyZ2V0LCBtX2F0
dHJpYnV0ZU5hbWUpOwotICAgICAgICBpZiAobmV3VGFyZ2V0KQotICAgICAgICAgICAgbV90aW1l
Q29udGFpbmVyLT5zY2hlZHVsZSh0aGlzLCBuZXdUYXJnZXQsIG1fYXR0cmlidXRlTmFtZSk7Cisg
ICAgICAgIGlmIChtX3RhcmdldEVsZW1lbnQpCisgICAgICAgICAgICBtX3RpbWVDb250YWluZXIt
PnVuc2NoZWR1bGUodGhpcywgbV90YXJnZXRFbGVtZW50LCBtX2F0dHJpYnV0ZU5hbWUpOworICAg
ICAgICBpZiAodGFyZ2V0KQorICAgICAgICAgICAgbV90aW1lQ29udGFpbmVyLT5zY2hlZHVsZSh0
aGlzLCB0YXJnZXQsIG1fYXR0cmlidXRlTmFtZSk7CiAgICAgfQogCiAgICAgLy8gT25seSBjbGVh
ciB0aGUgYW5pbWF0ZWQgdHlwZSwgaWYgd2UgaGFkIGEgdGFyZ2V0IGJlZm9yZS4KLSAgICBpZiAo
Y3VycmVudFRhcmdldCkKLSAgICAgICAgY2xlYXJBbmltYXRlZFR5cGUoY3VycmVudFRhcmdldCk7
CisgICAgaWYgKG1fdGFyZ2V0RWxlbWVudCkKKyAgICAgICAgY2xlYXJBbmltYXRlZFR5cGUobV90
YXJnZXRFbGVtZW50KTsKIAogICAgIC8vIElmIHRoZSBhbmltYXRpb24gc3RhdGUgaXMgbm90IElu
YWN0aXZlLCBhbHdheXMgcmVzZXQgdG8gYSBjbGVhciBzdGF0ZSBiZWZvcmUgbGVhdmluZyB0aGUg
b2xkIHRhcmdldCBlbGVtZW50LgogICAgIGlmIChtX2FjdGl2ZVN0YXRlICE9IEluYWN0aXZlKQog
ICAgICAgICBlbmRlZEFjdGl2ZUludGVydmFsKCk7Ci19Ci0KLXZvaWQgU1ZHU01JTEVsZW1lbnQ6
OnJlc2V0VGFyZ2V0RWxlbWVudChSZXNvbHZlVGFyZ2V0IHJlc29sdmVUYXJnZXQpCi17Ci0gICAg
ZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVBbmltYXRpb25FbGVtZW50
RnJvbVRhcmdldCh0aGlzLCBtX3RhcmdldEVsZW1lbnQpOwotICAgIHRhcmdldEVsZW1lbnRXaWxs
Q2hhbmdlKG1fdGFyZ2V0RWxlbWVudCwgMCk7Ci0gICAgbV90YXJnZXRFbGVtZW50ID0gMDsKLQot
ICAgIC8vIEltbWVkaWF0ZWx5IHJlc29sdmUgdGhlIG5ldyB0YXJnZXRFbGVtZW50IChhbmQgY2Fs
bCB0YXJnZXRFbGVtZW50V2lsbENoYW5nZSBpZiBuZWVkZWQpIGluc3RlYWQgb2YgZG9pbmcgaXQg
bGF6aWx5LgotICAgIGlmIChyZXNvbHZlVGFyZ2V0ID09IFJlc29sdmVOZXdUYXJnZXQpCi0gICAg
ICAgIHRhcmdldEVsZW1lbnQoKTsKIAotICAgIGFuaW1hdGlvbkF0dHJpYnV0ZUNoYW5nZWQoKTsK
KyAgICBtX3RhcmdldEVsZW1lbnQgPSB0YXJnZXQ7CiB9CiAKIFNNSUxUaW1lIFNWR1NNSUxFbGVt
ZW50OjplbGFwc2VkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24v
U1ZHU01JTEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0
aW9uL1NWR1NNSUxFbGVtZW50LmgJKHJldmlzaW9uIDEzNjAwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCAr
MzMsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVudW0gUmVzb2x2ZVRhcmdldCB7IERv
Tm90UmVzb2x2ZU5ld1RhcmdldCwgUmVzb2x2ZU5ld1RhcmdldCB9OwotCiBjbGFzcyBDb25kaXRp
b25FdmVudExpc3RlbmVyOwogY2xhc3MgU01JTFRpbWVDb250YWluZXI7CiAKQEAgLTU4LDggKzU2
LDcgQEAgcHVibGljOgogCiAgICAgU01JTFRpbWVDb250YWluZXIqIHRpbWVDb250YWluZXIoKSBj
b25zdCB7IHJldHVybiBtX3RpbWVDb250YWluZXIuZ2V0KCk7IH0KIAotICAgIFNWR0VsZW1lbnQq
IHRhcmdldEVsZW1lbnQoUmVzb2x2ZVRhcmdldCA9IFJlc29sdmVOZXdUYXJnZXQpOwotICAgIHZv
aWQgcmVzZXRUYXJnZXRFbGVtZW50KFJlc29sdmVUYXJnZXQgPSBSZXNvbHZlTmV3VGFyZ2V0KTsK
KyAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRF
bGVtZW50OyB9CiAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYXR0cmlidXRlTmFtZTsgfQogCiAgICAgdm9pZCBiZWdpbkJ5TGlua0FjdGl2
YXRpb24oKTsKQEAgLTEyMCwxMCArMTE3LDEzIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldElu
YWN0aXZlKCkgeyBtX2FjdGl2ZVN0YXRlID0gSW5hY3RpdmU7IH0KIAogICAgIC8vIFN1Yi1jbGFz
c2VzIG1heSBuZWVkIHRvIHRha2UgYWN0aW9uIHdoZW4gdGhlIHRhcmdldCBpcyBjaGFuZ2VkLgot
ICAgIHZpcnR1YWwgdm9pZCB0YXJnZXRFbGVtZW50V2lsbENoYW5nZShTVkdFbGVtZW50KiBjdXJy
ZW50VGFyZ2V0LCBTVkdFbGVtZW50KiBuZXdUYXJnZXQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRU
YXJnZXRFbGVtZW50KFNWR0VsZW1lbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0cmlidXRl
TmFtZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKIHByaXZhdGU6CisgICAgdm9pZCBidWlsZFBl
bmRpbmdSZXNvdXJjZSgpOworICAgIHZvaWQgY2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKTsKKwog
ICAgIHZpcnR1YWwgdm9pZCBzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKSA9IDA7CiAgICAgdm9pZCBl
bmRlZEFjdGl2ZUludGVydmFsKCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbihm
bG9hdCBwZXJjZW50LCB1bnNpZ25lZCByZXBlYXQsIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVt
ZW50KSA9IDA7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzYwNTcpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0xMS0yOCAgUGhpbGlw
IFJvZ2VycyAgPHBkckBnb29nbGUuY29tPgorCisgICAgICAgIFJlbW92ZSByZWR1bmRhbnQgU1ZH
IGFuaW1hdGlvbiB0cmFja2luZyBmcmFtZXdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI2NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHN2Zy9hbmltYXRpb25zL3N2Zy1hbmltYXRpb24tb3Jk
ZXItZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogc3ZnL2FuaW1hdGlvbnMvc3ZnLWFu
aW1hdGlvbi1vcmRlci5odG1sOiBBZGRlZC4KKwogMjAxMi0xMS0yOCAgVG9ueSBDaGFuZyAgPHRv
bnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE1vdmUgaW50ZXJuYWxzLnNldHRpbmdzLnNldFBh
Z2VTY2FsZUZhY3RvciB0byBpbnRlcm5hbHMuc2V0UGFnZVNjYWxlRmFjdG9yCkluZGV4OiBMYXlv
dXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zdmctYW5pbWF0aW9uLW9yZGVyLWV4cGVjdGVkLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc3ZnLWFuaW1hdGlvbi1v
cmRlci1leHBlY3RlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2FuaW1h
dGlvbnMvc3ZnLWFuaW1hdGlvbi1vcmRlci1leHBlY3RlZC5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8Ym9keT4KKzxwIGlkPSJkZXNj
cmlwdGlvbiI+VGVzdCB0aGF0IHRoZSBvcmRlciBvZiBlbGVtZW50cyBkb2VzIG5vdCBhZmZlY3Qg
YW5pbWF0aW9ucy48L3A+Cis8c3ZnIGlkPSJzdmciIHdpZHRoPSIzMDAiIGhlaWdodD0iMzAwIj4K
KyAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIGZpbGw9ImdyZWVu
Ii8+Cis8L3N2Zz4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9hbmlt
YXRpb25zL3N2Zy1hbmltYXRpb24tb3JkZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9zdmcvYW5pbWF0aW9ucy9zdmctYW5pbWF0aW9uLW9yZGVyLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zdmctYW5pbWF0aW9uLW9yZGVyLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8c2Ny
aXB0PgorZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
IHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworCisgIC8vIERlZmVyIHRvIGFsbG93IGFuaW1h
dGlvbnMgdG8gcnVuLgorICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICB9LCAwKTsKK30K
Kzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPHAgaWQ9ImRlc2NyaXB0aW9u
Ij5UZXN0IHRoYXQgdGhlIG9yZGVyIG9mIGVsZW1lbnRzIGRvZXMgbm90IGFmZmVjdCBhbmltYXRp
b25zLjwvcD4KKzxzdmcgaWQ9InN2ZyIgd2lkdGg9IjMwMCIgaGVpZ2h0PSIzMDAiPgorICA8IS0t
IFRoaXMgcmVkIHNxdWFyZSBzaG91bGQgYmUgY292ZXJlZCB1cCBpZiB3ZSBwYXNzLiAtLT4KKyAg
PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIGZpbGw9InJlZCIvPgor
CisgIDwhLS0gQW5pbWF0ZSBvbmUgZ3JlZW4gcmVjdGFuZ2xlIG92ZXIgdGhlIHRvcCBoYWxmIG9m
IHRoZSByZWQgc3F1YXJlLiAtLT4KKyAgPHJlY3QgaWQ9InJlY3QxIiAgeD0iLTEwMCIgeT0iMCIg
d2lkdGg9IjEwMCIgaGVpZ2h0PSI1MCIgZmlsbD0iZ3JlZW4iIC8+CisgIDxzZXQgYXR0cmlidXRl
TmFtZT0ieCIgeGxpbms6aHJlZj0iI3JlY3QxIiB0bz0iMCIvPgorCisgIDwhLS0gQW5pbWF0ZSBh
IHNlY29uZCBncmVlbiByZWN0YW5nbGUgb3ZlciB0aGUgYm90dG9tIGhhbGYgb2YgdGhlIHJlZCBz
cXVhcmUuIC0tPgorICA8c2V0IGF0dHJpYnV0ZU5hbWU9IngiIHhsaW5rOmhyZWY9IiNyZWN0MiIg
dG89IjAiLz4KKyAgPHJlY3QgaWQ9InJlY3QyIiAgeD0iLTEwMCIgeT0iNTAiIHdpZHRoPSIxMDAi
IGhlaWdodD0iNTAiIGZpbGw9ImdyZWVuIiAvPgorPC9zdmc+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>177095</attachid>
            <date>2012-12-01 00:25:40 -0800</date>
            <delta_ts>2012-12-01 00:26:02 -0800</delta_ts>
            <desc>Unify SVG&apos;s animation and target tracking systems.</desc>
            <filename>102655.5.patch</filename>
            <type>application/octet-stream</type>
            <size>31578</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjMwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDEyLTEyLTAxICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgVW5pZnkgU1ZHJ3MgYW5pbWF0aW9u
IGFuZCB0YXJnZXQgdHJhY2tpbmcgc3lzdGVtcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjY1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggdW5pZmllcyBvdXIgYW5pbWF0aW9uIHRh
cmdldCB0cmFja2luZyBzeXN0ZW0gYW5kIHJlZ3VsYXIgdGFyZ2V0IHRyYWNraW5nIHN5c3RlbS4K
KyAgICAgICAgVGhpcyBzaW1wbGlmaWVzIHRoZSBjb2RlLCBmaXhlcyBhIGJ1ZywgYW5kIGNsZWFu
cyB1cCBhIGhpc3RvcmljYWxseSBzZWN1cml0eS1zZW5zaXRpdmUgYXJlYS4KKworICAgICAgICBC
YWNrZ3JvdW5kOiBXaGVuIDx1c2U+LCA8bXBhdGg+LCA8YW5pbWF0ZT4sIGV0Yy4gcmVmZXJlbmNl
IGFub3RoZXIgZWxlbWVudCB1c2luZworICAgICAgICB4bGluazpocmVmPSIjaWQiLCB3ZSBuZWVk
IHRvIHRyYWNrIHdoZW4gI2lkIGNoYW5nZXMgdG8gI290aGVySWQsIHdoZW4gI2lkIGlzIHJlbW92
ZWQsIGV0Yy4KKyAgICAgICAgVGhpcyBib29ra2VlcGluZyBvZiBlbGVtZW50IC0+IHRhcmdldCBp
cyBkb25lIGluIFNWR0RvY3VtZW50RXh0ZW5zaW9ucy4gQWRkaXRpb25hbGx5LCB3aGVuCisgICAg
ICAgIGEgdGFyZ2V0IGNoYW5nZXMgdGhhdCBjYXVzZXMgbGF5b3V0IChlLmcuLCByZWN0LnggaXMg
Y2hhbmdlZCksIGFsbCBkZXBlbmRlbnQgZWxlbWVudHMgd2l0aAorICAgICAgICByZW5kZXJlcnMg
YXJlIG5vdGlmaWVkICg8YW5pbWF0ZT4gaGFzIG5vIHJlbmRlcmVyIGFuZCB3aWxsIG5vdCB1c2Ug
dGhpcy4pCisKKyAgICAgICAgUHJldmlvdXNseSwgeGxpbms6aHJlZiBjaGFuZ2VzIHdlcmUgbGF6
aWx5IHJlc29sdmVkIHdoZW4gdGFyZ2V0RWxlbWVudCgpIHdhcyBjYWxsZWQsIHRhcmdldAorICAg
ICAgICBjaGFuZ2VzIHdlcmUgdHJhY2tlZCB1c2luZyB0aGUgYW5pbWF0aW9uIHRyYWNraW5nIGZy
YW1ld29yaywgYW5kIHBlbmRpbmcgdGFyZ2V0cyBkaWQgbm90CisgICAgICAgIHdvcmsgKGUuZy4s
IDxhbmltYXRlIHhsaW5rOmhyZWY9IiNwIj48IS0tYW5pbWF0ZSBpcyBub3cgcGVuZGluZyAjcCAt
LT48cmVjdCBpZD0icCIvPikuCisKKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCwgd2Ugbm8gbG9u
Z2VyIGxhemlseSByZXNvbHZlIHRhcmdldEVsZW1lbnQoKSBidXQgaW5zdGVhZCBjaGFuZ2UgaXQg
d2hlbgorICAgICAgICBvdXIgeGxpbms6aHJlZiBhdHRyaWJ1dGUgY2hhbmdlcy4gSW5zdGVhZCBv
ZiB1c2luZyB0aGUgYW5pbWF0aW9uIHRyYWNraW5nIGZyYW1ld29yayBpbgorICAgICAgICBTVkdE
b2N1bWVudEV4dGVuc2lvbnMsIHdlIG5vdyB1c2UgdGhlIHJlZ3VsYXIgdGFyZ2V0IHRyYWNraW5n
IGZyYW1ld29yay4gTGFzdGx5LCBieSB1c2luZworICAgICAgICB0aGUgcmVndWxhciB0YXJnZXQg
dHJhY2tpbmcgZnJhbWV3b3JrIHdlIGFyZSBhYmxlIHRvIGhvb2sgaW50byB0aGUgcGVuZGluZyBy
ZXNvdXJjZSBoYW5kbGluZworICAgICAgICB3aGljaCBmaXhlcyBhIGJ1ZyAoc2VlIHRoZSB0ZXN0
LikKKworICAgICAgICBBIHRlc3QgaGFzIGJlZW4gYWRkZWQgdG8gdGVzdCB0aGF0IHRoZSBvcmRl
ciBvZiBhbmltYXRpb24gZWxlbWVudHMgZG9lcyBub3QgbWF0dGVyLiBBIHNlY29uZAorICAgICAg
ICB0ZXN0IGhhcyBiZWVuIGFkZGVkIHRvIHNob3cgd2UgZG8gbm90IHJlZ3Jlc3MgYSBwZW5kaW5n
LXdoaWxlLXBlbmRpbmcgY2FzZS4KKworICAgICAgICBUZXN0czogc3ZnL2FuaW1hdGlvbnMvc3Zn
LWFuaW1hdGlvbi1vcmRlci5odG1sCisgICAgICAgICAgICAgICBzdmcvY3VzdG9tL3N2Zy1wZW5k
aW5nLXR3aWNlLmh0bWwKKworICAgICAgICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6c2V0VGFyZ2V0RWxlbWVudCk6CisK
KyAgICAgICAgICAgIHNldFRhcmdldEVsZW1lbnQgYW5kIHNldEF0dHJpYnV0ZU5hbWUgbm93IHdv
cmsgc2ltaWxhcmx5LiBXaGVuIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZQorICAgICAgICAg
ICAgY2hhbmdlcywgd2UgdXBkYXRlIG91ciBpbnRlcm5hbCBzdGF0ZSAodGFyZ2V0IG9yIGF0dHJp
YnV0ZU5hbWUpIGFuZCBzYXZlIGl0IGluc3RlYWQgb2YKKyAgICAgICAgICAgIGxvb2tpbmcgdGhl
c2UgdmFsdWVzIHVwIG9uIGVhY2ggaXRlcmF0aW9uLgorCisgICAgICAgIChXZWJDb3JlOjpTVkdB
bmltYXRlRWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjpyZXNldEFuaW1hdGVkUHJvcGVydHlU
eXBlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaDoKKyAgICAgICAgKFNWR0Fu
aW1hdGVFbGVtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpzZXRBdHRyaWJ1dGVUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0QXR0cmlidXRlTmFt
ZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKFNWR0Fu
aW1hdGlvbkVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjp+U1ZHRG9jdW1lbnRF
eHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVu
dEV4dGVuc2lvbnMuaDoKKyAgICAgICAgKFNWR0RvY3VtZW50RXh0ZW5zaW9ucyk6CisgICAgICAg
ICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6flNW
R0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20pOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAg
ICogc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVt
ZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVsZW1lbnQpOgorCisgICAgICAg
ICAgICBUaGlzIGNhbiBiZSByZW1vdmVkIGFmdGVyIHIxMzE2MzEgbGFuZGVkLgorCisgICAgICAg
ICogc3ZnL1NWR01QYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVs
ZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAgKiBzdmcvU1ZHVGV4dFBhdGhF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRQYXRoRWxlbWVudDo6YnVpbGRQ
ZW5kaW5nUmVzb3VyY2UpOgorCisgICAgICAgICAgICBBIGJ1ZyB3YXMgZGlzY292ZXJlZCBpbiBy
ZXZpZXcgd2l0aCBvdXIgcmVzb3VyY2UgdHJhY2tpbmcgaW4gYSBwZW5kaW5nLXdoaWxlLXBlbmRp
bmcKKyAgICAgICAgICAgIGNhc2UuIFNWR01wYXRoRWxlbWVudCBhbmQgU1ZHVGV4dFBhdGhFbGVt
ZW50IGhhdmUgYmVlbiB1cGRhdGVkIHRvIGZpeCB0aGlzIGFzIHdlbGwuCisKKyAgICAgICAgKiBz
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcDoKKworICAgICAgICAgICAgVGhlIGNoYW5n
ZXMgaW4gU1ZHU01JTEVsZW1lbnQgc2hvdWxkIGxvb2sgdmVyeSBzaW1pbGFyIHRvIFNWR0ZFSW1h
Z2VFbGVtZW50LAorICAgICAgICAgICAgU1ZHTVBhdGhFbGVtZW50LCBldGMuIFRoZSBpZGVhIGlz
IHRvIGJ1aWxkIHBlbmRpbmcgcmVzb3VyY2VzIHdoZW4gYWRkZWQgb3IKKyAgICAgICAgICAgIHJl
bW92ZWQgZnJvbSB0aGUgZG9jdW1lbnQsIG9yIHdoZW4gdGhlIGhyZWYgYXR0cmlidXRlIGNoYW5n
ZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Ojp+U1ZHU01JTEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6
Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1l
bnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVt
ZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnJl
bW92ZWRGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpzZXRBdHRyaWJ1
dGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpzZXRUYXJnZXRFbGVt
ZW50KToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVt
ZW50KToKKyAgICAgICAgKFNWR1NNSUxFbGVtZW50KToKKwogMjAxMi0xMS0zMCAgTWlrZSBXZXN0
ICA8bWt3c3RAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENTUCAxLjE6IE1ha2UgdGhlIENTUF9O
RVhUIGZsYWcgcnVudGltZSBlbmFibGVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzYwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsMTYgKzM5NiwyNiBA
QCBmbG9hdCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlRGlzdGFuCiAgICAgcmV0dXJuIGVu
c3VyZUFuaW1hdG9yKCktPmNhbGN1bGF0ZURpc3RhbmNlKGZyb21TdHJpbmcsIHRvU3RyaW5nKTsK
IH0KIAotdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6dGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UoU1ZH
RWxlbWVudCogY3VycmVudFRhcmdldCwgU1ZHRWxlbWVudCogbmV3VGFyZ2V0KQordm9pZCBTVkdB
bmltYXRlRWxlbWVudDo6c2V0VGFyZ2V0RWxlbWVudChTVkdFbGVtZW50KiB0YXJnZXQpCiB7Ci0g
ICAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UoY3VycmVudFRh
cmdldCwgbmV3VGFyZ2V0KTsKKyAgICBTVkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRFbGVt
ZW50KHRhcmdldCk7CisgICAgcmVzZXRBbmltYXRlZFByb3BlcnR5VHlwZSgpOworfQogCit2b2lk
IFNWR0FuaW1hdGVFbGVtZW50OjpzZXRBdHRyaWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJpYnV0ZU5hbWUpCit7CisgICAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0QXR0cmlidXRl
TmFtZShhdHRyaWJ1dGVOYW1lKTsKKyAgICByZXNldEFuaW1hdGVkUHJvcGVydHlUeXBlKCk7Cit9
CisKK3ZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OnJlc2V0QW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKQor
ewogICAgIEFTU0VSVCghbV9hbmltYXRlZFR5cGUpOwogICAgIG1fZnJvbVR5cGUuY2xlYXIoKTsK
ICAgICBtX3RvVHlwZS5jbGVhcigpOwogICAgIG1fdG9BdEVuZE9mRHVyYXRpb25UeXBlLmNsZWFy
KCk7CiAgICAgbV9hbmltYXRvci5jbGVhcigpOwotICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUg
PSBuZXdUYXJnZXQgPyBkZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlwZShuZXdUYXJnZXQpIDog
QW5pbWF0ZWRTdHJpbmc7CisgICAgbV9hbmltYXRlZFByb3BlcnR5VHlwZSA9IHRhcmdldEVsZW1l
bnQoKSA/IGRldGVybWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKHRhcmdldEVsZW1lbnQoKSkgOiBB
bmltYXRlZFN0cmluZzsKIH0KIAogU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IqIFNWR0FuaW1hdGVF
bGVtZW50OjplbnN1cmVBbmltYXRvcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZUVsZW1lbnQuaAkocmV2aXNpb24gMTM2MDI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgcHJvdGVjdGVk
OgogCiAgICAgdmlydHVhbCB2b2lkIHJlc2V0QW5pbWF0ZWRUeXBlKCk7CiAgICAgdmlydHVhbCB2
b2lkIGNsZWFyQW5pbWF0ZWRUeXBlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpOworCiAgICAg
dmlydHVhbCBib29sIGNhbGN1bGF0ZVRvQXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5n
JiB0b0F0RW5kT2ZEdXJhdGlvblN0cmluZyk7CiAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZy
b21BbmRUb1ZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9T
dHJpbmcpOwogICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3Qg
U3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKTsKQEAgLTUzLDExICs1
NCwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShj
b25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpOwogICAgIHZp
cnR1YWwgYm9vbCBpc0FkZGl0aXZlKCkgY29uc3QgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgdGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UoU1ZHRWxlbWVudCogY3VycmVudFRhcmdldCwgU1ZH
RWxlbWVudCogb2xkVGFyZ2V0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGFyZ2V0
RWxlbWVudChTVkdFbGVtZW50KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEF0dHJp
YnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIE9WRVJSSURFOwogCiAgICAgQW5pbWF0ZWRQ
cm9wZXJ0eVR5cGUgbV9hbmltYXRlZFByb3BlcnR5VHlwZTsKIAogcHJpdmF0ZToKKyAgICB2b2lk
IHJlc2V0QW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKTsKICAgICBTVkdBbmltYXRlZFR5cGVBbmltYXRv
ciogZW5zdXJlQW5pbWF0b3IoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0
ZVR5cGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5j
cHAJKHJldmlzaW9uIDEzNjAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25F
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDcgKzMxOSw3IEBAIHZvaWQgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6c2V0QXR0cmlidXRlVHkKICAgICAgICAgbV9hdHRyaWJ1dGVUeXBlID0g
QXR0cmlidXRlVHlwZVhNTDsKICAgICBlbHNlCiAgICAgICAgIG1fYXR0cmlidXRlVHlwZSA9IEF0
dHJpYnV0ZVR5cGVBdXRvOwotICAgIGNoZWNrSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUodGFyZ2V0
RWxlbWVudChEb05vdFJlc29sdmVOZXdUYXJnZXQpKTsKKyAgICBjaGVja0ludmFsaWRDU1NBdHRy
aWJ1dGVUeXBlKHRhcmdldEVsZW1lbnQoKSk7CiB9CiAKIFN0cmluZyBTVkdBbmltYXRpb25FbGVt
ZW50Ojp0b1ZhbHVlKCkgY29uc3QKQEAgLTY3NywxOCArNjc3LDE2IEBAIHZvaWQgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6ZGV0ZXJtaW5lUHJvcGUKICAgICAgICAgbV90b1Byb3BlcnR5VmFsdWVUeXBl
ID0gSW5oZXJpdFZhbHVlOwogfQogCi12b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRhcmdldEVs
ZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQqIGN1cnJlbnRUYXJnZXQsIFNWR0VsZW1lbnQqIG5l
d1RhcmdldCkKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0RWxlbWVudChTVkdF
bGVtZW50KiB0YXJnZXQpCiB7Ci0gICAgU1ZHU01JTEVsZW1lbnQ6OnRhcmdldEVsZW1lbnRXaWxs
Q2hhbmdlKGN1cnJlbnRUYXJnZXQsIG5ld1RhcmdldCk7Ci0KLSAgICBjaGVja0ludmFsaWRDU1NB
dHRyaWJ1dGVUeXBlKG5ld1RhcmdldCk7CisgICAgU1ZHU01JTEVsZW1lbnQ6OnNldFRhcmdldEVs
ZW1lbnQodGFyZ2V0KTsKKyAgICBjaGVja0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKHRhcmdldCk7
CiB9CiAKIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQogewogICAgIFNWR1NNSUxFbGVtZW50OjpzZXRB
dHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUpOwotCi0gICAgY2hlY2tJbnZhbGlkQ1NTQXR0cmli
dXRlVHlwZSh0YXJnZXRFbGVtZW50KERvTm90UmVzb2x2ZU5ld1RhcmdldCkpOworICAgIGNoZWNr
SW52YWxpZENTU0F0dHJpYnV0ZVR5cGUodGFyZ2V0RWxlbWVudCgpKTsKIH0KIAogdm9pZCBTVkdB
bmltYXRpb25FbGVtZW50OjpjaGVja0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKFNWR0VsZW1lbnQq
IHRhcmdldCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAko
cmV2aXNpb24gMTM2MDI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw4IEBAIHByb3RlY3RlZDoKICAgICBB
bmltYXRlZFByb3BlcnR5VmFsdWVUeXBlIG1fZnJvbVByb3BlcnR5VmFsdWVUeXBlOwogICAgIEFu
aW1hdGVkUHJvcGVydHlWYWx1ZVR5cGUgbV90b1Byb3BlcnR5VmFsdWVUeXBlOwogCi0gICAgdmly
dHVhbCB2b2lkIHRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQqIGN1cnJlbnRUYXJn
ZXQsIFNWR0VsZW1lbnQqIG9sZFRhcmdldCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNl
dFRhcmdldEVsZW1lbnQoU1ZHRWxlbWVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRBdHRyaWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBPVkVSUklERTsKICAgICBib29s
IGhhc0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbnZhbGlk
Q1NTQXR0cmlidXRlVHlwZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbk1v
ZGUoKTsKQEAgLTIwNiw3ICsyMDcsNiBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIGFuaW1hdGlvbkF0dHJpYnV0ZUNoYW5nZWQoKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0QXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJikgT1ZFUlJJREU7
CiAgICAgdm9pZCBzZXRBdHRyaWJ1dGVUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAgICAg
dm9pZCBjaGVja0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKFNWR0VsZW1lbnQqKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiAx
MzYwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNiBAQCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OlNW
R0RvY3VtZW50RXh0ZW5zCiAKIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6flNWR0RvY3VtZW50RXh0
ZW5zaW9ucygpCiB7Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG1fYW5pbWF0ZWRFbGVtZW50cyk7CiAg
ICAgZGVsZXRlQWxsVmFsdWVzKG1fcGVuZGluZ1Jlc291cmNlcyk7CiAgICAgZGVsZXRlQWxsVmFs
dWVzKG1fcGVuZGluZ1Jlc291cmNlc0ZvclJlbW92YWwpOwogfQpAQCAtMTMzLDU4ICsxMzIsNiBA
QCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6ZGlzcGF0Y2hTVkdMCiAgICAgfQogfQogCi12
b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkQW5pbWF0aW9uRWxlbWVudFRvVGFyZ2V0KFNW
R1NNSUxFbGVtZW50KiBhbmltYXRpb25FbGVtZW50LCBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50
KQotewotICAgIEFTU0VSVCh0YXJnZXRFbGVtZW50KTsKLSAgICBBU1NFUlQoYW5pbWF0aW9uRWxl
bWVudCk7Ci0KLSAgICBpZiAoSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVt
ZW50c0ZvclRhcmdldCA9IG1fYW5pbWF0ZWRFbGVtZW50cy5nZXQodGFyZ2V0RWxlbWVudCkpIHsK
LSAgICAgICAgYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQtPmFkZChhbmltYXRpb25FbGVtZW50
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQq
PiogYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBuZXcgSGFzaFNldDxTVkdTTUlMRWxlbWVu
dCo+OwotICAgIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0LT5hZGQoYW5pbWF0aW9uRWxlbWVu
dCk7Ci0gICAgbV9hbmltYXRlZEVsZW1lbnRzLnNldCh0YXJnZXRFbGVtZW50LCBhbmltYXRpb25F
bGVtZW50c0ZvclRhcmdldCk7Ci19Ci0KLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1v
dmVBbmltYXRpb25FbGVtZW50RnJvbVRhcmdldChTVkdTTUlMRWxlbWVudCogYW5pbWF0aW9uRWxl
bWVudCwgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkKLXsKLSAgICBBU1NFUlQodGFyZ2V0RWxl
bWVudCk7Ci0gICAgQVNTRVJUKGFuaW1hdGlvbkVsZW1lbnQpOwotCi0gICAgSGFzaE1hcDxTVkdF
bGVtZW50KiwgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiA+OjppdGVyYXRvciBpdCA9IG1fYW5p
bWF0ZWRFbGVtZW50cy5maW5kKHRhcmdldEVsZW1lbnQpOwotICAgIEFTU0VSVChpdCAhPSBtX2Fu
aW1hdGVkRWxlbWVudHMuZW5kKCkpOwotICAgIAotICAgIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQq
PiogYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBpdC0+dmFsdWU7Ci0gICAgQVNTRVJUKCFh
bmltYXRpb25FbGVtZW50c0ZvclRhcmdldC0+aXNFbXB0eSgpKTsKLQotICAgIGFuaW1hdGlvbkVs
ZW1lbnRzRm9yVGFyZ2V0LT5yZW1vdmUoYW5pbWF0aW9uRWxlbWVudCk7Ci0gICAgaWYgKGFuaW1h
dGlvbkVsZW1lbnRzRm9yVGFyZ2V0LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9hbmltYXRlZEVs
ZW1lbnRzLnJlbW92ZShpdCk7Ci0gICAgICAgIGRlbGV0ZSBhbmltYXRpb25FbGVtZW50c0ZvclRh
cmdldDsKLSAgICB9Ci19Ci0KLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxB
bmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkKLXsK
LSAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7Ci0gICAgSGFzaE1hcDxTVkdFbGVtZW50KiwgSGFz
aFNldDxTVkdTTUlMRWxlbWVudCo+KiA+OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0ZWRFbGVtZW50
cy5maW5kKHRhcmdldEVsZW1lbnQpOwotICAgIGlmIChpdCA9PSBtX2FuaW1hdGVkRWxlbWVudHMu
ZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiog
YW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBpdC0+dmFsdWU7Ci0gICAgVmVjdG9yPFNWR1NN
SUxFbGVtZW50Kj4gdG9CZVJlc2V0OwotCi0gICAgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+Ojpp
dGVyYXRvciBlbmQgPSBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldC0+ZW5kKCk7Ci0gICAgZm9y
IChIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj46Oml0ZXJhdG9yIGl0ID0gYW5pbWF0aW9uRWxlbWVu
dHNGb3JUYXJnZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdG9CZVJlc2V0
LmFwcGVuZCgqaXQpOwotCi0gICAgVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj46Oml0ZXJhdG9yIHZl
Y3RvckVuZCA9IHRvQmVSZXNldC5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxTVkdTTUlMRWxlbWVu
dCo+OjppdGVyYXRvciB2ZWN0b3JJdCA9IHRvQmVSZXNldC5iZWdpbigpOyB2ZWN0b3JJdCAhPSB2
ZWN0b3JFbmQ7ICsrdmVjdG9ySXQpCi0gICAgICAgICgqdmVjdG9ySXQpLT5yZXNldFRhcmdldEVs
ZW1lbnQoKTsKLX0KLQogLy8gRklYTUU6IENhbGxlcnMgc2hvdWxkIHByb2JhYmx5IHVzZSBTY3Jp
cHRDb250cm9sbGVyOjpldmVudEhhbmRsZXJMaW5lTnVtYmVyKCkKIHN0YXRpYyBpbnQgcGFyc2Vy
TGluZU51bWJlcihEb2N1bWVudCogZG9jdW1lbnQpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCShyZXZpc2lvbiAxMzYwMjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDEwICs1OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhdXNlQW5pbWF0aW9ucygpOwogICAgIHZv
aWQgdW5wYXVzZUFuaW1hdGlvbnMoKTsKICAgICB2b2lkIGRpc3BhdGNoU1ZHTG9hZEV2ZW50VG9P
dXRlcm1vc3RTVkdFbGVtZW50cygpOwotICAgIAotICAgIHZvaWQgYWRkQW5pbWF0aW9uRWxlbWVu
dFRvVGFyZ2V0KFNWR1NNSUxFbGVtZW50KiwgU1ZHRWxlbWVudCopOwotICAgIHZvaWQgcmVtb3Zl
QW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQoU1ZHU01JTEVsZW1lbnQqLCBTVkdFbGVtZW50Kik7
Ci0gICAgdm9pZCByZW1vdmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQoU1ZHRWxlbWVu
dCopOwogCiAgICAgdm9pZCByZXBvcnRXYXJuaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQg
cmVwb3J0RXJyb3IoY29uc3QgU3RyaW5nJik7CkBAIC04Myw3ICs3OSw2IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7IC8vIHdlYWsgcmVmZXJlbmNlCiAgICAg
SGFzaFNldDxTVkdTVkdFbGVtZW50Kj4gbV90aW1lQ29udGFpbmVyczsgLy8gRm9yIFNWRyAxLjIg
c3VwcG9ydCB0aGlzIHdpbGwgbmVlZCB0byBiZSBtYWRlIG1vcmUgZ2VuZXJhbC4KLSAgICBIYXNo
TWFwPFNWR0VsZW1lbnQqLCBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qID4gbV9hbmltYXRlZEVs
ZW1lbnRzOwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgSGFzaFNldDxTVkdGb250RmFjZUVs
ZW1lbnQqPiBtX3N2Z0ZvbnRGYWNlRWxlbWVudHM7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNjAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNiBAQCBTVkdFbGVtZW50
Ojp+U1ZHRWxlbWVudCgpCiAgICAgICAgIHJhcmVEYXRhTWFwLnJlbW92ZShpdCk7CiAgICAgfQog
ICAgIEFTU0VSVChkb2N1bWVudCgpKTsKLSAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNp
b25zKCktPnJlbW92ZUFsbEFuaW1hdGlvbkVsZW1lbnRzRnJvbVRhcmdldCh0aGlzKTsKICAgICBk
b2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVu
Y2VzRm9yVGFyZ2V0KHRoaXMpOwogfQogCkBAIC0xODMsNyArMTgyLDYgQEAgdm9pZCBTVkdFbGVt
ZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJObwogICAgIFN0eWxlZEVsZW1lbnQ6OnJlbW92ZWRG
cm9tKHJvb3RQYXJlbnQpOwogCiAgICAgaWYgKHdhc0luRG9jdW1lbnQpIHsKLSAgICAgICAgZG9j
dW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVBbGxBbmltYXRpb25FbGVtZW50
c0Zyb21UYXJnZXQodGhpcyk7CiAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS0+cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQodGhpcyk7CiAgICAgICAg
IGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlRWxlbWVudEZyb21QZW5k
aW5nUmVzb3VyY2VzKHRoaXMpOwogICAgIH0KQEAgLTUzNywxMCArNTM1LDggQEAgdm9pZCBTVkdF
bGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IAogewogICAgIFN0eWxlZEVsZW1lbnQ6OmF0
dHJpYnV0ZUNoYW5nZWQobmFtZSwgbmV3VmFsdWUpOwogCi0gICAgaWYgKGlzSWRBdHRyaWJ1dGVO
YW1lKG5hbWUpKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+
cmVtb3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNGcm9tVGFyZ2V0KHRoaXMpOworICAgIGlmIChpc0lk
QXR0cmlidXRlTmFtZShuYW1lKSkKICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLT5yZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldCh0aGlzKTsKLSAgICB9
CiAKICAgICAvLyBDaGFuZ2VzIHRvIHRoZSBzdHlsZSBhdHRyaWJ1dGUgYXJlIHByb2Nlc3NlZCBs
YXppbHkgKHNlZSBFbGVtZW50OjpnZXRBdHRyaWJ1dGUoKSBhbmQgcmVsYXRlZCBtZXRob2RzKSwK
ICAgICAvLyBzbyB3ZSBkb24ndCB3YW50IGNoYW5nZXMgdG8gdGhlIHN0eWxlIGF0dHJpYnV0ZSB0
byByZXN1bHQgaW4gZXh0cmEgd29yayBoZXJlLgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnRJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnRJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDEzNjAyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsMTQgKzE0
MCw2IEBAIHZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjppbnZhbGlkYXRlQWxsSW4KICAgICAgICAg
QVNTRVJUKCgqaXQpLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpID09IGVsZW1lbnQpOwogICAgICAg
ICAoKml0KS0+c2hhZG93VHJlZUVsZW1lbnQoKS0+c2V0Q29ycmVzcG9uZGluZ0VsZW1lbnQoMCk7
CiAKLSAgICAgICAgLy8gVGhlIHNoYWRvdyB0cmVlLCB3aGljaCBpcyBldmVudHVhbGx5IGFuaW1h
dGVkLCBpcyBtdXRhdGVkLiBJbiBvcmRlciB0byBrZWVwIHRoZSBhbmltVmFsCi0gICAgICAgIC8v
IGxvZ2ljIGNvcnJlY3QsIHdlIGhhdmUgdG8gc3RvcCB0aGUgYW5pbWF0aW9uLCBhbmQgcmVzdGFy
dCBpdCBvbmNlIHRoZSBzaGFkb3cgdHJlZSBoYXMKLSAgICAgICAgLy8gcmVjbG9uZWQuIE90aGVy
d2lzZSB3ZSBtaXNzIHRvIGNhbGwgc3RvcEFuaW1WYWxBbmltYXRpb24oKSBvbiB0aGUgb2xkIHNo
YWRvdyB0cmVlIGVsZW1lbnQKLSAgICAgICAgLy8gd2hpY2ggbGVhZHMgdG8gYW4gYXNzZXJ0aW9u
IG9uY2UgZ2FyYmFnZSBpcyBjb2xsZWN0ZWQsIGlmIHRoZSBhbmltVmFsIGJpbmRpbmdzIGhhdmUg
YmVlbgotICAgICAgICAvLyBhY2Nlc3NlZCBmcm9tIEpTLiBJdCB3b3VsZCBhbHNvIGFzc2VydCBv
biB0aGUgbmV4dCB1cGRhdGVBbmltYXRpb25zKCkgY2FsbCBhcyB0aGUgbmV3Ci0gICAgICAgIC8v
IFNWR0FuaW1hdGVkUHJvcGVydHkgb2JqZWN0IGhhc24ndCBiZWVuIGluaXRpYWxpemVkIHlldCAo
dXNpbmcgc3RhcnRBbmltVmFsQW5pbWF0aW9uKS4KLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQo
KS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21U
YXJnZXQoZWxlbWVudCk7Ci0KICAgICAgICAgaWYgKFNWR1VzZUVsZW1lbnQqIGVsZW1lbnQgPSAo
Kml0KS0+Y29ycmVzcG9uZGluZ1VzZUVsZW1lbnQoKSkgewogICAgICAgICAgICAgQVNTRVJUKGVs
ZW1lbnQtPmluRG9jdW1lbnQoKSk7CiAgICAgICAgICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU2hh
ZG93VHJlZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDEzNjAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw4IEBAIHZvaWQgU1ZHTVBhdGhFbGVtZW50Ojpi
dWlsZFBlbmRpbmdSZXNvdXIKICAgICBTdHJpbmcgaWQ7CiAgICAgRWxlbWVudCogdGFyZ2V0ID0g
U1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCksIGRvY3Vt
ZW50KCksICZpZCk7CiAgICAgaWYgKCF0YXJnZXQpIHsKLSAgICAgICAgaWYgKGhhc1BlbmRpbmdS
ZXNvdXJjZXMoKSkKKyAgICAgICAgLy8gRG8gbm90IHJlZ2lzdGVyIGFzIHBlbmRpbmcgaWYgd2Ug
YXJlIGFscmVhZHkgcGVuZGluZyB0aGlzIHJlc291cmNlLgorICAgICAgICBpZiAoZG9jdW1lbnQo
KS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5pc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2UodGhpcywg
aWQpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAkocmV2aXNp
b24gMTM2MDI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2MywxMSArMTYzLDE0IEBAIHZvaWQgU1ZHVGV4dFBhdGhFbGVt
ZW50OjpidWlsZFBlbmRpbmdSZXMKICAgICBTdHJpbmcgaWQ7CiAgICAgRWxlbWVudCogdGFyZ2V0
ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCksIGRv
Y3VtZW50KCksICZpZCk7CiAgICAgaWYgKCF0YXJnZXQpIHsKLSAgICAgICAgaWYgKGhhc1BlbmRp
bmdSZXNvdXJjZXMoKSB8fCBpZC5pc0VtcHR5KCkpCisgICAgICAgIC8vIERvIG5vdCByZWdpc3Rl
ciBhcyBwZW5kaW5nIGlmIHdlIGFyZSBhbHJlYWR5IHBlbmRpbmcgdGhpcyByZXNvdXJjZS4KKyAg
ICAgICAgaWYgKGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+aXNFbGVtZW50UGVu
ZGluZ1Jlc291cmNlKHRoaXMsIGlkKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBk
b2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPmFkZFBlbmRpbmdSZXNvdXJjZShpZCwg
dGhpcyk7Ci0gICAgICAgIEFTU0VSVChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpOworICAgICAgICBp
ZiAoIWlkLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLT5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIHRoaXMpOworICAgICAgICAgICAgQVNT
RVJUKGhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7CisgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHRh
cmdldC0+aXNTVkdFbGVtZW50KCkpIHsKICAgICAgICAgLy8gUmVnaXN0ZXIgdXMgd2l0aCB0aGUg
dGFyZ2V0IGluIHRoZSBkZXBlbmRlbmNpZXMgbWFwLiBBbnkgY2hhbmdlIG9mIGhyZWZFbGVtZW50
CiAgICAgICAgIC8vIHRoYXQgbGVhZHMgdG8gcmVsYXlvdXQvcmVwYWludGluZyBub3cgaW5mb3Jt
cyB1cywgc28gd2UgY2FuIHJlYWN0IHRvIGl0LgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNjAyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzksMTEgKzEzOSw1MCBAQCBTVkdTTUlMRWxlbWVudDo6U1ZHU01JTEVsZW1lbnQo
Y29uc3QgUXVhCiAKIFNWR1NNSUxFbGVtZW50Ojp+U1ZHU01JTEVsZW1lbnQoKQogeworICAgIGNs
ZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7CiAgICAgZGlzY29ubmVjdENvbmRpdGlvbnMoKTsKICAg
ICBpZiAobV90aW1lQ29udGFpbmVyICYmIG1fdGFyZ2V0RWxlbWVudCAmJiBoYXNWYWxpZEF0dHJp
YnV0ZU5hbWUoKSkKICAgICAgICAgbV90aW1lQ29udGFpbmVyLT51bnNjaGVkdWxlKHRoaXMsIG1f
dGFyZ2V0RWxlbWVudCwgbV9hdHRyaWJ1dGVOYW1lKTsKLSAgICBpZiAobV90YXJnZXRFbGVtZW50
KQotICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFuaW1h
dGlvbkVsZW1lbnRGcm9tVGFyZ2V0KHRoaXMsIG1fdGFyZ2V0RWxlbWVudCk7Cit9CisKK3ZvaWQg
U1ZHU01JTEVsZW1lbnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCkKK3sKKyAgICBBU1NFUlQo
ZG9jdW1lbnQoKSk7CisgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1v
dmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCh0aGlzKTsKK30KKwordm9pZCBTVkdTTUlM
RWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UoKQoreworICAgIGNsZWFyUmVzb3VyY2VSZWZl
cmVuY2VzKCk7CisgICAgaWYgKCFpbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFN0cmluZyBpZDsKKyAgICBTdHJpbmcgaHJlZiA9IGdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpo
cmVmQXR0cik7CisgICAgRWxlbWVudCogdGFyZ2V0OworICAgIGlmIChocmVmLmlzRW1wdHkoKSkK
KyAgICAgICAgdGFyZ2V0ID0gcGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUoKS0+aXNFbGVtZW50
Tm9kZSgpID8gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHBhcmVudE5vZGUoKSkgOiAwOworICAgIGVs
c2UKKyAgICAgICAgdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlS
SVN0cmluZyhocmVmLCBkb2N1bWVudCgpLCAmaWQpOworICAgIFNWR0VsZW1lbnQqIHN2Z1Rhcmdl
dCA9IHRhcmdldCAmJiB0YXJnZXQtPmlzU1ZHRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8U1ZHRWxl
bWVudCo+KHRhcmdldCkgOiAwOworCisgICAgaWYgKHN2Z1RhcmdldCAhPSB0YXJnZXRFbGVtZW50
KCkpCisgICAgICAgIHNldFRhcmdldEVsZW1lbnQoc3ZnVGFyZ2V0KTsKKworICAgIGlmICghc3Zn
VGFyZ2V0KSB7CisgICAgICAgIC8vIERvIG5vdCByZWdpc3RlciBhcyBwZW5kaW5nIGlmIHdlIGFy
ZSBhbHJlYWR5IHBlbmRpbmcgdGhpcyByZXNvdXJjZS4KKyAgICAgICAgaWYgKGRvY3VtZW50KCkt
PmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+aXNFbGVtZW50UGVuZGluZ1Jlc291cmNlKHRoaXMsIGlk
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoIWlkLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5hZGRQZW5kaW5n
UmVzb3VyY2UoaWQsIHRoaXMpOworICAgICAgICAgICAgQVNTRVJUKGhhc1BlbmRpbmdSZXNvdXJj
ZXMoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBSZWdpc3RlciB1cyB3
aXRoIHRoZSB0YXJnZXQgaW4gdGhlIGRlcGVuZGVuY2llcyBtYXAuIEFueSBjaGFuZ2Ugb2YgaHJl
ZkVsZW1lbnQKKyAgICAgICAgLy8gdGhhdCBsZWFkcyB0byByZWxheW91dC9yZXBhaW50aW5nIG5v
dyBpbmZvcm1zIHVzLCBzbyB3ZSBjYW4gcmVhY3QgdG8gaXQuCisgICAgICAgIGRvY3VtZW50KCkt
PmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KHRoaXMs
IHN2Z1RhcmdldCk7CisgICAgfQogfQogCiBzdGF0aWMgaW5saW5lIFF1YWxpZmllZE5hbWUgY29u
c3RydWN0UXVhbGlmaWVkTmFtZShjb25zdCBTVkdFbGVtZW50KiBzdmdFbGVtZW50LCBjb25zdCBT
dHJpbmcmIGF0dHJpYnV0ZU5hbWUpCkBAIC0yMTYsMTIgKzI1NSwxMSBAQCBOb2RlOjpJbnNlcnRp
b25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR1NNCiAgICAgaWYgKG1faXNXYWl0aW5nRm9yRmlyc3RJ
bnRlcnZhbCkKICAgICAgICAgcmVzb2x2ZUZpcnN0SW50ZXJ2YWwoKTsKIAotICAgIC8vIEZvcmNl
IHJlc29sdXRpb24gb2YgdGFyZ2V0IGVsZW1lbnQKLSAgICBpZiAoIW1fdGFyZ2V0RWxlbWVudCkK
LSAgICAgICAgdGFyZ2V0RWxlbWVudCgpOwogICAgIGlmIChtX3RpbWVDb250YWluZXIpCiAgICAg
ICAgIG1fdGltZUNvbnRhaW5lci0+bm90aWZ5SW50ZXJ2YWxzQ2hhbmdlZCgpOwogCisgICAgYnVp
bGRQZW5kaW5nUmVzb3VyY2UoKTsKKwogICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwogfQogCkBA
IC0yMzgsMTEgKzI3NiwxMCBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpyZW1vdmVkRnJvbShDb250
YWluCiAgICAgICAgIFJlZlB0cjxTVkdTTUlMRWxlbWVudD4ga2VlcEFsaXZlKHRoaXMpOwogICAg
ICAgICBkaXNjb25uZWN0Q29uZGl0aW9ucygpOwogCi0gICAgICAgIC8vIENsZWFyIHRhcmdldCBu
b3csIGJlY2F1c2UgZGlzY29ubmVjdENvbmRpdGlvbnMgY2FsbHMgdGFyZ2V0RWxlbWVudCgpIHdo
aWNoIHdpbGwgcmVjcmVhdGUgdGhlIHRhcmdldCBpZiB3ZSByZW1vdmVkIGl0IHNvb25lci4gCi0g
ICAgICAgIGlmIChtX3RhcmdldEVsZW1lbnQpCi0gICAgICAgICAgICByZXNldFRhcmdldEVsZW1l
bnQoRG9Ob3RSZXNvbHZlTmV3VGFyZ2V0KTsKLQorICAgICAgICBjbGVhclJlc291cmNlUmVmZXJl
bmNlcygpOworICAgICAgICBzZXRUYXJnZXRFbGVtZW50KDApOwogICAgICAgICBzZXRBdHRyaWJ1
dGVOYW1lKGFueVFOYW1lKCkpOworICAgICAgICBhbmltYXRpb25BdHRyaWJ1dGVDaGFuZ2VkKCk7
CiAgICAgfQogCiAgICAgU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20ocm9vdFBhcmVudCk7CkBAIC00
NzIsMTYgKzUwOSwxMSBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
CiAgICAgICAgICAgICBiZWdpbkxpc3RDaGFuZ2VkKGVsYXBzZWQoKSk7CiAgICAgICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplbmRBdHRyKQogICAgICAgICAgICAgZW5kTGlzdENo
YW5nZWQoZWxhcHNlZCgpKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmF0dHJpYnV0ZU5hbWVBdHRyKSB7CisgICAgICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjphdHRyaWJ1dGVOYW1lQXR0cikKICAgICAgICAgICAgIHNldEF0dHJpYnV0ZU5hbWUoY29u
c3RydWN0UXVhbGlmaWVkTmFtZSh0aGlzLCBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjphdHRy
aWJ1dGVOYW1lQXR0cikpKTsKLSAgICAgICAgICAgIGlmIChtX3RhcmdldEVsZW1lbnQpIHsKLSAg
ICAgICAgICAgICAgICByZXNldFRhcmdldEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUubWF0Y2hlcyhY
TGlua05hbWVzOjpocmVmQXR0cikpIHsKLSAgICAgICAgICAgIC8vIHRhcmdldEVsZW1lbnQgaXMg
cmVzb2x2ZWQgbGF6aWx5IGJ1dCB0YXJnZXRFbGVtZW50KCkgd2lsbCBoYW5kbGUgY2FsbGluZyB0
YXJnZXRFbGVtZW50V2lsbENoYW5nZSgpLgotICAgICAgICAgICAgaWYgKFNWR0VsZW1lbnQqIHRh
cmdldEVsZW1lbnQgPSB0aGlzLT50YXJnZXRFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgZG9j
dW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVBbGxBbmltYXRpb25FbGVtZW50
c0Zyb21UYXJnZXQodGFyZ2V0RWxlbWVudCk7CisgICAgICAgIGVsc2UgaWYgKGF0dHJOYW1lLm1h
dGNoZXMoWExpbmtOYW1lczo6aHJlZkF0dHIpKSB7CisgICAgICAgICAgICBTVkdFbGVtZW50SW5z
dGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAgICAg
ICAgICAgYnVpbGRQZW5kaW5nUmVzb3VyY2UoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTYy
LDU3ICs1OTQsMzAgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZShjbwog
ICAgICAgICAgICAgbV90aW1lQ29udGFpbmVyLT5zY2hlZHVsZSh0aGlzLCBtX3RhcmdldEVsZW1l
bnQsIG1fYXR0cmlidXRlTmFtZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fYXR0cmlidXRlTmFt
ZSA9IGF0dHJpYnV0ZU5hbWU7Ci19CiAKLVNWR0VsZW1lbnQqIFNWR1NNSUxFbGVtZW50Ojp0YXJn
ZXRFbGVtZW50KFJlc29sdmVUYXJnZXQgcmVzb2x2ZVRhcmdldCkKLXsKKyAgICAvLyBPbmx5IGNs
ZWFyIHRoZSBhbmltYXRlZCB0eXBlLCBpZiB3ZSBoYWQgYSB0YXJnZXQgYmVmb3JlLgogICAgIGlm
IChtX3RhcmdldEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBtX3RhcmdldEVsZW1lbnQ7Ci0KLSAg
ICBpZiAoIWluRG9jdW1lbnQoKSB8fCByZXNvbHZlVGFyZ2V0ID09IERvTm90UmVzb2x2ZU5ld1Rh
cmdldCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTdHJpbmcgaHJlZiA9IGdldEF0dHJpYnV0
ZShYTGlua05hbWVzOjpocmVmQXR0cik7Ci0gICAgQ29udGFpbmVyTm9kZSogdGFyZ2V0ID0gaHJl
Zi5pc0VtcHR5KCkgPyBwYXJlbnROb2RlKCkgOiBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1l
bnRGcm9tSVJJU3RyaW5nKGhyZWYsIGRvY3VtZW50KCkpOwotICAgIGlmICghdGFyZ2V0IHx8ICF0
YXJnZXQtPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFNWR0VsZW1l
bnQqIHRhcmdldEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4odGFyZ2V0KTsKLSAg
ICB0YXJnZXRFbGVtZW50V2lsbENoYW5nZShtX3RhcmdldEVsZW1lbnQsIHRhcmdldEVsZW1lbnQp
OwotICAgIG1fdGFyZ2V0RWxlbWVudCA9IHRhcmdldEVsZW1lbnQ7Ci0gICAgZG9jdW1lbnQoKS0+
YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5hZGRBbmltYXRpb25FbGVtZW50VG9UYXJnZXQodGhpcywg
bV90YXJnZXRFbGVtZW50KTsKLSAgICByZXR1cm4gbV90YXJnZXRFbGVtZW50OworICAgICAgICBj
bGVhckFuaW1hdGVkVHlwZShtX3RhcmdldEVsZW1lbnQpOwogfQogCi12b2lkIFNWR1NNSUxFbGVt
ZW50Ojp0YXJnZXRFbGVtZW50V2lsbENoYW5nZShTVkdFbGVtZW50KiBjdXJyZW50VGFyZ2V0LCBT
VkdFbGVtZW50KiBuZXdUYXJnZXQpCit2b2lkIFNWR1NNSUxFbGVtZW50OjpzZXRUYXJnZXRFbGVt
ZW50KFNWR0VsZW1lbnQqIHRhcmdldCkKIHsKICAgICBpZiAobV90aW1lQ29udGFpbmVyICYmIGhh
c1ZhbGlkQXR0cmlidXRlTmFtZSgpKSB7Ci0gICAgICAgIGlmIChjdXJyZW50VGFyZ2V0KQotICAg
ICAgICAgICAgbV90aW1lQ29udGFpbmVyLT51bnNjaGVkdWxlKHRoaXMsIGN1cnJlbnRUYXJnZXQs
IG1fYXR0cmlidXRlTmFtZSk7Ci0gICAgICAgIGlmIChuZXdUYXJnZXQpCi0gICAgICAgICAgICBt
X3RpbWVDb250YWluZXItPnNjaGVkdWxlKHRoaXMsIG5ld1RhcmdldCwgbV9hdHRyaWJ1dGVOYW1l
KTsKKyAgICAgICAgaWYgKG1fdGFyZ2V0RWxlbWVudCkKKyAgICAgICAgICAgIG1fdGltZUNvbnRh
aW5lci0+dW5zY2hlZHVsZSh0aGlzLCBtX3RhcmdldEVsZW1lbnQsIG1fYXR0cmlidXRlTmFtZSk7
CisgICAgICAgIGlmICh0YXJnZXQpCisgICAgICAgICAgICBtX3RpbWVDb250YWluZXItPnNjaGVk
dWxlKHRoaXMsIHRhcmdldCwgbV9hdHRyaWJ1dGVOYW1lKTsKICAgICB9CiAKICAgICAvLyBPbmx5
IGNsZWFyIHRoZSBhbmltYXRlZCB0eXBlLCBpZiB3ZSBoYWQgYSB0YXJnZXQgYmVmb3JlLgotICAg
IGlmIChjdXJyZW50VGFyZ2V0KQotICAgICAgICBjbGVhckFuaW1hdGVkVHlwZShjdXJyZW50VGFy
Z2V0KTsKKyAgICBpZiAobV90YXJnZXRFbGVtZW50KQorICAgICAgICBjbGVhckFuaW1hdGVkVHlw
ZShtX3RhcmdldEVsZW1lbnQpOwogCiAgICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBzdGF0ZSBpcyBu
b3QgSW5hY3RpdmUsIGFsd2F5cyByZXNldCB0byBhIGNsZWFyIHN0YXRlIGJlZm9yZSBsZWF2aW5n
IHRoZSBvbGQgdGFyZ2V0IGVsZW1lbnQuCiAgICAgaWYgKG1fYWN0aXZlU3RhdGUgIT0gSW5hY3Rp
dmUpCiAgICAgICAgIGVuZGVkQWN0aXZlSW50ZXJ2YWwoKTsKLX0KLQotdm9pZCBTVkdTTUlMRWxl
bWVudDo6cmVzZXRUYXJnZXRFbGVtZW50KFJlc29sdmVUYXJnZXQgcmVzb2x2ZVRhcmdldCkKLXsK
LSAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFuaW1hdGlvbkVs
ZW1lbnRGcm9tVGFyZ2V0KHRoaXMsIG1fdGFyZ2V0RWxlbWVudCk7Ci0gICAgdGFyZ2V0RWxlbWVu
dFdpbGxDaGFuZ2UobV90YXJnZXRFbGVtZW50LCAwKTsKLSAgICBtX3RhcmdldEVsZW1lbnQgPSAw
OwotCi0gICAgLy8gSW1tZWRpYXRlbHkgcmVzb2x2ZSB0aGUgbmV3IHRhcmdldEVsZW1lbnQgKGFu
ZCBjYWxsIHRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlIGlmIG5lZWRlZCkgaW5zdGVhZCBvZiBkb2lu
ZyBpdCBsYXppbHkuCi0gICAgaWYgKHJlc29sdmVUYXJnZXQgPT0gUmVzb2x2ZU5ld1RhcmdldCkK
LSAgICAgICAgdGFyZ2V0RWxlbWVudCgpOwogCi0gICAgYW5pbWF0aW9uQXR0cmlidXRlQ2hhbmdl
ZCgpOworICAgIG1fdGFyZ2V0RWxlbWVudCA9IHRhcmdldDsKIH0KIAogU01JTFRpbWUgU1ZHU01J
TEVsZW1lbnQ6OmVsYXBzZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TVkdTTUlMRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAkocmV2aXNpb24gMTM2MDI0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw4ICszMyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBSZXNvbHZlVGFyZ2V0
IHsgRG9Ob3RSZXNvbHZlTmV3VGFyZ2V0LCBSZXNvbHZlTmV3VGFyZ2V0IH07Ci0KIGNsYXNzIENv
bmRpdGlvbkV2ZW50TGlzdGVuZXI7CiBjbGFzcyBTTUlMVGltZUNvbnRhaW5lcjsKIApAQCAtNTgs
OCArNTYsNyBAQCBwdWJsaWM6CiAKICAgICBTTUlMVGltZUNvbnRhaW5lciogdGltZUNvbnRhaW5l
cigpIGNvbnN0IHsgcmV0dXJuIG1fdGltZUNvbnRhaW5lci5nZXQoKTsgfQogCi0gICAgU1ZHRWxl
bWVudCogdGFyZ2V0RWxlbWVudChSZXNvbHZlVGFyZ2V0ID0gUmVzb2x2ZU5ld1RhcmdldCk7Ci0g
ICAgdm9pZCByZXNldFRhcmdldEVsZW1lbnQoUmVzb2x2ZVRhcmdldCA9IFJlc29sdmVOZXdUYXJn
ZXQpOworICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3Rh
cmdldEVsZW1lbnQ7IH0KICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVOYW1lOyB9CiAKICAgICB2b2lkIGJlZ2luQnlMaW5r
QWN0aXZhdGlvbigpOwpAQCAtMTIwLDEwICsxMTcsMTMgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQg
c2V0SW5hY3RpdmUoKSB7IG1fYWN0aXZlU3RhdGUgPSBJbmFjdGl2ZTsgfQogCiAgICAgLy8gU3Vi
LWNsYXNzZXMgbWF5IG5lZWQgdG8gdGFrZSBhY3Rpb24gd2hlbiB0aGUgdGFyZ2V0IGlzIGNoYW5n
ZWQuCi0gICAgdmlydHVhbCB2b2lkIHRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQq
IGN1cnJlbnRUYXJnZXQsIFNWR0VsZW1lbnQqIG5ld1RhcmdldCk7CisgICAgdmlydHVhbCB2b2lk
IHNldFRhcmdldEVsZW1lbnQoU1ZHRWxlbWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRy
aWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGJ1
aWxkUGVuZGluZ1Jlc291cmNlKCk7CisgICAgdm9pZCBjbGVhclJlc291cmNlUmVmZXJlbmNlcygp
OworCiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCgpID0gMDsKICAgICB2
b2lkIGVuZGVkQWN0aXZlSW50ZXJ2YWwoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0
aW9uKGZsb2F0IHBlcmNlbnQsIHVuc2lnbmVkIHJlcGVhdCwgU1ZHU01JTEVsZW1lbnQqIHJlc3Vs
dEVsZW1lbnQpID0gMDsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjMwNikKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEyLTAxICBQ
aGlsaXAgUm9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgVW5pZnkgU1ZHJ3MgYW5p
bWF0aW9uIGFuZCB0YXJnZXQgdHJhY2tpbmcgc3lzdGVtcy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjY1NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3ZnL2FuaW1hdGlvbnMvc3ZnLWFuaW1hdGlv
bi1vcmRlci1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9z
dmctYW5pbWF0aW9uLW9yZGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jdXN0b20vc3Zn
LXBlbmRpbmctdHdpY2UtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogc3ZnL2N1c3Rv
bS9zdmctcGVuZGluZy10d2ljZS5odG1sOiBBZGRlZC4KKwogMjAxMi0xMS0zMCAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBTaG9ydGVuIGEgZmlsZSBuYW1lIGFz
IHRoZSB0ZXN0IHJlbmFtZWQgaW4gcjEzNjEyMiBpcyBzdGlsbCBob3NpbmcgQ2hyb21pdW0gV2lu
IHBlcmYuIGJvdC4KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3N2Zy1hbmltYXRp
b24tb3JkZXItZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvYW5p
bWF0aW9ucy9zdmctYW5pbWF0aW9uLW9yZGVyLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zdmctYW5pbWF0aW9uLW9yZGVyLWV4cGVjdGVk
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj5UZXN0IHRoYXQgdGhlIG9yZGVyIG9mIGVs
ZW1lbnRzIGRvZXMgbm90IGFmZmVjdCBhbmltYXRpb25zLjwvcD4KKzxzdmcgaWQ9InN2ZyIgd2lk
dGg9IjMwMCIgaGVpZ2h0PSIzMDAiPgorICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBo
ZWlnaHQ9IjEwMCIgZmlsbD0iZ3JlZW4iLz4KKzwvc3ZnPgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc3ZnLWFuaW1hdGlvbi1vcmRlci5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3N2Zy1hbmltYXRpb24tb3Jk
ZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3N2Zy1h
bmltYXRpb24tb3JkZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorPCFET0NU
WVBFIEhUTUw+Cis8aHRtbD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBydW5UZXN0KCkgeworICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisKKyAg
Ly8gRGVmZXIgdG8gYWxsb3cgYW5pbWF0aW9ucyB0byBydW4uCisgIHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7CisgIH0sIDApOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3Qo
KSI+Cis8cCBpZD0iZGVzY3JpcHRpb24iPlRlc3QgdGhhdCB0aGUgb3JkZXIgb2YgZWxlbWVudHMg
ZG9lcyBub3QgYWZmZWN0IGFuaW1hdGlvbnMuPC9wPgorPHN2ZyBpZD0ic3ZnIiB3aWR0aD0iMzAw
IiBoZWlnaHQ9IjMwMCI+CisgIDwhLS0gVGhpcyByZWQgc3F1YXJlIHNob3VsZCBiZSBjb3ZlcmVk
IHVwIGlmIHdlIHBhc3MuIC0tPgorICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWln
aHQ9IjEwMCIgZmlsbD0icmVkIi8+CisKKyAgPCEtLSBBbmltYXRlIG9uZSBncmVlbiByZWN0YW5n
bGUgb3ZlciB0aGUgdG9wIGhhbGYgb2YgdGhlIHJlZCBzcXVhcmUuIC0tPgorICA8cmVjdCBpZD0i
cmVjdDEiICB4PSItMTAwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUwIiBmaWxsPSJncmVl
biIgLz4KKyAgPHNldCBhdHRyaWJ1dGVOYW1lPSJ4IiB4bGluazpocmVmPSIjcmVjdDEiIHRvPSIw
Ii8+CisKKyAgPCEtLSBBbmltYXRlIGEgc2Vjb25kIGdyZWVuIHJlY3RhbmdsZSBvdmVyIHRoZSBi
b3R0b20gaGFsZiBvZiB0aGUgcmVkIHNxdWFyZS4gLS0+CisgIDxzZXQgYXR0cmlidXRlTmFtZT0i
eCIgeGxpbms6aHJlZj0iI3JlY3QyIiB0bz0iMCIvPgorICA8cmVjdCBpZD0icmVjdDIiICB4PSIt
MTAwIiB5PSI1MCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI1MCIgZmlsbD0iZ3JlZW4iIC8+Cis8L3N2
Zz4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0b20vc3ZnLXBl
bmRpbmctdHdpY2UtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcv
Y3VzdG9tL3N2Zy1wZW5kaW5nLXR3aWNlLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Zy1wZW5kaW5nLXR3aWNlLWV4cGVjdGVkLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxib2R5
PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj5UZXN0IHRoYXQgYW4gYW5pbWF0aW9uIHdpdGggYSBwZW5k
aW5nIHJlc291cmNlIGNhbiBiZSBjaGFuZ2VkIHRvIGEgc2Vjb25kIHBlbmRpbmcgcmVzb3VyY2Us
IHRoZW4gcmVzb2x2ZWQgY29ycmVjdGx5LjwvcD4KKzxzdmcgaWQ9InN2ZyIgd2lkdGg9IjMwMCIg
aGVpZ2h0PSIzMDAiPgorICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEw
MCIgZmlsbD0iZ3JlZW4iLz4KKzwvc3ZnPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvc3ZnL2N1c3RvbS9zdmctcGVuZGluZy10d2ljZS5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3N2Zy9jdXN0b20vc3ZnLXBlbmRpbmctdHdpY2UuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL3N2Zy9jdXN0b20vc3ZnLXBlbmRpbmctdHdpY2UuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzNCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxzY3JpcHQ+
CitmdW5jdGlvbiBydW5UZXN0KCkgeworICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisKKyAgLy8gVGhlIGFuaW1hdGlvbiBpcyBhbHJlYWR5
IGluIGEgcGVuZGluZyBzdGF0ZSwgY2hhbmdlIGl0IHRvIGFub3RoZXIKKyAgLy8gcGVuZGluZyBp
ZCAobmV3SWQpLCB0aGVuIG1ha2UgdGhlIG5ldyBpZCB2YWxpZCBhbmQgY2hlY2sgdGhhdAorICAv
LyB0aGUgYW5pbWF0aW9uIHJ1bnMuCisgIHZhciByZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3JlY3QnKTsKKyAgdmFyIGFuaW1hdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0
Jyk7CisgIGFuaW1hdGUuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxp
bmsiLCAiaHJlZiIsICIjbmV3SWQiKTsKKyAgcmVjdC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ25ld0lk
Jyk7CisKKyAgLy8gRGVmZXIgdG8gYWxsb3cgYW5pbWF0aW9ucyB0byBydW4uCisgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7CisgIH0sIDApOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9
InJ1blRlc3QoKSI+Cis8cCBpZD0iZGVzY3JpcHRpb24iPlRlc3QgdGhhdCBhbiBhbmltYXRpb24g
d2l0aCBhIHBlbmRpbmcgcmVzb3VyY2UgY2FuIGJlIGNoYW5nZWQgdG8gYSBzZWNvbmQgcGVuZGlu
ZyByZXNvdXJjZSwgdGhlbiByZXNvbHZlZCBjb3JyZWN0bHkuPC9wPgorPHN2ZyBpZD0ic3ZnIiB3
aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCI+CisgIDwhLS0gVGhpcyByZWQgc3F1YXJlIHNob3VsZCBi
ZSBjb3ZlcmVkIHVwIGlmIHdlIHBhc3MuIC0tPgorICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0i
MTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0icmVkIi8+CisKKyAgPCEtLSBUaGlzIGdyZWVuIHNxdWFy
ZSBzaG91bGQgZW5kIHVwIGNvdmVyaW5nIHRoZSByZWQgc3F1YXJlIGlmIHdlIHBhc3MuIC0tPgor
ICA8cmVjdCBpZD0icmVjdCIgeD0iLTEwMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAi
IGZpbGw9ImdyZWVuIi8+CisgIDxzZXQgaWQ9InNldCIgeGxpbms6aHJlZj0iI2RvZXNOb3RFeGlz
dCIgYXR0cmlidXRlTmFtZT0ieCIgdG89IjAiIC8+Cis8L3N2Zz4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177096</attachid>
            <date>2012-12-01 00:26:02 -0800</date>
            <delta_ts>2012-12-06 12:52:16 -0800</delta_ts>
            <desc>Unify SVG&apos;s animation and target tracking systems.</desc>
            <filename>102655.5.patch</filename>
            <type>text/plain</type>
            <size>31578</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjMwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDEyLTEyLTAxICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgVW5pZnkgU1ZHJ3MgYW5pbWF0aW9u
IGFuZCB0YXJnZXQgdHJhY2tpbmcgc3lzdGVtcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjY1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggdW5pZmllcyBvdXIgYW5pbWF0aW9uIHRh
cmdldCB0cmFja2luZyBzeXN0ZW0gYW5kIHJlZ3VsYXIgdGFyZ2V0IHRyYWNraW5nIHN5c3RlbS4K
KyAgICAgICAgVGhpcyBzaW1wbGlmaWVzIHRoZSBjb2RlLCBmaXhlcyBhIGJ1ZywgYW5kIGNsZWFu
cyB1cCBhIGhpc3RvcmljYWxseSBzZWN1cml0eS1zZW5zaXRpdmUgYXJlYS4KKworICAgICAgICBC
YWNrZ3JvdW5kOiBXaGVuIDx1c2U+LCA8bXBhdGg+LCA8YW5pbWF0ZT4sIGV0Yy4gcmVmZXJlbmNl
IGFub3RoZXIgZWxlbWVudCB1c2luZworICAgICAgICB4bGluazpocmVmPSIjaWQiLCB3ZSBuZWVk
IHRvIHRyYWNrIHdoZW4gI2lkIGNoYW5nZXMgdG8gI290aGVySWQsIHdoZW4gI2lkIGlzIHJlbW92
ZWQsIGV0Yy4KKyAgICAgICAgVGhpcyBib29ra2VlcGluZyBvZiBlbGVtZW50IC0+IHRhcmdldCBp
cyBkb25lIGluIFNWR0RvY3VtZW50RXh0ZW5zaW9ucy4gQWRkaXRpb25hbGx5LCB3aGVuCisgICAg
ICAgIGEgdGFyZ2V0IGNoYW5nZXMgdGhhdCBjYXVzZXMgbGF5b3V0IChlLmcuLCByZWN0LnggaXMg
Y2hhbmdlZCksIGFsbCBkZXBlbmRlbnQgZWxlbWVudHMgd2l0aAorICAgICAgICByZW5kZXJlcnMg
YXJlIG5vdGlmaWVkICg8YW5pbWF0ZT4gaGFzIG5vIHJlbmRlcmVyIGFuZCB3aWxsIG5vdCB1c2Ug
dGhpcy4pCisKKyAgICAgICAgUHJldmlvdXNseSwgeGxpbms6aHJlZiBjaGFuZ2VzIHdlcmUgbGF6
aWx5IHJlc29sdmVkIHdoZW4gdGFyZ2V0RWxlbWVudCgpIHdhcyBjYWxsZWQsIHRhcmdldAorICAg
ICAgICBjaGFuZ2VzIHdlcmUgdHJhY2tlZCB1c2luZyB0aGUgYW5pbWF0aW9uIHRyYWNraW5nIGZy
YW1ld29yaywgYW5kIHBlbmRpbmcgdGFyZ2V0cyBkaWQgbm90CisgICAgICAgIHdvcmsgKGUuZy4s
IDxhbmltYXRlIHhsaW5rOmhyZWY9IiNwIj48IS0tYW5pbWF0ZSBpcyBub3cgcGVuZGluZyAjcCAt
LT48cmVjdCBpZD0icCIvPikuCisKKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCwgd2Ugbm8gbG9u
Z2VyIGxhemlseSByZXNvbHZlIHRhcmdldEVsZW1lbnQoKSBidXQgaW5zdGVhZCBjaGFuZ2UgaXQg
d2hlbgorICAgICAgICBvdXIgeGxpbms6aHJlZiBhdHRyaWJ1dGUgY2hhbmdlcy4gSW5zdGVhZCBv
ZiB1c2luZyB0aGUgYW5pbWF0aW9uIHRyYWNraW5nIGZyYW1ld29yayBpbgorICAgICAgICBTVkdE
b2N1bWVudEV4dGVuc2lvbnMsIHdlIG5vdyB1c2UgdGhlIHJlZ3VsYXIgdGFyZ2V0IHRyYWNraW5n
IGZyYW1ld29yay4gTGFzdGx5LCBieSB1c2luZworICAgICAgICB0aGUgcmVndWxhciB0YXJnZXQg
dHJhY2tpbmcgZnJhbWV3b3JrIHdlIGFyZSBhYmxlIHRvIGhvb2sgaW50byB0aGUgcGVuZGluZyBy
ZXNvdXJjZSBoYW5kbGluZworICAgICAgICB3aGljaCBmaXhlcyBhIGJ1ZyAoc2VlIHRoZSB0ZXN0
LikKKworICAgICAgICBBIHRlc3QgaGFzIGJlZW4gYWRkZWQgdG8gdGVzdCB0aGF0IHRoZSBvcmRl
ciBvZiBhbmltYXRpb24gZWxlbWVudHMgZG9lcyBub3QgbWF0dGVyLiBBIHNlY29uZAorICAgICAg
ICB0ZXN0IGhhcyBiZWVuIGFkZGVkIHRvIHNob3cgd2UgZG8gbm90IHJlZ3Jlc3MgYSBwZW5kaW5n
LXdoaWxlLXBlbmRpbmcgY2FzZS4KKworICAgICAgICBUZXN0czogc3ZnL2FuaW1hdGlvbnMvc3Zn
LWFuaW1hdGlvbi1vcmRlci5odG1sCisgICAgICAgICAgICAgICBzdmcvY3VzdG9tL3N2Zy1wZW5k
aW5nLXR3aWNlLmh0bWwKKworICAgICAgICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6c2V0VGFyZ2V0RWxlbWVudCk6CisK
KyAgICAgICAgICAgIHNldFRhcmdldEVsZW1lbnQgYW5kIHNldEF0dHJpYnV0ZU5hbWUgbm93IHdv
cmsgc2ltaWxhcmx5LiBXaGVuIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZQorICAgICAgICAg
ICAgY2hhbmdlcywgd2UgdXBkYXRlIG91ciBpbnRlcm5hbCBzdGF0ZSAodGFyZ2V0IG9yIGF0dHJp
YnV0ZU5hbWUpIGFuZCBzYXZlIGl0IGluc3RlYWQgb2YKKyAgICAgICAgICAgIGxvb2tpbmcgdGhl
c2UgdmFsdWVzIHVwIG9uIGVhY2ggaXRlcmF0aW9uLgorCisgICAgICAgIChXZWJDb3JlOjpTVkdB
bmltYXRlRWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjpyZXNldEFuaW1hdGVkUHJvcGVydHlU
eXBlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaDoKKyAgICAgICAgKFNWR0Fu
aW1hdGVFbGVtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpzZXRBdHRyaWJ1dGVUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0QXR0cmlidXRlTmFt
ZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKFNWR0Fu
aW1hdGlvbkVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjp+U1ZHRG9jdW1lbnRF
eHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVu
dEV4dGVuc2lvbnMuaDoKKyAgICAgICAgKFNWR0RvY3VtZW50RXh0ZW5zaW9ucyk6CisgICAgICAg
ICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6flNW
R0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20pOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAg
ICogc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVt
ZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVsZW1lbnQpOgorCisgICAgICAg
ICAgICBUaGlzIGNhbiBiZSByZW1vdmVkIGFmdGVyIHIxMzE2MzEgbGFuZGVkLgorCisgICAgICAg
ICogc3ZnL1NWR01QYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVs
ZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAgKiBzdmcvU1ZHVGV4dFBhdGhF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRQYXRoRWxlbWVudDo6YnVpbGRQ
ZW5kaW5nUmVzb3VyY2UpOgorCisgICAgICAgICAgICBBIGJ1ZyB3YXMgZGlzY292ZXJlZCBpbiBy
ZXZpZXcgd2l0aCBvdXIgcmVzb3VyY2UgdHJhY2tpbmcgaW4gYSBwZW5kaW5nLXdoaWxlLXBlbmRp
bmcKKyAgICAgICAgICAgIGNhc2UuIFNWR01wYXRoRWxlbWVudCBhbmQgU1ZHVGV4dFBhdGhFbGVt
ZW50IGhhdmUgYmVlbiB1cGRhdGVkIHRvIGZpeCB0aGlzIGFzIHdlbGwuCisKKyAgICAgICAgKiBz
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcDoKKworICAgICAgICAgICAgVGhlIGNoYW5n
ZXMgaW4gU1ZHU01JTEVsZW1lbnQgc2hvdWxkIGxvb2sgdmVyeSBzaW1pbGFyIHRvIFNWR0ZFSW1h
Z2VFbGVtZW50LAorICAgICAgICAgICAgU1ZHTVBhdGhFbGVtZW50LCBldGMuIFRoZSBpZGVhIGlz
IHRvIGJ1aWxkIHBlbmRpbmcgcmVzb3VyY2VzIHdoZW4gYWRkZWQgb3IKKyAgICAgICAgICAgIHJl
bW92ZWQgZnJvbSB0aGUgZG9jdW1lbnQsIG9yIHdoZW4gdGhlIGhyZWYgYXR0cmlidXRlIGNoYW5n
ZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Ojp+U1ZHU01JTEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6
Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1l
bnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVt
ZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnJl
bW92ZWRGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpzZXRBdHRyaWJ1
dGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpzZXRUYXJnZXRFbGVt
ZW50KToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVt
ZW50KToKKyAgICAgICAgKFNWR1NNSUxFbGVtZW50KToKKwogMjAxMi0xMS0zMCAgTWlrZSBXZXN0
ICA8bWt3c3RAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENTUCAxLjE6IE1ha2UgdGhlIENTUF9O
RVhUIGZsYWcgcnVudGltZSBlbmFibGVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzYwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsMTYgKzM5NiwyNiBA
QCBmbG9hdCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlRGlzdGFuCiAgICAgcmV0dXJuIGVu
c3VyZUFuaW1hdG9yKCktPmNhbGN1bGF0ZURpc3RhbmNlKGZyb21TdHJpbmcsIHRvU3RyaW5nKTsK
IH0KIAotdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6dGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UoU1ZH
RWxlbWVudCogY3VycmVudFRhcmdldCwgU1ZHRWxlbWVudCogbmV3VGFyZ2V0KQordm9pZCBTVkdB
bmltYXRlRWxlbWVudDo6c2V0VGFyZ2V0RWxlbWVudChTVkdFbGVtZW50KiB0YXJnZXQpCiB7Ci0g
ICAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UoY3VycmVudFRh
cmdldCwgbmV3VGFyZ2V0KTsKKyAgICBTVkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRFbGVt
ZW50KHRhcmdldCk7CisgICAgcmVzZXRBbmltYXRlZFByb3BlcnR5VHlwZSgpOworfQogCit2b2lk
IFNWR0FuaW1hdGVFbGVtZW50OjpzZXRBdHRyaWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJpYnV0ZU5hbWUpCit7CisgICAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0QXR0cmlidXRl
TmFtZShhdHRyaWJ1dGVOYW1lKTsKKyAgICByZXNldEFuaW1hdGVkUHJvcGVydHlUeXBlKCk7Cit9
CisKK3ZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OnJlc2V0QW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKQor
ewogICAgIEFTU0VSVCghbV9hbmltYXRlZFR5cGUpOwogICAgIG1fZnJvbVR5cGUuY2xlYXIoKTsK
ICAgICBtX3RvVHlwZS5jbGVhcigpOwogICAgIG1fdG9BdEVuZE9mRHVyYXRpb25UeXBlLmNsZWFy
KCk7CiAgICAgbV9hbmltYXRvci5jbGVhcigpOwotICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUg
PSBuZXdUYXJnZXQgPyBkZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlwZShuZXdUYXJnZXQpIDog
QW5pbWF0ZWRTdHJpbmc7CisgICAgbV9hbmltYXRlZFByb3BlcnR5VHlwZSA9IHRhcmdldEVsZW1l
bnQoKSA/IGRldGVybWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKHRhcmdldEVsZW1lbnQoKSkgOiBB
bmltYXRlZFN0cmluZzsKIH0KIAogU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IqIFNWR0FuaW1hdGVF
bGVtZW50OjplbnN1cmVBbmltYXRvcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZUVsZW1lbnQuaAkocmV2aXNpb24gMTM2MDI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgcHJvdGVjdGVk
OgogCiAgICAgdmlydHVhbCB2b2lkIHJlc2V0QW5pbWF0ZWRUeXBlKCk7CiAgICAgdmlydHVhbCB2
b2lkIGNsZWFyQW5pbWF0ZWRUeXBlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpOworCiAgICAg
dmlydHVhbCBib29sIGNhbGN1bGF0ZVRvQXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5n
JiB0b0F0RW5kT2ZEdXJhdGlvblN0cmluZyk7CiAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZy
b21BbmRUb1ZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9T
dHJpbmcpOwogICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3Qg
U3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKTsKQEAgLTUzLDExICs1
NCwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShj
b25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpOwogICAgIHZp
cnR1YWwgYm9vbCBpc0FkZGl0aXZlKCkgY29uc3QgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgdGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UoU1ZHRWxlbWVudCogY3VycmVudFRhcmdldCwgU1ZH
RWxlbWVudCogb2xkVGFyZ2V0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGFyZ2V0
RWxlbWVudChTVkdFbGVtZW50KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEF0dHJp
YnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIE9WRVJSSURFOwogCiAgICAgQW5pbWF0ZWRQ
cm9wZXJ0eVR5cGUgbV9hbmltYXRlZFByb3BlcnR5VHlwZTsKIAogcHJpdmF0ZToKKyAgICB2b2lk
IHJlc2V0QW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKTsKICAgICBTVkdBbmltYXRlZFR5cGVBbmltYXRv
ciogZW5zdXJlQW5pbWF0b3IoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZEF0dHJpYnV0
ZVR5cGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5j
cHAJKHJldmlzaW9uIDEzNjAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25F
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDcgKzMxOSw3IEBAIHZvaWQgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6c2V0QXR0cmlidXRlVHkKICAgICAgICAgbV9hdHRyaWJ1dGVUeXBlID0g
QXR0cmlidXRlVHlwZVhNTDsKICAgICBlbHNlCiAgICAgICAgIG1fYXR0cmlidXRlVHlwZSA9IEF0
dHJpYnV0ZVR5cGVBdXRvOwotICAgIGNoZWNrSW52YWxpZENTU0F0dHJpYnV0ZVR5cGUodGFyZ2V0
RWxlbWVudChEb05vdFJlc29sdmVOZXdUYXJnZXQpKTsKKyAgICBjaGVja0ludmFsaWRDU1NBdHRy
aWJ1dGVUeXBlKHRhcmdldEVsZW1lbnQoKSk7CiB9CiAKIFN0cmluZyBTVkdBbmltYXRpb25FbGVt
ZW50Ojp0b1ZhbHVlKCkgY29uc3QKQEAgLTY3NywxOCArNjc3LDE2IEBAIHZvaWQgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6ZGV0ZXJtaW5lUHJvcGUKICAgICAgICAgbV90b1Byb3BlcnR5VmFsdWVUeXBl
ID0gSW5oZXJpdFZhbHVlOwogfQogCi12b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRhcmdldEVs
ZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQqIGN1cnJlbnRUYXJnZXQsIFNWR0VsZW1lbnQqIG5l
d1RhcmdldCkKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0RWxlbWVudChTVkdF
bGVtZW50KiB0YXJnZXQpCiB7Ci0gICAgU1ZHU01JTEVsZW1lbnQ6OnRhcmdldEVsZW1lbnRXaWxs
Q2hhbmdlKGN1cnJlbnRUYXJnZXQsIG5ld1RhcmdldCk7Ci0KLSAgICBjaGVja0ludmFsaWRDU1NB
dHRyaWJ1dGVUeXBlKG5ld1RhcmdldCk7CisgICAgU1ZHU01JTEVsZW1lbnQ6OnNldFRhcmdldEVs
ZW1lbnQodGFyZ2V0KTsKKyAgICBjaGVja0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKHRhcmdldCk7
CiB9CiAKIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQogewogICAgIFNWR1NNSUxFbGVtZW50OjpzZXRB
dHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUpOwotCi0gICAgY2hlY2tJbnZhbGlkQ1NTQXR0cmli
dXRlVHlwZSh0YXJnZXRFbGVtZW50KERvTm90UmVzb2x2ZU5ld1RhcmdldCkpOworICAgIGNoZWNr
SW52YWxpZENTU0F0dHJpYnV0ZVR5cGUodGFyZ2V0RWxlbWVudCgpKTsKIH0KIAogdm9pZCBTVkdB
bmltYXRpb25FbGVtZW50OjpjaGVja0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKFNWR0VsZW1lbnQq
IHRhcmdldCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAko
cmV2aXNpb24gMTM2MDI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw4IEBAIHByb3RlY3RlZDoKICAgICBB
bmltYXRlZFByb3BlcnR5VmFsdWVUeXBlIG1fZnJvbVByb3BlcnR5VmFsdWVUeXBlOwogICAgIEFu
aW1hdGVkUHJvcGVydHlWYWx1ZVR5cGUgbV90b1Byb3BlcnR5VmFsdWVUeXBlOwogCi0gICAgdmly
dHVhbCB2b2lkIHRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQqIGN1cnJlbnRUYXJn
ZXQsIFNWR0VsZW1lbnQqIG9sZFRhcmdldCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNl
dFRhcmdldEVsZW1lbnQoU1ZHRWxlbWVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRBdHRyaWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBPVkVSUklERTsKICAgICBib29s
IGhhc0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbnZhbGlk
Q1NTQXR0cmlidXRlVHlwZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbk1v
ZGUoKTsKQEAgLTIwNiw3ICsyMDcsNiBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIGFuaW1hdGlvbkF0dHJpYnV0ZUNoYW5nZWQoKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0QXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJikgT1ZFUlJJREU7
CiAgICAgdm9pZCBzZXRBdHRyaWJ1dGVUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAgICAg
dm9pZCBjaGVja0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKFNWR0VsZW1lbnQqKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiAx
MzYwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNiBAQCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OlNW
R0RvY3VtZW50RXh0ZW5zCiAKIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6flNWR0RvY3VtZW50RXh0
ZW5zaW9ucygpCiB7Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG1fYW5pbWF0ZWRFbGVtZW50cyk7CiAg
ICAgZGVsZXRlQWxsVmFsdWVzKG1fcGVuZGluZ1Jlc291cmNlcyk7CiAgICAgZGVsZXRlQWxsVmFs
dWVzKG1fcGVuZGluZ1Jlc291cmNlc0ZvclJlbW92YWwpOwogfQpAQCAtMTMzLDU4ICsxMzIsNiBA
QCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6ZGlzcGF0Y2hTVkdMCiAgICAgfQogfQogCi12
b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkQW5pbWF0aW9uRWxlbWVudFRvVGFyZ2V0KFNW
R1NNSUxFbGVtZW50KiBhbmltYXRpb25FbGVtZW50LCBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50
KQotewotICAgIEFTU0VSVCh0YXJnZXRFbGVtZW50KTsKLSAgICBBU1NFUlQoYW5pbWF0aW9uRWxl
bWVudCk7Ci0KLSAgICBpZiAoSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiBhbmltYXRpb25FbGVt
ZW50c0ZvclRhcmdldCA9IG1fYW5pbWF0ZWRFbGVtZW50cy5nZXQodGFyZ2V0RWxlbWVudCkpIHsK
LSAgICAgICAgYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQtPmFkZChhbmltYXRpb25FbGVtZW50
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQq
PiogYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBuZXcgSGFzaFNldDxTVkdTTUlMRWxlbWVu
dCo+OwotICAgIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0LT5hZGQoYW5pbWF0aW9uRWxlbWVu
dCk7Ci0gICAgbV9hbmltYXRlZEVsZW1lbnRzLnNldCh0YXJnZXRFbGVtZW50LCBhbmltYXRpb25F
bGVtZW50c0ZvclRhcmdldCk7Ci19Ci0KLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1v
dmVBbmltYXRpb25FbGVtZW50RnJvbVRhcmdldChTVkdTTUlMRWxlbWVudCogYW5pbWF0aW9uRWxl
bWVudCwgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkKLXsKLSAgICBBU1NFUlQodGFyZ2V0RWxl
bWVudCk7Ci0gICAgQVNTRVJUKGFuaW1hdGlvbkVsZW1lbnQpOwotCi0gICAgSGFzaE1hcDxTVkdF
bGVtZW50KiwgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+KiA+OjppdGVyYXRvciBpdCA9IG1fYW5p
bWF0ZWRFbGVtZW50cy5maW5kKHRhcmdldEVsZW1lbnQpOwotICAgIEFTU0VSVChpdCAhPSBtX2Fu
aW1hdGVkRWxlbWVudHMuZW5kKCkpOwotICAgIAotICAgIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQq
PiogYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBpdC0+dmFsdWU7Ci0gICAgQVNTRVJUKCFh
bmltYXRpb25FbGVtZW50c0ZvclRhcmdldC0+aXNFbXB0eSgpKTsKLQotICAgIGFuaW1hdGlvbkVs
ZW1lbnRzRm9yVGFyZ2V0LT5yZW1vdmUoYW5pbWF0aW9uRWxlbWVudCk7Ci0gICAgaWYgKGFuaW1h
dGlvbkVsZW1lbnRzRm9yVGFyZ2V0LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9hbmltYXRlZEVs
ZW1lbnRzLnJlbW92ZShpdCk7Ci0gICAgICAgIGRlbGV0ZSBhbmltYXRpb25FbGVtZW50c0ZvclRh
cmdldDsKLSAgICB9Ci19Ci0KLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxB
bmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkKLXsK
LSAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7Ci0gICAgSGFzaE1hcDxTVkdFbGVtZW50KiwgSGFz
aFNldDxTVkdTTUlMRWxlbWVudCo+KiA+OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0ZWRFbGVtZW50
cy5maW5kKHRhcmdldEVsZW1lbnQpOwotICAgIGlmIChpdCA9PSBtX2FuaW1hdGVkRWxlbWVudHMu
ZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiog
YW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBpdC0+dmFsdWU7Ci0gICAgVmVjdG9yPFNWR1NN
SUxFbGVtZW50Kj4gdG9CZVJlc2V0OwotCi0gICAgSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+Ojpp
dGVyYXRvciBlbmQgPSBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldC0+ZW5kKCk7Ci0gICAgZm9y
IChIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj46Oml0ZXJhdG9yIGl0ID0gYW5pbWF0aW9uRWxlbWVu
dHNGb3JUYXJnZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdG9CZVJlc2V0
LmFwcGVuZCgqaXQpOwotCi0gICAgVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj46Oml0ZXJhdG9yIHZl
Y3RvckVuZCA9IHRvQmVSZXNldC5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxTVkdTTUlMRWxlbWVu
dCo+OjppdGVyYXRvciB2ZWN0b3JJdCA9IHRvQmVSZXNldC5iZWdpbigpOyB2ZWN0b3JJdCAhPSB2
ZWN0b3JFbmQ7ICsrdmVjdG9ySXQpCi0gICAgICAgICgqdmVjdG9ySXQpLT5yZXNldFRhcmdldEVs
ZW1lbnQoKTsKLX0KLQogLy8gRklYTUU6IENhbGxlcnMgc2hvdWxkIHByb2JhYmx5IHVzZSBTY3Jp
cHRDb250cm9sbGVyOjpldmVudEhhbmRsZXJMaW5lTnVtYmVyKCkKIHN0YXRpYyBpbnQgcGFyc2Vy
TGluZU51bWJlcihEb2N1bWVudCogZG9jdW1lbnQpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCShyZXZpc2lvbiAxMzYwMjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDEwICs1OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhdXNlQW5pbWF0aW9ucygpOwogICAgIHZv
aWQgdW5wYXVzZUFuaW1hdGlvbnMoKTsKICAgICB2b2lkIGRpc3BhdGNoU1ZHTG9hZEV2ZW50VG9P
dXRlcm1vc3RTVkdFbGVtZW50cygpOwotICAgIAotICAgIHZvaWQgYWRkQW5pbWF0aW9uRWxlbWVu
dFRvVGFyZ2V0KFNWR1NNSUxFbGVtZW50KiwgU1ZHRWxlbWVudCopOwotICAgIHZvaWQgcmVtb3Zl
QW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQoU1ZHU01JTEVsZW1lbnQqLCBTVkdFbGVtZW50Kik7
Ci0gICAgdm9pZCByZW1vdmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQoU1ZHRWxlbWVu
dCopOwogCiAgICAgdm9pZCByZXBvcnRXYXJuaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQg
cmVwb3J0RXJyb3IoY29uc3QgU3RyaW5nJik7CkBAIC04Myw3ICs3OSw2IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7IC8vIHdlYWsgcmVmZXJlbmNlCiAgICAg
SGFzaFNldDxTVkdTVkdFbGVtZW50Kj4gbV90aW1lQ29udGFpbmVyczsgLy8gRm9yIFNWRyAxLjIg
c3VwcG9ydCB0aGlzIHdpbGwgbmVlZCB0byBiZSBtYWRlIG1vcmUgZ2VuZXJhbC4KLSAgICBIYXNo
TWFwPFNWR0VsZW1lbnQqLCBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qID4gbV9hbmltYXRlZEVs
ZW1lbnRzOwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgSGFzaFNldDxTVkdGb250RmFjZUVs
ZW1lbnQqPiBtX3N2Z0ZvbnRGYWNlRWxlbWVudHM7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNjAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNiBAQCBTVkdFbGVtZW50
Ojp+U1ZHRWxlbWVudCgpCiAgICAgICAgIHJhcmVEYXRhTWFwLnJlbW92ZShpdCk7CiAgICAgfQog
ICAgIEFTU0VSVChkb2N1bWVudCgpKTsKLSAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNp
b25zKCktPnJlbW92ZUFsbEFuaW1hdGlvbkVsZW1lbnRzRnJvbVRhcmdldCh0aGlzKTsKICAgICBk
b2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVu
Y2VzRm9yVGFyZ2V0KHRoaXMpOwogfQogCkBAIC0xODMsNyArMTgyLDYgQEAgdm9pZCBTVkdFbGVt
ZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJObwogICAgIFN0eWxlZEVsZW1lbnQ6OnJlbW92ZWRG
cm9tKHJvb3RQYXJlbnQpOwogCiAgICAgaWYgKHdhc0luRG9jdW1lbnQpIHsKLSAgICAgICAgZG9j
dW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVBbGxBbmltYXRpb25FbGVtZW50
c0Zyb21UYXJnZXQodGhpcyk7CiAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS0+cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQodGhpcyk7CiAgICAgICAg
IGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlRWxlbWVudEZyb21QZW5k
aW5nUmVzb3VyY2VzKHRoaXMpOwogICAgIH0KQEAgLTUzNywxMCArNTM1LDggQEAgdm9pZCBTVkdF
bGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IAogewogICAgIFN0eWxlZEVsZW1lbnQ6OmF0
dHJpYnV0ZUNoYW5nZWQobmFtZSwgbmV3VmFsdWUpOwogCi0gICAgaWYgKGlzSWRBdHRyaWJ1dGVO
YW1lKG5hbWUpKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+
cmVtb3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNGcm9tVGFyZ2V0KHRoaXMpOworICAgIGlmIChpc0lk
QXR0cmlidXRlTmFtZShuYW1lKSkKICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLT5yZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldCh0aGlzKTsKLSAgICB9
CiAKICAgICAvLyBDaGFuZ2VzIHRvIHRoZSBzdHlsZSBhdHRyaWJ1dGUgYXJlIHByb2Nlc3NlZCBs
YXppbHkgKHNlZSBFbGVtZW50OjpnZXRBdHRyaWJ1dGUoKSBhbmQgcmVsYXRlZCBtZXRob2RzKSwK
ICAgICAvLyBzbyB3ZSBkb24ndCB3YW50IGNoYW5nZXMgdG8gdGhlIHN0eWxlIGF0dHJpYnV0ZSB0
byByZXN1bHQgaW4gZXh0cmEgd29yayBoZXJlLgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnRJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnRJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDEzNjAyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsMTQgKzE0
MCw2IEBAIHZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjppbnZhbGlkYXRlQWxsSW4KICAgICAgICAg
QVNTRVJUKCgqaXQpLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpID09IGVsZW1lbnQpOwogICAgICAg
ICAoKml0KS0+c2hhZG93VHJlZUVsZW1lbnQoKS0+c2V0Q29ycmVzcG9uZGluZ0VsZW1lbnQoMCk7
CiAKLSAgICAgICAgLy8gVGhlIHNoYWRvdyB0cmVlLCB3aGljaCBpcyBldmVudHVhbGx5IGFuaW1h
dGVkLCBpcyBtdXRhdGVkLiBJbiBvcmRlciB0byBrZWVwIHRoZSBhbmltVmFsCi0gICAgICAgIC8v
IGxvZ2ljIGNvcnJlY3QsIHdlIGhhdmUgdG8gc3RvcCB0aGUgYW5pbWF0aW9uLCBhbmQgcmVzdGFy
dCBpdCBvbmNlIHRoZSBzaGFkb3cgdHJlZSBoYXMKLSAgICAgICAgLy8gcmVjbG9uZWQuIE90aGVy
d2lzZSB3ZSBtaXNzIHRvIGNhbGwgc3RvcEFuaW1WYWxBbmltYXRpb24oKSBvbiB0aGUgb2xkIHNo
YWRvdyB0cmVlIGVsZW1lbnQKLSAgICAgICAgLy8gd2hpY2ggbGVhZHMgdG8gYW4gYXNzZXJ0aW9u
IG9uY2UgZ2FyYmFnZSBpcyBjb2xsZWN0ZWQsIGlmIHRoZSBhbmltVmFsIGJpbmRpbmdzIGhhdmUg
YmVlbgotICAgICAgICAvLyBhY2Nlc3NlZCBmcm9tIEpTLiBJdCB3b3VsZCBhbHNvIGFzc2VydCBv
biB0aGUgbmV4dCB1cGRhdGVBbmltYXRpb25zKCkgY2FsbCBhcyB0aGUgbmV3Ci0gICAgICAgIC8v
IFNWR0FuaW1hdGVkUHJvcGVydHkgb2JqZWN0IGhhc24ndCBiZWVuIGluaXRpYWxpemVkIHlldCAo
dXNpbmcgc3RhcnRBbmltVmFsQW5pbWF0aW9uKS4KLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQo
KS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21U
YXJnZXQoZWxlbWVudCk7Ci0KICAgICAgICAgaWYgKFNWR1VzZUVsZW1lbnQqIGVsZW1lbnQgPSAo
Kml0KS0+Y29ycmVzcG9uZGluZ1VzZUVsZW1lbnQoKSkgewogICAgICAgICAgICAgQVNTRVJUKGVs
ZW1lbnQtPmluRG9jdW1lbnQoKSk7CiAgICAgICAgICAgICBlbGVtZW50LT5pbnZhbGlkYXRlU2hh
ZG93VHJlZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDEzNjAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw4IEBAIHZvaWQgU1ZHTVBhdGhFbGVtZW50Ojpi
dWlsZFBlbmRpbmdSZXNvdXIKICAgICBTdHJpbmcgaWQ7CiAgICAgRWxlbWVudCogdGFyZ2V0ID0g
U1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCksIGRvY3Vt
ZW50KCksICZpZCk7CiAgICAgaWYgKCF0YXJnZXQpIHsKLSAgICAgICAgaWYgKGhhc1BlbmRpbmdS
ZXNvdXJjZXMoKSkKKyAgICAgICAgLy8gRG8gbm90IHJlZ2lzdGVyIGFzIHBlbmRpbmcgaWYgd2Ug
YXJlIGFscmVhZHkgcGVuZGluZyB0aGlzIHJlc291cmNlLgorICAgICAgICBpZiAoZG9jdW1lbnQo
KS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5pc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2UodGhpcywg
aWQpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAkocmV2aXNp
b24gMTM2MDI0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2MywxMSArMTYzLDE0IEBAIHZvaWQgU1ZHVGV4dFBhdGhFbGVt
ZW50OjpidWlsZFBlbmRpbmdSZXMKICAgICBTdHJpbmcgaWQ7CiAgICAgRWxlbWVudCogdGFyZ2V0
ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCksIGRv
Y3VtZW50KCksICZpZCk7CiAgICAgaWYgKCF0YXJnZXQpIHsKLSAgICAgICAgaWYgKGhhc1BlbmRp
bmdSZXNvdXJjZXMoKSB8fCBpZC5pc0VtcHR5KCkpCisgICAgICAgIC8vIERvIG5vdCByZWdpc3Rl
ciBhcyBwZW5kaW5nIGlmIHdlIGFyZSBhbHJlYWR5IHBlbmRpbmcgdGhpcyByZXNvdXJjZS4KKyAg
ICAgICAgaWYgKGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+aXNFbGVtZW50UGVu
ZGluZ1Jlc291cmNlKHRoaXMsIGlkKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBk
b2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPmFkZFBlbmRpbmdSZXNvdXJjZShpZCwg
dGhpcyk7Ci0gICAgICAgIEFTU0VSVChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpOworICAgICAgICBp
ZiAoIWlkLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLT5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIHRoaXMpOworICAgICAgICAgICAgQVNT
RVJUKGhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7CisgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHRh
cmdldC0+aXNTVkdFbGVtZW50KCkpIHsKICAgICAgICAgLy8gUmVnaXN0ZXIgdXMgd2l0aCB0aGUg
dGFyZ2V0IGluIHRoZSBkZXBlbmRlbmNpZXMgbWFwLiBBbnkgY2hhbmdlIG9mIGhyZWZFbGVtZW50
CiAgICAgICAgIC8vIHRoYXQgbGVhZHMgdG8gcmVsYXlvdXQvcmVwYWludGluZyBub3cgaW5mb3Jt
cyB1cywgc28gd2UgY2FuIHJlYWN0IHRvIGl0LgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNjAyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzksMTEgKzEzOSw1MCBAQCBTVkdTTUlMRWxlbWVudDo6U1ZHU01JTEVsZW1lbnQo
Y29uc3QgUXVhCiAKIFNWR1NNSUxFbGVtZW50Ojp+U1ZHU01JTEVsZW1lbnQoKQogeworICAgIGNs
ZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7CiAgICAgZGlzY29ubmVjdENvbmRpdGlvbnMoKTsKICAg
ICBpZiAobV90aW1lQ29udGFpbmVyICYmIG1fdGFyZ2V0RWxlbWVudCAmJiBoYXNWYWxpZEF0dHJp
YnV0ZU5hbWUoKSkKICAgICAgICAgbV90aW1lQ29udGFpbmVyLT51bnNjaGVkdWxlKHRoaXMsIG1f
dGFyZ2V0RWxlbWVudCwgbV9hdHRyaWJ1dGVOYW1lKTsKLSAgICBpZiAobV90YXJnZXRFbGVtZW50
KQotICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFuaW1h
dGlvbkVsZW1lbnRGcm9tVGFyZ2V0KHRoaXMsIG1fdGFyZ2V0RWxlbWVudCk7Cit9CisKK3ZvaWQg
U1ZHU01JTEVsZW1lbnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCkKK3sKKyAgICBBU1NFUlQo
ZG9jdW1lbnQoKSk7CisgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1v
dmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCh0aGlzKTsKK30KKwordm9pZCBTVkdTTUlM
RWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UoKQoreworICAgIGNsZWFyUmVzb3VyY2VSZWZl
cmVuY2VzKCk7CisgICAgaWYgKCFpbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFN0cmluZyBpZDsKKyAgICBTdHJpbmcgaHJlZiA9IGdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpo
cmVmQXR0cik7CisgICAgRWxlbWVudCogdGFyZ2V0OworICAgIGlmIChocmVmLmlzRW1wdHkoKSkK
KyAgICAgICAgdGFyZ2V0ID0gcGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUoKS0+aXNFbGVtZW50
Tm9kZSgpID8gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHBhcmVudE5vZGUoKSkgOiAwOworICAgIGVs
c2UKKyAgICAgICAgdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlS
SVN0cmluZyhocmVmLCBkb2N1bWVudCgpLCAmaWQpOworICAgIFNWR0VsZW1lbnQqIHN2Z1Rhcmdl
dCA9IHRhcmdldCAmJiB0YXJnZXQtPmlzU1ZHRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8U1ZHRWxl
bWVudCo+KHRhcmdldCkgOiAwOworCisgICAgaWYgKHN2Z1RhcmdldCAhPSB0YXJnZXRFbGVtZW50
KCkpCisgICAgICAgIHNldFRhcmdldEVsZW1lbnQoc3ZnVGFyZ2V0KTsKKworICAgIGlmICghc3Zn
VGFyZ2V0KSB7CisgICAgICAgIC8vIERvIG5vdCByZWdpc3RlciBhcyBwZW5kaW5nIGlmIHdlIGFy
ZSBhbHJlYWR5IHBlbmRpbmcgdGhpcyByZXNvdXJjZS4KKyAgICAgICAgaWYgKGRvY3VtZW50KCkt
PmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+aXNFbGVtZW50UGVuZGluZ1Jlc291cmNlKHRoaXMsIGlk
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoIWlkLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5hZGRQZW5kaW5n
UmVzb3VyY2UoaWQsIHRoaXMpOworICAgICAgICAgICAgQVNTRVJUKGhhc1BlbmRpbmdSZXNvdXJj
ZXMoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBSZWdpc3RlciB1cyB3
aXRoIHRoZSB0YXJnZXQgaW4gdGhlIGRlcGVuZGVuY2llcyBtYXAuIEFueSBjaGFuZ2Ugb2YgaHJl
ZkVsZW1lbnQKKyAgICAgICAgLy8gdGhhdCBsZWFkcyB0byByZWxheW91dC9yZXBhaW50aW5nIG5v
dyBpbmZvcm1zIHVzLCBzbyB3ZSBjYW4gcmVhY3QgdG8gaXQuCisgICAgICAgIGRvY3VtZW50KCkt
PmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KHRoaXMs
IHN2Z1RhcmdldCk7CisgICAgfQogfQogCiBzdGF0aWMgaW5saW5lIFF1YWxpZmllZE5hbWUgY29u
c3RydWN0UXVhbGlmaWVkTmFtZShjb25zdCBTVkdFbGVtZW50KiBzdmdFbGVtZW50LCBjb25zdCBT
dHJpbmcmIGF0dHJpYnV0ZU5hbWUpCkBAIC0yMTYsMTIgKzI1NSwxMSBAQCBOb2RlOjpJbnNlcnRp
b25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR1NNCiAgICAgaWYgKG1faXNXYWl0aW5nRm9yRmlyc3RJ
bnRlcnZhbCkKICAgICAgICAgcmVzb2x2ZUZpcnN0SW50ZXJ2YWwoKTsKIAotICAgIC8vIEZvcmNl
IHJlc29sdXRpb24gb2YgdGFyZ2V0IGVsZW1lbnQKLSAgICBpZiAoIW1fdGFyZ2V0RWxlbWVudCkK
LSAgICAgICAgdGFyZ2V0RWxlbWVudCgpOwogICAgIGlmIChtX3RpbWVDb250YWluZXIpCiAgICAg
ICAgIG1fdGltZUNvbnRhaW5lci0+bm90aWZ5SW50ZXJ2YWxzQ2hhbmdlZCgpOwogCisgICAgYnVp
bGRQZW5kaW5nUmVzb3VyY2UoKTsKKwogICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwogfQogCkBA
IC0yMzgsMTEgKzI3NiwxMCBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpyZW1vdmVkRnJvbShDb250
YWluCiAgICAgICAgIFJlZlB0cjxTVkdTTUlMRWxlbWVudD4ga2VlcEFsaXZlKHRoaXMpOwogICAg
ICAgICBkaXNjb25uZWN0Q29uZGl0aW9ucygpOwogCi0gICAgICAgIC8vIENsZWFyIHRhcmdldCBu
b3csIGJlY2F1c2UgZGlzY29ubmVjdENvbmRpdGlvbnMgY2FsbHMgdGFyZ2V0RWxlbWVudCgpIHdo
aWNoIHdpbGwgcmVjcmVhdGUgdGhlIHRhcmdldCBpZiB3ZSByZW1vdmVkIGl0IHNvb25lci4gCi0g
ICAgICAgIGlmIChtX3RhcmdldEVsZW1lbnQpCi0gICAgICAgICAgICByZXNldFRhcmdldEVsZW1l
bnQoRG9Ob3RSZXNvbHZlTmV3VGFyZ2V0KTsKLQorICAgICAgICBjbGVhclJlc291cmNlUmVmZXJl
bmNlcygpOworICAgICAgICBzZXRUYXJnZXRFbGVtZW50KDApOwogICAgICAgICBzZXRBdHRyaWJ1
dGVOYW1lKGFueVFOYW1lKCkpOworICAgICAgICBhbmltYXRpb25BdHRyaWJ1dGVDaGFuZ2VkKCk7
CiAgICAgfQogCiAgICAgU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20ocm9vdFBhcmVudCk7CkBAIC00
NzIsMTYgKzUwOSwxMSBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
CiAgICAgICAgICAgICBiZWdpbkxpc3RDaGFuZ2VkKGVsYXBzZWQoKSk7CiAgICAgICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplbmRBdHRyKQogICAgICAgICAgICAgZW5kTGlzdENo
YW5nZWQoZWxhcHNlZCgpKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmF0dHJpYnV0ZU5hbWVBdHRyKSB7CisgICAgICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjphdHRyaWJ1dGVOYW1lQXR0cikKICAgICAgICAgICAgIHNldEF0dHJpYnV0ZU5hbWUoY29u
c3RydWN0UXVhbGlmaWVkTmFtZSh0aGlzLCBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjphdHRy
aWJ1dGVOYW1lQXR0cikpKTsKLSAgICAgICAgICAgIGlmIChtX3RhcmdldEVsZW1lbnQpIHsKLSAg
ICAgICAgICAgICAgICByZXNldFRhcmdldEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUubWF0Y2hlcyhY
TGlua05hbWVzOjpocmVmQXR0cikpIHsKLSAgICAgICAgICAgIC8vIHRhcmdldEVsZW1lbnQgaXMg
cmVzb2x2ZWQgbGF6aWx5IGJ1dCB0YXJnZXRFbGVtZW50KCkgd2lsbCBoYW5kbGUgY2FsbGluZyB0
YXJnZXRFbGVtZW50V2lsbENoYW5nZSgpLgotICAgICAgICAgICAgaWYgKFNWR0VsZW1lbnQqIHRh
cmdldEVsZW1lbnQgPSB0aGlzLT50YXJnZXRFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgZG9j
dW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVBbGxBbmltYXRpb25FbGVtZW50
c0Zyb21UYXJnZXQodGFyZ2V0RWxlbWVudCk7CisgICAgICAgIGVsc2UgaWYgKGF0dHJOYW1lLm1h
dGNoZXMoWExpbmtOYW1lczo6aHJlZkF0dHIpKSB7CisgICAgICAgICAgICBTVkdFbGVtZW50SW5z
dGFuY2U6OkludmFsaWRhdGlvbkd1YXJkIGludmFsaWRhdGlvbkd1YXJkKHRoaXMpOworICAgICAg
ICAgICAgYnVpbGRQZW5kaW5nUmVzb3VyY2UoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTYy
LDU3ICs1OTQsMzAgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZShjbwog
ICAgICAgICAgICAgbV90aW1lQ29udGFpbmVyLT5zY2hlZHVsZSh0aGlzLCBtX3RhcmdldEVsZW1l
bnQsIG1fYXR0cmlidXRlTmFtZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fYXR0cmlidXRlTmFt
ZSA9IGF0dHJpYnV0ZU5hbWU7Ci19CiAKLVNWR0VsZW1lbnQqIFNWR1NNSUxFbGVtZW50Ojp0YXJn
ZXRFbGVtZW50KFJlc29sdmVUYXJnZXQgcmVzb2x2ZVRhcmdldCkKLXsKKyAgICAvLyBPbmx5IGNs
ZWFyIHRoZSBhbmltYXRlZCB0eXBlLCBpZiB3ZSBoYWQgYSB0YXJnZXQgYmVmb3JlLgogICAgIGlm
IChtX3RhcmdldEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBtX3RhcmdldEVsZW1lbnQ7Ci0KLSAg
ICBpZiAoIWluRG9jdW1lbnQoKSB8fCByZXNvbHZlVGFyZ2V0ID09IERvTm90UmVzb2x2ZU5ld1Rh
cmdldCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTdHJpbmcgaHJlZiA9IGdldEF0dHJpYnV0
ZShYTGlua05hbWVzOjpocmVmQXR0cik7Ci0gICAgQ29udGFpbmVyTm9kZSogdGFyZ2V0ID0gaHJl
Zi5pc0VtcHR5KCkgPyBwYXJlbnROb2RlKCkgOiBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1l
bnRGcm9tSVJJU3RyaW5nKGhyZWYsIGRvY3VtZW50KCkpOwotICAgIGlmICghdGFyZ2V0IHx8ICF0
YXJnZXQtPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFNWR0VsZW1l
bnQqIHRhcmdldEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4odGFyZ2V0KTsKLSAg
ICB0YXJnZXRFbGVtZW50V2lsbENoYW5nZShtX3RhcmdldEVsZW1lbnQsIHRhcmdldEVsZW1lbnQp
OwotICAgIG1fdGFyZ2V0RWxlbWVudCA9IHRhcmdldEVsZW1lbnQ7Ci0gICAgZG9jdW1lbnQoKS0+
YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5hZGRBbmltYXRpb25FbGVtZW50VG9UYXJnZXQodGhpcywg
bV90YXJnZXRFbGVtZW50KTsKLSAgICByZXR1cm4gbV90YXJnZXRFbGVtZW50OworICAgICAgICBj
bGVhckFuaW1hdGVkVHlwZShtX3RhcmdldEVsZW1lbnQpOwogfQogCi12b2lkIFNWR1NNSUxFbGVt
ZW50Ojp0YXJnZXRFbGVtZW50V2lsbENoYW5nZShTVkdFbGVtZW50KiBjdXJyZW50VGFyZ2V0LCBT
VkdFbGVtZW50KiBuZXdUYXJnZXQpCit2b2lkIFNWR1NNSUxFbGVtZW50OjpzZXRUYXJnZXRFbGVt
ZW50KFNWR0VsZW1lbnQqIHRhcmdldCkKIHsKICAgICBpZiAobV90aW1lQ29udGFpbmVyICYmIGhh
c1ZhbGlkQXR0cmlidXRlTmFtZSgpKSB7Ci0gICAgICAgIGlmIChjdXJyZW50VGFyZ2V0KQotICAg
ICAgICAgICAgbV90aW1lQ29udGFpbmVyLT51bnNjaGVkdWxlKHRoaXMsIGN1cnJlbnRUYXJnZXQs
IG1fYXR0cmlidXRlTmFtZSk7Ci0gICAgICAgIGlmIChuZXdUYXJnZXQpCi0gICAgICAgICAgICBt
X3RpbWVDb250YWluZXItPnNjaGVkdWxlKHRoaXMsIG5ld1RhcmdldCwgbV9hdHRyaWJ1dGVOYW1l
KTsKKyAgICAgICAgaWYgKG1fdGFyZ2V0RWxlbWVudCkKKyAgICAgICAgICAgIG1fdGltZUNvbnRh
aW5lci0+dW5zY2hlZHVsZSh0aGlzLCBtX3RhcmdldEVsZW1lbnQsIG1fYXR0cmlidXRlTmFtZSk7
CisgICAgICAgIGlmICh0YXJnZXQpCisgICAgICAgICAgICBtX3RpbWVDb250YWluZXItPnNjaGVk
dWxlKHRoaXMsIHRhcmdldCwgbV9hdHRyaWJ1dGVOYW1lKTsKICAgICB9CiAKICAgICAvLyBPbmx5
IGNsZWFyIHRoZSBhbmltYXRlZCB0eXBlLCBpZiB3ZSBoYWQgYSB0YXJnZXQgYmVmb3JlLgotICAg
IGlmIChjdXJyZW50VGFyZ2V0KQotICAgICAgICBjbGVhckFuaW1hdGVkVHlwZShjdXJyZW50VGFy
Z2V0KTsKKyAgICBpZiAobV90YXJnZXRFbGVtZW50KQorICAgICAgICBjbGVhckFuaW1hdGVkVHlw
ZShtX3RhcmdldEVsZW1lbnQpOwogCiAgICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBzdGF0ZSBpcyBu
b3QgSW5hY3RpdmUsIGFsd2F5cyByZXNldCB0byBhIGNsZWFyIHN0YXRlIGJlZm9yZSBsZWF2aW5n
IHRoZSBvbGQgdGFyZ2V0IGVsZW1lbnQuCiAgICAgaWYgKG1fYWN0aXZlU3RhdGUgIT0gSW5hY3Rp
dmUpCiAgICAgICAgIGVuZGVkQWN0aXZlSW50ZXJ2YWwoKTsKLX0KLQotdm9pZCBTVkdTTUlMRWxl
bWVudDo6cmVzZXRUYXJnZXRFbGVtZW50KFJlc29sdmVUYXJnZXQgcmVzb2x2ZVRhcmdldCkKLXsK
LSAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFuaW1hdGlvbkVs
ZW1lbnRGcm9tVGFyZ2V0KHRoaXMsIG1fdGFyZ2V0RWxlbWVudCk7Ci0gICAgdGFyZ2V0RWxlbWVu
dFdpbGxDaGFuZ2UobV90YXJnZXRFbGVtZW50LCAwKTsKLSAgICBtX3RhcmdldEVsZW1lbnQgPSAw
OwotCi0gICAgLy8gSW1tZWRpYXRlbHkgcmVzb2x2ZSB0aGUgbmV3IHRhcmdldEVsZW1lbnQgKGFu
ZCBjYWxsIHRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlIGlmIG5lZWRlZCkgaW5zdGVhZCBvZiBkb2lu
ZyBpdCBsYXppbHkuCi0gICAgaWYgKHJlc29sdmVUYXJnZXQgPT0gUmVzb2x2ZU5ld1RhcmdldCkK
LSAgICAgICAgdGFyZ2V0RWxlbWVudCgpOwogCi0gICAgYW5pbWF0aW9uQXR0cmlidXRlQ2hhbmdl
ZCgpOworICAgIG1fdGFyZ2V0RWxlbWVudCA9IHRhcmdldDsKIH0KIAogU01JTFRpbWUgU1ZHU01J
TEVsZW1lbnQ6OmVsYXBzZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TVkdTTUlMRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAkocmV2aXNpb24gMTM2MDI0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw4ICszMyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBSZXNvbHZlVGFyZ2V0
IHsgRG9Ob3RSZXNvbHZlTmV3VGFyZ2V0LCBSZXNvbHZlTmV3VGFyZ2V0IH07Ci0KIGNsYXNzIENv
bmRpdGlvbkV2ZW50TGlzdGVuZXI7CiBjbGFzcyBTTUlMVGltZUNvbnRhaW5lcjsKIApAQCAtNTgs
OCArNTYsNyBAQCBwdWJsaWM6CiAKICAgICBTTUlMVGltZUNvbnRhaW5lciogdGltZUNvbnRhaW5l
cigpIGNvbnN0IHsgcmV0dXJuIG1fdGltZUNvbnRhaW5lci5nZXQoKTsgfQogCi0gICAgU1ZHRWxl
bWVudCogdGFyZ2V0RWxlbWVudChSZXNvbHZlVGFyZ2V0ID0gUmVzb2x2ZU5ld1RhcmdldCk7Ci0g
ICAgdm9pZCByZXNldFRhcmdldEVsZW1lbnQoUmVzb2x2ZVRhcmdldCA9IFJlc29sdmVOZXdUYXJn
ZXQpOworICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3Rh
cmdldEVsZW1lbnQ7IH0KICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVOYW1lOyB9CiAKICAgICB2b2lkIGJlZ2luQnlMaW5r
QWN0aXZhdGlvbigpOwpAQCAtMTIwLDEwICsxMTcsMTMgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQg
c2V0SW5hY3RpdmUoKSB7IG1fYWN0aXZlU3RhdGUgPSBJbmFjdGl2ZTsgfQogCiAgICAgLy8gU3Vi
LWNsYXNzZXMgbWF5IG5lZWQgdG8gdGFrZSBhY3Rpb24gd2hlbiB0aGUgdGFyZ2V0IGlzIGNoYW5n
ZWQuCi0gICAgdmlydHVhbCB2b2lkIHRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQq
IGN1cnJlbnRUYXJnZXQsIFNWR0VsZW1lbnQqIG5ld1RhcmdldCk7CisgICAgdmlydHVhbCB2b2lk
IHNldFRhcmdldEVsZW1lbnQoU1ZHRWxlbWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRy
aWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGJ1
aWxkUGVuZGluZ1Jlc291cmNlKCk7CisgICAgdm9pZCBjbGVhclJlc291cmNlUmVmZXJlbmNlcygp
OworCiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCgpID0gMDsKICAgICB2
b2lkIGVuZGVkQWN0aXZlSW50ZXJ2YWwoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0
aW9uKGZsb2F0IHBlcmNlbnQsIHVuc2lnbmVkIHJlcGVhdCwgU1ZHU01JTEVsZW1lbnQqIHJlc3Vs
dEVsZW1lbnQpID0gMDsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjMwNikKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEyLTAxICBQ
aGlsaXAgUm9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgVW5pZnkgU1ZHJ3MgYW5p
bWF0aW9uIGFuZCB0YXJnZXQgdHJhY2tpbmcgc3lzdGVtcy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjY1NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3ZnL2FuaW1hdGlvbnMvc3ZnLWFuaW1hdGlv
bi1vcmRlci1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9z
dmctYW5pbWF0aW9uLW9yZGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jdXN0b20vc3Zn
LXBlbmRpbmctdHdpY2UtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogc3ZnL2N1c3Rv
bS9zdmctcGVuZGluZy10d2ljZS5odG1sOiBBZGRlZC4KKwogMjAxMi0xMS0zMCAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBTaG9ydGVuIGEgZmlsZSBuYW1lIGFz
IHRoZSB0ZXN0IHJlbmFtZWQgaW4gcjEzNjEyMiBpcyBzdGlsbCBob3NpbmcgQ2hyb21pdW0gV2lu
IHBlcmYuIGJvdC4KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3N2Zy1hbmltYXRp
b24tb3JkZXItZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvYW5p
bWF0aW9ucy9zdmctYW5pbWF0aW9uLW9yZGVyLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zdmctYW5pbWF0aW9uLW9yZGVyLWV4cGVjdGVk
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj5UZXN0IHRoYXQgdGhlIG9yZGVyIG9mIGVs
ZW1lbnRzIGRvZXMgbm90IGFmZmVjdCBhbmltYXRpb25zLjwvcD4KKzxzdmcgaWQ9InN2ZyIgd2lk
dGg9IjMwMCIgaGVpZ2h0PSIzMDAiPgorICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBo
ZWlnaHQ9IjEwMCIgZmlsbD0iZ3JlZW4iLz4KKzwvc3ZnPgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc3ZnLWFuaW1hdGlvbi1vcmRlci5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3N2Zy1hbmltYXRpb24tb3Jk
ZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3N2Zy1h
bmltYXRpb24tb3JkZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorPCFET0NU
WVBFIEhUTUw+Cis8aHRtbD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBydW5UZXN0KCkgeworICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisKKyAg
Ly8gRGVmZXIgdG8gYWxsb3cgYW5pbWF0aW9ucyB0byBydW4uCisgIHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7CisgIH0sIDApOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3Qo
KSI+Cis8cCBpZD0iZGVzY3JpcHRpb24iPlRlc3QgdGhhdCB0aGUgb3JkZXIgb2YgZWxlbWVudHMg
ZG9lcyBub3QgYWZmZWN0IGFuaW1hdGlvbnMuPC9wPgorPHN2ZyBpZD0ic3ZnIiB3aWR0aD0iMzAw
IiBoZWlnaHQ9IjMwMCI+CisgIDwhLS0gVGhpcyByZWQgc3F1YXJlIHNob3VsZCBiZSBjb3ZlcmVk
IHVwIGlmIHdlIHBhc3MuIC0tPgorICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWln
aHQ9IjEwMCIgZmlsbD0icmVkIi8+CisKKyAgPCEtLSBBbmltYXRlIG9uZSBncmVlbiByZWN0YW5n
bGUgb3ZlciB0aGUgdG9wIGhhbGYgb2YgdGhlIHJlZCBzcXVhcmUuIC0tPgorICA8cmVjdCBpZD0i
cmVjdDEiICB4PSItMTAwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUwIiBmaWxsPSJncmVl
biIgLz4KKyAgPHNldCBhdHRyaWJ1dGVOYW1lPSJ4IiB4bGluazpocmVmPSIjcmVjdDEiIHRvPSIw
Ii8+CisKKyAgPCEtLSBBbmltYXRlIGEgc2Vjb25kIGdyZWVuIHJlY3RhbmdsZSBvdmVyIHRoZSBi
b3R0b20gaGFsZiBvZiB0aGUgcmVkIHNxdWFyZS4gLS0+CisgIDxzZXQgYXR0cmlidXRlTmFtZT0i
eCIgeGxpbms6aHJlZj0iI3JlY3QyIiB0bz0iMCIvPgorICA8cmVjdCBpZD0icmVjdDIiICB4PSIt
MTAwIiB5PSI1MCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI1MCIgZmlsbD0iZ3JlZW4iIC8+Cis8L3N2
Zz4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0b20vc3ZnLXBl
bmRpbmctdHdpY2UtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcv
Y3VzdG9tL3N2Zy1wZW5kaW5nLXR3aWNlLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Zy1wZW5kaW5nLXR3aWNlLWV4cGVjdGVkLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxib2R5
PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj5UZXN0IHRoYXQgYW4gYW5pbWF0aW9uIHdpdGggYSBwZW5k
aW5nIHJlc291cmNlIGNhbiBiZSBjaGFuZ2VkIHRvIGEgc2Vjb25kIHBlbmRpbmcgcmVzb3VyY2Us
IHRoZW4gcmVzb2x2ZWQgY29ycmVjdGx5LjwvcD4KKzxzdmcgaWQ9InN2ZyIgd2lkdGg9IjMwMCIg
aGVpZ2h0PSIzMDAiPgorICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEw
MCIgZmlsbD0iZ3JlZW4iLz4KKzwvc3ZnPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvc3ZnL2N1c3RvbS9zdmctcGVuZGluZy10d2ljZS5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3N2Zy9jdXN0b20vc3ZnLXBlbmRpbmctdHdpY2UuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL3N2Zy9jdXN0b20vc3ZnLXBlbmRpbmctdHdpY2UuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzNCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxzY3JpcHQ+
CitmdW5jdGlvbiBydW5UZXN0KCkgeworICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisKKyAgLy8gVGhlIGFuaW1hdGlvbiBpcyBhbHJlYWR5
IGluIGEgcGVuZGluZyBzdGF0ZSwgY2hhbmdlIGl0IHRvIGFub3RoZXIKKyAgLy8gcGVuZGluZyBp
ZCAobmV3SWQpLCB0aGVuIG1ha2UgdGhlIG5ldyBpZCB2YWxpZCBhbmQgY2hlY2sgdGhhdAorICAv
LyB0aGUgYW5pbWF0aW9uIHJ1bnMuCisgIHZhciByZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3JlY3QnKTsKKyAgdmFyIGFuaW1hdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0
Jyk7CisgIGFuaW1hdGUuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxp
bmsiLCAiaHJlZiIsICIjbmV3SWQiKTsKKyAgcmVjdC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ25ld0lk
Jyk7CisKKyAgLy8gRGVmZXIgdG8gYWxsb3cgYW5pbWF0aW9ucyB0byBydW4uCisgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7CisgIH0sIDApOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9
InJ1blRlc3QoKSI+Cis8cCBpZD0iZGVzY3JpcHRpb24iPlRlc3QgdGhhdCBhbiBhbmltYXRpb24g
d2l0aCBhIHBlbmRpbmcgcmVzb3VyY2UgY2FuIGJlIGNoYW5nZWQgdG8gYSBzZWNvbmQgcGVuZGlu
ZyByZXNvdXJjZSwgdGhlbiByZXNvbHZlZCBjb3JyZWN0bHkuPC9wPgorPHN2ZyBpZD0ic3ZnIiB3
aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCI+CisgIDwhLS0gVGhpcyByZWQgc3F1YXJlIHNob3VsZCBi
ZSBjb3ZlcmVkIHVwIGlmIHdlIHBhc3MuIC0tPgorICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0i
MTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0icmVkIi8+CisKKyAgPCEtLSBUaGlzIGdyZWVuIHNxdWFy
ZSBzaG91bGQgZW5kIHVwIGNvdmVyaW5nIHRoZSByZWQgc3F1YXJlIGlmIHdlIHBhc3MuIC0tPgor
ICA8cmVjdCBpZD0icmVjdCIgeD0iLTEwMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAi
IGZpbGw9ImdyZWVuIi8+CisgIDxzZXQgaWQ9InNldCIgeGxpbms6aHJlZj0iI2RvZXNOb3RFeGlz
dCIgYXR0cmlidXRlTmFtZT0ieCIgdG89IjAiIC8+Cis8L3N2Zz4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="193084"
          type_id="1"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178064</attachid>
            <date>2012-12-06 12:52:16 -0800</date>
            <delta_ts>2012-12-06 16:22:53 -0800</delta_ts>
            <desc>Fix egregious Changelog error and rebaseline</desc>
            <filename>102655.9.patch</filename>
            <type>text/plain</type>
            <size>31524</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjg3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDEyLTEyLTA2ICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgVW5pZnkgU1ZHJ3MgYW5pbWF0aW9u
IGFuZCB0YXJnZXQgdHJhY2tpbmcgc3lzdGVtcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjY1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggdW5pZmllcyBvdXIgYW5pbWF0aW9uIHRh
cmdldCB0cmFja2luZyBzeXN0ZW0gYW5kIHJlZ3VsYXIgdGFyZ2V0IHRyYWNraW5nIHN5c3RlbS4K
KyAgICAgICAgVGhpcyBzaW1wbGlmaWVzIHRoZSBjb2RlLCBmaXhlcyBhIGJ1ZywgYW5kIGNsZWFu
cyB1cCBhIGhpc3RvcmljYWxseSBzZWN1cml0eS1zZW5zaXRpdmUgYXJlYS4KKworICAgICAgICBC
YWNrZ3JvdW5kOiBXaGVuIDx1c2U+LCA8bXBhdGg+LCA8YW5pbWF0ZT4sIGV0Yy4gcmVmZXJlbmNl
IGFub3RoZXIgZWxlbWVudCB1c2luZworICAgICAgICB4bGluazpocmVmPSIjaWQiLCB3ZSBuZWVk
IHRvIHRyYWNrIHdoZW4gI2lkIGNoYW5nZXMgdG8gI290aGVySWQsIHdoZW4gI2lkIGlzIHJlbW92
ZWQsIGV0Yy4KKyAgICAgICAgVGhpcyBib29ra2VlcGluZyBvZiBlbGVtZW50IC0+IHRhcmdldCBp
cyBkb25lIGluIFNWR0RvY3VtZW50RXh0ZW5zaW9ucy4gQWRkaXRpb25hbGx5LCB3aGVuCisgICAg
ICAgIGEgdGFyZ2V0IGNoYW5nZXMgdGhhdCBjYXVzZXMgbGF5b3V0IChlLmcuLCByZWN0LnggaXMg
Y2hhbmdlZCksIGFsbCBkZXBlbmRlbnQgZWxlbWVudHMgd2l0aAorICAgICAgICByZW5kZXJlcnMg
YXJlIG5vdGlmaWVkICg8YW5pbWF0ZT4gaGFzIG5vIHJlbmRlcmVyIGFuZCB3aWxsIG5vdCB1c2Ug
dGhpcykuCisKKyAgICAgICAgUHJldmlvdXNseSwgeGxpbms6aHJlZiBjaGFuZ2VzIHdlcmUgbGF6
aWx5IHJlc29sdmVkIHdoZW4gdGFyZ2V0RWxlbWVudCgpIHdhcyBjYWxsZWQsIHRhcmdldAorICAg
ICAgICBjaGFuZ2VzIHdlcmUgdHJhY2tlZCB1c2luZyB0aGUgYW5pbWF0aW9uIHRyYWNraW5nIGZy
YW1ld29yaywgYW5kIHBlbmRpbmcgdGFyZ2V0cyBkaWQgbm90CisgICAgICAgIHdvcmsgKGUuZy4s
IDxhbmltYXRlIHhsaW5rOmhyZWY9IiNwIj48IS0tYW5pbWF0ZSBpcyBub3cgcGVuZGluZyAjcCAt
LT48cmVjdCBpZD0icCIvPikuCisKKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCwgd2Ugbm8gbG9u
Z2VyIGxhemlseSByZXNvbHZlIHRhcmdldEVsZW1lbnQoKSBidXQgaW5zdGVhZCBjaGFuZ2UgaXQg
d2hlbgorICAgICAgICBvdXIgeGxpbms6aHJlZiBhdHRyaWJ1dGUgY2hhbmdlcy4gSW5zdGVhZCBv
ZiB1c2luZyB0aGUgYW5pbWF0aW9uIHRyYWNraW5nIGZyYW1ld29yayBpbgorICAgICAgICBTVkdE
b2N1bWVudEV4dGVuc2lvbnMsIHdlIG5vdyB1c2UgdGhlIHJlZ3VsYXIgdGFyZ2V0IHRyYWNraW5n
IGZyYW1ld29yay4gTGFzdGx5LCBieSB1c2luZworICAgICAgICB0aGUgcmVndWxhciB0YXJnZXQg
dHJhY2tpbmcgZnJhbWV3b3JrIHdlIGFyZSBhYmxlIHRvIGhvb2sgaW50byB0aGUgcGVuZGluZyBy
ZXNvdXJjZSBoYW5kbGluZworICAgICAgICB3aGljaCBmaXhlcyBhIGJ1ZyAoc2VlIHRoZSB0ZXN0
KS4KKworICAgICAgICBBIHRlc3QgaGFzIGJlZW4gYWRkZWQgdG8gdGVzdCB0aGF0IHRoZSBvcmRl
ciBvZiBhbmltYXRpb24gZWxlbWVudHMgZG9lcyBub3QgbWF0dGVyLiBBIHNlY29uZAorICAgICAg
ICB0ZXN0IGhhcyBiZWVuIGFkZGVkIHRvIHNob3cgd2UgZG8gbm90IHJlZ3Jlc3MgYSBwZW5kaW5n
LXdoaWxlLXBlbmRpbmcgY2FzZS4KKworICAgICAgICBUZXN0czogc3ZnL2FuaW1hdGlvbnMvc3Zn
LWFuaW1hdGlvbi1vcmRlci5odG1sCisgICAgICAgICAgICAgICBzdmcvY3VzdG9tL3N2Zy1wZW5k
aW5nLXR3aWNlLmh0bWwKKworICAgICAgICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6c2V0VGFyZ2V0RWxlbWVudCk6CisK
KyAgICAgICAgICAgIHNldFRhcmdldEVsZW1lbnQgYW5kIHNldEF0dHJpYnV0ZU5hbWUgbm93IHdv
cmsgc2ltaWxhcmx5LiBXaGVuIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZQorICAgICAgICAg
ICAgY2hhbmdlcywgd2UgdXBkYXRlIG91ciBpbnRlcm5hbCBzdGF0ZSAodGFyZ2V0IG9yIGF0dHJp
YnV0ZU5hbWUpIGFuZCBzYXZlIGl0IGluc3RlYWQgb2YKKyAgICAgICAgICAgIGxvb2tpbmcgdGhl
c2UgdmFsdWVzIHVwIG9uIGVhY2ggaXRlcmF0aW9uLgorCisgICAgICAgIChXZWJDb3JlOjpTVkdB
bmltYXRlRWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjpyZXNldEFuaW1hdGVkUHJvcGVydHlU
eXBlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaDoKKyAgICAgICAgKFNWR0Fu
aW1hdGVFbGVtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpzZXRBdHRyaWJ1dGVUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0QXR0cmlidXRlTmFt
ZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKFNWR0Fu
aW1hdGlvbkVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjp+U1ZHRG9jdW1lbnRF
eHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVu
dEV4dGVuc2lvbnMuaDoKKyAgICAgICAgKFNWR0RvY3VtZW50RXh0ZW5zaW9ucyk6CisgICAgICAg
ICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6flNW
R0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20pOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAg
ICogc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVt
ZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVsZW1lbnQpOgorCisgICAgICAg
ICAgICBUaGlzIGNhbiBiZSByZW1vdmVkIGFmdGVyIHIxMzE2MzEgbGFuZGVkLgorCisgICAgICAg
ICogc3ZnL1NWR01QYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdNUGF0aEVs
ZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAgKiBzdmcvU1ZHVGV4dFBhdGhF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRQYXRoRWxlbWVudDo6YnVpbGRQ
ZW5kaW5nUmVzb3VyY2UpOgorCisgICAgICAgICAgICBBIGJ1ZyB3YXMgZGlzY292ZXJlZCBpbiBy
ZXZpZXcgd2l0aCBvdXIgcmVzb3VyY2UgdHJhY2tpbmcgaW4gYSBwZW5kaW5nLXdoaWxlLXBlbmRp
bmcKKyAgICAgICAgICAgIGNhc2UuIFNWR01wYXRoRWxlbWVudCBhbmQgU1ZHVGV4dFBhdGhFbGVt
ZW50IGhhdmUgYmVlbiB1cGRhdGVkIHRvIGZpeCB0aGlzIGFzIHdlbGwuCisKKyAgICAgICAgKiBz
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcDoKKworICAgICAgICAgICAgVGhlIGNoYW5n
ZXMgaW4gU1ZHU01JTEVsZW1lbnQgc2hvdWxkIGxvb2sgdmVyeSBzaW1pbGFyIHRvIFNWR0ZFSW1h
Z2VFbGVtZW50LAorICAgICAgICAgICAgU1ZHTVBhdGhFbGVtZW50LCBldGMuIFRoZSBpZGVhIGlz
IHRvIGJ1aWxkIHBlbmRpbmcgcmVzb3VyY2VzIHdoZW4gYWRkZWQgb3IKKyAgICAgICAgICAgIHJl
bW92ZWQgZnJvbSB0aGUgZG9jdW1lbnQsIG9yIHdoZW4gdGhlIGhyZWYgYXR0cmlidXRlIGNoYW5n
ZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Ojp+U1ZHU01JTEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6
Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1l
bnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVt
ZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnJl
bW92ZWRGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpzZXRBdHRyaWJ1
dGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpzZXRUYXJnZXRFbGVt
ZW50KToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVt
ZW50KToKKyAgICAgICAgKFNWR1NNSUxFbGVtZW50KToKKwogMjAxMi0xMi0wNiAgRWxsaW90dCBT
cHJlaG4gIDxlc3ByZWhuQGdtYWlsLmNvbT4KIAogICAgICAgICBDcmVhdGUgb25seSBOb2RlUmFy
ZURhdGFCYXNlIHdoZW4gc2V0dGluZyBUcmVlU2NvcGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTM2ODQ3KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDE2ICsz
OTYsMjYgQEAgZmxvYXQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZURpc3RhbgogICAgIHJl
dHVybiBlbnN1cmVBbmltYXRvcigpLT5jYWxjdWxhdGVEaXN0YW5jZShmcm9tU3RyaW5nLCB0b1N0
cmluZyk7CiB9CiAKLXZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OnRhcmdldEVsZW1lbnRXaWxsQ2hh
bmdlKFNWR0VsZW1lbnQqIGN1cnJlbnRUYXJnZXQsIFNWR0VsZW1lbnQqIG5ld1RhcmdldCkKK3Zv
aWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OnNldFRhcmdldEVsZW1lbnQoU1ZHRWxlbWVudCogdGFyZ2V0
KQogewotICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKGN1
cnJlbnRUYXJnZXQsIG5ld1RhcmdldCk7CisgICAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFy
Z2V0RWxlbWVudCh0YXJnZXQpOworICAgIHJlc2V0QW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKTsKK30K
IAordm9pZCBTVkdBbmltYXRlRWxlbWVudDo6c2V0QXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQoreworICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldEF0
dHJpYnV0ZU5hbWUoYXR0cmlidXRlTmFtZSk7CisgICAgcmVzZXRBbmltYXRlZFByb3BlcnR5VHlw
ZSgpOworfQorCit2b2lkIFNWR0FuaW1hdGVFbGVtZW50OjpyZXNldEFuaW1hdGVkUHJvcGVydHlU
eXBlKCkKK3sKICAgICBBU1NFUlQoIW1fYW5pbWF0ZWRUeXBlKTsKICAgICBtX2Zyb21UeXBlLmNs
ZWFyKCk7CiAgICAgbV90b1R5cGUuY2xlYXIoKTsKICAgICBtX3RvQXRFbmRPZkR1cmF0aW9uVHlw
ZS5jbGVhcigpOwogICAgIG1fYW5pbWF0b3IuY2xlYXIoKTsKLSAgICBtX2FuaW1hdGVkUHJvcGVy
dHlUeXBlID0gbmV3VGFyZ2V0ID8gZGV0ZXJtaW5lQW5pbWF0ZWRQcm9wZXJ0eVR5cGUobmV3VGFy
Z2V0KSA6IEFuaW1hdGVkU3RyaW5nOworICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgPSB0YXJn
ZXRFbGVtZW50KCkgPyBkZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlwZSh0YXJnZXRFbGVtZW50
KCkpIDogQW5pbWF0ZWRTdHJpbmc7CiB9CiAKIFNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yKiBTVkdB
bmltYXRlRWxlbWVudDo6ZW5zdXJlQW5pbWF0b3IoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVFbGVtZW50LmgJKHJldmlzaW9uIDEzNjg0NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIHBy
b3RlY3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCByZXNldEFuaW1hdGVkVHlwZSgpOwogICAgIHZp
cnR1YWwgdm9pZCBjbGVhckFuaW1hdGVkVHlwZShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KTsK
KwogICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKGNvbnN0
IFN0cmluZyYgdG9BdEVuZE9mRHVyYXRpb25TdHJpbmcpOwogICAgIHZpcnR1YWwgYm9vbCBjYWxj
dWxhdGVGcm9tQW5kVG9WYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHRvU3RyaW5nKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVz
KGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBieVN0cmluZyk7CkBAIC01
MywxMSArNTQsMTMgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgZmxvYXQgY2FsY3VsYXRlRGlz
dGFuY2UoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKTsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNBZGRpdGl2ZSgpIGNvbnN0IE9WRVJSSURFOwogCi0gICAgdmly
dHVhbCB2b2lkIHRhcmdldEVsZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQqIGN1cnJlbnRUYXJn
ZXQsIFNWR0VsZW1lbnQqIG9sZFRhcmdldCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNl
dFRhcmdldEVsZW1lbnQoU1ZHRWxlbWVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRBdHRyaWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBPVkVSUklERTsKIAogICAgIEFu
aW1hdGVkUHJvcGVydHlUeXBlIG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGU7CiAKIHByaXZhdGU6Cisg
ICAgdm9pZCByZXNldEFuaW1hdGVkUHJvcGVydHlUeXBlKCk7CiAgICAgU1ZHQW5pbWF0ZWRUeXBl
QW5pbWF0b3IqIGVuc3VyZUFuaW1hdG9yKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRB
dHRyaWJ1dGVUeXBlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxMzY4NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOSw3ICszMTksNyBAQCB2b2lk
IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldEF0dHJpYnV0ZVR5CiAgICAgICAgIG1fYXR0cmlidXRl
VHlwZSA9IEF0dHJpYnV0ZVR5cGVYTUw7CiAgICAgZWxzZQogICAgICAgICBtX2F0dHJpYnV0ZVR5
cGUgPSBBdHRyaWJ1dGVUeXBlQXV0bzsKLSAgICBjaGVja0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBl
KHRhcmdldEVsZW1lbnQoRG9Ob3RSZXNvbHZlTmV3VGFyZ2V0KSk7CisgICAgY2hlY2tJbnZhbGlk
Q1NTQXR0cmlidXRlVHlwZSh0YXJnZXRFbGVtZW50KCkpOwogfQogCiBTdHJpbmcgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6dG9WYWx1ZSgpIGNvbnN0CkBAIC02NzcsMTggKzY3NywxNiBAQCB2b2lkIFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OmRldGVybWluZVByb3BlCiAgICAgICAgIG1fdG9Qcm9wZXJ0eVZh
bHVlVHlwZSA9IEluaGVyaXRWYWx1ZTsKIH0KIAotdm9pZCBTVkdBbmltYXRpb25FbGVtZW50Ojp0
YXJnZXRFbGVtZW50V2lsbENoYW5nZShTVkdFbGVtZW50KiBjdXJyZW50VGFyZ2V0LCBTVkdFbGVt
ZW50KiBuZXdUYXJnZXQpCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEVsZW1l
bnQoU1ZHRWxlbWVudCogdGFyZ2V0KQogewotICAgIFNWR1NNSUxFbGVtZW50Ojp0YXJnZXRFbGVt
ZW50V2lsbENoYW5nZShjdXJyZW50VGFyZ2V0LCBuZXdUYXJnZXQpOwotCi0gICAgY2hlY2tJbnZh
bGlkQ1NTQXR0cmlidXRlVHlwZShuZXdUYXJnZXQpOworICAgIFNWR1NNSUxFbGVtZW50OjpzZXRU
YXJnZXRFbGVtZW50KHRhcmdldCk7CisgICAgY2hlY2tJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSh0
YXJnZXQpOwogfQogCiB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5hbWUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKIHsKICAgICBTVkdTTUlMRWxlbWVu
dDo6c2V0QXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKTsKLQotICAgIGNoZWNrSW52YWxpZENT
U0F0dHJpYnV0ZVR5cGUodGFyZ2V0RWxlbWVudChEb05vdFJlc29sdmVOZXdUYXJnZXQpKTsKKyAg
ICBjaGVja0ludmFsaWRDU1NBdHRyaWJ1dGVUeXBlKHRhcmdldEVsZW1lbnQoKSk7CiB9CiAKIHZv
aWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2hlY2tJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZShTVkdF
bGVtZW50KiB0YXJnZXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVt
ZW50LmgJKHJldmlzaW9uIDEzNjg0NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRp
b25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsOCBAQCBwcm90ZWN0ZWQ6
CiAgICAgQW5pbWF0ZWRQcm9wZXJ0eVZhbHVlVHlwZSBtX2Zyb21Qcm9wZXJ0eVZhbHVlVHlwZTsK
ICAgICBBbmltYXRlZFByb3BlcnR5VmFsdWVUeXBlIG1fdG9Qcm9wZXJ0eVZhbHVlVHlwZTsKIAot
ICAgIHZpcnR1YWwgdm9pZCB0YXJnZXRFbGVtZW50V2lsbENoYW5nZShTVkdFbGVtZW50KiBjdXJy
ZW50VGFyZ2V0LCBTVkdFbGVtZW50KiBvbGRUYXJnZXQpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzZXRUYXJnZXRFbGVtZW50KFNWR0VsZW1lbnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0QXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJikgT1ZFUlJJREU7CiAg
ICAgYm9vbCBoYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFz
SW52YWxpZENTU0F0dHJpYnV0ZVR5cGU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBbmlt
YXRpb25Nb2RlKCk7CkBAIC0yMDYsNyArMjA3LDYgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25BdHRyaWJ1dGVDaGFuZ2VkKCkgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldEF0dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIE9W
RVJSSURFOwogICAgIHZvaWQgc2V0QXR0cmlidXRlVHlwZShjb25zdCBBdG9taWNTdHJpbmcmKTsK
IAogICAgIHZvaWQgY2hlY2tJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZShTVkdFbGVtZW50Kik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAkocmV2
aXNpb24gMTM2ODQ3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjpTVkdEb2N1bWVudEV4dGVucwogCiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6On5TVkdEb2N1
bWVudEV4dGVuc2lvbnMoKQogewotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2FuaW1hdGVkRWxlbWVu
dHMpOwogICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3BlbmRpbmdSZXNvdXJjZXMpOwogICAgIGRlbGV0
ZUFsbFZhbHVlcyhtX3BlbmRpbmdSZXNvdXJjZXNGb3JSZW1vdmFsKTsKIH0KQEAgLTEzMyw1OCAr
MTMyLDYgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmRpc3BhdGNoU1ZHTAogICAgIH0K
IH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZEFuaW1hdGlvbkVsZW1lbnRUb1Rh
cmdldChTVkdTTUlMRWxlbWVudCogYW5pbWF0aW9uRWxlbWVudCwgU1ZHRWxlbWVudCogdGFyZ2V0
RWxlbWVudCkKLXsKLSAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7Ci0gICAgQVNTRVJUKGFuaW1h
dGlvbkVsZW1lbnQpOwotCi0gICAgaWYgKEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiogYW5pbWF0
aW9uRWxlbWVudHNGb3JUYXJnZXQgPSBtX2FuaW1hdGVkRWxlbWVudHMuZ2V0KHRhcmdldEVsZW1l
bnQpKSB7Ci0gICAgICAgIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0LT5hZGQoYW5pbWF0aW9u
RWxlbWVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBIYXNoU2V0PFNWR1NNSUxF
bGVtZW50Kj4qIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0ID0gbmV3IEhhc2hTZXQ8U1ZHU01J
TEVsZW1lbnQqPjsKLSAgICBhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldC0+YWRkKGFuaW1hdGlv
bkVsZW1lbnQpOwotICAgIG1fYW5pbWF0ZWRFbGVtZW50cy5zZXQodGFyZ2V0RWxlbWVudCwgYW5p
bWF0aW9uRWxlbWVudHNGb3JUYXJnZXQpOwotfQotCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZyb21UYXJnZXQoU1ZHU01JTEVsZW1lbnQqIGFuaW1h
dGlvbkVsZW1lbnQsIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpCi17Ci0gICAgQVNTRVJUKHRh
cmdldEVsZW1lbnQpOwotICAgIEFTU0VSVChhbmltYXRpb25FbGVtZW50KTsKLQotICAgIEhhc2hN
YXA8U1ZHRWxlbWVudCosIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiogPjo6aXRlcmF0b3IgaXQg
PSBtX2FuaW1hdGVkRWxlbWVudHMuZmluZCh0YXJnZXRFbGVtZW50KTsKLSAgICBBU1NFUlQoaXQg
IT0gbV9hbmltYXRlZEVsZW1lbnRzLmVuZCgpKTsKLSAgICAKLSAgICBIYXNoU2V0PFNWR1NNSUxF
bGVtZW50Kj4qIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0ID0gaXQtPnZhbHVlOwotICAgIEFT
U0VSVCghYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQtPmlzRW1wdHkoKSk7Ci0KLSAgICBhbmlt
YXRpb25FbGVtZW50c0ZvclRhcmdldC0+cmVtb3ZlKGFuaW1hdGlvbkVsZW1lbnQpOwotICAgIGlm
IChhbmltYXRpb25FbGVtZW50c0ZvclRhcmdldC0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fYW5p
bWF0ZWRFbGVtZW50cy5yZW1vdmUoaXQpOwotICAgICAgICBkZWxldGUgYW5pbWF0aW9uRWxlbWVu
dHNGb3JUYXJnZXQ7Ci0gICAgfQotfQotCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVt
b3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNGcm9tVGFyZ2V0KFNWR0VsZW1lbnQqIHRhcmdldEVsZW1l
bnQpCi17Ci0gICAgQVNTRVJUKHRhcmdldEVsZW1lbnQpOwotICAgIEhhc2hNYXA8U1ZHRWxlbWVu
dCosIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiogPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGVk
RWxlbWVudHMuZmluZCh0YXJnZXRFbGVtZW50KTsKLSAgICBpZiAoaXQgPT0gbV9hbmltYXRlZEVs
ZW1lbnRzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIYXNoU2V0PFNWR1NNSUxFbGVt
ZW50Kj4qIGFuaW1hdGlvbkVsZW1lbnRzRm9yVGFyZ2V0ID0gaXQtPnZhbHVlOwotICAgIFZlY3Rv
cjxTVkdTTUlMRWxlbWVudCo+IHRvQmVSZXNldDsKLQotICAgIEhhc2hTZXQ8U1ZHU01JTEVsZW1l
bnQqPjo6aXRlcmF0b3IgZW5kID0gYW5pbWF0aW9uRWxlbWVudHNGb3JUYXJnZXQtPmVuZCgpOwot
ICAgIGZvciAoSGFzaFNldDxTVkdTTUlMRWxlbWVudCo+OjppdGVyYXRvciBpdCA9IGFuaW1hdGlv
bkVsZW1lbnRzRm9yVGFyZ2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHRv
QmVSZXNldC5hcHBlbmQoKml0KTsKLQotICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+OjppdGVy
YXRvciB2ZWN0b3JFbmQgPSB0b0JlUmVzZXQuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8U1ZHU01J
TEVsZW1lbnQqPjo6aXRlcmF0b3IgdmVjdG9ySXQgPSB0b0JlUmVzZXQuYmVnaW4oKTsgdmVjdG9y
SXQgIT0gdmVjdG9yRW5kOyArK3ZlY3Rvckl0KQotICAgICAgICAoKnZlY3Rvckl0KS0+cmVzZXRU
YXJnZXRFbGVtZW50KCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHJlcG9ydE1lc3NhZ2UoRG9jdW1lbnQq
IGRvY3VtZW50LCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsK
ICAgICBpZiAoZG9jdW1lbnQtPmZyYW1lKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RG9jdW1lbnRFeHRlbnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0RvY3VtZW50RXh0ZW5zaW9ucy5oCShyZXZpc2lvbiAxMzY4NDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEwICs1
OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhdXNlQW5pbWF0aW9ucygpOwogICAgIHZvaWQgdW5w
YXVzZUFuaW1hdGlvbnMoKTsKICAgICB2b2lkIGRpc3BhdGNoU1ZHTG9hZEV2ZW50VG9PdXRlcm1v
c3RTVkdFbGVtZW50cygpOwotICAgIAotICAgIHZvaWQgYWRkQW5pbWF0aW9uRWxlbWVudFRvVGFy
Z2V0KFNWR1NNSUxFbGVtZW50KiwgU1ZHRWxlbWVudCopOwotICAgIHZvaWQgcmVtb3ZlQW5pbWF0
aW9uRWxlbWVudEZyb21UYXJnZXQoU1ZHU01JTEVsZW1lbnQqLCBTVkdFbGVtZW50Kik7Ci0gICAg
dm9pZCByZW1vdmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQoU1ZHRWxlbWVudCopOwog
CiAgICAgdm9pZCByZXBvcnRXYXJuaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgcmVwb3J0
RXJyb3IoY29uc3QgU3RyaW5nJik7CkBAIC04Myw3ICs3OSw2IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7IC8vIHdlYWsgcmVmZXJlbmNlCiAgICAgSGFzaFNl
dDxTVkdTVkdFbGVtZW50Kj4gbV90aW1lQ29udGFpbmVyczsgLy8gRm9yIFNWRyAxLjIgc3VwcG9y
dCB0aGlzIHdpbGwgbmVlZCB0byBiZSBtYWRlIG1vcmUgZ2VuZXJhbC4KLSAgICBIYXNoTWFwPFNW
R0VsZW1lbnQqLCBIYXNoU2V0PFNWR1NNSUxFbGVtZW50Kj4qID4gbV9hbmltYXRlZEVsZW1lbnRz
OwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgSGFzaFNldDxTVkdGb250RmFjZUVsZW1lbnQq
PiBtX3N2Z0ZvbnRGYWNlRWxlbWVudHM7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxl
bWVudC5jcHAJKHJldmlzaW9uIDEzNjg0NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNiBAQCBTVkdFbGVtZW50Ojp+U1ZH
RWxlbWVudCgpCiAgICAgICAgIHJhcmVEYXRhTWFwLnJlbW92ZShpdCk7CiAgICAgfQogICAgIEFT
U0VSVChkb2N1bWVudCgpKTsKLSAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCkt
PnJlbW92ZUFsbEFuaW1hdGlvbkVsZW1lbnRzRnJvbVRhcmdldCh0aGlzKTsKICAgICBkb2N1bWVu
dCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9y
VGFyZ2V0KHRoaXMpOwogfQogCkBAIC0xODMsNyArMTgyLDYgQEAgdm9pZCBTVkdFbGVtZW50Ojpy
ZW1vdmVkRnJvbShDb250YWluZXJObwogICAgIFN0eWxlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tKHJv
b3RQYXJlbnQpOwogCiAgICAgaWYgKHdhc0luRG9jdW1lbnQpIHsKLSAgICAgICAgZG9jdW1lbnQo
KS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21U
YXJnZXQodGhpcyk7CiAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+
cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQodGhpcyk7CiAgICAgICAgIGRvY3Vt
ZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVz
b3VyY2VzKHRoaXMpOwogICAgIH0KQEAgLTUzNywxMCArNTM1LDggQEAgdm9pZCBTVkdFbGVtZW50
OjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0CiB7CiAgICAgU3R5bGVkRWxlbWVudDo6YXR0cmlidXRl
Q2hhbmdlZChuYW1lLCBuZXdWYWx1ZSk7CiAKLSAgICBpZiAoaXNJZEF0dHJpYnV0ZU5hbWUobmFt
ZSkpIHsKLSAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZW1vdmVB
bGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXQodGhpcyk7CisgICAgaWYgKGlzSWRBdHRyaWJ1
dGVOYW1lKG5hbWUpKQogICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCkt
PnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KHRoaXMpOwotICAgIH0KIAogICAg
IC8vIENoYW5nZXMgdG8gdGhlIHN0eWxlIGF0dHJpYnV0ZSBhcmUgcHJvY2Vzc2VkIGxhemlseSAo
c2VlIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZSgpIGFuZCByZWxhdGVkIG1ldGhvZHMpLAogICAgIC8v
IHNvIHdlIGRvbid0IHdhbnQgY2hhbmdlcyB0byB0aGUgc3R5bGUgYXR0cmlidXRlIHRvIHJlc3Vs
dCBpbiBleHRyYSB3b3JrIGhlcmUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dEluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dEluc3RhbmNlLmNwcAkocmV2aXNpb24gMTM2ODQ3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnRJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCwxNCArMTQwLDYgQEAg
dm9pZCBTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbgogICAgICAgICBBU1NFUlQo
KCppdCktPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkgPT0gZWxlbWVudCk7CiAgICAgICAgICgqaXQp
LT5zaGFkb3dUcmVlRWxlbWVudCgpLT5zZXRDb3JyZXNwb25kaW5nRWxlbWVudCgwKTsKIAotICAg
ICAgICAvLyBUaGUgc2hhZG93IHRyZWUsIHdoaWNoIGlzIGV2ZW50dWFsbHkgYW5pbWF0ZWQsIGlz
IG11dGF0ZWQuIEluIG9yZGVyIHRvIGtlZXAgdGhlIGFuaW1WYWwKLSAgICAgICAgLy8gbG9naWMg
Y29ycmVjdCwgd2UgaGF2ZSB0byBzdG9wIHRoZSBhbmltYXRpb24sIGFuZCByZXN0YXJ0IGl0IG9u
Y2UgdGhlIHNoYWRvdyB0cmVlIGhhcwotICAgICAgICAvLyByZWNsb25lZC4gT3RoZXJ3aXNlIHdl
IG1pc3MgdG8gY2FsbCBzdG9wQW5pbVZhbEFuaW1hdGlvbigpIG9uIHRoZSBvbGQgc2hhZG93IHRy
ZWUgZWxlbWVudAotICAgICAgICAvLyB3aGljaCBsZWFkcyB0byBhbiBhc3NlcnRpb24gb25jZSBn
YXJiYWdlIGlzIGNvbGxlY3RlZCwgaWYgdGhlIGFuaW1WYWwgYmluZGluZ3MgaGF2ZSBiZWVuCi0g
ICAgICAgIC8vIGFjY2Vzc2VkIGZyb20gSlMuIEl0IHdvdWxkIGFsc28gYXNzZXJ0IG9uIHRoZSBu
ZXh0IHVwZGF0ZUFuaW1hdGlvbnMoKSBjYWxsIGFzIHRoZSBuZXcKLSAgICAgICAgLy8gU1ZHQW5p
bWF0ZWRQcm9wZXJ0eSBvYmplY3QgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQgeWV0ICh1c2luZyBz
dGFydEFuaW1WYWxBbmltYXRpb24pLgotICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLT5hY2Nl
c3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFsbEFuaW1hdGlvbkVsZW1lbnRzRnJvbVRhcmdldChl
bGVtZW50KTsKLQogICAgICAgICBpZiAoU1ZHVXNlRWxlbWVudCogZWxlbWVudCA9ICgqaXQpLT5j
b3JyZXNwb25kaW5nVXNlRWxlbWVudCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC0+
aW5Eb2N1bWVudCgpKTsKICAgICAgICAgICAgIGVsZW1lbnQtPmludmFsaWRhdGVTaGFkb3dUcmVl
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcAkocmV2aXNpb24g
MTM2ODQ3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDcgKzY0LDggQEAgdm9pZCBTVkdNUGF0aEVsZW1lbnQ6OmJ1aWxkUGVu
ZGluZ1Jlc291cgogICAgIFN0cmluZyBpZDsKICAgICBFbGVtZW50KiB0YXJnZXQgPSBTVkdVUklS
ZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwgZG9jdW1lbnQoKSwg
JmlkKTsKICAgICBpZiAoIXRhcmdldCkgewotICAgICAgICBpZiAoaGFzUGVuZGluZ1Jlc291cmNl
cygpKQorICAgICAgICAvLyBEbyBub3QgcmVnaXN0ZXIgYXMgcGVuZGluZyBpZiB3ZSBhcmUgYWxy
ZWFkeSBwZW5kaW5nIHRoaXMgcmVzb3VyY2UuCisgICAgICAgIGlmIChkb2N1bWVudCgpLT5hY2Nl
c3NTVkdFeHRlbnNpb25zKCktPmlzRWxlbWVudFBlbmRpbmdSZXNvdXJjZSh0aGlzLCBpZCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzY4
NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTYzLDExICsxNjMsMTQgQEAgdm9pZCBTVkdUZXh0UGF0aEVsZW1lbnQ6OmJ1
aWxkUGVuZGluZ1JlcwogICAgIFN0cmluZyBpZDsKICAgICBFbGVtZW50KiB0YXJnZXQgPSBTVkdV
UklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwgZG9jdW1lbnQo
KSwgJmlkKTsKICAgICBpZiAoIXRhcmdldCkgewotICAgICAgICBpZiAoaGFzUGVuZGluZ1Jlc291
cmNlcygpIHx8IGlkLmlzRW1wdHkoKSkKKyAgICAgICAgLy8gRG8gbm90IHJlZ2lzdGVyIGFzIHBl
bmRpbmcgaWYgd2UgYXJlIGFscmVhZHkgcGVuZGluZyB0aGlzIHJlc291cmNlLgorICAgICAgICBp
ZiAoZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5pc0VsZW1lbnRQZW5kaW5nUmVz
b3VyY2UodGhpcywgaWQpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGRvY3VtZW50
KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+YWRkUGVuZGluZ1Jlc291cmNlKGlkLCB0aGlzKTsK
LSAgICAgICAgQVNTRVJUKGhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7CisgICAgICAgIGlmICghaWQu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25z
KCktPmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgdGhpcyk7CisgICAgICAgICAgICBBU1NFUlQoaGFz
UGVuZGluZ1Jlc291cmNlcygpKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSBpZiAodGFyZ2V0LT5p
c1NWR0VsZW1lbnQoKSkgewogICAgICAgICAvLyBSZWdpc3RlciB1cyB3aXRoIHRoZSB0YXJnZXQg
aW4gdGhlIGRlcGVuZGVuY2llcyBtYXAuIEFueSBjaGFuZ2Ugb2YgaHJlZkVsZW1lbnQKICAgICAg
ICAgLy8gdGhhdCBsZWFkcyB0byByZWxheW91dC9yZXBhaW50aW5nIG5vdyBpbmZvcm1zIHVzLCBz
byB3ZSBjYW4gcmVhY3QgdG8gaXQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NWR1NNSUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5p
bWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkocmV2aXNpb24gMTM2ODQ3KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzOSwxMSArMTM5LDUwIEBAIFNWR1NNSUxFbGVtZW50OjpTVkdTTUlMRWxlbWVudChjb25zdCBR
dWEKIAogU1ZHU01JTEVsZW1lbnQ6On5TVkdTTUlMRWxlbWVudCgpCiB7CisgICAgY2xlYXJSZXNv
dXJjZVJlZmVyZW5jZXMoKTsKICAgICBkaXNjb25uZWN0Q29uZGl0aW9ucygpOwogICAgIGlmICht
X3RpbWVDb250YWluZXIgJiYgbV90YXJnZXRFbGVtZW50ICYmIGhhc1ZhbGlkQXR0cmlidXRlTmFt
ZSgpKQogICAgICAgICBtX3RpbWVDb250YWluZXItPnVuc2NoZWR1bGUodGhpcywgbV90YXJnZXRF
bGVtZW50LCBtX2F0dHJpYnV0ZU5hbWUpOwotICAgIGlmIChtX3RhcmdldEVsZW1lbnQpCi0gICAg
ICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlQW5pbWF0aW9uRWxl
bWVudEZyb21UYXJnZXQodGhpcywgbV90YXJnZXRFbGVtZW50KTsKK30KKwordm9pZCBTVkdTTUlM
RWxlbWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKQoreworICAgIEFTU0VSVChkb2N1bWVu
dCgpKTsKKyAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFsbFRh
cmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KHRoaXMpOworfQorCit2b2lkIFNWR1NNSUxFbGVtZW50
OjpidWlsZFBlbmRpbmdSZXNvdXJjZSgpCit7CisgICAgY2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMo
KTsKKyAgICBpZiAoIWluRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5n
IGlkOworICAgIFN0cmluZyBocmVmID0gZ2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRy
KTsKKyAgICBFbGVtZW50KiB0YXJnZXQ7CisgICAgaWYgKGhyZWYuaXNFbXB0eSgpKQorICAgICAg
ICB0YXJnZXQgPSBwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkg
PyBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ocGFyZW50Tm9kZSgpKSA6IDA7CisgICAgZWxzZQorICAg
ICAgICB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5n
KGhyZWYsIGRvY3VtZW50KCksICZpZCk7CisgICAgU1ZHRWxlbWVudCogc3ZnVGFyZ2V0ID0gdGFy
Z2V0ICYmIHRhcmdldC0+aXNTVkdFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4o
dGFyZ2V0KSA6IDA7CisKKyAgICBpZiAoc3ZnVGFyZ2V0ICE9IHRhcmdldEVsZW1lbnQoKSkKKyAg
ICAgICAgc2V0VGFyZ2V0RWxlbWVudChzdmdUYXJnZXQpOworCisgICAgaWYgKCFzdmdUYXJnZXQp
IHsKKyAgICAgICAgLy8gRG8gbm90IHJlZ2lzdGVyIGFzIHBlbmRpbmcgaWYgd2UgYXJlIGFscmVh
ZHkgcGVuZGluZyB0aGlzIHJlc291cmNlLgorICAgICAgICBpZiAoZG9jdW1lbnQoKS0+YWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLT5pc0VsZW1lbnRQZW5kaW5nUmVzb3VyY2UodGhpcywgaWQpKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPmFkZFBlbmRpbmdSZXNvdXJj
ZShpZCwgdGhpcyk7CisgICAgICAgICAgICBBU1NFUlQoaGFzUGVuZGluZ1Jlc291cmNlcygpKTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFJlZ2lzdGVyIHVzIHdpdGggdGhl
IHRhcmdldCBpbiB0aGUgZGVwZW5kZW5jaWVzIG1hcC4gQW55IGNoYW5nZSBvZiBocmVmRWxlbWVu
dAorICAgICAgICAvLyB0aGF0IGxlYWRzIHRvIHJlbGF5b3V0L3JlcGFpbnRpbmcgbm93IGluZm9y
bXMgdXMsIHNvIHdlIGNhbiByZWFjdCB0byBpdC4KKyAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLT5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQodGhpcywgc3ZnVGFy
Z2V0KTsKKyAgICB9CiB9CiAKIHN0YXRpYyBpbmxpbmUgUXVhbGlmaWVkTmFtZSBjb25zdHJ1Y3RR
dWFsaWZpZWROYW1lKGNvbnN0IFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQsIGNvbnN0IFN0cmluZyYg
YXR0cmlidXRlTmFtZSkKQEAgLTIxNiwxMiArMjU1LDExIEBAIE5vZGU6Okluc2VydGlvbk5vdGlm
aWNhdGlvblJlcXVlc3QgU1ZHU00KICAgICBpZiAobV9pc1dhaXRpbmdGb3JGaXJzdEludGVydmFs
KQogICAgICAgICByZXNvbHZlRmlyc3RJbnRlcnZhbCgpOwogCi0gICAgLy8gRm9yY2UgcmVzb2x1
dGlvbiBvZiB0YXJnZXQgZWxlbWVudAotICAgIGlmICghbV90YXJnZXRFbGVtZW50KQotICAgICAg
ICB0YXJnZXRFbGVtZW50KCk7CiAgICAgaWYgKG1fdGltZUNvbnRhaW5lcikKICAgICAgICAgbV90
aW1lQ29udGFpbmVyLT5ub3RpZnlJbnRlcnZhbHNDaGFuZ2VkKCk7CiAKKyAgICBidWlsZFBlbmRp
bmdSZXNvdXJjZSgpOworCiAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CiB9CiAKQEAgLTIzOCwx
MSArMjc2LDEwIEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW4KICAg
ICAgICAgUmVmUHRyPFNWR1NNSUxFbGVtZW50PiBrZWVwQWxpdmUodGhpcyk7CiAgICAgICAgIGRp
c2Nvbm5lY3RDb25kaXRpb25zKCk7CiAKLSAgICAgICAgLy8gQ2xlYXIgdGFyZ2V0IG5vdywgYmVj
YXVzZSBkaXNjb25uZWN0Q29uZGl0aW9ucyBjYWxscyB0YXJnZXRFbGVtZW50KCkgd2hpY2ggd2ls
bCByZWNyZWF0ZSB0aGUgdGFyZ2V0IGlmIHdlIHJlbW92ZWQgaXQgc29vbmVyLiAKLSAgICAgICAg
aWYgKG1fdGFyZ2V0RWxlbWVudCkKLSAgICAgICAgICAgIHJlc2V0VGFyZ2V0RWxlbWVudChEb05v
dFJlc29sdmVOZXdUYXJnZXQpOwotCisgICAgICAgIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7
CisgICAgICAgIHNldFRhcmdldEVsZW1lbnQoMCk7CiAgICAgICAgIHNldEF0dHJpYnV0ZU5hbWUo
YW55UU5hbWUoKSk7CisgICAgICAgIGFuaW1hdGlvbkF0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICB9
CiAKICAgICBTVkdFbGVtZW50OjpyZW1vdmVkRnJvbShyb290UGFyZW50KTsKQEAgLTQ3MiwxNiAr
NTA5LDExIEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQKICAgICAg
ICAgICAgIGJlZ2luTGlzdENoYW5nZWQoZWxhcHNlZCgpKTsKICAgICAgICAgZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmVuZEF0dHIpCiAgICAgICAgICAgICBlbmRMaXN0Q2hhbmdlZChl
bGFwc2VkKCkpOwotICAgICAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YXR0cmli
dXRlTmFtZUF0dHIpIHsKKyAgICAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmF0
dHJpYnV0ZU5hbWVBdHRyKQogICAgICAgICAgICAgc2V0QXR0cmlidXRlTmFtZShjb25zdHJ1Y3RR
dWFsaWZpZWROYW1lKHRoaXMsIGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmF0dHJpYnV0ZU5h
bWVBdHRyKSkpOwotICAgICAgICAgICAgaWYgKG1fdGFyZ2V0RWxlbWVudCkgewotICAgICAgICAg
ICAgICAgIHJlc2V0VGFyZ2V0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChhdHRyTmFtZS5tYXRjaGVzKFhMaW5rTmFt
ZXM6OmhyZWZBdHRyKSkgewotICAgICAgICAgICAgLy8gdGFyZ2V0RWxlbWVudCBpcyByZXNvbHZl
ZCBsYXppbHkgYnV0IHRhcmdldEVsZW1lbnQoKSB3aWxsIGhhbmRsZSBjYWxsaW5nIHRhcmdldEVs
ZW1lbnRXaWxsQ2hhbmdlKCkuCi0gICAgICAgICAgICBpZiAoU1ZHRWxlbWVudCogdGFyZ2V0RWxl
bWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgp
LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlbW92ZUFsbEFuaW1hdGlvbkVsZW1lbnRzRnJvbVRh
cmdldCh0YXJnZXRFbGVtZW50KTsKKyAgICAgICAgZWxzZSBpZiAoYXR0ck5hbWUubWF0Y2hlcyhY
TGlua05hbWVzOjpocmVmQXR0cikpIHsKKyAgICAgICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6
SW52YWxpZGF0aW9uR3VhcmQgaW52YWxpZGF0aW9uR3VhcmQodGhpcyk7CisgICAgICAgICAgICBi
dWlsZFBlbmRpbmdSZXNvdXJjZSgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01NjIsNTcgKzU5
NCwzMCBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpzZXRBdHRyaWJ1dGVOYW1lKGNvCiAgICAgICAg
ICAgICBtX3RpbWVDb250YWluZXItPnNjaGVkdWxlKHRoaXMsIG1fdGFyZ2V0RWxlbWVudCwgbV9h
dHRyaWJ1dGVOYW1lKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9hdHRyaWJ1dGVOYW1lID0gYXR0
cmlidXRlTmFtZTsKLX0KIAotU1ZHRWxlbWVudCogU1ZHU01JTEVsZW1lbnQ6OnRhcmdldEVsZW1l
bnQoUmVzb2x2ZVRhcmdldCByZXNvbHZlVGFyZ2V0KQoteworICAgIC8vIE9ubHkgY2xlYXIgdGhl
IGFuaW1hdGVkIHR5cGUsIGlmIHdlIGhhZCBhIHRhcmdldCBiZWZvcmUuCiAgICAgaWYgKG1fdGFy
Z2V0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG1fdGFyZ2V0RWxlbWVudDsKLQotICAgIGlmICgh
aW5Eb2N1bWVudCgpIHx8IHJlc29sdmVUYXJnZXQgPT0gRG9Ob3RSZXNvbHZlTmV3VGFyZ2V0KQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIFN0cmluZyBocmVmID0gZ2V0QXR0cmlidXRlKFhMaW5r
TmFtZXM6OmhyZWZBdHRyKTsKLSAgICBDb250YWluZXJOb2RlKiB0YXJnZXQgPSBocmVmLmlzRW1w
dHkoKSA/IHBhcmVudE5vZGUoKSA6IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21J
UklTdHJpbmcoaHJlZiwgZG9jdW1lbnQoKSk7Ci0gICAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC0+
aXNTVkdFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU1ZHRWxlbWVudCogdGFy
Z2V0RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPih0YXJnZXQpOwotICAgIHRhcmdl
dEVsZW1lbnRXaWxsQ2hhbmdlKG1fdGFyZ2V0RWxlbWVudCwgdGFyZ2V0RWxlbWVudCk7Ci0gICAg
bV90YXJnZXRFbGVtZW50ID0gdGFyZ2V0RWxlbWVudDsKLSAgICBkb2N1bWVudCgpLT5hY2Nlc3NT
VkdFeHRlbnNpb25zKCktPmFkZEFuaW1hdGlvbkVsZW1lbnRUb1RhcmdldCh0aGlzLCBtX3Rhcmdl
dEVsZW1lbnQpOwotICAgIHJldHVybiBtX3RhcmdldEVsZW1lbnQ7CisgICAgICAgIGNsZWFyQW5p
bWF0ZWRUeXBlKG1fdGFyZ2V0RWxlbWVudCk7CiB9CiAKLXZvaWQgU1ZHU01JTEVsZW1lbnQ6OnRh
cmdldEVsZW1lbnRXaWxsQ2hhbmdlKFNWR0VsZW1lbnQqIGN1cnJlbnRUYXJnZXQsIFNWR0VsZW1l
bnQqIG5ld1RhcmdldCkKK3ZvaWQgU1ZHU01JTEVsZW1lbnQ6OnNldFRhcmdldEVsZW1lbnQoU1ZH
RWxlbWVudCogdGFyZ2V0KQogewogICAgIGlmIChtX3RpbWVDb250YWluZXIgJiYgaGFzVmFsaWRB
dHRyaWJ1dGVOYW1lKCkpIHsKLSAgICAgICAgaWYgKGN1cnJlbnRUYXJnZXQpCi0gICAgICAgICAg
ICBtX3RpbWVDb250YWluZXItPnVuc2NoZWR1bGUodGhpcywgY3VycmVudFRhcmdldCwgbV9hdHRy
aWJ1dGVOYW1lKTsKLSAgICAgICAgaWYgKG5ld1RhcmdldCkKLSAgICAgICAgICAgIG1fdGltZUNv
bnRhaW5lci0+c2NoZWR1bGUodGhpcywgbmV3VGFyZ2V0LCBtX2F0dHJpYnV0ZU5hbWUpOworICAg
ICAgICBpZiAobV90YXJnZXRFbGVtZW50KQorICAgICAgICAgICAgbV90aW1lQ29udGFpbmVyLT51
bnNjaGVkdWxlKHRoaXMsIG1fdGFyZ2V0RWxlbWVudCwgbV9hdHRyaWJ1dGVOYW1lKTsKKyAgICAg
ICAgaWYgKHRhcmdldCkKKyAgICAgICAgICAgIG1fdGltZUNvbnRhaW5lci0+c2NoZWR1bGUodGhp
cywgdGFyZ2V0LCBtX2F0dHJpYnV0ZU5hbWUpOwogICAgIH0KIAogICAgIC8vIE9ubHkgY2xlYXIg
dGhlIGFuaW1hdGVkIHR5cGUsIGlmIHdlIGhhZCBhIHRhcmdldCBiZWZvcmUuCi0gICAgaWYgKGN1
cnJlbnRUYXJnZXQpCi0gICAgICAgIGNsZWFyQW5pbWF0ZWRUeXBlKGN1cnJlbnRUYXJnZXQpOwor
ICAgIGlmIChtX3RhcmdldEVsZW1lbnQpCisgICAgICAgIGNsZWFyQW5pbWF0ZWRUeXBlKG1fdGFy
Z2V0RWxlbWVudCk7CiAKICAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIHN0YXRlIGlzIG5vdCBJbmFj
dGl2ZSwgYWx3YXlzIHJlc2V0IHRvIGEgY2xlYXIgc3RhdGUgYmVmb3JlIGxlYXZpbmcgdGhlIG9s
ZCB0YXJnZXQgZWxlbWVudC4KICAgICBpZiAobV9hY3RpdmVTdGF0ZSAhPSBJbmFjdGl2ZSkKICAg
ICAgICAgZW5kZWRBY3RpdmVJbnRlcnZhbCgpOwotfQotCi12b2lkIFNWR1NNSUxFbGVtZW50Ojpy
ZXNldFRhcmdldEVsZW1lbnQoUmVzb2x2ZVRhcmdldCByZXNvbHZlVGFyZ2V0KQotewotICAgIGRv
Y3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVtb3ZlQW5pbWF0aW9uRWxlbWVudEZy
b21UYXJnZXQodGhpcywgbV90YXJnZXRFbGVtZW50KTsKLSAgICB0YXJnZXRFbGVtZW50V2lsbENo
YW5nZShtX3RhcmdldEVsZW1lbnQsIDApOwotICAgIG1fdGFyZ2V0RWxlbWVudCA9IDA7Ci0KLSAg
ICAvLyBJbW1lZGlhdGVseSByZXNvbHZlIHRoZSBuZXcgdGFyZ2V0RWxlbWVudCAoYW5kIGNhbGwg
dGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UgaWYgbmVlZGVkKSBpbnN0ZWFkIG9mIGRvaW5nIGl0IGxh
emlseS4KLSAgICBpZiAocmVzb2x2ZVRhcmdldCA9PSBSZXNvbHZlTmV3VGFyZ2V0KQotICAgICAg
ICB0YXJnZXRFbGVtZW50KCk7CiAKLSAgICBhbmltYXRpb25BdHRyaWJ1dGVDaGFuZ2VkKCk7Cisg
ICAgbV90YXJnZXRFbGVtZW50ID0gdGFyZ2V0OwogfQogCiBTTUlMVGltZSBTVkdTTUlMRWxlbWVu
dDo6ZWxhcHNlZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlv
bi9TVkdTTUlMRWxlbWVudC5oCShyZXZpc2lvbiAxMzY4NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMz
LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVtIFJlc29sdmVUYXJnZXQgeyBEb05v
dFJlc29sdmVOZXdUYXJnZXQsIFJlc29sdmVOZXdUYXJnZXQgfTsKLQogY2xhc3MgQ29uZGl0aW9u
RXZlbnRMaXN0ZW5lcjsKIGNsYXNzIFNNSUxUaW1lQ29udGFpbmVyOwogCkBAIC01OCw4ICs1Niw3
IEBAIHB1YmxpYzoKIAogICAgIFNNSUxUaW1lQ29udGFpbmVyKiB0aW1lQ29udGFpbmVyKCkgY29u
c3QgeyByZXR1cm4gbV90aW1lQ29udGFpbmVyLmdldCgpOyB9CiAKLSAgICBTVkdFbGVtZW50KiB0
YXJnZXRFbGVtZW50KFJlc29sdmVUYXJnZXQgPSBSZXNvbHZlTmV3VGFyZ2V0KTsKLSAgICB2b2lk
IHJlc2V0VGFyZ2V0RWxlbWVudChSZXNvbHZlVGFyZ2V0ID0gUmVzb2x2ZU5ld1RhcmdldCk7Cisg
ICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0RWxl
bWVudDsgfQogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUoKSBjb25zdCB7
IHJldHVybiBtX2F0dHJpYnV0ZU5hbWU7IH0KIAogICAgIHZvaWQgYmVnaW5CeUxpbmtBY3RpdmF0
aW9uKCk7CkBAIC0xMjAsMTAgKzExNywxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRJbmFj
dGl2ZSgpIHsgbV9hY3RpdmVTdGF0ZSA9IEluYWN0aXZlOyB9CiAKICAgICAvLyBTdWItY2xhc3Nl
cyBtYXkgbmVlZCB0byB0YWtlIGFjdGlvbiB3aGVuIHRoZSB0YXJnZXQgaXMgY2hhbmdlZC4KLSAg
ICB2aXJ0dWFsIHZvaWQgdGFyZ2V0RWxlbWVudFdpbGxDaGFuZ2UoU1ZHRWxlbWVudCogY3VycmVu
dFRhcmdldCwgU1ZHRWxlbWVudCogbmV3VGFyZ2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGFy
Z2V0RWxlbWVudChTVkdFbGVtZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIHNldEF0dHJpYnV0ZU5h
bWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCiBwcml2YXRlOgorICAgIHZvaWQgYnVpbGRQZW5k
aW5nUmVzb3VyY2UoKTsKKyAgICB2b2lkIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7CisKICAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnRlZEFjdGl2ZUludGVydmFsKCkgPSAwOwogICAgIHZvaWQgZW5k
ZWRBY3RpdmVJbnRlcnZhbCgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBbmltYXRpb24oZmxv
YXQgcGVyY2VudCwgdW5zaWduZWQgcmVwZWF0LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVu
dCkgPSAwOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTM2ODQ3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzEwMTItMTItMDYgIFBoaWxpcCBS
b2dlcnMgIDxwZHJAZ29vZ2xlLmNvbT4KKworICAgICAgICBVbmlmeSBTVkcncyBhbmltYXRpb24g
YW5kIHRhcmdldCB0cmFja2luZyBzeXN0ZW1zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNjU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9zdmctYW5pbWF0aW9uLW9yZGVy
LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL3N2Zy1hbmlt
YXRpb24tb3JkZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9zdmctcGVuZGlu
Zy10d2ljZS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3N2Zy1w
ZW5kaW5nLXR3aWNlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTEyLTA2ICBBbGV4aXMgTWVuYXJkICA8
YWxleGlzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW01hY10gVW5yZXZpZXdlZCBnYXJkZW5pbmcg
YWZ0ZXIgcjEzNjQxNS4KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3N2Zy1hbmlt
YXRpb24tb3JkZXItZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcv
YW5pbWF0aW9ucy9zdmctYW5pbWF0aW9uLW9yZGVyLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zdmctYW5pbWF0aW9uLW9yZGVyLWV4cGVj
dGVkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8
aHRtbD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj5UZXN0IHRoYXQgdGhlIG9yZGVyIG9m
IGVsZW1lbnRzIGRvZXMgbm90IGFmZmVjdCBhbmltYXRpb25zLjwvcD4KKzxzdmcgaWQ9InN2ZyIg
d2lkdGg9IjMwMCIgaGVpZ2h0PSIzMDAiPgorICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAw
IiBoZWlnaHQ9IjEwMCIgZmlsbD0iZ3JlZW4iLz4KKzwvc3ZnPgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc3ZnLWFuaW1hdGlvbi1vcmRlci5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3N2Zy1hbmltYXRpb24t
b3JkZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3N2
Zy1hbmltYXRpb24tb3JkZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBydW5UZXN0KCkgeworICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisK
KyAgLy8gRGVmZXIgdG8gYWxsb3cgYW5pbWF0aW9ucyB0byBydW4uCisgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7CisgIH0sIDApOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRl
c3QoKSI+Cis8cCBpZD0iZGVzY3JpcHRpb24iPlRlc3QgdGhhdCB0aGUgb3JkZXIgb2YgZWxlbWVu
dHMgZG9lcyBub3QgYWZmZWN0IGFuaW1hdGlvbnMuPC9wPgorPHN2ZyBpZD0ic3ZnIiB3aWR0aD0i
MzAwIiBoZWlnaHQ9IjMwMCI+CisgIDwhLS0gVGhpcyByZWQgc3F1YXJlIHNob3VsZCBiZSBjb3Zl
cmVkIHVwIGlmIHdlIHBhc3MuIC0tPgorICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBo
ZWlnaHQ9IjEwMCIgZmlsbD0icmVkIi8+CisKKyAgPCEtLSBBbmltYXRlIG9uZSBncmVlbiByZWN0
YW5nbGUgb3ZlciB0aGUgdG9wIGhhbGYgb2YgdGhlIHJlZCBzcXVhcmUuIC0tPgorICA8cmVjdCBp
ZD0icmVjdDEiICB4PSItMTAwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUwIiBmaWxsPSJn
cmVlbiIgLz4KKyAgPHNldCBhdHRyaWJ1dGVOYW1lPSJ4IiB4bGluazpocmVmPSIjcmVjdDEiIHRv
PSIwIi8+CisKKyAgPCEtLSBBbmltYXRlIGEgc2Vjb25kIGdyZWVuIHJlY3RhbmdsZSBvdmVyIHRo
ZSBib3R0b20gaGFsZiBvZiB0aGUgcmVkIHNxdWFyZS4gLS0+CisgIDxzZXQgYXR0cmlidXRlTmFt
ZT0ieCIgeGxpbms6aHJlZj0iI3JlY3QyIiB0bz0iMCIvPgorICA8cmVjdCBpZD0icmVjdDIiICB4
PSItMTAwIiB5PSI1MCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI1MCIgZmlsbD0iZ3JlZW4iIC8+Cis8
L3N2Zz4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0b20vc3Zn
LXBlbmRpbmctdHdpY2UtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9z
dmcvY3VzdG9tL3N2Zy1wZW5kaW5nLXR3aWNlLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Zy1wZW5kaW5nLXR3aWNlLWV4cGVjdGVkLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj5UZXN0IHRoYXQgYW4gYW5pbWF0aW9uIHdpdGggYSBw
ZW5kaW5nIHJlc291cmNlIGNhbiBiZSBjaGFuZ2VkIHRvIGEgc2Vjb25kIHBlbmRpbmcgcmVzb3Vy
Y2UsIHRoZW4gcmVzb2x2ZWQgY29ycmVjdGx5LjwvcD4KKzxzdmcgaWQ9InN2ZyIgd2lkdGg9IjMw
MCIgaGVpZ2h0PSIzMDAiPgorICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9
IjEwMCIgZmlsbD0iZ3JlZW4iLz4KKzwvc3ZnPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmctcGVuZGluZy10d2ljZS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3N2Zy9jdXN0b20vc3ZnLXBlbmRpbmctdHdpY2UuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL3N2Zy9jdXN0b20vc3ZnLXBlbmRpbmctdHdpY2UuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzNCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxzY3Jp
cHQ+CitmdW5jdGlvbiBydW5UZXN0KCkgeworICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisKKyAgLy8gVGhlIGFuaW1hdGlvbiBpcyBhbHJl
YWR5IGluIGEgcGVuZGluZyBzdGF0ZSwgY2hhbmdlIGl0IHRvIGFub3RoZXIKKyAgLy8gcGVuZGlu
ZyBpZCAobmV3SWQpLCB0aGVuIG1ha2UgdGhlIG5ldyBpZCB2YWxpZCBhbmQgY2hlY2sgdGhhdAor
ICAvLyB0aGUgYW5pbWF0aW9uIHJ1bnMuCisgIHZhciByZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3JlY3QnKTsKKyAgdmFyIGFuaW1hdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
c2V0Jyk7CisgIGFuaW1hdGUuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkv
eGxpbmsiLCAiaHJlZiIsICIjbmV3SWQiKTsKKyAgcmVjdC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ25l
d0lkJyk7CisKKyAgLy8gRGVmZXIgdG8gYWxsb3cgYW5pbWF0aW9ucyB0byBydW4uCisgIHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7CisgIH0sIDApOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxv
YWQ9InJ1blRlc3QoKSI+Cis8cCBpZD0iZGVzY3JpcHRpb24iPlRlc3QgdGhhdCBhbiBhbmltYXRp
b24gd2l0aCBhIHBlbmRpbmcgcmVzb3VyY2UgY2FuIGJlIGNoYW5nZWQgdG8gYSBzZWNvbmQgcGVu
ZGluZyByZXNvdXJjZSwgdGhlbiByZXNvbHZlZCBjb3JyZWN0bHkuPC9wPgorPHN2ZyBpZD0ic3Zn
IiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCI+CisgIDwhLS0gVGhpcyByZWQgc3F1YXJlIHNob3Vs
ZCBiZSBjb3ZlcmVkIHVwIGlmIHdlIHBhc3MuIC0tPgorICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0
aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0icmVkIi8+CisKKyAgPCEtLSBUaGlzIGdyZWVuIHNx
dWFyZSBzaG91bGQgZW5kIHVwIGNvdmVyaW5nIHRoZSByZWQgc3F1YXJlIGlmIHdlIHBhc3MuIC0t
PgorICA8cmVjdCBpZD0icmVjdCIgeD0iLTEwMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIx
MDAiIGZpbGw9ImdyZWVuIi8+CisgIDxzZXQgaWQ9InNldCIgeGxpbms6aHJlZj0iI2RvZXNOb3RF
eGlzdCIgYXR0cmlidXRlTmFtZT0ieCIgdG89IjAiIC8+Cis8L3N2Zz4KKzwvYm9keT4KKzwvaHRt
bD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>