<?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>45250</bug_id>
          
          <creation_ts>2010-09-05 22:22:29 -0700</creation_ts>
          <short_desc>Add cubic texture coordinate computation</short_desc>
          <delta_ts>2010-09-09 12:42:37 -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>Layout and Rendering</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>44729</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>abarth</cc>
    
    <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>senorblanco</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>274481</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-05 22:22:29 -0700</bug_when>
    <thetext>As part of the GPU accelerated path rendering algorithm in https://bugs.webkit.org/show_bug.cgi?id=44729 , code which computes the three-dimensional texture coordinates per cubic curve control point needs to be added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274485</commentid>
    <comment_count>1</comment_count>
      <attachid>66609</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-05 22:39:04 -0700</bug_when>
    <thetext>Created attachment 66609
Patch

From the ChangeLog:

Adding the texture coordinate computation for cubic curves per the GPU Gems 3 chapter. No tests yet; will be tested in conjunction with later code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276046</commentid>
    <comment_count>2</comment_count>
      <attachid>66609</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-08 14:00:01 -0700</bug_when>
    <thetext>Comment on attachment 66609
Patch

r- for nits again, looks good overall.

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

&gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.cpp:36
&gt; +using namespace LoopBlinnMathUtils;
Check if this is being used any more and remove if not.

&gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.cpp:38
&gt; +void LoopBlinnTextureCoords::Compute(const LoopBlinnClassifier::Result&amp; c,
Should be &apos;compute&apos;.  Use a more descriptive name than &apos;c&apos;

&gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.cpp:51
&gt; +    const float OneThird = 1.0f / 3.0f;
&gt; +    const float TwoThirds = 2.0f / 3.0f;
These should be static

&gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.cpp:76
&gt; +        result-&gt;coords[1] = FloatPoint3D(OneThird * (3.0f * ls * ms -
&gt; +                                                     ls * mt -
&gt; +                                                     lt * ms),
&gt; +                                         ls * ls * (ls - lt),
&gt; +                                         ms * ms * (ms - mt));
&gt; +        result-&gt;coords[2] = FloatPoint3D(OneThird * (lt * (mt - 2.0f * ms) +
&gt; +                                                     ls * (3.0f * ms - 2.0f * mt)),
Try to avoid line wrapping in the middle of an expression.

&gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.cpp:101
&gt; +            // TODO(kbr): may require more work?
I think this TODO is no longer needed.  Looks like we should return immediately here, or have a more descriptive FIXME.

&gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.cpp:108
&gt; +            // TODO(kbr): may require more work?
Same as above.

&gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.cpp:134
&gt; +        reverseOrientation =
&gt; +                ((c.d1() &gt; 0.0f &amp;&amp; result-&gt;coords[0].x() &lt; 0.0f)
&gt; +                 || (c.d1() &lt; 0.0f &amp;&amp; result-&gt;coords[0].x() &gt; 0.0f));
nit: this wraps oddly

&gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.cpp:183
&gt; +            result-&gt;coords[i].setX(-result-&gt;coords[i].x());
&gt; +            result-&gt;coords[i].setY(-result-&gt;coords[i].y());
Add a comment or rename the type so it&apos;s clearer that the X and Y here are actually the K and L coordinates from the paper.

&gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.h:71
&gt; +    static void Compute(const LoopBlinnClassifier::Result&amp; classification,
Should be compute (lowercase).

&gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.h:72
&gt; +                        bool fillRightSide,
Can this be an enum to make callsites clearer?

&gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.h:73
&gt; +                        Result* result);
This should return a Result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276655</commentid>
    <comment_count>3</comment_count>
      <attachid>67076</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-09 12:14:47 -0700</bug_when>
    <thetext>Created attachment 67076
Revised patch

Addressed review feedback above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276657</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-09 12:15:29 -0700</bug_when>
    <thetext>Attachment 67076 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.cpp:114:  Extra space after (  [whitespace/parens] [2]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276660</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-09 12:18:08 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 66609 [details])
&gt; r- for nits again, looks good overall.
&gt; 
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=66609&amp;action=prettypatch
&gt; 
&gt; &gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.cpp:36
&gt; &gt; +using namespace LoopBlinnMathUtils;
&gt; Check if this is being used any more and remove if not.

Not being used any more. Removed.

&gt; &gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.cpp:38
&gt; &gt; +void LoopBlinnTextureCoords::Compute(const LoopBlinnClassifier::Result&amp; c,
&gt; Should be &apos;compute&apos;.  Use a more descriptive name than &apos;c&apos;

Done.

&gt; &gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.cpp:51
&gt; &gt; +    const float OneThird = 1.0f / 3.0f;
&gt; &gt; +    const float TwoThirds = 2.0f / 3.0f;
&gt; These should be static

Done.

&gt; &gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.cpp:76
&gt; &gt; +        result-&gt;coords[1] = FloatPoint3D(OneThird * (3.0f * ls * ms -
&gt; &gt; +                                                     ls * mt -
&gt; &gt; +                                                     lt * ms),
&gt; &gt; +                                         ls * ls * (ls - lt),
&gt; &gt; +                                         ms * ms * (ms - mt));
&gt; &gt; +        result-&gt;coords[2] = FloatPoint3D(OneThird * (lt * (mt - 2.0f * ms) +
&gt; &gt; +                                                     ls * (3.0f * ms - 2.0f * mt)),
&gt; Try to avoid line wrapping in the middle of an expression.

Done.

&gt; &gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.cpp:101
&gt; &gt; +            // TODO(kbr): may require more work?
&gt; I think this TODO is no longer needed.  Looks like we should return immediately here, or have a more descriptive FIXME.

Agreed; removed and re-tested.

&gt; &gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.cpp:108
&gt; &gt; +            // TODO(kbr): may require more work?
&gt; Same as above.

Done.

&gt; &gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.cpp:134
&gt; &gt; +        reverseOrientation =
&gt; &gt; +                ((c.d1() &gt; 0.0f &amp;&amp; result-&gt;coords[0].x() &lt; 0.0f)
&gt; &gt; +                 || (c.d1() &lt; 0.0f &amp;&amp; result-&gt;coords[0].x() &gt; 0.0f));
&gt; nit: this wraps oddly

Changed. Emacs doesn&apos;t auto-format it correctly but it does line up nicer.

&gt; &gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.cpp:183
&gt; &gt; +            result-&gt;coords[i].setX(-result-&gt;coords[i].x());
&gt; &gt; +            result-&gt;coords[i].setY(-result-&gt;coords[i].y());
&gt; Add a comment or rename the type so it&apos;s clearer that the X and Y here are actually the K and L coordinates from the paper.

Renamed coords to klmCoordinates.

&gt; &gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.h:71
&gt; &gt; +    static void Compute(const LoopBlinnClassifier::Result&amp; classification,
&gt; Should be compute (lowercase).

Done.

&gt; &gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.h:72
&gt; &gt; +                        bool fillRightSide,
&gt; Can this be an enum to make callsites clearer?

Made into an enum in LoopBlinnConstants.h (shared between this code and other coming code).

&gt; &gt; WebCore/platform/graphics/gpu/LoopBlinnTextureCoords.h:73
&gt; &gt; +                        Result* result);
&gt; This should return a Result.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276664</commentid>
    <comment_count>6</comment_count>
      <attachid>67078</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-09 12:24:48 -0700</bug_when>
    <thetext>Created attachment 67078
Revised patch

Did the abovementioned reformatting in a way that doesn&apos;t make the style bot complain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276666</commentid>
    <comment_count>7</comment_count>
      <attachid>67078</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-09 12:27:58 -0700</bug_when>
    <thetext>Comment on attachment 67078
Revised patch

R=me.  I was about to suggest that exact same change to get the style bot to shut up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276680</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-09 12:42:37 -0700</bug_when>
    <thetext>Committed r67104: &lt;http://trac.webkit.org/changeset/67104&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66609</attachid>
            <date>2010-09-05 22:39:04 -0700</date>
            <delta_ts>2010-09-09 12:14:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>texture-coordinates.patch</filename>
            <type>text/plain</type>
            <size>12901</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjgwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDktMDUgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBjdWJpYyB0ZXh0dXJlIGNvb3JkaW5hdGUgY29tcHV0YXRpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjUwCisKKyAgICAgICAgQWRkaW5nIHRo
ZSB0ZXh0dXJlIGNvb3JkaW5hdGUgY29tcHV0YXRpb24gZm9yIGN1YmljIGN1cnZlcyBwZXIgdGhl
CisgICAgICAgIEdQVSBHZW1zIDMgY2hhcHRlci4gTm8gdGVzdHMgeWV0OyB3aWxsIGJlIHRlc3Rl
ZCBpbiBjb25qdW5jdGlvbgorICAgICAgICB3aXRoIGxhdGVyIGNvZGUuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TG9vcEJsaW5uVGV4dHVyZUNvb3Jkczo6Q29tcHV0ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublRleHR1cmVDb29yZHMuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMb29wQmxpbm5UZXh0dXJlQ29vcmRzOjpSZXN1bHQ6OlJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpMb29wQmxpbm5UZXh0dXJlQ29vcmRzOjpMb29wQmxp
bm5UZXh0dXJlQ29vcmRzKToKKwogMjAxMC0wOS0wNSAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdv
b2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVy
ZUNvb3Jkcy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9Mb29wQmxpbm5UZXh0dXJlQ29vcmRzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMb29wQmxpbm5UZXh0
dXJlQ29vcmRzLmgiCisKKyNpbmNsdWRlICJMb29wQmxpbm5NYXRoVXRpbHMuaCIKKyNpbmNsdWRl
IDxtYXRoLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit1c2luZyBuYW1lc3BhY2UgTG9vcEJsaW5uTWF0aFV0aWxzOworCit2b2lkIExvb3BC
bGlublRleHR1cmVDb29yZHM6OkNvbXB1dGUoY29uc3QgTG9vcEJsaW5uQ2xhc3NpZmllcjo6UmVz
dWx0JiBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsbFJp
Z2h0U2lkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb29wQmxpbm5U
ZXh0dXJlQ29vcmRzOjpSZXN1bHQqIHJlc3VsdCkKK3sKKyAgICAvLyBMb29wIGFuZCBCbGlubidz
IGZvcm11bGF0aW9uIHN0YXRlcyB0aGF0IHRoZSByaWdodCBzaWRlIG9mIHRoZQorICAgIC8vIGN1
cnZlIGlzIGRlZmluZWQgdG8gYmUgdGhlIGluc2lkZSAoZmlsbGVkIHJlZ2lvbiksIGJ1dCBmb3Ig
c29tZQorICAgIC8vIHJlYXNvbiBpdCBsb29rcyBsaWtlIHdpdGggdGhlIGRlZmF1bHQgb3JpZW50
YXRpb24gcGFyYW1ldGVycyB3ZQorICAgIC8vIGFyZSBmaWxsaW5nIHRoZSBsZWZ0IHNpZGUgb2Yg
dGhlIGN1cnZlLiBSZWdhcmRsZXNzLCBiZWNhdXNlIHdlCisgICAgLy8gY2FuIHJlY2VpdmUgYXJi
aXRyYXJpbHkgb3JpZW50ZWQgY3VydmVzIGFzIGlucHV0LCB3ZSBtaWdodCBoYXZlCisgICAgLy8g
dG8gcmV2ZXJzZSB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGN1YmljIHRleHR1cmUgY29vcmRpbmF0
ZXMgZXZlbgorICAgIC8vIGluIGNhc2VzIHdoZXJlIHRoZSBwYXBlciBkb2VuJ3Qgc2F5IGl0IGlz
IG5lY2Vzc2FyeS4KKyAgICBib29sIHJldmVyc2VPcmllbnRhdGlvbiA9IGZhbHNlOworICAgIGNv
bnN0IGZsb2F0IE9uZVRoaXJkID0gMS4wZiAvIDMuMGY7CisgICAgY29uc3QgZmxvYXQgVHdvVGhp
cmRzID0gMi4wZiAvIDMuMGY7CisgICAgTG9vcEJsaW5uQ2xhc3NpZmllcjo6Q3VydmVUeXBlIGN1
cnZlVHlwZSA9IGMuY3VydmVUeXBlKCk7CisKKyAgICByZXN1bHQtPmlzTGluZU9yUG9pbnQgPSBm
YWxzZTsKKyAgICByZXN1bHQtPmhhc1JlbmRlcmluZ0FydGlmYWN0ID0gZmFsc2U7CisgICAgcmVz
dWx0LT5zdWJkaXZpc2lvblBhcmFtZXRlclZhbHVlID0gMC4wZjsKKworICAgIHN3aXRjaCAoY3Vy
dmVUeXBlKSB7CisgICAgY2FzZSBMb29wQmxpbm5DbGFzc2lmaWVyOjprU2VycGVudGluZTogewor
ICAgICAgICBmbG9hdCB0MSA9IHNxcnRmKDkuMGYgKiBjLmQyKCkgKiBjLmQyKCkgLSAxMiAqIGMu
ZDEoKSAqIGMuZDMoKSk7CisgICAgICAgIGZsb2F0IGxzID0gMy4wZiAqIGMuZDIoKSAtIHQxOwor
ICAgICAgICBmbG9hdCBsdCA9IDYuMGYgKiBjLmQxKCk7CisgICAgICAgIGZsb2F0IG1zID0gMy4w
ZiAqIGMuZDIoKSArIHQxOworICAgICAgICBmbG9hdCBtdCA9IGx0OworICAgICAgICBmbG9hdCBs
dG1scyA9IGx0IC0gbHM7CisgICAgICAgIGZsb2F0IG10bW1zID0gbXQgLSBtczsKKyAgICAgICAg
cmVzdWx0LT5jb29yZHNbMF0gPSBGbG9hdFBvaW50M0QobHMgKiBtcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbHMgKiBscyAqIGxzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtcyAqIG1zICogbXMpOworICAgICAgICByZXN1bHQt
PmNvb3Jkc1sxXSA9IEZsb2F0UG9pbnQzRChPbmVUaGlyZCAqICgzLjBmICogbHMgKiBtcyAtCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzICog
bXQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsdCAqIG1zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHMg
KiBscyAqIChscyAtIGx0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXMgKiBtcyAqIChtcyAtIG10KSk7CisgICAgICAgIHJlc3VsdC0+Y29vcmRzWzJdID0gRmxv
YXRQb2ludDNEKE9uZVRoaXJkICogKGx0ICogKG10IC0gMi4wZiAqIG1zKSArCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzICogKDMuMGYgKiBt
cyAtIDIuMGYgKiBtdCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsdG1scyAqIGx0bWxzICogbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG10bW1zICogbXRtbXMgKiBtcyk7CisgICAgICAgIHJlc3VsdC0+Y29vcmRzWzNdID0g
RmxvYXRQb2ludDNEKGx0bWxzICogbXRtbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC0obHRtbHMgKiBsdG1scyAqIGx0bWxzKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLShtdG1tcyAqIG10bW1zICogbXRtbXMpKTsKKyAgICAg
ICAgaWYgKGMuZDEoKSA8IDAuMGYpCisgICAgICAgICAgICByZXZlcnNlT3JpZW50YXRpb24gPSB0
cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvb3BCbGlubkNsYXNzaWZp
ZXI6OmtMb29wOiB7CisgICAgICAgIGZsb2F0IHQxID0gc3FydGYoNC4wZiAqIGMuZDEoKSAqIGMu
ZDMoKSAtIDMuMGYgKiBjLmQyKCkgKiBjLmQyKCkpOworICAgICAgICBmbG9hdCBscyA9IGMuZDIo
KSAtIHQxOworICAgICAgICBmbG9hdCBsdCA9IDIuMGYgKiBjLmQxKCk7CisgICAgICAgIGZsb2F0
IG1zID0gYy5kMigpICsgdDE7CisgICAgICAgIGZsb2F0IG10ID0gbHQ7CisKKyAgICAgICAgLy8g
RmlndXJlIG91dCB3aGV0aGVyIHRoZXJlIGlzIGEgcmVuZGVyaW5nIGFydGlmYWN0IHJlcXVpcmlu
ZworICAgICAgICAvLyB0aGUgY3VydmUgdG8gYmUgc3ViZGl2aWRlZCBieSB0aGUgY2FsbGVyLgor
ICAgICAgICBmbG9hdCBxbCA9IGxzIC8gbHQ7CisgICAgICAgIGZsb2F0IHFtID0gbXMgLyBtdDsK
KyAgICAgICAgaWYgKDAuMGYgPCBxbCAmJiBxbCA8IDEuMGYpIHsKKyAgICAgICAgICAgIHJlc3Vs
dC0+aGFzUmVuZGVyaW5nQXJ0aWZhY3QgPSB0cnVlOworICAgICAgICAgICAgcmVzdWx0LT5zdWJk
aXZpc2lvblBhcmFtZXRlclZhbHVlID0gcWw7CisgICAgICAgICAgICAvLyBUT0RPKGticik6IG1h
eSByZXF1aXJlIG1vcmUgd29yaz8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKDAuMGYgPCBxbSAmJiBxbSA8IDEuMGYpIHsKKyAgICAgICAgICAgIHJlc3VsdC0+
aGFzUmVuZGVyaW5nQXJ0aWZhY3QgPSB0cnVlOworICAgICAgICAgICAgcmVzdWx0LT5zdWJkaXZp
c2lvblBhcmFtZXRlclZhbHVlID0gcW07CisgICAgICAgICAgICAvLyBUT0RPKGticik6IG1heSBy
ZXF1aXJlIG1vcmUgd29yaz8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgZmxvYXQgbHRtbHMgPSBsdCAtIGxzOworICAgICAgICBmbG9hdCBtdG1tcyA9IG10IC0gbXM7
CisgICAgICAgIHJlc3VsdC0+Y29vcmRzWzBdID0gRmxvYXRQb2ludDNEKGxzICogbXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzICogbHMgKiBtcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHMgKiBtcyAqIG1zKTsKKyAgICAg
ICAgcmVzdWx0LT5jb29yZHNbMV0gPQorICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQzRChPbmVU
aGlyZCAqICgtbHMgKiBtdCAtIGx0ICogbXMgKyAzLjBmICogbHMgKiBtcyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC1PbmVUaGlyZCAqIGxzICogKGxzICogKG10IC0gMy4wZiAqIG1z
KSArIDIuMGYgKiBsdCAqIG1zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLU9uZVRo
aXJkICogbXMgKiAobHMgKiAoMi4wZiAqIG10IC0gMy4wZiAqIG1zKSArIGx0ICogbXMpKTsKKyAg
ICAgICAgcmVzdWx0LT5jb29yZHNbMl0gPQorICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQzRChP
bmVUaGlyZCAqIChsdCAqIChtdCAtIDIuMGYgKiBtcykgKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBscyAqICgzLjBmICogbXMgLSAyLjBmICogbXQpKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgT25lVGhpcmQgKiAobHQgLSBscykgKiAobHMgKiAoMi4w
ZiAqIG10IC0gMy4wZiAqIG1zKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGx0ICogbXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBPbmVUaGlyZCAqIChtdCAtIG1zKSAqIChscyAqIChtdCAtIDMuMGYgKiBtcykgKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjBmICogbHQg
KiBtcykpOworICAgICAgICByZXN1bHQtPmNvb3Jkc1szXSA9CisgICAgICAgICAgICAgICAgRmxv
YXRQb2ludDNEKGx0bWxzICogbXRtbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0o
bHRtbHMgKiBsdG1scykgKiBtdG1tcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWx0
bWxzICogbXRtbXMgKiBtdG1tcyk7CisgICAgICAgIHJldmVyc2VPcmllbnRhdGlvbiA9CisgICAg
ICAgICAgICAgICAgKChjLmQxKCkgPiAwLjBmICYmIHJlc3VsdC0+Y29vcmRzWzBdLngoKSA8IDAu
MGYpCisgICAgICAgICAgICAgICAgIHx8IChjLmQxKCkgPCAwLjBmICYmIHJlc3VsdC0+Y29vcmRz
WzBdLngoKSA+IDAuMGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb29w
Qmxpbm5DbGFzc2lmaWVyOjprQ3VzcDogeworICAgICAgICBmbG9hdCBscyA9IGMuZDMoKTsKKyAg
ICAgICAgZmxvYXQgbHQgPSAzLjBmICogYy5kMigpOworICAgICAgICBmbG9hdCBsc21sdCA9IGxz
IC0gbHQ7CisgICAgICAgIHJlc3VsdC0+Y29vcmRzWzBdID0gRmxvYXRQb2ludDNEKGxzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscyAqIGxzICogbHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYpOworICAgICAgICByZXN1
bHQtPmNvb3Jkc1sxXSA9IEZsb2F0UG9pbnQzRChscyAtIE9uZVRoaXJkICogbHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzICogbHMgKiBsc21sdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZik7CisgICAgICAgIHJlc3Vs
dC0+Y29vcmRzWzJdID0gRmxvYXRQb2ludDNEKGxzIC0gVHdvVGhpcmRzICogbHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzbWx0ICogbHNtbHQgKiBscywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZik7CisgICAgICAgIHJl
c3VsdC0+Y29vcmRzWzNdID0gRmxvYXRQb2ludDNEKGxzbWx0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsc21sdCAqIGxzbWx0ICogbHNtbHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIExvb3BCbGlubkNsYXNzaWZpZXI6OmtRdWFkcmF0aWM6IHsKKyAgICAg
ICAgcmVzdWx0LT5jb29yZHNbMF0gPSBGbG9hdFBvaW50M0QoMCwgMCwgMCk7CisgICAgICAgIHJl
c3VsdC0+Y29vcmRzWzFdID0gRmxvYXRQb2ludDNEKE9uZVRoaXJkLCAwLCBPbmVUaGlyZCk7Cisg
ICAgICAgIHJlc3VsdC0+Y29vcmRzWzJdID0gRmxvYXRQb2ludDNEKFR3b1RoaXJkcywgT25lVGhp
cmQsIFR3b1RoaXJkcyk7CisgICAgICAgIHJlc3VsdC0+Y29vcmRzWzNdID0gRmxvYXRQb2ludDNE
KDEsIDEsIDEpOworICAgICAgICBpZiAoYy5kMygpIDwgMCkKKyAgICAgICAgICAgIHJldmVyc2VP
cmllbnRhdGlvbiA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9v
cEJsaW5uQ2xhc3NpZmllcjo6a0xpbmU6CisgICAgY2FzZSBMb29wQmxpbm5DbGFzc2lmaWVyOjpr
UG9pbnQ6CisgICAgICAgIHJlc3VsdC0+aXNMaW5lT3JQb2ludCA9IHRydWU7CisgICAgICAgIGJy
ZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChmaWxsUmlnaHRTaWRlKQorICAgICAgICByZXZl
cnNlT3JpZW50YXRpb24gPSAhcmV2ZXJzZU9yaWVudGF0aW9uOworCisgICAgaWYgKHJldmVyc2VP
cmllbnRhdGlvbikKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAg
ICAgICAgIHJlc3VsdC0+Y29vcmRzW2ldLnNldFgoLXJlc3VsdC0+Y29vcmRzW2ldLngoKSk7Cisg
ICAgICAgICAgICByZXN1bHQtPmNvb3Jkc1tpXS5zZXRZKC1yZXN1bHQtPmNvb3Jkc1tpXS55KCkp
OworICAgICAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublRleHR1cmVDb29yZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5UZXh0dXJlQ29vcmRz
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxp
bm5UZXh0dXJlQ29vcmRzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIExvb3BCbGlublRleHR1cmVDb29yZHNfaAorI2RlZmluZSBMb29wQmxpbm5UZXh0dXJl
Q29vcmRzX2gKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgorI2luY2x1ZGUgIkxvb3BCbGlu
bkNsYXNzaWZpZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKy8vIENvbXB1dGVzIHRocmVlLWRpbWVuc2lvbmFsIHRleHR1cmUgY29v
cmRpbmF0ZXMgZm9yIHRoZSBjb250cm9sCisvLyBwb2ludHMgb2YgYSBjdWJpYyBjdXJ2ZSBmb3Ig
cmVuZGVyaW5nIHZpYSB0aGUgc2hhZGVyIGluICJSZW5kZXJpbmcKKy8vIFZlY3RvciBBcnQgb24g
dGhlIEdQVSIgYnkgTG9vcCBhbmQgQmxpbm4sIEdQVSBHZW1zIDMsIENoYXB0ZXIgMjUuCitjbGFz
cyBMb29wQmxpbm5UZXh0dXJlQ29vcmRzIHsKK3B1YmxpYzoKKyAgICAvLyBDb250YWluZXIgZm9y
IHRoZSBjdWJpYyB0ZXh0dXJlIGNvb3JkaW5hdGVzIGFuZCBvdGhlciBhc3NvY2lhdGVkCisgICAg
Ly8gaW5mb3JtYXRpb24uCisgICAgc3RydWN0IFJlc3VsdCB7CisgICAgICAgIFJlc3VsdCgpCisg
ICAgICAgICAgICA6IGlzTGluZU9yUG9pbnQoZmFsc2UpCisgICAgICAgICAgICAsIGhhc1JlbmRl
cmluZ0FydGlmYWN0KGZhbHNlKQorICAgICAgICAgICAgLCBzdWJkaXZpc2lvblBhcmFtZXRlclZh
bHVlKDAuMGYpIHsgfQorCisgICAgICAgIC8vIFRoZSAzRCB0ZXh0dXJlIGNvb3JkaW5hdGVzIHRo
YXQgYXJlIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgICAgICAgLy8gZm91ciBjb250cm9s
IHBvaW50cyBvZiB0aGUgY3ViaWMgY3VydmUuCisgICAgICAgIEZsb2F0UG9pbnQzRCBjb29yZHNb
NF07CisKKyAgICAgICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGN1cnZlIGlzIGEgbGluZSBv
ciBhIHBvaW50LCBpbiB3aGljaCBjYXNlCisgICAgICAgIC8vIHdlIGRvIG5vdCBuZWVkIHRvIGFk
ZCBpdHMgdHJpYW5nbGVzIHRvIHRoZSBtZXNoLgorICAgICAgICBib29sIGlzTGluZU9yUG9pbnQ7
CisKKyAgICAgICAgLy8gRm9yIHRoZSBsb29wIGNhc2UsIGluZGljYXRlcyB3aGV0aGVyIGEgcmVu
ZGVyaW5nIGFydGlmYWN0IHdhcworICAgICAgICAvLyBkZXRlY3RlZCwgaW4gd2hpY2ggY2FzZSB0
aGUgY3VydmUgbmVlZHMgdG8gYmUgZnVydGhlcgorICAgICAgICAvLyBzdWJkaXZpZGVkLgorICAg
ICAgICBib29sIGhhc1JlbmRlcmluZ0FydGlmYWN0OworCisgICAgICAgIC8vIElmIGEgcmVuZGVy
aW5nIGFydGlmYWN0IHdpbGwgb2NjdXIgZm9yIHRoZSBnaXZlbiBsb29wIGN1cnZlLAorICAgICAg
ICAvLyB0aGlzIGlzIHRoZSBwYXJhbWV0ZXIgdmFsdWUgKDAgPD0gdmFsdWUgPD0gMSkgYXQgd2hp
Y2ggdGhlCisgICAgICAgIC8vIGN1cnZlIG5lZWRzIHRvIGJlIHN1YmRpdmlkZWQgdG8gZml4IHRo
ZSBhcnRpZmFjdC4KKyAgICAgICAgZmxvYXQgc3ViZGl2aXNpb25QYXJhbWV0ZXJWYWx1ZTsKKyAg
ICB9OworCisgICAgLy8gQ29tcHV0ZXMgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMgZm9yIGEgY3Vi
aWMgY3VydmUgc2VnbWVudCdzCisgICAgLy8gY29udHJvbCBwb2ludHMsIGdpdmVuIHRoZSBjbGFz
c2lmaWNhdGlvbiBvZiB0aGUgY3VydmUgYXMgd2VsbCBhcworICAgIC8vIGFuIGluZGljYXRpb24g
b2Ygd2hpY2ggc2lkZSBpcyB0byBiZSBmaWxsZWQuCisgICAgc3RhdGljIHZvaWQgQ29tcHV0ZShj
b25zdCBMb29wQmxpbm5DbGFzc2lmaWVyOjpSZXN1bHQmIGNsYXNzaWZpY2F0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBmaWxsUmlnaHRTaWRlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgUmVzdWx0KiByZXN1bHQpOworCitwcml2YXRlOgorICAgIC8vIFRoaXMgY2xhc3MgZG9l
cyBub3QgbmVlZCB0byBiZSBpbnN0YW50aWF0ZWQuCisgICAgTG9vcEJsaW5uVGV4dHVyZUNvb3Jk
cygpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTG9vcEJs
aW5uVGV4dHVyZUNvb3Jkc19oCg==
</data>
<flag name="review"
          id="55661"
          type_id="1"
          status="-"
          setter="jamesr"
    />
    <flag name="commit-queue"
          id="55662"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67076</attachid>
            <date>2010-09-09 12:14:47 -0700</date>
            <delta_ts>2010-09-09 12:24:48 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>texture-coordinates.patch</filename>
            <type>text/plain</type>
            <size>15076</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzEwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTAtMDktMDkgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBjdWJpYyB0ZXh0dXJlIGNvb3JkaW5hdGUgY29tcHV0YXRpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjUwCisKKyAgICAgICAgQWRkaW5nIHRo
ZSB0ZXh0dXJlIGNvb3JkaW5hdGUgY29tcHV0YXRpb24gZm9yIGN1YmljIGN1cnZlcyBwZXIgdGhl
CisgICAgICAgIEdQVSBHZW1zIDMgY2hhcHRlci4gTm8gdGVzdHMgeWV0OyB3aWxsIGJlIHRlc3Rl
ZCBpbiBjb25qdW5jdGlvbgorICAgICAgICB3aXRoIGxhdGVyIGNvZGUuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ29uc3RhbnRzLmg6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5UZXh0dXJlQ29vcmRzLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMb29wQmxpbm5UZXh0dXJlQ29vcmRzOjpjb21wdXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxvb3BCbGlublRleHR1cmVDb29yZHM6OlJlc3Vs
dDo6UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6Okxvb3BCbGlublRleHR1cmVDb29yZHM6Okxv
b3BCbGlublRleHR1cmVDb29yZHMpOgorCiAyMDEwLTA5LTA5ICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ29uc3RhbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ29uc3RhbnRz
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxp
bm5Db25zdGFudHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgTG9vcEJsaW5uQ29uc3RhbnRzX2gKKyNkZWZpbmUgTG9vcEJsaW5uQ29uc3RhbnRzX2gKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExvb3BCbGlubkNvbnN0YW50cyB7CisKK2Vu
dW0gRmlsbFNpZGUgeworICAgIExlZnRTaWRlLAorICAgIFJpZ2h0U2lkZQorfTsKKworfSAvLyBu
YW1lc3BhY2UgTG9vcEJsaW5uQ29uc3RhbnRzCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBMb29wQmxpbm5Db25zdGFudHNfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5UZXh0dXJl
Q29vcmRzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMb29wQmxpbm5UZXh0dXJlQ29vcmRzLmgiCisKKyNp
bmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitMb29wQmxpbm5UZXh0dXJlQ29vcmRzOjpSZXN1bHQgTG9vcEJsaW5uVGV4
dHVyZUNvb3Jkczo6Y29tcHV0ZShjb25zdCBMb29wQmxpbm5DbGFzc2lmaWVyOjpSZXN1bHQmIGNs
YXNzaWZpY2F0aW9uLCBMb29wQmxpbm5Db25zdGFudHM6OkZpbGxTaWRlIHNpZGVUb0ZpbGwpCit7
CisgICAgLy8gTG9vcCBhbmQgQmxpbm4ncyBmb3JtdWxhdGlvbiBzdGF0ZXMgdGhhdCB0aGUgcmln
aHQgc2lkZSBvZiB0aGUKKyAgICAvLyBjdXJ2ZSBpcyBkZWZpbmVkIHRvIGJlIHRoZSBpbnNpZGUg
KGZpbGxlZCByZWdpb24pLCBidXQgZm9yIHNvbWUKKyAgICAvLyByZWFzb24gaXQgbG9va3MgbGlr
ZSB3aXRoIHRoZSBkZWZhdWx0IG9yaWVudGF0aW9uIHBhcmFtZXRlcnMgd2UKKyAgICAvLyBhcmUg
ZmlsbGluZyB0aGUgbGVmdCBzaWRlIG9mIHRoZSBjdXJ2ZS4gUmVnYXJkbGVzcywgYmVjYXVzZSB3
ZQorICAgIC8vIGNhbiByZWNlaXZlIGFyYml0cmFyaWx5IG9yaWVudGVkIGN1cnZlcyBhcyBpbnB1
dCwgd2UgbWlnaHQgaGF2ZQorICAgIC8vIHRvIHJldmVyc2UgdGhlIG9yaWVudGF0aW9uIG9mIHRo
ZSBjdWJpYyB0ZXh0dXJlIGNvb3JkaW5hdGVzIGV2ZW4KKyAgICAvLyBpbiBjYXNlcyB3aGVyZSB0
aGUgcGFwZXIgZG9lc24ndCBzYXkgaXQgaXMgbmVjZXNzYXJ5LgorICAgIGJvb2wgcmV2ZXJzZU9y
aWVudGF0aW9uID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IE9uZVRoaXJkID0gMS4w
ZiAvIDMuMGY7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IFR3b1RoaXJkcyA9IDIuMGYgLyAzLjBm
OworICAgIExvb3BCbGlubkNsYXNzaWZpZXI6OkN1cnZlVHlwZSBjdXJ2ZVR5cGUgPSBjbGFzc2lm
aWNhdGlvbi5jdXJ2ZVR5cGU7CisKKyAgICBMb29wQmxpbm5UZXh0dXJlQ29vcmRzOjpSZXN1bHQg
cmVzdWx0OworCisgICAgc3dpdGNoIChjdXJ2ZVR5cGUpIHsKKyAgICBjYXNlIExvb3BCbGlubkNs
YXNzaWZpZXI6OmtTZXJwZW50aW5lOiB7CisgICAgICAgIGZsb2F0IHQxID0gc3FydGYoOS4wZiAq
IGNsYXNzaWZpY2F0aW9uLmQyICogY2xhc3NpZmljYXRpb24uZDIgLSAxMiAqIGNsYXNzaWZpY2F0
aW9uLmQxICogY2xhc3NpZmljYXRpb24uZDMpOworICAgICAgICBmbG9hdCBscyA9IDMuMGYgKiBj
bGFzc2lmaWNhdGlvbi5kMiAtIHQxOworICAgICAgICBmbG9hdCBsdCA9IDYuMGYgKiBjbGFzc2lm
aWNhdGlvbi5kMTsKKyAgICAgICAgZmxvYXQgbXMgPSAzLjBmICogY2xhc3NpZmljYXRpb24uZDIg
KyB0MTsKKyAgICAgICAgZmxvYXQgbXQgPSBsdDsKKyAgICAgICAgZmxvYXQgbHRNaW51c0xzID0g
bHQgLSBsczsKKyAgICAgICAgZmxvYXQgbXRNaW51c01zID0gbXQgLSBtczsKKyAgICAgICAgcmVz
dWx0LmtsbUNvb3JkaW5hdGVzWzBdID0gRmxvYXRQb2ludDNEKGxzICogbXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscyAqIGxzICogbHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcyAqIG1zICogbXMp
OworICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMV0gPSBGbG9hdFBvaW50M0QoT25lVGhp
cmQgKiAoMy4wZiAqIGxzICogbXMgLSBscyAqIG10IC0gbHQgKiBtcyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscyAqIGxzICogKGxzIC0gbHQpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXMgKiBtcyAq
IChtcyAtIG10KSk7CisgICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1syXSA9IEZsb2F0UG9p
bnQzRChPbmVUaGlyZCAqIChsdCAqIChtdCAtIDIuMGYgKiBtcykgKyBscyAqICgzLjBmICogbXMg
LSAyLjBmICogbXQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGx0TWludXNMcyAqIGx0TWludXNMcyAqIGxzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRNaW51c01zICogbXRNaW51c01zICogbXMpOwor
ICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbM10gPSBGbG9hdFBvaW50M0QobHRNaW51c0xz
ICogbXRNaW51c01zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLShsdE1pbnVzTHMgKiBsdE1pbnVzTHMgKiBsdE1pbnVzTHMpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShtdE1pbnVzTXMgKiBtdE1pbnVz
TXMgKiBtdE1pbnVzTXMpKTsKKyAgICAgICAgaWYgKGNsYXNzaWZpY2F0aW9uLmQxIDwgMC4wZikK
KyAgICAgICAgICAgIHJldmVyc2VPcmllbnRhdGlvbiA9IHRydWU7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgTG9vcEJsaW5uQ2xhc3NpZmllcjo6a0xvb3A6IHsKKyAgICAgICAg
ZmxvYXQgdDEgPSBzcXJ0Zig0LjBmICogY2xhc3NpZmljYXRpb24uZDEgKiBjbGFzc2lmaWNhdGlv
bi5kMyAtIDMuMGYgKiBjbGFzc2lmaWNhdGlvbi5kMiAqIGNsYXNzaWZpY2F0aW9uLmQyKTsKKyAg
ICAgICAgZmxvYXQgbHMgPSBjbGFzc2lmaWNhdGlvbi5kMiAtIHQxOworICAgICAgICBmbG9hdCBs
dCA9IDIuMGYgKiBjbGFzc2lmaWNhdGlvbi5kMTsKKyAgICAgICAgZmxvYXQgbXMgPSBjbGFzc2lm
aWNhdGlvbi5kMiArIHQxOworICAgICAgICBmbG9hdCBtdCA9IGx0OworCisgICAgICAgIC8vIEZp
Z3VyZSBvdXQgd2hldGhlciB0aGVyZSBpcyBhIHJlbmRlcmluZyBhcnRpZmFjdCByZXF1aXJpbmcK
KyAgICAgICAgLy8gdGhlIGN1cnZlIHRvIGJlIHN1YmRpdmlkZWQgYnkgdGhlIGNhbGxlci4KKyAg
ICAgICAgZmxvYXQgcWwgPSBscyAvIGx0OworICAgICAgICBmbG9hdCBxbSA9IG1zIC8gbXQ7Cisg
ICAgICAgIGlmICgwLjBmIDwgcWwgJiYgcWwgPCAxLjBmKSB7CisgICAgICAgICAgICByZXN1bHQu
aGFzUmVuZGVyaW5nQXJ0aWZhY3QgPSB0cnVlOworICAgICAgICAgICAgcmVzdWx0LnN1YmRpdmlz
aW9uUGFyYW1ldGVyVmFsdWUgPSBxbDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoMC4wZiA8IHFtICYmIHFtIDwgMS4wZikgeworICAgICAgICAg
ICAgcmVzdWx0Lmhhc1JlbmRlcmluZ0FydGlmYWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJlc3Vs
dC5zdWJkaXZpc2lvblBhcmFtZXRlclZhbHVlID0gcW07CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgbHRNaW51c0xzID0gbHQgLSBsczsKKyAg
ICAgICAgZmxvYXQgbXRNaW51c01zID0gbXQgLSBtczsKKyAgICAgICAgcmVzdWx0LmtsbUNvb3Jk
aW5hdGVzWzBdID0gRmxvYXRQb2ludDNEKGxzICogbXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBscyAqIGxzICogbXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscyAqIG1zICogbXMpOworICAgICAgICBy
ZXN1bHQua2xtQ29vcmRpbmF0ZXNbMV0gPSBGbG9hdFBvaW50M0QoT25lVGhpcmQgKiAoLWxzICog
bXQgLSBsdCAqIG1zICsgMy4wZiAqIGxzICogbXMpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLU9uZVRoaXJkICogbHMgKiAobHMgKiAobXQgLSAzLjBm
ICogbXMpICsgMi4wZiAqIGx0ICogbXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLU9uZVRoaXJkICogbXMgKiAobHMgKiAoMi4wZiAqIG10IC0gMy4w
ZiAqIG1zKSArIGx0ICogbXMpKTsKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzJdID0g
RmxvYXRQb2ludDNEKE9uZVRoaXJkICogKGx0ICogKG10IC0gMi4wZiAqIG1zKSArIGxzICogKDMu
MGYgKiBtcyAtIDIuMGYgKiBtdCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgT25lVGhpcmQgKiAobHQgLSBscykgKiAobHMgKiAoMi4wZiAqIG10IC0g
My4wZiAqIG1zKSArIGx0ICogbXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgT25lVGhpcmQgKiAobXQgLSBtcykgKiAobHMgKiAobXQgLSAzLjBmICog
bXMpICsgMi4wZiAqIGx0ICogbXMpKTsKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzNd
ID0gRmxvYXRQb2ludDNEKGx0TWludXNMcyAqIG10TWludXNNcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0obHRNaW51c0xzICogbHRNaW51c0xzKSAq
IG10TWludXNNcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC1sdE1pbnVzTHMgKiBtdE1pbnVzTXMgKiBtdE1pbnVzTXMpOworICAgICAgICByZXZlcnNl
T3JpZW50YXRpb24gPSAoICAgKGNsYXNzaWZpY2F0aW9uLmQxID4gMC4wZiAmJiByZXN1bHQua2xt
Q29vcmRpbmF0ZXNbMF0ueCgpIDwgMC4wZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IChjbGFzc2lmaWNhdGlvbi5kMSA8IDAuMGYgJiYgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzBd
LngoKSA+IDAuMGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb29wQmxp
bm5DbGFzc2lmaWVyOjprQ3VzcDogeworICAgICAgICBmbG9hdCBscyA9IGNsYXNzaWZpY2F0aW9u
LmQzOworICAgICAgICBmbG9hdCBsdCA9IDMuMGYgKiBjbGFzc2lmaWNhdGlvbi5kMjsKKyAgICAg
ICAgZmxvYXQgbHNNaW51c0x0ID0gbHMgLSBsdDsKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5h
dGVzWzBdID0gRmxvYXRQb2ludDNEKGxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbHMgKiBscyAqIGxzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMS4wZik7CisgICAgICAgIHJlc3VsdC5rbG1Db29yZGlu
YXRlc1sxXSA9IEZsb2F0UG9pbnQzRChscyAtIE9uZVRoaXJkICogbHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscyAqIGxzICogbHNNaW51c0x0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZik7Cisg
ICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1syXSA9IEZsb2F0UG9pbnQzRChscyAtIFR3b1Ro
aXJkcyAqIGx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbHNNaW51c0x0ICogbHNNaW51c0x0ICogbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAxLjBmKTsKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5h
dGVzWzNdID0gRmxvYXRQb2ludDNEKGxzTWludXNMdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxzTWludXNMdCAqIGxzTWludXNMdCAqIGxzTWludXNM
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvb3BCbGlubkNsYXNzaWZpZXI6
OmtRdWFkcmF0aWM6IHsKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzBdID0gRmxvYXRQ
b2ludDNEKDAsIDAsIDApOworICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMV0gPSBGbG9h
dFBvaW50M0QoT25lVGhpcmQsIDAsIE9uZVRoaXJkKTsKKyAgICAgICAgcmVzdWx0LmtsbUNvb3Jk
aW5hdGVzWzJdID0gRmxvYXRQb2ludDNEKFR3b1RoaXJkcywgT25lVGhpcmQsIFR3b1RoaXJkcyk7
CisgICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1szXSA9IEZsb2F0UG9pbnQzRCgxLCAxLCAx
KTsKKyAgICAgICAgaWYgKGNsYXNzaWZpY2F0aW9uLmQzIDwgMCkKKyAgICAgICAgICAgIHJldmVy
c2VPcmllbnRhdGlvbiA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
TG9vcEJsaW5uQ2xhc3NpZmllcjo6a0xpbmU6CisgICAgY2FzZSBMb29wQmxpbm5DbGFzc2lmaWVy
OjprUG9pbnQ6CisgICAgICAgIHJlc3VsdC5pc0xpbmVPclBvaW50ID0gdHJ1ZTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHNpZGVUb0ZpbGwgPT0gTG9vcEJsaW5uQ29u
c3RhbnRzOjpSaWdodFNpZGUpCisgICAgICAgIHJldmVyc2VPcmllbnRhdGlvbiA9ICFyZXZlcnNl
T3JpZW50YXRpb247CisKKyAgICBpZiAocmV2ZXJzZU9yaWVudGF0aW9uKSB7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7CisgICAgICAgICAgICByZXN1bHQua2xtQ29vcmRp
bmF0ZXNbaV0uc2V0WCgtcmVzdWx0LmtsbUNvb3JkaW5hdGVzW2ldLngoKSk7CisgICAgICAgICAg
ICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbaV0uc2V0WSgtcmVzdWx0LmtsbUNvb3JkaW5hdGVzW2ld
LnkoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9M
b29wQmxpbm5UZXh0dXJlQ29vcmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMb29wQmxpbm5UZXh0dXJl
Q29vcmRzX2gKKyNkZWZpbmUgTG9vcEJsaW5uVGV4dHVyZUNvb3Jkc19oCisKKyNpbmNsdWRlICJG
bG9hdFBvaW50M0QuaCIKKyNpbmNsdWRlICJMb29wQmxpbm5DbGFzc2lmaWVyLmgiCisjaW5jbHVk
ZSAiTG9vcEJsaW5uQ29uc3RhbnRzLmgiCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDb21wdXRlcyB0aHJlZS1kaW1lbnNpb25hbCB0
ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciB0aGUgY29udHJvbAorLy8gcG9pbnRzIG9mIGEgY3ViaWMg
Y3VydmUgZm9yIHJlbmRlcmluZyB2aWEgdGhlIHNoYWRlciBpbiAiUmVuZGVyaW5nCisvLyBWZWN0
b3IgQXJ0IG9uIHRoZSBHUFUiIGJ5IExvb3AgYW5kIEJsaW5uLCBHUFUgR2VtcyAzLCBDaGFwdGVy
IDI1LgorY2xhc3MgTG9vcEJsaW5uVGV4dHVyZUNvb3JkcyB7CitwdWJsaWM6CisgICAgLy8gQ29u
dGFpbmVyIGZvciB0aGUgY3ViaWMgdGV4dHVyZSBjb29yZGluYXRlcyBhbmQgb3RoZXIgYXNzb2Np
YXRlZAorICAgIC8vIGluZm9ybWF0aW9uLgorICAgIHN0cnVjdCBSZXN1bHQgeworICAgICAgICBS
ZXN1bHQoKQorICAgICAgICAgICAgOiBpc0xpbmVPclBvaW50KGZhbHNlKQorICAgICAgICAgICAg
LCBoYXNSZW5kZXJpbmdBcnRpZmFjdChmYWxzZSkKKyAgICAgICAgICAgICwgc3ViZGl2aXNpb25Q
YXJhbWV0ZXJWYWx1ZSgwLjBmKSB7IH0KKworICAgICAgICAvLyBUaGUgKGssIGwsIG0pIHRleHR1
cmUgY29vcmRpbmF0ZXMgdGhhdCBhcmUgdG8gYmUgYXNzb2NpYXRlZAorICAgICAgICAvLyB3aXRo
IHRoZSBmb3VyIGNvbnRyb2wgcG9pbnRzIG9mIHRoZSBjdWJpYyBjdXJ2ZS4KKyAgICAgICAgRmxv
YXRQb2ludDNEIGtsbUNvb3JkaW5hdGVzWzRdOworCisgICAgICAgIC8vIEluZGljYXRlcyB3aGV0
aGVyIHRoZSBjdXJ2ZSBpcyBhIGxpbmUgb3IgYSBwb2ludCwgaW4gd2hpY2ggY2FzZQorICAgICAg
ICAvLyB3ZSBkbyBub3QgbmVlZCB0byBhZGQgaXRzIHRyaWFuZ2xlcyB0byB0aGUgbWVzaC4KKyAg
ICAgICAgYm9vbCBpc0xpbmVPclBvaW50OworCisgICAgICAgIC8vIEZvciB0aGUgbG9vcCBjYXNl
LCBpbmRpY2F0ZXMgd2hldGhlciBhIHJlbmRlcmluZyBhcnRpZmFjdCB3YXMKKyAgICAgICAgLy8g
ZGV0ZWN0ZWQsIGluIHdoaWNoIGNhc2UgdGhlIGN1cnZlIG5lZWRzIHRvIGJlIGZ1cnRoZXIKKyAg
ICAgICAgLy8gc3ViZGl2aWRlZC4KKyAgICAgICAgYm9vbCBoYXNSZW5kZXJpbmdBcnRpZmFjdDsK
KworICAgICAgICAvLyBJZiBhIHJlbmRlcmluZyBhcnRpZmFjdCB3aWxsIG9jY3VyIGZvciB0aGUg
Z2l2ZW4gbG9vcCBjdXJ2ZSwKKyAgICAgICAgLy8gdGhpcyBpcyB0aGUgcGFyYW1ldGVyIHZhbHVl
ICgwIDw9IHZhbHVlIDw9IDEpIGF0IHdoaWNoIHRoZQorICAgICAgICAvLyBjdXJ2ZSBuZWVkcyB0
byBiZSBzdWJkaXZpZGVkIHRvIGZpeCB0aGUgYXJ0aWZhY3QuCisgICAgICAgIGZsb2F0IHN1YmRp
dmlzaW9uUGFyYW1ldGVyVmFsdWU7CisgICAgfTsKKworICAgIC8vIENvbXB1dGVzIHRoZSB0ZXh0
dXJlIGNvb3JkaW5hdGVzIGZvciBhIGN1YmljIGN1cnZlIHNlZ21lbnQncworICAgIC8vIGNvbnRy
b2wgcG9pbnRzLCBnaXZlbiB0aGUgY2xhc3NpZmljYXRpb24gb2YgdGhlIGN1cnZlIGFzIHdlbGwg
YXMKKyAgICAvLyBhbiBpbmRpY2F0aW9uIG9mIHdoaWNoIHNpZGUgaXMgdG8gYmUgZmlsbGVkLgor
ICAgIHN0YXRpYyBSZXN1bHQgY29tcHV0ZShjb25zdCBMb29wQmxpbm5DbGFzc2lmaWVyOjpSZXN1
bHQmIGNsYXNzaWZpY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBMb29wQmxpbm5D
b25zdGFudHM6OkZpbGxTaWRlIHNpZGVUb0ZpbGwpOworCitwcml2YXRlOgorICAgIC8vIFRoaXMg
Y2xhc3MgZG9lcyBub3QgbmVlZCB0byBiZSBpbnN0YW50aWF0ZWQuCisgICAgTG9vcEJsaW5uVGV4
dHVyZUNvb3JkcygpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gTG9vcEJsaW5uVGV4dHVyZUNvb3Jkc19oCg==
</data>
<flag name="commit-queue"
          id="56277"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67078</attachid>
            <date>2010-09-09 12:24:48 -0700</date>
            <delta_ts>2010-09-09 12:27:58 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>texture-coordinates.patch</filename>
            <type>text/plain</type>
            <size>15070</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzEwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTAtMDktMDkgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBjdWJpYyB0ZXh0dXJlIGNvb3JkaW5hdGUgY29tcHV0YXRpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjUwCisKKyAgICAgICAgQWRkaW5nIHRo
ZSB0ZXh0dXJlIGNvb3JkaW5hdGUgY29tcHV0YXRpb24gZm9yIGN1YmljIGN1cnZlcyBwZXIgdGhl
CisgICAgICAgIEdQVSBHZW1zIDMgY2hhcHRlci4gTm8gdGVzdHMgeWV0OyB3aWxsIGJlIHRlc3Rl
ZCBpbiBjb25qdW5jdGlvbgorICAgICAgICB3aXRoIGxhdGVyIGNvZGUuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ29uc3RhbnRzLmg6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5UZXh0dXJlQ29vcmRzLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMb29wQmxpbm5UZXh0dXJlQ29vcmRzOjpjb21wdXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxvb3BCbGlublRleHR1cmVDb29yZHM6OlJlc3Vs
dDo6UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6Okxvb3BCbGlublRleHR1cmVDb29yZHM6Okxv
b3BCbGlublRleHR1cmVDb29yZHMpOgorCiAyMDEwLTA5LTA5ICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ29uc3RhbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ29uc3RhbnRz
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxp
bm5Db25zdGFudHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgTG9vcEJsaW5uQ29uc3RhbnRzX2gKKyNkZWZpbmUgTG9vcEJsaW5uQ29uc3RhbnRzX2gKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExvb3BCbGlubkNvbnN0YW50cyB7CisKK2Vu
dW0gRmlsbFNpZGUgeworICAgIExlZnRTaWRlLAorICAgIFJpZ2h0U2lkZQorfTsKKworfSAvLyBu
YW1lc3BhY2UgTG9vcEJsaW5uQ29uc3RhbnRzCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBMb29wQmxpbm5Db25zdGFudHNfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5UZXh0dXJl
Q29vcmRzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMb29wQmxpbm5UZXh0dXJlQ29vcmRzLmgiCisKKyNp
bmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitMb29wQmxpbm5UZXh0dXJlQ29vcmRzOjpSZXN1bHQgTG9vcEJsaW5uVGV4
dHVyZUNvb3Jkczo6Y29tcHV0ZShjb25zdCBMb29wQmxpbm5DbGFzc2lmaWVyOjpSZXN1bHQmIGNs
YXNzaWZpY2F0aW9uLCBMb29wQmxpbm5Db25zdGFudHM6OkZpbGxTaWRlIHNpZGVUb0ZpbGwpCit7
CisgICAgLy8gTG9vcCBhbmQgQmxpbm4ncyBmb3JtdWxhdGlvbiBzdGF0ZXMgdGhhdCB0aGUgcmln
aHQgc2lkZSBvZiB0aGUKKyAgICAvLyBjdXJ2ZSBpcyBkZWZpbmVkIHRvIGJlIHRoZSBpbnNpZGUg
KGZpbGxlZCByZWdpb24pLCBidXQgZm9yIHNvbWUKKyAgICAvLyByZWFzb24gaXQgbG9va3MgbGlr
ZSB3aXRoIHRoZSBkZWZhdWx0IG9yaWVudGF0aW9uIHBhcmFtZXRlcnMgd2UKKyAgICAvLyBhcmUg
ZmlsbGluZyB0aGUgbGVmdCBzaWRlIG9mIHRoZSBjdXJ2ZS4gUmVnYXJkbGVzcywgYmVjYXVzZSB3
ZQorICAgIC8vIGNhbiByZWNlaXZlIGFyYml0cmFyaWx5IG9yaWVudGVkIGN1cnZlcyBhcyBpbnB1
dCwgd2UgbWlnaHQgaGF2ZQorICAgIC8vIHRvIHJldmVyc2UgdGhlIG9yaWVudGF0aW9uIG9mIHRo
ZSBjdWJpYyB0ZXh0dXJlIGNvb3JkaW5hdGVzIGV2ZW4KKyAgICAvLyBpbiBjYXNlcyB3aGVyZSB0
aGUgcGFwZXIgZG9lc24ndCBzYXkgaXQgaXMgbmVjZXNzYXJ5LgorICAgIGJvb2wgcmV2ZXJzZU9y
aWVudGF0aW9uID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IE9uZVRoaXJkID0gMS4w
ZiAvIDMuMGY7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IFR3b1RoaXJkcyA9IDIuMGYgLyAzLjBm
OworICAgIExvb3BCbGlubkNsYXNzaWZpZXI6OkN1cnZlVHlwZSBjdXJ2ZVR5cGUgPSBjbGFzc2lm
aWNhdGlvbi5jdXJ2ZVR5cGU7CisKKyAgICBMb29wQmxpbm5UZXh0dXJlQ29vcmRzOjpSZXN1bHQg
cmVzdWx0OworCisgICAgc3dpdGNoIChjdXJ2ZVR5cGUpIHsKKyAgICBjYXNlIExvb3BCbGlubkNs
YXNzaWZpZXI6OmtTZXJwZW50aW5lOiB7CisgICAgICAgIGZsb2F0IHQxID0gc3FydGYoOS4wZiAq
IGNsYXNzaWZpY2F0aW9uLmQyICogY2xhc3NpZmljYXRpb24uZDIgLSAxMiAqIGNsYXNzaWZpY2F0
aW9uLmQxICogY2xhc3NpZmljYXRpb24uZDMpOworICAgICAgICBmbG9hdCBscyA9IDMuMGYgKiBj
bGFzc2lmaWNhdGlvbi5kMiAtIHQxOworICAgICAgICBmbG9hdCBsdCA9IDYuMGYgKiBjbGFzc2lm
aWNhdGlvbi5kMTsKKyAgICAgICAgZmxvYXQgbXMgPSAzLjBmICogY2xhc3NpZmljYXRpb24uZDIg
KyB0MTsKKyAgICAgICAgZmxvYXQgbXQgPSBsdDsKKyAgICAgICAgZmxvYXQgbHRNaW51c0xzID0g
bHQgLSBsczsKKyAgICAgICAgZmxvYXQgbXRNaW51c01zID0gbXQgLSBtczsKKyAgICAgICAgcmVz
dWx0LmtsbUNvb3JkaW5hdGVzWzBdID0gRmxvYXRQb2ludDNEKGxzICogbXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscyAqIGxzICogbHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcyAqIG1zICogbXMp
OworICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMV0gPSBGbG9hdFBvaW50M0QoT25lVGhp
cmQgKiAoMy4wZiAqIGxzICogbXMgLSBscyAqIG10IC0gbHQgKiBtcyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscyAqIGxzICogKGxzIC0gbHQpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXMgKiBtcyAq
IChtcyAtIG10KSk7CisgICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1syXSA9IEZsb2F0UG9p
bnQzRChPbmVUaGlyZCAqIChsdCAqIChtdCAtIDIuMGYgKiBtcykgKyBscyAqICgzLjBmICogbXMg
LSAyLjBmICogbXQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGx0TWludXNMcyAqIGx0TWludXNMcyAqIGxzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRNaW51c01zICogbXRNaW51c01zICogbXMpOwor
ICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbM10gPSBGbG9hdFBvaW50M0QobHRNaW51c0xz
ICogbXRNaW51c01zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLShsdE1pbnVzTHMgKiBsdE1pbnVzTHMgKiBsdE1pbnVzTHMpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShtdE1pbnVzTXMgKiBtdE1pbnVz
TXMgKiBtdE1pbnVzTXMpKTsKKyAgICAgICAgaWYgKGNsYXNzaWZpY2F0aW9uLmQxIDwgMC4wZikK
KyAgICAgICAgICAgIHJldmVyc2VPcmllbnRhdGlvbiA9IHRydWU7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgTG9vcEJsaW5uQ2xhc3NpZmllcjo6a0xvb3A6IHsKKyAgICAgICAg
ZmxvYXQgdDEgPSBzcXJ0Zig0LjBmICogY2xhc3NpZmljYXRpb24uZDEgKiBjbGFzc2lmaWNhdGlv
bi5kMyAtIDMuMGYgKiBjbGFzc2lmaWNhdGlvbi5kMiAqIGNsYXNzaWZpY2F0aW9uLmQyKTsKKyAg
ICAgICAgZmxvYXQgbHMgPSBjbGFzc2lmaWNhdGlvbi5kMiAtIHQxOworICAgICAgICBmbG9hdCBs
dCA9IDIuMGYgKiBjbGFzc2lmaWNhdGlvbi5kMTsKKyAgICAgICAgZmxvYXQgbXMgPSBjbGFzc2lm
aWNhdGlvbi5kMiArIHQxOworICAgICAgICBmbG9hdCBtdCA9IGx0OworCisgICAgICAgIC8vIEZp
Z3VyZSBvdXQgd2hldGhlciB0aGVyZSBpcyBhIHJlbmRlcmluZyBhcnRpZmFjdCByZXF1aXJpbmcK
KyAgICAgICAgLy8gdGhlIGN1cnZlIHRvIGJlIHN1YmRpdmlkZWQgYnkgdGhlIGNhbGxlci4KKyAg
ICAgICAgZmxvYXQgcWwgPSBscyAvIGx0OworICAgICAgICBmbG9hdCBxbSA9IG1zIC8gbXQ7Cisg
ICAgICAgIGlmICgwLjBmIDwgcWwgJiYgcWwgPCAxLjBmKSB7CisgICAgICAgICAgICByZXN1bHQu
aGFzUmVuZGVyaW5nQXJ0aWZhY3QgPSB0cnVlOworICAgICAgICAgICAgcmVzdWx0LnN1YmRpdmlz
aW9uUGFyYW1ldGVyVmFsdWUgPSBxbDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoMC4wZiA8IHFtICYmIHFtIDwgMS4wZikgeworICAgICAgICAg
ICAgcmVzdWx0Lmhhc1JlbmRlcmluZ0FydGlmYWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJlc3Vs
dC5zdWJkaXZpc2lvblBhcmFtZXRlclZhbHVlID0gcW07CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgbHRNaW51c0xzID0gbHQgLSBsczsKKyAg
ICAgICAgZmxvYXQgbXRNaW51c01zID0gbXQgLSBtczsKKyAgICAgICAgcmVzdWx0LmtsbUNvb3Jk
aW5hdGVzWzBdID0gRmxvYXRQb2ludDNEKGxzICogbXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBscyAqIGxzICogbXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscyAqIG1zICogbXMpOworICAgICAgICBy
ZXN1bHQua2xtQ29vcmRpbmF0ZXNbMV0gPSBGbG9hdFBvaW50M0QoT25lVGhpcmQgKiAoLWxzICog
bXQgLSBsdCAqIG1zICsgMy4wZiAqIGxzICogbXMpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLU9uZVRoaXJkICogbHMgKiAobHMgKiAobXQgLSAzLjBm
ICogbXMpICsgMi4wZiAqIGx0ICogbXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLU9uZVRoaXJkICogbXMgKiAobHMgKiAoMi4wZiAqIG10IC0gMy4w
ZiAqIG1zKSArIGx0ICogbXMpKTsKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzJdID0g
RmxvYXRQb2ludDNEKE9uZVRoaXJkICogKGx0ICogKG10IC0gMi4wZiAqIG1zKSArIGxzICogKDMu
MGYgKiBtcyAtIDIuMGYgKiBtdCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgT25lVGhpcmQgKiAobHQgLSBscykgKiAobHMgKiAoMi4wZiAqIG10IC0g
My4wZiAqIG1zKSArIGx0ICogbXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgT25lVGhpcmQgKiAobXQgLSBtcykgKiAobHMgKiAobXQgLSAzLjBmICog
bXMpICsgMi4wZiAqIGx0ICogbXMpKTsKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzNd
ID0gRmxvYXRQb2ludDNEKGx0TWludXNMcyAqIG10TWludXNNcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0obHRNaW51c0xzICogbHRNaW51c0xzKSAq
IG10TWludXNNcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC1sdE1pbnVzTHMgKiBtdE1pbnVzTXMgKiBtdE1pbnVzTXMpOworICAgICAgICByZXZlcnNl
T3JpZW50YXRpb24gPSAoKGNsYXNzaWZpY2F0aW9uLmQxID4gMC4wZiAmJiByZXN1bHQua2xtQ29v
cmRpbmF0ZXNbMF0ueCgpIDwgMC4wZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChj
bGFzc2lmaWNhdGlvbi5kMSA8IDAuMGYgJiYgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzBdLngoKSA+
IDAuMGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb29wQmxpbm5DbGFz
c2lmaWVyOjprQ3VzcDogeworICAgICAgICBmbG9hdCBscyA9IGNsYXNzaWZpY2F0aW9uLmQzOwor
ICAgICAgICBmbG9hdCBsdCA9IDMuMGYgKiBjbGFzc2lmaWNhdGlvbi5kMjsKKyAgICAgICAgZmxv
YXQgbHNNaW51c0x0ID0gbHMgLSBsdDsKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzBd
ID0gRmxvYXRQb2ludDNEKGxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbHMgKiBscyAqIGxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMS4wZik7CisgICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1sx
XSA9IEZsb2F0UG9pbnQzRChscyAtIE9uZVRoaXJkICogbHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscyAqIGxzICogbHNNaW51c0x0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZik7CisgICAgICAg
IHJlc3VsdC5rbG1Db29yZGluYXRlc1syXSA9IEZsb2F0UG9pbnQzRChscyAtIFR3b1RoaXJkcyAq
IGx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNN
aW51c0x0ICogbHNNaW51c0x0ICogbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxLjBmKTsKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzNd
ID0gRmxvYXRQb2ludDNEKGxzTWludXNMdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxzTWludXNMdCAqIGxzTWludXNMdCAqIGxzTWludXNMdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvb3BCbGlubkNsYXNzaWZpZXI6OmtRdWFk
cmF0aWM6IHsKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzBdID0gRmxvYXRQb2ludDNE
KDAsIDAsIDApOworICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMV0gPSBGbG9hdFBvaW50
M0QoT25lVGhpcmQsIDAsIE9uZVRoaXJkKTsKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVz
WzJdID0gRmxvYXRQb2ludDNEKFR3b1RoaXJkcywgT25lVGhpcmQsIFR3b1RoaXJkcyk7CisgICAg
ICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1szXSA9IEZsb2F0UG9pbnQzRCgxLCAxLCAxKTsKKyAg
ICAgICAgaWYgKGNsYXNzaWZpY2F0aW9uLmQzIDwgMCkKKyAgICAgICAgICAgIHJldmVyc2VPcmll
bnRhdGlvbiA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9vcEJs
aW5uQ2xhc3NpZmllcjo6a0xpbmU6CisgICAgY2FzZSBMb29wQmxpbm5DbGFzc2lmaWVyOjprUG9p
bnQ6CisgICAgICAgIHJlc3VsdC5pc0xpbmVPclBvaW50ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgaWYgKHNpZGVUb0ZpbGwgPT0gTG9vcEJsaW5uQ29uc3RhbnRz
OjpSaWdodFNpZGUpCisgICAgICAgIHJldmVyc2VPcmllbnRhdGlvbiA9ICFyZXZlcnNlT3JpZW50
YXRpb247CisKKyAgICBpZiAocmV2ZXJzZU9yaWVudGF0aW9uKSB7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgNDsgKytpKSB7CisgICAgICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNb
aV0uc2V0WCgtcmVzdWx0LmtsbUNvb3JkaW5hdGVzW2ldLngoKSk7CisgICAgICAgICAgICByZXN1
bHQua2xtQ29vcmRpbmF0ZXNbaV0uc2V0WSgtcmVzdWx0LmtsbUNvb3JkaW5hdGVzW2ldLnkoKSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxp
bm5UZXh0dXJlQ29vcmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMb29wQmxpbm5UZXh0dXJlQ29vcmRz
X2gKKyNkZWZpbmUgTG9vcEJsaW5uVGV4dHVyZUNvb3Jkc19oCisKKyNpbmNsdWRlICJGbG9hdFBv
aW50M0QuaCIKKyNpbmNsdWRlICJMb29wQmxpbm5DbGFzc2lmaWVyLmgiCisjaW5jbHVkZSAiTG9v
cEJsaW5uQ29uc3RhbnRzLmgiCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBDb21wdXRlcyB0aHJlZS1kaW1lbnNpb25hbCB0ZXh0dXJl
IGNvb3JkaW5hdGVzIGZvciB0aGUgY29udHJvbAorLy8gcG9pbnRzIG9mIGEgY3ViaWMgY3VydmUg
Zm9yIHJlbmRlcmluZyB2aWEgdGhlIHNoYWRlciBpbiAiUmVuZGVyaW5nCisvLyBWZWN0b3IgQXJ0
IG9uIHRoZSBHUFUiIGJ5IExvb3AgYW5kIEJsaW5uLCBHUFUgR2VtcyAzLCBDaGFwdGVyIDI1Lgor
Y2xhc3MgTG9vcEJsaW5uVGV4dHVyZUNvb3JkcyB7CitwdWJsaWM6CisgICAgLy8gQ29udGFpbmVy
IGZvciB0aGUgY3ViaWMgdGV4dHVyZSBjb29yZGluYXRlcyBhbmQgb3RoZXIgYXNzb2NpYXRlZAor
ICAgIC8vIGluZm9ybWF0aW9uLgorICAgIHN0cnVjdCBSZXN1bHQgeworICAgICAgICBSZXN1bHQo
KQorICAgICAgICAgICAgOiBpc0xpbmVPclBvaW50KGZhbHNlKQorICAgICAgICAgICAgLCBoYXNS
ZW5kZXJpbmdBcnRpZmFjdChmYWxzZSkKKyAgICAgICAgICAgICwgc3ViZGl2aXNpb25QYXJhbWV0
ZXJWYWx1ZSgwLjBmKSB7IH0KKworICAgICAgICAvLyBUaGUgKGssIGwsIG0pIHRleHR1cmUgY29v
cmRpbmF0ZXMgdGhhdCBhcmUgdG8gYmUgYXNzb2NpYXRlZAorICAgICAgICAvLyB3aXRoIHRoZSBm
b3VyIGNvbnRyb2wgcG9pbnRzIG9mIHRoZSBjdWJpYyBjdXJ2ZS4KKyAgICAgICAgRmxvYXRQb2lu
dDNEIGtsbUNvb3JkaW5hdGVzWzRdOworCisgICAgICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIHRo
ZSBjdXJ2ZSBpcyBhIGxpbmUgb3IgYSBwb2ludCwgaW4gd2hpY2ggY2FzZQorICAgICAgICAvLyB3
ZSBkbyBub3QgbmVlZCB0byBhZGQgaXRzIHRyaWFuZ2xlcyB0byB0aGUgbWVzaC4KKyAgICAgICAg
Ym9vbCBpc0xpbmVPclBvaW50OworCisgICAgICAgIC8vIEZvciB0aGUgbG9vcCBjYXNlLCBpbmRp
Y2F0ZXMgd2hldGhlciBhIHJlbmRlcmluZyBhcnRpZmFjdCB3YXMKKyAgICAgICAgLy8gZGV0ZWN0
ZWQsIGluIHdoaWNoIGNhc2UgdGhlIGN1cnZlIG5lZWRzIHRvIGJlIGZ1cnRoZXIKKyAgICAgICAg
Ly8gc3ViZGl2aWRlZC4KKyAgICAgICAgYm9vbCBoYXNSZW5kZXJpbmdBcnRpZmFjdDsKKworICAg
ICAgICAvLyBJZiBhIHJlbmRlcmluZyBhcnRpZmFjdCB3aWxsIG9jY3VyIGZvciB0aGUgZ2l2ZW4g
bG9vcCBjdXJ2ZSwKKyAgICAgICAgLy8gdGhpcyBpcyB0aGUgcGFyYW1ldGVyIHZhbHVlICgwIDw9
IHZhbHVlIDw9IDEpIGF0IHdoaWNoIHRoZQorICAgICAgICAvLyBjdXJ2ZSBuZWVkcyB0byBiZSBz
dWJkaXZpZGVkIHRvIGZpeCB0aGUgYXJ0aWZhY3QuCisgICAgICAgIGZsb2F0IHN1YmRpdmlzaW9u
UGFyYW1ldGVyVmFsdWU7CisgICAgfTsKKworICAgIC8vIENvbXB1dGVzIHRoZSB0ZXh0dXJlIGNv
b3JkaW5hdGVzIGZvciBhIGN1YmljIGN1cnZlIHNlZ21lbnQncworICAgIC8vIGNvbnRyb2wgcG9p
bnRzLCBnaXZlbiB0aGUgY2xhc3NpZmljYXRpb24gb2YgdGhlIGN1cnZlIGFzIHdlbGwgYXMKKyAg
ICAvLyBhbiBpbmRpY2F0aW9uIG9mIHdoaWNoIHNpZGUgaXMgdG8gYmUgZmlsbGVkLgorICAgIHN0
YXRpYyBSZXN1bHQgY29tcHV0ZShjb25zdCBMb29wQmxpbm5DbGFzc2lmaWVyOjpSZXN1bHQmIGNs
YXNzaWZpY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBMb29wQmxpbm5Db25zdGFu
dHM6OkZpbGxTaWRlIHNpZGVUb0ZpbGwpOworCitwcml2YXRlOgorICAgIC8vIFRoaXMgY2xhc3Mg
ZG9lcyBub3QgbmVlZCB0byBiZSBpbnN0YW50aWF0ZWQuCisgICAgTG9vcEJsaW5uVGV4dHVyZUNv
b3JkcygpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTG9v
cEJsaW5uVGV4dHVyZUNvb3Jkc19oCg==
</data>
<flag name="review"
          id="56279"
          type_id="1"
          status="+"
          setter="jamesr"
    />
    <flag name="commit-queue"
          id="56280"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>