<?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>45160</bug_id>
          
          <creation_ts>2010-09-02 19:30:09 -0700</creation_ts>
          <short_desc>Add interval tree capable of holding plain old data (POD)</short_desc>
          <delta_ts>2010-09-05 20:47: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>WebCore Misc.</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>
          <dependson>45059</dependson>
          <blocked>44729</blocked>
    
    <blocked>45161</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>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>273747</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-02 19:30:09 -0700</bug_when>
    <thetext>An interval tree capable of holding plain old data (POD) is needed in support of some graphics algorithms currently being integrated. It can be used for a general class of graphics problems, including determining all overlaps of sets of rectangles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273755</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-02 19:43:17 -0700</bug_when>
    <thetext>Unit tests for the interval tree will be integrated separately under https://bugs.webkit.org/show_bug.cgi?id=45161 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273758</commentid>
    <comment_count>2</comment_count>
      <attachid>66462</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-02 19:48:17 -0700</bug_when>
    <thetext>Created attachment 66462
Patch

From the ChangeLog:

Adding an interval tree currently capable of holding types which do not require their destructors to be called. POD is a slight misnomer which will be corrected soon, hopefully by removing this restriction.

This class is based on the augmentable property of the red/black tree integrated under bug 45059.

Unit tests for the PODIntervalTree will be integrated separately under bug 45161.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273761</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-02 19:52:47 -0700</bug_when>
    <thetext>Attachment 66462 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/graphics/gpu/PODIntervalTree.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 3 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>273766</commentid>
    <comment_count>4</comment_count>
      <attachid>66466</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-02 20:10:16 -0700</bug_when>
    <thetext>Created attachment 66466
Revised patch

Fixed style error in above patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274245</commentid>
    <comment_count>5</comment_count>
      <attachid>66466</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-09-03 16:12:15 -0700</bug_when>
    <thetext>Comment on attachment 66466
Revised patch

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

