<?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>47226</bug_id>
          
          <creation_ts>2010-10-05 15:59:44 -0700</creation_ts>
          <short_desc>Cache CGColor as we do NSColor</short_desc>
          <delta_ts>2010-10-06 17:20:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ap</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>289948</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-05 15:59:44 -0700</bug_when>
    <thetext>Cache CGColor as we do NSColor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289975</commentid>
    <comment_count>1</comment_count>
      <attachid>69866</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-05 16:49:55 -0700</bug_when>
    <thetext>Created attachment 69866
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290440</commentid>
    <comment_count>2</comment_count>
      <attachid>69866</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-06 10:55:09 -0700</bug_when>
    <thetext>Comment on attachment 69866
Patch

+        This fixes performance problems on certain web pages that use

I assume you can&apos;t mention an example. Can a manual test be made?

+			developmentRegion = English;

Please don&apos;t land this.


-    CGColorRef debugColor = createCGColor(Color(255, 0, 0, 204));
-    m_rootLayer-&gt;setBackgroundColor(debugColor);
-    CGColorRelease(debugColor);
+    m_rootLayer-&gt;setBackgroundColor(cachedCGColor(Color(255, 0, 0, 204), DeviceColorSpace));

Even though it&apos;s inside ifdef NDEBUG, the &quot;debugColor&quot; name seemed helpful. And I don&apos;t think that we should be caching it.


     if (m_owner-&gt;showDebugBorders()) {
-        CGColorRef borderColor = createCGColor(Color(128, 0, 128, 180));
-        CACFLayerSetBorderColor(newLayer.get(), borderColor);
-        CGColorRelease(borderColor);
+        CACFLayerSetBorderColor(newLayer.get(), cachedCGColor(Color(128, 0, 128, 180), DeviceColorSpace));

Ditto.

I don&apos;t know a lo about CGColor, but since this just applies the same technique that we used with NSColors, r=me.

I&apos;m wondering why we can&apos;t store the platform color inside Color, and have to iterate over the vector in a disconnected cache. Are there so many Color objects that it&apos;s a memory use issue? Or are they transient, so storing the CGColor inside does no good?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290446</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-06 11:04:54 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 69866 [details])
&gt; +        This fixes performance problems on certain web pages that use
&gt; 
&gt; I assume you can&apos;t mention an example. Can a manual test be made?

I could mention an example.

&gt; +            developmentRegion = English;
&gt; 
&gt; Please don&apos;t land this.

Are you sure? Now that everyone can get the new Xcode, maybe we should start checking this in. This was different before because many Xcode users didn’t have access to the new Xcode, but now everyone can get it from Software Update.

&gt; -    CGColorRef debugColor = createCGColor(Color(255, 0, 0, 204));
&gt; -    m_rootLayer-&gt;setBackgroundColor(debugColor);
&gt; -    CGColorRelease(debugColor);
&gt; +    m_rootLayer-&gt;setBackgroundColor(cachedCGColor(Color(255, 0, 0, 204), DeviceColorSpace));
&gt; 
&gt; Even though it&apos;s inside ifdef NDEBUG, the &quot;debugColor&quot; name seemed helpful. And I don&apos;t think that we should be caching it.

I’d be happy to add the named local variable back for documentation/clarity purposes.

But I don’t agree about the caching. After my patch don’t have a non-cached API for making CG colors out of Color objects and I don’t think we need a non-cached alternative. I chose to put “cached” in the name of the function so it woud be easier to understand there is no need to CFRelease the function result, but that might put undue emphasis on the caching.

