<?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>36072</bug_id>
          
          <creation_ts>2010-03-12 14:16:06 -0800</creation_ts>
          <short_desc>[OpenVG] Add support for decoding and drawing images</short_desc>
          <delta_ts>2010-05-17 12:11:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</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>33987</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Jakob Petsovits">jpetsovits</reporter>
          <assigned_to name="Jakob Petsovits">jpetsovits</assigned_to>
          <cc>elongbug</cc>
    
    <cc>eric</cc>
    
    <cc>krit</cc>
    
    <cc>staikos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>199214</commentid>
    <comment_count>0</comment_count>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2010-03-12 14:16:06 -0800</bug_when>
    <thetext>Image support is still missing in the OpenVG backend (as is ImageBuffer and lots of features, but those are subject to future bugs). As you might guess, this patch has a shot at that shortcoming. It&apos;s currently duplicating memory - both the decoded buffer and the VGImage are storing the same pixel data, which is bad. But the patch is large enough already, so I&apos;ll wait with the &quot;better&quot; version until this one has been landed. Image pattern drawing for arbitrary-size images is also not quite trivial and will come in a follow-up patch as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199216</commentid>
    <comment_count>1</comment_count>
      <attachid>50633</attachid>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2010-03-12 14:18:02 -0800</bug_when>
    <thetext>Created attachment 50633
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205463</commentid>
    <comment_count>2</comment_count>
      <attachid>51918</attachid>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2010-03-29 08:56:41 -0700</bug_when>
    <thetext>Created attachment 51918
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205464</commentid>
    <comment_count>3</comment_count>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2010-03-29 08:58:37 -0700</bug_when>
    <thetext>The above fixes a couple of issues noticed by Dirk, who suggests that Olliej or someone else should take a look at this patch as well. Still waiting for review, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209414</commentid>
    <comment_count>4</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2010-04-06 19:53:14 -0700</bug_when>
    <thetext>Looks good, and I know you have some additional patches to follow this which I hope will show up quickly. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209473</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-06 23:44:59 -0700</bug_when>
    <thetext>Attachment 51918 was posted by a committer and has review+, assigning to Jakob Petsovits for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226666</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-17 00:55:42 -0700</bug_when>
    <thetext>Looks like this has been in pending-commit for over a month.  Did this get landed already?  Should it just be commit-queued?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226839</commentid>
    <comment_count>7</comment_count>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2010-05-17 11:23:46 -0700</bug_when>
    <thetext>Was not landed yet. I&apos;ll land it today, and will try harder to get the rest of OpenVG patches upstream as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226848</commentid>
    <comment_count>8</comment_count>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2010-05-17 12:11:45 -0700</bug_when>
    <thetext>Committed r59619: &lt;http://trac.webkit.org/changeset/59619&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50633</attachid>
            <date>2010-03-12 14:18:02 -0800</date>
            <delta_ts>2010-03-29 08:56:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-36072-20100312171801.patch</filename>
            <type>text/plain</type>
            <size>31051</size>
            <attacher name="Jakob Petsovits">jpetsovits</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZTM4YmFhMC4uZTIwYzdiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBAQAorMjAxMC0wMy0xMiAgSmFrb2IgUGV0c292