&gt; WebCore/platform/graphics/gpu/PODIntervalTree.h:81
&gt; +class PODInterval {
nit: move to a separate header file (PODInterval.h)

&gt; WebCore/platform/graphics/gpu/PODIntervalTree.h:170
&gt; +                     public PODRedBlackTree&lt;PODInterval&lt;T, UserData&gt; &gt; {
nit: indentation

&gt; WebCore/platform/graphics/gpu/PODIntervalTree.h:336
&gt; +String valueToString(const PODInterval&lt;T, UserData&gt;&amp; interval)
nit: move to PODInterval.h


R=me w/ those changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274280</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-03 17:21:45 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 66466 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=66466&amp;action=prettypatch
&gt; 
&gt; &gt; WebCore/platform/graphics/gpu/PODIntervalTree.h:81
&gt; &gt; +class PODInterval {
&gt; nit: move to a separate header file (PODInterval.h)
&gt; 
&gt; &gt; WebCore/platform/graphics/gpu/PODIntervalTree.h:170
&gt; &gt; +                     public PODRedBlackTree&lt;PODInterval&lt;T, UserData&gt; &gt; {
&gt; nit: indentation
&gt; 
&gt; &gt; WebCore/platform/graphics/gpu/PODIntervalTree.h:336
&gt; &gt; +String valueToString(const PODInterval&lt;T, UserData&gt;&amp; interval)
&gt; nit: move to PODInterval.h
&gt; 
&gt; 
&gt; R=me w/ those changes

Will fix these in the landed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274283</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-03 17:25:21 -0700</bug_when>
    <thetext>Committed r66779: &lt;http://trac.webkit.org/changeset/66779&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66462</attachid>
            <date>2010-09-02 19:48:17 -0700</date>
            <delta_ts>2010-09-02 20:10:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>interval-tree.patch</filename>
            <type>text/plain</type>
            <size>14825</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjcwNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTAtMDktMDIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBpbnRlcnZhbCB0cmVlIGNhcGFibGUgb2YgaG9sZGluZyBwbGFpbiBvbGQgZGF0YSAoUE9EKQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUxNjAKKwor
ICAgICAgICBBZGRpbmcgYW4gaW50ZXJ2YWwgdHJlZSBjdXJyZW50bHkgY2FwYWJsZSBvZiBob2xk
aW5nIHR5cGVzIHdoaWNoCisgICAgICAgIGRvIG5vdCByZXF1aXJlIHRoZWlyIGRlc3RydWN0b3Jz
IHRvIGJlIGNhbGxlZC4gUE9EIGlzIGEgc2xpZ2h0CisgICAgICAgIG1pc25vbWVyIHdoaWNoIHdp
bGwgYmUgY29ycmVjdGVkIHNvb24sIGhvcGVmdWxseSBieSByZW1vdmluZyB0aGlzCisgICAgICAg
IHJlc3RyaWN0aW9uLgorCisgICAgICAgIFRoaXMgY2xhc3MgaXMgYmFzZWQgb24gdGhlIGF1Z21l
bnRhYmxlIHByb3BlcnR5IG9mIHRoZSByZWQvYmxhY2sKKyAgICAgICAgdHJlZSBpbnRlZ3JhdGVk
IHVuZGVyIGJ1ZyA0NTA1OS4KKworICAgICAgICBVbml0IHRlc3RzIGZvciB0aGUgUE9ESW50ZXJ2
YWxUcmVlIHdpbGwgYmUgaW50ZWdyYXRlZCBzZXBhcmF0ZWx5CisgICAgICAgIHVuZGVyIGJ1ZyA0
NTE2MS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvUE9ESW50ZXJ2YWxUcmVlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UE9E
SW50ZXJ2YWw6OlBPREludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlBPREludGVydmFsOjps
b3cpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWw6OmhpZ2gpOgorICAgICAgICAoV2Vi
Q29yZTo6UE9ESW50ZXJ2YWw6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWw6
Om92ZXJsYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlBPREludGVydmFsOjpvcGVyYXRvcjwpOgor
ICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWw6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2Vi
Q29yZTo6UE9ESW50ZXJ2YWw6Om1heEhpZ2gpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2
YWw6OnNldE1heEhpZ2gpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWw6OnRvU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlBPREludGVydmFsVHJlZTo6UE9ESW50ZXJ2YWxUcmVlKToK
KyAgICAgICAgKFdlYkNvcmU6OlBPREludGVydmFsVHJlZTo6YWxsT3ZlcmxhcHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxUcmVlOjpjcmVhdGVJbnRlcnZhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpQT0RJbnRlcnZhbFRyZWU6OmNoZWNrSW52YXJpYW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpQT0RJbnRlcnZhbFRyZWU6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2
YWxUcmVlOjpzZWFyY2hGb3JPdmVybGFwc0Zyb20pOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50
ZXJ2YWxUcmVlOjp1cGRhdGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBPREludGVydmFsVHJl
ZTo6Y2hlY2tJbnZhcmlhbnRzRnJvbU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVUb1N0
cmluZyk6CisKIDIwMTAtMDktMDIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA2Njcw
NikKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQyLDYgKzIz
NDIsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3Jh
cGhpYy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
R3JhcGhpYy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvUE9EQXJlbmEu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1BPREludGVydmFsVHJlZS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvUE9EUmVkQmxhY2tUcmVlLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFkZXIuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhZGVyLmgnLApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvUE9ESW50ZXJ2YWxUcmVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvUE9ESW50ZXJ2YWxUcmVlLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9QT0RJbnRlcnZhbFRyZWUuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCwgR29vZ2xl
IEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFBPREludGVydmFsVHJlZV9oCisj
ZGVmaW5lIFBPREludGVydmFsVHJlZV9oCisKKyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisj
aW5jbHVkZSAiUE9EQXJlbmEuaCIKKyNpbmNsdWRlICJQT0RSZWRCbGFja1RyZWUuaCIKKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDbGFzcyBy
ZXByZXNlbnRpbmcgYSBjbG9zZWQgaW50ZXJ2YWwgd2hpY2ggY2FuIGhvbGQgYW4gYXJiaXRyYXJ5
CisvLyBQbGFpbiBPbGQgRGF0YXR5cGUgKFBPRCkgYXMgaXRzIGVuZHBvaW50cyBhbmQgYSBwaWVj
ZSBvZiB1c2VyCisvLyBkYXRhLiBBbiBpbXBvcnRhbnQgY2hhcmFjdGVyaXN0aWMgZm9yIHRoZSBh
bGdvcml0aG1zIHdlIHVzZSBpcyB0aGF0CisvLyBpZiB0d28gaW50ZXJ2YWxzIGhhdmUgaWRlbnRp
Y2FsIGVuZHBvaW50cyBidXQgZGlmZmVyZW50IHVzZXIgZGF0YSwKKy8vIHRoZXkgYXJlIG5vdCBj
b25zaWRlcmVkIHRvIGJlIGVxdWFsLiBUaGlzIHNpdHVhdGlvbiBjYW4gYXJpc2Ugd2hlbgorLy8g
cmVwcmVzZW50aW5nIHRoZSB2ZXJ0aWNhbCBleHRlbnRzIG9mIGJvdW5kaW5nIGJveGVzIG9mIG92
ZXJsYXBwaW5nCisvLyB0cmlhbmdsZXMsIHdoZXJlIHRoZSBwb2ludGVyIHRvIHRoZSB0cmlhbmds
ZSBpcyB0aGUgdXNlciBkYXRhIG9mCisvLyB0aGUgaW50ZXJ2YWwuCisvLworLy8gKk5vdGUqIHRo
YXQgdGhlIGRlc3RydWN0b3JzIG9mIHR5cGUgVCBhbmQgVXNlckRhdGEgd2lsbCAqbm90KiBiZQor
Ly8gY2FsbGVkIGJ5IHRoaXMgY2xhc3MuIFRoZXkgbXVzdCBub3QgYWxsb2NhdGUgYW55IG1lbW9y
eSB0aGF0IGlzCisvLyByZXF1aXJlZCB0byBiZSBjbGVhbmVkIHVwIGluIHRoZWlyIGRlc3RydWN0
b3JzLgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgY29uc3RydWN0b3JzIGFuZCBvcGVyYXRvcnMgbXVz
dCBiZSBpbXBsZW1lbnRlZCBvbgorLy8gdHlwZSBUOgorLy8KKy8vICAgLSBDb3B5IGNvbnN0cnVj
dG9yIChpZiB1c2VyIGRhdGEgaXMgZGVzaXJlZCkKKy8vICAgLSBvcGVyYXRvcjwKKy8vICAgLSBv
cGVyYXRvcj09CisvLyAgIC0gb3BlcmF0b3I9CisvLworLy8gSWYgdGhlIFVzZXJEYXRhIHR5cGUg
aXMgc3BlY2lmaWVkLCBpdCBtdXN0IHN1cHBvcnQgYSBjb3B5CisvLyBjb25zdHJ1Y3RvciBhbmQg
YXNzaWdubWVudCBvcGVyYXRvci4KKy8vCisvLyBJbiBkZWJ1ZyBtb2RlLCBwcmludGluZyBvZiBp
bnRlcnZhbHMgYW5kIHRoZSBkYXRhIHRoZXkgY29udGFpbiBpcworLy8gZW5hYmxlZC4gVGhpcyBy
ZXF1aXJlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0byBiZSBhdmFpbGFibGU6CisvLworLy8g
ICBTdHJpbmcgdmFsdWVUb1N0cmluZyhjb25zdCBUJik7CisvLyAgIFN0cmluZyB2YWx1ZVRvU3Ry
aW5nKGNvbnN0IFVzZXJEYXRhJik7CisvLworLy8gTm90ZSB0aGF0IHRoaXMgY2xhc3MgcmVxdWly
ZXMgYSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBhc3NpZ25tZW50CisvLyBvcGVyYXRvciBpbiBvcmRl
ciB0byBiZSBzdG9yZWQgaW4gdGhlIHJlZC1ibGFjayB0cmVlLgorCit0ZW1wbGF0ZTxjbGFzcyBU
LCBjbGFzcyBVc2VyRGF0YSA9IHZvaWQqPgorY2xhc3MgUE9ESW50ZXJ2YWwgeworcHVibGljOgor
ICAgIC8vIENvbnN0cnVjdG9yIGZyb20gZW5kcG9pbnRzLiBUaGlzIGNvbnN0cnVjdG9yIG9ubHkg
d29ya3Mgd2hlbiB0aGUKKyAgICAvLyBVc2VyRGF0YSB0eXBlIGlzIGEgcG9pbnRlciBvciBvdGhl
ciB0eXBlIHdoaWNoIGNhbiBiZSBpbml0aWFsaXplZAorICAgIC8vIHdpdGggMC4KKyAgICBQT0RJ
bnRlcnZhbChjb25zdCBUJiBsb3csIGNvbnN0IFQmIGhpZ2gpCisgICAgICAgIDogbV9sb3cobG93
KQorICAgICAgICAsIG1faGlnaChoaWdoKQorICAgICAgICAsIG1fZGF0YSgwKQorICAgICAgICAs
IG1fbWF4SGlnaChoaWdoKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBDb25zdHJ1Y3RvciBmcm9t
IHR3byBlbmRwb2ludHMgcGx1cyBleHBsaWNpdCB1c2VyIGRhdGEuCisgICAgUE9ESW50ZXJ2YWwo
Y29uc3QgVCYgbG93LCBjb25zdCBUJiBoaWdoLCBjb25zdCBVc2VyRGF0YSBkYXRhKQorICAgICAg
ICA6IG1fbG93KGxvdykKKyAgICAgICAgLCBtX2hpZ2goaGlnaCkKKyAgICAgICAgLCBtX2RhdGEo
ZGF0YSkKKyAgICAgICAgLCBtX21heEhpZ2goaGlnaCkKKyAgICB7CisgICAgfQorCisgICAgY29u
c3QgVCYgbG93KCkgY29uc3QgeyByZXR1cm4gbV9sb3c7IH0KKyAgICBjb25zdCBUJiBoaWdoKCkg
Y29uc3QgeyByZXR1cm4gbV9oaWdoOyB9CisgICAgY29uc3QgVXNlckRhdGEmIGRhdGEoKSBjb25z
dCB7IHJldHVybiBtX2RhdGE7IH0KKworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgVCYgbG93LCBj
b25zdCBUJiBoaWdoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHRoaXMtPmhpZ2goKSA8IGxv
dykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGhpZ2ggPCB0aGlzLT5s
b3coKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBQT0RJbnRlcnZhbCYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gb3ZlcmxhcHMob3RoZXIubG93KCksIG90aGVyLmhpZ2go
KSk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaW50ZXJ2YWwgaXMgImxl
c3MiIHRoYW4gdGhlIG90aGVyLiBUaGUKKyAgICAvLyBjb21wYXJpc29uIGlzIHBlcmZvcm1lZCBv
biB0aGUgbG93IGVuZHBvaW50cyBvZiB0aGUgaW50ZXJ2YWxzLgorICAgIGJvb2wgb3BlcmF0b3I8
KGNvbnN0IFBPREludGVydmFsJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBs
b3coKSA8IG90aGVyLmxvdygpOworICAgIH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlz
IGludGVydmFsIGlzIHN0cmljdGx5IGVxdWFsIHRvIHRoZSBvdGhlciwKKyAgICAvLyBpbmNsdWRp
bmcgY29tcGFyaXNvbiBvZiB0aGUgdXNlciBkYXRhLgorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBQT0RJbnRlcnZhbCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKGxvdygp
ID09IG90aGVyLmxvdygpCisgICAgICAgICAgICAgICAgJiYgaGlnaCgpID09IG90aGVyLmhpZ2go
KQorICAgICAgICAgICAgICAgICYmIGRhdGEoKSA9PSBvdGhlci5kYXRhKCkpOworICAgIH0KKwor
ICAgIGNvbnN0IFQmIG1heEhpZ2goKSBjb25zdCB7IHJldHVybiBtX21heEhpZ2g7IH0KKyAgICB2
b2lkIHNldE1heEhpZ2goY29uc3QgVCYgbWF4SGlnaCkgeyBtX21heEhpZ2ggPSBtYXhIaWdoOyB9
CisKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gU3VwcG9ydCBmb3IgcHJpbnRpbmcgUE9ESW50ZXJ2
YWxzLgorICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0CisgICAgeworICAgICAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJbUE9ESW50ZXJ2YWwgKCIp
OworICAgICAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZVRvU3RyaW5nKGxvdygpKSk7CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZVRvU3Ry
aW5nKGhpZ2goKSkpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiKSwgZGF0YT0iKTsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQodmFsdWVUb1N0cmluZyhkYXRhKCkpKTsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiwgbWF4SGlnaD0iKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQodmFsdWVUb1N0
cmluZyhtYXhIaWdoKCkpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIl0iKTsKKyAgICAgICAg
cmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAg
ICBUIG1fbG93OworICAgIFQgbV9oaWdoOworICAgIFVzZXJEYXRhIG1fZGF0YTsKKyAgICBUIG1f
bWF4SGlnaDsKK307CisKKy8vIEFuIGludGVydmFsIHRyZWUsIHdoaWNoIGlzIGEgZm9ybSBvZiBh
dWdtZW50ZWQgcmVkLWJsYWNrIHRyZWUuIEl0CisvLyBzdXBwb3J0cyBlZmZpY2llbnQgKE8obGcg
bikpIGluc2VydGlvbiwgcmVtb3ZhbCBhbmQgcXVlcnlpbmcgb2YKKy8vIGludGVydmFscyBpbiB0
aGUgdHJlZS4KK3RlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFVzZXJEYXRhID0gdm9pZCo+CitjbGFz
cyBQT0RJbnRlcnZhbFRyZWUgOiBwdWJsaWMgTm9uY29weWFibGUsCisgICAgICAgICAgICAgICAg
ICAgICBwdWJsaWMgUE9EUmVkQmxhY2tUcmVlPFBPREludGVydmFsPFQsIFVzZXJEYXRhPiA+IHsK
K3B1YmxpYzoKKyAgICAvLyBUeXBlZGVmIHRvIHJlZHVjZSB0eXBpbmcgd2hlbiBkZWNsYXJpbmcg
aW50ZXJ2YWxzIHRvIGJlIHN0b3JlZCBpbgorICAgIC8vIHRoaXMgdHJlZS4KKyAgICB0eXBlZGVm
IFBPREludGVydmFsPFQsIFVzZXJEYXRhPiBJbnRlcnZhbFR5cGU7CisKKyAgICBQT0RJbnRlcnZh
bFRyZWUoKQorICAgICAgICA6IFBPRFJlZEJsYWNrVHJlZTxJbnRlcnZhbFR5cGU+KCkKKyAgICB7
CisgICAgICAgIGluaXQoKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBQT0RJbnRlcnZhbFRyZWUo
UE9EQXJlbmEqIGFyZW5hKQorICAgICAgICA6IFBPRFJlZEJsYWNrVHJlZTxJbnRlcnZhbFR5cGU+
KGFyZW5hKQorICAgIHsKKyAgICAgICAgaW5pdCgpOworICAgIH0KKworICAgIC8vIFJldHVybnMg
YWxsIGludGVydmFscyBpbiB0aGUgdHJlZSB3aGljaCBvdmVybGFwIHRoZSBnaXZlbiBxdWVyeQor
ICAgIC8vIGludGVydmFsLiBUaGUgcmV0dXJuZWQgaW50ZXJ2YWxzIGFyZSBzb3J0ZWQgYnkgaW5j
cmVhc2luZyBsb3cKKyAgICAvLyBlbmRwb2ludC4KKyAgICBWZWN0b3I8SW50ZXJ2YWxUeXBlPiBh
bGxPdmVybGFwcyhjb25zdCBJbnRlcnZhbFR5cGUmIGludGVydmFsKSBjb25zdAorICAgIHsKKyAg
ICAgICAgVmVjdG9yPEludGVydmFsVHlwZT4gcmVzdWx0OworICAgICAgICBhbGxPdmVybGFwcyhp
bnRlcnZhbCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAv
LyBSZXR1cm5zIGFsbCBpbnRlcnZhbHMgaW4gdGhlIHRyZWUgd2hpY2ggb3ZlcmxhcCB0aGUgZ2l2
ZW4gcXVlcnkKKyAgICAvLyBpbnRlcnZhbC4gVGhlIHJldHVybmVkIGludGVydmFscyBhcmUgc29y
dGVkIGJ5IGluY3JlYXNpbmcgbG93CisgICAgLy8gZW5kcG9pbnQuCisgICAgdm9pZCBhbGxPdmVy
bGFwcyhjb25zdCBJbnRlcnZhbFR5cGUmIGludGVydmFsLCBWZWN0b3I8SW50ZXJ2YWxUeXBlPiYg
cmVzdWx0KSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gRXhwbGljaXQgZGVyZWZlcmVuY2Ugb2Yg
InRoaXMiIHJlcXVpcmVkIGJlY2F1c2Ugb2YKKyAgICAgICAgLy8gaW5oZXJpdGFuY2UgcnVsZXMg
aW4gdGVtcGxhdGUgY2xhc3Nlcy4KKyAgICAgICAgc2VhcmNoRm9yT3ZlcmxhcHNGcm9tKHRoaXMt
PnJvb3QoKSwgaW50ZXJ2YWwsIHJlc3VsdCk7CisgICAgfQorCisgICAgLy8gSGVscGVyIHRvIGNy
ZWF0ZSBpbnRlcnZhbCBvYmplY3RzLgorICAgIHN0YXRpYyBJbnRlcnZhbFR5cGUgY3JlYXRlSW50
ZXJ2YWwoY29uc3QgVCYgbG93LCBjb25zdCBUJiBoaWdoLCBjb25zdCBVc2VyRGF0YSBkYXRhID0g
MCkKKyAgICB7CisgICAgICAgIHJldHVybiBJbnRlcnZhbFR5cGUobG93LCBoaWdoLCBkYXRhKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tJbnZhcmlhbnRzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghUE9EUmVkQmxhY2tUcmVlPEludGVydmFsVHlwZT46OmNoZWNrSW52YXJp
YW50cygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIXRoaXMtPnJv
b3QoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gY2hlY2tJbnZh
cmlhbnRzRnJvbU5vZGUodGhpcy0+cm9vdCgpLCAwKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
dHlwZWRlZiB0eXBlbmFtZSBQT0RSZWRCbGFja1RyZWU8SW50ZXJ2YWxUeXBlPjo6Tm9kZSBJbnRl
cnZhbE5vZGU7CisKKyAgICAvLyBJbml0aWFsaXplcyB0aGUgdHJlZS4KKyAgICB2b2lkIGluaXQo
KQorICAgIHsKKyAgICAgICAgLy8gRXhwbGljaXQgZGVyZWZlcmVuY2Ugb2YgInRoaXMiIHJlcXVp
cmVkIGJlY2F1c2Ugb2YKKyAgICAgICAgLy8gaW5oZXJpdGFuY2UgcnVsZXMgaW4gdGVtcGxhdGUg
Y2xhc3Nlcy4KKyAgICAgICAgdGhpcy0+c2V0TmVlZHNGdWxsT3JkZXJpbmdDb21wYXJpc29ucyh0
cnVlKTsKKyAgICB9CisKKyAgICAvLyBTdGFydGluZyBmcm9tIHRoZSBnaXZlbiBub2RlLCBhZGRz
IGFsbCBvdmVybGFwcyB3aXRoIHRoZSBnaXZlbgorICAgIC8vIGludGVydmFsIHRvIHRoZSByZXN1
bHQgdmVjdG9yLiBUaGUgaW50ZXJ2YWxzIGFyZSBzb3J0ZWQgYnkKKyAgICAvLyBpbmNyZWFzaW5n
IGxvdyBlbmRwb2ludC4KKyAgICB2b2lkIHNlYXJjaEZvck92ZXJsYXBzRnJvbShJbnRlcnZhbE5v
ZGUqIG5vZGUsIGNvbnN0IEludGVydmFsVHlwZSYgaW50ZXJ2YWwsIFZlY3RvcjxJbnRlcnZhbFR5
cGU+JiByZXMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgLy8gQmVjYXVzZSB0aGUgaW50ZXJ2YWxzIGFyZSBzb3J0ZWQgYnkg
bGVmdCBlbmRwb2ludCwgaW5vcmRlcgorICAgICAgICAvLyB0cmF2ZXJzYWwgcHJvZHVjZXMgcmVz
dWx0cyBzb3J0ZWQgYXMgZGVzaXJlZC4KKworICAgICAgICAvLyBTZWUgd2hldGhlciB3ZSBuZWVk
IHRvIHRyYXZlcnNlIHRoZSBsZWZ0IHN1YnRyZWUuCisgICAgICAgIEludGVydmFsTm9kZSogbGVm
dCA9IG5vZGUtPmxlZnQoKTsKKyAgICAgICAgaWYgKGxlZnQKKyAgICAgICAgICAgIC8vIFRoaXMg
aXMgcGhyYXNlZCB0aGlzIHdheSB0byBhdm9pZCB0aGUgbmVlZCBmb3Igb3BlcmF0b3IKKyAgICAg
ICAgICAgIC8vIDw9IG9uIHR5cGUgVC4KKyAgICAgICAgICAgICYmICEobGVmdC0+ZGF0YSgpLm1h
eEhpZ2goKSA8IGludGVydmFsLmxvdygpKSkKKyAgICAgICAgICAgIHNlYXJjaEZvck92ZXJsYXBz
RnJvbShsZWZ0LCBpbnRlcnZhbCwgcmVzKTsKKworICAgICAgICAvLyBDaGVjayBmb3Igb3Zlcmxh
cCB3aXRoIGN1cnJlbnQgbm9kZS4KKyAgICAgICAgaWYgKG5vZGUtPmRhdGEoKS5vdmVybGFwcyhp
bnRlcnZhbCkpCisgICAgICAgICAgICByZXMuYXBwZW5kKG5vZGUtPmRhdGEoKSk7CisKKyAgICAg
ICAgLy8gU2VlIHdoZXRoZXIgd2UgbmVlZCB0byB0cmF2ZXJzZSB0aGUgcmlnaHQgc3VidHJlZS4K
KyAgICAgICAgLy8gVGhpcyBpcyBwaHJhc2VkIHRoaXMgd2F5IHRvIGF2b2lkIHRoZSBuZWVkIGZv
ciBvcGVyYXRvciA8PQorICAgICAgICAvLyBvbiB0eXBlIFQuCisgICAgICAgIGlmICghKGludGVy
dmFsLmhpZ2goKSA8IG5vZGUtPmRhdGEoKS5sb3coKSkpCisgICAgICAgICAgICBzZWFyY2hGb3JP
dmVybGFwc0Zyb20obm9kZS0+cmlnaHQoKSwgaW50ZXJ2YWwsIHJlcyk7CisgICAgfQorCisgICAg
dmlydHVhbCBib29sIHVwZGF0ZU5vZGUoSW50ZXJ2YWxOb2RlKiBub2RlKQorICAgIHsKKyAgICAg
ICAgLy8gV291bGQgdXNlIGNvbnN0IFQmLCBidXQgbmVlZCB0byByZWFzc2lnbiB0aGlzIHJlZmVy
ZW5jZSBpbiB0aGlzCisgICAgICAgIC8vIGZ1bmN0aW9uLgorICAgICAgICBjb25zdCBUKiBjdXJN
YXggPSAmbm9kZS0+ZGF0YSgpLmhpZ2goKTsKKyAgICAgICAgSW50ZXJ2YWxOb2RlKiBsZWZ0ID0g
bm9kZS0+bGVmdCgpOworICAgICAgICBpZiAobGVmdCkgeworICAgICAgICAgICAgaWYgKCpjdXJN
YXggPCBsZWZ0LT5kYXRhKCkubWF4SGlnaCgpKQorICAgICAgICAgICAgICAgIGN1ck1heCA9ICZs
ZWZ0LT5kYXRhKCkubWF4SGlnaCgpOworICAgICAgICB9CisgICAgICAgIEludGVydmFsTm9kZSog
cmlnaHQgPSBub2RlLT5yaWdodCgpOworICAgICAgICBpZiAocmlnaHQpIHsKKyAgICAgICAgICAg
IGlmICgqY3VyTWF4IDwgcmlnaHQtPmRhdGEoKS5tYXhIaWdoKCkpCisgICAgICAgICAgICAgICAg
Y3VyTWF4ID0gJnJpZ2h0LT5kYXRhKCkubWF4SGlnaCgpOworICAgICAgICB9CisgICAgICAgIC8v
IFRoaXMgaXMgcGhyYXNlZCBsaWtlIHRoaXMgdG8gYXZvaWQgbmVlZGluZyBvcGVyYXRvciE9IG9u
IHR5cGUgVC4KKyAgICAgICAgaWYgKCEoKmN1ck1heCA9PSBub2RlLT5kYXRhKCkubWF4SGlnaCgp
KSkgeworICAgICAgICAgICAgbm9kZS0+ZGF0YSgpLnNldE1heEhpZ2goKmN1ck1heCk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgYm9vbCBjaGVja0ludmFyaWFudHNGcm9tTm9kZShJbnRlcnZhbE5vZGUqIG5v
ZGUsIFQqIGN1cnJlbnRNYXhWYWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFRoZXNlIGFz
c2lnbm1lbnRzIGFyZSBvbmx5IGRvbmUgaW4gb3JkZXIgdG8gYXZvaWQgcmVxdWlyaW5nCisgICAg
ICAgIC8vIGEgZGVmYXVsdCBjb25zdHJ1Y3RvciBvbiB0eXBlIFQuCisgICAgICAgIFQgbGVmdE1h
eFZhbHVlKG5vZGUtPmRhdGEoKS5tYXhIaWdoKCkpOworICAgICAgICBUIHJpZ2h0TWF4VmFsdWUo
bm9kZS0+ZGF0YSgpLm1heEhpZ2goKSk7CisgICAgICAgIEludGVydmFsTm9kZSogbGVmdCA9IG5v
ZGUtPmxlZnQoKTsKKyAgICAgICAgSW50ZXJ2YWxOb2RlKiByaWdodCA9IG5vZGUtPnJpZ2h0KCk7
CisgICAgICAgIGlmIChsZWZ0KSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrSW52YXJpYW50c0Zy
b21Ob2RlKGxlZnQsICZsZWZ0TWF4VmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmlnaHQpIHsKKyAgICAgICAgICAgIGlmICghY2hl
Y2tJbnZhcmlhbnRzRnJvbU5vZGUocmlnaHQsICZyaWdodE1heFZhbHVlKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFsZWZ0ICYmICFyaWdo
dCkgeworICAgICAgICAgICAgLy8gQmFzZSBjYXNlLgorICAgICAgICAgICAgaWYgKGN1cnJlbnRN
YXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAqY3VycmVudE1heFZhbHVlID0gbm9kZS0+ZGF0YSgp
LmhpZ2goKTsKKyAgICAgICAgICAgIHJldHVybiAobm9kZS0+ZGF0YSgpLmhpZ2goKSA9PSBub2Rl
LT5kYXRhKCkubWF4SGlnaCgpKTsKKyAgICAgICAgfQorICAgICAgICBUIGxvY2FsTWF4VmFsdWUo
bm9kZS0+ZGF0YSgpLm1heEhpZ2goKSk7CisgICAgICAgIGlmICghbGVmdCB8fCAhcmlnaHQpIHsK
KyAgICAgICAgICAgIGlmIChsZWZ0KQorICAgICAgICAgICAgICAgIGxvY2FsTWF4VmFsdWUgPSBs
ZWZ0TWF4VmFsdWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9jYWxNYXhW
YWx1ZSA9IHJpZ2h0TWF4VmFsdWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbG9jYWxN
YXhWYWx1ZSA9IChsZWZ0TWF4VmFsdWUgPCByaWdodE1heFZhbHVlKSA/IHJpZ2h0TWF4VmFsdWUg
OiBsZWZ0TWF4VmFsdWU7CisgICAgICAgIGlmIChsb2NhbE1heFZhbHVlIDwgbm9kZS0+ZGF0YSgp
LmhpZ2goKSkKKyAgICAgICAgICAgIGxvY2FsTWF4VmFsdWUgPSBub2RlLT5kYXRhKCkuaGlnaCgp
OworICAgICAgICBpZiAoIShsb2NhbE1heFZhbHVlID09IG5vZGUtPmRhdGEoKS5tYXhIaWdoKCkp
KSB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgU3RyaW5nIGxvY2FsTWF4VmFsdWVTdHJp
bmcgPSB2YWx1ZVRvU3RyaW5nKGxvY2FsTWF4VmFsdWUpOworICAgICAgICAgICAgTE9HX0VSUk9S
KCJQT0RJbnRlcnZhbFRyZWUgdmVyaWZpY2F0aW9uIGZhaWxlZCBhdCBub2RlIDB4JXA6IGxvY2Fs
TWF4VmFsdWU9JXMgYW5kIGRhdGE9JXMiLAorICAgICAgICAgICAgICAgICAgICAgIG5vZGUsIGxv
Y2FsTWF4VmFsdWVTdHJpbmcudXRmOCgpLmRhdGEoKSwgbm9kZS0+ZGF0YSgpLnRvU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoY3VycmVudE1heFZhbHVlKQorICAgICAgICAgICAgKmN1cnJlbnRN
YXhWYWx1ZSA9IGxvY2FsTWF4VmFsdWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307
CisKKyNpZm5kZWYgTkRFQlVHCisvLyBTdXBwb3J0IGZvciBwcmludGluZyBQT0RJbnRlcnZhbHMg
YXQgdGhlIFBPRFJlZEJsYWNrVHJlZSBsZXZlbC4KK3RlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFVz
ZXJEYXRhPgorU3RyaW5nIHZhbHVlVG9TdHJpbmcoY29uc3QgUE9ESW50ZXJ2YWw8VCwgVXNlckRh
dGE+JiBpbnRlcnZhbCkKK3sKKyAgICByZXR1cm4gaW50ZXJ2YWwudG9TdHJpbmcoKTsKK30KKyNl
bmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQT0RJbnRlcnZhbFRy
ZWVfaAo=
</data>
<flag name="commit-queue"
          id="55492"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66466</attachid>
            <date>2010-09-02 20:10:16 -0700</date>
            <delta_ts>2010-09-03 16:12:14 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>interval-tree.patch</filename>
            <type>text/plain</type>
            <size>14849</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjcwNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTAtMDktMDIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBpbnRlcnZhbCB0cmVlIGNhcGFibGUgb2YgaG9sZGluZyBwbGFpbiBvbGQgZGF0YSAoUE9EKQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUxNjAKKwor
ICAgICAgICBBZGRpbmcgYW4gaW50ZXJ2YWwgdHJlZSBjdXJyZW50bHkgY2FwYWJsZSBvZiBob2xk
aW5nIHR5cGVzIHdoaWNoCisgICAgICAgIGRvIG5vdCByZXF1aXJlIHRoZWlyIGRlc3RydWN0b3Jz
IHRvIGJlIGNhbGxlZC4gUE9EIGlzIGEgc2xpZ2h0CisgICAgICAgIG1pc25vbWVyIHdoaWNoIHdp
bGwgYmUgY29ycmVjdGVkIHNvb24sIGhvcGVmdWxseSBieSByZW1vdmluZyB0aGlzCisgICAgICAg
IHJlc3RyaWN0aW9uLgorCisgICAgICAgIFRoaXMgY2xhc3MgaXMgYmFzZWQgb24gdGhlIGF1Z21l
bnRhYmxlIHByb3BlcnR5IG9mIHRoZSByZWQvYmxhY2sKKyAgICAgICAgdHJlZSBpbnRlZ3JhdGVk
IHVuZGVyIGJ1ZyA0NTA1OS4KKworICAgICAgICBVbml0IHRlc3RzIGZvciB0aGUgUE9ESW50ZXJ2
YWxUcmVlIHdpbGwgYmUgaW50ZWdyYXRlZCBzZXBhcmF0ZWx5CisgICAgICAgIHVuZGVyIGJ1ZyA0
NTE2MS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvUE9ESW50ZXJ2YWxUcmVlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UE9E
SW50ZXJ2YWw6OlBPREludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlBPREludGVydmFsOjps
b3cpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWw6OmhpZ2gpOgorICAgICAgICAoV2Vi
Q29yZTo6UE9ESW50ZXJ2YWw6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWw6
Om92ZXJsYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlBPREludGVydmFsOjpvcGVyYXRvcjwpOgor
ICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWw6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2Vi
Q29yZTo6UE9ESW50ZXJ2YWw6Om1heEhpZ2gpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2
YWw6OnNldE1heEhpZ2gpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWw6OnRvU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlBPREludGVydmFsVHJlZTo6UE9ESW50ZXJ2YWxUcmVlKToK
KyAgICAgICAgKFdlYkNvcmU6OlBPREludGVydmFsVHJlZTo6YWxsT3ZlcmxhcHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UE9ESW50ZXJ2YWxUcmVlOjpjcmVhdGVJbnRlcnZhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpQT0RJbnRlcnZhbFRyZWU6OmNoZWNrSW52YXJpYW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpQT0RJbnRlcnZhbFRyZWU6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50ZXJ2
YWxUcmVlOjpzZWFyY2hGb3JPdmVybGFwc0Zyb20pOgorICAgICAgICAoV2ViQ29yZTo6UE9ESW50
ZXJ2YWxUcmVlOjp1cGRhdGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBPREludGVydmFsVHJl
ZTo6Y2hlY2tJbnZhcmlhbnRzRnJvbU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVUb1N0
cmluZyk6CisKIDIwMTAtMDktMDIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA2Njcw
NikKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQyLDYgKzIz
NDIsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3Jh
cGhpYy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
R3JhcGhpYy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvUE9EQXJlbmEu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1BPREludGVydmFsVHJlZS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvUE9EUmVkQmxhY2tUcmVlLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFkZXIuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhZGVyLmgnLApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvUE9ESW50ZXJ2YWxUcmVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvUE9ESW50ZXJ2YWxUcmVlLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9QT0RJbnRlcnZhbFRyZWUuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCwgR29vZ2xl
IEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFBPREludGVydmFsVHJlZV9oCisj
ZGVmaW5lIFBPREludGVydmFsVHJlZV9oCisKKyNpbmNsdWRlICJQT0RBcmVuYS5oIgorI2luY2x1
ZGUgIlBPRFJlZEJsYWNrVHJlZS5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lmbmRl
ZiBOREVCVUcKKyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBDbGFzcyByZXByZXNlbnRpbmcgYSBjbG9zZWQgaW50ZXJ2YWwgd2hp
Y2ggY2FuIGhvbGQgYW4gYXJiaXRyYXJ5CisvLyBQbGFpbiBPbGQgRGF0YXR5cGUgKFBPRCkgYXMg
aXRzIGVuZHBvaW50cyBhbmQgYSBwaWVjZSBvZiB1c2VyCisvLyBkYXRhLiBBbiBpbXBvcnRhbnQg
Y2hhcmFjdGVyaXN0aWMgZm9yIHRoZSBhbGdvcml0aG1zIHdlIHVzZSBpcyB0aGF0CisvLyBpZiB0
d28gaW50ZXJ2YWxzIGhhdmUgaWRlbnRpY2FsIGVuZHBvaW50cyBidXQgZGlmZmVyZW50IHVzZXIg
ZGF0YSwKKy8vIHRoZXkgYXJlIG5vdCBjb25zaWRlcmVkIHRvIGJlIGVxdWFsLiBUaGlzIHNpdHVh
dGlvbiBjYW4gYXJpc2Ugd2hlbgorLy8gcmVwcmVzZW50aW5nIHRoZSB2ZXJ0aWNhbCBleHRlbnRz
IG9mIGJvdW5kaW5nIGJveGVzIG9mIG92ZXJsYXBwaW5nCisvLyB0cmlhbmdsZXMsIHdoZXJlIHRo
ZSBwb2ludGVyIHRvIHRoZSB0cmlhbmdsZSBpcyB0aGUgdXNlciBkYXRhIG9mCisvLyB0aGUgaW50
ZXJ2YWwuCisvLworLy8gKk5vdGUqIHRoYXQgdGhlIGRlc3RydWN0b3JzIG9mIHR5cGUgVCBhbmQg
VXNlckRhdGEgd2lsbCAqbm90KiBiZQorLy8gY2FsbGVkIGJ5IHRoaXMgY2xhc3MuIFRoZXkgbXVz
dCBub3QgYWxsb2NhdGUgYW55IG1lbW9yeSB0aGF0IGlzCisvLyByZXF1aXJlZCB0byBiZSBjbGVh
bmVkIHVwIGluIHRoZWlyIGRlc3RydWN0b3JzLgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgY29uc3Ry
dWN0b3JzIGFuZCBvcGVyYXRvcnMgbXVzdCBiZSBpbXBsZW1lbnRlZCBvbgorLy8gdHlwZSBUOgor
Ly8KKy8vICAgLSBDb3B5IGNvbnN0cnVjdG9yIChpZiB1c2VyIGRhdGEgaXMgZGVzaXJlZCkKKy8v
ICAgLSBvcGVyYXRvcjwKKy8vICAgLSBvcGVyYXRvcj09CisvLyAgIC0gb3BlcmF0b3I9CisvLwor
Ly8gSWYgdGhlIFVzZXJEYXRhIHR5cGUgaXMgc3BlY2lmaWVkLCBpdCBtdXN0IHN1cHBvcnQgYSBj
b3B5CisvLyBjb25zdHJ1Y3RvciBhbmQgYXNzaWdubWVudCBvcGVyYXRvci4KKy8vCisvLyBJbiBk
ZWJ1ZyBtb2RlLCBwcmludGluZyBvZiBpbnRlcnZhbHMgYW5kIHRoZSBkYXRhIHRoZXkgY29udGFp
biBpcworLy8gZW5hYmxlZC4gVGhpcyByZXF1aXJlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0
byBiZSBhdmFpbGFibGU6CisvLworLy8gICBTdHJpbmcgdmFsdWVUb1N0cmluZyhjb25zdCBUJik7
CisvLyAgIFN0cmluZyB2YWx1ZVRvU3RyaW5nKGNvbnN0IFVzZXJEYXRhJik7CisvLworLy8gTm90
ZSB0aGF0IHRoaXMgY2xhc3MgcmVxdWlyZXMgYSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBhc3NpZ25t
ZW50CisvLyBvcGVyYXRvciBpbiBvcmRlciB0byBiZSBzdG9yZWQgaW4gdGhlIHJlZC1ibGFjayB0
cmVlLgorCit0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBVc2VyRGF0YSA9IHZvaWQqPgorY2xhc3Mg
UE9ESW50ZXJ2YWwgeworcHVibGljOgorICAgIC8vIENvbnN0cnVjdG9yIGZyb20gZW5kcG9pbnRz
LiBUaGlzIGNvbnN0cnVjdG9yIG9ubHkgd29ya3Mgd2hlbiB0aGUKKyAgICAvLyBVc2VyRGF0YSB0
eXBlIGlzIGEgcG9pbnRlciBvciBvdGhlciB0eXBlIHdoaWNoIGNhbiBiZSBpbml0aWFsaXplZAor
ICAgIC8vIHdpdGggMC4KKyAgICBQT0RJbnRlcnZhbChjb25zdCBUJiBsb3csIGNvbnN0IFQmIGhp
Z2gpCisgICAgICAgIDogbV9sb3cobG93KQorICAgICAgICAsIG1faGlnaChoaWdoKQorICAgICAg
ICAsIG1fZGF0YSgwKQorICAgICAgICAsIG1fbWF4SGlnaChoaWdoKQorICAgIHsKKyAgICB9CisK
KyAgICAvLyBDb25zdHJ1Y3RvciBmcm9tIHR3byBlbmRwb2ludHMgcGx1cyBleHBsaWNpdCB1c2Vy
IGRhdGEuCisgICAgUE9ESW50ZXJ2YWwoY29uc3QgVCYgbG93LCBjb25zdCBUJiBoaWdoLCBjb25z
dCBVc2VyRGF0YSBkYXRhKQorICAgICAgICA6IG1fbG93KGxvdykKKyAgICAgICAgLCBtX2hpZ2go
aGlnaCkKKyAgICAgICAgLCBtX2RhdGEoZGF0YSkKKyAgICAgICAgLCBtX21heEhpZ2goaGlnaCkK
KyAgICB7CisgICAgfQorCisgICAgY29uc3QgVCYgbG93KCkgY29uc3QgeyByZXR1cm4gbV9sb3c7
IH0KKyAgICBjb25zdCBUJiBoaWdoKCkgY29uc3QgeyByZXR1cm4gbV9oaWdoOyB9CisgICAgY29u
c3QgVXNlckRhdGEmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKworICAgIGJvb2wg
b3ZlcmxhcHMoY29uc3QgVCYgbG93LCBjb25zdCBUJiBoaWdoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKHRoaXMtPmhpZ2goKSA8IGxvdykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKGhpZ2ggPCB0aGlzLT5sb3coKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBQ
T0RJbnRlcnZhbCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb3ZlcmxhcHMo
b3RoZXIubG93KCksIG90aGVyLmhpZ2goKSk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoaXMgaW50ZXJ2YWwgaXMgImxlc3MiIHRoYW4gdGhlIG90aGVyLiBUaGUKKyAgICAvLyBj
b21wYXJpc29uIGlzIHBlcmZvcm1lZCBvbiB0aGUgbG93IGVuZHBvaW50cyBvZiB0aGUgaW50ZXJ2
YWxzLgorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFBPREludGVydmFsJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBsb3coKSA8IG90aGVyLmxvdygpOworICAgIH0KKworICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGludGVydmFsIGlzIHN0cmljdGx5IGVxdWFsIHRvIHRo
ZSBvdGhlciwKKyAgICAvLyBpbmNsdWRpbmcgY29tcGFyaXNvbiBvZiB0aGUgdXNlciBkYXRhLgor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQT0RJbnRlcnZhbCYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gKGxvdygpID09IG90aGVyLmxvdygpCisgICAgICAgICAgICAgICAg
JiYgaGlnaCgpID09IG90aGVyLmhpZ2goKQorICAgICAgICAgICAgICAgICYmIGRhdGEoKSA9PSBv
dGhlci5kYXRhKCkpOworICAgIH0KKworICAgIGNvbnN0IFQmIG1heEhpZ2goKSBjb25zdCB7IHJl
dHVybiBtX21heEhpZ2g7IH0KKyAgICB2b2lkIHNldE1heEhpZ2goY29uc3QgVCYgbWF4SGlnaCkg
eyBtX21heEhpZ2ggPSBtYXhIaWdoOyB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gU3VwcG9y
dCBmb3IgcHJpbnRpbmcgUE9ESW50ZXJ2YWxzLgorICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0
CisgICAgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCJbUE9ESW50ZXJ2YWwgKCIpOworICAgICAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZVRv
U3RyaW5nKGxvdygpKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICBi
dWlsZGVyLmFwcGVuZCh2YWx1ZVRvU3RyaW5nKGhpZ2goKSkpOworICAgICAgICBidWlsZGVyLmFw
cGVuZCgiKSwgZGF0YT0iKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQodmFsdWVUb1N0cmluZyhk
YXRhKCkpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgbWF4SGlnaD0iKTsKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQodmFsdWVUb1N0cmluZyhtYXhIaWdoKCkpKTsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIl0iKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9
CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBUIG1fbG93OworICAgIFQgbV9oaWdoOworICAgIFVz
ZXJEYXRhIG1fZGF0YTsKKyAgICBUIG1fbWF4SGlnaDsKK307CisKKy8vIEFuIGludGVydmFsIHRy
ZWUsIHdoaWNoIGlzIGEgZm9ybSBvZiBhdWdtZW50ZWQgcmVkLWJsYWNrIHRyZWUuIEl0CisvLyBz
dXBwb3J0cyBlZmZpY2llbnQgKE8obGcgbikpIGluc2VydGlvbiwgcmVtb3ZhbCBhbmQgcXVlcnlp
bmcgb2YKKy8vIGludGVydmFscyBpbiB0aGUgdHJlZS4KK3RlbXBsYXRlPGNsYXNzIFQsIGNsYXNz
IFVzZXJEYXRhID0gdm9pZCo+CitjbGFzcyBQT0RJbnRlcnZhbFRyZWUgOiBwdWJsaWMgTm9uY29w
eWFibGUsCisgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgUE9EUmVkQmxhY2tUcmVlPFBPRElu
dGVydmFsPFQsIFVzZXJEYXRhPiA+IHsKK3B1YmxpYzoKKyAgICAvLyBUeXBlZGVmIHRvIHJlZHVj
ZSB0eXBpbmcgd2hlbiBkZWNsYXJpbmcgaW50ZXJ2YWxzIHRvIGJlIHN0b3JlZCBpbgorICAgIC8v
IHRoaXMgdHJlZS4KKyAgICB0eXBlZGVmIFBPREludGVydmFsPFQsIFVzZXJEYXRhPiBJbnRlcnZh
bFR5cGU7CisKKyAgICBQT0RJbnRlcnZhbFRyZWUoKQorICAgICAgICA6IFBPRFJlZEJsYWNrVHJl
ZTxJbnRlcnZhbFR5cGU+KCkKKyAgICB7CisgICAgICAgIGluaXQoKTsKKyAgICB9CisKKyAgICBl
eHBsaWNpdCBQT0RJbnRlcnZhbFRyZWUoUE9EQXJlbmEqIGFyZW5hKQorICAgICAgICA6IFBPRFJl
ZEJsYWNrVHJlZTxJbnRlcnZhbFR5cGU+KGFyZW5hKQorICAgIHsKKyAgICAgICAgaW5pdCgpOwor
ICAgIH0KKworICAgIC8vIFJldHVybnMgYWxsIGludGVydmFscyBpbiB0aGUgdHJlZSB3aGljaCBv
dmVybGFwIHRoZSBnaXZlbiBxdWVyeQorICAgIC8vIGludGVydmFsLiBUaGUgcmV0dXJuZWQgaW50
ZXJ2YWxzIGFyZSBzb3J0ZWQgYnkgaW5jcmVhc2luZyBsb3cKKyAgICAvLyBlbmRwb2ludC4KKyAg
ICBWZWN0b3I8SW50ZXJ2YWxUeXBlPiBhbGxPdmVybGFwcyhjb25zdCBJbnRlcnZhbFR5cGUmIGlu
dGVydmFsKSBjb25zdAorICAgIHsKKyAgICAgICAgVmVjdG9yPEludGVydmFsVHlwZT4gcmVzdWx0
OworICAgICAgICBhbGxPdmVybGFwcyhpbnRlcnZhbCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIGFsbCBpbnRlcnZhbHMgaW4gdGhlIHRy
ZWUgd2hpY2ggb3ZlcmxhcCB0aGUgZ2l2ZW4gcXVlcnkKKyAgICAvLyBpbnRlcnZhbC4gVGhlIHJl
dHVybmVkIGludGVydmFscyBhcmUgc29ydGVkIGJ5IGluY3JlYXNpbmcgbG93CisgICAgLy8gZW5k
cG9pbnQuCisgICAgdm9pZCBhbGxPdmVybGFwcyhjb25zdCBJbnRlcnZhbFR5cGUmIGludGVydmFs
LCBWZWN0b3I8SW50ZXJ2YWxUeXBlPiYgcmVzdWx0KSBjb25zdAorICAgIHsKKyAgICAgICAgLy8g
RXhwbGljaXQgZGVyZWZlcmVuY2Ugb2YgInRoaXMiIHJlcXVpcmVkIGJlY2F1c2Ugb2YKKyAgICAg
ICAgLy8gaW5oZXJpdGFuY2UgcnVsZXMgaW4gdGVtcGxhdGUgY2xhc3Nlcy4KKyAgICAgICAgc2Vh
cmNoRm9yT3ZlcmxhcHNGcm9tKHRoaXMtPnJvb3QoKSwgaW50ZXJ2YWwsIHJlc3VsdCk7CisgICAg
fQorCisgICAgLy8gSGVscGVyIHRvIGNyZWF0ZSBpbnRlcnZhbCBvYmplY3RzLgorICAgIHN0YXRp
YyBJbnRlcnZhbFR5cGUgY3JlYXRlSW50ZXJ2YWwoY29uc3QgVCYgbG93LCBjb25zdCBUJiBoaWdo
LCBjb25zdCBVc2VyRGF0YSBkYXRhID0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBJbnRlcnZh
bFR5cGUobG93LCBoaWdoLCBkYXRhKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tJ
bnZhcmlhbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghUE9EUmVkQmxhY2tUcmVlPElu
dGVydmFsVHlwZT46OmNoZWNrSW52YXJpYW50cygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoIXRoaXMtPnJvb3QoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gY2hlY2tJbnZhcmlhbnRzRnJvbU5vZGUodGhpcy0+cm9vdCgpLCAwKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBQT0RSZWRCbGFja1RyZWU8
SW50ZXJ2YWxUeXBlPjo6Tm9kZSBJbnRlcnZhbE5vZGU7CisKKyAgICAvLyBJbml0aWFsaXplcyB0
aGUgdHJlZS4KKyAgICB2b2lkIGluaXQoKQorICAgIHsKKyAgICAgICAgLy8gRXhwbGljaXQgZGVy
ZWZlcmVuY2Ugb2YgInRoaXMiIHJlcXVpcmVkIGJlY2F1c2Ugb2YKKyAgICAgICAgLy8gaW5oZXJp
dGFuY2UgcnVsZXMgaW4gdGVtcGxhdGUgY2xhc3Nlcy4KKyAgICAgICAgdGhpcy0+c2V0TmVlZHNG
dWxsT3JkZXJpbmdDb21wYXJpc29ucyh0cnVlKTsKKyAgICB9CisKKyAgICAvLyBTdGFydGluZyBm
cm9tIHRoZSBnaXZlbiBub2RlLCBhZGRzIGFsbCBvdmVybGFwcyB3aXRoIHRoZSBnaXZlbgorICAg
IC8vIGludGVydmFsIHRvIHRoZSByZXN1bHQgdmVjdG9yLiBUaGUgaW50ZXJ2YWxzIGFyZSBzb3J0
ZWQgYnkKKyAgICAvLyBpbmNyZWFzaW5nIGxvdyBlbmRwb2ludC4KKyAgICB2b2lkIHNlYXJjaEZv
ck92ZXJsYXBzRnJvbShJbnRlcnZhbE5vZGUqIG5vZGUsIGNvbnN0IEludGVydmFsVHlwZSYgaW50
ZXJ2YWwsIFZlY3RvcjxJbnRlcnZhbFR5cGU+JiByZXMpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gQmVjYXVzZSB0aGUg
aW50ZXJ2YWxzIGFyZSBzb3J0ZWQgYnkgbGVmdCBlbmRwb2ludCwgaW5vcmRlcgorICAgICAgICAv
LyB0cmF2ZXJzYWwgcHJvZHVjZXMgcmVzdWx0cyBzb3J0ZWQgYXMgZGVzaXJlZC4KKworICAgICAg
ICAvLyBTZWUgd2hldGhlciB3ZSBuZWVkIHRvIHRyYXZlcnNlIHRoZSBsZWZ0IHN1YnRyZWUuCisg
ICAgICAgIEludGVydmFsTm9kZSogbGVmdCA9IG5vZGUtPmxlZnQoKTsKKyAgICAgICAgaWYgKGxl
ZnQKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgcGhyYXNlZCB0aGlzIHdheSB0byBhdm9pZCB0aGUg
bmVlZCBmb3Igb3BlcmF0b3IKKyAgICAgICAgICAgIC8vIDw9IG9uIHR5cGUgVC4KKyAgICAgICAg
ICAgICYmICEobGVmdC0+ZGF0YSgpLm1heEhpZ2goKSA8IGludGVydmFsLmxvdygpKSkKKyAgICAg
ICAgICAgIHNlYXJjaEZvck92ZXJsYXBzRnJvbShsZWZ0LCBpbnRlcnZhbCwgcmVzKTsKKworICAg
ICAgICAvLyBDaGVjayBmb3Igb3ZlcmxhcCB3aXRoIGN1cnJlbnQgbm9kZS4KKyAgICAgICAgaWYg
KG5vZGUtPmRhdGEoKS5vdmVybGFwcyhpbnRlcnZhbCkpCisgICAgICAgICAgICByZXMuYXBwZW5k
KG5vZGUtPmRhdGEoKSk7CisKKyAgICAgICAgLy8gU2VlIHdoZXRoZXIgd2UgbmVlZCB0byB0cmF2
ZXJzZSB0aGUgcmlnaHQgc3VidHJlZS4KKyAgICAgICAgLy8gVGhpcyBpcyBwaHJhc2VkIHRoaXMg
d2F5IHRvIGF2b2lkIHRoZSBuZWVkIGZvciBvcGVyYXRvciA8PQorICAgICAgICAvLyBvbiB0eXBl
IFQuCisgICAgICAgIGlmICghKGludGVydmFsLmhpZ2goKSA8IG5vZGUtPmRhdGEoKS5sb3coKSkp
CisgICAgICAgICAgICBzZWFyY2hGb3JPdmVybGFwc0Zyb20obm9kZS0+cmlnaHQoKSwgaW50ZXJ2
YWwsIHJlcyk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHVwZGF0ZU5vZGUoSW50ZXJ2YWxO
b2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgLy8gV291bGQgdXNlIGNvbnN0IFQmLCBidXQgbmVl
ZCB0byByZWFzc2lnbiB0aGlzIHJlZmVyZW5jZSBpbiB0aGlzCisgICAgICAgIC8vIGZ1bmN0aW9u
LgorICAgICAgICBjb25zdCBUKiBjdXJNYXggPSAmbm9kZS0+ZGF0YSgpLmhpZ2goKTsKKyAgICAg
ICAgSW50ZXJ2YWxOb2RlKiBsZWZ0ID0gbm9kZS0+bGVmdCgpOworICAgICAgICBpZiAobGVmdCkg
eworICAgICAgICAgICAgaWYgKCpjdXJNYXggPCBsZWZ0LT5kYXRhKCkubWF4SGlnaCgpKQorICAg
ICAgICAgICAgICAgIGN1ck1heCA9ICZsZWZ0LT5kYXRhKCkubWF4SGlnaCgpOworICAgICAgICB9
CisgICAgICAgIEludGVydmFsTm9kZSogcmlnaHQgPSBub2RlLT5yaWdodCgpOworICAgICAgICBp
ZiAocmlnaHQpIHsKKyAgICAgICAgICAgIGlmICgqY3VyTWF4IDwgcmlnaHQtPmRhdGEoKS5tYXhI
aWdoKCkpCisgICAgICAgICAgICAgICAgY3VyTWF4ID0gJnJpZ2h0LT5kYXRhKCkubWF4SGlnaCgp
OworICAgICAgICB9CisgICAgICAgIC8vIFRoaXMgaXMgcGhyYXNlZCBsaWtlIHRoaXMgdG8gYXZv
aWQgbmVlZGluZyBvcGVyYXRvciE9IG9uIHR5cGUgVC4KKyAgICAgICAgaWYgKCEoKmN1ck1heCA9
PSBub2RlLT5kYXRhKCkubWF4SGlnaCgpKSkgeworICAgICAgICAgICAgbm9kZS0+ZGF0YSgpLnNl
dE1heEhpZ2goKmN1ck1heCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBjaGVja0ludmFyaWFudHNG
cm9tTm9kZShJbnRlcnZhbE5vZGUqIG5vZGUsIFQqIGN1cnJlbnRNYXhWYWx1ZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIC8vIFRoZXNlIGFzc2lnbm1lbnRzIGFyZSBvbmx5IGRvbmUgaW4gb3JkZXIg
dG8gYXZvaWQgcmVxdWlyaW5nCisgICAgICAgIC8vIGEgZGVmYXVsdCBjb25zdHJ1Y3RvciBvbiB0
eXBlIFQuCisgICAgICAgIFQgbGVmdE1heFZhbHVlKG5vZGUtPmRhdGEoKS5tYXhIaWdoKCkpOwor
ICAgICAgICBUIHJpZ2h0TWF4VmFsdWUobm9kZS0+ZGF0YSgpLm1heEhpZ2goKSk7CisgICAgICAg
IEludGVydmFsTm9kZSogbGVmdCA9IG5vZGUtPmxlZnQoKTsKKyAgICAgICAgSW50ZXJ2YWxOb2Rl
KiByaWdodCA9IG5vZGUtPnJpZ2h0KCk7CisgICAgICAgIGlmIChsZWZ0KSB7CisgICAgICAgICAg
ICBpZiAoIWNoZWNrSW52YXJpYW50c0Zyb21Ob2RlKGxlZnQsICZsZWZ0TWF4VmFsdWUpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmlnaHQp
IHsKKyAgICAgICAgICAgIGlmICghY2hlY2tJbnZhcmlhbnRzRnJvbU5vZGUocmlnaHQsICZyaWdo
dE1heFZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFsZWZ0ICYmICFyaWdodCkgeworICAgICAgICAgICAgLy8gQmFzZSBjYXNlLgor
ICAgICAgICAgICAgaWYgKGN1cnJlbnRNYXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAqY3VycmVu
dE1heFZhbHVlID0gbm9kZS0+ZGF0YSgpLmhpZ2goKTsKKyAgICAgICAgICAgIHJldHVybiAobm9k
ZS0+ZGF0YSgpLmhpZ2goKSA9PSBub2RlLT5kYXRhKCkubWF4SGlnaCgpKTsKKyAgICAgICAgfQor
ICAgICAgICBUIGxvY2FsTWF4VmFsdWUobm9kZS0+ZGF0YSgpLm1heEhpZ2goKSk7CisgICAgICAg
IGlmICghbGVmdCB8fCAhcmlnaHQpIHsKKyAgICAgICAgICAgIGlmIChsZWZ0KQorICAgICAgICAg
ICAgICAgIGxvY2FsTWF4VmFsdWUgPSBsZWZ0TWF4VmFsdWU7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbG9jYWxNYXhWYWx1ZSA9IHJpZ2h0TWF4VmFsdWU7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgbG9jYWxNYXhWYWx1ZSA9IChsZWZ0TWF4VmFsdWUgPCByaWdodE1h
eFZhbHVlKSA/IHJpZ2h0TWF4VmFsdWUgOiBsZWZ0TWF4VmFsdWU7CisgICAgICAgIGlmIChsb2Nh
bE1heFZhbHVlIDwgbm9kZS0+ZGF0YSgpLmhpZ2goKSkKKyAgICAgICAgICAgIGxvY2FsTWF4VmFs
dWUgPSBub2RlLT5kYXRhKCkuaGlnaCgpOworICAgICAgICBpZiAoIShsb2NhbE1heFZhbHVlID09
IG5vZGUtPmRhdGEoKS5tYXhIaWdoKCkpKSB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAg
U3RyaW5nIGxvY2FsTWF4VmFsdWVTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nKGxvY2FsTWF4VmFsdWUp
OworICAgICAgICAgICAgTE9HX0VSUk9SKCJQT0RJbnRlcnZhbFRyZWUgdmVyaWZpY2F0aW9uIGZh
aWxlZCBhdCBub2RlIDB4JXA6IGxvY2FsTWF4VmFsdWU9JXMgYW5kIGRhdGE9JXMiLAorICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUsIGxvY2FsTWF4VmFsdWVTdHJpbmcudXRmOCgpLmRhdGEoKSwg
bm9kZS0+ZGF0YSgpLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3VycmVudE1heFZhbHVl
KQorICAgICAgICAgICAgKmN1cnJlbnRNYXhWYWx1ZSA9IGxvY2FsTWF4VmFsdWU7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KK307CisKKyNpZm5kZWYgTkRFQlVHCisvLyBTdXBwb3J0IGZv
ciBwcmludGluZyBQT0RJbnRlcnZhbHMgYXQgdGhlIFBPRFJlZEJsYWNrVHJlZSBsZXZlbC4KK3Rl
bXBsYXRlPGNsYXNzIFQsIGNsYXNzIFVzZXJEYXRhPgorU3RyaW5nIHZhbHVlVG9TdHJpbmcoY29u
c3QgUE9ESW50ZXJ2YWw8VCwgVXNlckRhdGE+JiBpbnRlcnZhbCkKK3sKKyAgICByZXR1cm4gaW50
ZXJ2YWwudG9TdHJpbmcoKTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBQT0RJbnRlcnZhbFRyZWVfaAo=
</data>
<flag name="review"
          id="55498"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="55499"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>