<?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>166425</bug_id>
          
          <creation_ts>2016-12-22 11:46:27 -0800</creation_ts>
          <short_desc>Move GraphicsContext3DWin to GraphicsContext3DOpenGLES</short_desc>
          <delta_ts>2017-01-03 10:43:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>graouts</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>magomez</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>noam</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1262346</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-12-22 11:46:27 -0800</bug_when>
    <thetext>Move GraphicsContext3DWin to GraphicsContext3DOpenGLES</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262422</commentid>
    <comment_count>1</comment_count>
      <attachid>297679</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-12-22 15:11:25 -0800</bug_when>
    <thetext>Created attachment 297679
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262451</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-12-22 16:33:22 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/210123</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262465</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-12-22 17:06:24 -0800</bug_when>
    <thetext>Regarding the commit message. Please talk to the relevant GTK devs (CCing several) about this before working on it as I highly doubt this would be acceptable for us; we surely want the system GLES from mesa, not ANGLE&apos;s?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262477</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-12-22 17:18:00 -0800</bug_when>
    <thetext>Don&apos;t worry, ANGLE&apos;s GLES &quot;implementation&quot; is just a checked wrapper and would use the system GLES as its backend.  For example, a call to getActiveAttrib from JavaScript currently does checks in GraphicsContext3D::getActiveAttrib and GraphicsContext3D::getActiveAttribImpl and then calls ::glGetActiveAttrib which calls whatever OpenGL/OpenGLES implementation the system has.  With the upcoming architecture, a call to getActiveAttrib would call ANGLE&apos;s gl::GetActiveAttrib, which would do checks similar to what we have in GraphicsContext3D::getActiveAttrib and GraphicsContext3D::getActiveAttribImpl inside of ANGLE and then ANGLE would call the system&apos;s ::glGetActiveAttrib.  I have a proof of concept working on Mac.  It&apos;s pretty terrible right now, but once it gets in better condition I&apos;ll show it to Žan et al.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262494</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-12-22 17:49:52 -0800</bug_when>
    <thetext>OK, that sounds fine indeed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262495</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-12-22 17:59:19 -0800</bug_when>
    <thetext>I have no idea how this will work with wayland, but I&apos;m hoping Žan can help out with that once I have something working cleanly and passing more than the most basic of tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262544</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-12-23 02:03:51 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Don&apos;t worry, ANGLE&apos;s GLES &quot;implementation&quot; is just a checked wrapper and
&gt; would use the system GLES as its backend.  For example, a call to
&gt; getActiveAttrib from JavaScript currently does checks in
&gt; GraphicsContext3D::getActiveAttrib and
&gt; GraphicsContext3D::getActiveAttribImpl and then calls ::glGetActiveAttrib
&gt; which calls whatever OpenGL/OpenGLES implementation the system has.  With
&gt; the upcoming architecture, a call to getActiveAttrib would call ANGLE&apos;s
&gt; gl::GetActiveAttrib, which would do checks similar to what we have in
&gt; GraphicsContext3D::getActiveAttrib and
&gt; GraphicsContext3D::getActiveAttribImpl inside of ANGLE and then ANGLE would
&gt; call the system&apos;s ::glGetActiveAttrib.  I have a proof of concept working on
&gt; Mac.  It&apos;s pretty terrible right now, but once it gets in better condition
&gt; I&apos;ll show it to Žan et al.

That&apos;s probably ok, but need to either never include eglplatform.h from ANGLE or update it, because the eglplatform.h from current ANGLE doesn&apos;t have the Wayland types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263468</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-01-03 10:43:11 -0800</bug_when>
    <thetext>We can put whatever we want in our copy of the ANGLE headers, but that sounds like something the ANGLE project would be interested in.  You could probably push a change to https://github.com/google/angle/blob/master/include/EGL/eglplatform.h</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297679</attachid>
            <date>2016-12-22 15:11:25 -0800</date>
            <delta_ts>2016-12-22 15:12:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166425-20161222151021.patch</filename>
            <type>text/plain</type>
            <size>15587</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMDEwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE2LTEyLTIyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBHcmFw
aGljc0NvbnRleHQzRFdpbiB0byBHcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0MjUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGNvZGUgd2hpY2ggaXMg
R0xFUy1zcGVjaWZpYyBub3QgV2luZG93cy1zcGVjaWZpYyB0byB0aGUgR0xFUy1zcGVjaWZpYyBm
aWxlCisgICAgICAgIHNvIEkgY2FuIHVzZSBpdCBvbiBDb2NvYSwgd2l0aCBhIHRlbXBvcmFyeSBQ
TEFURk9STSBtYWNybyB0aGF0IEkgcGxhbiB0byByZW1vdmUgb25jZQorICAgICAgICBhbGwgcGxh
dGZvcm1zIHVzZSBBTkdMRSdzIEdMRVMgaW1wbGVtZW50YXRpb24uIFRoZXJlIGlzIGFub3RoZXIg
Y29weSBvZiB0aGlzIGNvZGUgaW4KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RDYWlybywgd2hp
Y2ggd2lsbCBhbHNvIGJlIHVuaXRlZCB3aXRoIHRoaXMgY29kZSBoZXJlIHNvb24uCisgICAgICAg
IEFsc28gcmVtb3ZlIHRoZSBQbGF0Zm9ybUNBTGF5ZXJXaW4sIHdoaWNoIHdhcyBuZXZlciB1c2Vk
IGZvciBhbnl0aGluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Okdy
YXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp+
R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnNldENvbnRleHRMb3N0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmNoZWNrR1BVU3RhdHVzSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dDNEV2luLmNwcDogUmVtb3Zl
ZC4KKwogMjAxNi0xMi0yMiAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAg
ICAgICBNdXRlZCBtZWRpYSBlbGVtZW50IHBsYXliYWNrIHNob3VsZCBub3QgaW50ZXJydXB0IG90
aGVyIGF1ZGlvIHBsYXliYWNrCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMRVMuY3BwCShyZXZpc2lvbiAyMTAwNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDYgKzM3LDEyIEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8R0xTTEFORy9T
aGFkZXJMYW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPEFOR0xFL1NoYWRlckxhbmcuaD4KKyNlbmRp
ZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVh
c2VTaGFkZXJDb21waWxlcigpCkBAIC0yNDcsNiArMjUzLDE2MiBAQCBFeHRlbnNpb25zM0QmIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlCiB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJTikg
JiYgIVVTRShDQUlSTykKK1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0
eWxlKQoreworICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lc24ndCBjdXJyZW50bHkgc3Vw
cG9ydCByZW5kZXJpbmcgZGlyZWN0bHkgdG8gdGhlIEhvc3RXaW5kb3cuCisgICAgaWYgKHJlbmRl
clN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIHN0
YXRpYyBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyNpZiAh
VVNFKE9QRU5HTF9FU18yKQorICAgICAgICBzdWNjZXNzID0gaW5pdGlhbGl6ZU9wZW5HTFNoaW1z
KCk7CisjZW5kaWYKKyAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKyAgICBpZiAo
IXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIHJldHVybiBhZG9w
dFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlidXRlcywgaG9zdFdpbmRvdywgcmVuZGVy
U3R5bGUpKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBo
aWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQorICAgIDogbV9jdXJyZW50V2lkdGgo
MCkKKyAgICAsIG1fY3VycmVudEhlaWdodCgwKQorICAgICwgbV9jb21waWxlcihpc0dMRVMyQ29t
cGxpYW50KCkgPyBTSF9FU1NMX09VVFBVVCA6IFNIX0dMU0xfQ09NUEFUSUJJTElUWV9PVVRQVVQp
CisgICAgLCBtX2F0dHJzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3RleHR1cmUoMCkKKyAgICAsIG1f
ZmJvKDApCisgICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQorICAgICwgbV9tdWx0aXNhbXBs
ZUZCTygwKQorICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQorICAgICwg
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCisgICAgLCBtX3ByaXZhdGUoc3RkOjptYWtlX3Vu
aXF1ZTxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+KHRoaXMsIHJlbmRlclN0eWxlKSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsK
KworICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJPZmZzY3JlZW4pIHsKKyAgICAgICAgLy8g
Q3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50by4KKyAgICAgICAgOjpnbEdlblRleHR1cmVz
KDEsICZtX3RleHR1cmUpOworICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bV90ZXh0dXJlKTsKKyAgICAgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVy
ZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
ICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBH
TF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICA6OmdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgICAgIAorICAgICAgICAvLyBDcmVhdGUg
YW4gRkJPLgorICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgCisg
ICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX2ZibzsKKyAgICAgICAgaWYgKCFtX2F0dHJzLmFu
dGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpKQorICAgICAgICAg
ICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KKyAgICAgICAgaWYgKG1f
YXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZt
X211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJB
TUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICAgICAgbV9zdGF0ZS5ib3VuZEZC
TyA9IG1fbXVsdGlzYW1wbGVGQk87CisgICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0
ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVm
ZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCisgICAgU2hCdWlsdEluUmVz
b3VyY2VzIEFOR0xFUmVzb3VyY2VzOworICAgIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xF
UmVzb3VyY2VzKTsKKyAgICAKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1ZFUlRFWF9BVFRSSUJTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7CisgICAg
Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JT
LCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOworICAgIGdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNvdXJj
ZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0
ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VGV4dHVyZUlt
YWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01F
TlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVj
dG9ycyk7CisgICAgCisgICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMuCisgICAg
QU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOworICAgIAorICAgIEdDM0RpbnQgcmFu
Z2VbMl0sIHByZWNpc2lvbjsKKyAgICBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQs
IHJhbmdlLCAmcHJlY2lzaW9uKTsKKyAgICBBTkdMRVJlc291cmNlcy5GcmFnbWVudFByZWNpc2lv
bkhpZ2ggPSAocmFuZ2VbMF0gfHwgcmFuZ2VbMV0gfHwgcHJlY2lzaW9uKTsKKyAgICAKKyAgICBt
X2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisgICAgCisjaWYgIVVTRShP
UEVOR0xfRVNfMikKKyAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUp
OworICAgIDo6Z2xFbmFibGUoR0xfUE9JTlRfU1BSSVRFKTsKKyNlbmRpZgorICAgIAorICAgIDo6
Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOworfQorCitHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBo
aWNzQ29udGV4dDNEKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGVs
ZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7
CisgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JC
dWZmZXIpOworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisg
ICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRo
U3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVs
dGlzYW1wbGVGQk8pOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwg
fHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEs
ICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQorICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZl
cnMoMSwgJm1fZmJvKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExv
c3RDYWxsYmFjayhzdGQ6OnVuaXF1ZV9wdHI8Q29udGV4dExvc3RDYWxsYmFjaz4pCit7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKHN0ZDo6dW5p
cXVlX3B0cjxFcnJvck1lc3NhZ2VDYWxsYmFjaz4pCit7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tHUFVTdGF0dXNJZk5lY2Vz
c2FyeSgpCit7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0
M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKQoreworICAgIHJldHVybiBtX3ByaXZhdGUt
PnBsYXRmb3JtQ29udGV4dCgpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4
dDNEOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RleHR1cmU7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAorewor
I2lmIFVTRShPUEVOR0xfRVNfMikKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmCit9CisKK1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpw
bGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJHTExheWVyLT5wbGF0Zm9y
bUxheWVyKCk7Cit9CisjZW5kaWYKKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NP
TlRFWFRfM0QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0M0RXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHQzRFdpbi5jcHAJKHJldmlzaW9uIDIxMDA1
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHQzRFdpbi5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
Ci0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNE
KQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllcldpbi5o
PgotCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPEdMU0xBTkcvU2hhZGVyTGFuZy5oPgot
I2Vsc2UKLSNpbmNsdWRlIDxBTkdMRS9TaGFkZXJMYW5nLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShP
UEVOR0xfRVNfMikKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgotI2Vsc2UKLSNp
bmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBh
dHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6UmVu
ZGVyU3R5bGUgcmVuZGVyU3R5bGUpCi17Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2Vz
bid0IGN1cnJlbnRseSBzdXBwb3J0IHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUgSG9zdFdpbmRv
dy4KLSAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBm
YWxzZTsKLSAgICBzdGF0aWMgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBpZiAoIWluaXRpYWxp
emVkKSB7Ci0jaWYgIVVTRShPUEVOR0xfRVNfMikKLSAgICAgICAgc3VjY2VzcyA9IGluaXRpYWxp
emVPcGVuR0xTaGltcygpOwotI2VuZGlmCi0gICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAg
ICB9Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlidXRlcywgaG9zdFdpbmRv
dywgcmVuZGVyU3R5bGUpKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4
dDNEKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93Kiwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQotICAgIDogbV9jdXJy
ZW50V2lkdGgoMCkKLSAgICAsIG1fY3VycmVudEhlaWdodCgwKQotICAgICwgbV9jb21waWxlcihp
c0dMRVMyQ29tcGxpYW50KCkgPyBTSF9FU1NMX09VVFBVVCA6IFNIX0dMU0xfQ09NUEFUSUJJTElU
WV9PVVRQVVQpCi0gICAgLCBtX2F0dHJzKGF0dHJpYnV0ZXMpCi0gICAgLCBtX3RleHR1cmUoMCkK
LSAgICAsIG1fZmJvKDApCi0gICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQotICAgICwgbV9t
dWx0aXNhbXBsZUZCTygwKQotICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigw
KQotICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCi0gICAgLCBtX3ByaXZhdGUoc3Rk
OjptYWtlX3VuaXF1ZTxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+KHRoaXMsIHJlbmRlclN0eWxl
KSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHZhbGlkYXRlQXR0cmlidXRl
cygpOwotCi0jaWYgVVNFKENBKQotICAgIG1fd2ViR0xMYXllciA9IFBsYXRmb3JtQ0FMYXllcldp
bjo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIDApOwotI2VuZGlmCi0K
LSAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyT2Zmc2NyZWVuKSB7Ci0gICAgICAgIC8vIENy
ZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8uCi0gICAgICAgIDo6Z2xHZW5UZXh0dXJlcygx
LCAmbV90ZXh0dXJlKTsKLSAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1f
dGV4dHVyZSk7Ci0gICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbFRleFBhcmFtZXRlcmYo
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAg
ICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xf
Q0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICAgICAgOjpnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgICAgIC8vIENyZWF0ZSBhbiBGQk8uCi0g
ICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotCi0gICAgICAgIG1fc3RhdGUuYm91
bmRGQk8gPSBtX2ZibzsKLSAgICAgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRy
cy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpKQotICAgICAgICAgICAgOjpnbEdlblJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLQotICAgICAgICAvLyBDcmVhdGUgYSBt
dWx0aXNhbXBsZSBGQk8uCi0gICAgICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgewotICAgICAg
ICAgICAgOjpnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJP
KTsKLSAgICAgICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOwotICAg
ICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cik7Ci0gICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCi0g
ICAgICAgICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0
aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQU5HTEUgaW5pdGlh
bGl6YXRpb24uCi0gICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOwotICAgIFNo
SW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsKLQotICAgIGdldEludGVnZXJ2
KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5N
YXhWZXJ0ZXhBdHRyaWJzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3Jt
VmVjdG9ycyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5H
X1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgZ2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywg
JkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMs
ICZBTkdMRVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdM
RVJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNl
cy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKLQotICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBm
b3IgT3BlbkdMIEVTLgotICAgIEFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsKLQot
ICAgIEdDM0RpbnQgcmFuZ2VbMl0sIHByZWNpc2lvbjsKLSAgICBnZXRTaGFkZXJQcmVjaXNpb25G
b3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkhJR0hfRkxPQVQsIHJhbmdlLCAmcHJlY2lzaW9uKTsKLSAgICBBTkdMRVJlc291cmNlcy5G
cmFnbWVudFByZWNpc2lvbkhpZ2ggPSAocmFuZ2VbMF0gfHwgcmFuZ2VbMV0gfHwgcHJlY2lzaW9u
KTsKLQotICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKLQotI2lm
ICFVU0UoT1BFTkdMX0VTXzIpCi0gICAgOjpnbEVuYWJsZShHTF9WRVJURVhfUFJPR1JBTV9QT0lO
VF9TSVpFKTsKLSAgICA6OmdsRW5hYmxlKEdMX1BPSU5UX1NQUklURSk7Ci0jZW5kaWYKLQotICAg
IDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotfQotCi1HcmFwaGljc0NvbnRleHQzRDo6fkdy
YXBoaWNzQ29udGV4dDNEKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFz
KSB7Ci0gICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29s
b3JCdWZmZXIpOwotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgp
Ci0gICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1f
bXVsdGlzYW1wbGVGQk8pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2F0dHJzLnN0ZW5j
aWwgfHwgbV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJz
KDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotICAgIDo6Z2xEZWxldGVGcmFtZWJ1
ZmZlcnMoMSwgJm1fZmJvKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4
dExvc3RDYWxsYmFjayhzdGQ6OnVuaXF1ZV9wdHI8Q29udGV4dExvc3RDYWxsYmFjaz4pCi17Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKHN0ZDo6
dW5pcXVlX3B0cjxFcnJvck1lc3NhZ2VDYWxsYmFjaz4pCi17Ci19Ci0KLWJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tHUFVTdGF0dXNJZk5l
Y2Vzc2FyeSgpCi17Ci19Ci0KLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250
ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKQotewotICAgIHJldHVybiBtX3ByaXZh
dGUtPnBsYXRmb3JtQ29udGV4dCgpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29u
dGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtX3RleHR1cmU7
Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAot
ewotI2lmIFVTRShPUEVOR0xfRVNfMikKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0
dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLVBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNE
OjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJHTExheWVyLT5wbGF0
Zm9ybUxheWVyKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShHUkFQSElDU19DT05URVhUXzNEKQo=
</data>
<flag name="review"
          id="319994"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>