aXRzICA8anBldHNvdml0c0ByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtPcGVuVkddIEFkZCBzdXBwb3J0IGZvciBkZWNvZGluZyBhbmQg
ZHJhd2luZyBpbWFnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM2MDcyCisKKyAgICAgICAgT3BlblZHIGhhcyBhIG1heGltdW0gaW1hZ2Ugc2l6ZSAo
aG93IGxhcmdlIGlzCisgICAgICAgIHNwZWNpZmljIHRvIHRoZSBPcGVuVkcgaW1wbGVtZW50YXRp
b24pLCBzbyB0aGlzCisgICAgICAgIHJlcXVpcmVzIHVzIHRvIHN0b3JlIHRoZW0gYXMgc2VwYXJh
dGUgaW1hZ2UgdGlsZXMuCisKKyAgICAgICAgSW1hZ2UgZGVjb2RpbmcgYW5kIGluaXRpYWwgZHJh
d2luZyBjb2RlIGJ5CisgICAgICAgIEFkYW0gVHJlYXQgPGF0cmVhdEByaW0uY29tPi4gSW1hZ2Ug
ZGVjb2RlcgorICAgICAgICBkb3duc2FtcGxpbmcgc3VwcG9ydCBieSBZb25nIExpIDx5b2xpQHJp
bS5jb20+LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvSW1hZ2VPcGVuVkcuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpjaGVja0ZvclNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Omlu
aXRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmludmFsaWRh
dGVQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0U291cmNlUmVjdEZvckRv
d25TYW1wbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVudmcvUGFpbnRlck9wZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWludGVyT3BlblZH
OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFpbnRlck9wZW5WRzo6YXNOZXdOYXRp
dmVJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1BhaW50ZXJPcGVu
VkcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVGlsZWRJbWFnZU9wZW5W
Ry5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRJbWFnZU9wZW5WRzo6VGlsZWRJ
bWFnZU9wZW5WRyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEltYWdlT3BlblZHOjpvcGVyYXRv
cj0pOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRJbWFnZU9wZW5WRzo6flRpbGVkSW1hZ2VPcGVu
VkcpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRJbWFnZU9wZW5WRzo6bnVtVGlsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRJbWFnZU9wZW5WRzo6bnVtQ29sdW1ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZEltYWdlT3BlblZHOjpudW1Sb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVkSW1hZ2VPcGVuVkc6OnNldFRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRJbWFnZU9w
ZW5WRzo6dGlsZXNJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRJbWFnZU9wZW5WRzo6
dGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEltYWdlT3BlblZHOjp0aWxlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlZEltYWdlT3BlblZHOjpkZXRhY2hUaWxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlZEltYWdlT3BlblZHOjpkZXN0cm95VGlsZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW52Zy9UaWxlZEltYWdlT3BlblZHLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZWRJbWFnZU9wZW5WRzo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlZEltYWdlT3BlblZHOjptYXhUaWxlU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnZnL1ZHVXRpbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VkdVdGlsczo6Ynl0ZXNG
b3JJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpWR1V0aWxzOjpieXRlc0ZvckltYWdlU2Nhbmxp
bmUpOgorICAgICAgICAoV2ViQ29yZTo6VkdVdGlsczo6aW1hZ2VGb3JtYXRCaXRzUGVyUGl4ZWwp
OgorICAgICAgICAoV2ViQ29yZTo6VkdVdGlsczo6ZW5kaWFuQXdhcmVJbWFnZUZvcm1hdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1ZHVXRpbHMuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9vcGVudmcvSW1hZ2VEZWNvZGVyT3BlblZHLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UpOgor
CiAyMDEwLTAzLTEyICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuaAppbmRleCAyNThmZDBmLi40YjRjNjkyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC02Miw2ICs2MiwxMSBAQCBjbGFzcyBTdHJpbmc7CiAj
aWYgUExBVEZPUk0oQ0cpCiB0eXBlZGVmIENHSW1hZ2VTb3VyY2VSZWYgTmF0aXZlSW1hZ2VTb3Vy
Y2VQdHI7CiB0eXBlZGVmIENHSW1hZ2VSZWYgTmF0aXZlSW1hZ2VQdHI7CisjZWxpZiBQTEFURk9S
TShPUEVOVkcpCitjbGFzcyBJbWFnZURlY29kZXI7CitjbGFzcyBUaWxlZEltYWdlT3BlblZHOwor
dHlwZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlU291cmNlUHRyOwordHlwZWRlZiBUaWxl
ZEltYWdlT3BlblZHKiBOYXRpdmVJbWFnZVB0cjsKICNlbGlmIFBMQVRGT1JNKFFUKQogY2xhc3Mg
SW1hZ2VEZWNvZGVyUXQ7CiB0eXBlZGVmIEltYWdlRGVjb2RlclF0KiBOYXRpdmVJbWFnZVNvdXJj
ZVB0cjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0ltYWdl
T3BlblZHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0ltYWdlT3BlblZH
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWI0ZWExCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvSW1hZ2VPcGVuVkcu
Y3BwCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
KyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCisjaW5j
bHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAi
UGFpbnRlck9wZW5WRy5oIgorI2luY2x1ZGUgIlN1cmZhY2VPcGVuVkcuaCIKKyNpbmNsdWRlICJU
aWxlZEltYWdlT3BlblZHLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNp
bmNsdWRlICJWR1V0aWxzLmgiCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRh
dGEpCit7CisgICAgaWYgKGNsZWFyTWV0YWRhdGEpCisgICAgICAgIG1faGF2ZU1ldGFkYXRhID0g
ZmFsc2U7CisKKyAgICBpZiAobV9mcmFtZSkgeworICAgICAgICBkZWxldGUgbV9mcmFtZTsKKyAg
ICAgICAgbV9mcmFtZSA9IDA7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK0JpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShUaWxlZEltYWdlT3BlblZH
KiB0aWxlZEltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKKyAgICA6IEltYWdlKG9ic2Vy
dmVyKQorICAgICwgbV9zaXplKHRpbGVkSW1hZ2UtPnNpemUoKSkKKyAgICAsIG1fY3VycmVudEZy
YW1lKDApCisgICAgLCBtX2ZyYW1lcygxKQorICAgICwgbV9mcmFtZVRpbWVyKDApCisgICAgLCBt
X3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTm9uZSkKKyAgICAsIG1fcmVwZXRpdGlvbkNvdW50
U3RhdHVzKFVua25vd24pCisgICAgLCBtX3JlcGV0aXRpb25zQ29tcGxldGUoMCkKKyAgICAsIG1f
ZGVzaXJlZEZyYW1lU3RhcnRUaW1lKDApCisgICAgLCBtX2lzU29saWRDb2xvcihmYWxzZSkKKyAg
ICAsIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IoZmFsc2UpCisgICAgLCBtX2FuaW1hdGlvbkZpbmlz
aGVkKGZhbHNlKQorICAgICwgbV9hbGxEYXRhUmVjZWl2ZWQoZmFsc2UpCisgICAgLCBtX2hhdmVT
aXplKHRydWUpCisgICAgLCBtX3NpemVBdmFpbGFibGUodHJ1ZSkKKyAgICAsIG1faGFzVW5pZm9y
bUZyYW1lU2l6ZSh0cnVlKQorICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQorICAgICwgbV9m
cmFtZUNvdW50KDEpCit7CisgICAgaW5pdFBsYXRmb3JtRGF0YSgpOworCisgICAgQVNTRVJUKG1f
c2l6ZS53aWR0aCgpID4gMCk7CisgICAgQVNTRVJUKG1fc2l6ZS5oZWlnaHQoKSA+IDApOworCisg
ICAgbV9kZWNvZGVkU2l6ZSA9IG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogNDsK
KworICAgIG1fZnJhbWVzWzBdLm1fZnJhbWUgPSB0aWxlZEltYWdlOworICAgIG1fZnJhbWVzWzBd
Lm1faGFzQWxwaGEgPSB0cnVlOworICAgIG1fZnJhbWVzWzBdLm1faXNDb21wbGV0ZSA9IHRydWU7
CisgICAgbV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOworICAgIGNoZWNrRm9yU29s
aWRDb2xvcigpOworfQorCit2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQor
eworICAgIFRpbGVkSW1hZ2VPcGVuVkcqIHRpbGVkSW1hZ2UgPSAwOworCisgICAgaWYgKG1fZnJh
bWVDb3VudCA9PSAxICYmIG1fc2l6ZS53aWR0aCgpID09IDEgJiYgbV9zaXplLmhlaWdodCgpID09
IDEpCisgICAgICAgIHRpbGVkSW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwor
CisgICAgaWYgKHRpbGVkSW1hZ2UpIHsKKyAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSB0cnVlOwor
ICAgICAgICBSR0JBMzIgcGl4ZWw7CisgICAgICAgIHZnR2V0SW1hZ2VTdWJEYXRhKHRpbGVkSW1h
Z2UtPnRpbGUoMCwgMCksICZwaXhlbCwgMCwgVkdfc0FSR0JfODg4OCwgMCwgMCwgMSwgMSk7Cisg
ICAgICAgIEFTU0VSVF9WR19OT19FUlJPUigpOworICAgICAgICBtX3NvbGlkQ29sb3Iuc2V0UkdC
KHBpeGVsKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKKwor
ICAgIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgPSB0cnVlOworfQorCit2b2lkIEJpdG1hcEltYWdl
Ojppbml0UGxhdGZvcm1EYXRhKCkKK3sKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0
ZVBsYXRmb3JtRGF0YSgpCit7Cit9CisKKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NB
TVBMSU5HKQorc3RhdGljIHZvaWQgYWRqdXN0U291cmNlUmVjdEZvckRvd25TYW1wbGluZyhGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFNpemUmIG9yaWdTaXplLCBjb25zdCBJbnRTaXplJiBz
Y2FsZWRTaXplKQoreworICAgIC8vIFdlIGFzc3VtZSBkb3duLXNhbXBsaW5nIHpvb20gcmF0ZXMg
aW4gWCBkaXJlY3Rpb24gYW5kIGluIFkgZGlyZWN0aW9uIGFyZSBzYW1lLgorICAgIGlmIChvcmln
U2l6ZS53aWR0aCgpID09IHNjYWxlZFNpemUud2lkdGgoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gSW1hZ2UgaGFzIGJlZW4gZG93biBzYW1wbGVkLgorICAgIGRvdWJsZSByYXRlID0gKGRv
dWJsZSlzY2FsZWRTaXplLndpZHRoKCkgLyBvcmlnU2l6ZS53aWR0aCgpOworICAgIGRvdWJsZSB0
ZW1wID0gc3JjUmVjdC5yaWdodCgpICogcmF0ZTsKKyAgICBzcmNSZWN0LnNldFgoc3JjUmVjdC54
KCkgKiByYXRlKTsKKyAgICBzcmNSZWN0LnNldFdpZHRoKHRlbXAgLSBzcmNSZWN0LngoKSk7Cisg
ICAgdGVtcCA9IHNyY1JlY3QuYm90dG9tKCkgKiByYXRlOworICAgIHNyY1JlY3Quc2V0WShzcmNS
ZWN0LnkoKSAqIHJhdGUpOworICAgIHNyY1JlY3Quc2V0SGVpZ2h0KHRlbXAgLSBzcmNSZWN0Lnko
KSk7Cit9CisjZW5kaWYKKwordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGlm
IChkc3QuaXNFbXB0eSgpIHx8IHNyYy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IE5hdGl2ZUltYWdlUHRyIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAg
ICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGFydEFuaW1hdGlvbigpOwor
CisgICAgaWYgKG1heUZpbGxXaXRoU29saWRDb2xvcigpKSB7CisgICAgICAgIGZpbGxXaXRoU29s
aWRDb2xvcihjb250ZXh0LCBkc3QsIHNvbGlkQ29sb3IoKSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb250ZXh0LT5zYXZlKCk7CisKKyAgICAv
LyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlvbi4KKyAgICBpZiAob3AgPT0gQ29tcG9zaXRl
U291cmNlT3ZlciAmJiAhZnJhbWVIYXNBbHBoYUF0SW5kZXgobV9jdXJyZW50RnJhbWUpKQorICAg
ICAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29weSk7CisgICAg
ZWxzZQorICAgICAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOworCisgICAg
RmxvYXRSZWN0IHNyY1JlY3RMb2NhbChzcmMpOworI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RP
V05fU0FNUExJTkcpCisgICAgYWRqdXN0U291cmNlUmVjdEZvckRvd25TYW1wbGluZyhzcmNSZWN0
TG9jYWwsIHNpemUoKSwgaW1hZ2UtPnNpemUoKSk7CisjZW5kaWYKKworICAgIGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5hY3RpdmVQYWludGVyKCktPmRyYXdJbWFnZShpbWFnZSwgZHN0LCBz
cmNSZWN0TG9jYWwpOworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKworICAgIGlmIChpbWFnZU9i
c2VydmVyKCkpCisgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKK30KKwor
dm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIHNyYywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zv
cm0sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9h
dFJlY3QmIGRzdCkKK3sKKyAgICBpZiAoZHN0LmlzRW1wdHkoKSB8fCBzcmMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSA9IG5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc3RhcnRBbmltYXRpb24oKTsKKworICAgIGlmIChtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSkg
eworICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZHN0LCBzb2xpZENvbG9yKCks
IHN0eWxlQ29sb3JTcGFjZSwgb3ApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKworICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgIGltYWdl
T2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6
OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNoYXIgY29uc3QqIG5hbWUpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVudmcvUGFpbnRlck9wZW5WRy5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW52Zy9QYWludGVyT3BlblZHLmNwcAppbmRleCA1ODQyYWZkLi43ZDYwY2E1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9QYWludGVyT3Bl
blZHLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9QYWludGVyT3Bl
blZHLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1QYXRoT3BlblZHLmgiCiAjaW5jbHVkZSAiU3VyZmFjZU9wZW5WRy5o
IgorI2luY2x1ZGUgIlRpbGVkSW1hZ2VPcGVuVkcuaCIKICNpbmNsdWRlICJWR1V0aWxzLmgiCiAK
ICNpZiBQTEFURk9STShFR0wpCkBAIC0xMDg1LDYgKzEwODYsNDkgQEAgdm9pZCBQYWludGVyT3Bl
blZHOjpkcmF3UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2lu
dHMsIFZHYmkKICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKIH0KIAordm9pZCBQYWludGVyT3Bl
blZHOjpkcmF3SW1hZ2UoVGlsZWRJbWFnZU9wZW5WRyogdGlsZWRJbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjKQoreworICAgIEFTU0VSVChtX3N0YXRlKTsK
KyAgICBtX3N1cmZhY2UtPm1ha2VDdXJyZW50KCk7CisKKyAgICAvLyBJZiBidWZmZXJzIGNhbiBi
ZSBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBPcGVuVkcgaW1hZ2Ugc2l6ZXMsCisgICAgLy8gd2Ug
c3BsaXQgdGhlbSBpbnRvIHRpbGVzLgorICAgIEludFJlY3QgZHJhd25UaWxlcyA9IHRpbGVkSW1h
Z2UtPnRpbGVzSW5SZWN0KHNyYyk7CisgICAgQWZmaW5lVHJhbnNmb3JtIHNyY1RvRHN0VHJhbnNm
b3JtYXRpb24gPSBtYWtlTWFwQmV0d2VlblJlY3RzKAorICAgICAgICBGbG9hdFJlY3QoRmxvYXRQ
b2ludCgwLjAsIDAuMCksIHNyYy5zaXplKCkpLCBkc3QpOworICAgIHNyY1RvRHN0VHJhbnNmb3Jt
YXRpb24udHJhbnNsYXRlKC1zcmMueCgpLCAtc3JjLnkoKSk7CisKKyAgICBmb3IgKGludCB5SW5k
ZXggPSBkcmF3blRpbGVzLnkoKTsgeUluZGV4IDwgZHJhd25UaWxlcy5ib3R0b20oKTsgKyt5SW5k
ZXgpIHsKKyAgICAgICAgZm9yIChpbnQgeEluZGV4ID0gZHJhd25UaWxlcy54KCk7IHhJbmRleCA8
IGRyYXduVGlsZXMucmlnaHQoKTsgKyt4SW5kZXgpIHsKKyAgICAgICAgICAgIC8vIFRoZSBzcmNU
aWxlIHJlY3RhbmdsZSBpcyBhbiBhbGlnbmVkIHRpbGUgY3JvcHBlZCBieSB0aGUgc3JjIHJlY3Rh
bmdsZS4KKyAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlKHRpbGVkSW1hZ2UtPnRpbGVSZWN0KHhJ
bmRleCwgeUluZGV4KSk7CisgICAgICAgICAgICBGbG9hdFJlY3Qgc3JjVGlsZSA9IGludGVyc2Vj
dGlvbihzcmMsIHRpbGUpOworCisgICAgICAgICAgICBzYXZlKCk7CisKKyAgICAgICAgICAgIC8v
IElmIHRoZSBpbWFnZSBpcyBkcmF3biBpbiBmdWxsLCBhbGwgd2UgbmVlZCBpcyB0aGUgcHJvcGVy
IHRyYW5zZm9ybWF0aW9uCisgICAgICAgICAgICAvLyBpbiBvcmRlciB0byBnZXQgaXQgZHJhd24g
YXQgdGhlIHJpZ2h0IHNwb3Qgb24gdGhlIHN1cmZhY2UuCisgICAgICAgICAgICBjb25jYXRUcmFu
c2Zvcm1hdGlvbihBZmZpbmVUcmFuc2Zvcm0oc3JjVG9Ec3RUcmFuc2Zvcm1hdGlvbikudHJhbnNs
YXRlKHRpbGUueCgpLCB0aWxlLnkoKSkpOworCisgICAgICAgICAgICAvLyBJZiBvbmx5IGEgcGFy
dCBvZiB0aGUgdGlsZSBpcyBkcmF3biwgd2UgYWxzbyBuZWVkIHRvIGNsaXAgdGhlIHN1cmZhY2Uu
CisgICAgICAgICAgICBpZiAoc3JjVGlsZSAhPSB0aWxlKSB7CisgICAgICAgICAgICAgICAgLy8g
UHV0IGJvdW5kYXJpZXMgcmVsYXRpdmUgdG8gdGlsZSBvcmlnaW4sIGFzIHdlIGFscmVhZHkKKyAg
ICAgICAgICAgICAgICAvLyB0cmFuc2xhdGVkIHRvICh4LCB5KSB3aXRoIHRoZSB0cmFuc2Zvcm1h
dGlvbiBtYXRyaXguCisgICAgICAgICAgICAgICAgc3JjVGlsZS5tb3ZlKC10aWxlLngoKSwgLXRp
bGUueSgpKTsKKyAgICAgICAgICAgICAgICBpbnRlcnNlY3RDbGlwUmVjdChzcmNUaWxlKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgVkdJbWFnZSBpbWFnZSA9IHRpbGVkSW1hZ2UtPnRp
bGUoeEluZGV4LCB5SW5kZXgpOworICAgICAgICAgICAgaWYgKGltYWdlICE9IFZHX0lOVkFMSURf
SEFORExFKSB7CisgICAgICAgICAgICAgICAgdmdEcmF3SW1hZ2UoaW1hZ2UpOworICAgICAgICAg
ICAgICAgIEFTU0VSVF9WR19OT19FUlJPUigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXN0b3JlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKICNpZmRlZiBPUEVOVkdfVkVSU0lP
Tl8xXzEKIHZvaWQgUGFpbnRlck9wZW5WRzo6ZHJhd1RleHQoVkdGb250IHZnRm9udCwgVmVjdG9y
PFZHdWludD4mIGNoYXJhY3RlcnMsIFZHZmxvYXQqIGFkanVzdG1lbnRzWCwgVkdmbG9hdCogYWRq
dXN0bWVudHNZLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKQEAgLTExMzcsNiArMTE4MSw0
OCBAQCB2b2lkIFBhaW50ZXJPcGVuVkc6OmRyYXdUZXh0KFZHRm9udCB2Z0ZvbnQsIFZlY3RvcjxW
R3VpbnQ+JiBjaGFyYWN0ZXJzLCBWR2Zsb2F0KgogfQogI2VuZGlmCiAKK1RpbGVkSW1hZ2VPcGVu
VkcqIFBhaW50ZXJPcGVuVkc6OmFzTmV3TmF0aXZlSW1hZ2UoY29uc3QgSW50UmVjdCYgc3JjLCBW
R0ltYWdlRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSk7CisgICAgbV9zdXJm
YWNlLT5zaGFyZWRTdXJmYWNlKCktPm1ha2VDdXJyZW50KCk7CisKKyAgICBjb25zdCBJbnRTaXpl
IHZnTWF4SW1hZ2VTaXplKHZnR2V0aShWR19NQVhfSU1BR0VfV0lEVEgpLCB2Z0dldGkoVkdfTUFY
X0lNQUdFX0hFSUdIVCkpOworICAgIEFTU0VSVF9WR19OT19FUlJPUigpOworCisgICAgY29uc3Qg
SW50UmVjdCByZWN0ID0gaW50ZXJzZWN0aW9uKHNyYywgSW50UmVjdCgwLCAwLCBtX3N1cmZhY2Ut
PndpZHRoKCksIG1fc3VyZmFjZS0+aGVpZ2h0KCkpKTsKKyAgICBUaWxlZEltYWdlT3BlblZHKiB0
aWxlZEltYWdlID0gbmV3IFRpbGVkSW1hZ2VPcGVuVkcocmVjdC5zaXplKCksIHZnTWF4SW1hZ2VT
aXplKTsKKworICAgIGNvbnN0IGludCBudW1Db2x1bW5zID0gdGlsZWRJbWFnZS0+bnVtQ29sdW1u
cygpOworICAgIGNvbnN0IGludCBudW1Sb3dzID0gdGlsZWRJbWFnZS0+bnVtUm93cygpOworCisg
ICAgLy8gQ3JlYXRlIHRoZSBpbWFnZXMgYXMgcmVzb3VyY2VzIG9mIHRoZSBzaGFyZWQgc3VyZmFj
ZS9jb250ZXh0LgorICAgIGZvciAoaW50IHlJbmRleCA9IDA7IHlJbmRleCA8IG51bVJvd3M7ICsr
eUluZGV4KSB7CisgICAgICAgIGZvciAoaW50IHhJbmRleCA9IDA7IHhJbmRleCA8IG51bUNvbHVt
bnM7ICsreEluZGV4KSB7CisgICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gdGlsZWRJbWFn
ZS0+dGlsZVJlY3QoeEluZGV4LCB5SW5kZXgpOworICAgICAgICAgICAgVkdJbWFnZSBpbWFnZSA9
IHZnQ3JlYXRlSW1hZ2UoZm9ybWF0LCB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQo
KSwgVkdfSU1BR0VfUVVBTElUWV9GQVNURVIpOworICAgICAgICAgICAgQVNTRVJUX1ZHX05PX0VS
Uk9SKCk7CisKKyAgICAgICAgICAgIHRpbGVkSW1hZ2UtPnNldFRpbGUoeEluZGV4LCB5SW5kZXgs
IGltYWdlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZpbGwgdGhlIGltYWdlIGNvbnRl
bnRzIHdpdGggb3VyIG93biBzdXJmYWNlL2NvbnRleHQgYmVpbmcgY3VycmVudC4KKyAgICBtX3N1
cmZhY2UtPm1ha2VDdXJyZW50KCk7CisKKyAgICBmb3IgKGludCB5SW5kZXggPSAwOyB5SW5kZXgg
PCBudW1Sb3dzOyArK3lJbmRleCkgeworICAgICAgICBmb3IgKGludCB4SW5kZXggPSAwOyB4SW5k
ZXggPCBudW1Db2x1bW5zOyArK3hJbmRleCkgeworICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVj
dCA9IHRpbGVkSW1hZ2UtPnRpbGVSZWN0KHhJbmRleCwgeUluZGV4KTsKKworICAgICAgICAgICAg
dmdHZXRQaXhlbHModGlsZWRJbWFnZS0+dGlsZSh4SW5kZXgsIHlJbmRleCksIDAsIDAsCisgICAg
ICAgICAgICAgICAgcmVjdC54KCkgKyB0aWxlUmVjdC54KCksIHJlY3QueSgpICsgdGlsZVJlY3Qu
eSgpLAorICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgp
KTsKKyAgICAgICAgICAgIEFTU0VSVF9WR19OT19FUlJPUigpOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHRpbGVkSW1hZ2U7Cit9CisKIHZvaWQgUGFpbnRlck9wZW5WRzo6c2F2ZShQ
YWludGVyT3BlblZHOjpTYXZlTW9kZSBzYXZlTW9kZSkKIHsKICAgICBBU1NFUlQobV9zdGF0ZSk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9QYWludGVyT3Bl
blZHLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9QYWludGVyT3BlblZHLmgK
aW5kZXggMzBjZGYzMS4uZTRjNjY4OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVudmcvUGFpbnRlck9wZW5WRy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnZnL1BhaW50ZXJPcGVuVkcuaApAQCAtMzcsNiArMzcsNyBAQCBjbGFzcyBJbnRSZWN0
OwogY2xhc3MgSW50U2l6ZTsKIGNsYXNzIFBhdGg7CiBjbGFzcyBTdXJmYWNlT3BlblZHOworY2xh
c3MgVGlsZWRJbWFnZU9wZW5WRzsKIAogc3RydWN0IFBsYXRmb3JtUGFpbnRlclN0YXRlOwogCkBA
IC0xMDEsNiArMTAyLDcgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0FyYyhjb25zdCBJbnRSZWN0
JiBlbGxpcHNlQm91bmRzLCBpbnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3BhbiwgVkdiaXRmaWVs
ZCBwYWludE1vZGVzID0gKFZHX1NUUk9LRV9QQVRIIHwgVkdfRklMTF9QQVRIKSk7CiAgICAgdm9p
ZCBkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0JiBib3VuZHMsIFZHYml0ZmllbGQgcGFpbnRNb2Rl
cyA9IChWR19TVFJPS0VfUEFUSCB8IFZHX0ZJTExfUEFUSCkpOwogICAgIHZvaWQgZHJhd1BvbHln
b24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBWR2JpdGZpZWxk
IHBhaW50TW9kZXMgPSAoVkdfU1RST0tFX1BBVEggfCBWR19GSUxMX1BBVEgpKTsKKyAgICB2b2lk
IGRyYXdJbWFnZShUaWxlZEltYWdlT3BlblZHKiwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjKTsKICNpZmRlZiBPUEVOVkdfVkVSU0lPTl8xXzEKICAgICB2b2lkIGRy
YXdUZXh0KFZHRm9udCwgVmVjdG9yPFZHdWludD4mIGNoYXJhY3RlcnMsIFZHZmxvYXQqIGFkanVz
dG1lbnRzWCwgVkdmbG9hdCogYWRqdXN0bWVudHNZLCBjb25zdCBGbG9hdFBvaW50Jik7CiAjZW5k
aWYKQEAgLTExNyw2ICsxMTksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnRlcnNlY3RDbGlwUmVj
dChjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBQYWlu
dGVyT3BlblZHOjpDbGlwT3BlcmF0aW9uLCBXaW5kUnVsZSBjbGlwUnVsZSA9IFJVTEVfTk9OWkVS
Tyk7CiAKKyAgICBUaWxlZEltYWdlT3BlblZHKiBhc05ld05hdGl2ZUltYWdlKGNvbnN0IEludFJl
Y3QmIHNyYywgVkdJbWFnZUZvcm1hdCk7CisKICAgICB2b2lkIHNhdmUoUGFpbnRlck9wZW5WRzo6
U2F2ZU1vZGUgc2F2ZU1vZGUgPSBDcmVhdGVOZXdTdGF0ZSk7CiAgICAgdm9pZCByZXN0b3JlKCk7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1RpbGVkSW1h
Z2VPcGVuVkcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVGlsZWRJbWFn
ZU9wZW5WRy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhjNGQxNQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1RpbGVk
SW1hZ2VPcGVuVkcuY3BwCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaWxlZEltYWdlT3BlblZHLmgiCisKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiVkdV
dGlscy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RpbGVkSW1hZ2VPcGVuVkc6OlRpbGVk
SW1hZ2VPcGVuVkcoY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUp
CisgICAgOiBTaGFyZWRSZXNvdXJjZU9wZW5WRygpCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAs
IG1fbWF4VGlsZVNpemUodGlsZVNpemUpCisgICAgLCBtX251bUNvbHVtbnMoKG1fc2l6ZS53aWR0
aCgpIC0gMSkgLyBtX21heFRpbGVTaXplLndpZHRoKCkgKyAxKQorICAgICwgbV90aWxlcygoKG1f
c2l6ZS5oZWlnaHQoKSAtIDEpIC8gbV9tYXhUaWxlU2l6ZS5oZWlnaHQoKSArIDEpICogbV9udW1D
b2x1bW5zLCBWR19JTlZBTElEX0hBTkRMRSkKK3sKK30KKworVGlsZWRJbWFnZU9wZW5WRzo6VGls
ZWRJbWFnZU9wZW5WRyhjb25zdCBUaWxlZEltYWdlT3BlblZHJiBvdGhlcikKKyAgICA6IFNoYXJl
ZFJlc291cmNlT3BlblZHKCkKKyAgICAsIG1fc2l6ZShvdGhlci5tX3NpemUpCisgICAgLCBtX21h
eFRpbGVTaXplKG90aGVyLm1fbWF4VGlsZVNpemUpCisgICAgLCBtX251bUNvbHVtbnMob3RoZXIu
bV9udW1Db2x1bW5zKQorICAgICwgbV90aWxlcyhvdGhlci5tX3RpbGVzKQoreworICAgIGRldGFj
aFRpbGVzKCk7Cit9CisKK1RpbGVkSW1hZ2VPcGVuVkcmIFRpbGVkSW1hZ2VPcGVuVkc6Om9wZXJh
dG9yPShjb25zdCBUaWxlZEltYWdlT3BlblZHJiBvdGhlcikKK3sKKyAgICBpZiAoJm90aGVyICE9
IHRoaXMpIHsKKyAgICAgICAgZGVzdHJveVRpbGVzKCk7CisKKyAgICAgICAgbV9zaXplID0gb3Ro
ZXIubV9zaXplOworICAgICAgICBtX21heFRpbGVTaXplID0gb3RoZXIubV9tYXhUaWxlU2l6ZTsK
KyAgICAgICAgbV9udW1Db2x1bW5zID0gb3RoZXIubV9udW1Db2x1bW5zOworICAgICAgICBtX3Rp
bGVzID0gb3RoZXIubV90aWxlczsKKworICAgICAgICBkZXRhY2hUaWxlcygpOworICAgIH0KKyAg
ICByZXR1cm4gKnRoaXM7Cit9CisKK1RpbGVkSW1hZ2VPcGVuVkc6On5UaWxlZEltYWdlT3BlblZH
KCkKK3sKKyAgICBkZXN0cm95VGlsZXMoKTsKK30KKworaW50IFRpbGVkSW1hZ2VPcGVuVkc6Om51
bVRpbGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxlcy5zaXplKCk7Cit9CisKK2ludCBU
aWxlZEltYWdlT3BlblZHOjpudW1Db2x1bW5zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9udW1D
b2x1bW5zOworfQorCitpbnQgVGlsZWRJbWFnZU9wZW5WRzo6bnVtUm93cygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fdGlsZXMuc2l6ZSgpIC8gbV9udW1Db2x1bW5zOworfQorCit2b2lkIFRpbGVk
SW1hZ2VPcGVuVkc6OnNldFRpbGUoaW50IHhJbmRleCwgaW50IHlJbmRleCwgVkdJbWFnZSBpbWFn
ZSkKK3sKKyAgICBBU1NFUlQoeEluZGV4IDwgbV9udW1Db2x1bW5zKTsKKyAgICBpbnQgaSA9ICh5
SW5kZXggKiBtX251bUNvbHVtbnMpICsgeEluZGV4OworICAgIEFTU0VSVChpIDwgbV90aWxlcy5z
aXplKCkpOworICAgIG1fdGlsZXMuYXQoaSkgPSBpbWFnZTsKK30KKworSW50UmVjdCBUaWxlZElt
YWdlT3BlblZHOjp0aWxlc0luUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Cit7Cisg
ICAgaW50IGxlZnRJbmRleCA9ICgoaW50KSByZWN0LngoKSkgLyBtX21heFRpbGVTaXplLndpZHRo
KCk7CisgICAgaW50IHRvcEluZGV4ID0gKChpbnQpIHJlY3QueSgpKSAvIG1fbWF4VGlsZVNpemUu
aGVpZ2h0KCk7CisKKyAgICBpZiAobGVmdEluZGV4IDwgMCkKKyAgICAgICAgbGVmdEluZGV4ID0g
MDsKKyAgICBpZiAodG9wSW5kZXggPCAwKQorICAgICAgICB0b3BJbmRleCA9IDA7CisKKyAgICAv
LyBSb3VuZCByZWN0IGVkZ2VzIHVwIHRvIGdldCB0aGUgb3V0ZXIgcGl4ZWwgYm91bmRhcmllcy4K
KyAgICBpbnQgcmlnaHRJbmRleCA9ICgoKGludCkgY2VpbChyZWN0LnJpZ2h0KCkpKSAtIDEpIC8g
bV9tYXhUaWxlU2l6ZS53aWR0aCgpOworICAgIGludCBib3R0b21JbmRleCA9ICgoKGludCkgY2Vp
bChyZWN0LmJvdHRvbSgpKSkgLSAxKSAvIG1fbWF4VGlsZVNpemUuaGVpZ2h0KCk7CisgICAgaW50
IGNvbHVtbnMgPSAocmlnaHRJbmRleCAtIGxlZnRJbmRleCkgKyAxOworICAgIGludCByb3dzID0g
KGJvdHRvbUluZGV4IC0gdG9wSW5kZXgpICsgMTsKKworICAgIHJldHVybiBJbnRSZWN0KGxlZnRJ
bmRleCwgdG9wSW5kZXgsCisgICAgICAgIChjb2x1bW5zIDw9IG1fbnVtQ29sdW1ucykgPyBjb2x1
bW5zIDogbV9udW1Db2x1bW5zLAorICAgICAgICAocm93cyA8PSAobV90aWxlcy5zaXplKCkgLyBt
X251bUNvbHVtbnMpKSA/IHJvd3MgOiAobV90aWxlcy5zaXplKCkgLyBtX251bUNvbHVtbnMpKTsK
K30KKworVkdJbWFnZSBUaWxlZEltYWdlT3BlblZHOjp0aWxlKGludCB4SW5kZXgsIGludCB5SW5k
ZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHhJbmRleCA8IG1fbnVtQ29sdW1ucyk7CisgICAgaW50
IGkgPSAoeUluZGV4ICogbV9udW1Db2x1bW5zKSArIHhJbmRleDsKKyAgICBBU1NFUlQoaSA8IG1f
dGlsZXMuc2l6ZSgpKTsKKyAgICByZXR1cm4gbV90aWxlcy5hdChpKTsKK30KKworSW50UmVjdCBU
aWxlZEltYWdlT3BlblZHOjp0aWxlUmVjdChpbnQgeEluZGV4LCBpbnQgeUluZGV4KSBjb25zdAor
eworICAgIEFTU0VSVCh4SW5kZXggPCBtX251bUNvbHVtbnMpOworICAgIEFTU0VSVCgoeUluZGV4
ICogbV9udW1Db2x1bW5zKSArIHhJbmRleCA8IG1fdGlsZXMuc2l6ZSgpKTsKKworICAgIGludCB4
ID0geEluZGV4ICogbV9tYXhUaWxlU2l6ZS53aWR0aCgpOworICAgIGludCB5ID0geUluZGV4ICog
bV9tYXhUaWxlU2l6ZS5oZWlnaHQoKTsKKworICAgIHJldHVybiBJbnRSZWN0KHgsIHksCisgICAg
ICAgICgobV9tYXhUaWxlU2l6ZS53aWR0aCgpIDwgbV9zaXplLndpZHRoKCkgLSB4KSA/IG1fbWF4
VGlsZVNpemUud2lkdGgoKSA6IChtX3NpemUud2lkdGgoKSAtIHgpKSwKKyAgICAgICAgKChtX21h
eFRpbGVTaXplLmhlaWdodCgpIDwgbV9zaXplLmhlaWdodCgpIC0geSkgPyBtX21heFRpbGVTaXpl
LmhlaWdodCgpIDogKG1fc2l6ZS5oZWlnaHQoKSAtIHkpKSk7Cit9CisKK3ZvaWQgVGlsZWRJbWFn
ZU9wZW5WRzo6ZGV0YWNoVGlsZXMoKQoreworICAgIG1ha2VTaGFyZWRDb250ZXh0Q3VycmVudCgp
OyAvLyBiZWNhdXNlIHdlIGNyZWF0ZSBuZXcgaW1hZ2VzCisKKyAgICBpbnQgbnVtVGlsZXMgPSBt
X3RpbGVzLnNpemUoKTsKKyAgICBWR0ltYWdlIG5ld1RpbGUsIG9yaWdpbmFsVGlsZTsKKworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGlsZXM7ICsraSkgeworICAgICAgICBvcmlnaW5hbFRp
bGUgPSBtX3RpbGVzLmF0KGkpOworCisgICAgICAgIGlmIChvcmlnaW5hbFRpbGUgPT0gVkdfSU5W
QUxJRF9IQU5ETEUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBWR0ltYWdlRm9y
bWF0IGZvcm1hdCA9IChWR0ltYWdlRm9ybWF0KSB2Z0dldFBhcmFtZXRlcmkob3JpZ2luYWxUaWxl
LCBWR19JTUFHRV9GT1JNQVQpOworICAgICAgICBWR2ludCB3aWR0aCA9IHZnR2V0UGFyYW1ldGVy
aShvcmlnaW5hbFRpbGUsIFZHX0lNQUdFX1dJRFRIKTsKKyAgICAgICAgVkdpbnQgaGVpZ2h0ID0g
dmdHZXRQYXJhbWV0ZXJpKG9yaWdpbmFsVGlsZSwgVkdfSU1BR0VfSEVJR0hUKTsKKyAgICAgICAg
QVNTRVJUX1ZHX05PX0VSUk9SKCk7CisKKyAgICAgICAgbmV3VGlsZSA9IHZnQ3JlYXRlSW1hZ2Uo
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBWR19JTUFHRV9RVUFMSVRZX0ZBU1RFUik7CisgICAgICAg
IEFTU0VSVF9WR19OT19FUlJPUigpOworCisgICAgICAgIHZnQ29weUltYWdlKG5ld1RpbGUsIDAs
IDAsIG9yaWdpbmFsVGlsZSwgMCwgMCwgd2lkdGgsIGhlaWdodCwgVkdfRkFMU0UgLyogZGl0aGVy
ICovKTsKKyAgICAgICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7CisKKyAgICAgICAgbV90aWxlcy5h
dChpKSA9IG5ld1RpbGU7CisgICAgfQorfQorCit2b2lkIFRpbGVkSW1hZ2VPcGVuVkc6OmRlc3Ry
b3lUaWxlcygpCit7CisgICAgbWFrZUNvbXBhdGlibGVDb250ZXh0Q3VycmVudCgpOworCisgICAg
VmVjdG9yPFZHSW1hZ2U+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsKKyAg
ICBWZWN0b3I8VkdJbWFnZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CisK
KyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgqaXQgIT0gVkdfSU5W
QUxJRF9IQU5ETEUpCisgICAgICAgICAgICB2Z0Rlc3Ryb3lJbWFnZSgqaXQpOworICAgIH0KKyAg
ICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKKworICAgIG1fdGlsZXMuZmlsbChWR19JTlZBTElEX0hB
TkRMRSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bnZnL1RpbGVkSW1hZ2VPcGVuVkcuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZn
L1RpbGVkSW1hZ2VPcGVuVkcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l
MWM4MmZmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
dmcvVGlsZWRJbWFnZU9wZW5WRy5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBUaWxlZEltYWdlT3BlblZHX2gKKyNkZWZpbmUgVGlsZWRJbWFnZU9wZW5W
R19oCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1
ZGUgIlNoYXJlZFJlc291cmNlT3BlblZHLmgiCisKKyNpbmNsdWRlIDxvcGVudmcuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRS
ZWN0OworCitjbGFzcyBUaWxlZEltYWdlT3BlblZHIDogcHVibGljIFNoYXJlZFJlc291cmNlT3Bl
blZHIHsKK3B1YmxpYzoKKyAgICBUaWxlZEltYWdlT3BlblZHKGNvbnN0IEludFNpemUmIHNpemUs
IGNvbnN0IEludFNpemUmIHRpbGVTaXplKTsKKyAgICBUaWxlZEltYWdlT3BlblZHKGNvbnN0IFRp
bGVkSW1hZ2VPcGVuVkcmKTsKKyAgICB+VGlsZWRJbWFnZU9wZW5WRygpOworCisgICAgVGlsZWRJ
bWFnZU9wZW5WRyYgb3BlcmF0b3I9KGNvbnN0IFRpbGVkSW1hZ2VPcGVuVkcmKTsKKworICAgIGNv
bnN0IEludFNpemUmIHNpemUoKSBjb25zdCAgICAgICAgeyByZXR1cm4gbV9zaXplOyB9CisgICAg
Y29uc3QgSW50U2l6ZSYgbWF4VGlsZVNpemUoKSBjb25zdCB7IHJldHVybiBtX21heFRpbGVTaXpl
OyB9CisKKyAgICBpbnQgbnVtVGlsZXMoKSBjb25zdDsKKyAgICBpbnQgbnVtQ29sdW1ucygpIGNv
bnN0OworICAgIGludCBudW1Sb3dzKCkgY29uc3Q7CisKKyAgICBJbnRSZWN0IHRpbGVzSW5SZWN0
KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworCisgICAgdm9pZCBzZXRUaWxlKGludCB4SW5kZXgs
IGludCB5SW5kZXgsIFZHSW1hZ2UpOworICAgIFZHSW1hZ2UgdGlsZShpbnQgeEluZGV4LCBpbnQg
eUluZGV4KSBjb25zdDsKKyAgICBJbnRSZWN0IHRpbGVSZWN0KGludCB4SW5kZXgsIGludCB5SW5k
ZXgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgZGV0YWNoVGlsZXMoKTsKKyAgICB2b2lk
IGRlc3Ryb3lUaWxlcygpOworCisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgSW50U2l6ZSBtX21h
eFRpbGVTaXplOworCisgICAgaW50IG1fbnVtQ29sdW1uczsKKworICAgIFZlY3RvcjxWR0ltYWdl
PiBtX3RpbGVzOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnZnL1ZHVXRpbHMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudmcvVkdVdGlscy5jcHAKaW5kZXggY2U5YmNkMi4uMjU1OWFhZiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVkdVdGlscy5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVkdVdGlscy5jcHAKQEAgLTEyMCw0ICsxMjAsMTE2
IEBAIEZsb2F0UmVjdDo6b3BlcmF0b3IgVkdSZWN0KCkgY29uc3QKICAgICByZXR1cm4gVkdSZWN0
KCp0aGlzKTsKIH0KIAoraW50IFZHVXRpbHM6OmJ5dGVzRm9ySW1hZ2UoVkdJbWFnZUZvcm1hdCBm
b3JtYXQsIFZHaW50IHdpZHRoLCBWR2ludCBoZWlnaHQpCit7CisgICAgcmV0dXJuIHdpZHRoICog
aGVpZ2h0ICogaW1hZ2VGb3JtYXRCaXRzUGVyUGl4ZWwoZm9ybWF0KSAvIDg7Cit9CisKK2ludCBW
R1V0aWxzOjpieXRlc0ZvckltYWdlU2NhbmxpbmUoVkdJbWFnZUZvcm1hdCBmb3JtYXQsIFZHaW50
IHdpZHRoKQoreworICAgIGludCBiaXRzID0gd2lkdGggKiBpbWFnZUZvcm1hdEJpdHNQZXJQaXhl
bChmb3JtYXQpOworICAgIGlmIChiaXRzICUgOCA+IDEpIC8vIElmIHVuYWxpZ25lZCwgcm91bmQg
dXAgdG8gdGhlIG5leHQgYnl0ZS4KKyAgICAgICAgYml0cyArPSA4IC0gKGJpdHMgJSA4KTsKKwor
ICAgIHJldHVybiBiaXRzIC8gODsKK30KKworaW50IFZHVXRpbHM6OmltYWdlRm9ybWF0Qml0c1Bl
clBpeGVsKFZHSW1hZ2VGb3JtYXQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7Cisg
ICAgY2FzZSBWR19zUkdCWF84ODg4OgorICAgIGNhc2UgVkdfc1JHQkFfODg4ODoKKyAgICBjYXNl
IFZHX3NSR0JBXzg4ODhfUFJFOgorICAgIGNhc2UgVkdfbFJHQlhfODg4ODoKKyAgICBjYXNlIFZH
X2xSR0JBXzg4ODg6CisgICAgY2FzZSBWR19sUkdCQV84ODg4X1BSRToKKyAgICBjYXNlIFZHX3NY
UkdCXzg4ODg6CisgICAgY2FzZSBWR19zQVJHQl84ODg4OgorICAgIGNhc2UgVkdfc0FSR0JfODg4
OF9QUkU6CisgICAgY2FzZSBWR19sWFJHQl84ODg4OgorICAgIGNhc2UgVkdfbEFSR0JfODg4ODoK
KyAgICBjYXNlIFZHX2xBUkdCXzg4ODhfUFJFOgorICAgIGNhc2UgVkdfc0JHUlhfODg4ODoKKyAg
ICBjYXNlIFZHX3NCR1JBXzg4ODg6CisgICAgY2FzZSBWR19zQkdSQV84ODg4X1BSRToKKyAgICBj
YXNlIFZHX2xCR1JYXzg4ODg6CisgICAgY2FzZSBWR19sQkdSQV84ODg4OgorICAgIGNhc2UgVkdf
bEJHUkFfODg4OF9QUkU6CisgICAgY2FzZSBWR19zWEJHUl84ODg4OgorICAgIGNhc2UgVkdfc0FC
R1JfODg4ODoKKyAgICBjYXNlIFZHX3NBQkdSXzg4ODhfUFJFOgorICAgIGNhc2UgVkdfbFhCR1Jf
ODg4ODoKKyAgICBjYXNlIFZHX2xBQkdSXzg4ODg6CisgICAgY2FzZSBWR19sQUJHUl84ODg4X1BS
RToKKyAgICAgICAgcmV0dXJuIDMyOworCisgICAgY2FzZSBWR19zUkdCXzU2NToKKyAgICBjYXNl
IFZHX3NSR0JBXzU1NTE6CisgICAgY2FzZSBWR19zUkdCQV80NDQ0OgorICAgIGNhc2UgVkdfc0FS
R0JfMTU1NToKKyAgICBjYXNlIFZHX3NBUkdCXzQ0NDQ6CisgICAgY2FzZSBWR19zQkdSXzU2NToK
KyAgICBjYXNlIFZHX3NCR1JBXzU1NTE6CisgICAgY2FzZSBWR19zQkdSQV80NDQ0OgorICAgIGNh
c2UgVkdfc0FCR1JfMTU1NToKKyAgICBjYXNlIFZHX3NBQkdSXzQ0NDQ6CisgICAgICAgIHJldHVy
biAxNjsKKworICAgIGNhc2UgVkdfc0xfODoKKyAgICBjYXNlIFZHX2xMXzg6CisgICAgY2FzZSBW
R19BXzg6CisgICAgICAgIHJldHVybiA4OworCisgICAgY2FzZSBWR19BXzQ6CisgICAgICAgIHJl
dHVybiA0OworCisgICAgY2FzZSBWR19CV18xOgorICAgIGNhc2UgVkdfQV8xOgorICAgICAgICBy
ZXR1cm4gMTsKKworICAgIGRlZmF1bHQ6IC8vIFdpbGwgb25seSBoYXBwZW4gd2hlbiBPcGVuVkcg
ZXh0ZW5kcyB0aGUgZW51bSBhbmQgd2UgZG9uJ3QuCisgICAgICAgIEFTU0VSVChmYWxzZSk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworI2lmbmRlZiBXVEZfUExBVEZPUk1fQklHX0VO
RElBTgorVkdJbWFnZUZvcm1hdCBWR1V0aWxzOjplbmRpYW5Bd2FyZUltYWdlRm9ybWF0KFZHSW1h
Z2VGb3JtYXQgYmlnRW5kaWFuRm9ybWF0KQoreworICAgIHN3aXRjaCAoYmlnRW5kaWFuRm9ybWF0
KSB7CisgICAgY2FzZSBWR19zUkdCWF84ODg4OiAgICAgcmV0dXJuIFZHX3NYQkdSXzg4ODg7Cisg
ICAgY2FzZSBWR19zUkdCQV84ODg4OiAgICAgcmV0dXJuIFZHX3NBQkdSXzg4ODg7CisgICAgY2Fz
ZSBWR19zUkdCQV84ODg4X1BSRTogcmV0dXJuIFZHX3NBQkdSXzg4ODhfUFJFOworICAgIGNhc2Ug
VkdfbFJHQlhfODg4ODogICAgIHJldHVybiBWR19sWEJHUl84ODg4OworICAgIGNhc2UgVkdfbFJH
QkFfODg4ODogICAgIHJldHVybiBWR19sQUJHUl84ODg4OworICAgIGNhc2UgVkdfbFJHQkFfODg4
OF9QUkU6IHJldHVybiBWR19sQUJHUl84ODg4X1BSRTsKKyAgICBjYXNlIFZHX3NYUkdCXzg4ODg6
ICAgICByZXR1cm4gVkdfc0JHUlhfODg4ODsKKyAgICBjYXNlIFZHX3NBUkdCXzg4ODg6ICAgICBy
ZXR1cm4gVkdfc0JHUkFfODg4ODsKKyAgICBjYXNlIFZHX3NBUkdCXzg4ODhfUFJFOiByZXR1cm4g
Vkdfc0JHUkFfODg4OF9QUkU7CisgICAgY2FzZSBWR19sWFJHQl84ODg4OiAgICAgcmV0dXJuIFZH
X2xCR1JYXzg4ODg7CisgICAgY2FzZSBWR19sQVJHQl84ODg4OiAgICAgcmV0dXJuIFZHX2xCR1JB
Xzg4ODg7CisgICAgY2FzZSBWR19sQVJHQl84ODg4X1BSRTogcmV0dXJuIFZHX2xCR1JBXzg4ODhf
UFJFOworICAgIGNhc2UgVkdfc0JHUlhfODg4ODogICAgIHJldHVybiBWR19zWFJHQl84ODg4Owor
ICAgIGNhc2UgVkdfc0JHUkFfODg4ODogICAgIHJldHVybiBWR19zQVJHQl84ODg4OworICAgIGNh
c2UgVkdfc0JHUkFfODg4OF9QUkU6IHJldHVybiBWR19zQVJHQl84ODg4X1BSRTsKKyAgICBjYXNl
IFZHX2xCR1JYXzg4ODg6ICAgICByZXR1cm4gVkdfbFhSR0JfODg4ODsKKyAgICBjYXNlIFZHX2xC
R1JBXzg4ODg6ICAgICByZXR1cm4gVkdfbEFSR0JfODg4ODsKKyAgICBjYXNlIFZHX2xCR1JBXzg4
ODhfUFJFOiByZXR1cm4gVkdfbEFSR0JfODg4OF9QUkU7CisgICAgY2FzZSBWR19zWEJHUl84ODg4
OiAgICAgcmV0dXJuIFZHX3NSR0JYXzg4ODg7CisgICAgY2FzZSBWR19zQUJHUl84ODg4OiAgICAg
cmV0dXJuIFZHX3NSR0JBXzg4ODg7CisgICAgY2FzZSBWR19zQUJHUl84ODg4X1BSRTogcmV0dXJu
IFZHX3NSR0JBXzg4ODhfUFJFOworICAgIGNhc2UgVkdfbFhCR1JfODg4ODogICAgIHJldHVybiBW
R19sUkdCWF84ODg4OworICAgIGNhc2UgVkdfbEFCR1JfODg4ODogICAgIHJldHVybiBWR19sUkdC
QV84ODg4OworICAgIGNhc2UgVkdfbEFCR1JfODg4OF9QUkU6IHJldHVybiBWR19sUkdCQV84ODg4
X1BSRTsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoVkdJbWFnZUZvcm1hdCkgMDsKKyAgICB9Cit9
CisjZWxzZQorVkdJbWFnZUZvcm1hdCBWR1V0aWxzOjplbmRpYW5Bd2FyZUltYWdlRm9ybWF0KFZH
SW1hZ2VGb3JtYXQgYmlnRW5kaWFuRm9ybWF0KQoreworICAgIHJldHVybiBiaWdFbmRpYW5Gb3Jt
YXQ7Cit9CisjZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudmcvVkdVdGlscy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVkdV
dGlscy5oCmluZGV4IDNhMjkwY2IuLjA2ZDVmZWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnZnL1ZHVXRpbHMuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW52Zy9WR1V0aWxzLmgKQEAgLTg1LDYgKzg1LDMxIEBAIHByaXZhdGU6CiAgICAgVkdm
bG9hdCBtX2RhdGFbNF07CiB9OwogCitjbGFzcyBWR1V0aWxzIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgaW50IGJ5dGVzRm9ySW1hZ2UoVkdJbWFnZUZvcm1hdCwgVkdpbnQgd2lkdGgsIFZHaW50IGhl
aWdodCk7CisgICAgc3RhdGljIGludCBieXRlc0ZvckltYWdlU2NhbmxpbmUoVkdJbWFnZUZvcm1h
dCwgVkdpbnQgd2lkdGgpOworICAgIHN0YXRpYyBpbnQgaW1hZ2VGb3JtYXRCaXRzUGVyUGl4ZWwo
VkdJbWFnZUZvcm1hdCk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBmbGlwcGVkIFZHSW1h
Z2VGb3JtYXQgaWYgdGhlIHBsYXRmb3JtIGlzIGxpdHRsZSBlbmRpYW4KKyAgICAgKiAoZS5nLiBW
R19BQkdSXzg4ODggZm9yIGEgZ2l2ZW4gVkdfUkdCQV84ODg4KSwgb3IgcmV0dXJuIHRoZSBpbWFn
ZSBmb3JtYXQKKyAgICAgKiBhcyBpcyBpZiB0aGUgcGxhdGZvcm0gaXMgYmlnIGVuZGlhbi4KKyAg
ICAgKgorICAgICAqIE9wZW5WRyBpdHNlbGYgaXMgaW5kaWZmZXJlbnQgdG8gZW5kaWFubmVzcywg
aXQgd2lsbCBhbHdheXMgd29yayBvbiBhCisgICAgICogc2luZ2xlIG1hY2hpbmUgd29yZCB3aXRo
IHRoZSBieXRlcyBnb2luZyBmcm9tIGxlZnQgdG8gcmlnaHQgYXMgc3BlY2lmaWVkCisgICAgICog
aW4gdGhlIGltYWdlIGZvcm1hdCwgbm8gbWF0dGVyIHdoaWNoIG9uZSBvZiB0aGUgYnl0ZXMgaXMg
bW9zdCBvciBsZWFzdAorICAgICAqIHNpZ25pZmljYW50LgorICAgICAqCisgICAgICogSG93ZXZl
ciwgaWYgeW91IGludGVyZmFjZSB3aXRoIHZnSW1hZ2VTdWJEYXRhKCkvdmdHZXRJbWFnZVN1YkRh
dGEoKQorICAgICAqIHVzaW5nIGEgYnl0ZSBhcnJheSB0aGVuIHlvdSB3YW50IHRvIG1ha2Ugc3Vy
ZSB0aGUgYnl0ZSBvcmRlciBpcworICAgICAqIGFwcHJvcHJpYXRlIGZvciB0aGUgZ2l2ZW4gcGxh
dGZvcm0gKG90aGVyd2lzZSB0aGUgYnl0ZSBpbmRleGVzIG5lZWQKKyAgICAgKiB0byBiZSBzd2Fw
cGVkIGRlcGVuZGluZyBvbiBlbmRpYW5uZXNzKS4gU28sIHVzZSB0aGlzIGZ1bmN0aW9uIHdoZW4K
KyAgICAgKiBpbnRlcmZhY2luZyB3aXRoIGJ5dGUgYXJyYXlzLCBhbmQgZG9uJ3QgdXNlIGl0IG90
aGVyd2lzZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgVkdJbWFnZUZvcm1hdCBlbmRpYW5Bd2FyZUlt
YWdlRm9ybWF0KFZHSW1hZ2VGb3JtYXQgYmlnRW5kaWFuRm9ybWF0KTsKK307CisKIH0KIAogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL29wZW52Zy9J
bWFnZURlY29kZXJPcGVuVkcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9v
cGVudmcvSW1hZ2VEZWNvZGVyT3BlblZHLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4zZDhmNzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9vcGVudmcvSW1hZ2VEZWNvZGVyT3BlblZHLmNwcApAQCAtMCwwICsxLDc3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bWFnZURlY29kZXIuaCIKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCisjaW5jbHVkZSAiU3VyZmFjZU9wZW5WRy5oIgorI2luY2x1ZGUgIlRpbGVkSW1hZ2VPcGVu
VkcuaCIKKyNpbmNsdWRlICJWR1V0aWxzLmgiCisKKyNpZiBQTEFURk9STShFR0wpCisjaW5jbHVk
ZSAiRUdMRGlzcGxheU9wZW5WRy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxvcGVudmcuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBSR0JBMzJCdWZmZXI6OmFzTmV3
TmF0aXZlSW1hZ2UoKSBjb25zdAoreworICAgIHN0YXRpYyBjb25zdCBWR0ltYWdlRm9ybWF0IGJ1
ZmZlckZvcm1hdCA9IFZHX3NBUkdCXzg4ODhfUFJFOworICAgIC8vIFNhdmUgbWVtb3J5IGJ5IHVz
aW5nIDE2LWJpdCBpbWFnZXMgZm9yIGZ1bGx5IG9wYXF1ZSBpbWFnZXMuCisgICAgY29uc3QgVkdJ
bWFnZUZvcm1hdCBpbWFnZUZvcm1hdCA9IGhhc0FscGhhKCkgPyBidWZmZXJGb3JtYXQgOiBWR19z
UkdCXzU2NTsKKworI2lmIFBMQVRGT1JNKEVHTCkKKyAgICBFR0xEaXNwbGF5T3BlblZHOjpjdXJy
ZW50KCktPnNoYXJlZFBsYXRmb3JtU3VyZmFjZSgpLT5tYWtlQ3VycmVudCgpOworI2VuZGlmCisK
KyAgICBjb25zdCBJbnRTaXplIHZnTWF4SW1hZ2VTaXplKHZnR2V0aShWR19NQVhfSU1BR0VfV0lE
VEgpLCB2Z0dldGkoVkdfTUFYX0lNQUdFX0hFSUdIVCkpOworICAgIEFTU0VSVF9WR19OT19FUlJP
UigpOworCisgICAgVGlsZWRJbWFnZU9wZW5WRyogdGlsZWRJbWFnZSA9IG5ldyBUaWxlZEltYWdl
T3BlblZHKEludFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpLCB2Z01heEltYWdlU2l6ZSk7CisKKyAg
ICBjb25zdCBpbnQgbnVtQ29sdW1ucyA9IHRpbGVkSW1hZ2UtPm51bUNvbHVtbnMoKTsKKyAgICBj
b25zdCBpbnQgbnVtUm93cyA9IHRpbGVkSW1hZ2UtPm51bVJvd3MoKTsKKworICAgIGZvciAoaW50
IHlJbmRleCA9IDA7IHlJbmRleCA8IG51bVJvd3M7ICsreUluZGV4KSB7CisgICAgICAgIGZvciAo
aW50IHhJbmRleCA9IDA7IHhJbmRleCA8IG51bUNvbHVtbnM7ICsreEluZGV4KSB7CisgICAgICAg
ICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gdGlsZWRJbWFnZS0+dGlsZVJlY3QoeEluZGV4LCB5SW5k
ZXgpOworICAgICAgICAgICAgVkdJbWFnZSBpbWFnZSA9IHZnQ3JlYXRlSW1hZ2UoaW1hZ2VGb3Jt
YXQsCisgICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCks
IFZHX0lNQUdFX1FVQUxJVFlfRkFTVEVSKTsKKyAgICAgICAgICAgIEFTU0VSVF9WR19OT19FUlJP
UigpOworCisgICAgICAgICAgICBQaXhlbERhdGEqIHBpeGVsRGF0YSA9IGNvbnN0X2Nhc3Q8UGl4
ZWxEYXRhKj4obV9ieXRlcy5kYXRhKCkpOworICAgICAgICAgICAgcGl4ZWxEYXRhICs9ICh0aWxl
UmVjdC55KCkgKiB3aWR0aCgpKSArIHRpbGVSZWN0LngoKTsKKworICAgICAgICAgICAgdmdJbWFn
ZVN1YkRhdGEoaW1hZ2UsIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVsRGF0
YSksCisgICAgICAgICAgICAgICAgd2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpLCBidWZmZXJG
b3JtYXQsCisgICAgICAgICAgICAgICAgMCwgMCwgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3Qu
aGVpZ2h0KCkpOworICAgICAgICAgICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7CisKKyAgICAgICAg
ICAgIHRpbGVkSW1hZ2UtPnNldFRpbGUoeEluZGV4LCB5SW5kZXgsIGltYWdlKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiB0aWxlZEltYWdlOworfQorCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51918</attachid>
            <date>2010-03-29 08:56:41 -0700</date>
            <delta_ts>2010-04-06 19:52:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-36072-20100329115749.patch</filename>
            <type>text/plain</type>
            <size>31142</size>
            <attacher name="Jakob Petsovits">jpetsovits</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZTM4YmFhMC4uZmQ4ZjQ5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBAQAorMjAxMC0wMy0yOSAgSmFrb2IgUGV0c292
