<?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>10827</bug_id>
          
          <creation_ts>2006-09-12 15:51:24 -0700</creation_ts>
          <short_desc>SVGPathElement should only build SVGPathSeg* list on demand</short_desc>
          <delta_ts>2010-11-17 06:29:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>49580</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>12047</blocked>
    
    <blocked>15412</blocked>
    
    <blocked>19741</blocked>
    
    <blocked>26487</blocked>
    
    <blocked>30219</blocked>
    
    <blocked>43388</blocked>
    
    <blocked>43392</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Dirk Schulze">krit</assigned_to>
          <cc>jeffschiller</cc>
    
    <cc>krit</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>55323</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-12 15:51:24 -0700</bug_when>
    <thetext>SVGPathElement should only build SVGPathSeg* tree on demand

Right now SVGPathElement, builds the SVGPathSeg tree while parsing.  Then using the toPathData() method, it builds a WebCore::Path object from that tree (which is used by the renderer).

The SVGPathSeg intermediaries are completely unnecessary however.  They&apos;re only needed for the DOM interfaces (and possibly for animation).

I would propose that instead the String representation of the path (has held by the attributes dictionary) is the authoritative version, and that toPathData() build the WebCore::path directly from the string.  The SVGPathSeg list could be later built from the WebCore::path or the String as needed.  the WebCore::Path need not be built until the SVGPathElement is actually attached (a renderer is created).  And the SVGPathSeg list need not be built until the relevant DOM properties are accessed.

This would result in a very large speed increase for SVG rendering, as it would get rid of thousands of mallocs associated with building the SVGPathSeg list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>40960</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-12-21 03:53:21 -0800</bug_when>
    <thetext>We spend well over 15% of our time while parsing large SVGs in malloc/free.  I expect much of that is caused by this one bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133008</commentid>
    <comment_count>2</comment_count>
      <attachid>33051</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2009-07-19 13:15:52 -0700</bug_when>
    <thetext>Created attachment 33051
First attempt

This patch actually touches multiple bugs, but mainly it allows normalized pathseg lists and tries to build them lazily. I already added some tests
to test synchronization of both lists, which seems to work ok. The patch is still inefficient in some places but I thought it may be good to show it
early for feedback. What needs to be tested more is things like:

var seg = path.pathSegList.getItem(1);
path.setElement(&apos;d&apos;, &apos;some other path data&apos;)

now what should seg be like?
Also:
var seglist = path.pathSegList;
path.setElement(&apos;d&apos;, &apos;some other path data&apos;)

is seglist then the same as path.pathSegList?
It may be that the patch needs to be changed anyway to match the behaviour of such cases.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152309</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-10-05 08:57:05 -0700</bug_when>
    <thetext>Rob, this patch looks very interessting - do you plan to finish this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235774</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-06-09 07:27:34 -0700</bug_when>
    <thetext>I would also like to see progress on this bug. Rob, do you plan to update this patch to trunk? I like the general rebuildPathInfo() methot, but why don&apos;t you hand the content of the dAttr over to it? I guess m_ignoreAttributeChanges is intended as an interupt. Can you give some further comments on it?
What is missing on the normalizedPathSegList-side?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236194</commentid>
    <comment_count>5</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2010-06-10 00:17:19 -0700</bug_when>
    <thetext>Hello Dirk,

(In reply to comment #4)
&gt; I would also like to see progress on this bug. Rob, do you plan to update this patch to trunk? I like the general rebuildPathInfo() methot, but why don&apos;t you hand the content of the dAttr over to it? I guess m_ignoreAttributeChanges is intended as an interupt. Can you give some further comments on it?
&gt; What is missing on the normalizedPathSegList-side?

Unfortunately I am more time pressed this month as usual, so I wont touch this patch for a while. If you want I can comment on the patch this weekend (I need to reinterpret it as well since I didnt look at it for over a year). If you want to work on it, no problem :)
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236199</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-06-10 00:32:10 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Hello Dirk,
&gt; 
&gt; (In reply to comment #4)
&gt; &gt; I would also like to see progress on this bug. Rob, do you plan to update this patch to trunk? I like the general rebuildPathInfo() methot, but why don&apos;t you hand the content of the dAttr over to it? I guess m_ignoreAttributeChanges is intended as an interupt. Can you give some further comments on it?
&gt; &gt; What is missing on the normalizedPathSegList-side?
&gt; 
&gt; Unfortunately I am more time pressed this month as usual, so I wont touch this patch for a while. If you want I can comment on the patch this weekend (I need to reinterpret it as well since I didnt look at it for over a year). If you want to work on it, no problem :)
&gt; Cheers,
&gt; 
&gt; Rob.

Hi Rob, would be realy great if you can add further comments. Thank you for taking the time. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237584</commentid>
    <comment_count>7</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2010-06-13 11:04:43 -0700</bug_when>
    <thetext>My answers below...

(In reply to comment #4)
 I like the general rebuildPathInfo() methot, but why don&apos;t you hand the content of the dAttr over to it?

That is indeed at least in once case more efficient, in the other case the attribute value still must
be fetched. But indeed it is more efficient overall.

 I guess m_ignoreAttributeChanges is intended as an interupt. Can you give some further comments on it?

In the patch it is needed since otherwise svgAttributeChanged -&gt; rebuildPathInfo -&gt; svgAttributeChanged ec. recursion. Seeing that SVGPolyElement removed a similar construction,
it is possible things are handled differently right now and it is not needed anymore.

&gt; What is missing on the normalizedPathSegList-side?

Nothing I think, but I posed some possible problematic cases or cases where I didnt know what to do above.

I think what needs to be done with the patch is, first, to fix it against the bitrot, ie. make it compile and work as before. Then rebuildPathInfo could be changed as discussed. Then it could be tried to remove m_ignoreAttributeChanges. Finally the problematic cases should be analyzed/fixed.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239253</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-06-16 23:29:15 -0700</bug_when>
    <thetext>I updated the patch of Rob to work on trunk. The patch does not fix all bugs on the block list and if I get it right, changing the d-Attribute by DOM is also not correctly handled yet. I&apos;ll work on the remaining issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239437</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-06-17 09:55:56 -0700</bug_when>
    <thetext>We might fix bug 27279 first before fixing this bug for speed reasons. I think we shouldn&apos;t create the pathSegList&apos;s for every path. It&apos;s maybe better, to parse the string in dAttr and create a Path and somthing like a vector for later pathSegList creation simultaneously. This way we don&apos;t have a performance regression for the normal painting without accessing the SVGDOM (the regular case).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277074</commentid>
    <comment_count>10</comment_count>
      <attachid>67164</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-10 01:34:15 -0700</bug_when>
    <thetext>Created attachment 67164
First proposal, not for landing

This is the first proposal. Use byteStream as the basic storage. dAttr and bot segLists are build on demand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277124</commentid>
    <comment_count>11</comment_count>
      <attachid>67164</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-09-10 05:00:02 -0700</bug_when>
    <thetext>Comment on attachment 67164
First proposal, not for landing

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

&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:332
&gt; +    # SVGPathSegments and SVGPathSegmentLists don&apos;t need a context parameter. SVGPathElement manages changes.
SVGPathSeg and SVGPathSegList - sounds less confusing.

&gt; WebCore/svg/SVGAnimatedPathData.h:36
&gt;          virtual SVGPathSegList* animatedPathSegList() const = 0;
For consistency, I&apos;d also deconstify these methods, even if they are not implemented so far.

&gt; WebCore/svg/SVGPathElement.cpp:52
&gt; +    m_pathByteStream = SVGPathByteStream::create();
Move this to the initialization list.

&gt; WebCore/svg/SVGPathElement.cpp:179
&gt; +        if (m_isUpdatingPathData)
I&apos;d move it to the top of parseMappedAttribute.

&gt; WebCore/svg/SVGPathElement.cpp:210
&gt; +        RefPtr&lt;Attr&gt; attr = getAttributeNode(SVGNames::dAttr.localName());
Why don&apos;t you just use getAttribute(SVGNames::dAttr) here?

&gt; WebCore/svg/SVGPathElement.cpp:212
&gt; +        updatePathSegListFromByteStream();
Isn&apos;t it possible to delay the pathSegList update, until someone access us? I guess not, as the seg lists could be stored somewhere in a JS var.

&gt; WebCore/svg/SVGPathElement.cpp:213
&gt; +        updateNormalizedPathSegListFromByteStream();
Ditto. But I guess you have no option, but doing a sync update here, right?

&gt; WebCore/svg/SVGPathElement.cpp:244
&gt; +        RefPtr&lt;Attr&gt; attr = getAttributeNode(SVGNames::dAttr.localName());
This value is not used at all.

&gt; WebCore/svg/SVGPathElement.cpp:262
&gt; +{
ASSERT(m_pathByteStream) and ASSERT(pathSegList) here.

&gt; WebCore/svg/SVGPathElement.cpp:266
&gt; +    if (pathSegList-&gt;segListType() == unalteredSegList) {
Is the segListType() concept really needed, if you could just directly compare wheter pathSegList == m_pathSegList, or wheter pathSegList == m_normalizedPathSegList?

&gt; WebCore/svg/SVGPathElement.cpp:288
&gt; +    m_pathSegList-&gt;clear(ec);
You should ASSERT(!ec) afterwards.

&gt; WebCore/svg/SVGPathElement.cpp:299
&gt; +    m_normalizedPathSegList-&gt;clear(ec);
You should ASSERT(!ec) afterwards.

&gt; WebCore/svg/SVGPathElement.cpp:308
&gt; +        ASSERT(m_pathSegList);
This assertion is bogus, if you just created the list it&apos;s not needed.

&gt; WebCore/svg/SVGPathElement.cpp:321
&gt; +        ASSERT(m_normalizedPathSegList);
The assertion is bogus, if you just created the list it&apos;s not needed.

&gt; WebCore/svg/SVGPathElement.h:115
&gt;          mutable RefPtr&lt;SVGPathSegList&gt; m_pathSegList;
&gt; +        mutable RefPtr&lt;SVGPathSegList&gt; m_normalizedPathSegList;
Why are those still mutable? You&apos;ve removed the const from pathSegList/normalizedPathSegList, so it&apos;s superfluous now.

&gt; WebCore/svg/SVGPathParserFactory.cpp:90
&gt; +static SVGPathTraversalStateBuilder* globalSVGPathTraversalStateBuilder(PathTraversalState* traversalState, float length)
Hm, this method is already existant, just with a &quot;PathTraversalState&amp; traversalState&quot; parameter. Just reuse it and remove this one.

&gt; WebCore/svg/SVGPathParserFactory.cpp:267
&gt; +    OwnPtr&lt;SVGPathByteStream&gt; stream = SVGPathByteStream::create();
You can directly write &quot;result = SVGPathByteStream::create()&quot; here. No need to store in a local variable first, and then use &quot;result = stream.release()&quot; some lines below.
This also affects buildSVGPathByteStreamFromString / buildAnimatedSVGPathByteStream. Can you fix those as well?

&gt; WebCore/svg/SVGPathParserFactory.cpp:316
&gt; +    if (stream-&gt;isEmpty())
ASSERT(stream) before using it.

&gt; WebCore/svg/SVGPathParserFactory.h:52
&gt;      bool getSVGPathSegAtLengthFromSVGPathSegList(SVGPathSegList*, float, unsigned long&amp;);
This seems redundant now, nobody uses it, just remove it.

&gt; WebCore/svg/SVGPathSeg.h:93
&gt; +    SVGPathSegList* m_pathSegList;
You need to initialize this variable in the constructor.

&gt; WebCore/svg/SVGPathSegArc.h:48
&gt; +    	}
Wrong indentation.

&gt; WebCore/svg/SVGPathSegArc.h:55
&gt; +    	}
Wrong indentation.

&gt; WebCore/svg/SVGPathSegArc.h:60
&gt; +       		m_r1 = r1;
Wrong indentation.

&gt; WebCore/svg/SVGPathSegArc.h:69
&gt; +    	}
Wrong indentation.

&gt; WebCore/svg/SVGPathSegArc.h:76
&gt; +    	}
Wrong indentation.

&gt; WebCore/svg/SVGPathSegArc.h:83
&gt; +    	}
Wrong indentation.

&gt; WebCore/svg/SVGPathSegArc.h:90
&gt; +    	}
Wrong indentation.

&gt; WebCore/svg/SVGPathSegCurvetoCubic.h:39
&gt; +    	}
Wrong indentation.

&gt; WebCore/svg/SVGPathSegCurvetoCubic.h:46
&gt; +    	}
Wrong indentation.

&gt; WebCore/svg/SVGPathSegCurvetoCubic.h:53
&gt; +    	}
Wrong indentation.

&gt; WebCore/svg/SVGPathSegCurvetoCubic.h:60
&gt; +    	}
Wrong indentation.

&gt; WebCore/svg/SVGPathSegCurvetoCubic.h:67
&gt; +    	}
Wrong indentation.

&gt; WebCore/svg/SVGPathSegCurvetoCubic.h:74
&gt; +    	}
Wrong indentation.

&gt; WebCore/svg/SVGPathSegCurvetoCubicSmooth.h:45
&gt; +    	}
Wrong indentation.

&gt; WebCore/svg/SVGPathSegCurvetoCubicSmooth.h:52
&gt; +    	}
Wrong indentation.... everywhere in al SVGPathSeg* files, I&apos;m stopping here.

&gt; WebCore/svg/SVGPathSegList.h:32
&gt; +    unalteredSegList,
&gt; +    normalizedSegList
These names are awful :-)
&quot;UnalteredSegmentList&quot;
&quot;NormalizedSegmentList&quot;
sounds better.

Overall, a wonderful patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310239</commentid>
    <comment_count>12</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-11-17 06:29:08 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 49580 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33051</attachid>
            <date>2009-07-19 13:15:52 -0700</date>
            <delta_ts>2010-06-11 15:36:02 -0700</delta_ts>
            <desc>First attempt</desc>
            <filename>10827-3.diff</filename>
            <type>text/plain</type>
            <size>20986</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3NmQzNDg0Li45Y2I2NGFmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMDct
MTkgIFJvYiBCdWlzICA8cndsYnVpc0BnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgdGVzdHMgZm9yOgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MjcKKyAgICAgICAgU1ZHUGF0aEVsZW1l
bnQgc2hvdWxkIG9ubHkgYnVpbGQgU1ZHUGF0aFNlZyogbGlzdCBvbiBkZW1hbmQKKworICAgICAg
ICAqIHN2Zy9jdXN0b20vanMtdXBkYXRlLW5vcm1hbGl6ZWQtcGF0aHNlZ3MtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL2pzLXVwZGF0ZS1ub3JtYWxpemVkLXBhdGhz
ZWdzLnN2ZzogQWRkZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9qcy11cGRhdGUtcGF0aHNlZ3Mt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL2pzLXVwZGF0ZS1wYXRo
c2Vncy5zdmc6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jdXN0b20vcGF0aC1ub3JtYWxpemluZy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jdXN0b20vcGF0aC1ub3JtYWxpemlu
Zy5zdmc6IEFkZGVkLgorCiAyMDA5LTA3LTE5ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25A
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL2pzLXVwZGF0ZS1ub3JtYWxpemVkLXBhdGhzZWdz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vanMtdXBkYXRlLW5vcm1hbGl6
ZWQtcGF0aHNlZ3MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjY3NzJlMjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL2pz
LXVwZGF0ZS1ub3JtYWxpemVkLXBhdGhzZWdzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAK
K1BBU1M6IE0gMCAwIGwgMTAwIDAKK1BBU1M6IE0gMCAwIEwgMTAwIDEwMAorUEFTUzogTSAwIDAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vanMtdXBkYXRlLW5vcm1hbGl6ZWQt
cGF0aHNlZ3Muc3ZnIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9qcy11cGRhdGUtbm9ybWFsaXpl
ZC1wYXRoc2Vncy5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2NzVm
YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vanMtdXBkYXRlLW5v
cm1hbGl6ZWQtcGF0aHNlZ3Muc3ZnCkBAIC0wLDAgKzEsNjUgQEAKKzxzdmcgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KKyAgICA8ZyBpZD0nbG9nJyAvPgorICAgIDxzY3JpcHQ+
CisgICAgPCFbQ0RBVEFbCisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAg
ICAgdmFyIHN2Z05TID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjsKKyAgICAgICAgdmFy
IHBhdGhFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCAncGF0aCcpOwor
IAorICAgICAgICB2YXIgbG9nT2Zmc2V0ID0gMjA7CisgICAgICAgIGZ1bmN0aW9uIHJlc3VsdChk
aWRQYXNzLCBzdHJpbmcpIHsKKyAgICAgICAgICB2YXIgbmV3VGV4dCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnROUyhzdmdOUywgInRleHQiKTsKKyAgICAgICAgICBuZXdUZXh0LnNldEF0dHJpYnV0
ZSgieCIsIDEwKTsKKyAgICAgICAgICBuZXdUZXh0LnNldEF0dHJpYnV0ZSgieSIsIGxvZ09mZnNl
dCk7CisgICAgICAgICAgbG9nT2Zmc2V0ICs9IDIwOworICAgICAgICAgIG5ld1RleHQudGV4dENv
bnRlbnQgPSBzdHJpbmc7CisgICAgICAgICAgdmFyIG5ld1RzcGFuID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudE5TKHN2Z05TLCAidHNwYW4iKTsKKyAgICAgICAgICBpZiAoZGlkUGFzcykgeworICAg
ICAgICAgICAgbmV3VHNwYW4udGV4dENvbnRlbnQgPSAiUEFTUzogIjsKKyAgICAgICAgICAgIG5l
d1RzcGFuLnN0eWxlLmZpbGwgPSAiZ3JlZW4iOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBuZXdUc3Bhbi50ZXh0Q29udGVudCA9ICJGQUlMOiAiOworICAgICAgICAgICAgbmV3VHNw
YW4uc3R5bGUuZmlsbCA9ICJyZWQiOworICAgICAgICAgIH0KKyAgICAgICAgICBuZXdUZXh0Lmlu
c2VydEJlZm9yZShuZXdUc3BhbiwgbmV3VGV4dC5maXJzdENoaWxkKTsKKyAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJykuYXBwZW5kQ2hpbGQobmV3VGV4dCk7CisgICAgICAg
IH0KKyAgICAgICAgZnVuY3Rpb24gY2hlY2tQYXRoU2VncyhwYXRoLCBleHBlY3RlZFBhdGhTZWdz
KSB7CisgICAgICAgICAgICBjbnQgPSBwYXRoRWxlbWVudC5wYXRoU2VnTGlzdC5udW1iZXJPZkl0
ZW1zOworICAgICAgICAgICAgZm9yIChpID0gMDtpIDwgY250O2krKykgeworICAgICAgICAgICAg
ICAgIHZhciBzZWcgPSBwYXRoRWxlbWVudC5wYXRoU2VnTGlzdC5nZXRJdGVtKGkpOworICAgICAg
ICAgICAgICAgIGxldHRlciA9IHNlZy5wYXRoU2VnVHlwZUFzTGV0dGVyOworICAgICAgICAgICAg
ICAgIGlmIChsZXR0ZXIgIT0gZXhwZWN0ZWRQYXRoU2Vnc1tpXVswXSkgeworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQoZmFsc2UsICdwYXRoU2VnIHNob3VsZCBiZSAnICsgZXhwZWN0ZWRQYXRo
U2Vnc1tpXVswXSArICcsIGlzICcgKyBsZXR0ZXIpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzZWcueCAhPSBleHBl
Y3RlZFBhdGhTZWdzW2ldWzFdKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdChmYWxzZSwg
J3BhdGhTZWcgeCBzaG91bGQgYmUgJyArIGV4cGVjdGVkUGF0aFNlZ3NbaV1bMV0gKyAnLCBpcyAn
ICsgc2VnLngpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChzZWcueSAhPSBleHBlY3RlZFBhdGhTZWdzW2ldWzJdKSB7
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdChmYWxzZSwgJ3BhdGhTZWcgeSBzaG91bGQgYmUg
JyArIGV4cGVjdGVkUGF0aFNlZ3NbaV1bMl0gKyAnLCBpcyAnICsgc2VnLnkpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXN1bHQodHJ1ZSwgcGF0aCk7CisgICAgICAgIH0KKworICAgICAgICB2YXIg
cGF0aCA9ICdNIDAgMCBsIDEwMCAwJzsKKyAgICAgICAgcGF0aEVsZW1lbnQuc2V0QXR0cmlidXRl
KCdkJywgcGF0aCk7CisgICAgICAgIGNoZWNrUGF0aFNlZ3MocGF0aCwgW1snTScsMCwwXSxbJ2wn
LDEwMCwwXV0pOworICAgICAgICAvLyBjaGFuZ2Ugb25lIHNlZ21lbnQKKyAgICAgICAgdmFyIHNl
ZyA9IHBhdGhFbGVtZW50Lm5vcm1hbGl6ZWRQYXRoU2VnTGlzdC5nZXRJdGVtKDEpOworICAgICAg
ICBzZWcueSA9IDEwMDsKKyAgICAgICAgcGF0aCA9ICdNIDAgMCBMIDEwMCAxMDAnOworICAgICAg
ICBjaGVja1BhdGhTZWdzKHBhdGgsIFtbJ00nLDAsMF0sWydMJywxMDAsMTAwXV0pOworICAgICAg
ICAvLyByZW1vdmUgb25lIHNlZ21lbnQKKyAgICAgICAgcGF0aCA9ICdNIDAgMCc7CisgICAgICAg
IHBhdGhFbGVtZW50LnNldEF0dHJpYnV0ZSgnZCcsIHBhdGgpOworICAgICAgICBjaGVja1BhdGhT
ZWdzKHBhdGgsIFtbJ00nLDAsMF1dKTsKKyAgICBdXT4KKyAgICA8L3NjcmlwdD4KKzwvc3ZnPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9qcy11cGRhdGUtcGF0aHNlZ3MtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9qcy11cGRhdGUtcGF0aHNlZ3MtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhY2NlMGIKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL2pzLXVwZGF0ZS1wYXRoc2Vn
cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACitQQVNTOiBNIDAgMCBsIDEwMCAwCitQQVNT
OiBNIDAgMCBsIDEwMCAxMDAKK1BBU1M6IE0gMCAwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9z
dmcvY3VzdG9tL2pzLXVwZGF0ZS1wYXRoc2Vncy5zdmcgYi9MYXlvdXRUZXN0cy9zdmcvY3VzdG9t
L2pzLXVwZGF0ZS1wYXRoc2Vncy5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZmRhY2Y4NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vanMt
dXBkYXRlLXBhdGhzZWdzLnN2ZwpAQCAtMCwwICsxLDY1IEBACis8c3ZnIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3N2ZyI+CisgICAgPGcgaWQ9J2xvZycgLz4KKyAgICA8c2NyaXB0Pgor
ICAgIDwhW0NEQVRBWworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAg
IHZhciBzdmdOUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7CisgICAgICAgIHZhciBw
YXRoRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOUywgJ3BhdGgnKTsKKyAK
KyAgICAgICAgdmFyIGxvZ09mZnNldCA9IDIwOworICAgICAgICBmdW5jdGlvbiByZXN1bHQoZGlk
UGFzcywgc3RyaW5nKSB7CisgICAgICAgICAgdmFyIG5ld1RleHQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50TlMoc3ZnTlMsICJ0ZXh0Iik7CisgICAgICAgICAgbmV3VGV4dC5zZXRBdHRyaWJ1dGUo
IngiLCAxMCk7CisgICAgICAgICAgbmV3VGV4dC5zZXRBdHRyaWJ1dGUoInkiLCBsb2dPZmZzZXQp
OworICAgICAgICAgIGxvZ09mZnNldCArPSAyMDsKKyAgICAgICAgICBuZXdUZXh0LnRleHRDb250
ZW50ID0gc3RyaW5nOworICAgICAgICAgIHZhciBuZXdUc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnROUyhzdmdOUywgInRzcGFuIik7CisgICAgICAgICAgaWYgKGRpZFBhc3MpIHsKKyAgICAg
ICAgICAgIG5ld1RzcGFuLnRleHRDb250ZW50ID0gIlBBU1M6ICI7CisgICAgICAgICAgICBuZXdU
c3Bhbi5zdHlsZS5maWxsID0gImdyZWVuIjsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgbmV3VHNwYW4udGV4dENvbnRlbnQgPSAiRkFJTDogIjsKKyAgICAgICAgICAgIG5ld1RzcGFu
LnN0eWxlLmZpbGwgPSAicmVkIjsKKyAgICAgICAgICB9CisgICAgICAgICAgbmV3VGV4dC5pbnNl
cnRCZWZvcmUobmV3VHNwYW4sIG5ld1RleHQuZmlyc3RDaGlsZCk7CisgICAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZycpLmFwcGVuZENoaWxkKG5ld1RleHQpOworICAgICAgICB9
CisgICAgICAgIGZ1bmN0aW9uIGNoZWNrUGF0aFNlZ05vcm1hbGl6YXRpb24ocGF0aCwgZXhwZWN0
ZWRQYXRoU2VncykgeworICAgICAgICAgICAgY250ID0gcGF0aEVsZW1lbnQubm9ybWFsaXplZFBh
dGhTZWdMaXN0Lm51bWJlck9mSXRlbXM7CisgICAgICAgICAgICBmb3IgKGkgPSAwO2kgPCBjbnQ7
aSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHNlZyA9IHBhdGhFbGVtZW50Lm5vcm1hbGl6ZWRQ
YXRoU2VnTGlzdC5nZXRJdGVtKGkpOworICAgICAgICAgICAgICAgIGxldHRlciA9IHNlZy5wYXRo
U2VnVHlwZUFzTGV0dGVyOworICAgICAgICAgICAgICAgIGlmIChsZXR0ZXIgIT0gZXhwZWN0ZWRQ
YXRoU2Vnc1tpXVswXSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQoZmFsc2UsICdwYXRo
U2VnIHNob3VsZCBiZSAnICsgZXhwZWN0ZWRQYXRoU2Vnc1tpXVswXSArICcsIGlzICcgKyBsZXR0
ZXIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChzZWcueCAhPSBleHBlY3RlZFBhdGhTZWdzW2ldWzFdKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdChmYWxzZSwgJ3BhdGhTZWcgeCBzaG91bGQgYmUgJyArIGV4
cGVjdGVkUGF0aFNlZ3NbaV1bMV0gKyAnLCBpcyAnICsgc2VnLngpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzZWcu
eSAhPSBleHBlY3RlZFBhdGhTZWdzW2ldWzJdKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dChmYWxzZSwgJ3BhdGhTZWcgeSBzaG91bGQgYmUgJyArIGV4cGVjdGVkUGF0aFNlZ3NbaV1bMl0g
KyAnLCBpcyAnICsgc2VnLnkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXN1bHQodHJ1ZSwgcGF0
aCk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgcGF0aCA9ICdNIDAgMCBsIDEwMCAwJzsKKyAg
ICAgICAgcGF0aEVsZW1lbnQuc2V0QXR0cmlidXRlKCdkJywgcGF0aCk7CisgICAgICAgIGNoZWNr
UGF0aFNlZ05vcm1hbGl6YXRpb24ocGF0aCwgW1snTScsMCwwXSxbJ0wnLDEwMCwwXV0pOworICAg
ICAgICAvLyBjaGFuZ2Ugb25lIHNlZ21lbnQKKyAgICAgICAgdmFyIHNlZyA9IHBhdGhFbGVtZW50
LnBhdGhTZWdMaXN0LmdldEl0ZW0oMSk7CisgICAgICAgIHNlZy55ID0gMTAwOworICAgICAgICBw
YXRoID0gJ00gMCAwIGwgMTAwIDEwMCc7CisgICAgICAgIGNoZWNrUGF0aFNlZ05vcm1hbGl6YXRp
b24ocGF0aCwgW1snTScsMCwwXSxbJ0wnLDEwMCwxMDBdXSk7CisgICAgICAgIC8vIHJlbW92ZSBv
bmUgc2VnbWVudAorICAgICAgICBwYXRoID0gJ00gMCAwJzsKKyAgICAgICAgcGF0aEVsZW1lbnQu
c2V0QXR0cmlidXRlKCdkJywgcGF0aCk7CisgICAgICAgIGNoZWNrUGF0aFNlZ05vcm1hbGl6YXRp
b24ocGF0aCwgW1snTScsMCwwXV0pOworICAgIF1dPgorICAgIDwvc2NyaXB0PgorPC9zdmc+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3BhdGgtbm9ybWFsaXppbmctZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wYXRoLW5vcm1hbGl6aW5nLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTFmYTIwCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9wYXRoLW5vcm1hbGl6aW5nLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDIgQEAKK1BBU1M6IE0gMCAwIGwgMTAwIDAgWgorUEFTUzogTTEw
MCwxMDBROTAwLDUwMCAxMDAsOTAwegpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2N1c3Rv
bS9wYXRoLW5vcm1hbGl6aW5nLnN2ZyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcGF0aC1ub3Jt
YWxpemluZy5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiZGQxOQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9jdXN0b20vcGF0aC1ub3JtYWxpemlu
Zy5zdmcKQEAgLTAsMCArMSw1NyBAQAorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MC9zdmciPgorICAgIDxnIGlkPSdsb2cnIC8+CisgICAgPHNjcmlwdD4KKyAgICA8IVtDREFUQVsK
KyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgCisgICAgICAgIHZhciBz
dmdOUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7CisgICAgICAgIHZhciBwYXRoRWxl
bWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOUywgJ3BhdGgnKTsKKyAKKyAgICAg
ICAgdmFyIGxvZ09mZnNldCA9IDIwOworICAgICAgICBmdW5jdGlvbiByZXN1bHQoZGlkUGFzcywg
c3RyaW5nKSB7CisgICAgICAgICAgdmFyIG5ld1RleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
TlMoc3ZnTlMsICJ0ZXh0Iik7CisgICAgICAgICAgbmV3VGV4dC5zZXRBdHRyaWJ1dGUoIngiLCAx
MCk7CisgICAgICAgICAgbmV3VGV4dC5zZXRBdHRyaWJ1dGUoInkiLCBsb2dPZmZzZXQpOworICAg
ICAgICAgIGxvZ09mZnNldCArPSAyMDsKKyAgICAgICAgICBuZXdUZXh0LnRleHRDb250ZW50ID0g
c3RyaW5nOworICAgICAgICAgIHZhciBuZXdUc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnRO
UyhzdmdOUywgInRzcGFuIik7CisgICAgICAgICAgaWYgKGRpZFBhc3MpIHsKKyAgICAgICAgICAg
IG5ld1RzcGFuLnRleHRDb250ZW50ID0gIlBBU1M6ICI7CisgICAgICAgICAgICBuZXdUc3Bhbi5z
dHlsZS5maWxsID0gImdyZWVuIjsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmV3
VHNwYW4udGV4dENvbnRlbnQgPSAiRkFJTDogIjsKKyAgICAgICAgICAgIG5ld1RzcGFuLnN0eWxl
LmZpbGwgPSAicmVkIjsKKyAgICAgICAgICB9CisgICAgICAgICAgbmV3VGV4dC5pbnNlcnRCZWZv
cmUobmV3VHNwYW4sIG5ld1RleHQuZmlyc3RDaGlsZCk7CisgICAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2xvZycpLmFwcGVuZENoaWxkKG5ld1RleHQpOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gY2hlY2tQYXRoU2VncyhwYXRoLCBleHBlY3RlZFBhdGhTZWdzLCBleHBl
Y3RlZE5vcm1hbGl6ZWRQYXRoU2VncykgeworICAgICAgICAgICAgcGF0aEVsZW1lbnQuc2V0QXR0
cmlidXRlKCdkJywgcGF0aCk7CisgICAgICAgICAgICB2YXIgY250ID0gcGF0aEVsZW1lbnQucGF0
aFNlZ0xpc3QubnVtYmVyT2ZJdGVtczsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7aSA8IGNudDtp
KyspIHsKKyAgICAgICAgICAgICAgICBsZXR0ZXIgPSBwYXRoRWxlbWVudC5wYXRoU2VnTGlzdC5n
ZXRJdGVtKGkpLnBhdGhTZWdUeXBlQXNMZXR0ZXI7CisgICAgICAgICAgICAgICAgaWYgKGxldHRl
ciAhPSBleHBlY3RlZFBhdGhTZWdzW2ldKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdChm
YWxzZSwgJ3BhdGhTZWcgc2hvdWxkIGJlICcgKyBleHBlY3RlZFBhdGhTZWdzW2ldICsgJywgaXMg
JyArIGxldHRlcik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbnQgPSBwYXRoRWxlbWVudC5ub3JtYWxp
emVkUGF0aFNlZ0xpc3QubnVtYmVyT2ZJdGVtczsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7aSA8
IGNudDtpKyspIHsKKyAgICAgICAgICAgICAgICBsZXR0ZXIgPSBwYXRoRWxlbWVudC5ub3JtYWxp
emVkUGF0aFNlZ0xpc3QuZ2V0SXRlbShpKS5wYXRoU2VnVHlwZUFzTGV0dGVyOworICAgICAgICAg
ICAgICAgIGlmIChsZXR0ZXIgIT0gZXhwZWN0ZWROb3JtYWxpemVkUGF0aFNlZ3NbaV0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0KGZhbHNlLCAncGF0aFNlZyBzaG91bGQgYmUgJyArIGV4
cGVjdGVkTm9ybWFsaXplZFBhdGhTZWdzW2ldICsgJywgaXMgJyArIGxldHRlcik7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHJlc3VsdCh0cnVlLCBwYXRoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFRlc3RzIGdvIGhlcmU6CisgICAgICAgIGNoZWNrUGF0aFNlZ3MoJ00gMCAwIGwgMTAwIDAgWics
IFsnTScsJ2wnLCdaJ10sIFsnTScsJ0wnLCdaJ10pOworICAgICAgICBjaGVja1BhdGhTZWdzKCdN
MTAwLDEwMFE5MDAsNTAwIDEwMCw5MDB6JywgWydNJywnUScsJ1onXSwgWydNJywnQycsJ1onXSk7
CisgICAgXV0+CisgICAgPC9zY3JpcHQ+Cis8L3N2Zz4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTY3MjM2Yy4uYzkzNDg4YyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSAr
MSwzNiBAQAogMjAwOS0wNy0xOSAgUm9iIEJ1aXMgIDxyd2xidWlzQGdtYWlsLmNvbT4KIAorICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MjcKKyAgICAgICAgU1ZHUGF0aEVsZW1lbnQg
c2hvdWxkIG9ubHkgYnVpbGQgU1ZHUGF0aFNlZyogbGlzdCBvbiBkZW1hbmQKKworICAgICAgICBQ
YXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIG5vcm1hbGl6ZWQgcGF0aCBzZWdtZW50cyBhbmQgb24g
ZGVtYW5kCisgICAgICAgIHBhdGggc2VnIGxpc3RzLgorCisgICAgICAgIFRlc3RzOiBzdmcvY3Vz
dG9tL3BhdGgtbm9ybWFsaXppbmcuc3ZnCisgICAgICAgICAgICAgICBzdmcvY3VzdG9tL2pzLXVw
ZGF0ZS1ub3JtYWxpemVkLXBhdGhzZWdzLnN2ZzoKKyAgICAgICAgICAgICAgIHN2Zy9jdXN0b20v
anMtdXBkYXRlLXBhdGhzZWdzLnN2ZzoKKworICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6U1ZHUGF0aEVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmdldFRvdGFsTGVuZ3RoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpnZXRQb2ludEF0TGVuZ3RoKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpnZXRQYXRoU2VnQXRMZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjpwYXRoU2VnTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoRWxlbWVudDo6bm9ybWFsaXplZFBhdGhTZWdMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhFbGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhFbGVtZW50OjpyZWJ1aWxkUGF0aEluZm8pOgorICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdQYXRoU2VnTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoU2VnTGlzdDo6dmFsdWVBc1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpibGVu
ZEZ1bmMpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoU2VnTGlzdC5oOgorCisyMDA5LTA3LTE5ICBS
b2IgQnVpcyAgPHJ3bGJ1aXNAZ21haWwuY29tPgorCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0g
QmFydGguCiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBtZW1iZXIgdmFyaWFibGUuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdQYXRo
RWxlbWVudC5jcHAKaW5kZXggMTcyY2FjMS4uZmM0YjY0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9z
dmcvU1ZHUGF0aEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNw
cApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
ICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0
CiAKQEAgLTI1LDYgKzI1LDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1BhdGhF
bGVtZW50LmgiCiAKKyNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiTWFwcGVkQXR0cmlidXRl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkBAIC00
OSw2ICs1MCw3IEBAIFNWR1BhdGhFbGVtZW50OjpTVkdQYXRoRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgICwgU1ZHVGVzdHMoKQogICAgICwg
U1ZHTGFuZ1NwYWNlKCkKICAgICAsIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAg
ICwgbV9pZ25vcmVBdHRyaWJ1dGVDaGFuZ2VzKGZhbHNlKQogICAgICwgbV9wYXRoTGVuZ3RoKHRo
aXMsIFNWR05hbWVzOjpwYXRoTGVuZ3RoQXR0ciwgMC4wZikKIHsKIH0KQEAgLTU5LDIwICs2MSwx
OSBAQCBTVkdQYXRoRWxlbWVudDo6flNWR1BhdGhFbGVtZW50KCkKIAogZmxvYXQgU1ZHUGF0aEVs
ZW1lbnQ6OmdldFRvdGFsTGVuZ3RoKCkKIHsKLSAgICAvLyBGSVhNRTogdGhpcyBtYXkgd2lzaCB0
byB1c2UgdGhlIHBhdGhTZWdMaXN0IGluc3RlYWQgb2YgdGhlIHBhdGhkYXRhIGlmIHRoYXQncyBj
aGVhcGVyIHRvIGJ1aWxkIChvciBjYWNoZWQpCiAgICAgcmV0dXJuIHRvUGF0aERhdGEoKS5sZW5n
dGgoKTsKIH0KIAogRmxvYXRQb2ludCBTVkdQYXRoRWxlbWVudDo6Z2V0UG9pbnRBdExlbmd0aChm
bG9hdCBsZW5ndGgpCiB7Ci0gICAgLy8gRklYTUU6IHRoaXMgbWF5IHdpc2ggdG8gdXNlIHRoZSBw
YXRoU2VnTGlzdCBpbnN0ZWFkIG9mIHRoZSBwYXRoZGF0YSBpZiB0aGF0J3MgY2hlYXBlciB0byBi
dWlsZCAob3IgY2FjaGVkKQogICAgIGJvb2wgb2sgPSBmYWxzZTsKICAgICByZXR1cm4gdG9QYXRo
RGF0YSgpLnBvaW50QXRMZW5ndGgobGVuZ3RoLCBvayk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgU1ZH
UGF0aEVsZW1lbnQ6OmdldFBhdGhTZWdBdExlbmd0aChmbG9hdCBsZW5ndGgpCiB7Ci0gICAgcmV0
dXJuIHBhdGhTZWdMaXN0KCktPmdldFBhdGhTZWdBdExlbmd0aChsZW5ndGgpOworICAgIC8vIEZJ
WE1FOiBzaG91bGQgdXNlIHBhdGhTZWdMaXN0CisgICAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoU2Vn
TGlzdCgpLT5nZXRQYXRoU2VnQXRMZW5ndGgobGVuZ3RoKTsKIH0KIAogUGFzc1JlZlB0cjxTVkdQ
YXRoU2VnQ2xvc2VQYXRoPiBTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0Nsb3NlUGF0
aCgpCkBAIC0xNzMsMTAgKzE3NCw3IEBAIFBhc3NSZWZQdHI8U1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNTbW9vdGhSZWw+IFNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnCiB2b2lkIFNW
R1BhdGhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIp
CiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZEF0dHIpIHsKLSAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgcGF0aFNlZ0xpc3QoKS0+Y2xlYXIoZWMpOwotICAg
ICAgICBpZiAoIXBhdGhTZWdMaXN0RnJvbVNWR0RhdGEocGF0aFNlZ0xpc3QoKSwgYXR0ci0+dmFs
dWUoKSwgdHJ1ZSkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25z
KCktPnJlcG9ydEVycm9yKCJQcm9ibGVtIHBhcnNpbmcgZD1cIiIgKyBhdHRyLT52YWx1ZSgpICsg
IlwiIik7CisgICAgICAgIHJlYnVpbGRQYXRoSW5mbygpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpwYXRoTGVuZ3RoQXR0cikgewogICAgICAgICBzZXRQYXRoTGVu
Z3RoQmFzZVZhbHVlKGF0dHItPnZhbHVlKCkudG9GbG9hdCgpKTsKICAgICAgICAgaWYgKHBhdGhM
ZW5ndGhCYXNlVmFsdWUoKSA8IDAuMGYpCkBAIC0xOTQsOCArMTkyLDE0IEBAIHZvaWQgU1ZHUGF0
aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIAog
dm9pZCBTVkdQYXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKIHsKKyAgICBpZiAobV9pZ25vcmVBdHRyaWJ1dGVDaGFuZ2VzKQorICAg
ICAgICByZXR1cm47CisKICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiAKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmRBdHRyKQorICAgICAgICByZWJ1aWxkUGF0aEluZm8odHJ1ZSk7CisKICAgICBpZiAoIXJlbmRl
cmVyKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjAzLDIyICsyMDcsMjkgQEAgdm9pZCBTVkdQ
YXRoRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKICAgICAgICAgU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpIHx8CiAg
ICAgICAgIFNWR0xhbmdTcGFjZTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkgfHwKICAgICAg
ICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFt
ZSkgfHwKLSAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmlzS25vd25BdHRy
aWJ1dGUoYXR0ck5hbWUpKQorICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6
aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKICAgICAgICAgcmVuZGVyZXIoKS0+c2V0TmVl
ZHNMYXlvdXQodHJ1ZSk7CisgICAgIH0KIH0KIAogU1ZHUGF0aFNlZ0xpc3QqIFNWR1BhdGhFbGVt
ZW50OjpwYXRoU2VnTGlzdCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BhdGhTZWdMaXN0KQorICAg
IGlmICghbV9wYXRoU2VnTGlzdCkgewogICAgICAgICBtX3BhdGhTZWdMaXN0ID0gU1ZHUGF0aFNl
Z0xpc3Q6OmNyZWF0ZShTVkdOYW1lczo6ZEF0dHIpOworICAgICAgICBwYXRoU2VnTGlzdEZyb21T
VkdEYXRhKG1fcGF0aFNlZ0xpc3QuZ2V0KCksIGdldEF0dHJpYnV0ZShTVkdOYW1lczo6ZEF0dHIp
LCBmYWxzZSk7CisgICAgfQogCiAgICAgcmV0dXJuIG1fcGF0aFNlZ0xpc3QuZ2V0KCk7CiB9CiAK
IFNWR1BhdGhTZWdMaXN0KiBTVkdQYXRoRWxlbWVudDo6bm9ybWFsaXplZFBhdGhTZWdMaXN0KCkg
Y29uc3QKIHsKLSAgICAvLyBUT0RPCi0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX25vcm1hbGl6
ZWRQYXRoU2VnTGlzdCkgeworICAgICAgICBtX25vcm1hbGl6ZWRQYXRoU2VnTGlzdCA9IFNWR1Bh
dGhTZWdMaXN0OjpjcmVhdGUoU1ZHTmFtZXM6OmRBdHRyKTsKKyAgICAgICAgcGF0aFNlZ0xpc3RG
cm9tU1ZHRGF0YShtX25vcm1hbGl6ZWRQYXRoU2VnTGlzdC5nZXQoKSwgZ2V0QXR0cmlidXRlKFNW
R05hbWVzOjpkQXR0ciksIHRydWUpOworICAgIH0KKworICAgIHJldHVybiBtX25vcm1hbGl6ZWRQ
YXRoU2VnTGlzdC5nZXQoKTsKIH0KIAogU1ZHUGF0aFNlZ0xpc3QqIFNWR1BhdGhFbGVtZW50Ojph
bmltYXRlZFBhdGhTZWdMaXN0KCkgY29uc3QKQEAgLTIzNSw3ICsyNDYsNDUgQEAgU1ZHUGF0aFNl
Z0xpc3QqIFNWR1BhdGhFbGVtZW50OjphbmltYXRlZE5vcm1hbGl6ZWRQYXRoU2VnTGlzdCgpIGNv
bnN0CiAKIFBhdGggU1ZHUGF0aEVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAogewotICAgIHJl
dHVybiBwYXRoU2VnTGlzdCgpLT50b1BhdGhEYXRhKCk7CisgICAgcmV0dXJuIG1fcGF0aDsKK30K
Kwordm9pZCBTVkdQYXRoRWxlbWVudDo6cmVidWlsZFBhdGhJbmZvKGJvb2wgcGF0aFNlZ0NoYW5n
ZSkKK3sKKyAgICBSZWZQdHI8QXR0cj4gYXR0ciA9IGdldEF0dHJpYnV0ZU5vZGUoU1ZHTmFtZXM6
OmRBdHRyLmxvY2FsTmFtZSgpKTsKKyAgICBTdHJpbmcgZFZhbHVlID0gYXR0ci0+dmFsdWUoKTsK
KyAgICBib29sIHVwZGF0ZVBhdGhTZWdMaXN0ID0gbV9wYXRoU2VnTGlzdDsKKyAgICBib29sIHVw
ZGF0ZU5vcm1hbGl6ZWRQYXRoU2VnTGlzdCA9IG1fbm9ybWFsaXplZFBhdGhTZWdMaXN0OworICAg
IGlmIChwYXRoU2VnQ2hhbmdlKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
ICAgICBtX2lnbm9yZUF0dHJpYnV0ZUNoYW5nZXMgPSB0cnVlOworICAgICAgICBTdHJpbmcgbmV3
VmFsdWUgPSBwYXRoU2VnTGlzdCgpLT52YWx1ZUFzU3RyaW5nKCk7CisgICAgICAgIGlmICggbmV3
VmFsdWUgIT0gZFZhbHVlICkgeworICAgICAgICAgICAgZFZhbHVlID0gbmV3VmFsdWU7CisgICAg
ICAgICAgICB1cGRhdGVQYXRoU2VnTGlzdCA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgZFZhbHVlID0gbm9ybWFsaXplZFBhdGhTZWdMaXN0KCktPnZhbHVlQXNTdHJpbmco
KTsKKyAgICAgICAgICAgIHVwZGF0ZU5vcm1hbGl6ZWRQYXRoU2VnTGlzdCA9IGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGF0dHItPnNldFZhbHVlKGRWYWx1ZSwgZWMpOworICAgICAgICBtX2ln
bm9yZUF0dHJpYnV0ZUNoYW5nZXMgPSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3Bh
dGggPSBQYXRoKCk7CisgICAgICAgIGlmICghcGF0aEZyb21TVkdEYXRhKG1fcGF0aCwgZFZhbHVl
KSkgeworICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBv
cnRFcnJvcigiUHJvYmxlbSBwYXJzaW5nIGQ9XCIiICsgZFZhbHVlICsgIlwiIik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHVwZGF0ZVBhdGhTZWdMaXN0
KSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgIHBhdGhTZWdMaXN0KCktPmNs
ZWFyKGVjKTsKKyAgICAgICAgcGF0aFNlZ0xpc3RGcm9tU1ZHRGF0YShtX3BhdGhTZWdMaXN0Lmdl
dCgpLCBkVmFsdWUsIGZhbHNlKTsKKyAgICB9CisgICAgaWYgKHVwZGF0ZU5vcm1hbGl6ZWRQYXRo
U2VnTGlzdCkgeworICAgICAgICBFeGNlcHRpb25Db2RlIGVjOworICAgICAgICBub3JtYWxpemVk
UGF0aFNlZ0xpc3QoKS0+Y2xlYXIoZWMpOworICAgICAgICBwYXRoU2VnTGlzdEZyb21TVkdEYXRh
KG1fbm9ybWFsaXplZFBhdGhTZWdMaXN0LmdldCgpLCBkVmFsdWUsIHRydWUpOworICAgIH0KIH0K
IAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaCBiL1dlYkNvcmUv
c3ZnL1NWR1BhdGhFbGVtZW50LmgKaW5kZXggMzYyYTg1Yi4uYmQ5YzczMiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAorKysgYi9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxl
bWVudC5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gICAg
ICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHBy
b2plY3QKIApAQCAtMTAyLDggKzEwMiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJv
dGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQogCisgICAgICAgIHZvaWQgcmVidWlsZFBhdGhJbmZv
KGJvb2wgcGF0aFNlZ0NoYW5nZSA9IGZhbHNlKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR1BhdGhTZWdMaXN0PiBtX3BhdGhTZWdMaXN0OworICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdQYXRoU2VnTGlzdD4gbV9ub3JtYWxpemVkUGF0aFNlZ0xpc3Q7CisgICAg
ICAgIG11dGFibGUgUGF0aCBtX3BhdGg7CisgICAgICAgIGJvb2wgbV9pZ25vcmVBdHRyaWJ1dGVD
aGFuZ2VzOwogCiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdQYXRo
RWxlbWVudCwgU1ZHTmFtZXM6OnBhdGhUYWdTdHJpbmcsIFNWR05hbWVzOjpwYXRoTGVuZ3RoQXR0
clN0cmluZywgZmxvYXQsIFBhdGhMZW5ndGgsIHBhdGhMZW5ndGgpCiAgICAgfTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR1BhdGhT
ZWdMaXN0LmNwcAppbmRleCA4ZDZmZGVmLi5jOTBlNDMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2
Zy9TVkdQYXRoU2VnTGlzdC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3QuY3Bw
CkBAIC0xMDAsNDUgKzEwMCwxOSBAQCB1bnNpZ25lZCBTVkdQYXRoU2VnTGlzdDo6Z2V0UGF0aFNl
Z0F0TGVuZ3RoKGRvdWJsZSkKICAgICByZXR1cm4gMDsgLy8gVGhlIFNWRyBzcGVjIGlzIHVuY2xl
YXIgYXMgdG8gd2hhdCB0byByZXR1cm4gd2hlbiB0aGUgZGlzdGFuY2UgaXMgbm90IG9uIHRoZSBw
YXRoICAgIAogfQogCi1QYXRoIFNWR1BhdGhTZWdMaXN0Ojp0b1BhdGhEYXRhKCkKK1N0cmluZyBT
VkdQYXRoU2VnTGlzdDo6dmFsdWVBc1N0cmluZygpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUUgOiBU
aGlzIHNob3VsZCBhbHNvIHN1cHBvcnQgbm9uLW5vcm1hbGl6ZWQgUGF0aFNlZ0xpc3RzCi0gICAg
UGF0aCBwYXRoRGF0YTsKKyAgICBTdHJpbmcgcmVzdWx0OworCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgaW50IGxlbiA9IG51bWJlck9mSXRlbXMoKTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxlbjsgKytpKSB7CisgICAgdW5zaWduZWQgaW50IGxlbiA9IG51bWJlck9mSXRlbXMo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAg
IFNWR1BhdGhTZWcqIHNlZ21lbnQgPSBnZXRJdGVtKGksIGVjKS5nZXQoKTsKLSAgICAgICAgc3dp
dGNoIChzZWdtZW50LT5wYXRoU2VnVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFNWR1BhdGhT
ZWc6OlBBVEhTRUdfTU9WRVRPX0FCUzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBT
VkdQYXRoU2VnTW92ZXRvQWJzKiBtb3ZlVG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTW92ZXRv
QWJzKj4oc2VnbWVudCk7Ci0gICAgICAgICAgICAgICAgcGF0aERhdGEubW92ZVRvKEZsb2F0UG9p
bnQobW92ZVRvLT54KCksIG1vdmVUby0+eSgpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRP
X0FCUzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTVkdQYXRoU2VnTGluZXRvQWJz
KiBsaW5lVG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvQWJzKj4oc2VnbWVudCk7Ci0g
ICAgICAgICAgICAgICAgcGF0aERhdGEuYWRkTGluZVRvKEZsb2F0UG9pbnQobGluZVRvLT54KCks
IGxpbmVUby0+eSgpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19BQlM6Ci0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyog
Y3VydmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMqPihzZWdtZW50
KTsKLSAgICAgICAgICAgICAgICBwYXRoRGF0YS5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQo
Y3VydmVUby0+eDEoKSwgY3VydmVUby0+eTEoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KGN1cnZlVG8tPngyKCksIGN1cnZlVG8tPnkyKCkp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRQb2ludChj
dXJ2ZVRvLT54KCksIGN1cnZlVG8tPnkoKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NMT1NFUEFU
SDoKLSAgICAgICAgICAgICAgICBwYXRoRGF0YS5jbG9zZVN1YnBhdGgoKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KGZhbHNlKTsgLy8gRklYTUU6IFRoaXMgb25seSB3b3JrcyB3aXRoIG5vcm1hbGl6ZWQvcHJvY2Vz
c2VkIHBhdGggZGF0YS4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAg
ICBBU1NFUlQoZWMgPT0gMCk7CisgICAgICAgIHJlc3VsdCArPSBzZWdtZW50LT50b1N0cmluZygp
OwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gcGF0aERhdGE7CisKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogICAgIAogc3RhdGljIGlubGluZSBmbG9hdCBibGVuZEZ1bmMoZmxvYXQgZnJvbSwgZmxv
YXQgdG8sIGZsb2F0IHByb2dyZXNzKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHUGF0aFNl
Z0xpc3QuaCBiL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0LmgKaW5kZXggZDkzMjVjZS4uZTQ2
ZjkwYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3QuaAorKysgYi9XZWJD
b3JlL3N2Zy9TVkdQYXRoU2VnTGlzdC5oCkBAIC0yOCw3ICsyOCw2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotICAgIGNsYXNzIFBhdGg7CiAgICAgY2xhc3MgU1ZHRWxlbWVudDsKICAKICAg
ICBjbGFzcyBTVkdQYXRoU2VnTGlzdCA6IHB1YmxpYyBTVkdMaXN0PFJlZlB0cjxTVkdQYXRoU2Vn
PiA+IHsKQEAgLTM3LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0
dWFsIH5TVkdQYXRoU2VnTGlzdCgpOwogCiAgICAgICAgIHVuc2lnbmVkIGdldFBhdGhTZWdBdExl
bmd0aChkb3VibGUpOwotICAgICAgICBQYXRoIHRvUGF0aERhdGEoKTsKKyAgICAgICAgU3RyaW5n
IHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFNWR1BhdGhTZWdMaXN0PiBjcmVhdGVBbmltYXRlZChjb25zdCBTVkdQYXRoU2VnTGlzdCog
ZnJvbUxpc3QsIGNvbnN0IFNWR1BhdGhTZWdMaXN0KiB0b0xpc3QsIGZsb2F0IHByb2dyZXNzKTsK
ICAgICAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67164</attachid>
            <date>2010-09-10 01:34:15 -0700</date>
            <delta_ts>2010-09-10 05:00:01 -0700</delta_ts>
            <desc>First proposal, not for landing</desc>
            <filename>pathElement2-2.patch</filename>
            <type>text/plain</type>
            <size>44922</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gNjY5ODYpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYs
NyArMTg2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIH0KIAogI2lmIEVOQUJMRShTVkcp
Ci0gICAgI2RlZmluZSBDUkVBVEVfU1ZHX09CSkVDVF9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVj
dCwgY2xhc3NOYW1lLCBvYmplY3QsIGNvbnRleHQpIGNyZWF0ZURPTU9iamVjdFdyYXBwZXI8SlMj
I2NsYXNzTmFtZT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxjbGFzc05hbWUqPihv
YmplY3QpLCBjb250ZXh0KQogICAgIHRlbXBsYXRlPGNsYXNzIFdyYXBwZXJDbGFzcywgY2xhc3Mg
RE9NQ2xhc3M+IGlubGluZSBET01PYmplY3QqIGNyZWF0ZURPTU9iamVjdFdyYXBwZXIoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERPTUNsYXNz
KiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpCiAgICAgewogICAgICAgICBET01PYmplY3Qq
IHdyYXBwZXIgPSBjcmVhdGVET01PYmplY3RXcmFwcGVyPFdyYXBwZXJDbGFzcywgRE9NQ2xhc3M+
KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNTVkdQYXRoU2VnQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAJKHJldmlzaW9uIDY2OTg2KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1NWR1BhdGhTZWdDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTgs
NTggKzU5LDU2IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU1ZHUGF0aFNlZyogb2JqZWN0LCBTVkdFbGVtZW50KiBjb250ZXh0KQorSlNWYWx1
ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U1ZHUGF0aFNlZyogb2JqZWN0KQogewogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4g
anNOdWxsKCk7CiAKLSAgICBpZiAoRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2Jq
ZWN0V3JhcHBlcihleGVjLCBvYmplY3QpKSB7Ci0gICAgICAgIEFTU0VSVChKU1NWR0NvbnRleHRD
YWNoZTo6c3ZnQ29udGV4dEZvckRPTU9iamVjdCh3cmFwcGVyKSA9PSBjb250ZXh0KTsKKyAgICBp
ZiAoRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihleGVjLCBv
YmplY3QpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICB9CiAKICAgICBzd2l0Y2ggKG9i
amVjdC0+cGF0aFNlZ1R5cGUoKSkgewogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DTE9T
RVBBVEg6Ci0gICAgICAgIHJldHVybiBDUkVBVEVfU1ZHX09CSkVDVF9XUkFQUEVSKGV4ZWMsIGds
b2JhbE9iamVjdCwgU1ZHUGF0aFNlZ0Nsb3NlUGF0aCwgb2JqZWN0LCBjb250ZXh0KTsKKyAgICAg
ICAgcmV0dXJuIENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBT
VkdQYXRoU2VnQ2xvc2VQYXRoLCBvYmplY3QpOwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNF
R19NT1ZFVE9fQUJTOgotICAgICAgICByZXR1cm4gQ1JFQVRFX1NWR19PQkpFQ1RfV1JBUFBFUihl
eGVjLCBnbG9iYWxPYmplY3QsIFNWR1BhdGhTZWdNb3ZldG9BYnMsIG9iamVjdCwgY29udGV4dCk7
CisgICAgICAgIHJldHVybiBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9i
amVjdCwgU1ZHUGF0aFNlZ01vdmV0b0Ficywgb2JqZWN0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6
OlBBVEhTRUdfTU9WRVRPX1JFTDoKLSAgICAgICAgcmV0dXJuIENSRUFURV9TVkdfT0JKRUNUX1dS
QVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdQYXRoU2VnTW92ZXRvUmVsLCBvYmplY3QsIGNv
bnRleHQpOworICAgICAgICByZXR1cm4gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBn
bG9iYWxPYmplY3QsIFNWR1BhdGhTZWdNb3ZldG9SZWwsIG9iamVjdCk7CiAgICAgY2FzZSBTVkdQ
YXRoU2VnOjpQQVRIU0VHX0xJTkVUT19BQlM6Ci0gICAgICAgIHJldHVybiBDUkVBVEVfU1ZHX09C
SkVDVF9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHUGF0aFNlZ0xpbmV0b0Ficywgb2Jq
ZWN0LCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdQYXRoU2VnTGluZXRvQWJzLCBvYmplY3QpOwogICAgIGNh
c2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5FVE9fUkVMOgotICAgICAgICByZXR1cm4gQ1JFQVRF
X1NWR19PQkpFQ1RfV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIFNWR1BhdGhTZWdMaW5ldG9S
ZWwsIG9iamVjdCwgY29udGV4dCk7CisgICAgICAgIHJldHVybiBDUkVBVEVfRE9NX09CSkVDVF9X
UkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHUGF0aFNlZ0xpbmV0b1JlbCwgb2JqZWN0KTsK
ICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19BQlM6Ci0gICAgICAg
IHJldHVybiBDUkVBVEVfU1ZHX09CSkVDVF9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY0Ficywgb2JqZWN0LCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljQWJzLCBvYmplY3QpOwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19D
VVJWRVRPX0NVQklDX1JFTDoKLSAgICAgICAgcmV0dXJuIENSRUFURV9TVkdfT0JKRUNUX1dSQVBQ
RVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLCBvYmplY3Qs
IGNvbnRleHQpOworICAgICAgICByZXR1cm4gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVj
LCBnbG9iYWxPYmplY3QsIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwsIG9iamVjdCk7CiAgICAg
Y2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX0FCUzoKLSAgICAgICAg
cmV0dXJuIENSRUFURV9TVkdfT0JKRUNUX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficywgb2JqZWN0LCBjb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuIENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY0Ficywgb2JqZWN0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBB
VEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfUkVMOgotICAgICAgICByZXR1cm4gQ1JFQVRFX1NWR19P
QkpFQ1RfV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljUmVsLCBvYmplY3QsIGNvbnRleHQpOworICAgICAgICByZXR1cm4gQ1JFQVRFX0RPTV9PQkpF
Q1RfV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
UmVsLCBvYmplY3QpOwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19BUkNfQUJTOgotICAg
ICAgICByZXR1cm4gQ1JFQVRFX1NWR19PQkpFQ1RfV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3Qs
IFNWR1BhdGhTZWdBcmNBYnMsIG9iamVjdCwgY29udGV4dCk7CisgICAgICAgIHJldHVybiBDUkVB
VEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHUGF0aFNlZ0FyY0Fi
cywgb2JqZWN0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQVJDX1JFTDoKLSAgICAg
ICAgcmV0dXJuIENSRUFURV9TVkdfT0JKRUNUX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBT
VkdQYXRoU2VnQXJjUmVsLCBvYmplY3QsIGNvbnRleHQpOworICAgICAgICByZXR1cm4gQ1JFQVRF
X0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIFNWR1BhdGhTZWdBcmNSZWws
IG9iamVjdCk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFM
X0FCUzoKLSAgICAgICAgcmV0dXJuIENSRUFURV9TVkdfT0JKRUNUX1dSQVBQRVIoZXhlYywgZ2xv
YmFsT2JqZWN0LCBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicywgb2JqZWN0LCBjb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuIENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywgZ2xvYmFs
T2JqZWN0LCBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicywgb2JqZWN0KTsKICAgICBjYXNl
IFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfUkVMOgotICAgICAgICByZXR1
cm4gQ1JFQVRFX1NWR19PQkpFQ1RfV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIFNWR1BhdGhT
ZWdMaW5ldG9Ib3Jpem9udGFsUmVsLCBvYmplY3QsIGNvbnRleHQpOworICAgICAgICByZXR1cm4g
Q1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIFNWR1BhdGhTZWdM
aW5ldG9Ib3Jpem9udGFsUmVsLCBvYmplY3QpOwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNF
R19MSU5FVE9fVkVSVElDQUxfQUJTOgotICAgICAgICByZXR1cm4gQ1JFQVRFX1NWR19PQkpFQ1Rf
V1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicywg
b2JqZWN0LCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIENSRUFURV9ET01fT0JKRUNUX1dSQVBQ
RVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnMsIG9iamVj
dCk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVUT19WRVJUSUNBTF9SRUw6Ci0g
ICAgICAgIHJldHVybiBDUkVBVEVfU1ZHX09CSkVDVF9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVj
dCwgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsLCBvYmplY3QsIGNvbnRleHQpOworICAgICAg
ICByZXR1cm4gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIFNW
R1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbCwgb2JqZWN0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6
OlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfQUJTOgotICAgICAgICByZXR1cm4gQ1JFQVRF
X1NWR19PQkpFQ1RfV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIFNWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNTbW9vdGhBYnMsIG9iamVjdCwgY29udGV4dCk7CisgICAgICAgIHJldHVybiBDUkVBVEVf
RE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY1Ntb290aEFicywgb2JqZWN0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VS
VkVUT19DVUJJQ19TTU9PVEhfUkVMOgotICAgICAgICByZXR1cm4gQ1JFQVRFX1NWR19PQkpFQ1Rf
V1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhS
ZWwsIG9iamVjdCwgY29udGV4dCk7CisgICAgICAgIHJldHVybiBDUkVBVEVfRE9NX09CSkVDVF9X
UkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJl
bCwgb2JqZWN0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFU
SUNfU01PT1RIX0FCUzoKLSAgICAgICAgcmV0dXJuIENSRUFURV9TVkdfT0JKRUNUX1dSQVBQRVIo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicywg
b2JqZWN0LCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIENSRUFURV9ET01fT0JKRUNUX1dSQVBQ
RVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFi
cywgb2JqZWN0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFU
SUNfU01PT1RIX1JFTDoKLSAgICAgICAgcmV0dXJuIENSRUFURV9TVkdfT0JKRUNUX1dSQVBQRVIo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbCwg
b2JqZWN0LCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIENSRUFURV9ET01fT0JKRUNUX1dSQVBQ
RVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJl
bCwgb2JqZWN0KTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfVU5LTk9XTjoKICAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gQ1JFQVRFX1NWR19PQkpFQ1RfV1JBUFBFUihleGVjLCBn
bG9iYWxPYmplY3QsIFNWR1BhdGhTZWcsIG9iamVjdCwgY29udGV4dCk7CisgICAgICAgIHJldHVy
biBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHUGF0aFNl
Zywgb2JqZWN0KTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQ
YXRoU2VnTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NWR1BhdGhTZWdMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gNjY5ODYpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Nyw5ICs1Nyw4IEBAIEpTVmFsdWUgSlNTVkdQYXRoU2VnTGlzdDo6aW5pdGlhbGl6ZShFeGUKICAg
ICBTVkdQYXRoU2VnTGlzdCogbGlzdCA9IGltcGwoKTsKIAogICAgIFNWR1BhdGhTZWcqIG9iaiA9
IFdURjo6Z2V0UHRyKGxpc3QtPmluaXRpYWxpemUobmV3SXRlbSwgZWMpKTsKLSAgICBTVkdFbGVt
ZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3Qo
dGhpcyk7CiAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IG9iaiwgY29udGV4dCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCgpLCBvYmopOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAKICAgICBKU1NW
R0NvbnRleHRDYWNoZTo6cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKHRoaXMsIGxpc3QtPmFzc29jaWF0
ZWRBdHRyaWJ1dGVOYW1lKCkpOwpAQCAtNzksOSArNzgsOCBAQCBKU1ZhbHVlIEpTU1ZHUGF0aFNl
Z0xpc3Q6OmdldEl0ZW0oRXhlY1N0CiAKICAgICBTVkdQYXRoU2VnTGlzdCogbGlzdCA9IGltcGwo
KTsKICAgICBTVkdQYXRoU2VnKiBvYmogPSBXVEY6OmdldFB0cihsaXN0LT5nZXRJdGVtKGluZGV4
LCBlYykpOwotICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBKU1NWR0NvbnRleHRDYWNoZTo6c3Zn
Q29udGV4dEZvckRPTU9iamVjdCh0aGlzKTsKIAotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QoKSwgb2JqLCBjb250ZXh0KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIG9iaik7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtOTksOSArOTcsOCBAQCBKU1ZhbHVl
IEpTU1ZHUGF0aFNlZ0xpc3Q6Omluc2VydEl0ZW1CZWZvCiAgICAgfQogCiAgICAgU1ZHUGF0aFNl
Z0xpc3QqIGxpc3QgPSBpbXBsKCk7Ci0gICAgU1ZHRWxlbWVudCogY29udGV4dCA9IEpTU1ZHQ29u
dGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHRoaXMpOwogCi0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihsaXN0LT5pbnNl
cnRJdGVtQmVmb3JlKG5ld0l0ZW0sIGluZGV4LCBlYykpLCBjb250ZXh0KTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGxpc3QtPmlu
c2VydEl0ZW1CZWZvcmUobmV3SXRlbSwgaW5kZXgsIGVjKSkpOwogICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBlYyk7CiAKICAgICBKU1NWR0NvbnRleHRDYWNoZTo6cHJvcGFnYXRlU1ZHRE9NQ2hh
bmdlKHRoaXMsIGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwpAQCAtMTIxLDkgKzEx
OCw4IEBAIEpTVmFsdWUgSlNTVkdQYXRoU2VnTGlzdDo6cmVwbGFjZUl0ZW0oRXgKICAgICB9CiAK
ICAgICBTVkdQYXRoU2VnTGlzdCogbGlzdCA9IGltcGwoKTsKLSAgICBTVkdFbGVtZW50KiBjb250
ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2Z0NvbnRleHRGb3JET01PYmplY3QodGhpcyk7CiAK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0
UHRyKGxpc3QtPnJlcGxhY2VJdGVtKG5ld0l0ZW0sIGluZGV4LCBlYykpLCBjb250ZXh0KTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRy
KGxpc3QtPnJlcGxhY2VJdGVtKG5ld0l0ZW0sIGluZGV4LCBlYykpKTsKICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOwogCiAgICAgSlNTVkdDb250ZXh0Q2FjaGU6OnByb3BhZ2F0ZVNWR0RP
TUNoYW5nZSh0aGlzLCBsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKQEAgLTE0NCw5
ICsxNDAsOCBAQCBKU1ZhbHVlIEpTU1ZHUGF0aFNlZ0xpc3Q6OnJlbW92ZUl0ZW0oRXhlCiAgICAg
U1ZHUGF0aFNlZ0xpc3QqIGxpc3QgPSBpbXBsKCk7CiAKICAgICBSZWZQdHI8U1ZHUGF0aFNlZz4g
b2JqKGxpc3QtPnJlbW92ZUl0ZW0oaW5kZXgsIGVjKSk7Ci0gICAgU1ZHRWxlbWVudCogY29udGV4
dCA9IEpTU1ZHQ29udGV4dENhY2hlOjpzdmdDb250ZXh0Rm9yRE9NT2JqZWN0KHRoaXMpOwogCi0g
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBvYmouZ2V0KCks
IGNvbnRleHQpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qo
KSwgb2JqLmdldCgpKTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogCiAgICAgSlNT
VkdDb250ZXh0Q2FjaGU6OnByb3BhZ2F0ZVNWR0RPTUNoYW5nZSh0aGlzLCBsaXN0LT5hc3NvY2lh
dGVkQXR0cmlidXRlTmFtZSgpKTsKQEAgLTE1OSw5ICsxNTQsOCBAQCBKU1ZhbHVlIEpTU1ZHUGF0
aFNlZ0xpc3Q6OmFwcGVuZEl0ZW0oRXhlCiAgICAgU1ZHUGF0aFNlZyogbmV3SXRlbSA9IHRvU1ZH
UGF0aFNlZyhleGVjLT5hcmd1bWVudCgwKSk7CiAKICAgICBTVkdQYXRoU2VnTGlzdCogbGlzdCA9
IGltcGwoKTsKLSAgICBTVkdFbGVtZW50KiBjb250ZXh0ID0gSlNTVkdDb250ZXh0Q2FjaGU6OnN2
Z0NvbnRleHRGb3JET01PYmplY3QodGhpcyk7CiAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGxpc3QtPmFwcGVuZEl0ZW0obmV3SXRl
bSwgZWMpKSwgY29udGV4dCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCgpLCBXVEY6OmdldFB0cihsaXN0LT5hcHBlbmRJdGVtKG5ld0l0ZW0sIGVjKSkpOwog
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAKICAgICBKU1NWR0NvbnRleHRDYWNoZTo6
cHJvcGFnYXRlU1ZHRE9NQ2hhbmdlKHRoaXMsIGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1l
KCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CShyZXZpc2lvbiA2Njk4NikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTMyOSw2ICszMjksOCBAQCBzdWIgSXNTVkdUeXBl
TmVlZGluZ0NvbnRleHRQYXJhbWV0ZXIKICAgICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0Owog
CiAgICAgcmV0dXJuIDAgdW5sZXNzICRpbXBsQ2xhc3NOYW1lID1+IC9TVkcvOworICAgICMgU1ZH
UGF0aFNlZ21lbnRzIGFuZCBTVkdQYXRoU2VnbWVudExpc3RzIGRvbid0IG5lZWQgYSBjb250ZXh0
IHBhcmFtZXRlci4gU1ZHUGF0aEVsZW1lbnQgbWFuYWdlcyBjaGFuZ2VzLgorICAgIHJldHVybiAw
IGlmICgkaW1wbENsYXNzTmFtZSA9fiAvU1ZHUGF0aFNlZy8pOyAKICAgICByZXR1cm4gMCBpZiAk
aW1wbENsYXNzTmFtZSA9fiAvRWxlbWVudC87CiAgICAgbXkgQG5vQ29udGV4dE5lZWRlZCA9ICgi
U1ZHUGFpbnQiLCAiU1ZHQ29sb3IiLCAiU1ZHRG9jdW1lbnQiLCAiU1ZHWm9vbUV2ZW50Iik7CiAg
ICAgZm9yZWFjaCAoQG5vQ29udGV4dE5lZWRlZCkgewpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZWRQYXRoRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUGF0
aERhdGEuaAkocmV2aXNpb24gNjY5ODYpCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBhdGhE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+U1ZHQW5pbWF0ZWRQYXRoRGF0YSgpIHsg
fQogCi0gICAgICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ0xpc3QqIHBhdGhTZWdMaXN0KCkgY29uc3Qg
PSAwOwotICAgICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdMaXN0KiBub3JtYWxpemVkUGF0aFNlZ0xp
c3QoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ0xpc3QqIHBhdGhTZWdM
aXN0KCkgPSAwOworICAgICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdMaXN0KiBub3JtYWxpemVkUGF0
aFNlZ0xpc3QoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ0xpc3QqIGFuaW1hdGVk
UGF0aFNlZ0xpc3QoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ0xpc3Qq
IGFuaW1hdGVkTm9ybWFsaXplZFBhdGhTZWdMaXN0KCkgY29uc3QgPSAwOwogICAgIH07CkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2Njk4NikKKysrIFdlYkNvcmUvc3ZnL1NW
R1BhdGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjMsNiArMjQsNyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUGF0
aEVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIK
QEAgLTM3LDcgKzM5LDYgQEAKICNpbmNsdWRlICJTVkdQYXRoU2VnTGluZXRvLmgiCiAjaW5jbHVk
ZSAiU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwuaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnTGlu
ZXRvVmVydGljYWwuaCIKLSNpbmNsdWRlICJTVkdQYXRoU2VnTGlzdC5oIgogI2luY2x1ZGUgIlNW
R1BhdGhTZWdMaXN0QnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR1BhdGhTZWdNb3ZldG8uaCIKICNp
bmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCkBAIC00Niw3ICs0Nyw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogaW5saW5lIFNWR1BhdGhFbGVtZW50OjpTVkdQYXRoRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKKyAgICAsIG1faXNVcGRhdGlu
Z1BhdGhEYXRhKGZhbHNlKQogeworICAgIG1fcGF0aEJ5dGVTdHJlYW0gPSBTVkdQYXRoQnl0ZVN0
cmVhbTo6Y3JlYXRlKCk7CiB9CiAKIFBhc3NSZWZQdHI8U1ZHUGF0aEVsZW1lbnQ+IFNWR1BhdGhF
bGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
Y3VtZW50KQpAQCAtNzEsNyArNzQsNyBAQCB1bnNpZ25lZCBsb25nIFNWR1BhdGhFbGVtZW50Ojpn
ZXRQYXRoU2VnCiB7CiAgICAgU1ZHUGF0aFBhcnNlckZhY3RvcnkqIGZhY3RvcnkgPSBTVkdQYXRo
UGFyc2VyRmFjdG9yeTo6c2VsZigpOwogICAgIHVuc2lnbmVkIGxvbmcgcGF0aFNlZyA9IDA7Ci0g
ICAgZmFjdG9yeS0+Z2V0U1ZHUGF0aFNlZ0F0TGVuZ3RoRnJvbVNWR1BhdGhTZWdMaXN0KHBhdGhT
ZWdMaXN0KCksIGxlbmd0aCwgcGF0aFNlZyk7CisgICAgZmFjdG9yeS0+Z2V0U1ZHUGF0aFNlZ0F0
TGVuZ3RoRnJvbVNWR1BhdGhCeXRlU3RyZWFtKG1fcGF0aEJ5dGVTdHJlYW0uZ2V0KCksIGxlbmd0
aCwgcGF0aFNlZyk7CiAgICAgcmV0dXJuIHBhdGhTZWc7CiB9CiAKQEAgLTE3MywxMCArMTc2LDEw
IEBAIFBhc3NSZWZQdHI8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW8KIHZvaWQgU1ZHUGF0
aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkQXR0cikgewotICAgICAgICBFeGNlcHRpb25D
b2RlIGVjOwotICAgICAgICBwYXRoU2VnTGlzdCgpLT5jbGVhcihlYyk7CisgICAgICAgIGlmICht
X2lzVXBkYXRpbmdQYXRoRGF0YSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgU1ZHUGF0
aFBhcnNlckZhY3RvcnkqIGZhY3RvcnkgPSBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6c2VsZigpOwot
ICAgICAgICBpZiAoIWZhY3RvcnktPmJ1aWxkU1ZHUGF0aFNlZ0xpc3RGcm9tU3RyaW5nKGF0dHIt
PnZhbHVlKCksIHBhdGhTZWdMaXN0KCksIE5vcm1hbGl6ZWRQYXJzaW5nKSkKKyAgICAgICAgaWYg
KCFmYWN0b3J5LT5idWlsZFNWR1BhdGhCeXRlU3RyZWFtRnJvbVN0cmluZyhhdHRyLT52YWx1ZSgp
LCBtX3BhdGhCeXRlU3RyZWFtLCBVbmFsdGVyZWRQYXJzaW5nKSkKICAgICAgICAgICAgIGRvY3Vt
ZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIlByb2JsZW0gcGFyc2lu
ZyBkPVwiIiArIGF0dHItPnZhbHVlKCkgKyAiXCIiKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6cGF0aExlbmd0aEF0dHIpIHsKICAgICAgICAgc2V0UGF0aExlbmd0
aEJhc2VWYWx1ZShhdHRyLT52YWx1ZSgpLnRvRmxvYXQoKSk7CkBAIC0yMDIsNiArMjA1LDEyIEBA
IHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkQXR0cikgeworICAgICAgICBTVkdQ
YXRoUGFyc2VyRmFjdG9yeSogZmFjdG9yeSA9IFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpzZWxmKCk7
CisgICAgICAgIG1fcGF0aEJ5dGVTdHJlYW0tPmNsZWFyKCk7CisgICAgICAgIFJlZlB0cjxBdHRy
PiBhdHRyID0gZ2V0QXR0cmlidXRlTm9kZShTVkdOYW1lczo6ZEF0dHIubG9jYWxOYW1lKCkpOwor
ICAgICAgICBmYWN0b3J5LT5idWlsZFNWR1BhdGhCeXRlU3RyZWFtRnJvbVN0cmluZyhhdHRyLT52
YWx1ZSgpLCBtX3BhdGhCeXRlU3RyZWFtLCBVbmFsdGVyZWRQYXJzaW5nKTsKKyAgICAgICAgdXBk
YXRlUGF0aFNlZ0xpc3RGcm9tQnl0ZVN0cmVhbSgpOworICAgICAgICB1cGRhdGVOb3JtYWxpemVk
UGF0aFNlZ0xpc3RGcm9tQnl0ZVN0cmVhbSgpOwogICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQ
YXRoVXBkYXRlKCk7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5k
UGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOwogICAgICAgICByZXR1cm47CkBA
IC0yMjksNiArMjM4LDE5IEBAIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVy
dHkKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CisgICAgCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpk
QXR0cikgeworICAgICAgICBBU1NFUlQobV9wYXRoQnl0ZVN0cmVhbSk7CisgICAgICAgIFJlZlB0
cjxBdHRyPiBhdHRyID0gZ2V0QXR0cmlidXRlTm9kZShTVkdOYW1lczo6ZEF0dHIubG9jYWxOYW1l
KCkpOworICAgICAgICBTdHJpbmcgZFZhbHVlOworICAgICAgICBTVkdQYXRoUGFyc2VyRmFjdG9y
eSogZmFjdG9yeSA9IFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpzZWxmKCk7CisgICAgICAgIGZhY3Rv
cnktPmJ1aWxkU3RyaW5nRnJvbUJ5dGVTdHJlYW0obV9wYXRoQnl0ZVN0cmVhbS5nZXQoKSwgZFZh
bHVlLCBVbmFsdGVyZWRQYXJzaW5nKTsKKyAgICAgICAgLy8gTWFrZSBzdXJlLCB0aGF0IHdlIGRv
IG5vdCBwYXJzZSB0aGUgbmV3IHZhbHVlIGFnYWluLiBUaGUgYnl0ZVN0cmVhbSBpcyBhbHJlYWR5
IHVwIHRvIGRhdGUuCisgICAgICAgIG1faXNVcGRhdGluZ1BhdGhEYXRhID0gdHJ1ZTsKKyAgICAg
ICAgU1ZHQW5pbWF0ZWRQcm9wZXJ0eVN5bmNocm9uaXplcjx0cnVlPjo6c3luY2hyb25pemUodGhp
cywgYXR0ck5hbWUsIGRWYWx1ZSk7CisgICAgICAgIG1faXNVcGRhdGluZ1BhdGhEYXRhID0gZmFs
c2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnBhdGhMZW5ndGhBdHRyKQogICAgICAgICBzeW5jaHJvbml6ZVBhdGhMZW5ndGgoKTsKQEAg
LTIzNiwxOCArMjU4LDczIEBAIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVy
dHkKICAgICAgICAgc3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiB9CiAK
LVNWR1BhdGhTZWdMaXN0KiBTVkdQYXRoRWxlbWVudDo6cGF0aFNlZ0xpc3QoKSBjb25zdAordm9p
ZCBTVkdQYXRoRWxlbWVudDo6dXBkYXRlUGF0aERhdGFGcm9tU2VnTGlzdChTVkdQYXRoU2VnTGlz
dCogcGF0aFNlZ0xpc3QpCit7CisgICAgU1ZHUGF0aFBhcnNlckZhY3RvcnkqIGZhY3RvcnkgPSBT
VkdQYXRoUGFyc2VyRmFjdG9yeTo6c2VsZigpOworICAgIG1fcGF0aEJ5dGVTdHJlYW0tPmNsZWFy
KCk7CisgICAgZmFjdG9yeS0+YnVpbGRTVkdQYXRoQnl0ZVN0cmVhbUZyb21TVkdQYXRoU2VnTGlz
dChtX3BhdGhTZWdMaXN0LmdldCgpLCBtX3BhdGhCeXRlU3RyZWFtLCBVbmFsdGVyZWRQYXJzaW5n
KTsKKyAgICBpZiAocGF0aFNlZ0xpc3QtPnNlZ0xpc3RUeXBlKCkgPT0gdW5hbHRlcmVkU2VnTGlz
dCkgeworICAgICAgICBBU1NFUlQocGF0aFNlZ0xpc3QgPT0gbV9wYXRoU2VnTGlzdCk7CisgICAg
ICAgIHVwZGF0ZU5vcm1hbGl6ZWRQYXRoU2VnTGlzdEZyb21CeXRlU3RyZWFtKCk7CisgICAgfSBl
bHNlIGlmIChwYXRoU2VnTGlzdC0+c2VnTGlzdFR5cGUoKSA9PSBub3JtYWxpemVkU2VnTGlzdCkg
eworICAgICAgICBBU1NFUlQocGF0aFNlZ0xpc3QgPT0gbV9ub3JtYWxpemVkUGF0aFNlZ0xpc3Qp
OworICAgICAgICB1cGRhdGVQYXRoU2VnTGlzdEZyb21CeXRlU3RyZWFtKCk7CisgICAgfQorCisg
ICAgLy8gQ2hhbmdlcyB0byBwYXRoU2VnTGlzdHMgY2F1c2UgdXBkYXRlIG9mIGRBdHRyIGFzIHdl
bGwgYXMgcmVsYXlvdXQgaW4gUmVuZGVyUGF0aC4KKyAgICBpbnZhbGlkYXRlU1ZHQXR0cmlidXRl
cygpOworICAgIGlmIChSZW5kZXJQYXRoKiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclBh
dGgqPih0aGlzLT5yZW5kZXJlcigpKSkgeworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNQYXRo
VXBkYXRlKCk7CisgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFy
ZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIpOworICAgIH0KK30KKwordm9pZCBTVkdQ
YXRoRWxlbWVudDo6dXBkYXRlUGF0aFNlZ0xpc3RGcm9tQnl0ZVN0cmVhbSgpIGNvbnN0CiB7Cisg
ICAgQVNTRVJUKG1fcGF0aEJ5dGVTdHJlYW0pOwogICAgIGlmICghbV9wYXRoU2VnTGlzdCkKLSAg
ICAgICAgbV9wYXRoU2VnTGlzdCA9IFNWR1BhdGhTZWdMaXN0OjpjcmVhdGUoU1ZHTmFtZXM6OmRB
dHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIG1f
cGF0aFNlZ0xpc3QtPmNsZWFyKGVjKTsKKyAgICBTVkdQYXRoUGFyc2VyRmFjdG9yeSogZmFjdG9y
eSA9IFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpzZWxmKCk7CisgICAgZmFjdG9yeS0+YnVpbGRTVkdQ
YXRoU2VnTGlzdEZyb21CeXRlU3RyZWFtKG1fcGF0aEJ5dGVTdHJlYW0uZ2V0KCksIG1fcGF0aFNl
Z0xpc3QuZ2V0KCksIFVuYWx0ZXJlZFBhcnNpbmcpOworfQorCit2b2lkIFNWR1BhdGhFbGVtZW50
Ojp1cGRhdGVOb3JtYWxpemVkUGF0aFNlZ0xpc3RGcm9tQnl0ZVN0cmVhbSgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fcGF0aEJ5dGVTdHJlYW0pOworICAgIGlmICghbV9ub3JtYWxpemVkUGF0aFNl
Z0xpc3QpCisgICAgICAgIHJldHVybjsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBt
X25vcm1hbGl6ZWRQYXRoU2VnTGlzdC0+Y2xlYXIoZWMpOworICAgIFNWR1BhdGhQYXJzZXJGYWN0
b3J5KiBmYWN0b3J5ID0gU1ZHUGF0aFBhcnNlckZhY3Rvcnk6OnNlbGYoKTsKKyAgICBmYWN0b3J5
LT5idWlsZFNWR1BhdGhTZWdMaXN0RnJvbUJ5dGVTdHJlYW0obV9wYXRoQnl0ZVN0cmVhbS5nZXQo
KSwgbV9ub3JtYWxpemVkUGF0aFNlZ0xpc3QuZ2V0KCksIE5vcm1hbGl6ZWRQYXJzaW5nKTsKK30K
KworU1ZHUGF0aFNlZ0xpc3QqIFNWR1BhdGhFbGVtZW50OjpwYXRoU2VnTGlzdCgpCit7CisgICAg
aWYgKCFtX3BhdGhTZWdMaXN0KSB7CisgICAgICAgIG1fcGF0aFNlZ0xpc3QgPSBTVkdQYXRoU2Vn
TGlzdDo6Y3JlYXRlKHRoaXMsIHVuYWx0ZXJlZFNlZ0xpc3QpOworICAgICAgICBBU1NFUlQobV9w
YXRoU2VnTGlzdCk7CisgICAgICAgIEFTU0VSVChtX3BhdGhCeXRlU3RyZWFtKTsKKyAgICAgICAg
U1ZHUGF0aFBhcnNlckZhY3RvcnkqIGZhY3RvcnkgPSBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6c2Vs
ZigpOworICAgICAgICBmYWN0b3J5LT5idWlsZFNWR1BhdGhTZWdMaXN0RnJvbUJ5dGVTdHJlYW0o
bV9wYXRoQnl0ZVN0cmVhbS5nZXQoKSwgbV9wYXRoU2VnTGlzdC5nZXQoKSwgVW5hbHRlcmVkUGFy
c2luZyk7CisgICAgfQogCiAgICAgcmV0dXJuIG1fcGF0aFNlZ0xpc3QuZ2V0KCk7CiB9CiAKLVNW
R1BhdGhTZWdMaXN0KiBTVkdQYXRoRWxlbWVudDo6bm9ybWFsaXplZFBhdGhTZWdMaXN0KCkgY29u
c3QKK1NWR1BhdGhTZWdMaXN0KiBTVkdQYXRoRWxlbWVudDo6bm9ybWFsaXplZFBhdGhTZWdMaXN0
KCkKIHsKLSAgICAvLyBUT0RPCi0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX25vcm1hbGl6ZWRQ
YXRoU2VnTGlzdCkgeworICAgICAgICBtX25vcm1hbGl6ZWRQYXRoU2VnTGlzdCA9IFNWR1BhdGhT
ZWdMaXN0OjpjcmVhdGUodGhpcywgbm9ybWFsaXplZFNlZ0xpc3QpOworICAgICAgICBBU1NFUlQo
bV9ub3JtYWxpemVkUGF0aFNlZ0xpc3QpOworICAgICAgICBBU1NFUlQobV9wYXRoQnl0ZVN0cmVh
bSk7CisgICAgICAgIFNWR1BhdGhQYXJzZXJGYWN0b3J5KiBmYWN0b3J5ID0gU1ZHUGF0aFBhcnNl
ckZhY3Rvcnk6OnNlbGYoKTsKKyAgICAgICAgZmFjdG9yeS0+YnVpbGRTVkdQYXRoU2VnTGlzdEZy
b21CeXRlU3RyZWFtKG1fcGF0aEJ5dGVTdHJlYW0uZ2V0KCksIG1fbm9ybWFsaXplZFBhdGhTZWdM
aXN0LmdldCgpLCBOb3JtYWxpemVkUGFyc2luZyk7CisgICAgfQorCisgICAgcmV0dXJuIG1fbm9y
bWFsaXplZFBhdGhTZWdMaXN0LmdldCgpOwogfQogCiBTVkdQYXRoU2VnTGlzdCogU1ZHUGF0aEVs
ZW1lbnQ6OmFuaW1hdGVkUGF0aFNlZ0xpc3QoKSBjb25zdApAQCAtMjY2LDcgKzM0Myw3IEBAIFBh
dGggU1ZHUGF0aEVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAogewogICAgIFBhdGggcmVzdWx0
OwogICAgIFNWR1BhdGhQYXJzZXJGYWN0b3J5KiBmYWN0b3J5ID0gU1ZHUGF0aFBhcnNlckZhY3Rv
cnk6OnNlbGYoKTsKLSAgICBmYWN0b3J5LT5idWlsZFBhdGhGcm9tU1ZHUGF0aFNlZ0xpc3QocGF0
aFNlZ0xpc3QoKSwgcmVzdWx0KTsKKyAgICBmYWN0b3J5LT5idWlsZFBhdGhGcm9tQnl0ZVN0cmVh
bShtX3BhdGhCeXRlU3RyZWFtLmdldCgpLCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkocmV2aXNpb24gNjY5ODYpCisrKyBXZWJDb3JlL3N2
Zy9TVkdQYXRoRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSwxMSBAQAogI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkUGF0aERhdGEuaCIKICNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkLmgiCiAjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlLmgiCisjaW5jbHVkZSAiU1ZH
UGF0aEJ5dGVTdHJlYW0uaCIKKyNpbmNsdWRlICJTVkdQYXRoU2VnTGlzdC5oIgogI2luY2x1ZGUg
IlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVGVzdHMuaCIK
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjMs
NiArNjYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBGbG9hdFBvaW50IGdldFBv
aW50QXRMZW5ndGgoZmxvYXQgZGlzdGFuY2UpOwogICAgICAgICB1bnNpZ25lZCBsb25nIGdldFBh
dGhTZWdBdExlbmd0aChmbG9hdCBkaXN0YW5jZSk7CiAKKyAgICAgICAgdm9pZCB1cGRhdGVQYXRo
RGF0YUZyb21TZWdMaXN0KFNWR1BhdGhTZWdMaXN0Kik7CisgICAgICAgIHZvaWQgdXBkYXRlUGF0
aFNlZ0xpc3RGcm9tQnl0ZVN0cmVhbSgpIGNvbnN0OworICAgICAgICB2b2lkIHVwZGF0ZU5vcm1h
bGl6ZWRQYXRoU2VnTGlzdEZyb21CeXRlU3RyZWFtKCkgY29uc3Q7CisKICAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U1ZHUGF0aFNlZ0Nsb3NlUGF0aD4gY3JlYXRlU1ZHUGF0aFNlZ0Nsb3NlUGF0
aCgpOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdQYXRoU2VnTW92ZXRvQWJzPiBjcmVh
dGVTVkdQYXRoU2VnTW92ZXRvQWJzKGZsb2F0IHgsIGZsb2F0IHkpOwogICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTVkdQYXRoU2VnTW92ZXRvUmVsPiBjcmVhdGVTVkdQYXRoU2VnTW92ZXRvUmVs
KGZsb2F0IHgsIGZsb2F0IHkpOwpAQCAtODQsOCArOTEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21v
b3RoUmVsPiBjcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbChmbG9hdCB4
LCBmbG9hdCB5KTsKIAogICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdTVkdBbmltYXRlZFBhdGhE
YXRhJwotICAgICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdMaXN0KiBwYXRoU2VnTGlzdCgpIGNvbnN0
OwotICAgICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdMaXN0KiBub3JtYWxpemVkUGF0aFNlZ0xpc3Qo
KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTVkdQYXRoU2VnTGlzdCogcGF0aFNlZ0xpc3QoKTsK
KyAgICAgICAgdmlydHVhbCBTVkdQYXRoU2VnTGlzdCogbm9ybWFsaXplZFBhdGhTZWdMaXN0KCk7
CiAgICAgICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ0xpc3QqIGFuaW1hdGVkUGF0aFNlZ0xpc3QoKSBj
b25zdDsKICAgICAgICAgdmlydHVhbCBTVkdQYXRoU2VnTGlzdCogYW5pbWF0ZWROb3JtYWxpemVk
UGF0aFNlZ0xpc3QoKSBjb25zdDsKIApAQCAtMTAyLDcgKzEwOSwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTWFya2VycygpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KIAorICAgICAgICBPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IG1fcGF0
aEJ5dGVTdHJlYW07CisgICAgICAgIGJvb2wgbV9pc1VwZGF0aW5nUGF0aERhdGE7CiAgICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR1BhdGhTZWdMaXN0PiBtX3BhdGhTZWdMaXN0OworICAgICAgICBt
dXRhYmxlIFJlZlB0cjxTVkdQYXRoU2VnTGlzdD4gbV9ub3JtYWxpemVkUGF0aFNlZ0xpc3Q7CiAK
ICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9QUk9QRVJUWShTVkdQYXRoRWxlbWVudCwgU1ZHTmFt
ZXM6OnBhdGhMZW5ndGhBdHRyLCBmbG9hdCwgUGF0aExlbmd0aCwgcGF0aExlbmd0aCkKIApJbmRl
eDogV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlckZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXJGYWN0b3J5LmNwcAkocmV2aXNpb24gNjY5ODYpCisrKyBX
ZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyRmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3
LDYgKzg3LDE3IEBAIHN0YXRpYyBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyKiBnbG8KICAg
ICByZXR1cm4gc19idWlsZGVyOwogfQogCitzdGF0aWMgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVp
bGRlciogZ2xvYmFsU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcihQYXRoVHJhdmVyc2FsU3Rh
dGUqIHRyYXZlcnNhbFN0YXRlLCBmbG9hdCBsZW5ndGgpCit7CisgICAgc3RhdGljIFNWR1BhdGhU
cmF2ZXJzYWxTdGF0ZUJ1aWxkZXIqIHNfYnVpbGRlciA9IDA7CisgICAgaWYgKCFzX2J1aWxkZXIp
CisgICAgICAgIHNfYnVpbGRlciA9IG5ldyBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOwor
CisgICAgc19idWlsZGVyLT5zZXRDdXJyZW50VHJhdmVyc2FsU3RhdGUodHJhdmVyc2FsU3RhdGUp
OworICAgIHNfYnVpbGRlci0+c2V0RGVzaXJlZExlbmd0aChsZW5ndGgpOworICAgIHJldHVybiBz
X2J1aWxkZXI7Cit9CisKIHN0YXRpYyBTVkdQYXRoUGFyc2VyKiBnbG9iYWxTVkdQYXRoUGFyc2Vy
KFNWR1BhdGhTb3VyY2UqIHNvdXJjZSwgU1ZHUGF0aENvbnN1bWVyKiBjb25zdW1lcikKIHsKICAg
ICBzdGF0aWMgU1ZHUGF0aFBhcnNlciogc19wYXJzZXIgPSAwOwpAQCAtMjQ3LDYgKzI1OCwyMyBA
QCBib29sIFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpidWlsZFNWR1BhdGhCCiAgICAgcmV0dXJuIG9r
OwogfQogCitib29sIFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpidWlsZFNWR1BhdGhCeXRlU3RyZWFt
RnJvbVNWR1BhdGhTZWdMaXN0KFNWR1BhdGhTZWdMaXN0KiBwYXRoU2VnTGlzdCwgT3duUHRyPFNW
R1BhdGhCeXRlU3RyZWFtPiYgcmVzdWx0LCBQYXRoUGFyc2luZ01vZGUgcGFyc2luZ01vZGUpCit7
CisgICAgQVNTRVJUKHBhdGhTZWdMaXN0KTsKKyAgICBpZiAoIXBhdGhTZWdMaXN0LT5udW1iZXJP
Zkl0ZW1zKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsgCisKKyAgICBPd25QdHI8U1ZHUGF0aEJ5
dGVTdHJlYW0+IHN0cmVhbSA9IFNWR1BhdGhCeXRlU3RyZWFtOjpjcmVhdGUoKTsKKyAgICBTVkdQ
YXRoQnl0ZVN0cmVhbUJ1aWxkZXIqIGJ1aWxkZXIgPSBnbG9iYWxTVkdQYXRoQnl0ZVN0cmVhbUJ1
aWxkZXIoc3RyZWFtLmdldCgpKTsKKworICAgIE93blB0cjxTVkdQYXRoU2VnTGlzdFNvdXJjZT4g
c291cmNlID0gU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OmNyZWF0ZShwYXRoU2VnTGlzdCk7CisgICAg
U1ZHUGF0aFBhcnNlciogcGFyc2VyID0gZ2xvYmFsU1ZHUGF0aFBhcnNlcihzb3VyY2UuZ2V0KCks
IGJ1aWxkZXIpOworICAgIGJvb2wgb2sgPSBwYXJzZXItPnBhcnNlUGF0aERhdGFGcm9tU291cmNl
KHBhcnNpbmdNb2RlKTsKKyAgICByZXN1bHQgPSBzdHJlYW0ucmVsZWFzZSgpOworICAgIHBhcnNl
ci0+Y2xlYW51cCgpOworICAgIHJldHVybiBvazsKK30KKwogYm9vbCBTVkdQYXRoUGFyc2VyRmFj
dG9yeTo6YnVpbGRBbmltYXRlZFNWR1BhdGhCeXRlU3RyZWFtKFNWR1BhdGhCeXRlU3RyZWFtKiBm
cm9tU3RyZWFtLCBTVkdQYXRoQnl0ZVN0cmVhbSogdG9TdHJlYW0sIE93blB0cjxTVkdQYXRoQnl0
ZVN0cmVhbT4mIHJlc3VsdCwgZmxvYXQgcHJvZ3Jlc3MpCiB7CiAgICAgQVNTRVJUKGZyb21TdHJl
YW0pOwpAQCAtMjgzLDYgKzMxMSwyMiBAQCBib29sIFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpnZXRT
VkdQYXRoU2VnCiAgICAgcmV0dXJuIG9rOwogfQogCitib29sIFNWR1BhdGhQYXJzZXJGYWN0b3J5
OjpnZXRTVkdQYXRoU2VnQXRMZW5ndGhGcm9tU1ZHUGF0aEJ5dGVTdHJlYW0oU1ZHUGF0aEJ5dGVT
dHJlYW0qIHN0cmVhbSwgZmxvYXQgbGVuZ3RoLCB1bnNpZ25lZCBsb25nJiBwYXRoU2VnKQorewor
ICAgIGlmIChzdHJlYW0tPmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
T3duUHRyPFBhdGhUcmF2ZXJzYWxTdGF0ZT4gdHJhdmVyc2FsU3RhdGUgPSBhZG9wdFB0cihuZXcg
UGF0aFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsU2VnbWVudEF0
TGVuZ3RoKSk7CisgICAgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlciogYnVpbGRlciA9IGds
b2JhbFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIodHJhdmVyc2FsU3RhdGUuZ2V0KCksIGxl
bmd0aCk7CisKKyAgICBPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U+IHNvdXJjZSA9IFNW
R1BhdGhCeXRlU3RyZWFtU291cmNlOjpjcmVhdGUoc3RyZWFtKTsKKyAgICBTVkdQYXRoUGFyc2Vy
KiBwYXJzZXIgPSBnbG9iYWxTVkdQYXRoUGFyc2VyKHNvdXJjZS5nZXQoKSwgYnVpbGRlcik7Cisg
ICAgYm9vbCBvayA9IHBhcnNlci0+cGFyc2VQYXRoRGF0YUZyb21Tb3VyY2UoTm9ybWFsaXplZFBh
cnNpbmcpOworICAgIHBhdGhTZWcgPSBidWlsZGVyLT5wYXRoU2VnbWVudEluZGV4KCk7CisgICAg
cGFyc2VyLT5jbGVhbnVwKCk7CisgICAgcmV0dXJuIG9rOworfQorCiB9CiAKICNlbmRpZgpJbmRl
eDogV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlckZhY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdQYXRoUGFyc2VyRmFjdG9yeS5oCShyZXZpc2lvbiA2Njk4NikKKysrIFdlYkNv
cmUvc3ZnL1NWR1BhdGhQYXJzZXJGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEwICs0
NSwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBidWlsZFN0cmluZ0Zyb21TVkdQYXRoU2VnTGlzdChT
VkdQYXRoU2VnTGlzdCosIFN0cmluZyYsIFBhdGhQYXJzaW5nTW9kZSk7CiAKICAgICBib29sIGJ1
aWxkU1ZHUGF0aEJ5dGVTdHJlYW1Gcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYsIE93blB0cjxTVkdQ
YXRoQnl0ZVN0cmVhbT4mLCBQYXRoUGFyc2luZ01vZGUpOworICAgIGJvb2wgYnVpbGRTVkdQYXRo
Qnl0ZVN0cmVhbUZyb21TVkdQYXRoU2VnTGlzdChTVkdQYXRoU2VnTGlzdCosIE93blB0cjxTVkdQ
YXRoQnl0ZVN0cmVhbT4mLCBQYXRoUGFyc2luZ01vZGUpOwogCiAgICAgYm9vbCBidWlsZEFuaW1h
dGVkU1ZHUGF0aEJ5dGVTdHJlYW0oU1ZHUGF0aEJ5dGVTdHJlYW0qLCBTVkdQYXRoQnl0ZVN0cmVh
bSosIE93blB0cjxTVkdQYXRoQnl0ZVN0cmVhbT4mLCBmbG9hdCk7CiAKICAgICBib29sIGdldFNW
R1BhdGhTZWdBdExlbmd0aEZyb21TVkdQYXRoU2VnTGlzdChTVkdQYXRoU2VnTGlzdCosIGZsb2F0
LCB1bnNpZ25lZCBsb25nJik7CisgICAgYm9vbCBnZXRTVkdQYXRoU2VnQXRMZW5ndGhGcm9tU1ZH
UGF0aEJ5dGVTdHJlYW0oU1ZHUGF0aEJ5dGVTdHJlYW0qLCBmbG9hdCwgdW5zaWduZWQgbG9uZyYp
OwogCiBwcml2YXRlOgogICAgIFNWR1BhdGhQYXJzZXJGYWN0b3J5KCk7CkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdQYXRoU2VnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoU2Vn
LmNwcAkocmV2aXNpb24gNjY5ODYpCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsOSArMzEsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBTVkdQYXRoU2VnOjphc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgp
IGNvbnN0Cit2b2lkIFNWR1BhdGhTZWc6OnVwZGF0ZUFzc29jaWF0ZWRQYXRoU2VnTGlzdCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIFNWR05hbWVzOjpkQXR0cjsKKyAgICBpZiAobV9wYXRoU2VnTGlz
dCkKKyAgICAgICAgbV9wYXRoU2VnTGlzdC0+dXBkYXRlUGF0aEVsZW1lbnQoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWcuaAkocmV2aXNpb24gNjY5ODYpCisrKyBX
ZWJDb3JlL3N2Zy9TVkdQYXRoU2VnLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIyLDYgKzIzLDggQEAKICNkZWZpbmUgU1ZHUGF0aFNlZ19oCiAKICNp
ZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNWR1BhdGhTZWdMaXN0LmgiCisKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTUwLDggKzUz
LDYgQEAgZW51bSBTVkdQYXRoU2VnVHlwZSB7CiAgICAgUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNT
bW9vdGhSZWwgPSAxOQogfTsKIAotY2xhc3MgUXVhbGlmaWVkTmFtZTsKLQogY2xhc3MgU1ZHUGF0
aFNlZyA6IHB1YmxpYyBSZWZDb3VudGVkPFNWR1BhdGhTZWc+IHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5TVkdQYXRoU2VnKCkgeyB9CkBAIC04MCwxOSArODEsMzIgQEAgcHVibGljOgogICAgICAg
ICBQQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9SRUwgPSBQYXRoU2VnQ3VydmVUb1F1
YWRyYXRpY1Ntb290aFJlbAogICAgIH07CiAKKyAgICB2b2lkIHNldEFzc29jaWF0ZWRQYXRoU2Vn
TGlzdChTVkdQYXRoU2VnTGlzdCogcGF0aFNlZ0xpc3QpIHsgbV9wYXRoU2VnTGlzdCA9IHBhdGhT
ZWdMaXN0OyB9CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCA9
IDA7CiAKLSAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgp
IGNvbnN0OworcHJvdGVjdGVkOgorICAgIHZvaWQgdXBkYXRlQXNzb2NpYXRlZFBhdGhTZWdMaXN0
KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU1ZHUGF0aFNlZ0xpc3QqIG1fcGF0aFNlZ0xpc3Q7
CiB9OwogCiBjbGFzcyBTVkdQYXRoU2VnU2luZ2xlQ29vcmQgOiBwdWJsaWMgU1ZHUGF0aFNlZyB7
IAogcHVibGljOgotICAgIHZvaWQgc2V0WChmbG9hdCB4KSB7IG1feCA9IHg7IH0KKyAgICB2b2lk
IHNldFgoZmxvYXQgeCkKKyAgICB7CisgICAgICAgIG1feCA9IHg7CisgICAgICAgIHVwZGF0ZUFz
c29jaWF0ZWRQYXRoU2VnTGlzdCgpOworICAgIH0KICAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1
cm4gbV94OyB9CiAKLSAgICB2b2lkIHNldFkoZmxvYXQgeSkgeyBtX3kgPSB5OyB9CisgICAgdm9p
ZCBzZXRZKGZsb2F0IHkpCisgICAgeworICAgICAgICBtX3kgPSB5OworICAgICAgICB1cGRhdGVB
c3NvY2lhdGVkUGF0aFNlZ0xpc3QoKTsKKyAgICB9CiAgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0
dXJuIG1feTsgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnQXJj
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0FyYy5oCShyZXZpc2lvbiA2
Njk4NikKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdBcmMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsMjUgKzQxLDUzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgewogICAgICAgICB9
CiAKLSAgICAgICAgdm9pZCBzZXRYKGZsb2F0IHgpIHsgbV94ID0geDsgfQorICAgICAgICB2b2lk
IHNldFgoZmxvYXQgeCkKKyAgICAgICAgeworICAgICAgICAJbV94ID0geDsKKwkgICAgICAgIHVw
ZGF0ZUFzc29jaWF0ZWRQYXRoU2VnTGlzdCgpOworICAgIAl9CiAgICAgICAgIGZsb2F0IHgoKSBj
b25zdCB7IHJldHVybiBtX3g7IH0KIAotICAgICAgICB2b2lkIHNldFkoZmxvYXQgeSkgeyBtX3kg
PSB5OyB9CisgICAgICAgIHZvaWQgc2V0WShmbG9hdCB5KQorICAgICAgICB7CisgICAgICAgIAlt
X3kgPSB5OworCSAgICAgICAgdXBkYXRlQXNzb2NpYXRlZFBhdGhTZWdMaXN0KCk7CisgICAgCX0K
ICAgICAgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQogCi0gICAgICAgIHZvaWQg
c2V0UjEoZmxvYXQgcjEpIHsgbV9yMSA9IHIxOyB9CisgICAgICAgIHZvaWQgc2V0UjEoZmxvYXQg
cjEpCisgICAgICAgIHsgCisgICAgICAgCQltX3IxID0gcjE7CisJICAgICAgICB1cGRhdGVBc3Nv
Y2lhdGVkUGF0aFNlZ0xpc3QoKTsKKyAgICAJfQogICAgICAgICBmbG9hdCByMSgpIGNvbnN0IHsg
cmV0dXJuIG1fcjE7IH0KIAotICAgICAgICB2b2lkIHNldFIyKGZsb2F0IHIyKSB7IG1fcjIgPSBy
MjsgfQorICAgICAgICB2b2lkIHNldFIyKGZsb2F0IHIyKQorICAgICAgICB7CisgICAgICAgIAlt
X3IyID0gcjI7CisJICAgICAgICB1cGRhdGVBc3NvY2lhdGVkUGF0aFNlZ0xpc3QoKTsKKyAgICAJ
fQogICAgICAgICBmbG9hdCByMigpIGNvbnN0IHsgcmV0dXJuIG1fcjI7IH0KIAotICAgICAgICB2
b2lkIHNldEFuZ2xlKGZsb2F0IGFuZ2xlKSB7IG1fYW5nbGUgPSBhbmdsZTsgfQorICAgICAgICB2
b2lkIHNldEFuZ2xlKGZsb2F0IGFuZ2xlKQorICAgICAgICB7CisgICAgICAgIAltX2FuZ2xlID0g
YW5nbGU7CisJICAgICAgICB1cGRhdGVBc3NvY2lhdGVkUGF0aFNlZ0xpc3QoKTsKKyAgICAJfQog
ICAgICAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGU7IH0KIAotICAgICAg
ICB2b2lkIHNldExhcmdlQXJjRmxhZyhib29sIGxhcmdlQXJjRmxhZykgeyBtX2xhcmdlQXJjRmxh
ZyA9IGxhcmdlQXJjRmxhZzsgfQorICAgICAgICB2b2lkIHNldExhcmdlQXJjRmxhZyhib29sIGxh
cmdlQXJjRmxhZykKKyAgICAgICAgeworICAgICAgICAJbV9sYXJnZUFyY0ZsYWcgPSBsYXJnZUFy
Y0ZsYWc7CisJICAgICAgICB1cGRhdGVBc3NvY2lhdGVkUGF0aFNlZ0xpc3QoKTsKKyAgICAJfQog
ICAgICAgICBib29sIGxhcmdlQXJjRmxhZygpIGNvbnN0IHsgcmV0dXJuIG1fbGFyZ2VBcmNGbGFn
OyB9CiAKLSAgICAgICAgdm9pZCBzZXRTd2VlcEZsYWcoYm9vbCBzd2VlcEZsYWcpIHsgbV9zd2Vl
cEZsYWcgPSBzd2VlcEZsYWc7IH0KKyAgICAgICAgdm9pZCBzZXRTd2VlcEZsYWcoYm9vbCBzd2Vl
cEZsYWcpCisgICAgICAgIHsKKyAgICAgICAgCW1fc3dlZXBGbGFnID0gc3dlZXBGbGFnOworCSAg
ICAgICAgdXBkYXRlQXNzb2NpYXRlZFBhdGhTZWdMaXN0KCk7CisgICAgCX0KICAgICAgICAgYm9v
bCBzd2VlcEZsYWcoKSBjb25zdCB7IHJldHVybiBtX3N3ZWVwRmxhZzsgfQogCiAgICAgcHJpdmF0
ZToKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmgJKHJldmlzaW9uIDY2OTg2
KQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiwyMiArMzIsNDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAg
ICAgICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYyhmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB4MSwg
ZmxvYXQgeTEsIGZsb2F0IHgyLCBmbG9hdCB5MikgOiBtX3goeCksIG1feSh5KSwgbV94MSh4MSks
IG1feTEoeTEpLCBtX3gyKHgyKSwgbV95Mih5MikgeyB9CiAKLSAgICAgICAgdm9pZCBzZXRYKGZs
b2F0IHgpIHsgbV94ID0geDsgfQorICAgICAgICB2b2lkIHNldFgoZmxvYXQgeCkKKyAgICAgICAg
eworICAgICAgICAJbV94ID0geDsKKwkgICAgICAgIHVwZGF0ZUFzc29jaWF0ZWRQYXRoU2VnTGlz
dCgpOworICAgIAl9CiAgICAgICAgIGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KIAot
ICAgICAgICB2b2lkIHNldFkoZmxvYXQgeSkgeyBtX3kgPSB5OyB9CisgICAgICAgIHZvaWQgc2V0
WShmbG9hdCB5KQorICAgICAgICB7CisgICAgICAgIAltX3kgPSB5OworCSAgICAgICAgdXBkYXRl
QXNzb2NpYXRlZFBhdGhTZWdMaXN0KCk7CisgICAgCX0KICAgICAgICAgZmxvYXQgeSgpIGNvbnN0
IHsgcmV0dXJuIG1feTsgfQogCi0gICAgICAgIHZvaWQgc2V0WDEoZmxvYXQgeDEpIHsgbV94MSA9
IHgxOyB9CisgICAgICAgIHZvaWQgc2V0WDEoZmxvYXQgeDEpCisgICAgICAgIHsKKyAgICAgICAg
CW1feDEgPSB4MTsKKwkgICAgICAgIHVwZGF0ZUFzc29jaWF0ZWRQYXRoU2VnTGlzdCgpOworICAg
IAl9CiAgICAgICAgIGZsb2F0IHgxKCkgY29uc3QgeyByZXR1cm4gbV94MTsgfQogCi0gICAgICAg
IHZvaWQgc2V0WTEoZmxvYXQgeTEpIHsgbV95MSA9IHkxOyB9CisgICAgICAgIHZvaWQgc2V0WTEo
ZmxvYXQgeTEpCisgICAgICAgIHsKKyAgICAgICAgCW1feTEgPSB5MTsKKwkgICAgICAgIHVwZGF0
ZUFzc29jaWF0ZWRQYXRoU2VnTGlzdCgpOworICAgIAl9CiAgICAgICAgIGZsb2F0IHkxKCkgY29u
c3QgeyByZXR1cm4gbV95MTsgfQogCi0gICAgICAgIHZvaWQgc2V0WDIoZmxvYXQgeDIpIHsgbV94
MiA9IHgyOyB9CisgICAgICAgIHZvaWQgc2V0WDIoZmxvYXQgeDIpCisgICAgICAgIHsKKyAgICAg
ICAgCW1feDIgPSB4MjsKKwkgICAgICAgIHVwZGF0ZUFzc29jaWF0ZWRQYXRoU2VnTGlzdCgpOwor
ICAgIAl9CiAgICAgICAgIGZsb2F0IHgyKCkgY29uc3QgeyByZXR1cm4gbV94MjsgfQogCi0gICAg
ICAgIHZvaWQgc2V0WTIoZmxvYXQgeTIpIHsgbV95MiA9IHkyOyB9CisgICAgICAgIHZvaWQgc2V0
WTIoZmxvYXQgeTIpCisgICAgICAgIHsKKyAgICAgICAgCW1feTIgPSB5MjsKKwkgICAgICAgIHVw
ZGF0ZUFzc29jaWF0ZWRQYXRoU2VnTGlzdCgpOworICAgIAl9CiAgICAgICAgIGZsb2F0IHkyKCkg
Y29uc3QgeyByZXR1cm4gbV95MjsgfQogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmgJKHJldmlzaW9uIDY2OTg2KQorKysgV2Vi
Q29yZS9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCwxNiArMzgsMzIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB7CiAgICAgICAg
IH0KIAotICAgICAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3ggPSB4OyB9CisgICAgICAgIHZv
aWQgc2V0WChmbG9hdCB4KQorICAgICAgICB7CisgICAgICAgICAgICBtX3ggPSB4OworCSAgICAg
ICAgdXBkYXRlQXNzb2NpYXRlZFBhdGhTZWdMaXN0KCk7CisgICAgCX0KICAgICAgICAgZmxvYXQg
eCgpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQogCi0gICAgICAgIHZvaWQgc2V0WShmbG9hdCB5KSB7
IG1feSA9IHk7IH0KKyAgICAgICAgdm9pZCBzZXRZKGZsb2F0IHkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1feSA9IHk7CisJICAgICAgICB1cGRhdGVBc3NvY2lhdGVkUGF0aFNlZ0xpc3QoKTsK
KyAgICAJfQogICAgICAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CiAKLSAgICAg
ICAgdm9pZCBzZXRYMihmbG9hdCB4MikgeyBtX3gyID0geDI7IH0KKyAgICAgICAgdm9pZCBzZXRY
MihmbG9hdCB4MikKKyAgICAgICAgeworICAgICAgICAgICAgbV94MiA9IHgyOworCSAgICAgICAg
dXBkYXRlQXNzb2NpYXRlZFBhdGhTZWdMaXN0KCk7CisgICAgCX0KICAgICAgICAgZmxvYXQgeDIo
KSBjb25zdCB7IHJldHVybiBtX3gyOyB9CiAKLSAgICAgICAgdm9pZCBzZXRZMihmbG9hdCB5Mikg
eyBtX3kyID0geTI7IH0KKyAgICAgICAgdm9pZCBzZXRZMihmbG9hdCB5MikKKyAgICAgICAgewor
ICAgICAgICAgICAgbV95MiA9IHkyOworCSAgICAgICAgdXBkYXRlQXNzb2NpYXRlZFBhdGhTZWdM
aXN0KCk7CisgICAgCX0KICAgICAgICAgZmxvYXQgeTIoKSBjb25zdCB7IHJldHVybiBtX3kyOyB9
CiAKICAgICBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpYy5oCShyZXZpc2lvbiA2Njk4NikKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRv
UXVhZHJhdGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDE2ICszOCwzMiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0WChmbG9h
dCB4KSB7IG1feCA9IHg7IH0KKyAgICAgICAgdm9pZCBzZXRYKGZsb2F0IHgpCisgICAgICAgIHsK
KyAgICAgICAgCW1feCA9IHg7CisJICAgICAgICB1cGRhdGVBc3NvY2lhdGVkUGF0aFNlZ0xpc3Qo
KTsKKyAgICAJfQogICAgICAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9CiAKLSAg
ICAgICAgdm9pZCBzZXRZKGZsb2F0IHkpIHsgbV95ID0geTsgfQorICAgICAgICB2b2lkIHNldFko
ZmxvYXQgeSkKKyAgICAgICAgeworICAgICAgICAJbV95ID0geTsKKwkgICAgICAgIHVwZGF0ZUFz
c29jaWF0ZWRQYXRoU2VnTGlzdCgpOworICAgIAl9CiAgICAgICAgIGZsb2F0IHkoKSBjb25zdCB7
IHJldHVybiBtX3k7IH0KIAotICAgICAgICB2b2lkIHNldFgxKGZsb2F0IHgxKSB7IG1feDEgPSB4
MTsgfQorICAgICAgICB2b2lkIHNldFgxKGZsb2F0IHgxKQorICAgICAgICB7CisgICAgICAgIAlt
X3gxID0geDE7CisJICAgICAgICB1cGRhdGVBc3NvY2lhdGVkUGF0aFNlZ0xpc3QoKTsKKyAgICAJ
fQogICAgICAgICBmbG9hdCB4MSgpIGNvbnN0IHsgcmV0dXJuIG1feDE7IH0KIAotICAgICAgICB2
b2lkIHNldFkxKGZsb2F0IHkxKSB7IG1feTEgPSB5MTsgfQorICAgICAgICB2b2lkIHNldFkxKGZs
b2F0IHkxKQorICAgICAgICB7CisgICAgICAgIAltX3kxID0geTE7CisJICAgICAgICB1cGRhdGVB
c3NvY2lhdGVkUGF0aFNlZ0xpc3QoKTsKKyAgICAJfQogICAgICAgICBmbG9hdCB5MSgpIGNvbnN0
IHsgcmV0dXJuIG1feTE7IH0KIAogICAgIHByaXZhdGU6CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQ
YXRoU2VnTGluZXRvSG9yaXpvbnRhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1Bh
dGhTZWdMaW5ldG9Ib3Jpem9udGFsLmgJKHJldmlzaW9uIDY2OTg2KQorKysgV2ViQ29yZS9zdmcv
U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIs
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHUGF0aFNl
Z0xpbmV0b0hvcml6b250YWwoZmxvYXQgeCkgOiBTVkdQYXRoU2VnKCksIG1feCh4KSB7fQogCi0g
ICAgICAgIHZvaWQgc2V0WChmbG9hdCB4KSB7IG1feCA9IHg7IH0KKyAgICAgICAgdm9pZCBzZXRY
KGZsb2F0IHgpCisgICAgICAgIHsKKyAgICAgICAgCW1feCA9IHg7CisJICAgICAgICB1cGRhdGVB
c3NvY2lhdGVkUGF0aFNlZ0xpc3QoKTsKKyAgICAJfQogICAgICAgICBmbG9hdCB4KCkgY29uc3Qg
eyByZXR1cm4gbV94OyB9CiAKICAgICBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aFNl
Z0xpbmV0b1ZlcnRpY2FsLmgJKHJldmlzaW9uIDY2OTg2KQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNWR1BhdGhTZWdMaW5ldG9W
ZXJ0aWNhbChmbG9hdCB5KSA6IFNWR1BhdGhTZWcoKSwgbV95KHkpIHt9CiAKLSAgICAgICAgdm9p
ZCBzZXRZKGZsb2F0IHkpIHsgbV95ID0geTsgfQorICAgICAgICB2b2lkIHNldFkoZmxvYXQgeSkK
KyAgICAgICAgeworICAgICAgICAJbV95ID0geTsKKwkgICAgICAgIHVwZGF0ZUFzc29jaWF0ZWRQ
YXRoU2VnTGlzdCgpOworICAgIAl9CiAgICAgICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBt
X3k7IH0KIAogICAgIHByaXZhdGU6CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3QuY3BwCShyZXZpc2lv
biA2Njk4NikKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsMTEgKzI3LDU5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHUGF0aFNl
Z0xpc3Q6OlNWR1BhdGhTZWdMaXN0KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUp
Ci0gICAgOiBTVkdMaXN0PFJlZlB0cjxTVkdQYXRoU2VnPiA+KGF0dHJpYnV0ZU5hbWUpCitTVkdQ
YXRoU2VnTGlzdDo6U1ZHUGF0aFNlZ0xpc3QoU1ZHUGF0aEVsZW1lbnQqIGVsZW1lbnQsIFNWR1Bh
dGhTZWdMaXN0VHlwZSBzZWdMaXN0VHlwZSkKKyAgICA6IFNWR0xpc3Q8UmVmUHRyPFNWR1BhdGhT
ZWc+ID4oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbnVsbEF0b20sIG51bGxBdG9tKSkKKyAgICAs
IG1fcGF0aEVsZW1lbnQoZWxlbWVudCkKKyAgICAsIG1fc2VnTGlzdFR5cGUoc2VnTGlzdFR5cGUp
CiB7CiB9CiAKK3ZvaWQgU1ZHUGF0aFNlZ0xpc3Q6OnVwZGF0ZVBhdGhFbGVtZW50KCkKK3sKKyAg
ICBBU1NFUlQobV9wYXRoRWxlbWVudCk7CisgICAgbV9wYXRoRWxlbWVudC0+dXBkYXRlUGF0aERh
dGFGcm9tU2VnTGlzdCh0aGlzKTsKK30KKworUmVmUHRyPFNWR1BhdGhTZWc+IFNWR1BhdGhTZWdM
aXN0OjppbnNlcnRJdGVtQmVmb3JlKFJlZlB0cjxTVkdQYXRoU2VnPiBuZXdTVkdQYXRoU2VnLCB1
bnNpZ25lZCBpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFJlZlB0cjxTVkdQ
YXRoU2VnPiBzZWdtZW50ID0gU1ZHTGlzdDxSZWZQdHI8U1ZHUGF0aFNlZz4gPjo6aW5zZXJ0SXRl
bUJlZm9yZShuZXdTVkdQYXRoU2VnLCBpbmRleCwgZWMpOworICAgIHNlZ21lbnQtPnNldEFzc29j
aWF0ZWRQYXRoU2VnTGlzdCh0aGlzKTsKKyAgICB1cGRhdGVQYXRoRWxlbWVudCgpOworICAgIHJl
dHVybiBzZWdtZW50OworfQorCitSZWZQdHI8U1ZHUGF0aFNlZz4gU1ZHUGF0aFNlZ0xpc3Q6OnJl
cGxhY2VJdGVtKFJlZlB0cjxTVkdQYXRoU2VnPiBuZXdTVkdQYXRoU2VnLCB1bnNpZ25lZCBpbnQg
aW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFJlZlB0cjxTVkdQYXRoU2VnPiBzZWdt
ZW50ID0gU1ZHTGlzdDxSZWZQdHI8U1ZHUGF0aFNlZz4gPjo6cmVwbGFjZUl0ZW0obmV3U1ZHUGF0
aFNlZywgaW5kZXgsIGVjKTsKKyAgICBzZWdtZW50LT5zZXRBc3NvY2lhdGVkUGF0aFNlZ0xpc3Qo
MCk7CisgICAgdXBkYXRlUGF0aEVsZW1lbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKK30KKwor
UmVmUHRyPFNWR1BhdGhTZWc+IFNWR1BhdGhTZWdMaXN0OjpyZW1vdmVJdGVtKHVuc2lnbmVkIGlu
dCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgUmVmUHRyPFNWR1BhdGhTZWc+IHNl
Z21lbnQgPSBTVkdMaXN0PFJlZlB0cjxTVkdQYXRoU2VnPiA+OjpyZW1vdmVJdGVtKGluZGV4LCBl
Yyk7CisgICAgc2VnbWVudC0+c2V0QXNzb2NpYXRlZFBhdGhTZWdMaXN0KDApOworICAgIHVwZGF0
ZVBhdGhFbGVtZW50KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7Cit9CisKK1JlZlB0cjxTVkdQYXRo
U2VnPiBTVkdQYXRoU2VnTGlzdDo6YXBwZW5kSXRlbShSZWZQdHI8U1ZHUGF0aFNlZz4gbmV3U1ZH
UGF0aFNlZywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgUmVmUHRyPFNWR1BhdGhTZWc+IHNl
Z21lbnQgPSBTVkdMaXN0PFJlZlB0cjxTVkdQYXRoU2VnPiA+OjphcHBlbmRJdGVtKG5ld1NWR1Bh
dGhTZWcsIGVjKTsKKyAgICBzZWdtZW50LT5zZXRBc3NvY2lhdGVkUGF0aFNlZ0xpc3QodGhpcyk7
CisgICAgdXBkYXRlUGF0aEVsZW1lbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKK30KKworLy8g
QXBwZW5kIEl0ZW0gd2l0aG91dCB1cGRhdGVpbmcgU1ZHUGF0aEVsZW1lbnQuCitSZWZQdHI8U1ZH
UGF0aFNlZz4gU1ZHUGF0aFNlZ0xpc3Q6OmFwcGVuZEl0ZW1TaWxlbnRseShSZWZQdHI8U1ZHUGF0
aFNlZz4gbmV3U1ZHUGF0aFNlZywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgUmVmUHRyPFNW
R1BhdGhTZWc+IHNlZ21lbnQgPSBTVkdMaXN0PFJlZlB0cjxTVkdQYXRoU2VnPiA+OjphcHBlbmRJ
dGVtKG5ld1NWR1BhdGhTZWcsIGVjKTsKKyAgICBzZWdtZW50LT5zZXRBc3NvY2lhdGVkUGF0aFNl
Z0xpc3QodGhpcyk7CisgICAgcmV0dXJuIHNlZ21lbnQ7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0LmgJKHJldmlzaW9uIDY2OTg2KQorKysgV2Vi
Q29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTggKzIyLDM3
IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR0xpc3QuaCIKKyNpbmNsdWRlICJT
VkdQYXRoRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1BhdGhTZWcuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitlbnVtIFNWR1BhdGhTZWdMaXN0VHlwZSB7CisgICAgdW5hbHRlcmVkU2VnTGlz
dCwKKyAgICBub3JtYWxpemVkU2VnTGlzdAorfTsKKwogY2xhc3MgU1ZHRWxlbWVudDsKK2NsYXNz
IFNWR1BhdGhFbGVtZW50OwogCiBjbGFzcyBTVkdQYXRoU2VnTGlzdCA6IHB1YmxpYyBTVkdMaXN0
PFJlZlB0cjxTVkdQYXRoU2VnPiA+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
VkdQYXRoU2VnTGlzdD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdQYXRoU2VnTGlzdChhdHRyaWJ1dGVOYW1lKSk7IH0K
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdQYXRoU2VnTGlzdD4gY3JlYXRlKFNWR1BhdGhFbGVt
ZW50KiBlbGVtZW50LCBTVkdQYXRoU2VnTGlzdFR5cGUgc2VnTGlzdFR5cGUpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTVkdQYXRoU2VnTGlzdChlbGVtZW50LCBzZWdMaXN0VHlwZSkpOyB9CisKKyAg
ICBSZWZQdHI8U1ZHUGF0aFNlZz4gaW5zZXJ0SXRlbUJlZm9yZShSZWZQdHI8U1ZHUGF0aFNlZz4s
IHVuc2lnbmVkIGludCwgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZlB0cjxTVkdQYXRoU2VnPiBy
ZXBsYWNlSXRlbShSZWZQdHI8U1ZHUGF0aFNlZz4sIHVuc2lnbmVkIGludCwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIFJlZlB0cjxTVkdQYXRoU2VnPiByZW1vdmVJdGVtKHVuc2lnbmVkIGludCwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIFJlZlB0cjxTVkdQYXRoU2VnPiBhcHBlbmRJdGVtKFJlZlB0cjxT
VkdQYXRoU2VnPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZlB0cjxTVkdQYXRoU2VnPiBhcHBl
bmRJdGVtU2lsZW50bHkoUmVmUHRyPFNWR1BhdGhTZWc+LCBFeGNlcHRpb25Db2RlJik7CisKKyAg
ICB2b2lkIHVwZGF0ZVBhdGhFbGVtZW50KCk7CisgICAgU1ZHUGF0aFNlZ0xpc3RUeXBlIHNlZ0xp
c3RUeXBlKCkgeyByZXR1cm4gbV9zZWdMaXN0VHlwZTsgfQogCiBwcml2YXRlOgotICAgIFNWR1Bh
dGhTZWdMaXN0KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICBTVkdQYXRoU2VnTGlzdChTVkdQ
YXRoRWxlbWVudCosIFNWR1BhdGhTZWdMaXN0VHlwZSk7CisgICAKKyAgICBTVkdQYXRoRWxlbWVu
dCogbV9wYXRoRWxlbWVudDsKKyAgICBTVkdQYXRoU2VnTGlzdFR5cGUgbV9zZWdMaXN0VHlwZTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhT
ZWdMaXN0QnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xp
c3RCdWlsZGVyLmNwcAkocmV2aXNpb24gNjY5ODYpCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoU2Vn
TGlzdEJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIHZvaWQgU1ZH
UGF0aFNlZ0xpc3RCdWlsZGVyOjptb3ZlVG8oY29uc3QKICAgICBBU1NFUlQobV9wYXRoU2VnTGlz
dCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVD
b29yZGluYXRlcykKLSAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbShTVkdQYXRoRWxl
bWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ01vdmV0b0Ficyh0YXJnZXRQb2ludC54KCksIHRhcmdldFBv
aW50LnkoKSksIGVjKTsKKyAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbVNpbGVudGx5
KFNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnTW92ZXRvQWJzKHRhcmdldFBvaW50Lngo
KSwgdGFyZ2V0UG9pbnQueSgpKSwgZWMpOwogICAgIGVsc2UKLSAgICAgICAgbV9wYXRoU2VnTGlz
dC0+YXBwZW5kSXRlbShTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ01vdmV0b1JlbCh0
YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSksIGVjKTsKKyAgICAgICAgbV9wYXRoU2Vn
TGlzdC0+YXBwZW5kSXRlbVNpbGVudGx5KFNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2Vn
TW92ZXRvUmVsKHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSwgZWMpOwogICAgIEFT
U0VSVCghZWMpOwogfQogCkBAIC02Myw5ICs2Myw5IEBAIHZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWls
ZGVyOjpsaW5lVG8oY29uc3QKICAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKLSAg
ICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbShTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZH
UGF0aFNlZ0xpbmV0b0Ficyh0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSksIGVjKTsK
KyAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbVNpbGVudGx5KFNWR1BhdGhFbGVtZW50
OjpjcmVhdGVTVkdQYXRoU2VnTGluZXRvQWJzKHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQu
eSgpKSwgZWMpOwogICAgIGVsc2UKLSAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbShT
VkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1JlbCh0YXJnZXRQb2ludC54KCks
IHRhcmdldFBvaW50LnkoKSksIGVjKTsKKyAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRl
bVNpbGVudGx5KFNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnTGluZXRvUmVsKHRhcmdl
dFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSwgZWMpOwogICAgIEFTU0VSVCghZWMpOwogfQog
CkBAIC03NCw5ICs3NCw5IEBAIHZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpsaW5lVG9Ib3Jp
em8KICAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKLSAgICAgICAgbV9wYXRoU2Vn
TGlzdC0+YXBwZW5kSXRlbShTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0hv
cml6b250YWxBYnMoeCksIGVjKTsKKyAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbVNp
bGVudGx5KFNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFi
cyh4KSwgZWMpOwogICAgIGVsc2UKLSAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbShT
VkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwoeCksIGVj
KTsKKyAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbVNpbGVudGx5KFNWR1BhdGhFbGVt
ZW50OjpjcmVhdGVTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbCh4KSwgZWMpOwogICAgIEFT
U0VSVCghZWMpOwogfQogCkBAIC04NSw5ICs4NSw5IEBAIHZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWls
ZGVyOjpsaW5lVG9WZXJ0aWMKICAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKLSAg
ICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbShTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZH
UGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzKHkpLCBlYyk7CisgICAgICAgIG1fcGF0aFNlZ0xpc3Qt
PmFwcGVuZEl0ZW1TaWxlbnRseShTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0xpbmV0
b1ZlcnRpY2FsQWJzKHkpLCBlYyk7CiAgICAgZWxzZQotICAgICAgICBtX3BhdGhTZWdMaXN0LT5h
cHBlbmRJdGVtKFNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnTGluZXRvVmVydGljYWxS
ZWwoeSksIGVjKTsKKyAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbVNpbGVudGx5KFNW
R1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwoeSksIGVjKTsK
ICAgICBBU1NFUlQoIWVjKTsKIH0KIApAQCAtOTYsOSArOTYsOSBAQCB2b2lkIFNWR1BhdGhTZWdM
aXN0QnVpbGRlcjo6Y3VydmVUb0N1YmljCiAgICAgQVNTRVJUKG1fcGF0aFNlZ0xpc3QpOwogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGlmIChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0
ZXMpCi0gICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZEl0ZW0oU1ZHUGF0aEVsZW1lbnQ6OmNy
ZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnModGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2lu
dC55KCksIHBvaW50MS54KCksIHBvaW50MS55KCksIHBvaW50Mi54KCksIHBvaW50Mi55KCkpLCBl
Yyk7CisgICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZEl0ZW1TaWxlbnRseShTVkdQYXRoRWxl
bWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyh0YXJnZXRQb2ludC54KCksIHRh
cmdldFBvaW50LnkoKSwgcG9pbnQxLngoKSwgcG9pbnQxLnkoKSwgcG9pbnQyLngoKSwgcG9pbnQy
LnkoKSksIGVjKTsKICAgICBlbHNlCi0gICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZEl0ZW0o
U1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwodGFyZ2V0UG9p
bnQueCgpLCB0YXJnZXRQb2ludC55KCksIHBvaW50MS54KCksIHBvaW50MS55KCksIHBvaW50Mi54
KCksIHBvaW50Mi55KCkpLCBlYyk7CisgICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZEl0ZW1T
aWxlbnRseShTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCh0
YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSwgcG9pbnQxLngoKSwgcG9pbnQxLnkoKSwg
cG9pbnQyLngoKSwgcG9pbnQyLnkoKSksIGVjKTsKICAgICBBU1NFUlQoIWVjKTsKIH0KIApAQCAt
MTA3LDkgKzEwNyw5IEBAIHZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMK
ICAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKLSAgICAgICAgbV9wYXRoU2VnTGlz
dC0+YXBwZW5kSXRlbShTVkdQYXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJp
Y1Ntb290aEFicyh0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSwgcG9pbnQyLngoKSwg
cG9pbnQyLnkoKSksIGVjKTsKKyAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbVNpbGVu
dGx5KFNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJz
KHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpLCBwb2ludDIueCgpLCBwb2ludDIueSgp
KSwgZWMpOwogICAgIGVsc2UKLSAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbShTVkdQ
YXRoRWxlbWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCh0YXJnZXRQ
b2ludC54KCksIHRhcmdldFBvaW50LnkoKSwgcG9pbnQyLngoKSwgcG9pbnQyLnkoKSksIGVjKTsK
KyAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRlbVNpbGVudGx5KFNWR1BhdGhFbGVtZW50
OjpjcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKHRhcmdldFBvaW50LngoKSwg
dGFyZ2V0UG9pbnQueSgpLCBwb2ludDIueCgpLCBwb2ludDIueSgpKSwgZWMpOwogICAgIEFTU0VS
VCghZWMpOwogfQogCkBAIC0xMTgsOSArMTE4LDkgQEAgdm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxk
ZXI6OmN1cnZlVG9RdWFkcgogICAgIEFTU0VSVChtX3BhdGhTZWdMaXN0KTsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBpZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQotICAg
ICAgICBtX3BhdGhTZWdMaXN0LT5hcHBlbmRJdGVtKFNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficyh0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50Lnko
KSwgcG9pbnQxLngoKSwgcG9pbnQxLnkoKSksIGVjKTsKKyAgICAgICAgbV9wYXRoU2VnTGlzdC0+
YXBwZW5kSXRlbVNpbGVudGx5KFNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY0Ficyh0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSwgcG9pbnQxLngo
KSwgcG9pbnQxLnkoKSksIGVjKTsKICAgICBlbHNlCi0gICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFw
cGVuZEl0ZW0oU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
UmVsKHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpLCBwb2ludDEueCgpLCBwb2ludDEu
eSgpKSwgZWMpOworICAgICAgICBtX3BhdGhTZWdMaXN0LT5hcHBlbmRJdGVtU2lsZW50bHkoU1ZH
UGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsKHRhcmdldFBv
aW50LngoKSwgdGFyZ2V0UG9pbnQueSgpLCBwb2ludDEueCgpLCBwb2ludDEueSgpKSwgZWMpOwog
ICAgIEFTU0VSVCghZWMpOwogfQogCkBAIC0xMjksOSArMTI5LDkgQEAgdm9pZCBTVkdQYXRoU2Vn
TGlzdEJ1aWxkZXI6OmN1cnZlVG9RdWFkcgogICAgIEFTU0VSVChtX3BhdGhTZWdMaXN0KTsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5h
dGVzKQotICAgICAgICBtX3BhdGhTZWdMaXN0LT5hcHBlbmRJdGVtKFNWR1BhdGhFbGVtZW50Ojpj
cmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicyh0YXJnZXRQb2ludC54KCks
IHRhcmdldFBvaW50LnkoKSksIGVjKTsKKyAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kSXRl
bVNpbGVudGx5KFNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y1Ntb290aEFicyh0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSksIGVjKTsKICAgICBl
bHNlCi0gICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZEl0ZW0oU1ZHUGF0aEVsZW1lbnQ6OmNy
ZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsKHRhcmdldFBvaW50LngoKSwg
dGFyZ2V0UG9pbnQueSgpKSwgZWMpOworICAgICAgICBtX3BhdGhTZWdMaXN0LT5hcHBlbmRJdGVt
U2lsZW50bHkoU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
U21vb3RoUmVsKHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSwgZWMpOwogICAgIEFT
U0VSVCghZWMpOwogfQogCkBAIC0xNDAsOSArMTQwLDkgQEAgdm9pZCBTVkdQYXRoU2VnTGlzdEJ1
aWxkZXI6OmFyY1RvKGZsb2F0IAogICAgIEFTU0VSVChtX3BhdGhTZWdMaXN0KTsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQot
ICAgICAgICBtX3BhdGhTZWdMaXN0LT5hcHBlbmRJdGVtKFNWR1BhdGhFbGVtZW50OjpjcmVhdGVT
VkdQYXRoU2VnQXJjQWJzKHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpLCByMSwgcjIs
IGFuZ2xlLCBsYXJnZUFyY0ZsYWcsIHN3ZWVwRmxhZyksIGVjKTsKKyAgICAgICAgbV9wYXRoU2Vn
TGlzdC0+YXBwZW5kSXRlbVNpbGVudGx5KFNWR1BhdGhFbGVtZW50OjpjcmVhdGVTVkdQYXRoU2Vn
QXJjQWJzKHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpLCByMSwgcjIsIGFuZ2xlLCBs
YXJnZUFyY0ZsYWcsIHN3ZWVwRmxhZyksIGVjKTsKICAgICBlbHNlCi0gICAgICAgIG1fcGF0aFNl
Z0xpc3QtPmFwcGVuZEl0ZW0oU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdBcmNSZWwo
dGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCksIHIxLCByMiwgYW5nbGUsIGxhcmdlQXJj
RmxhZywgc3dlZXBGbGFnKSwgZWMpOworICAgICAgICBtX3BhdGhTZWdMaXN0LT5hcHBlbmRJdGVt
U2lsZW50bHkoU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdBcmNSZWwodGFyZ2V0UG9p
bnQueCgpLCB0YXJnZXRQb2ludC55KCksIHIxLCByMiwgYW5nbGUsIGxhcmdlQXJjRmxhZywgc3dl
ZXBGbGFnKSwgZWMpOwogICAgIEFTU0VSVCghZWMpOwogfQogCkBAIC0xNTAsNyArMTUwLDcgQEAg
dm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6OmNsb3NlUGF0aCgpCiB7CiAgICAgQVNTRVJUKG1f
cGF0aFNlZ0xpc3QpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIG1fcGF0aFNlZ0xp
c3QtPmFwcGVuZEl0ZW0oU1ZHUGF0aEVsZW1lbnQ6OmNyZWF0ZVNWR1BhdGhTZWdDbG9zZVBhdGgo
KSwgZWMpOworICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZEl0ZW1TaWxlbnRseShTVkdQYXRoRWxl
bWVudDo6Y3JlYXRlU1ZHUGF0aFNlZ0Nsb3NlUGF0aCgpLCBlYyk7CiAgICAgQVNTRVJUKCFlYyk7
CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>