<?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>27844</bug_id>
          
          <creation_ts>2009-07-30 11:34:23 -0700</creation_ts>
          <short_desc>SVG Filter and linearRGB, sRGB platform support</short_desc>
          <delta_ts>2014-05-12 05:54:35 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>68469</blocked>
    
    <blocked>6033</blocked>
    
    <blocked>26389</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Dirk Schulze">krit</assigned_to>
          <cc>abarth</cc>
    
    <cc>ariya.hidayat</cc>
    
    <cc>dglazkov</cc>
    
    <cc>jeffschiller</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>135897</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-07-30 11:34:23 -0700</bug_when>
    <thetext>We need at least support for linearRGB and sRGB on platforms to change the color space on SVG Filters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135906</commentid>
    <comment_count>1</comment_count>
      <attachid>33796</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-07-30 11:45:52 -0700</bug_when>
    <thetext>Created attachment 33796
linearRGB, sRGB support for platforms

This is an inital patch to add support of linearRGB as well as sRGB. It uses the native version of color space transformations from platforms if available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136266</commentid>
    <comment_count>2</comment_count>
      <attachid>33796</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-31 15:15:10 -0700</bug_when>
    <thetext>Comment on attachment 33796
linearRGB, sRGB support for platforms

I&apos;m not sure this is the right colorspace abstraction.  it seems very specific to images, where it should probably be based off of another colorspace or Color class in platform.  See bug 20558.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136291</commentid>
    <comment_count>3</comment_count>
      <attachid>33796</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-07-31 16:14:25 -0700</bug_when>
    <thetext>Comment on attachment 33796
linearRGB, sRGB support for platforms