aXRzICA8anBldHNvdml0c0ByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtPcGVuVkddIEFkZCBzdXBwb3J0IGZvciBkZWNvZGluZyBhbmQg
ZHJhd2luZyBpbWFnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM2MDcyCisKKyAgICAgICAgT3BlblZHIGhhcyBhIG1heGltdW0gaW1hZ2Ugc2l6ZSAo
aG93IGxhcmdlIGlzCisgICAgICAgIHNwZWNpZmljIHRvIHRoZSBPcGVuVkcgaW1wbGVtZW50YXRp
b24pLCBzbyB0aGlzCisgICAgICAgIHJlcXVpcmVzIHVzIHRvIHN0b3JlIHRoZW0gYXMgc2VwYXJh
dGUgaW1hZ2UgdGlsZXMuCisKKyAgICAgICAgSW1hZ2UgZGVjb2RpbmcgYW5kIGluaXRpYWwgZHJh
d2luZyBjb2RlIGJ5CisgICAgICAgIEFkYW0gVHJlYXQgPGF0cmVhdEByaW0uY29tPi4gSW1hZ2Ug
ZGVjb2RlcgorICAgICAgICBkb3duc2FtcGxpbmcgc3VwcG9ydCBieSBZb25nIExpIDx5b2xpQHJp
bS5jb20+LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvSW1hZ2VPcGVuVkcuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpjaGVja0ZvclNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Omlu
aXRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmludmFsaWRh
dGVQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0U291cmNlUmVjdEZvckRv
d25TYW1wbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVudmcvUGFpbnRlck9wZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWludGVyT3BlblZH
OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFpbnRlck9wZW5WRzo6YXNOZXdOYXRp
dmVJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1BhaW50ZXJPcGVu
VkcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVGlsZWRJbWFnZU9wZW5W
Ry5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRJbWFnZU9wZW5WRzo6VGlsZWRJ
bWFnZU9wZW5WRyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEltYWdlT3BlblZHOjpvcGVyYXRv
cj0pOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRJbWFnZU9wZW5WRzo6flRpbGVkSW1hZ2VPcGVu
VkcpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRJbWFnZU9wZW5WRzo6bnVtVGlsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRJbWFnZU9wZW5WRzo6bnVtQ29sdW1ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZEltYWdlT3BlblZHOjpudW1Sb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVkSW1hZ2VPcGVuVkc6OnNldFRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRJbWFnZU9w
ZW5WRzo6dGlsZXNJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRJbWFnZU9wZW5WRzo6
dGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEltYWdlT3BlblZHOjp0aWxlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlZEltYWdlT3BlblZHOjpkZXRhY2hUaWxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlZEltYWdlT3BlblZHOjpkZXN0cm95VGlsZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW52Zy9UaWxlZEltYWdlT3BlblZHLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZWRJbWFnZU9wZW5WRzo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlZEltYWdlT3BlblZHOjptYXhUaWxlU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnZnL1ZHVXRpbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VkdVdGlsczo6Ynl0ZXNG
b3JJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpWR1V0aWxzOjpieXRlc0ZvckltYWdlU2Nhbmxp
bmUpOgorICAgICAgICAoV2ViQ29yZTo6VkdVdGlsczo6aW1hZ2VGb3JtYXRCaXRzUGVyUGl4ZWwp
OgorICAgICAgICAoV2ViQ29yZTo6VkdVdGlsczo6ZW5kaWFuQXdhcmVJbWFnZUZvcm1hdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1ZHVXRpbHMuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9vcGVudmcvSW1hZ2VEZWNvZGVyT3BlblZHLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UpOgor
CiAyMDEwLTAzLTEyICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuaAppbmRleCAyNThmZDBmLi40YjRjNjkyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC02Miw2ICs2MiwxMSBAQCBjbGFzcyBTdHJpbmc7CiAj
aWYgUExBVEZPUk0oQ0cpCiB0eXBlZGVmIENHSW1hZ2VTb3VyY2VSZWYgTmF0aXZlSW1hZ2VTb3Vy
Y2VQdHI7CiB0eXBlZGVmIENHSW1hZ2VSZWYgTmF0aXZlSW1hZ2VQdHI7CisjZWxpZiBQTEFURk9S
TShPUEVOVkcpCitjbGFzcyBJbWFnZURlY29kZXI7CitjbGFzcyBUaWxlZEltYWdlT3BlblZHOwor
dHlwZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlU291cmNlUHRyOwordHlwZWRlZiBUaWxl
ZEltYWdlT3BlblZHKiBOYXRpdmVJbWFnZVB0cjsKICNlbGlmIFBMQVRGT1JNKFFUKQogY2xhc3Mg
SW1hZ2VEZWNvZGVyUXQ7CiB0eXBlZGVmIEltYWdlRGVjb2RlclF0KiBOYXRpdmVJbWFnZVNvdXJj
ZVB0cjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0ltYWdl
T3BlblZHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0ltYWdlT3BlblZH
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzE5MzJhCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvSW1hZ2VPcGVuVkcu
Y3BwCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNp
bmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFpbnRlck9wZW5WRy5oIgorI2luY2x1ZGUg
IlN1cmZhY2VPcGVuVkcuaCIKKyNpbmNsdWRlICJUaWxlZEltYWdlT3BlblZHLmgiCisjaW5jbHVk
ZSAiVkdVdGlscy5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQor
eworICAgIGlmIChjbGVhck1ldGFkYXRhKQorICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNl
OworCisgICAgaWYgKG1fZnJhbWUpIHsKKyAgICAgICAgZGVsZXRlIG1fZnJhbWU7CisgICAgICAg
IG1fZnJhbWUgPSAwOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoVGlsZWRJbWFnZU9wZW5WRyogdGls
ZWRJbWFnZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCisgICAgOiBJbWFnZShvYnNlcnZlcikK
KyAgICAsIG1fc2l6ZSh0aWxlZEltYWdlLT5zaXplKCkpCisgICAgLCBtX2N1cnJlbnRGcmFtZSgw
KQorICAgICwgbV9mcmFtZXMoMSkKKyAgICAsIG1fZnJhbWVUaW1lcigwKQorICAgICwgbV9yZXBl
dGl0aW9uQ291bnQoY0FuaW1hdGlvbk5vbmUpCisgICAgLCBtX3JlcGV0aXRpb25Db3VudFN0YXR1
cyhVbmtub3duKQorICAgICwgbV9yZXBldGl0aW9uc0NvbXBsZXRlKDApCisgICAgLCBtX2Rlc2ly
ZWRGcmFtZVN0YXJ0VGltZSgwKQorICAgICwgbV9pc1NvbGlkQ29sb3IoZmFsc2UpCisgICAgLCBt
X2NoZWNrZWRGb3JTb2xpZENvbG9yKGZhbHNlKQorICAgICwgbV9hbmltYXRpb25GaW5pc2hlZChm
YWxzZSkKKyAgICAsIG1fYWxsRGF0YVJlY2VpdmVkKGZhbHNlKQorICAgICwgbV9oYXZlU2l6ZSh0
cnVlKQorICAgICwgbV9zaXplQXZhaWxhYmxlKHRydWUpCisgICAgLCBtX2hhc1VuaWZvcm1GcmFt
ZVNpemUodHJ1ZSkKKyAgICAsIG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkKKyAgICAsIG1fZnJhbWVD
b3VudCgxKQoreworICAgIGluaXRQbGF0Zm9ybURhdGEoKTsKKworICAgIEFTU0VSVChtX3NpemUu
d2lkdGgoKSA+IDApOworICAgIEFTU0VSVChtX3NpemUuaGVpZ2h0KCkgPiAwKTsKKworICAgIG1f
ZGVjb2RlZFNpemUgPSBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIDQ7CisKKyAg
ICBtX2ZyYW1lc1swXS5tX2ZyYW1lID0gdGlsZWRJbWFnZTsKKyAgICBtX2ZyYW1lc1swXS5tX2hh
c0FscGhhID0gdHJ1ZTsKKyAgICBtX2ZyYW1lc1swXS5tX2lzQ29tcGxldGUgPSB0cnVlOworICAg
IG1fZnJhbWVzWzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKKyAgICBjaGVja0ZvclNvbGlkQ29s
b3IoKTsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKK3sKKyAg
ICBUaWxlZEltYWdlT3BlblZHKiB0aWxlZEltYWdlID0gMDsKKworICAgIGlmIChtX2ZyYW1lQ291
bnQgPT0gMSAmJiBtX3NpemUud2lkdGgoKSA9PSAxICYmIG1fc2l6ZS5oZWlnaHQoKSA9PSAxKQor
ICAgICAgICB0aWxlZEltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKworICAg
IGlmICh0aWxlZEltYWdlKSB7CisgICAgICAgIG1faXNTb2xpZENvbG9yID0gdHJ1ZTsKKyAgICAg
ICAgUkdCQTMyIHBpeGVsOworICAgICAgICB2Z0dldEltYWdlU3ViRGF0YSh0aWxlZEltYWdlLT50
aWxlKDAsIDApLCAmcGl4ZWwsIDAsIFZHX3NBUkdCXzg4ODgsIDAsIDAsIDEsIDEpOworICAgICAg
ICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKKyAgICAgICAgbV9zb2xpZENvbG9yLnNldFJHQihwaXhl
bCk7CisgICAgfSBlbHNlCisgICAgICAgIG1faXNTb2xpZENvbG9yID0gZmFsc2U7CisKKyAgICBt
X2NoZWNrZWRGb3JTb2xpZENvbG9yID0gdHJ1ZTsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6aW5p
dFBsYXRmb3JtRGF0YSgpCit7Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0
Zm9ybURhdGEoKQoreworfQorCisjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElO
RykKK3N0YXRpYyB2b2lkIGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmcoRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU2l6ZSwgY29uc3QgSW50U2l6ZSYgc2NhbGVk
U2l6ZSkKK3sKKyAgICAvLyBXZSBhc3N1bWUgZG93bi1zYW1wbGluZyB6b29tIHJhdGVzIGluIFgg
ZGlyZWN0aW9uIGFuZCBpbiBZIGRpcmVjdGlvbiBhcmUgc2FtZS4KKyAgICBpZiAob3JpZ1NpemUu
d2lkdGgoKSA9PSBzY2FsZWRTaXplLndpZHRoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IEltYWdlIGhhcyBiZWVuIGRvd24gc2FtcGxlZC4KKyAgICBkb3VibGUgcmF0ZSA9IHN0YXRpY19j
YXN0PGRvdWJsZT4oc2NhbGVkU2l6ZS53aWR0aCgpKSAvIG9yaWdTaXplLndpZHRoKCk7CisgICAg
ZG91YmxlIHRlbXAgPSBzcmNSZWN0LnJpZ2h0KCkgKiByYXRlOworICAgIHNyY1JlY3Quc2V0WChz
cmNSZWN0LngoKSAqIHJhdGUpOworICAgIHNyY1JlY3Quc2V0V2lkdGgodGVtcCAtIHNyY1JlY3Qu
eCgpKTsKKyAgICB0ZW1wID0gc3JjUmVjdC5ib3R0b20oKSAqIHJhdGU7CisgICAgc3JjUmVjdC5z
ZXRZKHNyY1JlY3QueSgpICogcmF0ZSk7CisgICAgc3JjUmVjdC5zZXRIZWlnaHQodGVtcCAtIHNy
Y1JlY3QueSgpKTsKK30KKyNlbmRpZgorCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7
CisgICAgaWYgKGRzdC5pc0VtcHR5KCkgfHwgc3JjLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXJ0QW5pbWF0
aW9uKCk7CisKKyAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKKyAgICAgICAgZmls
bFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRzdCwgc29saWRDb2xvcigpLCBzdHlsZUNvbG9yU3Bh
Y2UsIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnRleHQtPnNhdmUoKTsK
KworICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9uLgorICAgIGlmIChvcCA9PSBD
b21wb3NpdGVTb3VyY2VPdmVyICYmICFmcmFtZUhhc0FscGhhQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSkpCisgICAgICAgIGNvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5
KTsKKyAgICBlbHNlCisgICAgICAgIGNvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7
CisKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdExvY2FsKHNyYyk7CisjaWYgRU5BQkxFKElNQUdFX0RF
Q09ERVJfRE9XTl9TQU1QTElORykKKyAgICBhZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5n
KHNyY1JlY3RMb2NhbCwgc2l6ZSgpLCBpbWFnZS0+c2l6ZSgpKTsKKyNlbmRpZgorCisgICAgY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmFjdGl2ZVBhaW50ZXIoKS0+ZHJhd0ltYWdlKGltYWdl
LCBkc3QsIHNyY1JlY3RMb2NhbCk7CisgICAgY29udGV4dC0+cmVzdG9yZSgpOworCisgICAgaWYg
KGltYWdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMp
OworfQorCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtYXRpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
CisgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxv
YXRSZWN0JiBkc3QpCit7CisgICAgaWYgKGRzdC5pc0VtcHR5KCkgfHwgc3JjLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UgPSBuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHN0YXJ0QW5pbWF0aW9uKCk7CisKKyAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkp
IHsKKyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRzdCwgc29saWRDb2xvcigp
LCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG5v
dEltcGxlbWVudGVkKCk7CisKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBpbWFn
ZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZShjaGFyIGNvbnN0KiBuYW1lKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1BhaW50ZXJPcGVuVkcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVudmcvUGFpbnRlck9wZW5WRy5jcHAKaW5kZXggNTg0MmFmZC4uN2Q2MGNh
NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvUGFpbnRlck9w
ZW5WRy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvUGFpbnRlck9w
ZW5WRy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtUGF0aE9wZW5WRy5oIgogI2luY2x1ZGUgIlN1cmZhY2VPcGVuVkcu
aCIKKyNpbmNsdWRlICJUaWxlZEltYWdlT3BlblZHLmgiCiAjaW5jbHVkZSAiVkdVdGlscy5oIgog
CiAjaWYgUExBVEZPUk0oRUdMKQpAQCAtMTA4NSw2ICsxMDg2LDQ5IEBAIHZvaWQgUGFpbnRlck9w
ZW5WRzo6ZHJhd1BvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9p
bnRzLCBWR2JpCiAgICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7CiB9CiAKK3ZvaWQgUGFpbnRlck9w
ZW5WRzo6ZHJhd0ltYWdlKFRpbGVkSW1hZ2VPcGVuVkcqIHRpbGVkSW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYykKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSk7
CisgICAgbV9zdXJmYWNlLT5tYWtlQ3VycmVudCgpOworCisgICAgLy8gSWYgYnVmZmVycyBjYW4g
YmUgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gT3BlblZHIGltYWdlIHNpemVzLAorICAgIC8vIHdl
IHNwbGl0IHRoZW0gaW50byB0aWxlcy4KKyAgICBJbnRSZWN0IGRyYXduVGlsZXMgPSB0aWxlZElt
YWdlLT50aWxlc0luUmVjdChzcmMpOworICAgIEFmZmluZVRyYW5zZm9ybSBzcmNUb0RzdFRyYW5z
Zm9ybWF0aW9uID0gbWFrZU1hcEJldHdlZW5SZWN0cygKKyAgICAgICAgRmxvYXRSZWN0KEZsb2F0
UG9pbnQoMC4wLCAwLjApLCBzcmMuc2l6ZSgpKSwgZHN0KTsKKyAgICBzcmNUb0RzdFRyYW5zZm9y
bWF0aW9uLnRyYW5zbGF0ZSgtc3JjLngoKSwgLXNyYy55KCkpOworCisgICAgZm9yIChpbnQgeUlu
ZGV4ID0gZHJhd25UaWxlcy55KCk7IHlJbmRleCA8IGRyYXduVGlsZXMuYm90dG9tKCk7ICsreUlu
ZGV4KSB7CisgICAgICAgIGZvciAoaW50IHhJbmRleCA9IGRyYXduVGlsZXMueCgpOyB4SW5kZXgg
PCBkcmF3blRpbGVzLnJpZ2h0KCk7ICsreEluZGV4KSB7CisgICAgICAgICAgICAvLyBUaGUgc3Jj
VGlsZSByZWN0YW5nbGUgaXMgYW4gYWxpZ25lZCB0aWxlIGNyb3BwZWQgYnkgdGhlIHNyYyByZWN0
YW5nbGUuCisgICAgICAgICAgICBGbG9hdFJlY3QgdGlsZSh0aWxlZEltYWdlLT50aWxlUmVjdCh4
SW5kZXgsIHlJbmRleCkpOworICAgICAgICAgICAgRmxvYXRSZWN0IHNyY1RpbGUgPSBpbnRlcnNl
Y3Rpb24oc3JjLCB0aWxlKTsKKworICAgICAgICAgICAgc2F2ZSgpOworCisgICAgICAgICAgICAv
LyBJZiB0aGUgaW1hZ2UgaXMgZHJhd24gaW4gZnVsbCwgYWxsIHdlIG5lZWQgaXMgdGhlIHByb3Bl
ciB0cmFuc2Zvcm1hdGlvbgorICAgICAgICAgICAgLy8gaW4gb3JkZXIgdG8gZ2V0IGl0IGRyYXdu
IGF0IHRoZSByaWdodCBzcG90IG9uIHRoZSBzdXJmYWNlLgorICAgICAgICAgICAgY29uY2F0VHJh
bnNmb3JtYXRpb24oQWZmaW5lVHJhbnNmb3JtKHNyY1RvRHN0VHJhbnNmb3JtYXRpb24pLnRyYW5z
bGF0ZSh0aWxlLngoKSwgdGlsZS55KCkpKTsKKworICAgICAgICAgICAgLy8gSWYgb25seSBhIHBh
cnQgb2YgdGhlIHRpbGUgaXMgZHJhd24sIHdlIGFsc28gbmVlZCB0byBjbGlwIHRoZSBzdXJmYWNl
LgorICAgICAgICAgICAgaWYgKHNyY1RpbGUgIT0gdGlsZSkgeworICAgICAgICAgICAgICAgIC8v
IFB1dCBib3VuZGFyaWVzIHJlbGF0aXZlIHRvIHRpbGUgb3JpZ2luLCBhcyB3ZSBhbHJlYWR5Cisg
ICAgICAgICAgICAgICAgLy8gdHJhbnNsYXRlZCB0byAoeCwgeSkgd2l0aCB0aGUgdHJhbnNmb3Jt
YXRpb24gbWF0cml4LgorICAgICAgICAgICAgICAgIHNyY1RpbGUubW92ZSgtdGlsZS54KCksIC10
aWxlLnkoKSk7CisgICAgICAgICAgICAgICAgaW50ZXJzZWN0Q2xpcFJlY3Qoc3JjVGlsZSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFZHSW1hZ2UgaW1hZ2UgPSB0aWxlZEltYWdlLT50
aWxlKHhJbmRleCwgeUluZGV4KTsKKyAgICAgICAgICAgIGlmIChpbWFnZSAhPSBWR19JTlZBTElE
X0hBTkRMRSkgeworICAgICAgICAgICAgICAgIHZnRHJhd0ltYWdlKGltYWdlKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmVzdG9yZSgpOworICAgICAgICB9CisgICAgfQorfQorCiAjaWZkZWYgT1BFTlZHX1ZFUlNJ
T05fMV8xCiB2b2lkIFBhaW50ZXJPcGVuVkc6OmRyYXdUZXh0KFZHRm9udCB2Z0ZvbnQsIFZlY3Rv
cjxWR3VpbnQ+JiBjaGFyYWN0ZXJzLCBWR2Zsb2F0KiBhZGp1c3RtZW50c1gsIFZHZmxvYXQqIGFk
anVzdG1lbnRzWSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7CkBAIC0xMTM3LDYgKzExODEs
NDggQEAgdm9pZCBQYWludGVyT3BlblZHOjpkcmF3VGV4dChWR0ZvbnQgdmdGb250LCBWZWN0b3I8
Vkd1aW50PiYgY2hhcmFjdGVycywgVkdmbG9hdCoKIH0KICNlbmRpZgogCitUaWxlZEltYWdlT3Bl
blZHKiBQYWludGVyT3BlblZHOjphc05ld05hdGl2ZUltYWdlKGNvbnN0IEludFJlY3QmIHNyYywg
VkdJbWFnZUZvcm1hdCBmb3JtYXQpCit7CisgICAgQVNTRVJUKG1fc3RhdGUpOworICAgIG1fc3Vy
ZmFjZS0+c2hhcmVkU3VyZmFjZSgpLT5tYWtlQ3VycmVudCgpOworCisgICAgY29uc3QgSW50U2l6
ZSB2Z01heEltYWdlU2l6ZSh2Z0dldGkoVkdfTUFYX0lNQUdFX1dJRFRIKSwgdmdHZXRpKFZHX01B
WF9JTUFHRV9IRUlHSFQpKTsKKyAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKKworICAgIGNvbnN0
IEludFJlY3QgcmVjdCA9IGludGVyc2VjdGlvbihzcmMsIEludFJlY3QoMCwgMCwgbV9zdXJmYWNl
LT53aWR0aCgpLCBtX3N1cmZhY2UtPmhlaWdodCgpKSk7CisgICAgVGlsZWRJbWFnZU9wZW5WRyog
dGlsZWRJbWFnZSA9IG5ldyBUaWxlZEltYWdlT3BlblZHKHJlY3Quc2l6ZSgpLCB2Z01heEltYWdl
U2l6ZSk7CisKKyAgICBjb25zdCBpbnQgbnVtQ29sdW1ucyA9IHRpbGVkSW1hZ2UtPm51bUNvbHVt
bnMoKTsKKyAgICBjb25zdCBpbnQgbnVtUm93cyA9IHRpbGVkSW1hZ2UtPm51bVJvd3MoKTsKKwor
ICAgIC8vIENyZWF0ZSB0aGUgaW1hZ2VzIGFzIHJlc291cmNlcyBvZiB0aGUgc2hhcmVkIHN1cmZh
Y2UvY29udGV4dC4KKyAgICBmb3IgKGludCB5SW5kZXggPSAwOyB5SW5kZXggPCBudW1Sb3dzOyAr
K3lJbmRleCkgeworICAgICAgICBmb3IgKGludCB4SW5kZXggPSAwOyB4SW5kZXggPCBudW1Db2x1
bW5zOyArK3hJbmRleCkgeworICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHRpbGVkSW1h
Z2UtPnRpbGVSZWN0KHhJbmRleCwgeUluZGV4KTsKKyAgICAgICAgICAgIFZHSW1hZ2UgaW1hZ2Ug
PSB2Z0NyZWF0ZUltYWdlKGZvcm1hdCwgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0
KCksIFZHX0lNQUdFX1FVQUxJVFlfRkFTVEVSKTsKKyAgICAgICAgICAgIEFTU0VSVF9WR19OT19F
UlJPUigpOworCisgICAgICAgICAgICB0aWxlZEltYWdlLT5zZXRUaWxlKHhJbmRleCwgeUluZGV4
LCBpbWFnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGaWxsIHRoZSBpbWFnZSBjb250
ZW50cyB3aXRoIG91ciBvd24gc3VyZmFjZS9jb250ZXh0IGJlaW5nIGN1cnJlbnQuCisgICAgbV9z
dXJmYWNlLT5tYWtlQ3VycmVudCgpOworCisgICAgZm9yIChpbnQgeUluZGV4ID0gMDsgeUluZGV4
IDwgbnVtUm93czsgKyt5SW5kZXgpIHsKKyAgICAgICAgZm9yIChpbnQgeEluZGV4ID0gMDsgeElu
ZGV4IDwgbnVtQ29sdW1uczsgKyt4SW5kZXgpIHsKKyAgICAgICAgICAgIEludFJlY3QgdGlsZVJl
Y3QgPSB0aWxlZEltYWdlLT50aWxlUmVjdCh4SW5kZXgsIHlJbmRleCk7CisKKyAgICAgICAgICAg
IHZnR2V0UGl4ZWxzKHRpbGVkSW1hZ2UtPnRpbGUoeEluZGV4LCB5SW5kZXgpLCAwLCAwLAorICAg
ICAgICAgICAgICAgIHJlY3QueCgpICsgdGlsZVJlY3QueCgpLCByZWN0LnkoKSArIHRpbGVSZWN0
LnkoKSwKKyAgICAgICAgICAgICAgICB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQo
KSk7CisgICAgICAgICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB0aWxlZEltYWdlOworfQorCiB2b2lkIFBhaW50ZXJPcGVuVkc6OnNhdmUo
UGFpbnRlck9wZW5WRzo6U2F2ZU1vZGUgc2F2ZU1vZGUpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvUGFpbnRlck9w
ZW5WRy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvUGFpbnRlck9wZW5WRy5o
CmluZGV4IDMwY2RmMzEuLmU0YzY2ODggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnZnL1BhaW50ZXJPcGVuVkcuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW52Zy9QYWludGVyT3BlblZHLmgKQEAgLTM3LDYgKzM3LDcgQEAgY2xhc3MgSW50UmVj
dDsKIGNsYXNzIEludFNpemU7CiBjbGFzcyBQYXRoOwogY2xhc3MgU3VyZmFjZU9wZW5WRzsKK2Ns
YXNzIFRpbGVkSW1hZ2VPcGVuVkc7CiAKIHN0cnVjdCBQbGF0Zm9ybVBhaW50ZXJTdGF0ZTsKIApA
QCAtMTAxLDYgKzEwMiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdBcmMoY29uc3QgSW50UmVj
dCYgZWxsaXBzZUJvdW5kcywgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4sIFZHYml0Zmll
bGQgcGFpbnRNb2RlcyA9IChWR19TVFJPS0VfUEFUSCB8IFZHX0ZJTExfUEFUSCkpOwogICAgIHZv
aWQgZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgYm91bmRzLCBWR2JpdGZpZWxkIHBhaW50TW9k
ZXMgPSAoVkdfU1RST0tFX1BBVEggfCBWR19GSUxMX1BBVEgpKTsKICAgICB2b2lkIGRyYXdQb2x5
Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgVkdiaXRmaWVs
ZCBwYWludE1vZGVzID0gKFZHX1NUUk9LRV9QQVRIIHwgVkdfRklMTF9QQVRIKSk7CisgICAgdm9p
ZCBkcmF3SW1hZ2UoVGlsZWRJbWFnZU9wZW5WRyosIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyYyk7CiAjaWZkZWYgT1BFTlZHX1ZFUlNJT05fMV8xCiAgICAgdm9pZCBk
cmF3VGV4dChWR0ZvbnQsIFZlY3RvcjxWR3VpbnQ+JiBjaGFyYWN0ZXJzLCBWR2Zsb2F0KiBhZGp1
c3RtZW50c1gsIFZHZmxvYXQqIGFkanVzdG1lbnRzWSwgY29uc3QgRmxvYXRQb2ludCYpOwogI2Vu
ZGlmCkBAIC0xMTcsNiArMTE5LDggQEAgcHVibGljOgogICAgIHZvaWQgaW50ZXJzZWN0Q2xpcFJl
Y3QoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgUGFp
bnRlck9wZW5WRzo6Q2xpcE9wZXJhdGlvbiwgV2luZFJ1bGUgY2xpcFJ1bGUgPSBSVUxFX05PTlpF
Uk8pOwogCisgICAgVGlsZWRJbWFnZU9wZW5WRyogYXNOZXdOYXRpdmVJbWFnZShjb25zdCBJbnRS
ZWN0JiBzcmMsIFZHSW1hZ2VGb3JtYXQpOworCiAgICAgdm9pZCBzYXZlKFBhaW50ZXJPcGVuVkc6
OlNhdmVNb2RlIHNhdmVNb2RlID0gQ3JlYXRlTmV3U3RhdGUpOwogICAgIHZvaWQgcmVzdG9yZSgp
OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9UaWxlZElt
YWdlT3BlblZHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1RpbGVkSW1h
Z2VPcGVuVkcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZDk0YzkK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9UaWxl
ZEltYWdlT3BlblZHLmNwcApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGlsZWRJbWFnZU9wZW5WRy5oIgorCisj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlZH
VXRpbHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUaWxlZEltYWdlT3BlblZHOjpUaWxl
ZEltYWdlT3BlblZHKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIHRpbGVTaXpl
KQorICAgIDogU2hhcmVkUmVzb3VyY2VPcGVuVkcoKQorICAgICwgbV9zaXplKHNpemUpCisgICAg
LCBtX21heFRpbGVTaXplKHRpbGVTaXplKQorICAgICwgbV9udW1Db2x1bW5zKChtX3NpemUud2lk
dGgoKSAtIDEpIC8gbV9tYXhUaWxlU2l6ZS53aWR0aCgpICsgMSkKKyAgICAsIG1fdGlsZXMoKCht
X3NpemUuaGVpZ2h0KCkgLSAxKSAvIG1fbWF4VGlsZVNpemUuaGVpZ2h0KCkgKyAxKSAqIG1fbnVt
Q29sdW1ucywgVkdfSU5WQUxJRF9IQU5ETEUpCit7Cit9CisKK1RpbGVkSW1hZ2VPcGVuVkc6OlRp
bGVkSW1hZ2VPcGVuVkcoY29uc3QgVGlsZWRJbWFnZU9wZW5WRyYgb3RoZXIpCisgICAgOiBTaGFy
ZWRSZXNvdXJjZU9wZW5WRygpCisgICAgLCBtX3NpemUob3RoZXIubV9zaXplKQorICAgICwgbV9t
YXhUaWxlU2l6ZShvdGhlci5tX21heFRpbGVTaXplKQorICAgICwgbV9udW1Db2x1bW5zKG90aGVy
Lm1fbnVtQ29sdW1ucykKKyAgICAsIG1fdGlsZXMob3RoZXIubV90aWxlcykKK3sKKyAgICBkZXRh
Y2hUaWxlcygpOworfQorCitUaWxlZEltYWdlT3BlblZHJiBUaWxlZEltYWdlT3BlblZHOjpvcGVy
YXRvcj0oY29uc3QgVGlsZWRJbWFnZU9wZW5WRyYgb3RoZXIpCit7CisgICAgaWYgKCZvdGhlciAh
PSB0aGlzKSB7CisgICAgICAgIGRlc3Ryb3lUaWxlcygpOworCisgICAgICAgIG1fc2l6ZSA9IG90
aGVyLm1fc2l6ZTsKKyAgICAgICAgbV9tYXhUaWxlU2l6ZSA9IG90aGVyLm1fbWF4VGlsZVNpemU7
CisgICAgICAgIG1fbnVtQ29sdW1ucyA9IG90aGVyLm1fbnVtQ29sdW1uczsKKyAgICAgICAgbV90
aWxlcyA9IG90aGVyLm1fdGlsZXM7CisKKyAgICAgICAgZGV0YWNoVGlsZXMoKTsKKyAgICB9Cisg
ICAgcmV0dXJuICp0aGlzOworfQorCitUaWxlZEltYWdlT3BlblZHOjp+VGlsZWRJbWFnZU9wZW5W
RygpCit7CisgICAgZGVzdHJveVRpbGVzKCk7Cit9CisKK2ludCBUaWxlZEltYWdlT3BlblZHOjpu
dW1UaWxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZXMuc2l6ZSgpOworfQorCitpbnQg
VGlsZWRJbWFnZU9wZW5WRzo6bnVtQ29sdW1ucygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbnVt
Q29sdW1uczsKK30KKworaW50IFRpbGVkSW1hZ2VPcGVuVkc6Om51bVJvd3MoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3RpbGVzLnNpemUoKSAvIG1fbnVtQ29sdW1uczsKK30KKwordm9pZCBUaWxl
ZEltYWdlT3BlblZHOjpzZXRUaWxlKGludCB4SW5kZXgsIGludCB5SW5kZXgsIFZHSW1hZ2UgaW1h
Z2UpCit7CisgICAgQVNTRVJUKHhJbmRleCA8IG1fbnVtQ29sdW1ucyk7CisgICAgaW50IGkgPSAo
eUluZGV4ICogbV9udW1Db2x1bW5zKSArIHhJbmRleDsKKyAgICBBU1NFUlQoaSA8IG1fdGlsZXMu
c2l6ZSgpKTsKKyAgICBtX3RpbGVzLmF0KGkpID0gaW1hZ2U7Cit9CisKK0ludFJlY3QgVGlsZWRJ
bWFnZU9wZW5WRzo6dGlsZXNJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAorewor
ICAgIGludCBsZWZ0SW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KHJlY3QueCgpKSAvIG1fbWF4VGls
ZVNpemUud2lkdGgoKTsKKyAgICBpbnQgdG9wSW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KHJlY3Qu
eSgpKSAvIG1fbWF4VGlsZVNpemUuaGVpZ2h0KCk7CisKKyAgICBpZiAobGVmdEluZGV4IDwgMCkK
KyAgICAgICAgbGVmdEluZGV4ID0gMDsKKyAgICBpZiAodG9wSW5kZXggPCAwKQorICAgICAgICB0
b3BJbmRleCA9IDA7CisKKyAgICAvLyBSb3VuZCByZWN0IGVkZ2VzIHVwIHRvIGdldCB0aGUgb3V0
ZXIgcGl4ZWwgYm91bmRhcmllcy4KKyAgICBpbnQgcmlnaHRJbmRleCA9IChzdGF0aWNfY2FzdDxp
bnQ+KGNlaWwocmVjdC5yaWdodCgpKSkgLSAxKSAvIG1fbWF4VGlsZVNpemUud2lkdGgoKTsKKyAg
ICBpbnQgYm90dG9tSW5kZXggPSAoc3RhdGljX2Nhc3Q8aW50PihjZWlsKHJlY3QuYm90dG9tKCkp
KSAtIDEpIC8gbV9tYXhUaWxlU2l6ZS5oZWlnaHQoKTsKKyAgICBpbnQgY29sdW1ucyA9IChyaWdo
dEluZGV4IC0gbGVmdEluZGV4KSArIDE7CisgICAgaW50IHJvd3MgPSAoYm90dG9tSW5kZXggLSB0
b3BJbmRleCkgKyAxOworCisgICAgcmV0dXJuIEludFJlY3QobGVmdEluZGV4LCB0b3BJbmRleCwK
KyAgICAgICAgKGNvbHVtbnMgPD0gbV9udW1Db2x1bW5zKSA/IGNvbHVtbnMgOiBtX251bUNvbHVt
bnMsCisgICAgICAgIChyb3dzIDw9IChtX3RpbGVzLnNpemUoKSAvIG1fbnVtQ29sdW1ucykpID8g
cm93cyA6IChtX3RpbGVzLnNpemUoKSAvIG1fbnVtQ29sdW1ucykpOworfQorCitWR0ltYWdlIFRp
bGVkSW1hZ2VPcGVuVkc6OnRpbGUoaW50IHhJbmRleCwgaW50IHlJbmRleCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoeEluZGV4IDwgbV9udW1Db2x1bW5zKTsKKyAgICBpbnQgaSA9ICh5SW5kZXggKiBt
X251bUNvbHVtbnMpICsgeEluZGV4OworICAgIEFTU0VSVChpIDwgbV90aWxlcy5zaXplKCkpOwor
ICAgIHJldHVybiBtX3RpbGVzLmF0KGkpOworfQorCitJbnRSZWN0IFRpbGVkSW1hZ2VPcGVuVkc6
OnRpbGVSZWN0KGludCB4SW5kZXgsIGludCB5SW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHhJ
bmRleCA8IG1fbnVtQ29sdW1ucyk7CisgICAgQVNTRVJUKCh5SW5kZXggKiBtX251bUNvbHVtbnMp
ICsgeEluZGV4IDwgbV90aWxlcy5zaXplKCkpOworCisgICAgaW50IHggPSB4SW5kZXggKiBtX21h
eFRpbGVTaXplLndpZHRoKCk7CisgICAgaW50IHkgPSB5SW5kZXggKiBtX21heFRpbGVTaXplLmhl
aWdodCgpOworCisgICAgcmV0dXJuIEludFJlY3QoeCwgeSwKKyAgICAgICAgKChtX21heFRpbGVT
aXplLndpZHRoKCkgPCBtX3NpemUud2lkdGgoKSAtIHgpID8gbV9tYXhUaWxlU2l6ZS53aWR0aCgp
IDogKG1fc2l6ZS53aWR0aCgpIC0geCkpLAorICAgICAgICAoKG1fbWF4VGlsZVNpemUuaGVpZ2h0
KCkgPCBtX3NpemUuaGVpZ2h0KCkgLSB5KSA/IG1fbWF4VGlsZVNpemUuaGVpZ2h0KCkgOiAobV9z
aXplLmhlaWdodCgpIC0geSkpKTsKK30KKwordm9pZCBUaWxlZEltYWdlT3BlblZHOjpkZXRhY2hU
aWxlcygpCit7CisgICAgbWFrZVNoYXJlZENvbnRleHRDdXJyZW50KCk7IC8vIGJlY2F1c2Ugd2Ug
Y3JlYXRlIG5ldyBpbWFnZXMKKworICAgIGludCBudW1UaWxlcyA9IG1fdGlsZXMuc2l6ZSgpOwor
ICAgIFZHSW1hZ2UgbmV3VGlsZSwgb3JpZ2luYWxUaWxlOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBudW1UaWxlczsgKytpKSB7CisgICAgICAgIG9yaWdpbmFsVGlsZSA9IG1fdGlsZXMuYXQo
aSk7CisKKyAgICAgICAgaWYgKG9yaWdpbmFsVGlsZSA9PSBWR19JTlZBTElEX0hBTkRMRSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFZHSW1hZ2VGb3JtYXQgZm9ybWF0ID0gKFZH
SW1hZ2VGb3JtYXQpIHZnR2V0UGFyYW1ldGVyaShvcmlnaW5hbFRpbGUsIFZHX0lNQUdFX0ZPUk1B
VCk7CisgICAgICAgIFZHaW50IHdpZHRoID0gdmdHZXRQYXJhbWV0ZXJpKG9yaWdpbmFsVGlsZSwg
VkdfSU1BR0VfV0lEVEgpOworICAgICAgICBWR2ludCBoZWlnaHQgPSB2Z0dldFBhcmFtZXRlcmko
b3JpZ2luYWxUaWxlLCBWR19JTUFHRV9IRUlHSFQpOworICAgICAgICBBU1NFUlRfVkdfTk9fRVJS
T1IoKTsKKworICAgICAgICBuZXdUaWxlID0gdmdDcmVhdGVJbWFnZShmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIFZHX0lNQUdFX1FVQUxJVFlfRkFTVEVSKTsKKyAgICAgICAgQVNTRVJUX1ZHX05PX0VS
Uk9SKCk7CisKKyAgICAgICAgdmdDb3B5SW1hZ2UobmV3VGlsZSwgMCwgMCwgb3JpZ2luYWxUaWxl
LCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBWR19GQUxTRSAvKiBkaXRoZXIgKi8pOworICAgICAgICBB
U1NFUlRfVkdfTk9fRVJST1IoKTsKKworICAgICAgICBtX3RpbGVzLmF0KGkpID0gbmV3VGlsZTsK
KyAgICB9Cit9CisKK3ZvaWQgVGlsZWRJbWFnZU9wZW5WRzo6ZGVzdHJveVRpbGVzKCkKK3sKKyAg
ICBtYWtlQ29tcGF0aWJsZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBWZWN0b3I8VkdJbWFnZT46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOworICAgIFZlY3RvcjxWR0ltYWdl
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKKworICAgIGZvciAoOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCppdCAhPSBWR19JTlZBTElEX0hBTkRMRSkKKyAg
ICAgICAgICAgIHZnRGVzdHJveUltYWdlKCppdCk7CisgICAgfQorICAgIEFTU0VSVF9WR19OT19F
UlJPUigpOworCisgICAgbV90aWxlcy5maWxsKFZHX0lOVkFMSURfSEFORExFKTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVGlsZWRJbWFnZU9w
ZW5WRy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVGlsZWRJbWFnZU9wZW5W
Ry5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZjU1ZDIKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9UaWxlZEltYWdlT3Bl
blZHLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRp
bGVkSW1hZ2VPcGVuVkdfaAorI2RlZmluZSBUaWxlZEltYWdlT3BlblZHX2gKKworI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2hhcmVkUmVzb3Vy
Y2VPcGVuVkcuaCIKKworI2luY2x1ZGUgPG9wZW52Zy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFJlY3Q7CisKK2NsYXNzIFRp
bGVkSW1hZ2VPcGVuVkcgOiBwdWJsaWMgU2hhcmVkUmVzb3VyY2VPcGVuVkcgeworcHVibGljOgor
ICAgIFRpbGVkSW1hZ2VPcGVuVkcoY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYg
dGlsZVNpemUpOworICAgIFRpbGVkSW1hZ2VPcGVuVkcoY29uc3QgVGlsZWRJbWFnZU9wZW5WRyYp
OworICAgIH5UaWxlZEltYWdlT3BlblZHKCk7CisKKyAgICBUaWxlZEltYWdlT3BlblZHJiBvcGVy
YXRvcj0oY29uc3QgVGlsZWRJbWFnZU9wZW5WRyYpOworCisgICAgY29uc3QgSW50U2l6ZSYgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIGNvbnN0IEludFNpemUmIG1heFRpbGVT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXhUaWxlU2l6ZTsgfQorCisgICAgaW50IG51bVRpbGVz
KCkgY29uc3Q7CisgICAgaW50IG51bUNvbHVtbnMoKSBjb25zdDsKKyAgICBpbnQgbnVtUm93cygp
IGNvbnN0OworCisgICAgSW50UmVjdCB0aWxlc0luUmVjdChjb25zdCBGbG9hdFJlY3QmKSBjb25z
dDsKKworICAgIHZvaWQgc2V0VGlsZShpbnQgeEluZGV4LCBpbnQgeUluZGV4LCBWR0ltYWdlKTsK
KyAgICBWR0ltYWdlIHRpbGUoaW50IHhJbmRleCwgaW50IHlJbmRleCkgY29uc3Q7CisgICAgSW50
UmVjdCB0aWxlUmVjdChpbnQgeEluZGV4LCBpbnQgeUluZGV4KSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICB2b2lkIGRldGFjaFRpbGVzKCk7CisgICAgdm9pZCBkZXN0cm95VGlsZXMoKTsKKworICAg
IEludFNpemUgbV9zaXplOworICAgIEludFNpemUgbV9tYXhUaWxlU2l6ZTsKKworICAgIGludCBt
X251bUNvbHVtbnM7CisKKyAgICBWZWN0b3I8VkdJbWFnZT4gbV90aWxlczsKK307CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9WR1V0
aWxzLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1ZHVXRpbHMuY3BwCmlu
ZGV4IGNlOWJjZDIuLjI1NTlhYWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnZnL1ZHVXRpbHMuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bnZnL1ZHVXRpbHMuY3BwCkBAIC0xMjAsNCArMTIwLDExNiBAQCBGbG9hdFJlY3Q6Om9wZXJhdG9y
IFZHUmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIFZHUmVjdCgqdGhpcyk7CiB9CiAKK2ludCBWR1V0
aWxzOjpieXRlc0ZvckltYWdlKFZHSW1hZ2VGb3JtYXQgZm9ybWF0LCBWR2ludCB3aWR0aCwgVkdp
bnQgaGVpZ2h0KQoreworICAgIHJldHVybiB3aWR0aCAqIGhlaWdodCAqIGltYWdlRm9ybWF0Qml0
c1BlclBpeGVsKGZvcm1hdCkgLyA4OworfQorCitpbnQgVkdVdGlsczo6Ynl0ZXNGb3JJbWFnZVNj
YW5saW5lKFZHSW1hZ2VGb3JtYXQgZm9ybWF0LCBWR2ludCB3aWR0aCkKK3sKKyAgICBpbnQgYml0
cyA9IHdpZHRoICogaW1hZ2VGb3JtYXRCaXRzUGVyUGl4ZWwoZm9ybWF0KTsKKyAgICBpZiAoYml0
cyAlIDggPiAxKSAvLyBJZiB1bmFsaWduZWQsIHJvdW5kIHVwIHRvIHRoZSBuZXh0IGJ5dGUuCisg
ICAgICAgIGJpdHMgKz0gOCAtIChiaXRzICUgOCk7CisKKyAgICByZXR1cm4gYml0cyAvIDg7Cit9
CisKK2ludCBWR1V0aWxzOjppbWFnZUZvcm1hdEJpdHNQZXJQaXhlbChWR0ltYWdlRm9ybWF0IGZv
cm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgVkdfc1JHQlhfODg4ODoK
KyAgICBjYXNlIFZHX3NSR0JBXzg4ODg6CisgICAgY2FzZSBWR19zUkdCQV84ODg4X1BSRToKKyAg
ICBjYXNlIFZHX2xSR0JYXzg4ODg6CisgICAgY2FzZSBWR19sUkdCQV84ODg4OgorICAgIGNhc2Ug
VkdfbFJHQkFfODg4OF9QUkU6CisgICAgY2FzZSBWR19zWFJHQl84ODg4OgorICAgIGNhc2UgVkdf
c0FSR0JfODg4ODoKKyAgICBjYXNlIFZHX3NBUkdCXzg4ODhfUFJFOgorICAgIGNhc2UgVkdfbFhS
R0JfODg4ODoKKyAgICBjYXNlIFZHX2xBUkdCXzg4ODg6CisgICAgY2FzZSBWR19sQVJHQl84ODg4
X1BSRToKKyAgICBjYXNlIFZHX3NCR1JYXzg4ODg6CisgICAgY2FzZSBWR19zQkdSQV84ODg4Ogor
ICAgIGNhc2UgVkdfc0JHUkFfODg4OF9QUkU6CisgICAgY2FzZSBWR19sQkdSWF84ODg4OgorICAg
IGNhc2UgVkdfbEJHUkFfODg4ODoKKyAgICBjYXNlIFZHX2xCR1JBXzg4ODhfUFJFOgorICAgIGNh
c2UgVkdfc1hCR1JfODg4ODoKKyAgICBjYXNlIFZHX3NBQkdSXzg4ODg6CisgICAgY2FzZSBWR19z
QUJHUl84ODg4X1BSRToKKyAgICBjYXNlIFZHX2xYQkdSXzg4ODg6CisgICAgY2FzZSBWR19sQUJH
Ul84ODg4OgorICAgIGNhc2UgVkdfbEFCR1JfODg4OF9QUkU6CisgICAgICAgIHJldHVybiAzMjsK
KworICAgIGNhc2UgVkdfc1JHQl81NjU6CisgICAgY2FzZSBWR19zUkdCQV81NTUxOgorICAgIGNh
c2UgVkdfc1JHQkFfNDQ0NDoKKyAgICBjYXNlIFZHX3NBUkdCXzE1NTU6CisgICAgY2FzZSBWR19z
QVJHQl80NDQ0OgorICAgIGNhc2UgVkdfc0JHUl81NjU6CisgICAgY2FzZSBWR19zQkdSQV81NTUx
OgorICAgIGNhc2UgVkdfc0JHUkFfNDQ0NDoKKyAgICBjYXNlIFZHX3NBQkdSXzE1NTU6CisgICAg
Y2FzZSBWR19zQUJHUl80NDQ0OgorICAgICAgICByZXR1cm4gMTY7CisKKyAgICBjYXNlIFZHX3NM
Xzg6CisgICAgY2FzZSBWR19sTF84OgorICAgIGNhc2UgVkdfQV84OgorICAgICAgICByZXR1cm4g
ODsKKworICAgIGNhc2UgVkdfQV80OgorICAgICAgICByZXR1cm4gNDsKKworICAgIGNhc2UgVkdf
QldfMToKKyAgICBjYXNlIFZHX0FfMToKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBkZWZhdWx0
OiAvLyBXaWxsIG9ubHkgaGFwcGVuIHdoZW4gT3BlblZHIGV4dGVuZHMgdGhlIGVudW0gYW5kIHdl
IGRvbid0LgorICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
Cit9CisKKyNpZm5kZWYgV1RGX1BMQVRGT1JNX0JJR19FTkRJQU4KK1ZHSW1hZ2VGb3JtYXQgVkdV
dGlsczo6ZW5kaWFuQXdhcmVJbWFnZUZvcm1hdChWR0ltYWdlRm9ybWF0IGJpZ0VuZGlhbkZvcm1h
dCkKK3sKKyAgICBzd2l0Y2ggKGJpZ0VuZGlhbkZvcm1hdCkgeworICAgIGNhc2UgVkdfc1JHQlhf
ODg4ODogICAgIHJldHVybiBWR19zWEJHUl84ODg4OworICAgIGNhc2UgVkdfc1JHQkFfODg4ODog
ICAgIHJldHVybiBWR19zQUJHUl84ODg4OworICAgIGNhc2UgVkdfc1JHQkFfODg4OF9QUkU6IHJl
dHVybiBWR19zQUJHUl84ODg4X1BSRTsKKyAgICBjYXNlIFZHX2xSR0JYXzg4ODg6ICAgICByZXR1
cm4gVkdfbFhCR1JfODg4ODsKKyAgICBjYXNlIFZHX2xSR0JBXzg4ODg6ICAgICByZXR1cm4gVkdf
bEFCR1JfODg4ODsKKyAgICBjYXNlIFZHX2xSR0JBXzg4ODhfUFJFOiByZXR1cm4gVkdfbEFCR1Jf
ODg4OF9QUkU7CisgICAgY2FzZSBWR19zWFJHQl84ODg4OiAgICAgcmV0dXJuIFZHX3NCR1JYXzg4
ODg7CisgICAgY2FzZSBWR19zQVJHQl84ODg4OiAgICAgcmV0dXJuIFZHX3NCR1JBXzg4ODg7Cisg
ICAgY2FzZSBWR19zQVJHQl84ODg4X1BSRTogcmV0dXJuIFZHX3NCR1JBXzg4ODhfUFJFOworICAg
IGNhc2UgVkdfbFhSR0JfODg4ODogICAgIHJldHVybiBWR19sQkdSWF84ODg4OworICAgIGNhc2Ug
VkdfbEFSR0JfODg4ODogICAgIHJldHVybiBWR19sQkdSQV84ODg4OworICAgIGNhc2UgVkdfbEFS
R0JfODg4OF9QUkU6IHJldHVybiBWR19sQkdSQV84ODg4X1BSRTsKKyAgICBjYXNlIFZHX3NCR1JY
Xzg4ODg6ICAgICByZXR1cm4gVkdfc1hSR0JfODg4ODsKKyAgICBjYXNlIFZHX3NCR1JBXzg4ODg6
ICAgICByZXR1cm4gVkdfc0FSR0JfODg4ODsKKyAgICBjYXNlIFZHX3NCR1JBXzg4ODhfUFJFOiBy
ZXR1cm4gVkdfc0FSR0JfODg4OF9QUkU7CisgICAgY2FzZSBWR19sQkdSWF84ODg4OiAgICAgcmV0
dXJuIFZHX2xYUkdCXzg4ODg7CisgICAgY2FzZSBWR19sQkdSQV84ODg4OiAgICAgcmV0dXJuIFZH
X2xBUkdCXzg4ODg7CisgICAgY2FzZSBWR19sQkdSQV84ODg4X1BSRTogcmV0dXJuIFZHX2xBUkdC
Xzg4ODhfUFJFOworICAgIGNhc2UgVkdfc1hCR1JfODg4ODogICAgIHJldHVybiBWR19zUkdCWF84
ODg4OworICAgIGNhc2UgVkdfc0FCR1JfODg4ODogICAgIHJldHVybiBWR19zUkdCQV84ODg4Owor
ICAgIGNhc2UgVkdfc0FCR1JfODg4OF9QUkU6IHJldHVybiBWR19zUkdCQV84ODg4X1BSRTsKKyAg
ICBjYXNlIFZHX2xYQkdSXzg4ODg6ICAgICByZXR1cm4gVkdfbFJHQlhfODg4ODsKKyAgICBjYXNl
IFZHX2xBQkdSXzg4ODg6ICAgICByZXR1cm4gVkdfbFJHQkFfODg4ODsKKyAgICBjYXNlIFZHX2xB
QkdSXzg4ODhfUFJFOiByZXR1cm4gVkdfbFJHQkFfODg4OF9QUkU7CisgICAgZGVmYXVsdDogICAg
ICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gKFZHSW1hZ2VGb3JtYXQpIDA7CisgICAgfQorfQorI2Vsc2UKK1ZHSW1hZ2VGb3JtYXQg
VkdVdGlsczo6ZW5kaWFuQXdhcmVJbWFnZUZvcm1hdChWR0ltYWdlRm9ybWF0IGJpZ0VuZGlhbkZv
cm1hdCkKK3sKKyAgICByZXR1cm4gYmlnRW5kaWFuRm9ybWF0OworfQorI2VuZGlmCisKIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1ZHVXRpbHMuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1ZHVXRpbHMuaAppbmRleCAzYTI5MGNiLi4w
NmQ1ZmVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9WR1V0
aWxzLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVkdVdGlscy5oCkBA
IC04NSw2ICs4NSwzMSBAQCBwcml2YXRlOgogICAgIFZHZmxvYXQgbV9kYXRhWzRdOwogfTsKIAor
Y2xhc3MgVkdVdGlscyB7CitwdWJsaWM6CisgICAgc3RhdGljIGludCBieXRlc0ZvckltYWdlKFZH
SW1hZ2VGb3JtYXQsIFZHaW50IHdpZHRoLCBWR2ludCBoZWlnaHQpOworICAgIHN0YXRpYyBpbnQg
Ynl0ZXNGb3JJbWFnZVNjYW5saW5lKFZHSW1hZ2VGb3JtYXQsIFZHaW50IHdpZHRoKTsKKyAgICBz
dGF0aWMgaW50IGltYWdlRm9ybWF0Qml0c1BlclBpeGVsKFZHSW1hZ2VGb3JtYXQpOworCisgICAg
LyoqCisgICAgICogUmV0dXJuIGEgZmxpcHBlZCBWR0ltYWdlRm9ybWF0IGlmIHRoZSBwbGF0Zm9y
bSBpcyBsaXR0bGUgZW5kaWFuCisgICAgICogKGUuZy4gVkdfQUJHUl84ODg4IGZvciBhIGdpdmVu
IFZHX1JHQkFfODg4OCksIG9yIHJldHVybiB0aGUgaW1hZ2UgZm9ybWF0CisgICAgICogYXMgaXMg
aWYgdGhlIHBsYXRmb3JtIGlzIGJpZyBlbmRpYW4uCisgICAgICoKKyAgICAgKiBPcGVuVkcgaXRz
ZWxmIGlzIGluZGlmZmVyZW50IHRvIGVuZGlhbm5lc3MsIGl0IHdpbGwgYWx3YXlzIHdvcmsgb24g
YQorICAgICAqIHNpbmdsZSBtYWNoaW5lIHdvcmQgd2l0aCB0aGUgYnl0ZXMgZ29pbmcgZnJvbSBs
ZWZ0IHRvIHJpZ2h0IGFzIHNwZWNpZmllZAorICAgICAqIGluIHRoZSBpbWFnZSBmb3JtYXQsIG5v
IG1hdHRlciB3aGljaCBvbmUgb2YgdGhlIGJ5dGVzIGlzIG1vc3Qgb3IgbGVhc3QKKyAgICAgKiBz
aWduaWZpY2FudC4KKyAgICAgKgorICAgICAqIEhvd2V2ZXIsIGlmIHlvdSBpbnRlcmZhY2Ugd2l0
aCB2Z0ltYWdlU3ViRGF0YSgpL3ZnR2V0SW1hZ2VTdWJEYXRhKCkKKyAgICAgKiB1c2luZyBhIGJ5
dGUgYXJyYXkgdGhlbiB5b3Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIGJ5dGUgb3JkZXIgaXMKKyAg
ICAgKiBhcHByb3ByaWF0ZSBmb3IgdGhlIGdpdmVuIHBsYXRmb3JtIChvdGhlcndpc2UgdGhlIGJ5
dGUgaW5kZXhlcyBuZWVkCisgICAgICogdG8gYmUgc3dhcHBlZCBkZXBlbmRpbmcgb24gZW5kaWFu
bmVzcykuIFNvLCB1c2UgdGhpcyBmdW5jdGlvbiB3aGVuCisgICAgICogaW50ZXJmYWNpbmcgd2l0
aCBieXRlIGFycmF5cywgYW5kIGRvbid0IHVzZSBpdCBvdGhlcndpc2UuCisgICAgICovCisgICAg
c3RhdGljIFZHSW1hZ2VGb3JtYXQgZW5kaWFuQXdhcmVJbWFnZUZvcm1hdChWR0ltYWdlRm9ybWF0
IGJpZ0VuZGlhbkZvcm1hdCk7Cit9OworCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9vcGVudmcvSW1hZ2VEZWNvZGVyT3BlblZHLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvb3BlbnZnL0ltYWdlRGVjb2Rlck9wZW5W
Ry5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4Zjc0OQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvb3BlbnZnL0ltYWdl
RGVjb2Rlck9wZW5WRy5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNs
dWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlN1cmZhY2VP
cGVuVkcuaCIKKyNpbmNsdWRlICJUaWxlZEltYWdlT3BlblZHLmgiCisjaW5jbHVkZSAiVkdVdGls
cy5oIgorCisjaWYgUExBVEZPUk0oRUdMKQorI2luY2x1ZGUgIkVHTERpc3BsYXlPcGVuVkcuaCIK
KyNlbmRpZgorCisjaW5jbHVkZSA8b3BlbnZnLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
TmF0aXZlSW1hZ2VQdHIgUkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKK3sK
KyAgICBzdGF0aWMgY29uc3QgVkdJbWFnZUZvcm1hdCBidWZmZXJGb3JtYXQgPSBWR19zQVJHQl84
ODg4X1BSRTsKKyAgICAvLyBTYXZlIG1lbW9yeSBieSB1c2luZyAxNi1iaXQgaW1hZ2VzIGZvciBm
dWxseSBvcGFxdWUgaW1hZ2VzLgorICAgIGNvbnN0IFZHSW1hZ2VGb3JtYXQgaW1hZ2VGb3JtYXQg
PSBoYXNBbHBoYSgpID8gYnVmZmVyRm9ybWF0IDogVkdfc1JHQl81NjU7CisKKyNpZiBQTEFURk9S
TShFR0wpCisgICAgRUdMRGlzcGxheU9wZW5WRzo6Y3VycmVudCgpLT5zaGFyZWRQbGF0Zm9ybVN1
cmZhY2UoKS0+bWFrZUN1cnJlbnQoKTsKKyNlbmRpZgorCisgICAgY29uc3QgSW50U2l6ZSB2Z01h
eEltYWdlU2l6ZSh2Z0dldGkoVkdfTUFYX0lNQUdFX1dJRFRIKSwgdmdHZXRpKFZHX01BWF9JTUFH
RV9IRUlHSFQpKTsKKyAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKKworICAgIFRpbGVkSW1hZ2VP
cGVuVkcqIHRpbGVkSW1hZ2UgPSBuZXcgVGlsZWRJbWFnZU9wZW5WRyhJbnRTaXplKHdpZHRoKCks
IGhlaWdodCgpKSwgdmdNYXhJbWFnZVNpemUpOworCisgICAgY29uc3QgaW50IG51bUNvbHVtbnMg
PSB0aWxlZEltYWdlLT5udW1Db2x1bW5zKCk7CisgICAgY29uc3QgaW50IG51bVJvd3MgPSB0aWxl
ZEltYWdlLT5udW1Sb3dzKCk7CisKKyAgICBmb3IgKGludCB5SW5kZXggPSAwOyB5SW5kZXggPCBu
dW1Sb3dzOyArK3lJbmRleCkgeworICAgICAgICBmb3IgKGludCB4SW5kZXggPSAwOyB4SW5kZXgg
PCBudW1Db2x1bW5zOyArK3hJbmRleCkgeworICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9
IHRpbGVkSW1hZ2UtPnRpbGVSZWN0KHhJbmRleCwgeUluZGV4KTsKKyAgICAgICAgICAgIFZHSW1h
Z2UgaW1hZ2UgPSB2Z0NyZWF0ZUltYWdlKGltYWdlRm9ybWF0LAorICAgICAgICAgICAgICAgIHRp
bGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCBWR19JTUFHRV9RVUFMSVRZX0ZBU1RF
Uik7CisgICAgICAgICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKKworICAgICAgICAgICAgUGl4
ZWxEYXRhKiBwaXhlbERhdGEgPSBjb25zdF9jYXN0PFBpeGVsRGF0YSo+KG1fYnl0ZXMuZGF0YSgp
KTsKKyAgICAgICAgICAgIHBpeGVsRGF0YSArPSAodGlsZVJlY3QueSgpICogd2lkdGgoKSkgKyB0
aWxlUmVjdC54KCk7CisKKyAgICAgICAgICAgIHZnSW1hZ2VTdWJEYXRhKGltYWdlLCByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbERhdGEpLAorICAgICAgICAgICAgICAgIHdp
ZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKSwgYnVmZmVyRm9ybWF0LAorICAgICAgICAgICAgICAg
IDAsIDAsIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAg
IEFTU0VSVF9WR19OT19FUlJPUigpOworCisgICAgICAgICAgICB0aWxlZEltYWdlLT5zZXRUaWxl
KHhJbmRleCwgeUluZGV4LCBpbWFnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
dGlsZWRJbWFnZTsKK30KKworfQo=
</data>
<flag name="review"
          id="35291"
          type_id="1"
          status="+"
          setter="staikos"
    />
          </attachment>
      

    </bug>

</bugzilla>