<?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>47254</bug_id>
          
          <creation_ts>2010-10-06 03:45:58 -0700</creation_ts>
          <short_desc>Only execute first SVG text layout phase if needed</short_desc>
          <delta_ts>2010-10-06 05:30:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>mdelaney7</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>290177</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-06 03:45:58 -0700</bug_when>
    <thetext>Only if x/y/dx/dy/rotate values change or the style of a RenderSVGInlineText rendere, or the text content itself, the first layout phase needs to be executed from RenderSVGText::layout().
It&apos;s currently done on every layout, wasting time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290180</commentid>
    <comment_count>1</comment_count>
      <attachid>69919</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-06 03:52:11 -0700</bug_when>
    <thetext>Created attachment 69919
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290222</commentid>
    <comment_count>2</comment_count>
      <attachid>69919</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-06 05:23:47 -0700</bug_when>
    <thetext>Comment on attachment 69919
Patch

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

Please look if the Renderer in ResourceGradient can&apos;t be const. Otherwise looks good. r=me

&gt; WebCore/ChangeLog:24
&gt; +        (WebCore::RenderSVGInline::objectBoundingBox): adapt to renames, use RenderSVGText::locateRenderSVGTextAncestor().

s/adapt/Adapt/

&gt; WebCore/rendering/RenderSVGResourceGradient.cpp:81
&gt; -                                                           const RenderObject* object)
&gt; +                                                           RenderObject* object)
&gt;  {
&gt; -    const RenderObject* textRootBlock = SVGRenderSupport::findTextRootObject(object);
&gt; +    RenderObject* textRootBlock = RenderSVGText::locateRenderSVGTextAncestor(object);

Why not const RenderObject*?

&gt; WebCore/rendering/RenderSVGResourceGradient.cpp:115
&gt; -                                             const RenderObject* object,
&gt; +                                             RenderObject* object,
&gt;                                               GradientData* gradientData)
&gt;  {
&gt; -    const RenderObject* textRootBlock = SVGRenderSupport::findTextRootObject(object);
&gt; +    RenderObject* textRootBlock = RenderSVGText::locateRenderSVGTextAncestor(object);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290227</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-06 05:26:47 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 69919 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69919&amp;action=review
&gt; 
&gt; Please look if the Renderer in ResourceGradient can&apos;t be const. Otherwise looks good. r=me
I made it non-const on purpose. The parameter that&apos;s passed to this function is a &quot;RenderObject*&quot;, prior to this patch, we converted it to a &quot;const RenderObject*&quot;, I basically fixed this round trip.

&gt; 
&gt; &gt; WebCore/ChangeLog:24
&gt; &gt; +        (WebCore::RenderSVGInline::objectBoundingBox): adapt to renames, use RenderSVGText::locateRenderSVGTextAncestor().
&gt; 
&gt; s/adapt/Adapt/
Fixed.

&gt; 
&gt; &gt; WebCore/rendering/RenderSVGResourceGradient.cpp:81
&gt; &gt; -                                                           const RenderObject* object)
&gt; &gt; +                                                           RenderObject* object)
&gt; &gt;  {
&gt; &gt; -    const RenderObject* textRootBlock = SVGRenderSupport::findTextRootObject(object);
&gt; &gt; +    RenderObject* textRootBlock = RenderSVGText::locateRenderSVGTextAncestor(object);
&gt; 
&gt; Why not const RenderObject*?
&gt; 
&gt; &gt; WebCore/rendering/RenderSVGResourceGradient.cpp:115
&gt; &gt; -                                             const RenderObject* object,
&gt; &gt; +                                             RenderObject* object,
&gt; &gt;                                               GradientData* gradientData)
&gt; &gt;  {
&gt; &gt; -    const RenderObject* textRootBlock = SVGRenderSupport::findTextRootObject(object);
&gt; &gt; +    RenderObject* textRootBlock = RenderSVGText::locateRenderSVGTextAncestor(object);
&gt; 
&gt; Ditto.

As I said before, the param passed to both of this functions is actually a RenderObject*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290230</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-06 05:30:14 -0700</bug_when>
    <thetext>Thanks for the review. Landed in r69186.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69919</attachid>
            <date>2010-10-06 03:52:11 -0700</date>
            <delta_ts>2010-10-06 05:23:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>TextLayoutSpeedup.diff</filename>
            <type>text/plain</type>
            <size>20017</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTE4MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMTAtMTAtMDYgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgT25seSBleGVjdXRlIGZpcnN0IFNWRyB0ZXh0IGxheW91dCBwaGFzZSBpZiBuZWVkZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MjU0CisK
KyAgICAgICAgVGhlIGZpcnN0IFNWRyB0ZXh0IGxheW91dCBwaGFzZSB3aGljaCBjb21wdXRlcyB0
aGUgcGVyLWNoYXJhY3RlciBtZXRyaWNzIGFuZCBleHRyYWN0cworICAgICAgICB0aGUgeC95L2R4
L2R5L3JvdGF0ZSB2YWx1ZXMgZnJvbSB0aGUgU1ZHIERPTSBpcyBjdXJyZW50bHkgZXhlY3V0ZWQg
dXBvbiBldmVyeSBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKSBjYWxsLgorCisgICAgICAgIE9wdGlt
aXplIHRoaXMsIGJ5IG9ubHkgY2FsbGluZyBpdDoKKyAgICAgICAgLSBpZiB4L3kvZHgvZHkvcm90
YXRlIHZhbHVlIGxpc3RzIGNoYW5nZQorICAgICAgICAtIHRoZSBzdHlsZSBvZiBhIFJlbmRlclNW
R0lubGluZVRleHQgY2hhbmdlcyAoZWcuIGZvbnQtc2l6ZSBjaGFuZ2VzIGluZmx1ZW5jZSBtZXRy
aWNzKQorICAgICAgICAtIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYW55IG9mIHRoZSBjaGlsZHJlbiBp
biB0aGUgPHRleHQ+IHN1YnRyZWUgY2hhbmdlCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGxheW91
dCB0ZXN0cywgYSBwdXJlIHBlcmZvcm1hbmNlIGNoYW5nZSAtIGNvdmVyZWQgYnkgZXhpc3Rpbmcg
dGVzdHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYXNrQW5kU3dhcENvbnRleHRGb3JUZXh0R3Jh
ZGllbnQpOiBBZGFwdCB0byByZW5hbWVzLCB1c2UgUmVuZGVyU1ZHVGV4dDo6bG9jYXRlUmVuZGVy
U1ZHVGV4dEFuY2VzdG9yKCkuCisgICAgICAgIChXZWJDb3JlOjpjbGlwVG9UZXh0TWFzayk6IERp
dHRvLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAg
KiByZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5oOiBNb3ZlIGZpbmRUcmVlUm9vdE9iamVjdCB0
byBSZW5kZXJTVkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IoKS4KKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdJbmxpbmU6Om9iamVjdEJvdW5kaW5nQm94KTogYWRhcHQgdG8gcmVuYW1lcywgdXNl
IFJlbmRlclNWR1RleHQ6OmxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3RvcigpLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lOjpzdHJva2VCb3VuZGluZ0JveCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lOjphYnNvbHV0
ZVF1YWRzKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGluZVRleHQ6OnN0eWxlRGlk
Q2hhbmdlKTogQ2FsbCBzZXROZWVkc1Bvc2l0aW9uaW5nVmFsdWVzVXBkYXRlKCkgb24gdGhlIFJl
bmRlclNWR1RleHQgcm9vdCBvYmplY3QsIGlmIGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0
LgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjpSZW5kZXJTVkdUZXh0KTogSW5pdGlhbGl6ZSBtX25lZWRz
UG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0
Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IpOiBOZXcgaGVscGVyIGZ1bmN0aW9uLCBtb3Zl
ZCBmcm9tIFNWR1JlbmRlclN1cHBvcnQsIHRvIGEgbW9yZSBzZW5zaWJsZSBwbGFjZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OmxheW91dCk6IE9ubHkgZXhlY3V0ZSB0aGUgZmly
c3QgU1ZHIHRleHQgbGF5b3V0IHBoYXNlLCBpZiBtX25lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRh
dGU9dHJ1ZS4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OnNldE5lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9SZW5kZXJTVkdUZXh0KTogQWRkIG5ldyBoZWxwZXIg
Y2FzdGluZyBtZXRob2RzLCBsaWtlIG1vc3Qgb3RoZXIgcmVuZGVyZXJzIGhhdmUuCisgICAgICAg
ICogc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
dXBkYXRlUG9zaXRpb25pbmdWYWx1ZXNJblJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOiBJZiB4L3kvZHgv
ZHkvcm90YXRlIGNoYW5nZXMsIGNhbGwgc2V0TmVlZHNQb3NpdGlvbmluZ1ZhbHVlc1VwZGF0ZSBv
biB0aGUgUmVuZGVyU1ZHVGV4dCByb290IG9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rl
eHRQb3NpdGlvbmluZ0VsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6IElmIGFueSBjaGlsZHJlbiBj
aGFuZ2VzIChhZGRpdGlvbiwgcmVtb3ZhbCksIGRvIHRoZSBzYW1lLgorICAgICAgICAqIHN2Zy9T
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50Lmg6CisKIDIwMTAtMTAtMDYgIERpcmsgU2NodWx6ZSAg
PGtyaXRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOaWtvbGFzIFppbW1lcm1h
bm4uCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRp
ZW50LmNwcAkocmV2aXNpb24gNjg5NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+Ci0gKiAgICAgICAgICAgICAgIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
LSAqICAgICAgICAgICAgICAgMjAwOCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkdyYWRpZW50
QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJl
bmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJTVkdJbWFnZUJ1ZmZlclRvb2xzLmgiCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgpAQCAt
NzUsOSArNzYsOSBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnJlbW92ZUNsCiBz
dGF0aWMgaW5saW5lIGJvb2wgY3JlYXRlTWFza0FuZFN3YXBDb250ZXh0Rm9yVGV4dEdyYWRpZW50
KEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dComIHNhdmVkQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRl
ck9iamVjdCogb2JqZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICBjb25zdCBS
ZW5kZXJPYmplY3QqIHRleHRSb290QmxvY2sgPSBTVkdSZW5kZXJTdXBwb3J0OjpmaW5kVGV4dFJv
b3RPYmplY3Qob2JqZWN0KTsKKyAgICBSZW5kZXJPYmplY3QqIHRleHRSb290QmxvY2sgPSBSZW5k
ZXJTVkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3Iob2JqZWN0KTsKICAgICBBU1NF
UlQodGV4dFJvb3RCbG9jayk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zv
cm07CkBAIC0xMDgsMTAgKzEwOSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY3JlYXRlTWFza0Fu
ZFN3YXBDb250CiBzdGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSBjbGlwVG9UZXh0TWFzayhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVjdCYgdGFyZ2V0UmVj
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJl
bmRlck9iamVjdCogb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHcmFkaWVudERhdGEqIGdyYWRpZW50RGF0YSkKIHsKLSAgICBj
b25zdCBSZW5kZXJPYmplY3QqIHRleHRSb290QmxvY2sgPSBTVkdSZW5kZXJTdXBwb3J0OjpmaW5k
VGV4dFJvb3RPYmplY3Qob2JqZWN0KTsKKyAgICBSZW5kZXJPYmplY3QqIHRleHRSb290QmxvY2sg
PSBSZW5kZXJTVkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3Iob2JqZWN0KTsKICAg
ICBBU1NFUlQodGV4dFJvb3RCbG9jayk7CiAKICAgICB0YXJnZXRSZWN0ID0gdGV4dFJvb3RCbG9j
ay0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1NWR1JlbmRlclN1cHBvcnQuY3BwCShyZXZpc2lvbiA2ODk3NCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDcsMTYgKzM0Nyw2
IEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVQKICAgICB9CiB9CiAK
LWNvbnN0IFJlbmRlck9iamVjdCogU1ZHUmVuZGVyU3VwcG9ydDo6ZmluZFRleHRSb290T2JqZWN0
KGNvbnN0IFJlbmRlck9iamVjdCogc3RhcnQpCi17Ci0gICAgd2hpbGUgKHN0YXJ0ICYmICFzdGFy
dC0+aXNTVkdUZXh0KCkpCi0gICAgICAgIHN0YXJ0ID0gc3RhcnQtPnBhcmVudCgpOwotICAgIEFT
U0VSVChzdGFydCk7Ci0gICAgQVNTRVJUKHN0YXJ0LT5pc1NWR1RleHQoKSk7Ci0KLSAgICByZXR1
cm4gc3RhcnQ7Ci19Ci0KIH0KIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdS
ZW5kZXJTdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVy
U3VwcG9ydC5oCShyZXZpc2lvbiA2ODk3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRl
clN1cHBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNiBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlck9iamVjdCopOwogCiAgICAgLy8gRklYTUU6
IFRoZXNlIG1ldGhvZHMgZG8gbm90IGJlbG9uZyBoZXJlLgotICAgIHN0YXRpYyBjb25zdCBSZW5k
ZXJPYmplY3QqIGZpbmRUZXh0Um9vdE9iamVjdChjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0KTsK
ICAgICBzdGF0aWMgY29uc3QgUmVuZGVyU1ZHUm9vdCogZmluZFRyZWVSb290T2JqZWN0KGNvbnN0
IFJlbmRlck9iamVjdCogc3RhcnQpOwogCiBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAJKHJldmlzaW9uIDY4OTc0KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOCAr
MSw3IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0Lgot
ICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50
ZXJidXJ5LmFjLm56PgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsNiAr
MjYsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5oIgogCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAjaW5jbHVkZSAiU1ZH
SW5saW5lRmxvd0JveC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NSw3ICs0NSw3IEBA
IElubGluZUZsb3dCb3gqIFJlbmRlclNWR0lubGluZTo6Y3JlYXRlSW4KIAogRmxvYXRSZWN0IFJl
bmRlclNWR0lubGluZTo6b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdAogewotICAgIGlmIChjb25z
dCBSZW5kZXJPYmplY3QqIG9iamVjdCA9IFNWR1JlbmRlclN1cHBvcnQ6OmZpbmRUZXh0Um9vdE9i
amVjdCh0aGlzKSkKKyAgICBpZiAoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBSZW5kZXJT
VkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IodGhpcykpCiAgICAgICAgIHJldHVy
biBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CiAKICAgICByZXR1cm4gRmxvYXRSZWN0KCk7
CkBAIC01Myw3ICs1Myw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdJbmxpbmU6Om9iamVjdEJvdW5k
aW4KIAogRmxvYXRSZWN0IFJlbmRlclNWR0lubGluZTo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25z
dAogewotICAgIGlmIChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCA9IFNWR1JlbmRlclN1cHBv
cnQ6OmZpbmRUZXh0Um9vdE9iamVjdCh0aGlzKSkKKyAgICBpZiAoY29uc3QgUmVuZGVyT2JqZWN0
KiBvYmplY3QgPSBSZW5kZXJTVkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IodGhp
cykpCiAgICAgICAgIHJldHVybiBvYmplY3QtPnN0cm9rZUJvdW5kaW5nQm94KCk7CiAKICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CkBAIC02MSw3ICs2MSw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdJ
bmxpbmU6OnN0cm9rZUJvdW5kaW4KIAogRmxvYXRSZWN0IFJlbmRlclNWR0lubGluZTo6cmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdAogewotICAgIGlmIChjb25zdCBSZW5kZXJP
YmplY3QqIG9iamVjdCA9IFNWR1JlbmRlclN1cHBvcnQ6OmZpbmRUZXh0Um9vdE9iamVjdCh0aGlz
KSkKKyAgICBpZiAoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBSZW5kZXJTVkdUZXh0Ojps
b2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IodGhpcykpCiAgICAgICAgIHJldHVybiBvYmplY3Qt
PnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAKICAgICByZXR1cm4gRmxvYXRSZWN0
KCk7CkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgUmVuZGVyU1ZHSW5saW5lOjptYXBMb2NhbFRvQ29u
dGFpbmUKIAogdm9pZCBSZW5kZXJTVkdJbmxpbmU6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mIHF1YWRzKQogewotICAgIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0ID0gU1ZHUmVu
ZGVyU3VwcG9ydDo6ZmluZFRleHRSb290T2JqZWN0KHRoaXMpOworICAgIFJlbmRlck9iamVjdCog
b2JqZWN0ID0gUmVuZGVyU1ZHVGV4dDo6bG9jYXRlUmVuZGVyU1ZHVGV4dEFuY2VzdG9yKHRoaXMp
OwogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDY4OTc2KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDEwICsxLDkgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IHByb2plY3QuCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxv
amgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+Ci0gKiAgICAgICAgICAgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIgSW5jLgotICogICAgICAgICAgIChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgotICogICAgICAgICAgIChDKSAyMDA4IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jvb3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAjaW5jbHVkZSAiU1ZHSW5s
aW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIKICNpbmNsdWRlICJW
aXNpYmxlUG9zaXRpb24uaCIKQEAgLTcxLDYgKzcxLDEyIEBAIHZvaWQgUmVuZGVyU1ZHSW5saW5l
VGV4dDo6c3R5bGVEaWRDaGFuZ2UKIHsKICAgICBSZW5kZXJUZXh0OjpzdHlsZURpZENoYW5nZShk
aWZmLCBvbGRTdHlsZSk7CiAKKyAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQp
IHsKKyAgICAgICAgLy8gVGhlIHRleHQgbWV0cmljcyBtYXkgYmUgaW5mbHVlbmNlZCBieSBzdHls
ZSBjaGFuZ2VzLgorICAgICAgICBpZiAoUmVuZGVyU1ZHVGV4dCogdGV4dFJlbmRlcmVyID0gUmVu
ZGVyU1ZHVGV4dDo6bG9jYXRlUmVuZGVyU1ZHVGV4dEFuY2VzdG9yKHRoaXMpKQorICAgICAgICAg
ICAgdGV4dFJlbmRlcmVyLT5zZXROZWVkc1Bvc2l0aW9uaW5nVmFsdWVzVXBkYXRlKCk7CisgICAg
fQorCiAgICAgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlID0gc3R5bGUoKTsKICAgICBpZiAo
IW5ld1N0eWxlIHx8IG5ld1N0eWxlLT53aGl0ZVNwYWNlKCkgIT0gUFJFKQogICAgICAgICByZXR1
cm47CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lv
biA2ODk3NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMiArMSwxMSBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgcHJvamVjdC4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KLSAqICAgICAgICAgICAgICAgMjAwNiBBbGV4YW5kZXIgS2VsbGV0dCA8bHlw
YW5vdkBrZGUub3JnPgotICogICAgICAgICAgICAgICAyMDA2IE9saXZlciBIdW50IDxvamgxNkBz
dHVkZW50LmNhbnRlcmJ1cnkuYWMubno+Ci0gKiAgICAgICAgICAgICAgIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiAgICAgICAgICAgICAgIDIwMDggUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqICAgICAgICAgICAgICAgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4YW5kZXIgS2VsbGV0
dCA8bHlwYW5vdkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxv
amgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtNTMsMTAgKzUyLDMxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyU1ZHVGV4
dDo6UmVuZGVyU1ZHVGV4dChTVkdUZXh0RWxlbWVudCogbm9kZSkgCiAgICAgOiBSZW5kZXJTVkdC
bG9jayhub2RlKQorICAgICwgbV9uZWVkc1Bvc2l0aW9uaW5nVmFsdWVzVXBkYXRlKHRydWUpCiAg
ICAgLCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlKHRydWUpCiB7CiB9CiAKK1JlbmRlclNWR1RleHQq
IFJlbmRlclNWR1RleHQ6OmxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3RvcihSZW5kZXJPYmplY3Qq
IHN0YXJ0KQoreworICAgIEFTU0VSVChzdGFydCk7CisgICAgd2hpbGUgKHN0YXJ0ICYmICFzdGFy
dC0+aXNTVkdUZXh0KCkpCisgICAgICAgIHN0YXJ0ID0gc3RhcnQtPnBhcmVudCgpOworICAgIGlm
ICghc3RhcnQgfHwgIXN0YXJ0LT5pc1NWR1RleHQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIHRvUmVuZGVyU1ZHVGV4dChzdGFydCk7Cit9CisKK2NvbnN0IFJlbmRlclNWR1RleHQq
IFJlbmRlclNWR1RleHQ6OmxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3Rvcihjb25zdCBSZW5kZXJP
YmplY3QqIHN0YXJ0KQoreworICAgIEFTU0VSVChzdGFydCk7CisgICAgd2hpbGUgKHN0YXJ0ICYm
ICFzdGFydC0+aXNTVkdUZXh0KCkpCisgICAgICAgIHN0YXJ0ID0gc3RhcnQtPnBhcmVudCgpOwor
ICAgIGlmICghc3RhcnQgfHwgIXN0YXJ0LT5pc1NWR1RleHQoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIHRvUmVuZGVyU1ZHVGV4dChzdGFydCk7Cit9CisKIEludFJlY3QgUmVuZGVy
U1ZHVGV4dDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIpCiB7CiAgICAgcmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6OmNs
aXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHRoaXMsIHJlcGFpbnRDb250YWluZXIpOwpAQCAt
ODUsOSArMTA1LDEzIEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKICAgICAgICAgdXBk
YXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CiAgICAgfQogCi0gICAgLy8gUGVy
Zm9ybSBTVkcgdGV4dCBsYXlvdXQgcGhhc2Ugb25lIChzZWUgU1ZHVGV4dExheW91dEF0dHJpYnV0
ZXNCdWlsZGVyIGZvciBkZXRhaWxzKS4KLSAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxk
ZXIgbGF5b3V0QXR0cmlidXRlc0J1aWxkZXI7Ci0gICAgbGF5b3V0QXR0cmlidXRlc0J1aWxkZXIu
YnVpbGRMYXlvdXRBdHRyaWJ1dGVzRm9yVGV4dFN1YnRyZWUodGhpcyk7CisgICAgaWYgKG1fbmVl
ZHNQb3NpdGlvbmluZ1ZhbHVlc1VwZGF0ZSkgeworICAgICAgICAvLyBQZXJmb3JtIFNWRyB0ZXh0
IGxheW91dCBwaGFzZSBvbmUgKHNlZSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIgZm9y
IGRldGFpbHMpLgorICAgICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIgbGF5b3V0
QXR0cmlidXRlc0J1aWxkZXI7CisgICAgICAgIGxheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmJ1aWxk
TGF5b3V0QXR0cmlidXRlc0ZvclRleHRTdWJ0cmVlKHRoaXMpOworICAgICAgICBtX25lZWRzUG9z
aXRpb25pbmdWYWx1ZXNVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRh
cmllc0luUGFyZW50cyA9IHRydWU7CisgICAgfQogCiAgICAgLy8gUmVkdWNlZCB2ZXJzaW9uIG9m
IFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jaygpLCB3aGljaCBvbmx5IHRha2VzIGNhcmUgb2YgU1ZH
IHRleHQuCiAgICAgLy8gQWxsIGlmIGJyYW5jaGVzIHRoYXQgY291bGQgY2F1c2UgZWFybHkgZXhp
dCBpbiBSZW5kZXJCbG9ja3MgbGF5b3V0QmxvY2soKSBtZXRob2QgYXJlIHR1cm5lZCBpbnRvIGFz
c2VydGlvbnMuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgJKHJldmlz
aW9uIDY4OTc2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw4ICsxLDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IHByb2plY3QuCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuCi0gKiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTM3LDkgKzM2LDEzIEBAIGNsYXNzIFJlbmRlclNWR1RleHQgOiBwdWJsaWMgUmVuZGVyU1ZH
QmwKIHB1YmxpYzoKICAgICBSZW5kZXJTVkdUZXh0KFNWR1RleHRFbGVtZW50KiBub2RlKTsKIAor
ICAgIHZvaWQgc2V0TmVlZHNQb3NpdGlvbmluZ1ZhbHVlc1VwZGF0ZSgpIHsgbV9uZWVkc1Bvc2l0
aW9uaW5nVmFsdWVzVXBkYXRlID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1Ry
YW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KICAgICB2
aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0Owog
CisgICAgc3RhdGljIFJlbmRlclNWR1RleHQqIGxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3RvcihS
ZW5kZXJPYmplY3QqKTsKKyAgICBzdGF0aWMgY29uc3QgUmVuZGVyU1ZHVGV4dCogbG9jYXRlUmVu
ZGVyU1ZHVGV4dEFuY2VzdG9yKGNvbnN0IFJlbmRlck9iamVjdCopOworCiBwcml2YXRlOgogICAg
IHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJT
VkdUZXh0IjsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CkBAIC02OSwxMCArNzIsMjYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFJlbmRlckJs
b2NrKiBmaXJzdExpbmVCbG9jaygpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGaXJz
dExldHRlcigpOwogCisgICAgYm9vbCBtX25lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUgOiAx
OwogICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIG1fbG9jYWxUcmFuc2Zvcm07CiB9OwogCitpbmxpbmUgUmVuZGVyU1ZHVGV4dCogdG9SZW5k
ZXJTVkdUZXh0KFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8
IG9iamVjdC0+aXNTVkdUZXh0KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTVkdU
ZXh0Kj4ob2JqZWN0KTsKK30KKworaW5saW5lIGNvbnN0IFJlbmRlclNWR1RleHQqIHRvUmVuZGVy
U1ZHVGV4dChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVj
dCB8fCBvYmplY3QtPmlzU1ZHVGV4dCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
UmVuZGVyU1ZHVGV4dCo+KG9iamVjdCk7Cit9CisKKy8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUg
ZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9SZW5kZXJTVkdUZXh0KGNvbnN0IFJl
bmRlclNWR1RleHQqKTsKKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNv
cmUvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2ODk3NCkKKysr
IFdlYkNvcmUvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw4ICsyNCw4IEBACiAjaW5jbHVkZSAiU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5o
IgogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdUZXh0Lmgi
CiAjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5j
bHVkZSAiU1ZHTnVtYmVyTGlzdC5oIgpAQCAtNTgsMjEgKzU4LDY1IEBAIHZvaWQgU1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudDo6cGFyc2VNYXAKICAgICAgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHVw
ZGF0ZVBvc2l0aW9uaW5nVmFsdWVzSW5SZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQor
eworICAgIFJlbmRlclNWR1RleHQqIHRleHRSZW5kZXJlciA9IDA7CisKKyAgICBpZiAocmVuZGVy
ZXItPmlzU1ZHVGV4dCgpKQorICAgICAgICB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR1RleHQo
cmVuZGVyZXIpOworICAgIGVsc2UgeworICAgICAgICAvLyBMb2NhdGUgUmVuZGVyU1ZHVGV4dCBw
YXJlbnQgcmVuZGVyZXIuCisgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIt
PnBhcmVudCgpOworICAgICAgICB3aGlsZSAocGFyZW50ICYmICFwYXJlbnQtPmlzU1ZHVGV4dCgp
KQorICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnQoKTsKKworICAgICAgICBpZiAo
cGFyZW50KSB7CisgICAgICAgICAgICBBU1NFUlQocGFyZW50LT5pc1NWR1RleHQoKSk7CisgICAg
ICAgICAgICB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR1RleHQocGFyZW50KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICghdGV4dFJlbmRlcmVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICB0ZXh0UmVuZGVyZXItPnNldE5lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUoKTsKK30KKwog
dm9pZCBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIFNWR1RleHRDb250ZW50RWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiAKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnhBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cgotICAg
ICAgICB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1l
ID09IFNWR05hbWVzOjpkeUF0dHIpCisgICAgYm9vbCB1cGRhdGVSZWxhdGl2ZUxlbmd0aHMgPSBh
dHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR4QXR0cgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cjsKKworICAgIGlmICh1
cGRhdGVSZWxhdGl2ZUxlbmd0aHMpCiAgICAgICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9y
bWF0aW9uKCk7CiAKLSAgICBpZiAoIXJlbmRlcmVyKCkpCisgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKHVwZGF0ZVJlbGF0aXZlTGVuZ3RocyB8fCBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6cm90YXRlQXR0cikgeworICAgICAgICB1cGRhdGVQb3NpdGlvbmluZ1ZhbHVlc0luUmVu
ZGVyZXIocmVuZGVyZXIpOworICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91
dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJu
OworICAgIH0KIAotICAgIGlmIChpc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKLSAgICAgICAg
UmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRh
dGlvbihyZW5kZXJlcigpKTsKKyAgICBpZiAoU1ZHVGV4dENvbnRlbnRFbGVtZW50Ojppc0tub3du
QXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JM
YXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlcik7Cit9CisKK3ZvaWQg
U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5
UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVyQ2hhbmdlLCBpbnQgY2hpbGRD
b3VudERlbHRhKQoreworICAgIFNWR1RleHRDb250ZW50RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2Vk
KGNoYW5nZWRCeVBhcnNlciwgYmVmb3JlQ2hhbmdlLCBhZnRlckNoYW5nZSwgY2hpbGRDb3VudERl
bHRhKTsKKworICAgIGlmIChjaGFuZ2VkQnlQYXJzZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyKCkpCisgICAgICAgIHVwZGF0ZVBv
c2l0aW9uaW5nVmFsdWVzSW5SZW5kZXJlcihvYmplY3QpOwogfQogCiB2b2lkIFNWR1RleHRQb3Np
dGlvbmluZ0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCkBAIC0xMDAsMTYgKzE0NCw2IEBAIHZvaWQgU1ZHVGV4dFBvc2l0aW9uaW5nRWxl
bWVudDo6c3luY2hyb24KICAgICAgICAgc3luY2hyb25pemVSb3RhdGUoKTsKIH0KIAotYm9vbCBT
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50Ojppc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKQotewotICAgIHJldHVybiAoYXR0ck5hbWUubWF0Y2hlcyhTVkdOYW1l
czo6eEF0dHIpIHx8Ci0gICAgICAgICAgICBhdHRyTmFtZS5tYXRjaGVzKFNWR05hbWVzOjp5QXR0
cikgfHwKLSAgICAgICAgICAgIGF0dHJOYW1lLm1hdGNoZXMoU1ZHTmFtZXM6OmR4QXR0cikgfHwK
LSAgICAgICAgICAgIGF0dHJOYW1lLm1hdGNoZXMoU1ZHTmFtZXM6OmR5QXR0cikgfHwKLSAgICAg
ICAgICAgIGF0dHJOYW1lLm1hdGNoZXMoU1ZHTmFtZXM6OnJvdGF0ZUF0dHIpIHx8Ci0gICAgICAg
ICAgICBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKTsK
LX0KLQogc3RhdGljIGlubGluZSBib29sIGxpc3RDb250YWluc1JlbGF0aXZlVmFsdWUoU1ZHTGVu
Z3RoTGlzdCogbGlzdCkKIHsKICAgICBpZiAoIWxpc3QpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdU
ZXh0UG9zaXRpb25pbmdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudC5oCShyZXZpc2lvbiA2ODk3NCkKKysrIFdlYkNvcmUvc3ZnL1NW
R1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIgPSBmYWxzZSwgTm9kZSogYmVm
b3JlQ2hhbmdlID0gMCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAwLCBpbnQgY2hpbGRDb3VudERlbHRh
ID0gMCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHko
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCi0gICAgICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJik7Ci0KICAgICAgICAgdmlydHVhbCBib29sIHNlbGZIYXNSZWxh
dGl2ZUxlbmd0aHMoKSBjb25zdDsKIAogICAgICAgICBERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRZ
KFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQsIFNWR05hbWVzOjp4QXR0ciwgU1ZHTGVuZ3RoTGlz
dCosIFgsIHgpCg==
</data>
<flag name="review"
          id="59678"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>