&gt; +void ImageBuffer::transformColorSpace(ImageColorSpace srcColorSpace, ImageColorSpace dstColorSpace)
&gt; +{
...
&gt; +    if (dstColorSpace == LinearRGB) {
&gt; +        if (m_linearRgbLUT.isEmpty()) {
...
&gt; +        lookUpTable = m_linearRgbLUT;
&gt; +    }
&gt; +    if (dstColorSpace == DeviceRGB) {
...
&gt; +    }
should be &apos;else if&apos; here

&gt; +        case LinearRGB:
&gt; +			colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGBLinear);
indenting :D

I share eric&apos;s concern about the placement of the colour matching logic -- logically it should be in GraphicsContext, but i don&apos;t think it&apos;s feasible to do the required logic to ensure that behaviour is correct outside of the underlying graphics library so this placement seems the only place it can really go for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136398</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-31 22:07:09 -0700</bug_when>
    <thetext>Assigning to Dirk for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136732</commentid>
    <comment_count>5</comment_count>
      <attachid>33994</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-03 12:02:41 -0700</bug_when>
    <thetext>Created attachment 33994
linearRGB, sRGB support for platforms (without code duplication)

same code as above, moved the calculation of the lut&apos;s into a new file ImageBuffer.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136734</commentid>
    <comment_count>6</comment_count>
      <attachid>33994</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-03 12:09:32 -0700</bug_when>
    <thetext>Comment on attachment 33994
linearRGB, sRGB support for platforms (without code duplication)

r=me fix the tabs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136736</commentid>
    <comment_count>7</comment_count>
      <attachid>33996</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-03 12:16:37 -0700</bug_when>
    <thetext>Created attachment 33996
linearRGB, sRGB support for platforms (without code duplication)

(no tabs)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137063</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-04 11:08:39 -0700</bug_when>
    <thetext>I&apos;ll upload the patch as soon as possible. run-webkit-test is not working for me at the moment and I don&apos;t want to upload untested (by layouttests) patches to the tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138410</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-08 13:03:24 -0700</bug_when>
    <thetext>landed in r46956.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138463</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-08 18:32:15 -0700</bug_when>
    <thetext>Chromium build fix landed as http://trac.webkit.org/changeset/46961.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33796</attachid>
            <date>2009-07-30 11:45:52 -0700</date>
            <delta_ts>2009-07-31 16:14:25 -0700</delta_ts>
            <desc>linearRGB, sRGB support for platforms</desc>
            <filename>imageBuffer.patch</filename>
            <type>text/plain</type>
            <size>32021</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjU5MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzIgQEAKKzIwMDktMDctMzAgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGlzIGFuIGluaXRpYWwgaW1wbGVtZW50YXRpb24gZm9yIGxpbmVhclJHQiBhbmQgc1JHQiBzdXBw
b3J0IGZvciBhbGwKKyAgICAgICAgcGxhdGZvcm1zLiBTb21lIHBsYXRmb3JtcyBsaWtlIENnIHN1
cHBvcnQgZGlmZmVyZW50IGNvbG9yIHNwYWNlcworICAgICAgICBuYXRpdmVseSwgb3RoZXJzIGxp
a2UgUXQsIENhaXJvIGFuZCBTa2lhIGRvIG5vdC4gVGhpcyBwYXRjaCB1c2VzIHRoZQorICAgICAg
ICBuYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgcGxhdGZvcm1zIGlmIHBvc3NpYmxlIGFuZCBvZmZl
cnMgYSBjb21tb24gdmVyc2lvbgorICAgICAgICBpZiBub3QuCisKKyAgICAgICAgRGlmZmVyZW50
IGNvbG9yIHNwYWNlcyBhcmUgdXNlZCBpbiBTVkcgRmlsdGVycy4gTmVhcmx5IGV2ZXJ5IEZpbHRl
ciB0ZXN0IAorICAgICAgICBjYXNlIGlzIGEgdGVzdCBmb3IgdGhpcyBwYXRjaCBhbmQgd2lsbCBi
ZSBlbmFibGVkLCBvbmNlIEZpbHRlcnMgYXJlIGVuYWJsZWQuCisKKyAgICAgICAgKiBodG1sL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SW50ZXJuYWwpOgorICAgICAgICAqIGh0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmF0ZWRJbWFnZTo6ZHJhd1BhdHRlcm4p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6
OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeVdpbjo6T3duZWRCdWZmZXJzOjpPd25lZEJ1
ZmZlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Z2V0RWZmZWN0Q29udGV4dCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvUGF0aFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9rZUNvbnRhaW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1NraWFVdGlscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY3JhdGNoQ29udGV4dCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lTWFjOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZp
bGxMYXllckV4dGVuZGVkKToKKyAgICAgICAgKiBzdmcvU1ZHTWFza0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OmRyYXdNYXNrZXJDb250ZW50KToKKyAgICAg
ICAgKiBzdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
dGVybkVsZW1lbnQ6OmJ1aWxkUGF0dGVybik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFza0FuZFN3YXBDb250ZXh0Rm9yVGV4dEdy
YWRpZW50KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyUGF0dGVybjo6c2V0dXApOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9TVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZXNvdXJjZUZpbHRlcjo6cHJlcGFyZUZpbHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlGaWx0ZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGlj
cy9TVkdSZXNvdXJjZU1hc2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZXNvdXJjZU1h
c2tlcjo6YXBwbHlNYXNrKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRp
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjphcHBseSk6CisKIDIwMDktMDctMzAg
IFlvbmcgTGkgIDx5b25nLmxpQHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBHZW9yZ2UgU3RhaWtvcy4KSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTI2LDcgKzE1MjYsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJCiAgICAgICAgIC8vIEZJWE1FOiBU
aGUgcmVjdCBpcyBub3QgYmlnIGVub3VnaCBmb3IgbWl0ZXJzIG9uIHN0cm9rZWQgdGV4dC4KICAg
ICAgICAgSW50UmVjdCBtYXNrUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodGV4dFJlY3QpOwogCi0g
ICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShtYXNrUmVjdC5zaXplKCksIGZhbHNlKTsKKyAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBt
YXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1hc2tSZWN0LnNpemUoKSk7CiAKICAgICAg
ICAgR3JhcGhpY3NDb250ZXh0KiBtYXNrSW1hZ2VDb250ZXh0ID0gbWFza0ltYWdlLT5jb250ZXh0
KCk7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gNDY0MTYp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTksNyArMjU5LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZm
ZQogICAgIGlmICghc2l6ZS53aWR0aCgpIHx8ICFzaXplLmhlaWdodCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBmYWxz
ZSk7CisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSk7CiAgICAg
Ly8gVGhlIGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UgTWF4Q2FudmFzQXJlYSBjaGVjayBzaG91bGQg
cHJldmVudCBjb21tb24gY2FzZXMKICAgICAvLyB3aGVyZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCkg
cmV0dXJucyBOVUxMLCBob3dldmVyIHdlIGNvdWxkIHN0aWxsIGJlIGxvdyBvbiBtZW1vcnkuCiAg
ICAgaWYgKCFtX2ltYWdlQnVmZmVyKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
ZW5lcmF0ZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HZW5lcmF0ZWRJbWFnZS5jcHAJKHJldmlzaW9uIDQ2NDE2KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUx
LDcgQEAgdm9pZCBHZW5lcmF0ZWRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpYwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewogICAg
IC8vIENyZWF0ZSBhIEJpdG1hcEltYWdlIGFuZCBjYWxsIGRyYXdQYXR0ZXJuIG9uIGl0LgotICAg
IE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1f
c2l6ZSwgZmFsc2UpOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKG1fc2l6ZSk7CiAgICAgQVNTRVJUKGltYWdlQnVmZmVyLmdldCgpKTsK
ICAgICAKICAgICAvLyBGaWxsIHdpdGggdGhlIGdyYWRpZW50LgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24gNDY0MTYpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEzICs0
MywyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSW50UmVjdDsKICAgICBjbGFz
cyBTdHJpbmc7CiAKKyAgICBlbnVtIEltYWdlQ29sb3JTcGFjZSB7CisgICAgICAgIFVua25vd24s
CisgICAgICAgIERldmljZVJHQiwgLy8gbGlrZSBzUkdCCisgICAgICAgIEdyYXlTY2FsZSwKKyAg
ICAgICAgTGluZWFyUkdCCisgICAgfTsKKwogICAgIGNsYXNzIEltYWdlQnVmZmVyIDogcHVibGlj
IE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVs
bCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KLSAgICAgICAgc3RhdGljIFBhc3NPd25Q
dHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGdyYXlTY2Fs
ZSkKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBJ
bnRTaXplJiBzaXplLCBJbWFnZUNvbG9yU3BhY2UgY29sb3JTcGFjZSA9IERldmljZVJHQikKICAg
ICAgICAgewogICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAgICBP
d25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgZ3JheVNjYWxlLCBz
dWNjZXNzKSk7CisgICAgICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZihuZXcgSW1hZ2VC
dWZmZXIoc2l6ZSwgY29sb3JTcGFjZSwgc3VjY2VzcykpOwogICAgICAgICAgICAgaWYgKHN1Y2Nl
c3MpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1Zi5yZWxlYXNlKCk7CiAgICAgICAgICAgICBy
ZXR1cm4gMDsKQEAgLTcwLDYgKzc3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBT
dHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OwogI2lmICFQTEFU
Rk9STShDRykKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYmFzZVRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7IH0KKyAgICAgICAgdm9pZCB0cmFu
c2Zvcm1Db2xvclNwYWNlKEltYWdlQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBJbWFnZUNvbG9y
U3BhY2UgZHN0Q29sb3JTcGFjZSk7CiAjZWxzZQogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoMSwg
MCwgMCwgLTEsIDAsIG1fc2l6ZS5oZWlnaHQoKSk7IH0KICNlbmRpZgpAQCAtODAsOSArODgsMTQg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBt
X2NvbnRleHQ7CiAgICAgICAgIG11dGFibGUgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogCisjaWYg
IVBMQVRGT1JNKENHKQorICAgICAgICBWZWN0b3I8aW50PiBtX2xpbmVhclJnYkxVVDsKKyAgICAg
ICAgVmVjdG9yPGludD4gbV9kZXZpY2VSZ2JMVVQ7CisjZW5kaWYKKwogICAgICAgICAvLyBUaGlz
IGNvbnN0cnVjdG9yIHdpbGwgcGxhY2UgaXRzIHN1Y2Nlc3MgaW50byB0aGUgZ2l2ZW4gb3V0LXZh
cmlhYmxlCiAgICAgICAgIC8vIHNvIHRoYXQgY3JlYXRlKCkga25vd3Mgd2hlbiBpdCBzaG91bGQg
cmV0dXJuIGZhaWx1cmUuCi0gICAgICAgIEltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmLCBib29s
IGdyYXlTY2FsZSwgYm9vbCYgc3VjY2Vzcyk7CisgICAgICAgIEltYWdlQnVmZmVyKGNvbnN0IElu
dFNpemUmLCBJbWFnZUNvbG9yU3BhY2UgY29sb3JTcGFjZSwgYm9vbCYgc3VjY2Vzcyk7CiAgICAg
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA0NjQx
NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKIAogI2luY2x1ZGUgPGNhaXJvLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPG1hdGguaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIApAQCAtNjgsNyArNjksNyBAQCBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVm
ZmVyRGF0YShjb25zdCBJCiB7CiB9CiAKLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJ
bnRTaXplJiBzaXplLCBib29sIGdyYXlTY2FsZSwgYm9vbCYgc3VjY2VzcykKK0ltYWdlQnVmZmVy
OjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBJbWFnZUNvbG9yU3BhY2UgaW1hZ2VD
b2xvclNwYWNlLCBib29sJiBzdWNjZXNzKQogICAgIDogbV9kYXRhKHNpemUpCiAgICAgLCBtX3Np
emUoc2l6ZSkKIHsKQEAgLTExNyw2ICsxMTgsNjAgQEAgSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFn
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CiB9CiAKK3ZvaWQgSW1hZ2VCdWZm
ZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoSW1hZ2VDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIElt
YWdlQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNl
X2dldF90eXBlKG1fZGF0YS5tX3N1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSk7
CisKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRo
ZSBtb21lbnQKKyAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gTGluZWFyUkdCICYmIHNyY0NvbG9y
U3BhY2UgIT0gRGV2aWNlUkdCKSB8fCAKKyAgICAgICAgKGRzdENvbG9yU3BhY2UgIT0gTGluZWFy
UkdCICYmIGRzdENvbG9yU3BhY2UgIT0gRGV2aWNlUkdCKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVmVjdG9yPGludD4gbG9va1VwVGFibGU7CisgICAgaWYgKGRzdENvbG9yU3BhY2UgPT0gTGlu
ZWFyUkdCKSB7CisgICAgICAgIGlmIChtX2xpbmVhclJnYkxVVC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAg
ICAgIGZsb2F0IGNvbG9yID0gaSAgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgY29sb3IgPSAo
Y29sb3IgPD0gMC4wNDA0NWYgPyBjb2xvciAvIDEyLjkyZiA6IHBvdygoY29sb3IgKyAwLjA1NWYp
IC8gMS4wNTVmLCAyLjRmKSk7CisgICAgICAgICAgICAgICAgY29sb3IgPSBzdGQ6Om1heCgwLjBm
LCBjb2xvcik7CisgICAgICAgICAgICAgICAgY29sb3IgPSBzdGQ6Om1pbigxLjBmLCBjb2xvcik7
CisgICAgICAgICAgICAgICAgbV9saW5lYXJSZ2JMVVQuYXBwZW5kKHN0YXRpY19jYXN0PGludD4o
Y29sb3IgKiAyNTUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBsb29rVXBU
YWJsZSA9IG1fbGluZWFyUmdiTFVUOworICAgIH0KKyAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBE
ZXZpY2VSR0IpIHsKKyAgICAgICAgaWYgKG1fZGV2aWNlUmdiTFVULmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgZmxvYXQgY29sb3IgPSBpICAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9
IHBvdygxLjA1NWYgKiBjb2xvciwgMS4wZiAvIDIuNGYpIC0gMC4wNTVmOworICAgICAgICAgICAg
ICAgIGNvbG9yID0gc3RkOjptYXgoMC4wZiwgY29sb3IpOworICAgICAgICAgICAgICAgIGNvbG9y
ID0gc3RkOjptaW4oMS4wZiwgY29sb3IpOworICAgICAgICAgICAgICAgIG1fZGV2aWNlUmdiTFVU
LmFwcGVuZChzdGF0aWNfY2FzdDxpbnQ+KGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgbG9va1VwVGFibGUgPSBtX2RldmljZVJnYkxVVDsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0
YShtX2RhdGEubV9zdXJmYWNlKTsKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfc3RyaWRlKG1fZGF0YS5tX3N1cmZhY2UpOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
bV9zaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7CisgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgbV9zaXplLndpZHRoKCk7IHgrKykgeworICAgICAgICAgICAgdW5zaWdu
ZWQqIHBpeGVsID0gcm93ICsgeDsKKyAgICAgICAgICAgIENvbG9yIHBpeGVsQ29sb3IgPSBjb2xv
ckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOworICAgICAgICAgICAgcGl4ZWxDb2xvciA9
IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkKCldLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3JlZW4oKV0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYWxwaGEo
KV0pOworICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4
ZWxDb2xvcik7CisgICAgICAgIH0KKyAgICB9Cit9CisKIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJ
bWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9kYXRhLm1fc3VyZmFjZSkgPT0gQ0FJ
Uk9fU1VSRkFDRV9UWVBFX0lNQUdFKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAkocmV2aXNpb24gNDY0MTYpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjUsNyArMTY1LDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0Kgog
ICAgIGNvbnRleHQtPnNhdmUoKTsKIAogICAgIEludFJlY3QgaW1hZ2VTaXplID0gZW5jbG9zaW5n
SW50UmVjdCh0aWxlUmVjdCk7Ci0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZVN1cmZhY2Ug
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlU2l6ZS5zaXplKCksIGZhbHNlKTsKKyAgICBPd25Q
dHI8SW1hZ2VCdWZmZXI+IGltYWdlU3VyZmFjZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VT
aXplLnNpemUoKSk7CiAKICAgICBpZiAoIWltYWdlU3VyZmFjZSkKICAgICAgICAgcmV0dXJuOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3Bw
CShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiAKQEAgLTQ4LDcgKzQ5LDcgQEAgSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEo
Y29uc3QgSQogewogfQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgYm9vbCBncmF5U2NhbGUsIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VC
dWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSW1hZ2VDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFj
ZSwgYm9vbCYgc3VjY2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUp
CiB7CkBAIC01Nyw3ICs1OCw3IEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRT
aXplJiAKICAgICBpZiAoc2l6ZS53aWR0aCgpIDwgMCB8fCBzaXplLmhlaWdodCgpIDwgMCkKICAg
ICAgICAgcmV0dXJuOwogICAgIGJ5dGVzUGVyUm93ID0gc2l6ZS53aWR0aCgpOwotICAgIGlmICgh
Z3JheVNjYWxlKSB7CisgICAgaWYgKGltYWdlQ29sb3JTcGFjZSAhPSBHcmF5U2NhbGUpIHsKICAg
ICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IG92ZXJmbG93CiAgICAgICAgIGlmIChieXRlc1BlclJv
dyA+IDB4M0ZGRkZGRkYpCiAgICAgICAgICAgICByZXR1cm47CkBAIC02Nyw5ICs2OCwyNCBAQCBJ
bWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgCiAgICAgbV9kYXRhLm1fZGF0
YSA9IHRyeUZhc3RDYWxsb2Moc2l6ZS5oZWlnaHQoKSwgYnl0ZXNQZXJSb3cpOwogICAgIEFTU0VS
VCgocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KG1fZGF0YS5tX2RhdGEpICYgMikgPT0gMCk7CiAK
LSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IGdyYXlTY2FsZSA/IENHQ29sb3JTcGFj
ZUNyZWF0ZURldmljZUdyYXkoKSA6IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICAg
IENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlOworICAgIHN3aXRjaChpbWFnZUNvbG9yU3BhY2Up
IHsKKyAgICAgICAgY2FzZSBEZXZpY2VSR0I6CisgICAgICAgICAgICBjb2xvclNwYWNlID0gQ0dD
b2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBHcmF5U2NhbGU6CisgICAgICAgICAgICBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3Jl
YXRlRGV2aWNlR3JheSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTGluZWFy
UkdCOgorCQkJY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9y
U3BhY2VHZW5lcmljUkdCTGluZWFyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJH
QigpOworICAgICAgICAgICAgYnJlYWs7CisJfQorCQogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRl
eHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUobV9kYXRhLm1fZGF0YSwgc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpLCA4LCBieXRlc1BlclJvdywKLSAgICAgICAgY29sb3JTcGFjZSwgZ3JheVNj
YWxlID8ga0NHSW1hZ2VBbHBoYU5vbmUgOiBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Qp
OworICAgICAgICBjb2xvclNwYWNlLCAoaW1hZ2VDb2xvclNwYWNlID09IEdyYXlTY2FsZSkgPyBr
Q0dJbWFnZUFscGhhTm9uZSA6IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCk7CiAgICAg
Q0dDb2xvclNwYWNlUmVsZWFzZShjb2xvclNwYWNlKTsKICAgICBpZiAoIWNnQ29udGV4dCkKICAg
ICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
cmFuc3BhcmVuY3lXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcAkocmV2aXNpb24gNDY0MTYpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBjbGFzcyBUcmFuc3BhcmVuY3lXaW46Ok93bmVk
QnVmZmVycyB7CiBwdWJsaWM6CiAgICAgT3duZWRCdWZmZXJzKGNvbnN0IEludFNpemUmIHNpemUs
IGJvb2wgbmVlZFJlZmVyZW5jZUJ1ZmZlcikKICAgICB7Ci0gICAgICAgIG1fZGVzdEJpdG1hcCA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgZmFsc2UpOworICAgICAgICBtX2Rlc3RCaXRtYXAg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUpOwogCiAgICAgICAgIGlmIChuZWVkUmVmZXJlbmNl
QnVmZmVyKSB7CiAgICAgICAgICAgICBtX3JlZmVyZW5jZUJpdG1hcC5zZXRDb25maWcoU2tCaXRt
YXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAJKHJldmlzaW9uIDQ2NDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgRmxv
YXRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlRHJhd2luZwogR3JhcGhpY3NDb250ZXh0KiBG
aWx0ZXJFZmZlY3Q6OmdldEVmZmVjdENvbnRleHQoKQogewogICAgIEludFJlY3QgYnVmZmVyUmVj
dCA9IGVuY2xvc2luZ0ludFJlY3Qoc3ViUmVnaW9uKCkpOwotICAgIG1fZWZmZWN0QnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgZmFsc2UpOworICAgIG1fZWZm
ZWN0QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgTGluZWFy
UkdCKTsKICAgICByZXR1cm4gbV9lZmZlY3RCdWZmZXItPmNvbnRleHQoKTsKIH0KIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCShyZXZp
c2lvbiA0NjQxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxRSW1hZ2VX
cml0ZXI+CiAjaW5jbHVkZSA8UVBhaW50ZXI+CiAjaW5jbHVkZSA8UVBpeG1hcD4KKyNpbmNsdWRl
IDxtYXRoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjcsNyArNjgsNyBAQCBJbWFn
ZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJCiAgICAgcGFpbnRlci0+c2V0Q29t
cG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3Zlcik7CiB9CiAK
LUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGdyYXlT
Y2FsZSwgYm9vbCYgc3VjY2VzcykKK0ltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRT
aXplJiBzaXplLCBJbWFnZUNvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBib29sJiBzdWNjZXNz
KQogICAgIDogbV9kYXRhKHNpemUpCiAgICAgLCBtX3NpemUoc2l6ZSkKIHsKQEAgLTk4LDYgKzk5
LDY2IEBAIEltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAogICAgIHJldHVybiBtX2lt
YWdlLmdldCgpOwogfQogCit2b2lkIEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKElt
YWdlQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBJbWFnZUNvbG9yU3BhY2UgZHN0Q29sb3JTcGFj
ZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0
IHRoZSBtb21lbnQKKyAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gTGluZWFyUkdCICYmIHNyY0Nv
bG9yU3BhY2UgIT0gRGV2aWNlUkdCKSB8fCAKKyAgICAgICAgKGRzdENvbG9yU3BhY2UgIT0gTGlu
ZWFyUkdCICYmIGRzdENvbG9yU3BhY2UgIT0gRGV2aWNlUkdCKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgVmVjdG9yPGludD4gbG9va1VwVGFibGU7CisgICAgaWYgKGRzdENvbG9yU3BhY2UgPT0g
TGluZWFyUkdCKSB7CisgICAgICAgIGlmIChtX2xpbmVhclJnYkxVVC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAg
ICAgICAgIHFyZWFsIGNvbG9yID0gaSAgLyAyNTUuMDsKKyAgICAgICAgICAgICAgICBjb2xvciA9
IChjb2xvciA8PSAwLjA0MDQ1ID8gY29sb3IgLyAxMi45MiA6IHBvdygoY29sb3IgKyAwLjA1NSkg
LyAxLjA1NSwgMi40KSk7CisgICAgICAgICAgICAgICAgY29sb3IgPSBzdGQ6Om1heCgwLjAsIGNv
bG9yKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWluKDEuMCwgY29sb3IpOworICAg
ICAgICAgICAgICAgIG1fbGluZWFyUmdiTFVULmFwcGVuZChzdGF0aWNfY2FzdDxpbnQ+KGNvbG9y
ICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbG9va1VwVGFibGUg
PSBtX2xpbmVhclJnYkxVVDsKKyAgICB9CisgICAgaWYgKGRzdENvbG9yU3BhY2UgPT0gRGV2aWNl
UkdCKSB7CisgICAgICAgIGlmIChtX2RldmljZVJnYkxVVC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAg
IHFyZWFsIGNvbG9yID0gaSAgLyAyNTUuMDsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHBvdygx
LjA1NWYgKiBjb2xvciwgMS4wIC8gMi40KSAtIDAuMDU1OworICAgICAgICAgICAgICAgIGNvbG9y
ID0gc3RkOjptYXgoMC4wLCBjb2xvcik7CisgICAgICAgICAgICAgICAgY29sb3IgPSBzdGQ6Om1p
bigxLjAsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICBtX2RldmljZVJnYkxVVC5hcHBlbmQoc3Rh
dGljX2Nhc3Q8aW50Pihjb2xvciAqIDI1NSkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGxvb2tVcFRhYmxlID0gbV9kZXZpY2VSZ2JMVVQ7CisgICAgfQorCisgICAgYm9vbCBp
c1BhaW50aW5nID0gbV9kYXRhLm1fcGFpbnRlci0+aXNBY3RpdmUoKTsKKyAgICBpZiAoaXNQYWlu
dGluZykKKyAgICAgICAgbV9kYXRhLm1fcGFpbnRlci0+ZW5kKCk7CisKKyAgICBRSW1hZ2UgaW1h
Z2UgPSBtX2RhdGEubV9waXhtYXAudG9JbWFnZSgpLmNvbnZlcnRUb0Zvcm1hdChRSW1hZ2U6OkZv
cm1hdF9BUkdCMzIpOworICAgIEFTU0VSVCghaW1hZ2UuaXNOdWxsKCkpOworCisgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBtX3NpemUuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IG1fc2l6ZS53aWR0aCgpOyB4KyspIHsKKyAgICAgICAgICAgIFFSZ2IgdmFsdWUg
PSBpbWFnZS5waXhlbCh4LCB5KTsKKyAgICAgICAgICAgIHZhbHVlID0gcVJnYmEobG9va1VwVGFi
bGVbcVJlZCh2YWx1ZSldLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rVXBUYWJsZVtx
R3JlZW4odmFsdWUpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbcUJs
dWUodmFsdWUpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbcUFscGhh
KHZhbHVlKV0pOworICAgICAgICAgICAgaW1hZ2Uuc2V0UGl4ZWwoeCwgeSwgdmFsdWUpOworICAg
ICAgICB9CisgICAgfQorCisgICAgbV9kYXRhLm1fcGl4bWFwID0gUVBpeG1hcDo6ZnJvbUltYWdl
KGltYWdlKTsKKworICAgIGlmIChpc1BhaW50aW5nKQorICAgICAgICBtX2RhdGEubV9wYWludGVy
LT5iZWdpbigmbV9kYXRhLm1fcGl4bWFwKTsKK30KKwogUGFzc1JlZlB0cjxJbWFnZURhdGE+IElt
YWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAg
ICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKQEAgLTE5MCw3ICsyNTEsMTQgQEAgdm9pZCBJbWFnZUJ1
ZmZlcjo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YQogICAgICAgICBxdWludDMyKiBzY2FuTGluZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQzMio+KGltYWdlLnNjYW5MaW5lKHkgKyBkZXN0eSkpOwog
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewogICAgICAgICAg
ICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICBzY2FuTGluZVt4ICsgZGVzdHhdID0g
cmVpbnRlcnByZXRfY2FzdDxxdWludDMyKj4oc3JjUm93cyArIGJhc2V4KVswXTsKKyAgICAgICAg
ICAgIC8vc2NhbkxpbmVbeCArIGRlc3R4XSA9IHJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQzMio+KHNy
Y1Jvd3MgKyBiYXNleClbMF07CisgICAgICAgICAgICBRUmdiIHZhbHVlID0gcVJnYmEoc3JjUm93
c1tiYXNleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1Jvd3NbYmFzZXggKyAxXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUm93c1tiYXNleCArIDJdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBzcmNSb3dzW2Jhc2V4ICsgM10pOworICAgICAgICAgICAgdW5zaWdu
ZWQgdGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQzMio+KHNyY1Jvd3MgKyBiYXNleClbMF07
CisKKyAgICAgICAgICAgIGltYWdlLnNldFBpeGVsKHgsIHksIHZhbHVlKTsKICAgICAgICAgfQog
CiAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L1BhdGhRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9QYXRoUXQuY3BwCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvUGF0aFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIs
NyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwCiAKICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHRyeSB0byB1c2UgYSAnc2hhcmVkIENvbnRleHQnIGluc3RlYWQgb2Yg
Y3JlYXRpbmcgYSBuZXcgSW1hZ2VCdWZmZXIKICAgICAvLyBvbiBlYWNoIGNhbGwuCi0gICAgT3du
UHRyPEltYWdlQnVmZmVyPiBzY3JhdGNoSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNp
emUoMSwgMSksIGZhbHNlKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNjcmF0Y2hJbWFnZSA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxLCAxKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0
KiBnYyA9IHNjcmF0Y2hJbWFnZS0+Y29udGV4dCgpOwogICAgIFFQYWludGVyUGF0aFN0cm9rZXIg
c3Ryb2tlOwogICAgIGFwcGxpZXItPnN0cm9rZVN0eWxlKGdjKTsKQEAgLTEyNCw3ICsxMjQsNyBA
QCBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rCiB7CiAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCB0cnkgdG8gdXNlIGEgJ3NoYXJlZCBDb250ZXh0JyBpbnN0ZWFkIG9mIGNy
ZWF0aW5nIGEgbmV3IEltYWdlQnVmZmVyCiAgICAgLy8gb24gZWFjaCBjYWxsLgotICAgIE93blB0
cjxJbWFnZUJ1ZmZlcj4gc2NyYXRjaEltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXpl
KDEsIDEpLCBmYWxzZSk7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzY3JhdGNoSW1hZ2UgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMSwgMSkpOwogICAgIEdyYXBoaWNzQ29udGV4dCog
Z2MgPSBzY3JhdGNoSW1hZ2UtPmNvbnRleHQoKTsKICAgICBRUGFpbnRlclBhdGhTdHJva2VyIHN0
cm9rZTsKICAgICBpZiAoYXBwbGllcikgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9uIDQ2NDE2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA4LCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKQEAgLTUzLDcgKzU0LDcgQEAgSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEo
Y29uc3QgSQogewogfQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgYm9vbCBncmF5U2NhbGUsIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VC
dWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSW1hZ2VDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFj
ZSwgYm9vbCYgc3VjY2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUp
CiB7CkBAIC0xMDAsNiArMTAxLDU3IEBAIEltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25z
dAogICAgIHJldHVybiBtX2ltYWdlLmdldCgpOwogfQogCit2b2lkIEltYWdlQnVmZmVyOjp0cmFu
c2Zvcm1Db2xvclNwYWNlKEltYWdlQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBJbWFnZUNvbG9y
U3BhY2UgZHN0Q29sb3JTcGFjZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xv
clNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJH
QiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKKyAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0g
TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gRGV2aWNlUkdCKSB8fCAKKyAgICAgICAgKGRz
dENvbG9yU3BhY2UgIT0gTGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2UgIT0gRGV2aWNlUkdCKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPGludD4gbG9va1VwVGFibGU7CisgICAgaWYg
KGRzdENvbG9yU3BhY2UgPT0gTGluZWFyUkdCKSB7CisgICAgICAgIGlmIChtX2xpbmVhclJnYkxV
VC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7
IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAgLyAyNTUuMGY7CisgICAg
ICAgICAgICAgICAgY29sb3IgPSAoY29sb3IgPD0gMC4wNDA0NWYgPyBjb2xvciAvIDEyLjkyZiA6
IHBvdygoY29sb3IgKyAwLjA1NWYpIC8gMS4wNTVmLCAyLjRmKSk7CisgICAgICAgICAgICAgICAg
Y29sb3IgPSBzdGQ6Om1heCgwLjBmLCBjb2xvcik7CisgICAgICAgICAgICAgICAgY29sb3IgPSBz
dGQ6Om1pbigxLjBmLCBjb2xvcik7CisgICAgICAgICAgICAgICAgbV9saW5lYXJSZ2JMVVQuYXBw
ZW5kKHN0YXRpY19jYXN0PGludD4oY29sb3IgKiAyNTUpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBsb29rVXBUYWJsZSA9IG1fbGluZWFyUmdiTFVUOworICAgIH0KKyAgICBp
ZiAoZHN0Q29sb3JTcGFjZSA9PSBEZXZpY2VSR0IpIHsKKyAgICAgICAgaWYgKG1fZGV2aWNlUmdi
TFVULmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1
NjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpICAvIDI1NS4wZjsKKyAg
ICAgICAgICAgICAgICBjb2xvciA9IHBvdygxLjA1NWYgKiBjb2xvciwgMS4wZiAvIDIuNGYpIC0g
MC4wNTVmOworICAgICAgICAgICAgICAgIGNvbG9yID0gc3RkOjptYXgoMC4wZiwgY29sb3IpOwor
ICAgICAgICAgICAgICAgIGNvbG9yID0gc3RkOjptaW4oMS4wZiwgY29sb3IpOworICAgICAgICAg
ICAgICAgIG1fZGV2aWNlUmdiTFVULmFwcGVuZChzdGF0aWNfY2FzdDxpbnQ+KGNvbG9yICogMjU1
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbG9va1VwVGFibGUgPSBtX2Rl
dmljZVJnYkxVVDsKKyAgICB9CisKKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gKmNvbnRl
eHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpOworICAgIEFTU0VSVChiaXRtYXAuY29u
ZmlnKCkgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKKyAgICBTa0F1dG9Mb2NrUGl4
ZWxzIGJpdG1hcExvY2soYml0bWFwKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1fc2l6ZS5o
ZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIHVpbnQzMl90KiBzcmNSb3cgPSBiaXRtYXAuZ2V0QWRk
cjMyKDAsIHkpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1fc2l6ZS53aWR0aCgpOyAr
K3gpIHsKKyAgICAgICAgICAgIFNrQ29sb3IgY29sb3IgPSBTa1BNQ29sb3JUb0NvbG9yKHNyY1Jv
d1t4XSk7CisgICAgICAgICAgICBzcmNSb3dbeF0gPSBTa1ByZU11bHRpcGx5QVJHQihsb29rVXBU
YWJsZVtTa0NvbG9yR2V0QShjb2xvcildLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9va1VwVGFibGVbU2tDb2xvckdldFIoY29sb3IpXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW1NrQ29sb3JHZXRHKGNv
bG9yKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rVXBU
YWJsZVtTa0NvbG9yR2V0Qihjb2xvcildKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYg
cmVjdCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29udGV4dCgpKTsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhVXRpbHMuY3BwCShyZXZpc2lvbiA0NjQxNikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhVXRpbHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODksNyArMTg5LDcgQEAgR3JhcGhpY3NDb250ZXh0KiBzY3JhdGNoQ29udGV4dCgp
CiB7CiAgICAgc3RhdGljIEltYWdlQnVmZmVyKiBzY3JhdGNoID0gMDsKICAgICBpZiAoIXNjcmF0
Y2gpCi0gICAgICAgIHNjcmF0Y2ggPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMSwgMSks
IGZhbHNlKS5yZWxlYXNlKCk7CisgICAgICAgIHNjcmF0Y2ggPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KEludFNpemUoMSwgMSkpLnJlbGVhc2UoKTsKICAgICAvLyBXZSBkb24ndCBib3RoZXIgY2hlY2tp
bmcgZm9yIGZhaWx1cmUgY3JlYXRpbmcgdGhlIEltYWdlQnVmZmVyLCBzaW5jZSBvdXIKICAgICAv
LyBJbWFnZUJ1ZmZlciBpbml0aWFsaXplciB3b24ndCBmYWlsLgogICAgIHJldHVybiBzY3JhdGNo
LT5jb250ZXh0KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVm
ZmVyV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1h
Z2VCdWZmZXJXeC5jcHAJKHJldmlzaW9uIDQ2NDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBA
QCBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJCiB7CiB9CiAKLUltYWdl
QnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgYm9vbCBncmF5U2NhbGUsIGJvb2wm
IHN1Y2Nlc3MpIDogCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYsIElt
YWdlQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIGJvb2wmIHN1Y2Nlc3MpIDogCiAgICAgbV9k
YXRhKEludFNpemUoKSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0JKHJldmlzaW9uIDQ2NDE2KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTM5MSw3ICszOTEsNyBAQCBib29sIFNjcm9sbGJhclRoZW1lTWFjOjpwYWludChTY3JvbGxiYXIq
CiAgICAgICAgIGJ1ZmZlclJlY3QuaW50ZXJzZWN0KGRhbWFnZVJlY3QpOwogICAgICAgICBidWZm
ZXJSZWN0Lm1vdmUoLXNjcm9sbGJhci0+ZnJhbWVSZWN0KCkueCgpLCAtc2Nyb2xsYmFyLT5mcmFt
ZVJlY3QoKS55KCkpOwogICAgICAgICAKLSAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFn
ZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVyUmVjdC5zaXplKCksIGZhbHNlKTsK
KyAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoYnVmZmVyUmVjdC5zaXplKCkpOwogICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gNDY0MTYpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw3
ICszNTgsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllCiAgICAg
ICAgIG1hc2tSZWN0LmludGVyc2VjdChwYWludEluZm8ucmVjdCk7CiAgICAgICAgIAogICAgICAg
ICAvLyBOb3cgY3JlYXRlIHRoZSBtYXNrLgotICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1h
c2tJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobWFza1JlY3Quc2l6ZSgpLCBmYWxzZSk7Cisg
ICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShtYXNrUmVjdC5zaXplKCkpOwogICAgICAgICBpZiAoIW1hc2tJbWFnZSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0
NjQxNikKKysrIFdlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTU0LDcgKzE1NCw3IEBAIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IFNWR01hc2tFbGVtZW50
OjoKICAgICBpZiAoaW1hZ2VTaXplLmhlaWdodCgpIDwgc3RhdGljX2Nhc3Q8aW50PihoZWlnaHRW
YWx1ZSkpCiAgICAgICAgIGhlaWdodFZhbHVlID0gaW1hZ2VTaXplLmhlaWdodCgpOwogCi0gICAg
T3duUHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdl
U2l6ZSwgZmFsc2UpOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShpbWFnZVNpemUpOwogICAgIGlmICghbWFza0ltYWdlKQogICAgICAgICBy
ZXR1cm4gMDsKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAkocmV2aXNpb24gNDY0
MTYpCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpidWlsZFBhdHRlcm4o
Y29uCiAgICAgSW50U2l6ZSBpbWFnZVNpemUobHJvdW5kZihwYXR0ZXJuQm91bmRhcmllc0luY2x1
ZGluZ092ZXJmbG93LndpZHRoKCkpLCBscm91bmRmKHBhdHRlcm5Cb3VuZGFyaWVzSW5jbHVkaW5n
T3ZlcmZsb3cuaGVpZ2h0KCkpKTsKICAgICBjbGFtcEltYWdlQnVmZmVyU2l6ZVRvVmlld3BvcnQo
ZG9jdW1lbnQoKS0+dmlldygpLCBpbWFnZVNpemUpOwogCi0gICAgT3duUHRyPEltYWdlQnVmZmVy
PiBwYXR0ZXJuSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlU2l6ZSwgZmFsc2UpOwor
ICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gcGF0dGVybkltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShpbWFnZVNpemUpOwogCiAgICAgaWYgKCFwYXR0ZXJuSW1hZ2UpCiAgICAgICAgIHJldHVybjsK
SW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDQ2NDE2KQorKysgV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNyAr
MjExLDcgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQwogICAgIGlm
ICghbV9mcmFtZUNhY2hlKSB7CiAgICAgICAgIGlmICghbV9wYWdlKQogICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIG1fZnJhbWVDYWNoZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgp
LCBmYWxzZSk7CisgICAgICAgIG1fZnJhbWVDYWNoZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSgpKTsKICAgICAgICAgaWYgKCFtX2ZyYW1lQ2FjaGUpIC8vIGZhaWxlZCB0byBhbGxvY2F0ZSBp
bWFnZQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJlbmRlclN1YnRyZWVUb0ltYWdl
KG1fZnJhbWVDYWNoZS5nZXQoKSwgbV9wYWdlLT5tYWluRnJhbWUoKS0+Y29udGVudFJlbmRlcmVy
KCkpOwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudC5jcHAJKHJldmlzaW9uIDQ2NDE2KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFp
bnRTZXJ2ZXJHcmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgY3JlYXRlTWFza0FuZFN3YXBDb250CiAgICAgSW50U2l6ZSBtYXNr
U2l6ZShtYXNrUmVjdC53aWR0aCgpLCBtYXNrUmVjdC5oZWlnaHQoKSk7CiAgICAgY2xhbXBJbWFn
ZUJ1ZmZlclNpemVUb1ZpZXdwb3J0KG9iamVjdC0+dmlldygpLT5mcmFtZVZpZXcoKSwgbWFza1Np
emUpOwogCi0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKG1hc2tTaXplLCBmYWxzZSk7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrSW1h
Z2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1hc2tTaXplKTsKIAogICAgIGlmICghbWFza0ltYWdl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQ
YWludFNlcnZlclBhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR1BhaW50U2VydmVyUGF0dGVybi5jcHAJKHJldmlzaW9uIDQ2NDE2KQorKysgV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE4LDcgKzExOCw3IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1cChHcmFwaGkK
ICAgICAgICAgLy8gRHJhdyB0aGUgZmlyc3QgY2VsbCBvZiB0aGUgcGF0dGVybiBtYW51YWxseSB0
byBzdXBwb3J0IG92ZXJmbG93PSJ2aXNpYmxlIiBvbiBhbGwgcGxhdGZvcm1zLgogICAgICAgICBp
bnQgdGlsZVdpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihwYXR0ZXJuQm91bmRhcmllcygpLndpZHRo
KCkgKyAwLjVmKTsKICAgICAgICAgaW50IHRpbGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBh
dHRlcm5Cb3VuZGFyaWVzKCkuaGVpZ2h0KCkgKyAwLjVmKTsKLSAgICAgICAgT3duUHRyPEltYWdl
QnVmZmVyPiB0aWxlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUodGlsZVdpZHRo
LCB0aWxlSGVpZ2h0KSwgZmFsc2UpOworICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHRpbGVJ
bWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSh0aWxlV2lkdGgsIHRpbGVIZWlnaHQp
KTsKICAgCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJ
bWFnZS0+Y29udGV4dCgpOwogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdSZXNvdXJj
ZUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R1Jlc291cmNlRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCB2b2lk
IFNWR1Jlc291cmNlRmlsdGVyOjpwcmVwYXJlRmlsdGVyKEdyCiAgICAgLy8gRHJhdyB0aGUgY29u
dGVudCBvZiB0aGUgY3VycmVudCBlbGVtZW50IGFuZCBpdCdzIGNoaWxkcyB0byBhIGltYWdlQnVm
ZmVyIHRvIGdldCB0aGUgU291cmNlR3JhcGhpYy4KICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgU291
cmNlR3JhcGhpYyBpcyBjbGlwcGVkIHRvIHRoZSBzaXplIG9mIHRoZSBmaWx0ZXJSZWdpb24uCiAg
ICAgSW50UmVjdCBidWZmZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjbGlwcGVkU291cmNlUmVj
dCk7Ci0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBzb3VyY2VHcmFwaGljKEltYWdlQnVmZmVyOjpj
cmVhdGUoYnVmZmVyUmVjdC5zaXplKCksIGZhbHNlKSk7CisgICAgT3duUHRyPEltYWdlQnVmZmVy
PiBzb3VyY2VHcmFwaGljKEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVyUmVjdC5zaXplKCksIExp
bmVhclJHQikpOwogICAgIAogICAgIGlmICghc291cmNlR3JhcGhpYy5nZXQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTA2LDYgKzEwNiw5IEBAIHZvaWQgU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5
RmlsdGVyKEdyYXAKIAogICAgIGNvbnRleHQgPSBtX3NhdmVkQ29udGV4dDsKICAgICBtX3NhdmVk
Q29udGV4dCA9IDA7CisjaWYgIVBMQVRGT1JNKENHKQorICAgIG1fc291cmNlR3JhcGhpY0J1ZmZl
ci0+dHJhbnNmb3JtQ29sb3JTcGFjZShEZXZpY2VSR0IsIExpbmVhclJHQik7CisjZW5kaWYKIAog
ICAgIEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IG1fZmlsdGVyQnVpbGRlci0+bGFzdEVmZmVj
dCgpOwogCkBAIC0xMTMsOCArMTE2LDEzIEBAIHZvaWQgU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5
RmlsdGVyKEdyYXAKICAgICAgICAgbV9maWx0ZXItPnNldFNvdXJjZUltYWdlKG1fc291cmNlR3Jh
cGhpY0J1ZmZlci5yZWxlYXNlKCkpOwogICAgICAgICBsYXN0RWZmZWN0LT5hcHBseShtX2ZpbHRl
ci5nZXQoKSk7CiAKLSAgICAgICAgaWYgKGxhc3RFZmZlY3QtPnJlc3VsdEltYWdlKCkpCi0gICAg
ICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UobGFzdEVmZmVjdC0+cmVzdWx0SW1hZ2UoKS0+aW1h
Z2UoKSwgbGFzdEVmZmVjdC0+c3ViUmVnaW9uKCkpOworICAgICAgICBJbWFnZUJ1ZmZlciogcmVz
dWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5yZXN1bHRJbWFnZSgpOworICAgICAgICBpZiAocmVzdWx0
SW1hZ2UpIHsKKyNpZiAhUExBVEZPUk0oQ0cpCisgICAgICAgICAgICByZXN1bHRJbWFnZS0+dHJh
bnNmb3JtQ29sb3JTcGFjZShMaW5lYXJSR0IsIERldmljZVJHQik7CisjZW5kaWYKKyAgICAgICAg
ICAgIGNvbnRleHQtPmRyYXdJbWFnZShyZXN1bHRJbWFnZS0+aW1hZ2UoKSwgbGFzdEVmZmVjdC0+
c3ViUmVnaW9uKCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgbV9zb3VyY2VHcmFwaGljQnVm
ZmVyLmNsZWFyKCk7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdSZXNvdXJjZU1hc2tl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUmVzb3VyY2VNYXNr
ZXIuY3BwCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1Jlc291
cmNlTWFza2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIFNWR1Jl
c291cmNlTWFza2VyOjphcHBseU1hc2soR3JhcGhpCiAgICAgSW50UmVjdCBpbnRJbWFnZVJlY3Qo
MCwgMCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSk7CiAKICAgICAvLyBD
cmVhdGUgbmV3IEltYWdlQnVmZmVyIHRvIGFwcGx5IGx1bWluYW5jZQotICAgIE93blB0cjxJbWFn
ZUJ1ZmZlcj4gbHVtaW5hbmNlZEltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVNpemUs
IGZhbHNlKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGx1bWluYW5jZWRJbWFnZSA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoaW1hZ2VTaXplKTsKICAgICBpZiAoIWx1bWluYW5jZWRJbWFnZSkKICAg
ICAgICAgcmV0dXJuOwogCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
VGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RVRpbGUuY3BwCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVUaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCB2b2lkIEZF
VGlsZTo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAgICAgaWYgKG1faW4tPmlzU291cmNlSW5wdXQo
KSkKICAgICAgICAgdGlsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlci0+ZmlsdGVyUmVn
aW9uKCkpOwogCi0gICAgT3duUHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2UgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHRpbGVSZWN0LnNpemUoKSwgZmFsc2UpOworICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gdGlsZUltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0aWxlUmVjdC5zaXplKCkpOwogICAg
IEdyYXBoaWNzQ29udGV4dCogdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgp
OwogICAgIHRpbGVJbWFnZUNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5p
bWFnZSgpLCBJbnRQb2ludCgpKTsKICAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybiA9IFBhdHRl
cm46OmNyZWF0ZSh0aWxlSW1hZ2UtPmltYWdlKCksIHRydWUsIHRydWUpOwo=
</data>
<flag name="review"
          id="17995"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33994</attachid>
            <date>2009-08-03 12:02:41 -0700</date>
            <delta_ts>2009-08-03 12:16:37 -0700</delta_ts>
            <desc>linearRGB, sRGB support for platforms (without code duplication)</desc>
            <filename>imageBuffer2.patch</filename>
            <type>text/plain</type>
            <size>31717</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjY2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzUgQEAKKzIwMDktMDgtMDEgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGlzIGFuIGluaXRpYWwgaW1wbGVtZW50YXRpb24gZm9yIGxpbmVhclJHQiBhbmQgc1JHQiBzdXBw
b3J0IGZvciBhbGwKKyAgICAgICAgcGxhdGZvcm1zLiBTb21lIHBsYXRmb3JtcyBsaWtlIENnIHN1
cHBvcnQgZGlmZmVyZW50IGNvbG9yIHNwYWNlcworICAgICAgICBuYXRpdmVseSwgb3RoZXJzIGxp
a2UgUXQsIENhaXJvIGFuZCBTa2lhIGRvIG5vdC4gVGhpcyBwYXRjaCB1c2VzIHRoZQorICAgICAg
ICBuYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgcGxhdGZvcm1zIGlmIHBvc3NpYmxlIGFuZCBvZmZl
cnMgYSBjb21tb24gdmVyc2lvbgorICAgICAgICBpZiBub3QuCisKKyAgICAgICAgRGlmZmVyZW50
IGNvbG9yIHNwYWNlcyBhcmUgdXNlZCBpbiBTVkcgRmlsdGVycy4gTmVhcmx5IGV2ZXJ5IEZpbHRl
ciB0ZXN0IAorICAgICAgICBjYXNlIGlzIGEgdGVzdCBmb3IgdGhpcyBwYXRjaCBhbmQgd2lsbCBi
ZSBlbmFibGVkLCBvbmNlIEZpbHRlcnMgYXJlIGVuYWJsZWQuCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBodG1sL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmRyYXdUZXh0SW50ZXJuYWwpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUlt
YWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmF0ZWRJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3
UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lXaW46Ok93bmVkQnVmZmVyczo6T3duZWRCdWZmZXJz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmdldEVmZmVjdENvbnRleHQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L1BhdGhRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJv
a2VDb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzY3JhdGNoQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1h
Z2VCdWZmZXJXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOjpwYWludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToKKyAgICAgICAgKiBzdmcvU1ZH
TWFza0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OmRyYXdN
YXNrZXJDb250ZW50KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0dGVybkVsZW1lbnQ6OmJ1aWxkUGF0dGVybik6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdl
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NW
R1BhaW50U2VydmVyR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFza0Fu
ZFN3YXBDb250ZXh0Rm9yVGV4dEdyYWRpZW50KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZH
UGFpbnRTZXJ2ZXJQYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVy
UGF0dGVybjo6c2V0dXApOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdSZXNvdXJjZUZpbHRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZXNvdXJjZUZpbHRlcjo6cHJlcGFyZUZpbHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlGaWx0ZXIpOgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdSZXNvdXJjZU1hc2tlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlNYXNrKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjph
cHBseSk6CisKIDIwMDktMDgtMDEgIEpvaG4gQWJkLUVsLU1hbGVrICA8amFtQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lv
biA0NjQxNikKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE0
NTYsNiArMTQ1Niw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JY29uLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggXAorCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5o
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggXApJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZp
c2lvbiA0NjQxNikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTk2
OCw2ICs5NjgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwIFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aFRyYXZlcnNhbFN0YXRlLmNwcCBcCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gNDY0MTYpCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyNiw3ICsxNTI2LDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogICAgICAgICAvLyBG
SVhNRTogVGhlIHJlY3QgaXMgbm90IGJpZyBlbm91Z2ggZm9yIG1pdGVycyBvbiBzdHJva2VkIHRl
eHQuCiAgICAgICAgIEludFJlY3QgbWFza1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRleHRSZWN0
KTsKIAotICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVy
OjpjcmVhdGUobWFza1JlY3Quc2l6ZSgpLCBmYWxzZSk7CisgICAgICAgIE93blB0cjxJbWFnZUJ1
ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtYXNrUmVjdC5zaXplKCkpOwog
CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+
Y29udGV4dCgpOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9u
IDQ2NDE2KQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUlt
YWdlQnVmZmUKICAgICBpZiAoIXNpemUud2lkdGgoKSB8fCAhc2l6ZS5oZWlnaHQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSwgZmFsc2UpOworICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUp
OwogICAgIC8vIFRoZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlIE1heENhbnZhc0FyZWEgY2hlY2sg
c2hvdWxkIHByZXZlbnQgY29tbW9uIGNhc2VzCiAgICAgLy8gd2hlcmUgSW1hZ2VCdWZmZXI6OmNy
ZWF0ZSgpIHJldHVybnMgTlVMTCwgaG93ZXZlciB3ZSBjb3VsZCBzdGlsbCBiZSBsb3cgb24gbWVt
b3J5LgogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw3IEBAIHZvaWQgR2VuZXJhdGVkSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWMKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
IHsKICAgICAvLyBDcmVhdGUgYSBCaXRtYXBJbWFnZSBhbmQgY2FsbCBkcmF3UGF0dGVybiBvbiBp
dC4KLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShtX3NpemUsIGZhbHNlKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX3NpemUpOwogICAgIEFTU0VSVChpbWFnZUJ1ZmZlci5n
ZXQoKSk7CiAgICAgCiAgICAgLy8gRmlsbCB3aXRoIHRoZSBncmFkaWVudC4KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCisKKyNpZiAhUExBVEZPUk0oQ0cpCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFj
ZShJbWFnZUNvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgSW1hZ2VDb2xvclNwYWNlIGRzdENvbG9y
U3BhY2UpCit7CisgICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRl
ZCBhdCB0aGUgbW9tZW50CisgICAgaWYgKChzcmNDb2xvclNwYWNlICE9IExpbmVhclJHQiAmJiBz
cmNDb2xvclNwYWNlICE9IERldmljZVJHQikgfHwgCisgICAgICAgIChkc3RDb2xvclNwYWNlICE9
IExpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IERldmljZVJHQikpCisgICAgICAgIHJldHVy
bjsKKworICAgIFZlY3RvcjxpbnQ+IGxvb2tVcFRhYmxlOworICAgIGlmIChkc3RDb2xvclNwYWNl
ID09IExpbmVhclJHQikgeworICAgICAgICBpZiAobV9saW5lYXJSZ2JMVVQuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgIC8gMjU1LjBmOworICAgICAgICAgICAgICAgIGNv
bG9yID0gKGNvbG9yIDw9IDAuMDQwNDVmID8gY29sb3IgLyAxMi45MmYgOiBwb3coKGNvbG9yICsg
MC4wNTVmKSAvIDEuMDU1ZiwgMi40ZikpOworICAgICAgICAgICAgICAgIGNvbG9yID0gc3RkOjpt
YXgoMC4wZiwgY29sb3IpOworICAgICAgICAgICAgICAgIGNvbG9yID0gc3RkOjptaW4oMS4wZiwg
Y29sb3IpOworICAgICAgICAgICAgICAgIG1fbGluZWFyUmdiTFVULmFwcGVuZChzdGF0aWNfY2Fz
dDxpbnQ+KGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKG1fbGluZWFyUmdiTFVUKTsKKyAgICB9IGVsc2Ug
aWYgKGRzdENvbG9yU3BhY2UgPT0gRGV2aWNlUkdCKSB7CisgICAgICAgIGlmIChtX2RldmljZVJn
YkxVVC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAy
NTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAgLyAyNTUuMGY7Cisg
ICAgICAgICAgICAgICAgY29sb3IgPSBwb3coMS4wNTVmICogY29sb3IsIDEuMGYgLyAyLjRmKSAt
IDAuMDU1ZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWF4KDAuMGYsIGNvbG9yKTsK
KyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWluKDEuMGYsIGNvbG9yKTsKKyAgICAgICAg
ICAgICAgICBtX2RldmljZVJnYkxVVC5hcHBlbmQoc3RhdGljX2Nhc3Q8aW50Pihjb2xvciAqIDI1
NSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBsYXRmb3JtVHJhbnNmb3Jt
Q29sb3JTcGFjZShtX2RldmljZVJnYkxVVCk7CisgICAgfQorfQorCit9CisKKyNlbmRpZiAvLyBQ
TEFURk9STShDRykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJ
KHJldmlzaW9uIDQ2NDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMyArNDMsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIEludFJlY3Q7CiAgICAgY2xhc3MgU3RyaW5nOwogCisgICAgZW51bSBJbWFn
ZUNvbG9yU3BhY2UgeworICAgICAgICBVbmtub3duLAorICAgICAgICBEZXZpY2VSR0IsIC8vIGxp
a2Ugc1JHQgorICAgICAgICBHcmF5U2NhbGUsCisgICAgICAgIExpbmVhclJHQgorICAgIH07CisK
ICAgICBjbGFzcyBJbWFnZUJ1ZmZlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGlj
OgogICAgICAgICAvLyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZh
aWx1cmUuCi0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBncmF5U2NhbGUpCisgICAgICAgIHN0YXRpYyBQYXNzT3du
UHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSW1hZ2VDb2xvclNw
YWNlIGNvbG9yU3BhY2UgPSBEZXZpY2VSR0IpCiAgICAgICAgIHsKICAgICAgICAgICAgIGJvb2wg
c3VjY2VzcyA9IGZhbHNlOwotICAgICAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWYobmV3
IEltYWdlQnVmZmVyKHNpemUsIGdyYXlTY2FsZSwgc3VjY2VzcykpOworICAgICAgICAgICAgT3du
UHRyPEltYWdlQnVmZmVyPiBidWYobmV3IEltYWdlQnVmZmVyKHNpemUsIGNvbG9yU3BhY2UsIHN1
Y2Nlc3MpKTsKICAgICAgICAgICAgIGlmIChzdWNjZXNzKQogICAgICAgICAgICAgICAgIHJldHVy
biBidWYucmVsZWFzZSgpOwogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC03MCw2ICs3Nyw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKSBjb25zdDsKICNpZiAhUExBVEZPUk0oQ0cpCiAgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpOyB9CisgICAgICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShJbWFnZUNvbG9y
U3BhY2Ugc3JjQ29sb3JTcGFjZSwgSW1hZ2VDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpOworICAg
ICAgICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBWZWN0b3I8aW50PiYp
OwogI2Vsc2UKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYmFzZVRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KDEsIDAsIDAsIC0xLCAwLCBtX3NpemUu
aGVpZ2h0KCkpOyB9CiAjZW5kaWYKQEAgLTgwLDkgKzg5LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OwogICAgICAgICBt
dXRhYmxlIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKIAorI2lmICFQTEFURk9STShDRykKKyAgICAg
ICAgVmVjdG9yPGludD4gbV9saW5lYXJSZ2JMVVQ7CisgICAgICAgIFZlY3RvcjxpbnQ+IG1fZGV2
aWNlUmdiTFVUOworI2VuZGlmCisKICAgICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciB3aWxsIHBs
YWNlIGl0cyBzdWNjZXNzIGludG8gdGhlIGdpdmVuIG91dC12YXJpYWJsZQogICAgICAgICAvLyBz
byB0aGF0IGNyZWF0ZSgpIGtub3dzIHdoZW4gaXQgc2hvdWxkIHJldHVybiBmYWlsdXJlLgotICAg
ICAgICBJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgYm9vbCBncmF5U2NhbGUsIGJvb2wmIHN1
Y2Nlc3MpOworICAgICAgICBJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgSW1hZ2VDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkocmV2aXNpb24gNDY0MTYpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw2ICszOSw3IEBACiAKICNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTY4
LDcgKzY5LDcgQEAgSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSQogewog
fQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBn
cmF5U2NhbGUsIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgSW1hZ2VDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgYm9vbCYgc3Vj
Y2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUpCiB7CkBAIC0xMTcs
NiArMTE4LDI2IEBAIEltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAogICAgIHJldHVy
biBtX2ltYWdlLmdldCgpOwogfQogCit2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9y
bUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQoreworICAgIEFTU0VS
VChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fZGF0YS5tX3N1cmZhY2UpID09IENBSVJPX1NVUkZB
Q0VfVFlQRV9JTUFHRSk7CisKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZGF0YShtX2RhdGEubV9zdXJmYWNlKTsKKyAgICBpbnQgc3RyaWRlID0g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fZGF0YS5tX3N1cmZhY2UpOworICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgbV9zaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgdW5zaWdu
ZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICog
eSk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9zaXplLndpZHRoKCk7IHgrKykgewor
ICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKKyAgICAgICAgICAgIENvbG9y
IHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOworICAgICAg
ICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkKCldLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3Jl
ZW4oKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbcGl4ZWxD
b2xvci5ibHVlKCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxl
W3BpeGVsQ29sb3IuYWxwaGEoKV0pOworICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbGll
ZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcik7CisgICAgICAgIH0KKyAgICB9Cit9CisKIFBhc3NS
ZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3Qm
IHJlY3QpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9kYXRh
Lm1fc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAkocmV2aXNpb24gNDY0
MTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0KgogICAgIGNvbnRleHQtPnNhdmUoKTsKIAogICAgIEludFJlY3QgaW1h
Z2VTaXplID0gZW5jbG9zaW5nSW50UmVjdCh0aWxlUmVjdCk7Ci0gICAgT3duUHRyPEltYWdlQnVm
ZmVyPiBpbWFnZVN1cmZhY2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlU2l6ZS5zaXplKCks
IGZhbHNlKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlU3VyZmFjZSA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoaW1hZ2VTaXplLnNpemUoKSk7CiAKICAgICBpZiAoIWltYWdlU3VyZmFjZSkK
ICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4
LDcgQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJh
eVB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTQ4LDcgKzQ5LDcgQEAgSW1hZ2VCdWZmZXJEYXRh
OjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSQogewogfQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZm
ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBncmF5U2NhbGUsIGJvb2wmIHN1Y2Nlc3MpCitJ
bWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSW1hZ2VDb2xvclNw
YWNlIGltYWdlQ29sb3JTcGFjZSwgYm9vbCYgc3VjY2VzcykKICAgICA6IG1fZGF0YShzaXplKQog
ICAgICwgbV9zaXplKHNpemUpCiB7CkBAIC01Nyw3ICs1OCw3IEBAIEltYWdlQnVmZmVyOjpJbWFn
ZUJ1ZmZlcihjb25zdCBJbnRTaXplJiAKICAgICBpZiAoc2l6ZS53aWR0aCgpIDwgMCB8fCBzaXpl
LmhlaWdodCgpIDwgMCkKICAgICAgICAgcmV0dXJuOwogICAgIGJ5dGVzUGVyUm93ID0gc2l6ZS53
aWR0aCgpOwotICAgIGlmICghZ3JheVNjYWxlKSB7CisgICAgaWYgKGltYWdlQ29sb3JTcGFjZSAh
PSBHcmF5U2NhbGUpIHsKICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IG92ZXJmbG93CiAgICAg
ICAgIGlmIChieXRlc1BlclJvdyA+IDB4M0ZGRkZGRkYpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC02Nyw5ICs2OCwyNCBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYg
CiAgICAgbV9kYXRhLm1fZGF0YSA9IHRyeUZhc3RDYWxsb2Moc2l6ZS5oZWlnaHQoKSwgYnl0ZXNQ
ZXJSb3cpOwogICAgIEFTU0VSVCgocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KG1fZGF0YS5tX2Rh
dGEpICYgMikgPT0gMCk7CiAKLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IGdyYXlT
Y2FsZSA/IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZUdyYXkoKSA6IENHQ29sb3JTcGFjZUNyZWF0
ZURldmljZVJHQigpOworICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlOworICAgIHN3aXRj
aChpbWFnZUNvbG9yU3BhY2UpIHsKKyAgICAgICAgY2FzZSBEZXZpY2VSR0I6CisgICAgICAgICAg
ICBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBHcmF5U2NhbGU6CisgICAgICAgICAgICBjb2xvclNwYWNl
ID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlR3JheSgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTGluZWFyUkdCOgorCQkJY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0
ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VHZW5lcmljUkdCTGluZWFyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgY29sb3JTcGFjZSA9IENHQ29sb3JT
cGFjZUNyZWF0ZURldmljZVJHQigpOworICAgICAgICAgICAgYnJlYWs7CisJfQorCQogICAgIENH
Q29udGV4dFJlZiBjZ0NvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUobV9kYXRhLm1fZGF0
YSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCA4LCBieXRlc1BlclJvdywKLSAgICAgICAg
Y29sb3JTcGFjZSwgZ3JheVNjYWxlID8ga0NHSW1hZ2VBbHBoYU5vbmUgOiBrQ0dJbWFnZUFscGhh
UHJlbXVsdGlwbGllZExhc3QpOworICAgICAgICBjb2xvclNwYWNlLCAoaW1hZ2VDb2xvclNwYWNl
ID09IEdyYXlTY2FsZSkgPyBrQ0dJbWFnZUFscGhhTm9uZSA6IGtDR0ltYWdlQWxwaGFQcmVtdWx0
aXBsaWVkTGFzdCk7CiAgICAgQ0dDb2xvclNwYWNlUmVsZWFzZShjb2xvclNwYWNlKTsKICAgICBp
ZiAoIWNnQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcAkocmV2aXNp
b24gNDY0MTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFy
ZW5jeVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBjbGFzcyBUcmFu
c3BhcmVuY3lXaW46Ok93bmVkQnVmZmVycyB7CiBwdWJsaWM6CiAgICAgT3duZWRCdWZmZXJzKGNv
bnN0IEludFNpemUmIHNpemUsIGJvb2wgbmVlZFJlZmVyZW5jZUJ1ZmZlcikKICAgICB7Ci0gICAg
ICAgIG1fZGVzdEJpdG1hcCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgZmFsc2UpOworICAg
ICAgICBtX2Rlc3RCaXRtYXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUpOwogCiAgICAgICAg
IGlmIChuZWVkUmVmZXJlbmNlQnVmZmVyKSB7CiAgICAgICAgICAgICBtX3JlZmVyZW5jZUJpdG1h
cC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHJldmlzaW9uIDQ2NDE2KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY5LDcgKzY5LDcgQEAgRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlRHJhd2luZwog
R3JhcGhpY3NDb250ZXh0KiBGaWx0ZXJFZmZlY3Q6OmdldEVmZmVjdENvbnRleHQoKQogewogICAg
IEludFJlY3QgYnVmZmVyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qoc3ViUmVnaW9uKCkpOwotICAg
IG1fZWZmZWN0QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwg
ZmFsc2UpOworICAgIG1fZWZmZWN0QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJS
ZWN0LnNpemUoKSwgTGluZWFyUkdCKTsKICAgICByZXR1cm4gbV9lZmZlY3RCdWZmZXItPmNvbnRl
eHQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZl
clF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdl
QnVmZmVyUXQuY3BwCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAK
ICNpbmNsdWRlIDxRSW1hZ2VXcml0ZXI+CiAjaW5jbHVkZSA8UVBhaW50ZXI+CiAjaW5jbHVkZSA8
UVBpeG1hcD4KKyNpbmNsdWRlIDxtYXRoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NjcsNyArNjgsNyBAQCBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJCiAg
ICAgcGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVf
U291cmNlT3Zlcik7CiB9CiAKLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXpl
JiBzaXplLCBib29sIGdyYXlTY2FsZSwgYm9vbCYgc3VjY2VzcykKK0ltYWdlQnVmZmVyOjpJbWFn
ZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBJbWFnZUNvbG9yU3BhY2UgaW1hZ2VDb2xvclNw
YWNlLCBib29sJiBzdWNjZXNzKQogICAgIDogbV9kYXRhKHNpemUpCiAgICAgLCBtX3NpemUoc2l6
ZSkKIHsKQEAgLTk4LDYgKzk5LDMyIEBAIEltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25z
dAogICAgIHJldHVybiBtX2ltYWdlLmdldCgpOwogfQogCit2b2lkIEltYWdlQnVmZmVyOjpwbGF0
Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQor
eworICAgIGJvb2wgaXNQYWludGluZyA9IG1fZGF0YS5tX3BhaW50ZXItPmlzQWN0aXZlKCk7Cisg
ICAgaWYgKGlzUGFpbnRpbmcpCisgICAgICAgIG1fZGF0YS5tX3BhaW50ZXItPmVuZCgpOworCisg
ICAgUUltYWdlIGltYWdlID0gbV9kYXRhLm1fcGl4bWFwLnRvSW1hZ2UoKS5jb252ZXJ0VG9Gb3Jt
YXQoUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKKyAgICBBU1NFUlQoIWltYWdlLmlzTnVsbCgpKTsK
KworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9zaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX3NpemUud2lkdGgoKTsgeCsrKSB7CisgICAgICAgICAg
ICBRUmdiIHZhbHVlID0gaW1hZ2UucGl4ZWwoeCwgeSk7CisgICAgICAgICAgICB2YWx1ZSA9IHFS
Z2JhKGxvb2tVcFRhYmxlW3FSZWQodmFsdWUpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9va1VwVGFibGVbcUdyZWVuKHZhbHVlKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
b2tVcFRhYmxlW3FCbHVlKHZhbHVlKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tV
cFRhYmxlW3FBbHBoYSh2YWx1ZSldKTsKKyAgICAgICAgICAgIGltYWdlLnNldFBpeGVsKHgsIHks
IHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fZGF0YS5tX3BpeG1hcCA9IFFQaXht
YXA6OmZyb21JbWFnZShpbWFnZSk7CisKKyAgICBpZiAoaXNQYWludGluZykKKyAgICAgICAgbV9k
YXRhLm1fcGFpbnRlci0+YmVnaW4oJm1fZGF0YS5tX3BpeG1hcCk7Cit9CisKIFBhc3NSZWZQdHI8
SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qp
IGNvbnN0CiB7CiAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHJlc3VsdCA9IEltYWdlRGF0YTo6
Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L1BhdGhRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9QYXRoUXQuY3BwCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvUGF0aFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIs
NyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwCiAKICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHRyeSB0byB1c2UgYSAnc2hhcmVkIENvbnRleHQnIGluc3RlYWQgb2Yg
Y3JlYXRpbmcgYSBuZXcgSW1hZ2VCdWZmZXIKICAgICAvLyBvbiBlYWNoIGNhbGwuCi0gICAgT3du
UHRyPEltYWdlQnVmZmVyPiBzY3JhdGNoSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNp
emUoMSwgMSksIGZhbHNlKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNjcmF0Y2hJbWFnZSA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxLCAxKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0
KiBnYyA9IHNjcmF0Y2hJbWFnZS0+Y29udGV4dCgpOwogICAgIFFQYWludGVyUGF0aFN0cm9rZXIg
c3Ryb2tlOwogICAgIGFwcGxpZXItPnN0cm9rZVN0eWxlKGdjKTsKQEAgLTEyNCw3ICsxMjQsNyBA
QCBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rCiB7CiAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCB0cnkgdG8gdXNlIGEgJ3NoYXJlZCBDb250ZXh0JyBpbnN0ZWFkIG9mIGNy
ZWF0aW5nIGEgbmV3IEltYWdlQnVmZmVyCiAgICAgLy8gb24gZWFjaCBjYWxsLgotICAgIE93blB0
cjxJbWFnZUJ1ZmZlcj4gc2NyYXRjaEltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXpl
KDEsIDEpLCBmYWxzZSk7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzY3JhdGNoSW1hZ2UgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMSwgMSkpOwogICAgIEdyYXBoaWNzQ29udGV4dCog
Z2MgPSBzY3JhdGNoSW1hZ2UtPmNvbnRleHQoKTsKICAgICBRUGFpbnRlclBhdGhTdHJva2VyIHN0
cm9rZTsKICAgICBpZiAoYXBwbGllcikgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9uIDQ2NDE2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA4LCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKQEAgLTUzLDcgKzU0LDcgQEAgSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEo
Y29uc3QgSQogewogfQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgYm9vbCBncmF5U2NhbGUsIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VC
dWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSW1hZ2VDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFj
ZSwgYm9vbCYgc3VjY2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUp
CiB7CkBAIC0xMDAsNiArMTAxLDIzIEBAIEltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25z
dAogICAgIHJldHVybiBtX2ltYWdlLmdldCgpOwogfQogCit2b2lkIEltYWdlQnVmZmVyOjpwbGF0
Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQor
eworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSAqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Yml0bWFwKCk7CisgICAgQVNTRVJUKGJpdG1hcC5jb25maWcoKSA9PSBTa0JpdG1hcDo6
a0FSR0JfODg4OF9Db25maWcpOworICAgIFNrQXV0b0xvY2tQaXhlbHMgYml0bWFwTG9jayhiaXRt
YXApOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9zaXplLmhlaWdodCgpOyArK3kpIHsKKyAg
ICAgICAgdWludDMyX3QqIHNyY1JvdyA9IGJpdG1hcC5nZXRBZGRyMzIoMCwgeSk7CisgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgbV9zaXplLndpZHRoKCk7ICsreCkgeworICAgICAgICAgICAg
U2tDb2xvciBjb2xvciA9IFNrUE1Db2xvclRvQ29sb3Ioc3JjUm93W3hdKTsKKyAgICAgICAgICAg
IHNyY1Jvd1t4XSA9IFNrUHJlTXVsdGlwbHlBUkdCKGxvb2tVcFRhYmxlW1NrQ29sb3JHZXRBKGNv
bG9yKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rVXBU
YWJsZVtTa0NvbG9yR2V0Uihjb2xvcildLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9va1VwVGFibGVbU2tDb2xvckdldEcoY29sb3IpXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW1NrQ29sb3JHZXRCKGNv
bG9yKV0pOworICAgICAgICB9CisgICAgfQorfQorCiBQYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1h
Z2VCdWZmZXI6OmdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAg
IEFTU0VSVChjb250ZXh0KCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1NraWFVdGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1NraWFVdGlscy5jcHAJKHJldmlzaW9uIDQ2NDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1NraWFVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODks
NyBAQCBHcmFwaGljc0NvbnRleHQqIHNjcmF0Y2hDb250ZXh0KCkKIHsKICAgICBzdGF0aWMgSW1h
Z2VCdWZmZXIqIHNjcmF0Y2ggPSAwOwogICAgIGlmICghc2NyYXRjaCkKLSAgICAgICAgc2NyYXRj
aCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxLCAxKSwgZmFsc2UpLnJlbGVhc2UoKTsK
KyAgICAgICAgc2NyYXRjaCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxLCAxKSkucmVs
ZWFzZSgpOwogICAgIC8vIFdlIGRvbid0IGJvdGhlciBjaGVja2luZyBmb3IgZmFpbHVyZSBjcmVh
dGluZyB0aGUgSW1hZ2VCdWZmZXIsIHNpbmNlIG91cgogICAgIC8vIEltYWdlQnVmZmVyIGluaXRp
YWxpemVyIHdvbid0IGZhaWwuCiAgICAgcmV0dXJuIHNjcmF0Y2gtPmNvbnRleHQoKTsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAkocmV2
aXNpb24gNDY0MTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVy
V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIEltYWdlQnVmZmVyRGF0YTo6
SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEkKIHsKIH0KIAotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVy
KGNvbnN0IEludFNpemUmLCBib29sIGdyYXlTY2FsZSwgYm9vbCYgc3VjY2VzcykgOiAKK0ltYWdl
QnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgSW1hZ2VDb2xvclNwYWNlIGltYWdl
Q29sb3JTcGFjZSwgYm9vbCYgc3VjY2VzcykgOiAKICAgICBtX2RhdGEoSW50U2l6ZSgpKQogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxi
YXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxi
YXJUaGVtZU1hYy5tbQkocmV2aXNpb24gNDY0MTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9T
Y3JvbGxiYXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzkxLDcgKzM5MSw3IEBAIGJv
b2wgU2Nyb2xsYmFyVGhlbWVNYWM6OnBhaW50KFNjcm9sbGJhcioKICAgICAgICAgYnVmZmVyUmVj
dC5pbnRlcnNlY3QoZGFtYWdlUmVjdCk7CiAgICAgICAgIGJ1ZmZlclJlY3QubW92ZSgtc2Nyb2xs
YmFyLT5mcmFtZVJlY3QoKS54KCksIC1zY3JvbGxiYXItPmZyYW1lUmVjdCgpLnkoKSk7CiAgICAg
ICAgIAotICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgZmFsc2UpOworICAgICAgICBPd25QdHI8SW1h
Z2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNp
emUoKSk7CiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU4LDcgKzM1OCw3IEBAIHZvaWQgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWUKICAgICAgICAgbWFza1JlY3QuaW50ZXJz
ZWN0KHBhaW50SW5mby5yZWN0KTsKICAgICAgICAgCiAgICAgICAgIC8vIE5vdyBjcmVhdGUgdGhl
IG1hc2suCi0gICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShtYXNrUmVjdC5zaXplKCksIGZhbHNlKTsKKyAgICAgICAgT3duUHRyPEltYWdl
QnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1hc2tSZWN0LnNpemUoKSk7
CiAgICAgICAgIGlmICghbWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ2NDE2KQorKysgV2ViQ29yZS9z
dmcvU1ZHTWFza0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDcgQEAg
UGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gU1ZHTWFza0VsZW1lbnQ6OgogICAgIGlmIChpbWFnZVNp
emUuaGVpZ2h0KCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGhlaWdodFZhbHVlKSkKICAgICAgICAgaGVp
Z2h0VmFsdWUgPSBpbWFnZVNpemUuaGVpZ2h0KCk7CiAKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+
IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VTaXplLCBmYWxzZSk7CisgICAg
T3duUHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdl
U2l6ZSk7CiAgICAgaWYgKCFtYXNrSW1hZ2UpCiAgICAgICAgIHJldHVybiAwOwogCkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvc3Zn
L1NWR1BhdHRlcm5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDcgKzIxNCw3IEBA
IHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmJ1aWxkUGF0dGVybihjb24KICAgICBJbnRTaXplIGlt
YWdlU2l6ZShscm91bmRmKHBhdHRlcm5Cb3VuZGFyaWVzSW5jbHVkaW5nT3ZlcmZsb3cud2lkdGgo
KSksIGxyb3VuZGYocGF0dGVybkJvdW5kYXJpZXNJbmNsdWRpbmdPdmVyZmxvdy5oZWlnaHQoKSkp
OwogICAgIGNsYW1wSW1hZ2VCdWZmZXJTaXplVG9WaWV3cG9ydChkb2N1bWVudCgpLT52aWV3KCks
IGltYWdlU2l6ZSk7CiAKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHBhdHRlcm5JbWFnZSA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VTaXplLCBmYWxzZSk7CisgICAgT3duUHRyPEltYWdlQnVm
ZmVyPiBwYXR0ZXJuSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlU2l6ZSk7CiAKICAg
ICBpZiAoIXBhdHRlcm5JbWFnZSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmNwcAkocmV2aXNpb24gNDY0MTYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw3ICsyMTEsNyBAQCBOYXRpdmVJbWFn
ZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDCiAgICAgaWYgKCFtX2ZyYW1lQ2FjaGUpIHsK
ICAgICAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgbV9m
cmFtZUNhY2hlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIGZhbHNlKTsKKyAgICAgICAg
bV9mcmFtZUNhY2hlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCkpOwogICAgICAgICBpZiAo
IW1fZnJhbWVDYWNoZSkgLy8gZmFpbGVkIHRvIGFsbG9jYXRlIGltYWdlCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgcmVuZGVyU3VidHJlZVRvSW1hZ2UobV9mcmFtZUNhY2hlLmdldCgp
LCBtX3BhZ2UtPm1haW5GcmFtZSgpLT5jb250ZW50UmVuZGVyZXIoKSk7CkluZGV4OiBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAkocmV2aXNpb24g
NDY0MTYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBj
cmVhdGVNYXNrQW5kU3dhcENvbnQKICAgICBJbnRTaXplIG1hc2tTaXplKG1hc2tSZWN0LndpZHRo
KCksIG1hc2tSZWN0LmhlaWdodCgpKTsKICAgICBjbGFtcEltYWdlQnVmZmVyU2l6ZVRvVmlld3Bv
cnQob2JqZWN0LT52aWV3KCktPmZyYW1lVmlldygpLCBtYXNrU2l6ZSk7CiAKLSAgICBPd25QdHI8
SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobWFza1NpemUsIGZh
bHNlKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpj
cmVhdGUobWFza1NpemUpOwogCiAgICAgaWYgKCFtYXNrSW1hZ2UpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyUGF0dGVybi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJQYXR0
ZXJuLmNwcAkocmV2aXNpb24gNDY0MTYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWlu
dFNlcnZlclBhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgYm9v
bCBTVkdQYWludFNlcnZlclBhdHRlcm46OnNldHVwKEdyYXBoaQogICAgICAgICAvLyBEcmF3IHRo
ZSBmaXJzdCBjZWxsIG9mIHRoZSBwYXR0ZXJuIG1hbnVhbGx5IHRvIHN1cHBvcnQgb3ZlcmZsb3c9
InZpc2libGUiIG9uIGFsbCBwbGF0Zm9ybXMuCiAgICAgICAgIGludCB0aWxlV2lkdGggPSBzdGF0
aWNfY2FzdDxpbnQ+KHBhdHRlcm5Cb3VuZGFyaWVzKCkud2lkdGgoKSArIDAuNWYpOwogICAgICAg
ICBpbnQgdGlsZUhlaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGF0dGVybkJvdW5kYXJpZXMoKS5o
ZWlnaHQoKSArIDAuNWYpOwotICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZSA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSh0aWxlV2lkdGgsIHRpbGVIZWlnaHQpLCBmYWxz
ZSk7CisgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gdGlsZUltYWdlID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShJbnRTaXplKHRpbGVXaWR0aCwgdGlsZUhlaWdodCkpOwogICAKICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0KiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7CiAK
SW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1Jlc291cmNlRmlsdGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdSZXNvdXJjZUZpbHRlci5jcHAJKHJldmlz
aW9uIDQ2NDE2KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUmVzb3VyY2VGaWx0ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHZvaWQgU1ZHUmVzb3VyY2VGaWx0ZXI6
OnByZXBhcmVGaWx0ZXIoR3IKICAgICAvLyBEcmF3IHRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50
IGVsZW1lbnQgYW5kIGl0J3MgY2hpbGRzIHRvIGEgaW1hZ2VCdWZmZXIgdG8gZ2V0IHRoZSBTb3Vy
Y2VHcmFwaGljLgogICAgIC8vIFRoZSBzaXplIG9mIHRoZSBTb3VyY2VHcmFwaGljIGlzIGNsaXBw
ZWQgdG8gdGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbi4KICAgICBJbnRSZWN0IGJ1ZmZlclJl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBwZWRTb3VyY2VSZWN0KTsKLSAgICBPd25QdHI8SW1h
Z2VCdWZmZXI+IHNvdXJjZUdyYXBoaWMoSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNp
emUoKSwgZmFsc2UpKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUdyYXBoaWMoSW1h
Z2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgTGluZWFyUkdCKSk7CiAgICAgCiAg
ICAgaWYgKCFzb3VyY2VHcmFwaGljLmdldCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDYsNiAr
MTA2LDkgQEAgdm9pZCBTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlGaWx0ZXIoR3JhcAogCiAgICAg
Y29udGV4dCA9IG1fc2F2ZWRDb250ZXh0OwogICAgIG1fc2F2ZWRDb250ZXh0ID0gMDsKKyNpZiAh
UExBVEZPUk0oQ0cpCisgICAgbV9zb3VyY2VHcmFwaGljQnVmZmVyLT50cmFuc2Zvcm1Db2xvclNw
YWNlKERldmljZVJHQiwgTGluZWFyUkdCKTsKKyNlbmRpZgogCiAgICAgRmlsdGVyRWZmZWN0KiBs
YXN0RWZmZWN0ID0gbV9maWx0ZXJCdWlsZGVyLT5sYXN0RWZmZWN0KCk7CiAKQEAgLTExMyw4ICsx
MTYsMTMgQEAgdm9pZCBTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlGaWx0ZXIoR3JhcAogICAgICAg
ICBtX2ZpbHRlci0+c2V0U291cmNlSW1hZ2UobV9zb3VyY2VHcmFwaGljQnVmZmVyLnJlbGVhc2Uo
KSk7CiAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KG1fZmlsdGVyLmdldCgpKTsKIAotICAgICAg
ICBpZiAobGFzdEVmZmVjdC0+cmVzdWx0SW1hZ2UoKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmRy
YXdJbWFnZShsYXN0RWZmZWN0LT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBsYXN0RWZmZWN0LT5z
dWJSZWdpb24oKSk7CisgICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGxhc3RFZmZl
Y3QtPnJlc3VsdEltYWdlKCk7CisgICAgICAgIGlmIChyZXN1bHRJbWFnZSkgeworI2lmICFQTEFU
Rk9STShDRykKKyAgICAgICAgICAgIHJlc3VsdEltYWdlLT50cmFuc2Zvcm1Db2xvclNwYWNlKExp
bmVhclJHQiwgRGV2aWNlUkdCKTsKKyNlbmRpZgorICAgICAgICAgICAgY29udGV4dC0+ZHJhd0lt
YWdlKHJlc3VsdEltYWdlLT5pbWFnZSgpLCBsYXN0RWZmZWN0LT5zdWJSZWdpb24oKSk7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICBtX3NvdXJjZUdyYXBoaWNCdWZmZXIuY2xlYXIoKTsKSW5kZXg6
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1Jlc291cmNlTWFza2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdSZXNvdXJjZU1hc2tlci5jcHAJKHJldmlzaW9uIDQ2
NDE2KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5
TWFzayhHcmFwaGkKICAgICBJbnRSZWN0IGludEltYWdlUmVjdCgwLCAwLCBpbWFnZVNpemUud2lk
dGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKTsKIAogICAgIC8vIENyZWF0ZSBuZXcgSW1hZ2VCdWZm
ZXIgdG8gYXBwbHkgbHVtaW5hbmNlCi0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBsdW1pbmFuY2Vk
SW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlU2l6ZSwgZmFsc2UpOworICAgIE93blB0
cjxJbWFnZUJ1ZmZlcj4gbHVtaW5hbmNlZEltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFn
ZVNpemUpOwogICAgIGlmICghbHVtaW5hbmNlZEltYWdlKQogICAgICAgICByZXR1cm47CiAKSW5k
ZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFVGlsZS5jcHAJKHJldmlzaW9u
IDQ2NDE2KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgRkVUaWxlOjphcHBseShGaWx0ZXIq
IGZpbHRlcikKICAgICBpZiAobV9pbi0+aXNTb3VyY2VJbnB1dCgpKQogICAgICAgICB0aWxlUmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QoZmlsdGVyLT5maWx0ZXJSZWdpb24oKSk7CiAKLSAgICBPd25Q
dHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGlsZVJlY3Qu
c2l6ZSgpLCBmYWxzZSk7CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2UgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHRpbGVSZWN0LnNpemUoKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0KiB0
aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7CiAgICAgdGlsZUltYWdlQ29u
dGV4dC0+ZHJhd0ltYWdlKG1faW4tPnJlc3VsdEltYWdlKCktPmltYWdlKCksIEludFBvaW50KCkp
OwogICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFn
ZS0+aW1hZ2UoKSwgdHJ1ZSwgdHJ1ZSk7Cg==
</data>
<flag name="review"
          id="18163"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33996</attachid>
            <date>2009-08-03 12:16:37 -0700</date>
            <delta_ts>2009-08-03 12:16:37 -0700</delta_ts>
            <desc>linearRGB, sRGB support for platforms (without code duplication)</desc>
            <filename>imageBuffer2.patch</filename>
            <type>text/plain</type>
            <size>31728</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjY2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzUgQEAKKzIwMDktMDgtMDMgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGlzIGFuIGluaXRpYWwgaW1wbGVtZW50YXRpb24gZm9yIGxpbmVhclJHQiBhbmQgc1JHQiBzdXBw
b3J0IGZvciBhbGwKKyAgICAgICAgcGxhdGZvcm1zLiBTb21lIHBsYXRmb3JtcyBsaWtlIENnIHN1
cHBvcnQgZGlmZmVyZW50IGNvbG9yIHNwYWNlcworICAgICAgICBuYXRpdmVseSwgb3RoZXJzIGxp
a2UgUXQsIENhaXJvIGFuZCBTa2lhIGRvIG5vdC4gVGhpcyBwYXRjaCB1c2VzIHRoZQorICAgICAg
ICBuYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgcGxhdGZvcm1zIGlmIHBvc3NpYmxlIGFuZCBvZmZl
cnMgYSBjb21tb24gdmVyc2lvbgorICAgICAgICBpZiBub3QuCisKKyAgICAgICAgRGlmZmVyZW50
IGNvbG9yIHNwYWNlcyBhcmUgdXNlZCBpbiBTVkcgRmlsdGVycy4gTmVhcmx5IGV2ZXJ5IEZpbHRl
ciB0ZXN0IAorICAgICAgICBjYXNlIGlzIGEgdGVzdCBmb3IgdGhpcyBwYXRjaCBhbmQgd2lsbCBi
ZSBlbmFibGVkLCBvbmNlIEZpbHRlcnMgYXJlIGVuYWJsZWQuCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBodG1sL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmRyYXdUZXh0SW50ZXJuYWwpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUlt
YWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmF0ZWRJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3
UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lXaW46Ok93bmVkQnVmZmVyczo6T3duZWRCdWZmZXJz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmdldEVmZmVjdENvbnRleHQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L1BhdGhRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJv
a2VDb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzY3JhdGNoQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1h
Z2VCdWZmZXJXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOjpwYWludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToKKyAgICAgICAgKiBzdmcvU1ZH
TWFza0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OmRyYXdN
YXNrZXJDb250ZW50KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0dGVybkVsZW1lbnQ6OmJ1aWxkUGF0dGVybik6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdl
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NW
R1BhaW50U2VydmVyR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFza0Fu
ZFN3YXBDb250ZXh0Rm9yVGV4dEdyYWRpZW50KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZH
UGFpbnRTZXJ2ZXJQYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVy
UGF0dGVybjo6c2V0dXApOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdSZXNvdXJjZUZpbHRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZXNvdXJjZUZpbHRlcjo6cHJlcGFyZUZpbHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlGaWx0ZXIpOgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdSZXNvdXJjZU1hc2tlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlNYXNrKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjph
cHBseSk6CisKIDIwMDktMDgtMDEgIEpvaG4gQWJkLUVsLU1hbGVrICA8amFtQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lv
biA0NjQxNikKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE0
NTYsNiArMTQ1Niw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JY29uLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggXAorCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5o
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggXApJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZp
c2lvbiA0NjQxNikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTk2
OCw2ICs5NjgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwIFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aFRyYXZlcnNhbFN0YXRlLmNwcCBcCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gNDY0MTYpCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyNiw3ICsxNTI2LDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogICAgICAgICAvLyBG
SVhNRTogVGhlIHJlY3QgaXMgbm90IGJpZyBlbm91Z2ggZm9yIG1pdGVycyBvbiBzdHJva2VkIHRl
eHQuCiAgICAgICAgIEludFJlY3QgbWFza1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRleHRSZWN0
KTsKIAotICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVy
OjpjcmVhdGUobWFza1JlY3Quc2l6ZSgpLCBmYWxzZSk7CisgICAgICAgIE93blB0cjxJbWFnZUJ1
ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtYXNrUmVjdC5zaXplKCkpOwog
CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+
Y29udGV4dCgpOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9u
IDQ2NDE2KQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUlt
YWdlQnVmZmUKICAgICBpZiAoIXNpemUud2lkdGgoKSB8fCAhc2l6ZS5oZWlnaHQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSwgZmFsc2UpOworICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUp
OwogICAgIC8vIFRoZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlIE1heENhbnZhc0FyZWEgY2hlY2sg
c2hvdWxkIHByZXZlbnQgY29tbW9uIGNhc2VzCiAgICAgLy8gd2hlcmUgSW1hZ2VCdWZmZXI6OmNy
ZWF0ZSgpIHJldHVybnMgTlVMTCwgaG93ZXZlciB3ZSBjb3VsZCBzdGlsbCBiZSBsb3cgb24gbWVt
b3J5LgogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw3IEBAIHZvaWQgR2VuZXJhdGVkSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWMKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
IHsKICAgICAvLyBDcmVhdGUgYSBCaXRtYXBJbWFnZSBhbmQgY2FsbCBkcmF3UGF0dGVybiBvbiBp
dC4KLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShtX3NpemUsIGZhbHNlKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX3NpemUpOwogICAgIEFTU0VSVChpbWFnZUJ1ZmZlci5n
ZXQoKSk7CiAgICAgCiAgICAgLy8gRmlsbCB3aXRoIHRoZSBncmFkaWVudC4KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCisKKyNpZiAhUExBVEZPUk0oQ0cpCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFj
ZShJbWFnZUNvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgSW1hZ2VDb2xvclNwYWNlIGRzdENvbG9y
U3BhY2UpCit7CisgICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRl
ZCBhdCB0aGUgbW9tZW50CisgICAgaWYgKChzcmNDb2xvclNwYWNlICE9IExpbmVhclJHQiAmJiBz
cmNDb2xvclNwYWNlICE9IERldmljZVJHQikgfHwgCisgICAgICAgIChkc3RDb2xvclNwYWNlICE9
IExpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IERldmljZVJHQikpCisgICAgICAgIHJldHVy
bjsKKworICAgIFZlY3RvcjxpbnQ+IGxvb2tVcFRhYmxlOworICAgIGlmIChkc3RDb2xvclNwYWNl
ID09IExpbmVhclJHQikgeworICAgICAgICBpZiAobV9saW5lYXJSZ2JMVVQuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgIC8gMjU1LjBmOworICAgICAgICAgICAgICAgIGNv
bG9yID0gKGNvbG9yIDw9IDAuMDQwNDVmID8gY29sb3IgLyAxMi45MmYgOiBwb3coKGNvbG9yICsg
MC4wNTVmKSAvIDEuMDU1ZiwgMi40ZikpOworICAgICAgICAgICAgICAgIGNvbG9yID0gc3RkOjpt
YXgoMC4wZiwgY29sb3IpOworICAgICAgICAgICAgICAgIGNvbG9yID0gc3RkOjptaW4oMS4wZiwg
Y29sb3IpOworICAgICAgICAgICAgICAgIG1fbGluZWFyUmdiTFVULmFwcGVuZChzdGF0aWNfY2Fz
dDxpbnQ+KGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKG1fbGluZWFyUmdiTFVUKTsKKyAgICB9IGVsc2Ug
aWYgKGRzdENvbG9yU3BhY2UgPT0gRGV2aWNlUkdCKSB7CisgICAgICAgIGlmIChtX2RldmljZVJn
YkxVVC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAy
NTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAgLyAyNTUuMGY7Cisg
ICAgICAgICAgICAgICAgY29sb3IgPSBwb3coMS4wNTVmICogY29sb3IsIDEuMGYgLyAyLjRmKSAt
IDAuMDU1ZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWF4KDAuMGYsIGNvbG9yKTsK
KyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWluKDEuMGYsIGNvbG9yKTsKKyAgICAgICAg
ICAgICAgICBtX2RldmljZVJnYkxVVC5hcHBlbmQoc3RhdGljX2Nhc3Q8aW50Pihjb2xvciAqIDI1
NSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBsYXRmb3JtVHJhbnNmb3Jt
Q29sb3JTcGFjZShtX2RldmljZVJnYkxVVCk7CisgICAgfQorfQorCit9CisKKyNlbmRpZiAvLyBQ
TEFURk9STShDRykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJ
KHJldmlzaW9uIDQ2NDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMyArNDMsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIEludFJlY3Q7CiAgICAgY2xhc3MgU3RyaW5nOwogCisgICAgZW51bSBJbWFn
ZUNvbG9yU3BhY2UgeworICAgICAgICBVbmtub3duLAorICAgICAgICBEZXZpY2VSR0IsIC8vIGxp
a2Ugc1JHQgorICAgICAgICBHcmF5U2NhbGUsCisgICAgICAgIExpbmVhclJHQgorICAgIH07CisK
ICAgICBjbGFzcyBJbWFnZUJ1ZmZlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGlj
OgogICAgICAgICAvLyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZh
aWx1cmUuCi0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBncmF5U2NhbGUpCisgICAgICAgIHN0YXRpYyBQYXNzT3du
UHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSW1hZ2VDb2xvclNw
YWNlIGNvbG9yU3BhY2UgPSBEZXZpY2VSR0IpCiAgICAgICAgIHsKICAgICAgICAgICAgIGJvb2wg
c3VjY2VzcyA9IGZhbHNlOwotICAgICAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWYobmV3
IEltYWdlQnVmZmVyKHNpemUsIGdyYXlTY2FsZSwgc3VjY2VzcykpOworICAgICAgICAgICAgT3du
UHRyPEltYWdlQnVmZmVyPiBidWYobmV3IEltYWdlQnVmZmVyKHNpemUsIGNvbG9yU3BhY2UsIHN1
Y2Nlc3MpKTsKICAgICAgICAgICAgIGlmIChzdWNjZXNzKQogICAgICAgICAgICAgICAgIHJldHVy
biBidWYucmVsZWFzZSgpOwogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC03MCw2ICs3Nyw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKSBjb25zdDsKICNpZiAhUExBVEZPUk0oQ0cpCiAgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpOyB9CisgICAgICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShJbWFnZUNvbG9y
U3BhY2Ugc3JjQ29sb3JTcGFjZSwgSW1hZ2VDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpOworICAg
ICAgICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBWZWN0b3I8aW50PiYp
OwogI2Vsc2UKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYmFzZVRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KDEsIDAsIDAsIC0xLCAwLCBtX3NpemUu
aGVpZ2h0KCkpOyB9CiAjZW5kaWYKQEAgLTgwLDkgKzg5LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OwogICAgICAgICBt
dXRhYmxlIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKIAorI2lmICFQTEFURk9STShDRykKKyAgICAg
ICAgVmVjdG9yPGludD4gbV9saW5lYXJSZ2JMVVQ7CisgICAgICAgIFZlY3RvcjxpbnQ+IG1fZGV2
aWNlUmdiTFVUOworI2VuZGlmCisKICAgICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciB3aWxsIHBs
YWNlIGl0cyBzdWNjZXNzIGludG8gdGhlIGdpdmVuIG91dC12YXJpYWJsZQogICAgICAgICAvLyBz
byB0aGF0IGNyZWF0ZSgpIGtub3dzIHdoZW4gaXQgc2hvdWxkIHJldHVybiBmYWlsdXJlLgotICAg
ICAgICBJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgYm9vbCBncmF5U2NhbGUsIGJvb2wmIHN1
Y2Nlc3MpOworICAgICAgICBJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgSW1hZ2VDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIGJvb2wmIHN1Y2Nlc3MpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkocmV2aXNpb24gNDY0MTYpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw2ICszOSw3IEBACiAKICNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTY4
LDcgKzY5LDcgQEAgSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSQogewog
fQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBn
cmF5U2NhbGUsIGJvb2wmIHN1Y2Nlc3MpCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgSW1hZ2VDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgYm9vbCYgc3Vj
Y2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUpCiB7CkBAIC0xMTcs
NiArMTE4LDI2IEBAIEltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAogICAgIHJldHVy
biBtX2ltYWdlLmdldCgpOwogfQogCit2b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9y
bUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxvb2tVcFRhYmxlKQoreworICAgIEFTU0VS
VChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fZGF0YS5tX3N1cmZhY2UpID09IENBSVJPX1NVUkZB
Q0VfVFlQRV9JTUFHRSk7CisKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZGF0YShtX2RhdGEubV9zdXJmYWNlKTsKKyAgICBpbnQgc3RyaWRlID0g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fZGF0YS5tX3N1cmZhY2UpOworICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgbV9zaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgdW5zaWdu
ZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICog
eSk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9zaXplLndpZHRoKCk7IHgrKykgewor
ICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKKyAgICAgICAgICAgIENvbG9y
IHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOworICAgICAg
ICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkKCldLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3Jl
ZW4oKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbcGl4ZWxD
b2xvci5ibHVlKCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxl
W3BpeGVsQ29sb3IuYWxwaGEoKV0pOworICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbGll
ZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcik7CisgICAgICAgIH0KKyAgICB9Cit9CisKIFBhc3NS
ZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3Qm
IHJlY3QpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9kYXRh
Lm1fc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAkocmV2aXNpb24gNDY0
MTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0KgogICAgIGNvbnRleHQtPnNhdmUoKTsKIAogICAgIEludFJlY3QgaW1h
Z2VTaXplID0gZW5jbG9zaW5nSW50UmVjdCh0aWxlUmVjdCk7Ci0gICAgT3duUHRyPEltYWdlQnVm
ZmVyPiBpbWFnZVN1cmZhY2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlU2l6ZS5zaXplKCks
IGZhbHNlKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlU3VyZmFjZSA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoaW1hZ2VTaXplLnNpemUoKSk7CiAKICAgICBpZiAoIWltYWdlU3VyZmFjZSkK
ICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4
LDcgQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJh
eVB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTQ4LDcgKzQ5LDcgQEAgSW1hZ2VCdWZmZXJEYXRh
OjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSQogewogfQogCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZm
ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBncmF5U2NhbGUsIGJvb2wmIHN1Y2Nlc3MpCitJ
bWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSW1hZ2VDb2xvclNw
YWNlIGltYWdlQ29sb3JTcGFjZSwgYm9vbCYgc3VjY2VzcykKICAgICA6IG1fZGF0YShzaXplKQog
ICAgICwgbV9zaXplKHNpemUpCiB7CkBAIC01Nyw3ICs1OCw3IEBAIEltYWdlQnVmZmVyOjpJbWFn
ZUJ1ZmZlcihjb25zdCBJbnRTaXplJiAKICAgICBpZiAoc2l6ZS53aWR0aCgpIDwgMCB8fCBzaXpl
LmhlaWdodCgpIDwgMCkKICAgICAgICAgcmV0dXJuOwogICAgIGJ5dGVzUGVyUm93ID0gc2l6ZS53
aWR0aCgpOwotICAgIGlmICghZ3JheVNjYWxlKSB7CisgICAgaWYgKGltYWdlQ29sb3JTcGFjZSAh
PSBHcmF5U2NhbGUpIHsKICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IG92ZXJmbG93CiAgICAg
ICAgIGlmIChieXRlc1BlclJvdyA+IDB4M0ZGRkZGRkYpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC02Nyw5ICs2OCwyNCBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYg
CiAgICAgbV9kYXRhLm1fZGF0YSA9IHRyeUZhc3RDYWxsb2Moc2l6ZS5oZWlnaHQoKSwgYnl0ZXNQ
ZXJSb3cpOwogICAgIEFTU0VSVCgocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KG1fZGF0YS5tX2Rh
dGEpICYgMikgPT0gMCk7CiAKLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IGdyYXlT
Y2FsZSA/IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZUdyYXkoKSA6IENHQ29sb3JTcGFjZUNyZWF0
ZURldmljZVJHQigpOworICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlOworICAgIHN3aXRj
aChpbWFnZUNvbG9yU3BhY2UpIHsKKyAgICAgICAgY2FzZSBEZXZpY2VSR0I6CisgICAgICAgICAg
ICBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBHcmF5U2NhbGU6CisgICAgICAgICAgICBjb2xvclNwYWNl
ID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlR3JheSgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTGluZWFyUkdCOgorICAgICAgICAgICAgY29sb3JTcGFjZSA9IENHQ29sb3JT
cGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VHZW5lcmljUkdCTGluZWFyKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgY29sb3JTcGFjZSA9
IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZSht
X2RhdGEubV9kYXRhLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDgsIGJ5dGVzUGVyUm93
LAotICAgICAgICBjb2xvclNwYWNlLCBncmF5U2NhbGUgPyBrQ0dJbWFnZUFscGhhTm9uZSA6IGtD
R0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCk7CisgICAgICAgIGNvbG9yU3BhY2UsIChpbWFn
ZUNvbG9yU3BhY2UgPT0gR3JheVNjYWxlKSA/IGtDR0ltYWdlQWxwaGFOb25lIDoga0NHSW1hZ2VB
bHBoYVByZW11bHRpcGxpZWRMYXN0KTsKICAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9yU3Bh
Y2UpOwogICAgIGlmICghY2dDb250ZXh0KQogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4u
Y3BwCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVHJhbnNwYXJlbmN5V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBA
IGNsYXNzIFRyYW5zcGFyZW5jeVdpbjo6T3duZWRCdWZmZXJzIHsKIHB1YmxpYzoKICAgICBPd25l
ZEJ1ZmZlcnMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBuZWVkUmVmZXJlbmNlQnVmZmVyKQog
ICAgIHsKLSAgICAgICAgbV9kZXN0Qml0bWFwID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBm
YWxzZSk7CisgICAgICAgIG1fZGVzdEJpdG1hcCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSk7
CiAKICAgICAgICAgaWYgKG5lZWRSZWZlcmVuY2VCdWZmZXIpIHsKICAgICAgICAgICAgIG1fcmVm
ZXJlbmNlQml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkocmV2aXNpb24gNDY0MTYpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxh
dGVEcmF3aW5nCiBHcmFwaGljc0NvbnRleHQqIEZpbHRlckVmZmVjdDo6Z2V0RWZmZWN0Q29udGV4
dCgpCiB7CiAgICAgSW50UmVjdCBidWZmZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzdWJSZWdp
b24oKSk7Ci0gICAgbV9lZmZlY3RCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlclJl
Y3Quc2l6ZSgpLCBmYWxzZSk7CisgICAgbV9lZmZlY3RCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGJ1ZmZlclJlY3Quc2l6ZSgpLCBMaW5lYXJSR0IpOwogICAgIHJldHVybiBtX2VmZmVjdEJ1
ZmZlci0+Y29udGV4dCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHJldmlzaW9uIDQ2NDE2KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NiArNDAsNyBAQAogI2luY2x1ZGUgPFFJbWFnZVdyaXRlcj4KICNpbmNsdWRlIDxRUGFpbnRlcj4K
ICNpbmNsdWRlIDxRUGl4bWFwPgorI2luY2x1ZGUgPG1hdGguaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC02Nyw3ICs2OCw3IEBAIEltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRh
KGNvbnN0IEkKICAgICBwYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBv
c2l0aW9uTW9kZV9Tb3VyY2VPdmVyKTsKIH0KIAotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNv
bnN0IEludFNpemUmIHNpemUsIGJvb2wgZ3JheVNjYWxlLCBib29sJiBzdWNjZXNzKQorSW1hZ2VC
dWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIEltYWdlQ29sb3JTcGFjZSBp
bWFnZUNvbG9yU3BhY2UsIGJvb2wmIHN1Y2Nlc3MpCiAgICAgOiBtX2RhdGEoc2l6ZSkKICAgICAs
IG1fc2l6ZShzaXplKQogewpAQCAtOTgsNiArOTksMzIgQEAgSW1hZ2UqIEltYWdlQnVmZmVyOjpp
bWFnZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CiB9CiAKK3ZvaWQgSW1hZ2VC
dWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBWZWN0b3I8aW50PiYgbG9v
a1VwVGFibGUpCit7CisgICAgYm9vbCBpc1BhaW50aW5nID0gbV9kYXRhLm1fcGFpbnRlci0+aXNB
Y3RpdmUoKTsKKyAgICBpZiAoaXNQYWludGluZykKKyAgICAgICAgbV9kYXRhLm1fcGFpbnRlci0+
ZW5kKCk7CisKKyAgICBRSW1hZ2UgaW1hZ2UgPSBtX2RhdGEubV9waXhtYXAudG9JbWFnZSgpLmNv
bnZlcnRUb0Zvcm1hdChRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOworICAgIEFTU0VSVCghaW1hZ2Uu
aXNOdWxsKCkpOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX3NpemUuaGVpZ2h0KCk7ICsr
eSkgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1fc2l6ZS53aWR0aCgpOyB4KyspIHsK
KyAgICAgICAgICAgIFFSZ2IgdmFsdWUgPSBpbWFnZS5waXhlbCh4LCB5KTsKKyAgICAgICAgICAg
IHZhbHVlID0gcVJnYmEobG9va1VwVGFibGVbcVJlZCh2YWx1ZSldLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb29rVXBUYWJsZVtxR3JlZW4odmFsdWUpXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9va1VwVGFibGVbcUJsdWUodmFsdWUpXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9va1VwVGFibGVbcUFscGhhKHZhbHVlKV0pOworICAgICAgICAgICAgaW1hZ2Uuc2V0
UGl4ZWwoeCwgeSwgdmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9kYXRhLm1fcGl4
bWFwID0gUVBpeG1hcDo6ZnJvbUltYWdlKGltYWdlKTsKKworICAgIGlmIChpc1BhaW50aW5nKQor
ICAgICAgICBtX2RhdGEubV9wYWludGVyLT5iZWdpbigmbV9kYXRhLm1fcGl4bWFwKTsKK30KKwog
UGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoY29uc3QgSW50
UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcmVzdWx0ID0g
SW1hZ2VEYXRhOjpjcmVhdGUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0aFF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdGhRdC5jcHAJKHJldmlzaW9uIDQ2NDE2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXRoUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Miw3ICs5Miw3IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHAK
IAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdHJ5IHRvIHVzZSBhICdzaGFyZWQgQ29udGV4dCcg
aW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBJbWFnZUJ1ZmZlcgogICAgIC8vIG9uIGVhY2ggY2Fs
bC4KLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNjcmF0Y2hJbWFnZSA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoSW50U2l6ZSgxLCAxKSwgZmFsc2UpOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc2Ny
YXRjaEltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDEsIDEpKTsKICAgICBHcmFw
aGljc0NvbnRleHQqIGdjID0gc2NyYXRjaEltYWdlLT5jb250ZXh0KCk7CiAgICAgUVBhaW50ZXJQ
YXRoU3Ryb2tlciBzdHJva2U7CiAgICAgYXBwbGllci0+c3Ryb2tlU3R5bGUoZ2MpOwpAQCAtMTI0
LDcgKzEyNCw3IEBAIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2sKIHsK
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRyeSB0byB1c2UgYSAnc2hhcmVkIENvbnRleHQnIGlu
c3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgSW1hZ2VCdWZmZXIKICAgICAvLyBvbiBlYWNoIGNhbGwu
Ci0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBzY3JhdGNoSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKEludFNpemUoMSwgMSksIGZhbHNlKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNjcmF0
Y2hJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxLCAxKSk7CiAgICAgR3JhcGhp
Y3NDb250ZXh0KiBnYyA9IHNjcmF0Y2hJbWFnZS0+Y29udGV4dCgpOwogICAgIFFQYWludGVyUGF0
aFN0cm9rZXIgc3Ryb2tlOwogICAgIGlmIChhcHBsaWVyKSB7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24g
NDY0MTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMp
IDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiAKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQpAQCAtNTMsNyArNTQsNyBAQCBJbWFnZUJ1ZmZlckRhdGE6OkltYWdl
QnVmZmVyRGF0YShjb25zdCBJCiB7CiB9CiAKLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25z
dCBJbnRTaXplJiBzaXplLCBib29sIGdyYXlTY2FsZSwgYm9vbCYgc3VjY2VzcykKK0ltYWdlQnVm
ZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBJbWFnZUNvbG9yU3BhY2UgaW1h
Z2VDb2xvclNwYWNlLCBib29sJiBzdWNjZXNzKQogICAgIDogbV9kYXRhKHNpemUpCiAgICAgLCBt
X3NpemUoc2l6ZSkKIHsKQEAgLTEwMCw2ICsxMDEsMjMgQEAgSW1hZ2UqIEltYWdlQnVmZmVyOjpp
bWFnZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7CiB9CiAKK3ZvaWQgSW1hZ2VC
dWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBWZWN0b3I8aW50PiYgbG9v
a1VwVGFibGUpCit7CisgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9ICpjb250ZXh0KCktPnBs
YXRmb3JtQ29udGV4dCgpLT5iaXRtYXAoKTsKKyAgICBBU1NFUlQoYml0bWFwLmNvbmZpZygpID09
IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZyk7CisgICAgU2tBdXRvTG9ja1BpeGVscyBiaXRt
YXBMb2NrKGJpdG1hcCk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX3NpemUuaGVpZ2h0KCk7
ICsreSkgeworICAgICAgICB1aW50MzJfdCogc3JjUm93ID0gYml0bWFwLmdldEFkZHIzMigwLCB5
KTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX3NpemUud2lkdGgoKTsgKyt4KSB7Cisg
ICAgICAgICAgICBTa0NvbG9yIGNvbG9yID0gU2tQTUNvbG9yVG9Db2xvcihzcmNSb3dbeF0pOwor
ICAgICAgICAgICAgc3JjUm93W3hdID0gU2tQcmVNdWx0aXBseUFSR0IobG9va1VwVGFibGVbU2tD
b2xvckdldEEoY29sb3IpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvb2tVcFRhYmxlW1NrQ29sb3JHZXRSKGNvbG9yKV0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb29rVXBUYWJsZVtTa0NvbG9yR2V0Ryhjb2xvcildLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbU2tD
b2xvckdldEIoY29sb3IpXSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIFBhc3NSZWZQdHI8SW1h
Z2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGNvbnRleHQoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvU2tpYVV0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvU2tpYVV0aWxzLmNwcAkocmV2aXNpb24gNDY0MTYpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYVV0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTg5LDcgKzE4OSw3IEBAIEdyYXBoaWNzQ29udGV4dCogc2NyYXRjaENvbnRleHQoKQogewogICAg
IHN0YXRpYyBJbWFnZUJ1ZmZlciogc2NyYXRjaCA9IDA7CiAgICAgaWYgKCFzY3JhdGNoKQotICAg
ICAgICBzY3JhdGNoID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDEsIDEpLCBmYWxzZSku
cmVsZWFzZSgpOworICAgICAgICBzY3JhdGNoID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXpl
KDEsIDEpKS5yZWxlYXNlKCk7CiAgICAgLy8gV2UgZG9uJ3QgYm90aGVyIGNoZWNraW5nIGZvciBm
YWlsdXJlIGNyZWF0aW5nIHRoZSBJbWFnZUJ1ZmZlciwgc2luY2Ugb3VyCiAgICAgLy8gSW1hZ2VC
dWZmZXIgaW5pdGlhbGl6ZXIgd29uJ3QgZmFpbC4KICAgICByZXR1cm4gc2NyYXRjaC0+Y29udGV4
dCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVy
V3guY3BwCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gv
SW1hZ2VCdWZmZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgSW1hZ2VC
dWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSQogewogfQogCi1JbWFnZUJ1ZmZlcjo6
SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYsIGJvb2wgZ3JheVNjYWxlLCBib29sJiBzdWNjZXNz
KSA6IAorSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmLCBJbWFnZUNvbG9y
U3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBib29sJiBzdWNjZXNzKSA6IAogICAgIG1fZGF0YShJbnRT
aXplKCkpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
bWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
bWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOTEsNyAr
MzkxLDcgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQoU2Nyb2xsYmFyKgogICAgICAg
ICBidWZmZXJSZWN0LmludGVyc2VjdChkYW1hZ2VSZWN0KTsKICAgICAgICAgYnVmZmVyUmVjdC5t
b3ZlKC1zY3JvbGxiYXItPmZyYW1lUmVjdCgpLngoKSwgLXNjcm9sbGJhci0+ZnJhbWVSZWN0KCku
eSgpKTsKICAgICAgICAgCi0gICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlclJlY3Quc2l6ZSgpLCBmYWxzZSk7CisgICAgICAg
IE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1
ZmZlclJlY3Quc2l6ZSgpKTsKICAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDQ2NDE2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTgsNyArMzU4LDcg
QEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZQogICAgICAgICBtYXNr
UmVjdC5pbnRlcnNlY3QocGFpbnRJbmZvLnJlY3QpOwogICAgICAgICAKICAgICAgICAgLy8gTm93
IGNyZWF0ZSB0aGUgbWFzay4KLSAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2Ug
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1hc2tSZWN0LnNpemUoKSwgZmFsc2UpOworICAgICAgICBP
d25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobWFza1Jl
Y3Quc2l6ZSgpKTsKICAgICAgICAgaWYgKCFtYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAkocmV2aXNpb24gNDY0MTYpCisr
KyBXZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3
ICsxNTQsNyBAQCBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBTVkdNYXNrRWxlbWVudDo6CiAgICAg
aWYgKGltYWdlU2l6ZS5oZWlnaHQoKSA8IHN0YXRpY19jYXN0PGludD4oaGVpZ2h0VmFsdWUpKQog
ICAgICAgICBoZWlnaHRWYWx1ZSA9IGltYWdlU2l6ZS5oZWlnaHQoKTsKIAotICAgIE93blB0cjxJ
bWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVNpemUsIGZh
bHNlKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoaW1hZ2VTaXplKTsKICAgICBpZiAoIW1hc2tJbWFnZSkKICAgICAgICAgcmV0dXJuIDA7
CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ2NDE2KQorKysg
V2ViQ29yZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQs
NyArMjE0LDcgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6YnVpbGRQYXR0ZXJuKGNvbgogICAg
IEludFNpemUgaW1hZ2VTaXplKGxyb3VuZGYocGF0dGVybkJvdW5kYXJpZXNJbmNsdWRpbmdPdmVy
Zmxvdy53aWR0aCgpKSwgbHJvdW5kZihwYXR0ZXJuQm91bmRhcmllc0luY2x1ZGluZ092ZXJmbG93
LmhlaWdodCgpKSk7CiAgICAgY2xhbXBJbWFnZUJ1ZmZlclNpemVUb1ZpZXdwb3J0KGRvY3VtZW50
KCktPnZpZXcoKSwgaW1hZ2VTaXplKTsKIAotICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gcGF0dGVy
bkltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVNpemUsIGZhbHNlKTsKKyAgICBPd25Q
dHI8SW1hZ2VCdWZmZXI+IHBhdHRlcm5JbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VT
aXplKTsKIAogICAgIGlmICghcGF0dGVybkltYWdlKQogICAgICAgICByZXR1cm47CkluZGV4OiBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDcgKzIxMSw3IEBA
IE5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckMKICAgICBpZiAoIW1fZnJh
bWVDYWNoZSkgewogICAgICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICBtX2ZyYW1lQ2FjaGUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgZmFsc2Up
OworICAgICAgICBtX2ZyYW1lQ2FjaGUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSk7CiAg
ICAgICAgIGlmICghbV9mcmFtZUNhY2hlKSAvLyBmYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UKICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZW5kZXJTdWJ0cmVlVG9JbWFnZShtX2ZyYW1l
Q2FjaGUuZ2V0KCksIG1fcGFnZS0+bWFpbkZyYW1lKCktPmNvbnRlbnRSZW5kZXJlcigpKTsKSW5k
ZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuY3Bw
CShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1BhaW50U2VydmVy
R3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgc3RhdGljIGlu
bGluZSBib29sIGNyZWF0ZU1hc2tBbmRTd2FwQ29udAogICAgIEludFNpemUgbWFza1NpemUobWFz
a1JlY3Qud2lkdGgoKSwgbWFza1JlY3QuaGVpZ2h0KCkpOwogICAgIGNsYW1wSW1hZ2VCdWZmZXJT
aXplVG9WaWV3cG9ydChvYmplY3QtPnZpZXcoKS0+ZnJhbWVWaWV3KCksIG1hc2tTaXplKTsKIAot
ICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSht
YXNrU2l6ZSwgZmFsc2UpOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShtYXNrU2l6ZSk7CiAKICAgICBpZiAoIW1hc2tJbWFnZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2
ZXJQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWlu
dFNlcnZlclBhdHRlcm4uY3BwCShyZXZpc2lvbiA0NjQxNikKKysrIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR1BhaW50U2VydmVyUGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsx
MTgsNyBAQCBib29sIFNWR1BhaW50U2VydmVyUGF0dGVybjo6c2V0dXAoR3JhcGhpCiAgICAgICAg
IC8vIERyYXcgdGhlIGZpcnN0IGNlbGwgb2YgdGhlIHBhdHRlcm4gbWFudWFsbHkgdG8gc3VwcG9y
dCBvdmVyZmxvdz0idmlzaWJsZSIgb24gYWxsIHBsYXRmb3Jtcy4KICAgICAgICAgaW50IHRpbGVX
aWR0aCA9IHN0YXRpY19jYXN0PGludD4ocGF0dGVybkJvdW5kYXJpZXMoKS53aWR0aCgpICsgMC41
Zik7CiAgICAgICAgIGludCB0aWxlSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwYXR0ZXJuQm91
bmRhcmllcygpLmhlaWdodCgpICsgMC41Zik7Ci0gICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4g
dGlsZUltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKHRpbGVXaWR0aCwgdGlsZUhl
aWdodCksIGZhbHNlKTsKKyAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2UgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUodGlsZVdpZHRoLCB0aWxlSGVpZ2h0KSk7CiAgIAog
ICAgICAgICBHcmFwaGljc0NvbnRleHQqIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNv
bnRleHQoKTsKIApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1Jlc291cmNlRmlsdGVy
LmNwcAkocmV2aXNpb24gNDY0MTYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdSZXNvdXJj
ZUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgdm9pZCBTVkdSZXNv
dXJjZUZpbHRlcjo6cHJlcGFyZUZpbHRlcihHcgogICAgIC8vIERyYXcgdGhlIGNvbnRlbnQgb2Yg
dGhlIGN1cnJlbnQgZWxlbWVudCBhbmQgaXQncyBjaGlsZHMgdG8gYSBpbWFnZUJ1ZmZlciB0byBn
ZXQgdGhlIFNvdXJjZUdyYXBoaWMuCiAgICAgLy8gVGhlIHNpemUgb2YgdGhlIFNvdXJjZUdyYXBo
aWMgaXMgY2xpcHBlZCB0byB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyUmVnaW9uLgogICAgIEludFJl
Y3QgYnVmZmVyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcHBlZFNvdXJjZVJlY3QpOwotICAg
IE93blB0cjxJbWFnZUJ1ZmZlcj4gc291cmNlR3JhcGhpYyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1
ZmZlclJlY3Quc2l6ZSgpLCBmYWxzZSkpOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc291cmNl
R3JhcGhpYyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlclJlY3Quc2l6ZSgpLCBMaW5lYXJSR0Ip
KTsKICAgICAKICAgICBpZiAoIXNvdXJjZUdyYXBoaWMuZ2V0KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTEwNiw2ICsxMDYsOSBAQCB2b2lkIFNWR1Jlc291cmNlRmlsdGVyOjphcHBseUZpbHRlcihH
cmFwCiAKICAgICBjb250ZXh0ID0gbV9zYXZlZENvbnRleHQ7CiAgICAgbV9zYXZlZENvbnRleHQg
PSAwOworI2lmICFQTEFURk9STShDRykKKyAgICBtX3NvdXJjZUdyYXBoaWNCdWZmZXItPnRyYW5z
Zm9ybUNvbG9yU3BhY2UoRGV2aWNlUkdCLCBMaW5lYXJSR0IpOworI2VuZGlmCiAKICAgICBGaWx0
ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBtX2ZpbHRlckJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKIApA
QCAtMTEzLDggKzExNiwxMyBAQCB2b2lkIFNWR1Jlc291cmNlRmlsdGVyOjphcHBseUZpbHRlcihH
cmFwCiAgICAgICAgIG1fZmlsdGVyLT5zZXRTb3VyY2VJbWFnZShtX3NvdXJjZUdyYXBoaWNCdWZm
ZXIucmVsZWFzZSgpKTsKICAgICAgICAgbGFzdEVmZmVjdC0+YXBwbHkobV9maWx0ZXIuZ2V0KCkp
OwogCi0gICAgICAgIGlmIChsYXN0RWZmZWN0LT5yZXN1bHRJbWFnZSgpKQotICAgICAgICAgICAg
Y29udGV4dC0+ZHJhd0ltYWdlKGxhc3RFZmZlY3QtPnJlc3VsdEltYWdlKCktPmltYWdlKCksIGxh
c3RFZmZlY3QtPnN1YlJlZ2lvbigpKTsKKyAgICAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gbGFzdEVmZmVjdC0+cmVzdWx0SW1hZ2UoKTsKKyAgICAgICAgaWYgKHJlc3VsdEltYWdlKSB7
CisjaWYgIVBMQVRGT1JNKENHKQorICAgICAgICAgICAgcmVzdWx0SW1hZ2UtPnRyYW5zZm9ybUNv
bG9yU3BhY2UoTGluZWFyUkdCLCBEZXZpY2VSR0IpOworI2VuZGlmCisgICAgICAgICAgICBjb250
ZXh0LT5kcmF3SW1hZ2UocmVzdWx0SW1hZ2UtPmltYWdlKCksIGxhc3RFZmZlY3QtPnN1YlJlZ2lv
bigpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1fc291cmNlR3JhcGhpY0J1ZmZlci5jbGVh
cigpOwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR1Jlc291cmNlTWFza2VyLmNwcAko
cmV2aXNpb24gNDY0MTYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdSZXNvdXJjZU1hc2tl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBTVkdSZXNvdXJjZU1h
c2tlcjo6YXBwbHlNYXNrKEdyYXBoaQogICAgIEludFJlY3QgaW50SW1hZ2VSZWN0KDAsIDAsIGlt
YWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpOwogCiAgICAgLy8gQ3JlYXRlIG5l
dyBJbWFnZUJ1ZmZlciB0byBhcHBseSBsdW1pbmFuY2UKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+
IGx1bWluYW5jZWRJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VTaXplLCBmYWxzZSk7
CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBsdW1pbmFuY2VkSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGltYWdlU2l6ZSk7CiAgICAgaWYgKCFsdW1pbmFuY2VkSW1hZ2UpCiAgICAgICAgIHJl
dHVybjsKIApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRVRpbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVUaWxlLmNw
cAkocmV2aXNpb24gNDY0MTYpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
VGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBGRVRpbGU6OmFw
cGx5KEZpbHRlciogZmlsdGVyKQogICAgIGlmIChtX2luLT5pc1NvdXJjZUlucHV0KCkpCiAgICAg
ICAgIHRpbGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmaWx0ZXItPmZpbHRlclJlZ2lvbigpKTsK
IAotICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gdGlsZUltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZSh0aWxlUmVjdC5zaXplKCksIGZhbHNlKTsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHRpbGVJ
bWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGlsZVJlY3Quc2l6ZSgpKTsKICAgICBHcmFwaGlj
c0NvbnRleHQqIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKICAgICB0
aWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwg
SW50UG9pbnQoKSk7CiAgICAgUmVmUHRyPFBhdHRlcm4+IHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVh
dGUodGlsZUltYWdlLT5pbWFnZSgpLCB0cnVlLCB0cnVlKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>