&gt;      if (m_owner-&gt;showDebugBorders()) {
&gt; -        CGColorRef borderColor = createCGColor(Color(128, 0, 128, 180));
&gt; -        CACFLayerSetBorderColor(newLayer.get(), borderColor);
&gt; -        CGColorRelease(borderColor);
&gt; +        CACFLayerSetBorderColor(newLayer.get(), cachedCGColor(Color(128, 0, 128, 180), DeviceColorSpace));
&gt; 
&gt; Ditto.

Sure I’ll add the name back.

&gt; I&apos;m wondering why we can&apos;t store the platform color inside Color, and have to iterate over the vector in a disconnected cache. Are there so many Color objects that it&apos;s a memory use issue? Or are they transient, so storing the CGColor inside does no good?

Color is simply an RGB value plus a validity boolean. I don’t think we should change it into a larger object that holds platform color handles as well. The cache is shared between multiple Color objects, so adding a platform handle wouldn’t eliminate the need for a cache.

I suppose the answer to one of your questions is yes. They are transient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290456</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-06 11:11:34 -0700</bug_when>
    <thetext>&gt; &gt; +            developmentRegion = English;
&gt; &gt; 
&gt; &gt; Please don&apos;t land this.
&gt; 
&gt; Are you sure? Now that everyone can get the new Xcode, maybe we should start checking this in.

We should probably communicate this on webkit-dev. Also, I&apos;m not sure how many frequent contributors are still on Leopard.

&gt; But I don’t agree about the caching.

I think it&apos;s moderately valuable to have the same colors in the cache in both debug and release builds. It seems that these are the only two functions that break it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290708</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-06 17:16:17 -0700</bug_when>
    <thetext>Committed r69259: &lt;http://trac.webkit.org/changeset/69259&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290712</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-10-06 17:20:02 -0700</bug_when>
    <thetext>Do you have more information about the performance issue? What kind of content show it?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69866</attachid>
            <date>2010-10-05 16:49:55 -0700</date>
            <delta_ts>2010-10-06 10:55:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47226-20101005164954.patch</filename>
            <type>text/plain</type>
            <size>29182</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTE1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMTAtMTAtMDUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhY2hl
IENHQ29sb3IgYXMgd2UgZG8gTlNDb2xvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDcyMjYKKworICAgICAgICBUaGlzIGZpeGVzIHBlcmZvcm1hbmNl
IHByb2JsZW1zIG9uIGNlcnRhaW4gd2ViIHBhZ2VzIHRoYXQgdXNlCisgICAgICAgIG11bHRpcGxl
IGNvbG9ycy4gT25jZSBpbiB0aGUgcGFzdCB3ZSB3ZXJlIHVzaW5nIE5TQ29sb3IuIE5vdyB0aGF0
CisgICAgICAgIHdlIGFyZSB1c2luZyBDR0NvbG9yLCB3ZSBuZWVkIHRoZSBzYW1lIHNvcnQgb2Yg
Y2FjaGluZyB0aGF0IHdlIGhhdmUKKyAgICAgICAgZm9yIE5TQ29sb3IuCisKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZCBHcmFwaGljc0NvbnRleHRDRy5o
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDogUmVwbGFjZSBjcmVhdGVD
R0NvbG9yIHdpdGggY2FjaGVkQ0dDb2xvci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0NvbG9yQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVkQ0dDb2xvclNwYWNlKTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpsZWFrQ0dDb2xvcik6IEFkZGVkLiAKKyAgICAgICAg
KFdlYkNvcmU6OmNhY2hlZENHQ29sb3IpOiBBZGRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldENH
RmlsbENvbG9yKTogVXNlIGNhY2hlZENHQ29sb3IuCisgICAgICAgIChXZWJDb3JlOjpzZXRDR1N0
cm9rZUNvbG9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU2hhZG93KTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oOgorICAgICAgICBNb3ZlZCB0aGUg
Y29sb3Igc3BhY2UgZnVuY3Rpb25zIGhlcmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUNHLmNwcDogVHdlYWtlZCBoZWFkZXJzIGFuZCBmb3JtYXR0aW5nLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tOiBSZW1vdmVkIHRoZSBjcmVh
dGVDR0NvbG9yCisgICAgICAgIGZ1bmN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdGb2N1
c1JpbmdUb0NvbnRleHQpOiBSZW1vdmVkIGlubmFwcHJvcHJpYXRlIHVzZSBvZgorICAgICAgICBS
ZXRhaW5QdHIgZm9yIHRoZSBhcmd1bWVudHMgdG8gdGhpcyBmdW5jdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6IFVzZSBjYWNoZWRDR0NvbG9y
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbToK
KyAgICAgICAgKFdlYkNvcmU6OnNldExheWVyQm9yZGVyQ29sb3IpOiBVc2UgY2FjaGVkQ0dDb2xv
ci4KKyAgICAgICAgKFdlYkNvcmU6OnNldExheWVyQmFja2dyb3VuZENvbG9yKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6IERpdHRv
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyQ0FDRi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpzZXRMYXllckJvcmRlckNvbG9yKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpzZXRMYXllckJhY2tncm91bmRDb2xvcik6IERpdHRvLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9XS0NBQ0ZMYXllclJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldLQ0FDRkxheWVyUmVuZGVyZXI6OldLQ0FDRkxheWVyUmVuZGVyZXIpOiBEaXR0by4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vV2ViVGlsZWRMYXllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJUaWxlZExheWVyOjphZGRUaWxlKTogRGl0dG8uCisKIDIwMTAtMTAt
MDUgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFRvciBBcm5lIFZlc3Riw7guCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gNjkxNTApCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjY1NCw2ICsyNjU0LDcgQEAK
IAkJOTMzQTE0QjkwQjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2ZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNBMTRCNzBCN0QxRDUyMDBBNTNG
RkQgLyogSlNUZXh0RXZlbnQuaCAqLzsgfTsKIAkJOTM0NDJDOUUwRDJCMzM1QzAwMzM4RkY5IC8q
IEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MzQ0MkM5RDBEMkIzMzVDMDAzMzhGRjkgLyogSFRNTFRhYmxlUm93
c0NvbGxlY3Rpb24uaCAqLzsgfTsKIAkJOTM0NDJDQTAwRDJCMzM2MDAwMzM4RkY5IC8qIEhUTUxU
YWJsZVJvd3NDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzNDQyQzlGMEQyQjMzNjAwMDMzOEZGOSAvKiBIVE1MVGFibGVSb3dzQ29s
bGVjdGlvbi5jcHAgKi87IH07CisJCTkzNDkwN0U0MTI1QkJCQzgwMDdGMjNBMCAvKiBHcmFwaGlj
c0NvbnRleHRDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTM0OTA3RTMxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmggKi87IH07
CiAJCTkzNENDMEUxMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzRDQzBERjBFRDM5RDZGMDBB
NjU4RjIgLyogU2NyaXB0VmFsdWUuY3BwICovOyB9OwogCQk5MzRDQzBFMjBFRDM5RDZGMDBBNjU4
RjIgLyogU2NyaXB0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzNENDMEUwMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzNENDMTBBMEVE
QjIyMzkwMEE2NThGMiAvKiBTY3JpcHRTb3VyY2VDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzRDQzEwOTBFREIyMjM5MDBBNjU4RjIgLyogU2Ny
aXB0U291cmNlQ29kZS5oICovOyB9OwpAQCAtODY3NCw2ICs4Njc1LDcgQEAKIAkJOTMzQTE0Qjcw
QjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTVGV4dEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
NDQyQzlEMEQyQjMzNUMwMDMzOEZGOSAvKiBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzQ0MkM5RjBEMkIzMzYwMDAzMzhGRjkgLyog
SFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3NDb250ZXh0Q0cu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0Q0cuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM0Q0MwREYwRUQzOUQ2RjAwQTY1OEYyIC8q
IFNjcmlwdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNj
cmlwdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM0Q0MwRTAwRUQz
OUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNjcmlwdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNEND
MTA5MEVEQjIyMzkwMEE2NThGMiAvKiBTY3JpcHRTb3VyY2VDb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFNvdXJjZUNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE2MjU1LDYgKzE2MjU3LDcgQEAKIAkJCQlCQzUzQzYwQTBEQTU2Q0YxMDAy
MUVCNUQgLyogR3JhZGllbnRDRy5jcHAgKi8sCiAJCQkJNkUyMUM2QzExMTI2MzM5OTAwQTdCRTAy
IC8qIEdyYXBoaWNzQ29udGV4dDNEQ0cuY3BwICovLAogCQkJCUIyRUQ5NzcwMEIxRjU1Q0UwMDI1
N0QwRiAvKiBHcmFwaGljc0NvbnRleHRDRy5jcHAgKi8sCisJCQkJOTM0OTA3RTMxMjVCQkJDODAw
N0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmggKi8sCiAJCQkJQTgwRDY3MDcwRTlFOURFQjAw
RTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8sCiAJCQkJQjJB
MTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAogCQkJCUJDQTk3
OTE2MTIxNUQwNTUwMDVDNDg1QyAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLywKQEAgLTIwOTYxLDYg
KzIwOTY0LDcgQEAKIAkJCQkwODE2NjhENDEyNTYwM0JGMDA2RjI1REUgLyogU1ZHVGV4dENodW5r
QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgxNjY4REExMjU2MDNENTAwNkYyNURFIC8q
IFNWR1RleHRMYXlvdXRFbmdpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRjhFMTFBMTI1NjU5
MjYwMDIzMEZGNyAvKiBQcm94eVNlcnZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTM0OTA3RTQx
MjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTIxMDIwLDYgKzIxMDI0LDcgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZp
Z3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3Vy
YXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87CiAJCQljb21wYXRpYmlsaXR5
VmVyc2lvbiA9ICJYY29kZSAyLjQiOworCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwog
CQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJ
RW5nbGlzaCwKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHJldmlzaW9uIDY5MTUw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy02IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPHd0
Zi91bmljb2RlL1VuaWNvZGUuaD4KIAogI2lmIFBMQVRGT1JNKENHKQorI2luY2x1ZGUgIkNvbG9y
U3BhY2UuaCIKIHR5cGVkZWYgc3RydWN0IENHQ29sb3IqIENHQ29sb3JSZWY7CiAjZW5kaWYKIApA
QCAtMTY5LDcgKzE3MCw3IEBAIENvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKHVuc2ln
bmUKIHVuc2lnbmVkIHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKGNvbnN0IENvbG9yJik7CiAK
ICNpZiBQTEFURk9STShDRykKLUNHQ29sb3JSZWYgY3JlYXRlQ0dDb2xvcihjb25zdCBDb2xvciYp
OworQ0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CiAj
ZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiA2OTE1MCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBQ
TEFURk9STShDRykKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8
QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CkBAIC02OSwzNyArNzAs
NzIgQEAgQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCiAgICAgbV92YWxpZCA9IHRydWU7
CiB9CiAKLSNpZiBPUyhXSU5ET1dTKQorc3RhdGljIGlubGluZSBDR0NvbG9yU3BhY2VSZWYgY2Fj
aGVkQ0dDb2xvclNwYWNlKENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBzd2l0Y2ggKGNv
bG9yU3BhY2UpIHsKKyAgICBjYXNlIERldmljZUNvbG9yU3BhY2U6CisgICAgICAgIHJldHVybiBk
ZXZpY2VSR0JDb2xvclNwYWNlUmVmKCk7CisgICAgY2FzZSBzUkdCQ29sb3JTcGFjZToKKyAgICAg
ICAgcmV0dXJuIHNSR0JDb2xvclNwYWNlUmVmKCk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCk7Cit9CisKK3N0YXRp
YyBDR0NvbG9yUmVmIGxlYWtDR0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlKQoreworICAgIENHRmxvYXQgY29tcG9uZW50c1s0XTsKKyAgICBjb2xvci5nZXRS
R0JBKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHNbMl0sIGNvbXBvbmVu
dHNbM10pOworICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKGNhY2hlZENHQ29sb3JTcGFjZShjb2xv
clNwYWNlKSwgY29tcG9uZW50cyk7Cit9CiAKLUNHQ29sb3JSZWYgY3JlYXRlQ0dDb2xvcihjb25z
dCBDb2xvciYgYykKK3RlbXBsYXRlPENvbG9yU3BhY2UgY29sb3JTcGFjZT4gc3RhdGljIENHQ29s
b3JSZWYgY2FjaGVkQ0dDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgQ0dDb2xvclJl
ZiBjb2xvciA9IE5VTEw7Ci0jaWZkZWYgT0JTT0xFVEVfQ09MT1JTWU5DX0FQSQotICAgIENNUHJv
ZmlsZVJlZiBwcm9mID0gTlVMTDsKLSAgICBDTUdldFN5c3RlbVByb2ZpbGUoJnByb2YpOwotICAg
IFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IHJnYlNwYWNlKEFkb3B0Q0YsIENHQ29sb3JTcGFj
ZUNyZWF0ZVdpdGhQbGF0Zm9ybUNvbG9yU3BhY2UocHJvZikpOwotI2Vsc2UKLSAgICBDb2xvclN5
bmNQcm9maWxlUmVmIHByb2YgPSBDb2xvclN5bmNQcm9maWxlQ3JlYXRlV2l0aERpc3BsYXlJRCgw
KTsKLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiByZ2JTcGFjZShBZG9wdENGLCBDR0Nv
bG9yU3BhY2VDcmVhdGVXaXRoUGxhdGZvcm1Db2xvclNwYWNlKGNvbnN0X2Nhc3Q8dm9pZCo+KHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KHByb2YpKSkpOwotI2VuZGlmCi0KLSAgICBpZiAo
cmdiU3BhY2UpIHsKLSAgICAgICAgQ0dGbG9hdCBjb21wb25lbnRzWzRdID0geyBzdGF0aWNfY2Fz
dDxDR0Zsb2F0PihjLnJlZCgpKSAvIDI1NSwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oYy5ncmVlbigp
KSAvIDI1NSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxD
R0Zsb2F0PihjLmJsdWUoKSkgLyAyNTUsIHN0YXRpY19jYXN0PENHRmxvYXQ+KGMuYWxwaGEoKSkg
LyAyNTUgfTsKLSAgICAgICAgY29sb3IgPSBDR0NvbG9yQ3JlYXRlKHJnYlNwYWNlLmdldCgpLCBj
b21wb25lbnRzKTsKLSAgICB9Ci0KLSNpZmRlZiBPQlNPTEVURV9DT0xPUlNZTkNfQVBJCi0gICAg
Q01DbG9zZVByb2ZpbGUocHJvZik7Ci0jZWxzZQotICAgIGlmIChwcm9mKQotICAgICAgICBDRlJl
bGVhc2UocHJvZik7Ci0jZW5kaWYKKyAgICBzd2l0Y2ggKGNvbG9yLnJnYigpKSB7CisgICAgY2Fz
ZSBDb2xvcjo6dHJhbnNwYXJlbnQ6CisgICAgICAgIHN0YXRpYyBDR0NvbG9yUmVmIHRyYW5zcGFy
ZW50Q0dDb2xvciA9IGxlYWtDR0NvbG9yKGNvbG9yLCBjb2xvclNwYWNlKTsKKyAgICAgICAgcmV0
dXJuIHRyYW5zcGFyZW50Q0dDb2xvcjsKKyAgICBjYXNlIENvbG9yOjpibGFjazoKKyAgICAgICAg
c3RhdGljIENHQ29sb3JSZWYgYmxhY2tDR0NvbG9yID0gbGVha0NHQ29sb3IoY29sb3IsIGNvbG9y
U3BhY2UpOworICAgICAgICByZXR1cm4gYmxhY2tDR0NvbG9yOworICAgIGNhc2UgQ29sb3I6Ondo
aXRlOgorICAgICAgICBzdGF0aWMgQ0dDb2xvclJlZiB3aGl0ZUNHQ29sb3IgPSBsZWFrQ0dDb2xv
cihjb2xvciwgY29sb3JTcGFjZSk7CisgICAgICAgIHJldHVybiB3aGl0ZUNHQ29sb3I7CisgICAg
fQorCisgICAgQVNTRVJUKGNvbG9yLnJnYigpKTsKIAotICAgIHJldHVybiBjb2xvcjsKKyAgICBj
b25zdCBzaXplX3QgY2FjaGVTaXplID0gMzI7CisgICAgc3RhdGljIFJHQkEzMiBjYWNoZWRSR0JB
VmFsdWVzW2NhY2hlU2l6ZV07CisgICAgc3RhdGljIFJldGFpblB0cjxDR0NvbG9yUmVmPiogY2Fj
aGVkQ0dDb2xvcnMgPSBuZXcgUmV0YWluUHRyPENHQ29sb3JSZWY+W2NhY2hlU2l6ZV07CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhY2hlU2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChj
YWNoZWRSR0JBVmFsdWVzW2ldID09IGNvbG9yLnJnYigpKQorICAgICAgICAgICAgcmV0dXJuIGNh
Y2hlZENHQ29sb3JzW2ldLmdldCgpOworICAgIH0KKworICAgIENHQ29sb3JSZWYgbmV3Q0dDb2xv
ciA9IGxlYWtDR0NvbG9yKGNvbG9yLCBjb2xvclNwYWNlKTsKKworICAgIHN0YXRpYyBzaXplX3Qg
Y3Vyc29yOworICAgIGNhY2hlZFJHQkFWYWx1ZXNbY3Vyc29yXSA9IGNvbG9yLnJnYigpOworICAg
IGNhY2hlZENHQ29sb3JzW2N1cnNvcl0uYWRvcHRDRihuZXdDR0NvbG9yKTsKKyAgICBpZiAoKytj
dXJzb3IgPT0gY2FjaGVTaXplKQorICAgICAgICBjdXJzb3IgPSAwOworCisgICAgcmV0dXJuIG5l
d0NHQ29sb3I7CiB9CiAKLSNlbmRpZiAvLyBPUyhXSU5ET1dTKQorQ0dDb2xvclJlZiBjYWNoZWRD
R0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAg
IHN3aXRjaCAoY29sb3JTcGFjZSkgeworICAgIGNhc2UgRGV2aWNlQ29sb3JTcGFjZToKKyAgICAg
ICAgcmV0dXJuIGNhY2hlZENHQ29sb3I8RGV2aWNlQ29sb3JTcGFjZT4oY29sb3IpOworICAgIGNh
c2Ugc1JHQkNvbG9yU3BhY2U6CisgICAgICAgIHJldHVybiBjYWNoZWRDR0NvbG9yPHNSR0JDb2xv
clNwYWNlPihjb2xvcik7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBjYWNoZWRDR0NvbG9yKGNvbG9yLCBEZXZpY2VDb2xvclNwYWNlKTsKK30KIAogfQogCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAkocmV2aXNpb24gNjkxNTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAog
CiAjZGVmaW5lIF9VU0VfTUFUSF9ERUZJTkVTIDEKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgog
CiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9u
LmgiCkBAIC02OSwzMiArNjksMTQgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgQ0dDb2xvclJlZiBjcmVhdGVDR0NvbG9yV2l0aENvbG9yU3Bh
Y2UoY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCi17Ci0gICAgQ0dG
bG9hdCBjb21wb25lbnRzWzRdOwotICAgIGNvbG9yLmdldFJHQkEoY29tcG9uZW50c1swXSwgY29t
cG9uZW50c1sxXSwgY29tcG9uZW50c1syXSwgY29tcG9uZW50c1szXSk7Ci0KLSAgICBDR0NvbG9y
UmVmIGNnQ29sb3IgPSAwOwotICAgIGlmIChjb2xvclNwYWNlID09IHNSR0JDb2xvclNwYWNlKQot
ICAgICAgICBjZ0NvbG9yID0gQ0dDb2xvckNyZWF0ZShzUkdCQ29sb3JTcGFjZVJlZigpLCBjb21w
b25lbnRzKTsKLSAgICBlbHNlCi0gICAgICAgIGNnQ29sb3IgPSBDR0NvbG9yQ3JlYXRlKGRldmlj
ZVJHQkNvbG9yU3BhY2VSZWYoKSwgY29tcG9uZW50cyk7Ci0KLSAgICByZXR1cm4gY2dDb2xvcjsK
LX0KLQogc3RhdGljIHZvaWQgc2V0Q0dGaWxsQ29sb3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNv
bnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewotICAgIENHQ29sb3JS
ZWYgY2dDb2xvciA9IGNyZWF0ZUNHQ29sb3JXaXRoQ29sb3JTcGFjZShjb2xvciwgY29sb3JTcGFj
ZSk7Ci0gICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNnQ29sb3Ip
OwotICAgIENGUmVsZWFzZShjZ0NvbG9yKTsKKyAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRo
Q29sb3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihjb2xvciwgY29sb3JTcGFjZSkpOwogfQogCiBz
dGF0aWMgdm9pZCBzZXRDR1N0cm9rZUNvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBD
b2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKLSAgICBDR0NvbG9yUmVmIGNn
Q29sb3IgPSBjcmVhdGVDR0NvbG9yV2l0aENvbG9yU3BhY2UoY29sb3IsIGNvbG9yU3BhY2UpOwot
ICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNnQ29sb3IpOwot
ICAgIENGUmVsZWFzZShjZ0NvbG9yKTsKKyAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhD
b2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKGNvbG9yLCBjb2xvclNwYWNlKSk7CiB9CiAKIHN0
YXRpYyB2b2lkIHNldENHRmlsbENvbG9yU3BhY2UoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSkKQEAgLTY1OSwxNyArNjQxLDE4IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CisKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29u
dGV4dCgpOwogICAgIENvbG9yIG9sZEZpbGxDb2xvciA9IGZpbGxDb2xvcigpOwogICAgIENvbG9y
U3BhY2Ugb2xkQ29sb3JTcGFjZSA9IGZpbGxDb2xvclNwYWNlKCk7CiAKICAgICBpZiAob2xkRmls
bENvbG9yICE9IGNvbG9yIHx8IG9sZENvbG9yU3BhY2UgIT0gY29sb3JTcGFjZSkKLSAgICAgIHNl
dENHRmlsbENvbG9yKGNvbnRleHQsIGNvbG9yLCBjb2xvclNwYWNlKTsKKyAgICAgICAgc2V0Q0dG
aWxsQ29sb3IoY29udGV4dCwgY29sb3IsIGNvbG9yU3BhY2UpOwogCiAgICAgQ0dDb250ZXh0Rmls
bFJlY3QoY29udGV4dCwgcmVjdCk7CiAKICAgICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yIHx8
IG9sZENvbG9yU3BhY2UgIT0gY29sb3JTcGFjZSkKLSAgICAgIHNldENHRmlsbENvbG9yKGNvbnRl
eHQsIG9sZEZpbGxDb2xvciwgb2xkQ29sb3JTcGFjZSk7CisgICAgICAgIHNldENHRmlsbENvbG9y
KGNvbnRleHQsIG9sZEZpbGxDb2xvciwgb2xkQ29sb3JTcGFjZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50
U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJv
dHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0LCBjb25zdCBDb2xvciYgY29sb3Is
IENvbG9yU3BhY2UgY29sb3JTcGFjZSkKQEAgLTgyMSwxMyArODA0LDggQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KAogICAgIC8vIGFuZCB3ZSBzaG91bGQgdGhlcmVm
b3JlIGp1c3QgdXNlIHRoZSBkZWZhdWx0IHNoYWRvdyBjb2xvci4KICAgICBpZiAoIWNvbG9yLmlz
VmFsaWQoKSkKICAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93KGNvbnRleHQsIENHU2l6ZU1ha2Uo
eE9mZnNldCwgeU9mZnNldCksIGJsdXJSYWRpdXMpOwotICAgIGVsc2UgewotICAgICAgICBSZXRh
aW5QdHI8Q0dDb2xvclJlZj4gY29sb3JDRyhBZG9wdENGLCBjcmVhdGVDR0NvbG9yV2l0aENvbG9y
U3BhY2UoY29sb3IsIGNvbG9yU3BhY2UpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0
aENvbG9yKGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR1Np
emVNYWtlKHhPZmZzZXQsIHlPZmZzZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmx1clJhZGl1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bG9yQ0cuZ2V0KCkpOwotICAgIH0KKyAgICBlbHNlCisgICAgICAgIENHQ29udGV4dFNldFNoYWRv
d1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVNYWtlKHhPZmZzZXQsIHlPZmZzZXQpLCBibHVyUmFk
aXVzLCBjYWNoZWRDR0NvbG9yKGNvbG9yLCBjb2xvclNwYWNlKSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdyYXBo
aWNzQ29udGV4dENHX2gKKyNkZWZpbmUgR3JhcGhpY3NDb250ZXh0Q0dfaAorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisKK3R5cGVkZWYgc3RydWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xv
clNwYWNlUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NHQ29sb3JTcGFjZVJlZiBkZXZp
Y2VSR0JDb2xvclNwYWNlUmVmKCk7CitDR0NvbG9yU3BhY2VSZWYgc1JHQkNvbG9yU3BhY2VSZWYo
KTsKKworfQorCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9s
LXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaAko
cmV2aXNpb24gNjkxNTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCw2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRklYTUU6IFRoaXMgd291bGQgYmUgaW4g
R3JhcGhpY3NDb250ZXh0Q0cuaCBpZiB0aGF0IGV4aXN0ZWQuCi1DR0NvbG9yU3BhY2VSZWYgZGV2
aWNlUkdCQ29sb3JTcGFjZVJlZigpOwotCi0vLyBGSVhNRTogVGhpcyB3b3VsZCBiZSBpbiBHcmFw
aGljc0NvbnRleHRDRy5oIGlmIHRoYXQgZXhpc3RlZC4KLUNHQ29sb3JTcGFjZVJlZiBzUkdCQ29s
b3JTcGFjZVJlZigpOwotCiBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUgewog
cHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShDR0NvbnRleHRSZWYg
Y2dDb250ZXh0KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3Bw
CShyZXZpc2lvbiA2OTE1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VD
Ry5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsOCAr
MzEsNyBAQAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0Q29u
dmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgi
CiAjaW5jbHVkZSAiUERGRG9jdW1lbnRJbWFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCkBAIC0xNDEsOCArMTQwLDcgQEAgc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFn
ZVdpdGhDbwogICAgIGNhc2UgRGV2aWNlQ29sb3JTcGFjZToKICAgICAgICAgcmV0dXJuIG9yaWdp
bmFsSW1hZ2U7CiAgICAgY2FzZSBzUkdCQ29sb3JTcGFjZToKLSAgICAgICAgcmV0dXJuIFJldGFp
blB0cjxDR0ltYWdlUmVmPihBZG9wdENGLCBDR0ltYWdlQ3JlYXRlQ29weVdpdGhDb2xvclNwYWNl
KG9yaWdpbmFsSW1hZ2UsIAotICAgICAgICAgICAgc1JHQkNvbG9yU3BhY2VSZWYoKSkpOworICAg
ICAgICByZXR1cm4gUmV0YWluUHRyPENHSW1hZ2VSZWY+KEFkb3B0Q0YsIENHSW1hZ2VDcmVhdGVD
b3B5V2l0aENvbG9yU3BhY2Uob3JpZ2luYWxJbWFnZSwgc1JHQkNvbG9yU3BhY2VSZWYoKSkpOwog
ICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHJldmlzaW9uIDY5MTUwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTg4LDE0
ICs4OCwxNSBAQCBOU0NvbG9yICpuc0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAgICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBjYWNoZWRSR0JBVmFsdWVzW2NhY2hlU2l6ZV07CiAgICAgICAg
ICAgICBzdGF0aWMgUmV0YWluUHRyPE5TQ29sb3I+KiBjYWNoZWRDb2xvcnMgPSBuZXcgUmV0YWlu
UHRyPE5TQ29sb3I+W2NhY2hlU2l6ZV07CiAKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
ICE9IGNhY2hlU2l6ZTsgKytpKQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gY2Fj
aGVTaXplOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkUkdCQVZhbHVlc1tpXSA9
PSBjKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkQ29sb3JzW2ldLmdldCgpOwor
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBOU0NvbG9yICpyZXN1bHQgPSBbTlNDb2xvciBj
b2xvcldpdGhEZXZpY2VSZWQ6c3RhdGljX2Nhc3Q8Q0dGbG9hdD4oY29sb3IucmVkKCkpIC8gMjU1
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Jl
ZW46c3RhdGljX2Nhc3Q8Q0dGbG9hdD4oY29sb3IuZ3JlZW4oKSkgLyAyNTUKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmx1ZTpzdGF0aWNfY2Fz
dDxDR0Zsb2F0Pihjb2xvci5ibHVlKCkpIC8gMjU1Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGE6c3RhdGljX2Nhc3Q8Q0dGbG9hdD4oY29s
b3IuYWxwaGEoKSkgLzI1NV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWxwaGE6c3RhdGljX2Nhc3Q8Q0dGbG9hdD4oY29sb3IuYWxwaGEoKSkg
LyAyNTVdOwogCiAgICAgICAgICAgICBzdGF0aWMgaW50IGN1cnNvcjsKICAgICAgICAgICAgIGNh
Y2hlZFJHQkFWYWx1ZXNbY3Vyc29yXSA9IGM7CkBAIC0xMDcsMjQgKzEwOCw1IEBAIE5TQ29sb3Ig
Km5zQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIH0KIH0KIAotc3RhdGljIENHQ29sb3JS
ZWYgQ0dDb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQotewotICAgIC8vIFRoaXMgbmVl
ZHMgdG8gYWx3YXlzIHVzZSBkZXZpY2UgY29sb3JzcGFjZSBzbyBpdCBjYW4gZGUtY2FsaWJyYXRl
IHRoZSBjb2xvciBmb3IKLSAgICAvLyBDR0NvbG9yIHRvIHBvc3NpYmx5IHJlY2FsaWJyYXRlIGl0
LgotICAgIENHRmxvYXQgY29tcG9uZW50c1s0XTsKLSAgICBOU0NvbG9yICpkZXZpY2VDb2xvciA9
IFtjb2xvciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsK
LSAgICBbZGV2aWNlQ29sb3IgZ2V0UmVkOiZjb21wb25lbnRzWzBdIGdyZWVuOiZjb21wb25lbnRz
WzFdIGJsdWU6JmNvbXBvbmVudHNbMl0gYWxwaGE6JmNvbXBvbmVudHNbM11dOwotICAgIHN0YXRp
YyBDR0NvbG9yU3BhY2VSZWYgZGV2aWNlUkdCQ29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0
ZURldmljZVJHQigpOwotICAgIENHQ29sb3JSZWYgY2dDb2xvciA9IENHQ29sb3JDcmVhdGUoZGV2
aWNlUkdCQ29sb3JTcGFjZSwgY29tcG9uZW50cyk7Ci0gICAgcmV0dXJuIGNnQ29sb3I7Ci19Ci0K
LUNHQ29sb3JSZWYgY3JlYXRlQ0dDb2xvcihjb25zdCBDb2xvciYgYykKLXsKLSAgICAvLyBXZSBj
b3VsZCBkaXJlY3RseSBjcmVhdGUgYSBDR0NvbG9yIGhlcmUsIGJ1dCB0aGF0IHdvdWxkCi0gICAg
Ly8gc2tpcCBhbnkgUkdCIGNhY2hpbmcgdGhlIG5zQ29sb3IgbWV0aG9kIGRvZXMuIEEgZGlyZWN0
IAotICAgIC8vIGNyZWF0aW9uIGNvdWxkIGJlIGludmVzdGlnYXRlZCBmb3IgYSBwb3NzaWJsZSBw
ZXJmb3JtYW5jZSB3aW4uCi0gICAgcmV0dXJuIENHQ29sb3JGcm9tTlNDb2xvcihuc0NvbG9yKGMp
KTsKLX0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQkocmV2aXNpb24gNjkx
NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDMsMTQgKzQzLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGNhbGxzIGlu
IHRoaXMgZmlsZSBhcmUgYWxsIGV4Y2VwdGlvbi1zYWZlLCBzbyB3ZSBkb24ndCBibG9jawogLy8g
ZXhjZXB0aW9ucyBmb3IgdGhvc2UuCiAKLXN0YXRpYyB2b2lkIGRyYXdGb2N1c1JpbmdUb0NvbnRl
eHQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFJldGFpblB0cjxDR1BhdGhSZWY+IGZvY3VzUmluZ1Bh
dGgsIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvclJlZiwgaW50IHJhZGl1cykKK3N0YXRpYyB2
b2lkIGRyYXdGb2N1c1JpbmdUb0NvbnRleHQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUGF0aFJl
ZiBmb2N1c1JpbmdQYXRoLCBDR0NvbG9yUmVmIGNvbG9yLCBpbnQgcmFkaXVzKQogewogI2lmZGVm
IEJVSUxESU5HX09OX1RJR0VSCiAgICAgQ0dDb250ZXh0QmVnaW5UcmFuc3BhcmVuY3lMYXllcihj
b250ZXh0LCAwKTsKICNlbmRpZgogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKLSAg
ICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIGZvY3VzUmluZ1BhdGguZ2V0KCkpOwotICAgIHdr
RHJhd0ZvY3VzUmluZyhjb250ZXh0LCBjb2xvclJlZi5nZXQoKSwgcmFkaXVzKTsKKyAgICBDR0Nv
bnRleHRBZGRQYXRoKGNvbnRleHQsIGZvY3VzUmluZ1BhdGgpOworICAgIHdrRHJhd0ZvY3VzUmlu
Zyhjb250ZXh0LCBjb2xvciwgcmFkaXVzKTsKICNpZmRlZiBCVUlMRElOR19PTl9USUdFUgogICAg
IENHQ29udGV4dEVuZFRyYW5zcGFyZW5jeUxheWVyKGNvbnRleHQpOwogI2VuZGlmCkBAIC02Mywx
NiArNjMsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29ucwogICAg
IAogICAgIGludCByYWRpdXMgPSAod2lkdGggLSAxKSAvIDI7CiAgICAgb2Zmc2V0ICs9IHJhZGl1
czsKLSAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gY29sb3JSZWY7Ci0gICAgaWYgKGNvbG9yLmlz
VmFsaWQoKSkKLSAgICAgICAgY29sb3JSZWYuYWRvcHRDRihjcmVhdGVDR0NvbG9yKGNvbG9yKSk7
Ci0gICAgCisgICAgQ0dDb2xvclJlZiBjb2xvclJlZiA9IGNvbG9yLmlzVmFsaWQoKSA/IGNhY2hl
ZENHQ29sb3IoY29sb3IsIERldmljZUNvbG9yU3BhY2UpIDogMDsKKwogICAgIFJldGFpblB0cjxD
R011dGFibGVQYXRoUmVmPiBmb2N1c1JpbmdQYXRoKEFkb3B0Q0YsIENHUGF0aENyZWF0ZU11dGFi
bGUoKSk7CiAgICAgdW5zaWduZWQgcGF0aENvdW50ID0gcGF0aHMuc2l6ZSgpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwYXRoQ291bnQ7IGkrKykKICAgICAgICAgQ0dQYXRoQWRkUGF0
aChmb2N1c1JpbmdQYXRoLmdldCgpLCAwLCBwYXRoc1tpXS5wbGF0Zm9ybVBhdGgoKSk7CiAgICAg
Ci0gICAgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dChwbGF0Zm9ybUNvbnRleHQoKSwgZm9jdXNSaW5n
UGF0aCwgY29sb3JSZWYsIHJhZGl1cyk7CisgICAgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dChwbGF0
Zm9ybUNvbnRleHQoKSwgZm9jdXNSaW5nUGF0aC5nZXQoKSwgY29sb3JSZWYsIHJhZGl1cyk7CiB9
ICAgIAogICAgIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEludFJlY3Q+JiByZWN0cywgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25zdCBDb2xvciYg
Y29sb3IpCkBAIC04MiwxNiArODAsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1
c1JpbmcoY29ucwogCiAgICAgaW50IHJhZGl1cyA9ICh3aWR0aCAtIDEpIC8gMjsKICAgICBvZmZz
ZXQgKz0gcmFkaXVzOwotICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvclJlZjsKLSAgICBp
ZiAoY29sb3IuaXNWYWxpZCgpKQotICAgICAgICBjb2xvclJlZi5hZG9wdENGKGNyZWF0ZUNHQ29s
b3IoY29sb3IpKTsKKyAgICBDR0NvbG9yUmVmIGNvbG9yUmVmID0gY29sb3IuaXNWYWxpZCgpID8g
Y2FjaGVkQ0dDb2xvcihjb2xvciwgRGV2aWNlQ29sb3JTcGFjZSkgOiAwOwogCiAgICAgUmV0YWlu
UHRyPENHTXV0YWJsZVBhdGhSZWY+IGZvY3VzUmluZ1BhdGgoQWRvcHRDRiwgQ0dQYXRoQ3JlYXRl
TXV0YWJsZSgpKTsKICAgICB1bnNpZ25lZCByZWN0Q291bnQgPSByZWN0cy5zaXplKCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlY3RDb3VudDsgaSsrKQogICAgICAgICBDR1BhdGhB
ZGRSZWN0KGZvY3VzUmluZ1BhdGguZ2V0KCksIDAsIENHUmVjdEluc2V0KHJlY3RzW2ldLCAtb2Zm
c2V0LCAtb2Zmc2V0KSk7CiAKLSAgICBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0KHBsYXRmb3JtQ29u
dGV4dCgpLCBmb2N1c1JpbmdQYXRoLCBjb2xvclJlZiwgcmFkaXVzKTsKKyAgICBkcmF3Rm9jdXNS
aW5nVG9Db250ZXh0KHBsYXRmb3JtQ29udGV4dCgpLCBmb2N1c1JpbmdQYXRoLmdldCgpLCBjb2xv
clJlZiwgcmFkaXVzKTsKIH0KIAogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSIC8vIFBvc3QtVGln
ZXIncyBzZXRDb21wb3NpdGVPcGVyYXRpb24oKSBpcyBkZWZpbmVkIGluIEdyYXBoaWNzQ29udGV4
dENHLmNwcC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5
ZXJDQS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFw
aGljc0xheWVyQ0EubW0JKHJldmlzaW9uIDY5MTUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsOSArMjY1
LDcgQEAgc3RhdGljIENBTWVkaWFUaW1pbmdGdW5jdGlvbiogZ2V0Q0FNZWRpYQogCiBzdGF0aWMg
dm9pZCBzZXRMYXllckJvcmRlckNvbG9yKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25zdCBDb2xv
ciYgY29sb3IpCiB7Ci0gICAgQ0dDb2xvclJlZiBib3JkZXJDb2xvciA9IGNyZWF0ZUNHQ29sb3Io
Y29sb3IpOwotICAgIFtsYXllciBzZXRCb3JkZXJDb2xvcjpib3JkZXJDb2xvcl07Ci0gICAgQ0dD
b2xvclJlbGVhc2UoYm9yZGVyQ29sb3IpOworICAgIFtsYXllciBzZXRCb3JkZXJDb2xvcjpjYWNo
ZWRDR0NvbG9yKGNvbG9yLCBEZXZpY2VDb2xvclNwYWNlKV07CiB9CiAKIHN0YXRpYyB2b2lkIGNs
ZWFyQm9yZGVyQ29sb3IoUGxhdGZvcm1MYXllciogbGF5ZXIpCkBAIC0yNzcsOSArMjc1LDcgQEAg
c3RhdGljIHZvaWQgY2xlYXJCb3JkZXJDb2xvcihQbGF0Zm9ybUxheQogCiBzdGF0aWMgdm9pZCBz
ZXRMYXllckJhY2tncm91bmRDb2xvcihQbGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgQ29sb3Im
IGNvbG9yKQogewotICAgIENHQ29sb3JSZWYgYmdDb2xvciA9IGNyZWF0ZUNHQ29sb3IoY29sb3Ip
OwotICAgIFtsYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6YmdDb2xvcl07Ci0gICAgQ0dDb2xvclJl
bGVhc2UoYmdDb2xvcik7CisgICAgW2xheWVyIHNldEJhY2tncm91bmRDb2xvcjpjYWNoZWRDR0Nv
bG9yKGNvbG9yLCBEZXZpY2VDb2xvclNwYWNlKV07CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFyTGF5
ZXJCYWNrZ3JvdW5kQ29sb3IoUGxhdGZvcm1MYXllciogbGF5ZXIpCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3Bw
CShyZXZpc2lvbiA2OTE1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI5LDYgKzEyOSw4IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnMKICAgICAvLyBGSVhNRTogaW1w
bGVtZW50CiB9CiAKKy8vIEZJWE1FOiBUaGlzIGlzIG5lYXJseSBpZGVudGljYWwgdG8gdGhlIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyBmdW5jdGlvbiBpbiBHcmFwaGljc0NvbnRleHRN
YWMubW0uCisvLyBUaGUgY29kZSBjb3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dENHLmNwcCBh
bmQgYmUgc2hhcmVkLgogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3Qg
VmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYgY29sb3IpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTEzNiw3ICsxMzgs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zCiAKICAgICBmbG9h
dCByYWRpdXMgPSAod2lkdGggLSAxKSAvIDIuMGY7CiAgICAgb2Zmc2V0ICs9IHJhZGl1czsKLSAg
ICBDR0NvbG9yUmVmIGNvbG9yUmVmID0gY29sb3IuaXNWYWxpZCgpID8gY3JlYXRlQ0dDb2xvcihj
b2xvcikgOiAwOworICAgIENHQ29sb3JSZWYgY29sb3JSZWYgPSBjb2xvci5pc1ZhbGlkKCkgPyBj
YWNoZWRDR0NvbG9yKGNvbG9yLCBEZXZpY2VDb2xvclNwYWNlKSA6IDA7CiAKICAgICBDR011dGFi
bGVQYXRoUmVmIGZvY3VzUmluZ1BhdGggPSBDR1BhdGhDcmVhdGVNdXRhYmxlKCk7CiAgICAgdW5z
aWduZWQgcmVjdENvdW50ID0gcmVjdHMuc2l6ZSgpOwpAQCAtMTUxLDggKzE1Myw2IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnMKIAogICAgIHdrRHJhd0ZvY3VzUmlu
Zyhjb250ZXh0LCBjb2xvclJlZiwgcmFkaXVzKTsKIAotICAgIENHQ29sb3JSZWxlYXNlKGNvbG9y
UmVmKTsKLQogICAgIENHUGF0aFJlbGVhc2UoZm9jdXNSaW5nUGF0aCk7CiAKICAgICBDR0NvbnRl
eHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NMYXllckNBQ0YuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJDQUNGLmNwcAkocmV2aXNpb24gNjkxNTApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyQ0FDRi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk5LDkgKzk5LDcgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggQ0FUb1Ry
YW5zZm9ybTNEKGNvbgogCiBzdGF0aWMgdm9pZCBzZXRMYXllckJvcmRlckNvbG9yKFdLQ0FDRkxh
eWVyKiBsYXllciwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIENHQ29sb3JSZWYgYm9yZGVy
Q29sb3IgPSBjcmVhdGVDR0NvbG9yKGNvbG9yKTsKLSAgICBsYXllci0+c2V0Qm9yZGVyQ29sb3Io
Ym9yZGVyQ29sb3IpOwotICAgIENHQ29sb3JSZWxlYXNlKGJvcmRlckNvbG9yKTsKKyAgICBsYXll
ci0+c2V0Qm9yZGVyQ29sb3IoY2FjaGVkQ0dDb2xvcihjb2xvciwgRGV2aWNlQ29sb3JTcGFjZSkp
OwogfQogCiBzdGF0aWMgdm9pZCBjbGVhckJvcmRlckNvbG9yKFdLQ0FDRkxheWVyKiBsYXllcikK
QEAgLTExMSw5ICsxMDksNyBAQCBzdGF0aWMgdm9pZCBjbGVhckJvcmRlckNvbG9yKFdLQ0FDRkxh
eWVyCiAKIHN0YXRpYyB2b2lkIHNldExheWVyQmFja2dyb3VuZENvbG9yKFdLQ0FDRkxheWVyKiBs
YXllciwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIENHQ29sb3JSZWYgYmdDb2xvciA9IGNy
ZWF0ZUNHQ29sb3IoY29sb3IpOwotICAgIGxheWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3IoYmdDb2xv
cik7Ci0gICAgQ0dDb2xvclJlbGVhc2UoYmdDb2xvcik7CisgICAgbGF5ZXItPnNldEJhY2tncm91
bmRDb2xvcihjYWNoZWRDR0NvbG9yKGNvbG9yLCBEZXZpY2VDb2xvclNwYWNlKSk7CiB9CiAKIHN0
YXRpYyB2b2lkIGNsZWFyTGF5ZXJCYWNrZ3JvdW5kQ29sb3IoV0tDQUNGTGF5ZXIqIGxheWVyKQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5ZXJSZW5kZXJlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vV0tDQUNGTGF5
ZXJSZW5kZXJlci5jcHAJKHJldmlzaW9uIDY5MTUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vV0tDQUNGTGF5ZXJSZW5kZXJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw5
ICsyNTAsNyBAQCBXS0NBQ0ZMYXllclJlbmRlcmVyOjpXS0NBQ0ZMYXllclJlbmRlcmVyCiAgICAg
bV9yb290TGF5ZXItPnNldEdlb21ldHJ5RmxpcHBlZCh0cnVlKTsKIAogI2lmbmRlZiBOREVCVUcK
LSAgICBDR0NvbG9yUmVmIGRlYnVnQ29sb3IgPSBjcmVhdGVDR0NvbG9yKENvbG9yKDI1NSwgMCwg
MCwgMjA0KSk7Ci0gICAgbV9yb290TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihkZWJ1Z0NvbG9y
KTsKLSAgICBDR0NvbG9yUmVsZWFzZShkZWJ1Z0NvbG9yKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0
QmFja2dyb3VuZENvbG9yKGNhY2hlZENHQ29sb3IoQ29sb3IoMjU1LCAwLCAwLCAyMDQpLCBEZXZp
Y2VDb2xvclNwYWNlKSk7CiAjZW5kaWYKIAogICAgIGlmIChtX2NvbnRleHQpCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJUaWxlZExheWVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJUaWxlZExheWVyLmNwcAkocmV2aXNp
b24gNjkxNTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJUaWxlZExheWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDkgKzIwMSw3IEBAIHZvaWQgV2ViVGlsZWRMYXll
cjo6YWRkVGlsZSgpCiAgICAgQ0FDRkxheWVySW5zZXJ0U3VibGF5ZXIobV90aWxlUGFyZW50Lmdl
dCgpLCBuZXdMYXllci5nZXQoKSwgc3VibGF5ZXJzID8gQ0ZBcnJheUdldENvdW50KHN1YmxheWVy
cykgOiAwKTsKIAogICAgIGlmIChtX293bmVyLT5zaG93RGVidWdCb3JkZXJzKCkpIHsKLSAgICAg
ICAgQ0dDb2xvclJlZiBib3JkZXJDb2xvciA9IGNyZWF0ZUNHQ29sb3IoQ29sb3IoMTI4LCAwLCAx
MjgsIDE4MCkpOwotICAgICAgICBDQUNGTGF5ZXJTZXRCb3JkZXJDb2xvcihuZXdMYXllci5nZXQo
KSwgYm9yZGVyQ29sb3IpOwotICAgICAgICBDR0NvbG9yUmVsZWFzZShib3JkZXJDb2xvcik7Cisg
ICAgICAgIENBQ0ZMYXllclNldEJvcmRlckNvbG9yKG5ld0xheWVyLmdldCgpLCBjYWNoZWRDR0Nv
bG9yKENvbG9yKDEyOCwgMCwgMTI4LCAxODApLCBEZXZpY2VDb2xvclNwYWNlKSk7CiAgICAgICAg
IENBQ0ZMYXllclNldEJvcmRlcldpZHRoKG5ld0xheWVyLmdldCgpLCAyKTsKICAgICB9CiB9Cg==
</data>
<flag name="review"
          id="59617"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>