<?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>40665</bug_id>
          
          <creation_ts>2010-06-16 02:23:13 -0700</creation_ts>
          <short_desc>Provide floating-point support for text selection framework</short_desc>
          <delta_ts>2010-06-29 00:08:17 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>40663</blocked>
    
    <blocked>40673</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>hyatt</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>238755</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-16 02:23:13 -0700</bug_when>
    <thetext>Font::selectionRectForText() / Font::offsetForPosition() take integer parameters, limiting text selection to integer precision.
offsetForPosition() already operates using floats internally, and just converts the incoming integer to a float - fix that, by allowing to pass in a float directly.
selectionRectForText() returns a FloatRect, but takes an IntPoint parameter for the origin - that is wrong.

This is a preparation for the SVG text rewrite.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238793</commentid>
    <comment_count>1</comment_count>
      <attachid>58877</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-16 04:36:36 -0700</bug_when>
    <thetext>Created attachment 58877
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238837</commentid>
    <comment_count>2</comment_count>
      <attachid>58877</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-06-16 06:49:46 -0700</bug_when>
    <thetext>Comment on attachment 58877
Initial patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238839</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-16 06:52:58 -0700</bug_when>
    <thetext>Landed in r61253.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238896</commentid>
    <comment_count>4</comment_count>
      <attachid>58877</attachid>
    <who name="">mitz</who>
    <bug_when>2010-06-16 08:18:35 -0700</bug_when>
    <thetext>Comment on attachment 58877
Initial patch

&gt; +        , m_glyphScale(1.0f)

Please use “1” whenever you used “1.0f”. See &lt;http://webkit.org/coding/coding-style.html&gt;. Why isn’t the definition, initialization, and use of m_glyphScale surrounded by #if ENABLE(SVG)? What is the purpose of this new member variable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238908</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-16 08:57:35 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 58877 [details])
&gt; &gt; +        , m_glyphScale(1.0f)
&gt; 
&gt; Please use “1” whenever you used “1.0f”. See &lt;http://webkit.org/coding/coding-style.html&gt;.
Oh forgot about the new rule! Will fix in a follow up commit.

&gt; Why isn’t the definition, initialization, and use of m_glyphScale surrounded by #if ENABLE(SVG)?
I can include that as well in a follow-up commit.

&gt; What is the purpose of this new member variable?
SVG text has been rewritten to use offsetForPosition() (patch still to be uploaded). When we&apos;re rendering stretched/squeezed text (lengthAdjust=&quot;spacingAndGlyphs&quot;, textLength=&quot;150&quot;), this variable will contain the textLength / computedTextLength scale factor. This way offsetForPosition() still returns the correct offset while selecting adjusted text. I have numerous new testcases for this, it works just well. This was the less intrusive approach, to teach WidthIterator about this scale factor.

Shall I upload a fix patch here, would you be willing to review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238916</commentid>
    <comment_count>6</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-06-16 09:10:48 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 58877 [details] [details])
&gt; &gt; &gt; +        , m_glyphScale(1.0f)
&gt; &gt; 
&gt; &gt; Please use “1” whenever you used “1.0f”. See &lt;http://webkit.org/coding/coding-style.html&gt;.
&gt; Oh forgot about the new rule! Will fix in a follow up commit.
&gt; 
&gt; &gt; Why isn’t the definition, initialization, and use of m_glyphScale surrounded by #if ENABLE(SVG)?
&gt; I can include that as well in a follow-up commit.

Thanks in advance for doing so!

&gt; &gt; What is the purpose of this new member variable?
&gt; SVG text has been rewritten to use offsetForPosition() (patch still to be uploaded). When we&apos;re rendering stretched/squeezed text (lengthAdjust=&quot;spacingAndGlyphs&quot;, textLength=&quot;150&quot;), this variable will contain the textLength / computedTextLength scale factor. This way offsetForPosition() still returns the correct offset while selecting adjusted text. I have numerous new testcases for this, it works just well. This was the less intrusive approach, to teach WidthIterator about this scale factor.

Is it necessary and correct to adjust the width of each individual glyph in WidthIterator? My concern is of course the cost of the extra branch impose on all non-SVG text. I also wonder if there could be a better name for this member variable and its accessors. Perhaps something to the effect that it’s applied to the horizontal axis only. Even replacing “scale” with “stretch” may help to convey this.

&gt; Shall I upload a fix patch here, would you be willing to review?

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240276</commentid>
    <comment_count>7</comment_count>
      <attachid>59177</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-18 23:26:34 -0700</bug_when>
    <thetext>Created attachment 59177
Follow-up patch

Fix issues Dan reported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240288</commentid>
    <comment_count>8</comment_count>
      <attachid>59180</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-19 01:20:42 -0700</bug_when>
    <thetext>Created attachment 59180
Follow-up patch v2

Dirk pointed out that I forgot to rename glyphScale to glyphStretch. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240480</commentid>
    <comment_count>9</comment_count>
      <attachid>59180</attachid>
    <who name="">mitz</who>
    <bug_when>2010-06-20 11:13:18 -0700</bug_when>
    <thetext>Comment on attachment 59180
Follow-up patch v2

&gt; +        Rename &apos;glyphScale&apos; to &apos;horizontalGlyphStretch&apos; upon Dan Bernsteins request.

Either too much last name or too little apostrophe.

&gt; +    bool applyHorizontalGlyphStretching() const { return m_horizontalGlyphStretch != 1; }

This name reads like a verb, as if calling this method applies horizontal glyph stretching. Since it’s a predicate, it should be named “hasHorizontalGlyphStretch” or “shouldStretchGlyphsHorizontally”.

&gt; +#if ENABLE(SVG)
&gt; +            // SVG uses horizontalGlyphStretch(), when textLength is used to stretch/squeeze text.
&gt; +            if (m_run.applyHorizontalGlyphStretching())
&gt; +                width *= m_run.horizontalGlyphStretch();
&gt; +#endif

Do you know if the extra branch is cheaper than just multiplying by 1 unconditionally?

Also, it’s till not clear to me why this has to be applied to each individual glyph and not to the entire run. Can you explain this? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241242</commentid>
    <comment_count>10</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-22 06:58:34 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 59180 [details])
&gt; &gt; +        Rename &apos;glyphScale&apos; to &apos;horizontalGlyphStretch&apos; upon Dan Bernsteins request.
&gt; 
&gt; Either too much last name or too little apostrophe.
Rephrased, &quot;upon Dans&apos; request&quot; ;-)
 
&gt; &gt; +    bool applyHorizontalGlyphStretching() const { return m_horizontalGlyphStretch != 1; }
&gt; 
&gt; This name reads like a verb, as if calling this method applies horizontal glyph stretching. Since it’s a predicate, it should be named “hasHorizontalGlyphStretch” or “shouldStretchGlyphsHorizontally”.
Will remove it, because your suggestion below is just fine.

&gt; 
&gt; &gt; +#if ENABLE(SVG)
&gt; &gt; +            // SVG uses horizontalGlyphStretch(), when textLength is used to stretch/squeeze text.
&gt; &gt; +            if (m_run.applyHorizontalGlyphStretching())
&gt; &gt; +                width *= m_run.horizontalGlyphStretch();
&gt; &gt; +#endif
&gt; 
&gt; Do you know if the extra branch is cheaper than just multiplying by 1 unconditionally?
&gt; 
&gt; Also, it’s till not clear to me why this has to be applied to each individual glyph and not to the entire run. Can you explain this? Thanks!
You&apos;re probably right, I could just fixup m_runWidthSoFar. Will try and upload a new patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241254</commentid>
    <comment_count>11</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-22 08:04:24 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; Also, it’s till not clear to me why this has to be applied to each individual glyph and not to the entire run. Can you explain this? Thanks!
&gt; You&apos;re probably right, I could just fixup m_runWidthSoFar. Will try and upload a new patch soon.

Okay, this doesn&apos;t work.

WidthIterator::advance() stores &quot;float runWidthSoFar = m_runWidthSoFar;&quot; in a local variable, and adds &quot;runWidthSoFar += width;&quot; (pseudo code) in the actual loop. At the end it sets m_runWidthSoFar = runWidthSoFar;

That means I&apos;m forced to apply the scale to the &quot;width&quot; variable, as applying it to runWidthSoFar would reapply it to the already fixed up run width, that is set in m_runWidthSoFar after the first call to advance().

Uploading a new patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241255</commentid>
    <comment_count>12</comment_count>
      <attachid>59367</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-22 08:05:14 -0700</bug_when>
    <thetext>Created attachment 59367
Follow-up patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244134</commentid>
    <comment_count>13</comment_count>
      <attachid>59367</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-06-29 00:08:17 -0700</bug_when>
    <thetext>Comment on attachment 59367
Follow-up patch v3

Even if horizontalGlyphStretch is a bit long for my taste, looks ok. :-)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58877</attachid>
            <date>2010-06-16 04:36:36 -0700</date>
            <delta_ts>2010-06-18 23:26:34 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>SVGTextPrepare.patch</filename>
            <type>text/plain</type>
            <size>29161</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTI0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzUgQEAKKzIwMTAtMDYtMTYgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUHJvdmlkZSBmbG9hdGluZy1wb2ludCBzdXBwb3J0IGZvciB0ZXh0IHNlbGVjdGlvbiBm
cmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQwNjY1CisKKyAgICAgICAgVGhpcyBpcyB0aGUgZmlyc3QgY2h1bmsgb2YgdGhlIFNWRyBUZXh0
IHJld3JpdGUgcGF0Y2hlcy4KKyAgICAgICAgb2Zmc2V0Rm9yUG9zaXRpb24oKSAvIHNlbGVjdGlv
blJlY3RGb3JUZXh0KCkgc2hvdWxkIGFjY2VwdCBmbG9hdC9GbG9hdFBvaW50IGFyZ3VtZW50cyBp
bnN0ZWFkCisgICAgICAgIG9mIGludC9JbnRQb2ludC4gb2Zmc2V0Rm9yUG9zaXRpb24oKSBhbHJl
YWR5IHdvcmtlZCB3aXRoIGZsb2F0cyBpbnRlcm5hbGx5IGluIFF0IGFuZCBNYWMuCisgICAgICAg
IHNlbGVjdGlvblJlY3RGb3JUZXh0KCkgd2FzIGFscmVhZHkgcmV0dXJuaW5nIGEgRmxvYXRSZWN0
LCBidXQgdGhlIHBhc3NlZCBpbiBvcmlnaW4gd2FzIGFuIGludGVnZXIuCisgICAgICAgIEZpeGlu
ZyB0aGVzZSBwcm9ibGVtcyBpbiBvcmRlciB0byBzdXBwb3J0IHN1Yi1waXhlbCBwb3NpdGlvbmlu
ZyBpbiB0aGUgdXBjb21pbmcgU1ZHIFRleHQgcmV3cml0ZSBwYXRjaC4KKworICAgICAgICBBZGQg
YSBnbHlwaFNjYWxlIHBhcmFtZXRlciB0byBUZXh0UnVuLCB0aGF0IHdpbGwgYmUgdXNlZCB0byBz
dXBwb3J0IHRleHQgc2VsZWN0aW9uCisgICAgICAgIGluIGxlbmd0aEFkanVzdC90ZXh0TGVuZ3Ro
IHNjZW5hcmlvcyBpbiBTVkcgdGV4dCwgc29vbi4KKworICAgICAgICBEb2Vzbid0IGFmZmVjdCBh
bnkgdGVzdGNhc2VzIHNvIGZhci4gSFRNTCBpcyBub3QgYWZmZWN0ZWQgaW4gYW55IHdheSwKKyAg
ICAgICAgYXMgaXQgb25seSBldmVyIHBhc3NlcyBpbnRlZ2VycyB0byB0aGVzZSBmdW5jdGlvbnMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
Om9mZnNldEZvclBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6
VGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpnbHlwaFNjYWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRSdW46OnNldEdseXBoU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFJ1bjo6YXBwbHlHbHlwaFNjYWxpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1dpZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6YWR2
YW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVt
V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBs
ZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXgu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250RWZsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEd0ay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpv
ZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBsZXhUZXh0Q29udHJvbGxlcjo6b2Zmc2V0Rm9yUG9zaXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b2Zm
c2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om9m
ZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
c2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2Vs
ZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpzZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25G
b3JDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdp
bmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29t
cGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBs
ZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250V3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQpOgorICAg
ICAgICAqIHN2Zy9TVkdGb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlv
blJlY3RGb3JUZXh0VXNpbmdTVkdGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om9mZnNl
dEZvclBvc2l0aW9uRm9yVGV4dFVzaW5nU1ZHRm9udCk6CisKIDIwMTAtMDYtMTYgIERhbiBCZXJu
c3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBUcnkgdG8gZml4IHRoZSBUaWdlciBi
dWlsZApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiA2MTI0OSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5MSw3ICsxOTEsNyBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRoKGNvbnN0IFRleHRSdW4mIHJ1
CiAgICAgcmV0dXJuIGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChydW4pOwogfQogCi1GbG9hdFJl
Y3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBJ
bnRQb2ludCYgcG9pbnQsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorRmxvYXRSZWN0
IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogI2lmIEVO
QUJMRShTVkdfRk9OVFMpCiAgICAgaWYgKHByaW1hcnlGb250KCktPmlzU1ZHRm9udCgpKQpAQCAt
MjA2LDcgKzIwNiw3IEBAIEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dChjb24K
ICAgICByZXR1cm4gc2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KHJ1biwgcG9pbnQsIGgsIGZy
b20sIHRvKTsKIH0KIAotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4m
IHJ1biwgaW50IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CitpbnQgRm9udDo6
b2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAogewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgaWYg
KHByaW1hcnlGb250KCktPmlzU1ZHRm9udCgpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmgJKHJldmlzaW9uIDYxMjQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAgY2xhc3MgRm9udFNlbGVjdG9yOwogY2xh
c3MgR2x5cGhCdWZmZXI7CiBjbGFzcyBHbHlwaFBhZ2VUcmVlTm9kZTsKIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKLWNsYXNzIEludFBvaW50OwogY2xhc3MgU1ZHRm9udEVsZW1lbnQ7CiAKIHN0cnVj
dCBHbHlwaERhdGE7CkBAIC05OSw4ICs5OCw4IEBAIHB1YmxpYzoKICAgICBmbG9hdCBmbG9hdFdp
ZHRoKGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxi
YWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gMCkgY29uc3Q7CiAg
ICAgZmxvYXQgZmxvYXRXaWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCBleHRyYUNoYXJzQXZh
aWxhYmxlLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdDsKIAot
ICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiwgaW50IHBvc2l0aW9uLCBi
b29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSAgICBGbG9hdFJlY3Qgc2VsZWN0aW9u
UmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEludFBvaW50JiwgaW50IGgsIGludCBm
cm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OworICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihj
b25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMp
IGNvbnN0OworICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBoLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBj
b25zdDsKIAogICAgIGJvb2wgaXNTbWFsbENhcHMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNj
cmlwdGlvbi5zbWFsbENhcHMoKTsgfQogCkBAIC0xNTgsMjQgKzE1NywyNCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZHJhd1RleHRVc2luZ1NWR0ZvbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICAgICBm
bG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mKSBjb25zdDsKICAgICBm
bG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mLCBpbnQgZXh0cmFDaGFy
c0F2YWlsYWJsZSwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Q7
Ci0gICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0VXNpbmdTVkdGb250KGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBJbnRQb2ludCYsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsK
LSAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JUZXh0VXNpbmdTVkdGb250KGNvbnN0IFRleHRS
dW4mLCBpbnQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OworICAg
IEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW5nU1ZHRm9udChjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAg
ICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JUZXh0VXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4m
LCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CiAjZW5k
aWYKIAogICAgIHZvaWQgZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICAgICB2
b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBj
b25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBj
b25zdDsKICAgICB2b2lkIGRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBH
bHlwaEJ1ZmZlciYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAg
ICAgZmxvYXQgZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIEdseXBoQnVm
ZmVyKiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwg
R2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKLSAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JT
aW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4
dChjb25zdCBUZXh0UnVuJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgaCwgaW50IGZyb20sIGludCB0
bykgY29uc3Q7CisgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBU
ZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0
OworICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKIAog
ICAgIHN0YXRpYyBib29sIGNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpOwog
CiAgICAgQ29kZVBhdGggY29kZVBhdGgoY29uc3QgVGV4dFJ1biYpIGNvbnN0OwogICAgIHZvaWQg
ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBG
bG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CiAgICAgZmxvYXQgZmxvYXRXaWR0
aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwotICAg
IGludCBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQg
cG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwotICAgIEZsb2F0UmVj
dCBzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEludFBv
aW50JiwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworICAgIGludCBvZmZzZXRGb3JQ
b3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CisgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJl
Y3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBo
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKIAogICAgIGZyaWVuZCBzdHJ1Y3QgV2lkdGhJdGVy
YXRvcjsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNw
cAkocmV2aXNpb24gNjEyNDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0
UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJGb250
RmFsbGJhY2tMaXN0LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHbHlw
aFBhZ2VUcmVlTm9kZS5oIgotI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKICNpbmNsdWRlICJXaWR0aEl0ZXJhdG9yLmgiCiAKQEAgLTI1Nyw3ICsyNTYs
NyBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zCiAgICAgcmV0dXJu
IGl0Lm1fcnVuV2lkdGhTb0ZhcjsKIH0KIAotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RG
b3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBp
bnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK0Zsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25S
ZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBXaWR0aEl0ZXJhdG9y
IGl0KHRoaXMsIHJ1bik7CiAgICAgaXQuYWR2YW5jZShmcm9tKTsKQEAgLTI2NSwxOSArMjY0LDE5
IEBAIEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGUKICAgICBpdC5hZHZh
bmNlKHRvKTsKICAgICBmbG9hdCBhZnRlcldpZHRoID0gaXQubV9ydW5XaWR0aFNvRmFyOwogCi0g
ICAgLy8gVXNpbmcgcm91bmRmKCkgcmF0aGVyIHRoYW4gY2VpbGYoKSBmb3IgdGhlIHJpZ2h0IGVk
Z2UgYXMgYSBjb21wcm9taXNlIHRvIGVuc3VyZSBjb3JyZWN0IGNhcmV0IHBvc2l0aW9uaW5nCisg
ICAgLy8gVXNpbmcgcm91bmRmKCkgcmF0aGVyIHRoYW4gY2VpbGYoKSBmb3IgdGhlIHJpZ2h0IGVk
Z2UgYXMgYSBjb21wcm9taXNlIHRvIGVuc3VyZSBjb3JyZWN0IGNhcmV0IHBvc2l0aW9uaW5nLgog
ICAgIGlmIChydW4ucnRsKCkpIHsKICAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwog
ICAgICAgICBmbG9hdCB0b3RhbFdpZHRoID0gaXQubV9ydW5XaWR0aFNvRmFyOwogICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIGZsb29yZih0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0
aCksIHBvaW50LnkoKSwgcm91bmRmKHRvdGFsV2lkdGggLSBiZWZvcmVXaWR0aCkgLSBmbG9vcmYo
dG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBoKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1
cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIGZsb29yZihiZWZvcmVXaWR0aCksIHBvaW50LnkoKSwg
cm91bmRmKGFmdGVyV2lkdGgpIC0gZmxvb3JmKGJlZm9yZVdpZHRoKSwgaCk7CiAgICAgfQorCisg
ICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyBmbG9vcmYoYmVmb3JlV2lkdGgpLCBwb2lu
dC55KCksIHJvdW5kZihhZnRlcldpZHRoKSAtIGZsb29yZihiZWZvcmVXaWR0aCksIGgpOwogfQog
Ci1pbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgaW50IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CitpbnQgRm9udDo6
b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQg
eCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKIHsKLSAgICBmbG9hdCBkZWx0YSA9
IChmbG9hdCl4OworICAgIGZsb2F0IGRlbHRhID0geDsKIAogICAgIFdpZHRoSXRlcmF0b3IgaXQo
dGhpcywgcnVuKTsKICAgICBHbHlwaEJ1ZmZlciBsb2NhbEdseXBoQnVmZmVyOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgJKHJldmlzaW9uIDYxMjQ5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcg
QEAgcHVibGljOgogICAgICAgICAsIG1fbGVuKGxlbikKICAgICAgICAgLCBtX3hwb3MoeHBvcykK
ICAgICAgICAgLCBtX3BhZGRpbmcocGFkZGluZykKKyAgICAgICAgLCBtX2dseXBoU2NhbGUoMS4w
ZikKICAgICAgICAgLCBtX2FsbG93VGFicyhhbGxvd1RhYnMpCiAgICAgICAgICwgbV9ydGwocnRs
KQogICAgICAgICAsIG1fZGlyZWN0aW9uYWxPdmVycmlkZShkaXJlY3Rpb25hbE92ZXJyaWRlKQpA
QCAtNTgsNiArNTksNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9sZW4ocy5sZW5ndGgoKSkKICAg
ICAgICAgLCBtX3hwb3MoeHBvcykKICAgICAgICAgLCBtX3BhZGRpbmcocGFkZGluZykKKyAgICAg
ICAgLCBtX2dseXBoU2NhbGUoMS4wZikKICAgICAgICAgLCBtX2FsbG93VGFicyhhbGxvd1RhYnMp
CiAgICAgICAgICwgbV9ydGwocnRsKQogICAgICAgICAsIG1fZGlyZWN0aW9uYWxPdmVycmlkZShk
aXJlY3Rpb25hbE92ZXJyaWRlKQpAQCAtNzksNiArODEsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHNldFRleHQoY29uc3QgVUNoYXIqIGMsIGludCBsZW4pIHsgbV9jaGFyYWN0ZXJzID0gYzsgbV9s
ZW4gPSBsZW47IH0KIAorICAgIGZsb2F0IGdseXBoU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2ds
eXBoU2NhbGU7IH0KKyAgICB2b2lkIHNldEdseXBoU2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9nbHlw
aFNjYWxlID0gc2NhbGU7IH0KKwogICAgIGJvb2wgYWxsb3dUYWJzKCkgY29uc3QgeyByZXR1cm4g
bV9hbGxvd1RhYnM7IH0KICAgICBpbnQgeFBvcygpIGNvbnN0IHsgcmV0dXJuIG1feHBvczsgfQog
ICAgIGludCBwYWRkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9wYWRkaW5nOyB9CkBAIC04OCw2ICs5
Myw3IEBAIHB1YmxpYzoKICAgICBib29sIGFwcGx5UnVuUm91bmRpbmcoKSBjb25zdCB7IHJldHVy
biBtX2FwcGx5UnVuUm91bmRpbmc7IH0KICAgICBib29sIGFwcGx5V29yZFJvdW5kaW5nKCkgY29u
c3QgeyByZXR1cm4gbV9hcHBseVdvcmRSb3VuZGluZzsgfQogICAgIGJvb2wgc3BhY2luZ0Rpc2Fi
bGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlU3BhY2luZzsgfQorICAgIGJvb2wgYXBwbHlH
bHlwaFNjYWxpbmcoKSBjb25zdCB7IHJldHVybiBtX2dseXBoU2NhbGUgIT0gMS4wZjsgfQogCiAg
ICAgdm9pZCBkaXNhYmxlU3BhY2luZygpIHsgbV9kaXNhYmxlU3BhY2luZyA9IHRydWU7IH0KICAg
ICB2b2lkIGRpc2FibGVSb3VuZGluZ0hhY2tzKCkgeyBtX2FwcGx5UnVuUm91bmRpbmcgPSBtX2Fw
cGx5V29yZFJvdW5kaW5nID0gZmFsc2U7IH0KQEAgLTEwOCw2ICsxMTQsNyBAQCBwcml2YXRlOgog
CiAgICAgaW50IG1feHBvczsKICAgICBpbnQgbV9wYWRkaW5nOworICAgIGZsb2F0IG1fZ2x5cGhT
Y2FsZTsKICAgICBib29sIG1fYWxsb3dUYWJzOwogICAgIGJvb2wgbV9ydGw7CiAgICAgYm9vbCBt
X2RpcmVjdGlvbmFsT3ZlcnJpZGU7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dp
ZHRoSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
V2lkdGhJdGVyYXRvci5jcHAJKHJldmlzaW9uIDYxMjQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDYgKzEzNCwx
MSBAQCB2b2lkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UoaW50IG9mZnNldCwgCiAgICAgICAgICAg
ICB3aWR0aCA9IHRhYldpZHRoIC0gZm1vZGYobV9ydW4ueFBvcygpICsgcnVuV2lkdGhTb0Zhciwg
dGFiV2lkdGgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgd2lkdGggPSBmb250RGF0
YS0+d2lkdGhGb3JHbHlwaChnbHlwaCk7CisKKyAgICAgICAgICAgIC8vIFNWRyB1c2VzIGdseXBo
U2NhbGUoKSwgd2hlbiB0ZXh0TGVuZ3RoIGlzIHVzZWQgdG8gc3RyZXRjaC9zcXVlZXplIHRleHQu
CisgICAgICAgICAgICBpZiAobV9ydW4uYXBwbHlHbHlwaFNjYWxpbmcoKSkKKyAgICAgICAgICAg
ICAgICB3aWR0aCAqPSBtX3J1bi5nbHlwaFNjYWxlKCk7CisKICAgICAgICAgICAgIC8vIFdlIHNw
ZWNpYWwgY2FzZSBzcGFjZXMgaW4gdHdvIHdheXMgd2hlbiBhcHBseWluZyB3b3JkIHJvdW5kaW5n
LgogICAgICAgICAgICAgLy8gRmlyc3QsIHdlIHJvdW5kIHNwYWNlcyB0byBhbiBhZGp1c3RlZCB3
aWR0aCBpbiBhbGwgZm9udHMuCiAgICAgICAgICAgICAvLyBTZWNvbmQsIGluIGZpeGVkLXBpdGNo
IGZvbnRzIHdlIGVuc3VyZSB0aGF0IGFsbCBjaGFyYWN0ZXJzIHRoYXQKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5j
cHAJKHJldmlzaW9uIDYxMjQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250Q2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzQsNyArNDM0LDcgQEAg
dm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZwogfQogCiBGbG9hdFJlY3Qg
Rm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9pbnQm
IHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgdG8pIGNvbnN0CkBAIC00NDUsMTAgKzQ0NSwxMCBAQCBGbG9hdFJlY3QgRm9udDo6c2Vs
ZWN0aW9uUmVjdEZvckNvbXBsZXhUCiAKICAgICAvLyBJZiB0aGUgdGV4dCBpcyBSVEwsIGxlZnQg
d2lsbCBhY3R1YWxseSBiZSBhZnRlciByaWdodC4KICAgICBpZiAobGVmdCA8IHJpZ2h0KQotICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KGxlZnQsIHN0YXRpY19jYXN0PGZsb2F0Pihwb2ludC55KCkp
LAorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KGxlZnQsIHBvaW50LnkoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgcmlnaHQgLSBsZWZ0LCBzdGF0aWNfY2FzdDxmbG9hdD4oaCkpOwogCi0gICAg
cmV0dXJuIEZsb2F0UmVjdChyaWdodCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBvaW50LnkoKSksCisg
ICAgcmV0dXJuIEZsb2F0UmVjdChyaWdodCwgcG9pbnQueSgpLAogICAgICAgICAgICAgICAgICAg
ICAgbGVmdCAtIHJpZ2h0LCBzdGF0aWNfY2FzdDxmbG9hdD4oaCkpOwogfQogCkBAIC01MDksOSAr
NTA5LDEzIEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb24KICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRlLndpZHRoKCkpOwogfQogCi1pbnQgRm9udDo6
b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCB4
LAoraW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCBmbG9hdCB4RmxvYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAogeworICAgIC8vIEZJWE1F
OiBUaGlzIHRydW5jYXRpb24gaXMgbm90IGEgcHJvYmxlbSBmb3IgSFRNTCwgYnV0IG9ubHkgYWZm
ZWN0cyBTVkcsIHdoaWNoIHBhc3NlcyBmbG9hdGluZy1wb2ludCBudW1iZXJzCisgICAgLy8gdG8g
Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb24oKS4gTGVhdmluZyB0aGlzIGNvZGUgYXMgaXMsIGluIG9y
ZGVyIHRvIHJlZHVjZSBicmVha2FnZS4gU29tZW9uZSBzaG91bGQgZml4IGl0IG9uZSBkYXkuCisg
ICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KHhGbG9hdCk7CisKICAgICAvLyBNYWMgY29kZSBp
Z25vcmVzIGluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBhbmQgdGhleSBkb24ndCBrbm93IHdoYXQgaXQn
cwogICAgIC8vIHN1cHBvc2VkIHRvIGRvLCBzbyB3ZSBqdXN0IGlnbm9yZSBpdCBhcyB3ZWxsLgog
ICAgIFVuaXNjcmliZUhlbHBlclRleHRSdW4gc3RhdGUocnVuLCAqdGhpcyk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51eC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwCShyZXZp
c2lvbiA2MTI0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udExp
bnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY0LDkgKzU2NCwxMyBAQCBzdGF0aWMgaW50IGds
eXBoSW5kZXhGb3JYUG9zaXRpb25JblNjcmlwCiB9CiAKIC8vIFJldHVybiB0aGUgY29kZSBwb2lu
dCBpbmRleCBmb3IgdGhlIGdpdmVuIHx4fCBvZmZzZXQgaW50byB0aGUgdGV4dCBydW4uCi1pbnQg
Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IGludCB4LAoraW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBmbG9hdCB4RmxvYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAogeworICAgIC8v
IEZJWE1FOiBUaGlzIHRydW5jYXRpb24gaXMgbm90IGEgcHJvYmxlbSBmb3IgSFRNTCwgYnV0IG9u
bHkgYWZmZWN0cyBTVkcsIHdoaWNoIHBhc3NlcyBmbG9hdGluZy1wb2ludCBudW1iZXJzCisgICAg
Ly8gdG8gRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb24oKS4gTGVhdmluZyB0aGlzIGNvZGUgYXMgaXMs
IGluIG9yZGVyIHRvIHJlZHVjZSBicmVha2FnZS4gU29tZW9uZSBzaG91bGQgZml4IGl0IG9uZSBk
YXkuCisgICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KHhGbG9hdCk7CisKICAgICAvLyAoTWFj
IGNvZGUgaWdub3JlcyBpbmNsdWRlUGFydGlhbEdseXBocywgYW5kIHRoZXkgZG9uJ3Qga25vdyB3
aGF0IGl0J3MKICAgICAvLyBzdXBwb3NlZCB0byBkbywgc28gd2UganVzdCBpZ25vcmUgaXQgYXMg
d2VsbC4pCiAgICAgVGV4dFJ1bldhbGtlciB3YWxrZXIocnVuLCAwLCB0aGlzKTsKQEAgLTY0MSw3
ICs2NDUsNyBAQCBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4CiAKIC8v
IFJldHVybiB0aGUgcmVjdGFuZ2xlIGZvciBzZWxlY3RpbmcgdGhlIGdpdmVuIHJhbmdlIG9mIGNv
ZGUtcG9pbnRzIGluIHRoZSBUZXh0UnVuLgogRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RG
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50IGhlaWdodCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGludCBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgaW50IGZyb21YID0g
LTEsIHRvWCA9IC0xLCBmcm9tQWR2YW5jZSA9IC0xLCB0b0FkdmFuY2UgPSAtMTsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRFZmwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRFZmwuY3BwCShyZXZpc2lvbiA2MTI0OSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRFZmwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MSwxMyArNTEsMTMgQEAgZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhU
ZXh0KGNvbgogICAgIHJldHVybiAwLjBmOwogfQogCi1pbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRp
b25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgaW50LCBib29sKSBjb25zdAoraW50IEZv
bnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0
LCBib29sKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CiB9
CiAKLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEludFBvaW50JiwgaW50LCBpbnQsIGludCkgY29uc3QKK0Zsb2F0UmVjdCBG
b250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZs
b2F0UG9pbnQmLCBpbnQsIGludCwgaW50KSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CiAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvRm9udEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvRm9udEd0ay5jcHAJKHJldmlzaW9uIDYxMjQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvRm9udEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw4ICszMDgsMTIg
QEAgZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbgogICAgIHJldHVybiB3
aWR0aDsKIH0KIAotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBpbnQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QK
K2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgZmxvYXQgeEZsb2F0LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAogewor
ICAgIC8vIEZJWE1FOiBUaGlzIHRydW5jYXRpb24gaXMgbm90IGEgcHJvYmxlbSBmb3IgSFRNTCwg
YnV0IG9ubHkgYWZmZWN0cyBTVkcsIHdoaWNoIHBhc3NlcyBmbG9hdGluZy1wb2ludCBudW1iZXJz
CisgICAgLy8gdG8gRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb24oKS4gTGVhdmluZyB0aGlzIGNvZGUg
YXMgaXMsIGluIG9yZGVyIHRvIHJlZHVjZSBicmVha2FnZS4gU29tZW9uZSBzaG91bGQgZml4IGl0
IG9uZSBkYXkuCisgICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KHhGbG9hdCk7CisKICAgICBQ
YW5nb0xheW91dCogbGF5b3V0ID0gZ2V0RGVmYXVsdFBhbmdvTGF5b3V0KHJ1bik7CiAgICAgc2V0
UGFuZ29BdHRyaWJ1dGVzKHRoaXMsIHJ1biwgbGF5b3V0KTsKIApAQCAtMzI4LDcgKzMzMiw3IEBA
IGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXgKICAgICByZXR1cm4gb2Zm
c2V0OwogfQogCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50IGZyb20s
IGludCB0bykgY29uc3QKK0Zsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGgsIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgUGFuZ29MYXlvdXQqIGxheW91dCA9IGdldERl
ZmF1bHRQYW5nb0xheW91dChydW4pOwogICAgIHNldFBhbmdvQXR0cmlidXRlcyh0aGlzLCBydW4s
IGxheW91dCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRIYWlr
dS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250
SGFpa3UuY3BwCShyZXZpc2lvbiA2MTI0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvRm9udEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDEzICsxMDAsMTMgQEAg
ZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbgogICAgIHJldHVybiAwOwog
fQogCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBJbnRQb2ludCYsIGludCwgaW50LCBpbnQpIGNvbnN0CitGbG9hdFJlY3Qg
Rm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBG
bG9hdFBvaW50JiwgaW50LCBpbnQsIGludCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIH0KIAotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0
aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGludCwgYm9vbCkgY29uc3QKK2ludCBG
b250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9h
dCwgYm9vbCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4
VGV4dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2MTI0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk2LDcgKzk2LDcgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRybwog
ICAgIGFkanVzdEdseXBoc0FuZEFkdmFuY2VzKCk7CiB9CiAKLWludCBDb21wbGV4VGV4dENvbnRy
b2xsZXI6Om9mZnNldEZvclBvc2l0aW9uKGludCBoLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhz
KQoraW50IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgaCwg
Ym9vbCBpbmNsdWRlUGFydGlhbEdseXBocykKIHsKICAgICBpZiAoaCA+PSBtX3RvdGFsV2lkdGgp
CiAgICAgICAgIHJldHVybiBtX3J1bi5sdHIoKSA/IG1fZW5kIDogMDsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5o
CShyZXZpc2lvbiA2MTI0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBs
ZXhUZXh0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyKiA9IDApOwogCiAg
ICAgLy8gQ29tcHV0ZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmb3IgYSBnaXZlbiB4IGNvb3JkaW5h
dGUuCi0gICAgaW50IG9mZnNldEZvclBvc2l0aW9uKGludCB4LCBib29sIGluY2x1ZGVQYXJ0aWFs
R2x5cGhzKTsKKyAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCwgYm9vbCBpbmNsdWRl
UGFydGlhbEdseXBocyk7CiAKICAgICAvLyBSZXR1cm5zIHRoZSB3aWR0aCBvZiBldmVyeXRoaW5n
IHdlJ3ZlIGNvbnN1bWVkIHNvIGZhci4KICAgICBmbG9hdCBydW5XaWR0aFNvRmFyKCkgY29uc3Qg
eyByZXR1cm4gbV9ydW5XaWR0aFNvRmFyOyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAJKHJldmlzaW9uIDYxMjQ5
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGlu
dCBoLAorRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCB0bykgY29uc3QK
IHsKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4pOwpAQCAt
OTcsNyArOTcsNyBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uCiAg
ICAgcmV0dXJuIGNvbnRyb2xsZXIudG90YWxXaWR0aCgpOwogfQogCi1pbnQgRm9udDo6b2Zmc2V0
Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCB4LCBib29s
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoraW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9u
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9s
bGVyKHRoaXMsIHJ1bik7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24o
eCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udFF0LmNwcAkocmV2aXNpb24gNjEyNDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ZvbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NywxNCArMjQ3LDE0IEBAIGZs
b2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb24KICAgICByZXR1cm4gdyArIHJ1
bi5wYWRkaW5nKCk7CiB9CiAKLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0CitpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlw
aHMpIGNvbnN0CiB7CiAjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDcsIDAp
CiAgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhTdHJpbmcocnVu
LmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKSk7CiAgICAgUVN0cmluZyBzdHJpbmcgPSBmcm9t
UmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkKTsKIAogICAgIFFGb250TWV0cmljcyBmbShmb250
KCkpOwotICAgIGZsb2F0IGRlbHRhID0gKGZsb2F0KXBvc2l0aW9uOworICAgIGZsb2F0IGRlbHRh
ID0gcG9zaXRpb247CiAgICAgaW50IGN1clBvcyA9IDA7CiAgICAgZG8gewogICAgICAgICBmbG9h
dCBjaGFyV2lkdGggPSBmbS53aWR0aChzdHJpbmdbY3VyUG9zXSk7CkBAIC0yNzUsNyArMjc1LDcg
QEAgaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dAogI2VuZGlmCiB9CiAK
LWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgaW50IHBvc2l0aW9uLCBib29sKSBjb25zdAoraW50IEZvbnQ6Om9mZnNldEZvclBvc2l0
aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCBwb3NpdGlvbiwgYm9v
bCkgY29uc3QKIHsKICAgICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFsaXplU3BhY2Vz
KFN0cmluZyhydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpKTsKICAgICBRU3RyaW5nIHN0
cmluZyA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwpAQCAtMjg1LDcgKzI4NSw3
IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXgKICAgICByZXR1cm4g
bGluZS54VG9DdXJzb3IocG9zaXRpb24pOwogfQogCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9u
UmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBJbnRQb2ludCYgcHQs
IGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlv
blJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYg
cHQsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogI2lmIFFUX1ZFUlNJT04gPj0g
UVRfVkVSU0lPTl9DSEVDSyg0LCA3LCAwKQogICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpu
b3JtYWxpemVTcGFjZXMoU3RyaW5nKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSkpOwpA
QCAtMzAyLDcgKzMwMiw3IEBAIEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yU2ltcGxl
VGUKICNlbmRpZgogfQogCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgSW50UG9pbnQmIHB0LCBpbnQgaCwgaW50IGZy
b20sIGludCB0bykgY29uc3QKK0Zsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxl
eFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwdCwgaW50IGgsIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5v
cm1hbGl6ZVNwYWNlcyhTdHJpbmcocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKSk7CiAg
ICAgUVN0cmluZyBzdHJpbmcgPSBmcm9tUmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCShyZXZpc2lvbiA2
MTI0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGJvb2wgRm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tG
b250c0ZvckNvbXAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotRmxvYXRSZWN0IEZvbnQ6OnNlbGVj
dGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEludFBvaW50
JiBwb2ludCwgaW50IGgsCitGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdAogewogICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgaXQodGhpcywgcnVuKTsKQEAg
LTEwNCw4ICsxMDQsMTIgQEAgZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNv
bgogICAgIHJldHVybiBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKIH0KIAotaW50IEZvbnQ6
Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQg
eCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKK2ludCBGb250OjpvZmZzZXRGb3JQ
b3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeEZsb2F0LCBi
b29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBUaGlzIHRy
dW5jYXRpb24gaXMgbm90IGEgcHJvYmxlbSBmb3IgSFRNTCwgYnV0IG9ubHkgYWZmZWN0cyBTVkcs
IHdoaWNoIHBhc3NlcyBmbG9hdGluZy1wb2ludCBudW1iZXJzCisgICAgLy8gdG8gRm9udDo6b2Zm
c2V0Rm9yUG9zaXRpb24oKS4gTGVhdmluZyB0aGlzIGNvZGUgYXMgaXMsIGluIG9yZGVyIHRvIHJl
ZHVjZSBicmVha2FnZS4gU29tZW9uZSBzaG91bGQgZml4IGl0IG9uZSBkYXkuCisgICAgaW50IHgg
PSBzdGF0aWNfY2FzdDxpbnQ+KHhGbG9hdCk7CisKICAgICBVbmlzY3JpYmVDb250cm9sbGVyIGNv
bnRyb2xsZXIodGhpcywgcnVuKTsKICAgICByZXR1cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3Np
dGlvbih4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250V2luY2UuY3BwCShyZXZpc2lvbiA2MTI0OSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjQyLDggKzI0MiwxMiBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRl
eHQoY29uCiAgICAgcmV0dXJuIHc7CiB9CiAKLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IHBvc2l0aW9uLCBib29sIGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoraW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4RmxvYXQsIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IFRoaXMgdHJ1bmNhdGlvbiBpcyBu
b3QgYSBwcm9ibGVtIGZvciBIVE1MLCBidXQgb25seSBhZmZlY3RzIFNWRywgd2hpY2ggcGFzc2Vz
IGZsb2F0aW5nLXBvaW50IG51bWJlcnMKKyAgICAvLyB0byBGb250OjpvZmZzZXRGb3JQb3NpdGlv
bigpLiBMZWF2aW5nIHRoaXMgY29kZSBhcyBpcywgaW4gb3JkZXIgdG8gcmVkdWNlIGJyZWFrYWdl
LiBTb21lb25lIHNob3VsZCBmaXggaXQgb25lIGRheS4KKyAgICBpbnQgcG9zaXRpb24gPSBzdGF0
aWNfY2FzdDxpbnQ+KHhGbG9hdCk7CisKICAgICBUZXh0UnVuQ29tcG9uZW50cyBjb21wb25lbnRz
OwogICAgIGludCB3ID0gZ2VuZXJhdGVDb21wb25lbnRzKCZjb21wb25lbnRzLCAqdGhpcywgcnVu
KTsKIApAQCAtMzA4LDcgKzMxMiw3IEBAIHN0YXRpYyBmbG9hdCBjdXJzb3JUb1goY29uc3QgRm9u
dCogZm9udCwKICAgICByZXR1cm4gd2lkdGg7CiB9CiAKLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rp
b25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBJbnRQb2ludCYg
cHQsCitGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgVGV4
dFJ1bkNvbXBvbmVudHMgY29tcG9uZW50czsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvRm9udFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3d4L0ZvbnRXeC5jcHAJKHJldmlzaW9uIDYxMjQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9Gb250V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHZvaWQg
Rm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGcKICAgICBkcmF3VGV4dFdpdGhTcGFj
aW5nKGdyYXBoaWNzQ29udGV4dCwgZm9udCwgY29sb3IsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1H
bHlwaHMsIHBvaW50KTsKIH0KIAotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50IGgs
IGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CitGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogI2lmIE9TKFdJTkRPV1MpIHx8IE9T
KERBUldJTikKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgaXQodGhpcywgcnVuKTsKQEAgLTE1
Myw3ICsxNTMsNyBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uCiAj
ZW5kaWYKIH0KIAotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBpbnQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QK
K2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKIHsKICNpZiBP
UyhXSU5ET1dTKSB8fCBPUyhEQVJXSU4pCiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRy
b2xsZXIodGhpcywgcnVuKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwCShyZXZpc2lvbiA2MTI0OSkKKysrIFdlYkNv
cmUvc3ZnL1NWR0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzEsNyArNTcxLDcgQEAgdm9p
ZCBGb250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udChHcmFwaGljcwogICAgIH0KIH0KIAotRmxvYXRS
ZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JUZXh0VXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdAorRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JUZXh0VXNpbmdTVkdGb250
KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoZWlnaHQs
IGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgaW50IGNoYXJzQ29uc3VtZWQ7CiAgICAg
U3RyaW5nIGdseXBoTmFtZTsKQEAgLTU4MCw3ICs1ODAsNyBAQCBGbG9hdFJlY3QgRm9udDo6c2Vs
ZWN0aW9uUmVjdEZvclRleHRVc2luCiAgICAgICAgICAgICAgICAgICAgICBwb2ludC55KCksIGZs
b2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0aGlzLCBydW4sIDAsIGZyb20sIHRvLCBj
aGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpLCBoZWlnaHQpOwogfQogCi1pbnQgRm9udDo6b2Zmc2V0
Rm9yUG9zaXRpb25Gb3JUZXh0VXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mLCBpbnQsIGJvb2wp
IGNvbnN0CitpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JUZXh0VXNpbmdTVkdGb250KGNv
bnN0IFRleHRSdW4mLCBmbG9hdCwgYm9vbCkgY29uc3QKIHsKICAgICAvLyBUT0RPOiBGaXggdGV4
dCBzZWxlY3Rpb24gd2hlbiBIVE1MIHRleHQgaXMgZHJhd24gdXNpbmcgYSBTVkcgRm9udAogICAg
IC8vIFdlIG5lZWQgdG8gaW50ZWdyYXRlIHRoZSBTVkcgdGV4dCBzZWxlY3Rpb24gY29kZSBpbiB0
aGUgb2Zmc2V0Rm9yUG9zaXRpb24oKSBmcmFtZXdvcmsuCg==
</data>
<flag name="review"
          id="45393"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59177</attachid>
            <date>2010-06-18 23:26:34 -0700</date>
            <delta_ts>2010-06-19 01:20:42 -0700</delta_ts>
            <desc>Follow-up patch</desc>
            <filename>Textfixup.diff</filename>
            <type>text/plain</type>
            <size>5121</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTQ2NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTAtMDYtMTggIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUHJvdmlkZSBmbG9hdGluZy1wb2ludCBzdXBwb3J0IGZvciB0ZXh0IHNlbGVjdGlvbiBm
cmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQwNjY1CisKKyAgICAgICAgUmVuYW1lICdnbHlwaFNjYWxlJyB0byAnaG9yaXpvbnRhbEdseXBo
U2NhbGUnIHVwb24gRGFuIEJlcm5zdGVpbnMgcmVxdWVzdC4KKyAgICAgICAgQWxzbyBndWFyZCB0
aGUgdmFyaWFibGVzIGluIEVOQUJMRShTVkcpIGJsb2Nrcy4gSW5pdGlhbGl6ZSB2YXJpYWJsZSB0
byAxIGluc3RlYWQgb2YgMS4wZiwgYXMgdGhhdCdzIHRoZSBuZXcgc3R5bGUgcnVsZS4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRSdW46OlRleHRSdW4pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6aG9yaXpvbnRhbEds
eXBoU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6c2V0SG9yaXpvbnRhbEdseXBo
U2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6YXBwbHlIb3Jpem9udGFsR2x5cGhT
Y2FsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OnNwYWNpbmdEaXNhYmxlZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZH
SW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94Ojpv
ZmZzZXRGb3JQb3NpdGlvbik6CisKIDIwMTAtMDYtMTggIEplc3NpZSBCZXJsaW4gIDxqYmVybGlu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkocmV2aXNpb24gNjE0NjUpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzks
OSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9sZW4obGVuKQogICAgICAgICAsIG1feHBvcyh4cG9z
KQogICAgICAgICAsIG1fcGFkZGluZyhwYWRkaW5nKQotICAgICAgICAsIG1fZ2x5cGhTY2FsZSgx
LjBmKQorI2lmIEVOQUJMRShTVkcpCisgICAgICAgICwgbV9ob3Jpem9udGFsR2x5cGhTY2FsZSgx
KQorI2VuZGlmCiAgICAgICAgICwgbV9hbGxvd1RhYnMoYWxsb3dUYWJzKQogICAgICAgICAsIG1f
cnRsKHJ0bCkKICAgICAgICAgLCBtX2RpcmVjdGlvbmFsT3ZlcnJpZGUoZGlyZWN0aW9uYWxPdmVy
cmlkZSkKQEAgLTU5LDcgKzYxLDkgQEAgcHVibGljOgogICAgICAgICAsIG1fbGVuKHMubGVuZ3Ro
KCkpCiAgICAgICAgICwgbV94cG9zKHhwb3MpCiAgICAgICAgICwgbV9wYWRkaW5nKHBhZGRpbmcp
Ci0gICAgICAgICwgbV9nbHlwaFNjYWxlKDEuMGYpCisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAg
LCBtX2hvcml6b250YWxHbHlwaFNjYWxlKDEpCisjZW5kaWYKICAgICAgICAgLCBtX2FsbG93VGFi
cyhhbGxvd1RhYnMpCiAgICAgICAgICwgbV9ydGwocnRsKQogICAgICAgICAsIG1fZGlyZWN0aW9u
YWxPdmVycmlkZShkaXJlY3Rpb25hbE92ZXJyaWRlKQpAQCAtODEsOCArODUsMTEgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBzZXRUZXh0KGNvbnN0IFVDaGFyKiBjLCBpbnQgbGVuKSB7IG1fY2hhcmFj
dGVycyA9IGM7IG1fbGVuID0gbGVuOyB9CiAKLSAgICBmbG9hdCBnbHlwaFNjYWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9nbHlwaFNjYWxlOyB9Ci0gICAgdm9pZCBzZXRHbHlwaFNjYWxlKGZsb2F0IHNj
YWxlKSB7IG1fZ2x5cGhTY2FsZSA9IHNjYWxlOyB9CisjaWYgRU5BQkxFKFNWRykKKyAgICBmbG9h
dCBob3Jpem9udGFsR2x5cGhTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbEdseXBo
U2NhbGU7IH0KKyAgICB2b2lkIHNldEhvcml6b250YWxHbHlwaFNjYWxlKGZsb2F0IHNjYWxlKSB7
IG1faG9yaXpvbnRhbEdseXBoU2NhbGUgPSBzY2FsZTsgfQorICAgIGJvb2wgYXBwbHlIb3Jpem9u
dGFsR2x5cGhTY2FsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsR2x5cGhTY2FsZSAh
PSAxOyB9CisjZW5kaWYKIAogICAgIGJvb2wgYWxsb3dUYWJzKCkgY29uc3QgeyByZXR1cm4gbV9h
bGxvd1RhYnM7IH0KICAgICBpbnQgeFBvcygpIGNvbnN0IHsgcmV0dXJuIG1feHBvczsgfQpAQCAt
OTMsNyArMTAwLDYgQEAgcHVibGljOgogICAgIGJvb2wgYXBwbHlSdW5Sb3VuZGluZygpIGNvbnN0
IHsgcmV0dXJuIG1fYXBwbHlSdW5Sb3VuZGluZzsgfQogICAgIGJvb2wgYXBwbHlXb3JkUm91bmRp
bmcoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5V29yZFJvdW5kaW5nOyB9CiAgICAgYm9vbCBzcGFj
aW5nRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVTcGFjaW5nOyB9Ci0gICAgYm9v
bCBhcHBseUdseXBoU2NhbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhTY2FsZSAhPSAxLjBm
OyB9CiAKICAgICB2b2lkIGRpc2FibGVTcGFjaW5nKCkgeyBtX2Rpc2FibGVTcGFjaW5nID0gdHJ1
ZTsgfQogICAgIHZvaWQgZGlzYWJsZVJvdW5kaW5nSGFja3MoKSB7IG1fYXBwbHlSdW5Sb3VuZGlu
ZyA9IG1fYXBwbHlXb3JkUm91bmRpbmcgPSBmYWxzZTsgfQpAQCAtMTE0LDcgKzEyMCw5IEBAIHBy
aXZhdGU6CiAKICAgICBpbnQgbV94cG9zOwogICAgIGludCBtX3BhZGRpbmc7Ci0gICAgZmxvYXQg
bV9nbHlwaFNjYWxlOworI2lmIEVOQUJMRShTVkcpCisgICAgZmxvYXQgbV9ob3Jpem9udGFsR2x5
cGhTY2FsZTsKKyNlbmRpZgogICAgIGJvb2wgbV9hbGxvd1RhYnM7CiAgICAgYm9vbCBtX3J0bDsK
ICAgICBib29sIG1fZGlyZWN0aW9uYWxPdmVycmlkZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gNjE0NjUpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzUsOSArMTM1LDExIEBAIHZvaWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZShpbnQgb2Zmc2V0LCAK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHdpZHRoID0gZm9udERhdGEtPndpZHRoRm9y
R2x5cGgoZ2x5cGgpOwogCi0gICAgICAgICAgICAvLyBTVkcgdXNlcyBnbHlwaFNjYWxlKCksIHdo
ZW4gdGV4dExlbmd0aCBpcyB1c2VkIHRvIHN0cmV0Y2gvc3F1ZWV6ZSB0ZXh0LgotICAgICAgICAg
ICAgaWYgKG1fcnVuLmFwcGx5R2x5cGhTY2FsaW5nKCkpCi0gICAgICAgICAgICAgICAgd2lkdGgg
Kj0gbV9ydW4uZ2x5cGhTY2FsZSgpOworI2lmIEVOQUJMRShTVkcpCisgICAgICAgICAgICAvLyBT
VkcgdXNlcyBob3Jpem9udGFsR2x5cGhTY2FsZSgpLCB3aGVuIHRleHRMZW5ndGggaXMgdXNlZCB0
byBzdHJldGNoL3NxdWVlemUgdGV4dC4KKyAgICAgICAgICAgIGlmIChtX3J1bi5hcHBseUhvcml6
b250YWxHbHlwaFNjYWxpbmcoKSkKKyAgICAgICAgICAgICAgICB3aWR0aCAqPSBtX3J1bi5ob3Jp
em9udGFsR2x5cGhTY2FsZSgpOworI2VuZGlmCiAKICAgICAgICAgICAgIC8vIFdlIHNwZWNpYWwg
Y2FzZSBzcGFjZXMgaW4gdHdvIHdheXMgd2hlbiBhcHBseWluZyB3b3JkIHJvdW5kaW5nLgogICAg
ICAgICAgICAgLy8gRmlyc3QsIHdlIHJvdW5kIHNwYWNlcyB0byBhbiBhZGp1c3RlZCB3aWR0aCBp
biBhbGwgZm9udHMuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAko
cmV2aXNpb24gNjE0NjUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDggKzEyNCw5IEBAIGludCBTVkdJbmxpbmVUZXh0Qm94
OjpvZmZzZXRGb3JQb3NpdGlvbigKICAgICBtX2N1cnJlbnRDaHVua1BhcnQgPSBTVkdUZXh0Q2h1
bmtQYXJ0KCk7CiAKICAgICAvLyBFdmVudHVhbGx5IGhhbmRsZSBsZW5ndGhBZGp1c3Q9InNwYWNp
bmdBbmRHbHlwaHMiLgorICAgIC8vIEZJWE1FOiBOZWVkIHRvIHJldmlzaXQgdGhlIHdob2xlIG9m
ZnNldEZvclBvc2l0aW9uIGNvbmNlcHQgZm9yIHZlcnRpY2FsIHRleHQgc2VsZWN0aW9uLgogICAg
IGlmICghbV9jaHVua1RyYW5zZm9ybWF0aW9uLmlzSWRlbnRpdHkoKSkKLSAgICAgICAgdGV4dFJ1
bi5zZXRHbHlwaFNjYWxlKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoaXNWZXJ0aWNhbFdyaXRpbmdN
b2RlKHN0eWxlLT5zdmdTdHlsZSgpKSA/IG1fY2h1bmtUcmFuc2Zvcm1hdGlvbi5kKCkgOiBtX2No
dW5rVHJhbnNmb3JtYXRpb24uYSgpKSk7CisgICAgICAgIHRleHRSdW4uc2V0SG9yaXpvbnRhbEds
eXBoU2NhbGUobmFycm93UHJlY2lzaW9uVG9GbG9hdChtX2NodW5rVHJhbnNmb3JtYXRpb24uYSgp
KSk7CiAKICAgICByZXR1cm4gaGl0UGFydC5vZmZzZXQgKyBzdHlsZS0+Zm9udCgpLm9mZnNldEZv
clBvc2l0aW9uKHRleHRSdW4sIHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59180</attachid>
            <date>2010-06-19 01:20:42 -0700</date>
            <delta_ts>2010-06-22 08:05:14 -0700</delta_ts>
            <desc>Follow-up patch v2</desc>
            <filename>Textfixup.diff</filename>
            <type>text/plain</type>
            <size>5158</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTQ2NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTAtMDYtMTggIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUHJvdmlkZSBmbG9hdGluZy1wb2ludCBzdXBwb3J0IGZvciB0ZXh0IHNlbGVjdGlvbiBm
cmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQwNjY1CisKKyAgICAgICAgUmVuYW1lICdnbHlwaFNjYWxlJyB0byAnaG9yaXpvbnRhbEdseXBo
U3RyZXRjaCcgdXBvbiBEYW4gQmVybnN0ZWlucyByZXF1ZXN0LgorICAgICAgICBBbHNvIGd1YXJk
IHRoZSB2YXJpYWJsZXMgaW4gRU5BQkxFKFNWRykgYmxvY2tzLiBJbml0aWFsaXplIHZhcmlhYmxl
IHRvIDEgaW5zdGVhZCBvZiAxLjBmLCBhcyB0aGF0J3MgdGhlIG5ldyBzdHlsZSBydWxlLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFJ1bjo6VGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpob3Jpem9udGFs
R2x5cGhTdHJldGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OnNldEhvcml6b250YWxH
bHlwaFN0cmV0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6YXBwbHlIb3Jpem9udGFs
R2x5cGhTdHJldGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OnNwYWNpbmdEaXNh
YmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVU
ZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbik6CisKIDIwMTAtMDYtMTggIEplc3NpZSBCZXJsaW4g
IDxqYmVybGluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkocmV2aXNpb24gNjE0NjUpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksOSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9sZW4obGVuKQogICAgICAgICAsIG1f
eHBvcyh4cG9zKQogICAgICAgICAsIG1fcGFkZGluZyhwYWRkaW5nKQotICAgICAgICAsIG1fZ2x5
cGhTY2FsZSgxLjBmKQorI2lmIEVOQUJMRShTVkcpCisgICAgICAgICwgbV9ob3Jpem9udGFsR2x5
cGhTdHJldGNoKDEpCisjZW5kaWYKICAgICAgICAgLCBtX2FsbG93VGFicyhhbGxvd1RhYnMpCiAg
ICAgICAgICwgbV9ydGwocnRsKQogICAgICAgICAsIG1fZGlyZWN0aW9uYWxPdmVycmlkZShkaXJl
Y3Rpb25hbE92ZXJyaWRlKQpAQCAtNTksNyArNjEsOSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9s
ZW4ocy5sZW5ndGgoKSkKICAgICAgICAgLCBtX3hwb3MoeHBvcykKICAgICAgICAgLCBtX3BhZGRp
bmcocGFkZGluZykKLSAgICAgICAgLCBtX2dseXBoU2NhbGUoMS4wZikKKyNpZiBFTkFCTEUoU1ZH
KQorICAgICAgICAsIG1faG9yaXpvbnRhbEdseXBoU3RyZXRjaCgxKQorI2VuZGlmCiAgICAgICAg
ICwgbV9hbGxvd1RhYnMoYWxsb3dUYWJzKQogICAgICAgICAsIG1fcnRsKHJ0bCkKICAgICAgICAg
LCBtX2RpcmVjdGlvbmFsT3ZlcnJpZGUoZGlyZWN0aW9uYWxPdmVycmlkZSkKQEAgLTgxLDggKzg1
LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0VGV4dChjb25zdCBVQ2hhciogYywgaW50IGxl
bikgeyBtX2NoYXJhY3RlcnMgPSBjOyBtX2xlbiA9IGxlbjsgfQogCi0gICAgZmxvYXQgZ2x5cGhT
Y2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhTY2FsZTsgfQotICAgIHZvaWQgc2V0R2x5cGhT
Y2FsZShmbG9hdCBzY2FsZSkgeyBtX2dseXBoU2NhbGUgPSBzY2FsZTsgfQorI2lmIEVOQUJMRShT
VkcpCisgICAgZmxvYXQgaG9yaXpvbnRhbEdseXBoU3RyZXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1f
aG9yaXpvbnRhbEdseXBoU3RyZXRjaDsgfQorICAgIHZvaWQgc2V0SG9yaXpvbnRhbEdseXBoU3Ry
ZXRjaChmbG9hdCBzY2FsZSkgeyBtX2hvcml6b250YWxHbHlwaFN0cmV0Y2ggPSBzY2FsZTsgfQor
ICAgIGJvb2wgYXBwbHlIb3Jpem9udGFsR2x5cGhTdHJldGNoaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9ob3Jpem9udGFsR2x5cGhTdHJldGNoICE9IDE7IH0KKyNlbmRpZgogCiAgICAgYm9vbCBhbGxv
d1RhYnMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93VGFiczsgfQogICAgIGludCB4UG9zKCkgY29u
c3QgeyByZXR1cm4gbV94cG9zOyB9CkBAIC05Myw3ICsxMDAsNiBAQCBwdWJsaWM6CiAgICAgYm9v
bCBhcHBseVJ1blJvdW5kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVJ1blJvdW5kaW5nOyB9
CiAgICAgYm9vbCBhcHBseVdvcmRSb3VuZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlXb3Jk
Um91bmRpbmc7IH0KICAgICBib29sIHNwYWNpbmdEaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlzYWJsZVNwYWNpbmc7IH0KLSAgICBib29sIGFwcGx5R2x5cGhTY2FsaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9nbHlwaFNjYWxlICE9IDEuMGY7IH0KIAogICAgIHZvaWQgZGlzYWJsZVNwYWNpbmco
KSB7IG1fZGlzYWJsZVNwYWNpbmcgPSB0cnVlOyB9CiAgICAgdm9pZCBkaXNhYmxlUm91bmRpbmdI
YWNrcygpIHsgbV9hcHBseVJ1blJvdW5kaW5nID0gbV9hcHBseVdvcmRSb3VuZGluZyA9IGZhbHNl
OyB9CkBAIC0xMTQsNyArMTIwLDkgQEAgcHJpdmF0ZToKIAogICAgIGludCBtX3hwb3M7CiAgICAg
aW50IG1fcGFkZGluZzsKLSAgICBmbG9hdCBtX2dseXBoU2NhbGU7CisjaWYgRU5BQkxFKFNWRykK
KyAgICBmbG9hdCBtX2hvcml6b250YWxHbHlwaFN0cmV0Y2g7CisjZW5kaWYKICAgICBib29sIG1f
YWxsb3dUYWJzOwogICAgIGJvb2wgbV9ydGw7CiAgICAgYm9vbCBtX2RpcmVjdGlvbmFsT3ZlcnJp
ZGU7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJ
KHJldmlzaW9uIDYxNDY1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDkgKzEzNSwxMSBAQCB2b2lkIFdpZHRoSXRl
cmF0b3I6OmFkdmFuY2UoaW50IG9mZnNldCwgCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICB3aWR0aCA9IGZvbnREYXRhLT53aWR0aEZvckdseXBoKGdseXBoKTsKIAotICAgICAgICAgICAg
Ly8gU1ZHIHVzZXMgZ2x5cGhTY2FsZSgpLCB3aGVuIHRleHRMZW5ndGggaXMgdXNlZCB0byBzdHJl
dGNoL3NxdWVlemUgdGV4dC4KLSAgICAgICAgICAgIGlmIChtX3J1bi5hcHBseUdseXBoU2NhbGlu
ZygpKQotICAgICAgICAgICAgICAgIHdpZHRoICo9IG1fcnVuLmdseXBoU2NhbGUoKTsKKyNpZiBF
TkFCTEUoU1ZHKQorICAgICAgICAgICAgLy8gU1ZHIHVzZXMgaG9yaXpvbnRhbEdseXBoU3RyZXRj
aCgpLCB3aGVuIHRleHRMZW5ndGggaXMgdXNlZCB0byBzdHJldGNoL3NxdWVlemUgdGV4dC4KKyAg
ICAgICAgICAgIGlmIChtX3J1bi5hcHBseUhvcml6b250YWxHbHlwaFN0cmV0Y2hpbmcoKSkKKyAg
ICAgICAgICAgICAgICB3aWR0aCAqPSBtX3J1bi5ob3Jpem9udGFsR2x5cGhTdHJldGNoKCk7Cisj
ZW5kaWYKIAogICAgICAgICAgICAgLy8gV2Ugc3BlY2lhbCBjYXNlIHNwYWNlcyBpbiB0d28gd2F5
cyB3aGVuIGFwcGx5aW5nIHdvcmQgcm91bmRpbmcuCiAgICAgICAgICAgICAvLyBGaXJzdCwgd2Ug
cm91bmQgc3BhY2VzIHRvIGFuIGFkanVzdGVkIHdpZHRoIGluIGFsbCBmb250cy4KSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiA2MTQ2NSkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjQsOCArMTI0LDkgQEAgaW50IFNWR0lubGluZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uKAog
ICAgIG1fY3VycmVudENodW5rUGFydCA9IFNWR1RleHRDaHVua1BhcnQoKTsKIAogICAgIC8vIEV2
ZW50dWFsbHkgaGFuZGxlIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIuCisgICAgLy8g
RklYTUU6IE5lZWQgdG8gcmV2aXNpdCB0aGUgd2hvbGUgb2Zmc2V0Rm9yUG9zaXRpb24gY29uY2Vw
dCBmb3IgdmVydGljYWwgdGV4dCBzZWxlY3Rpb24uCiAgICAgaWYgKCFtX2NodW5rVHJhbnNmb3Jt
YXRpb24uaXNJZGVudGl0eSgpKQotICAgICAgICB0ZXh0UnVuLnNldEdseXBoU2NhbGUobmFycm93
UHJlY2lzaW9uVG9GbG9hdChpc1ZlcnRpY2FsV3JpdGluZ01vZGUoc3R5bGUtPnN2Z1N0eWxlKCkp
ID8gbV9jaHVua1RyYW5zZm9ybWF0aW9uLmQoKSA6IG1fY2h1bmtUcmFuc2Zvcm1hdGlvbi5hKCkp
KTsKKyAgICAgICAgdGV4dFJ1bi5zZXRIb3Jpem9udGFsR2x5cGhTdHJldGNoKG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQobV9jaHVua1RyYW5zZm9ybWF0aW9uLmEoKSkpOwogCiAgICAgcmV0dXJuIGhp
dFBhcnQub2Zmc2V0ICsgc3R5bGUtPmZvbnQoKS5vZmZzZXRGb3JQb3NpdGlvbih0ZXh0UnVuLCB4
LCBpbmNsdWRlUGFydGlhbEdseXBocyk7CiB9Cg==
</data>
<flag name="review"
          id="45878"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59367</attachid>
            <date>2010-06-22 08:05:14 -0700</date>
            <delta_ts>2010-06-29 00:08:16 -0700</delta_ts>
            <desc>Follow-up patch v3</desc>
            <filename>Textfixup.diff</filename>
            <type>text/plain</type>
            <size>4996</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTYxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMDYtMjIgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUHJvdmlkZSBmbG9hdGluZy1wb2ludCBzdXBwb3J0IGZvciB0ZXh0IHNlbGVjdGlvbiBm
cmFtZXdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQwNjY1CisKKyAgICAgICAgUmVuYW1lICdnbHlwaFNjYWxlJyB0byAnaG9yaXpvbnRhbEdseXBo
U3RyZXRjaCcgdXBvbiBEYW5zJyByZXF1ZXN0LgorICAgICAgICBBbHNvIGd1YXJkIHRoZSB2YXJp
YWJsZXMgaW4gRU5BQkxFKFNWRykgYmxvY2tzLiBJbml0aWFsaXplIHZhcmlhYmxlIHRvIDEgaW5z
dGVhZCBvZiAxLjBmLCBhcyB0aGF0J3MgdGhlIG5ldyBzdHlsZSBydWxlLgorCisgICAgICAgIE5v
IGZ1bmN0aW9uYWwgY2hhbmdlcywgdGh1cyBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpUZXh0
UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46Omhvcml6b250YWxHbHlwaFN0cmV0Y2gp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6c2V0SG9yaXpvbnRhbEdseXBoU3RyZXRjaCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpzcGFjaW5nRGlzYWJsZWQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2lkdGhJdGVyYXRvcjo6YWR2YW5jZSk6CisgICAgICAgICogcmVuZGVyaW5nL1NWR0lubGluZVRl
eHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9y
UG9zaXRpb24pOgorCiAyMDEwLTA2LTIyICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkocmV2aXNpb24gNjE2MTIpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzks
OSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9sZW4obGVuKQogICAgICAgICAsIG1feHBvcyh4cG9z
KQogICAgICAgICAsIG1fcGFkZGluZyhwYWRkaW5nKQotICAgICAgICAsIG1fZ2x5cGhTY2FsZSgx
LjBmKQorI2lmIEVOQUJMRShTVkcpCisgICAgICAgICwgbV9ob3Jpem9udGFsR2x5cGhTdHJldGNo
KDEpCisjZW5kaWYKICAgICAgICAgLCBtX2FsbG93VGFicyhhbGxvd1RhYnMpCiAgICAgICAgICwg
bV9ydGwocnRsKQogICAgICAgICAsIG1fZGlyZWN0aW9uYWxPdmVycmlkZShkaXJlY3Rpb25hbE92
ZXJyaWRlKQpAQCAtNTksNyArNjEsOSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9sZW4ocy5sZW5n
dGgoKSkKICAgICAgICAgLCBtX3hwb3MoeHBvcykKICAgICAgICAgLCBtX3BhZGRpbmcocGFkZGlu
ZykKLSAgICAgICAgLCBtX2dseXBoU2NhbGUoMS4wZikKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAg
ICAsIG1faG9yaXpvbnRhbEdseXBoU3RyZXRjaCgxKQorI2VuZGlmCiAgICAgICAgICwgbV9hbGxv
d1RhYnMoYWxsb3dUYWJzKQogICAgICAgICAsIG1fcnRsKHJ0bCkKICAgICAgICAgLCBtX2RpcmVj
dGlvbmFsT3ZlcnJpZGUoZGlyZWN0aW9uYWxPdmVycmlkZSkKQEAgLTgxLDggKzg1LDEwIEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgc2V0VGV4dChjb25zdCBVQ2hhciogYywgaW50IGxlbikgeyBtX2No
YXJhY3RlcnMgPSBjOyBtX2xlbiA9IGxlbjsgfQogCi0gICAgZmxvYXQgZ2x5cGhTY2FsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZ2x5cGhTY2FsZTsgfQotICAgIHZvaWQgc2V0R2x5cGhTY2FsZShmbG9h
dCBzY2FsZSkgeyBtX2dseXBoU2NhbGUgPSBzY2FsZTsgfQorI2lmIEVOQUJMRShTVkcpCisgICAg
ZmxvYXQgaG9yaXpvbnRhbEdseXBoU3RyZXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRh
bEdseXBoU3RyZXRjaDsgfQorICAgIHZvaWQgc2V0SG9yaXpvbnRhbEdseXBoU3RyZXRjaChmbG9h
dCBzY2FsZSkgeyBtX2hvcml6b250YWxHbHlwaFN0cmV0Y2ggPSBzY2FsZTsgfQorI2VuZGlmCiAK
ICAgICBib29sIGFsbG93VGFicygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dUYWJzOyB9CiAgICAg
aW50IHhQb3MoKSBjb25zdCB7IHJldHVybiBtX3hwb3M7IH0KQEAgLTkzLDcgKzk5LDYgQEAgcHVi
bGljOgogICAgIGJvb2wgYXBwbHlSdW5Sb3VuZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlS
dW5Sb3VuZGluZzsgfQogICAgIGJvb2wgYXBwbHlXb3JkUm91bmRpbmcoKSBjb25zdCB7IHJldHVy
biBtX2FwcGx5V29yZFJvdW5kaW5nOyB9CiAgICAgYm9vbCBzcGFjaW5nRGlzYWJsZWQoKSBjb25z
dCB7IHJldHVybiBtX2Rpc2FibGVTcGFjaW5nOyB9Ci0gICAgYm9vbCBhcHBseUdseXBoU2NhbGlu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhTY2FsZSAhPSAxLjBmOyB9CiAKICAgICB2b2lkIGRp
c2FibGVTcGFjaW5nKCkgeyBtX2Rpc2FibGVTcGFjaW5nID0gdHJ1ZTsgfQogICAgIHZvaWQgZGlz
YWJsZVJvdW5kaW5nSGFja3MoKSB7IG1fYXBwbHlSdW5Sb3VuZGluZyA9IG1fYXBwbHlXb3JkUm91
bmRpbmcgPSBmYWxzZTsgfQpAQCAtMTE0LDcgKzExOSw5IEBAIHByaXZhdGU6CiAKICAgICBpbnQg
bV94cG9zOwogICAgIGludCBtX3BhZGRpbmc7Ci0gICAgZmxvYXQgbV9nbHlwaFNjYWxlOworI2lm
IEVOQUJMRShTVkcpCisgICAgZmxvYXQgbV9ob3Jpem9udGFsR2x5cGhTdHJldGNoOworI2VuZGlm
CiAgICAgYm9vbCBtX2FsbG93VGFiczsKICAgICBib29sIG1fcnRsOwogICAgIGJvb2wgbV9kaXJl
Y3Rpb25hbE92ZXJyaWRlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRo
SXRlcmF0b3IuY3BwCShyZXZpc2lvbiA2MTYxMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvV2lkdGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw5ICsxMzUsMTAgQEAg
dm9pZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKGludCBvZmZzZXQsIAogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgd2lkdGggPSBmb250RGF0YS0+d2lkdGhGb3JHbHlwaChnbHlwaCk7CiAK
LSAgICAgICAgICAgIC8vIFNWRyB1c2VzIGdseXBoU2NhbGUoKSwgd2hlbiB0ZXh0TGVuZ3RoIGlz
IHVzZWQgdG8gc3RyZXRjaC9zcXVlZXplIHRleHQuCi0gICAgICAgICAgICBpZiAobV9ydW4uYXBw
bHlHbHlwaFNjYWxpbmcoKSkKLSAgICAgICAgICAgICAgICB3aWR0aCAqPSBtX3J1bi5nbHlwaFNj
YWxlKCk7CisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgICAgIC8vIFNWRyB1c2VzIGhvcml6b250
YWxHbHlwaFN0cmV0Y2goKSwgd2hlbiB0ZXh0TGVuZ3RoIGlzIHVzZWQgdG8gc3RyZXRjaC9zcXVl
ZXplIHRleHQuCisgICAgICAgICAgICB3aWR0aCAqPSBtX3J1bi5ob3Jpem9udGFsR2x5cGhTdHJl
dGNoKCk7CisjZW5kaWYKIAogICAgICAgICAgICAgLy8gV2Ugc3BlY2lhbCBjYXNlIHNwYWNlcyBp
biB0d28gd2F5cyB3aGVuIGFwcGx5aW5nIHdvcmQgcm91bmRpbmcuCiAgICAgICAgICAgICAvLyBG
aXJzdCwgd2Ugcm91bmQgc3BhY2VzIHRvIGFuIGFkanVzdGVkIHdpZHRoIGluIGFsbCBmb250cy4K
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiA2MTYx
MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjQsOCArMTI0LDkgQEAgaW50IFNWR0lubGluZVRleHRCb3g6Om9mZnNldEZvclBv
c2l0aW9uKAogICAgIG1fY3VycmVudENodW5rUGFydCA9IFNWR1RleHRDaHVua1BhcnQoKTsKIAog
ICAgIC8vIEV2ZW50dWFsbHkgaGFuZGxlIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIu
CisgICAgLy8gRklYTUU6IE5lZWQgdG8gcmV2aXNpdCB0aGUgd2hvbGUgb2Zmc2V0Rm9yUG9zaXRp
b24gY29uY2VwdCBmb3IgdmVydGljYWwgdGV4dCBzZWxlY3Rpb24uCiAgICAgaWYgKCFtX2NodW5r
VHJhbnNmb3JtYXRpb24uaXNJZGVudGl0eSgpKQotICAgICAgICB0ZXh0UnVuLnNldEdseXBoU2Nh
bGUobmFycm93UHJlY2lzaW9uVG9GbG9hdChpc1ZlcnRpY2FsV3JpdGluZ01vZGUoc3R5bGUtPnN2
Z1N0eWxlKCkpID8gbV9jaHVua1RyYW5zZm9ybWF0aW9uLmQoKSA6IG1fY2h1bmtUcmFuc2Zvcm1h
dGlvbi5hKCkpKTsKKyAgICAgICAgdGV4dFJ1bi5zZXRIb3Jpem9udGFsR2x5cGhTdHJldGNoKG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQobV9jaHVua1RyYW5zZm9ybWF0aW9uLmEoKSkpOwogCiAgICAg
cmV0dXJuIGhpdFBhcnQub2Zmc2V0ICsgc3R5bGUtPmZvbnQoKS5vZmZzZXRGb3JQb3NpdGlvbih0
ZXh0UnVuLCB4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7CiB9Cg==
</data>
<flag name="review"
          id="46183"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>