<?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>163889</bug_id>
          
          <creation_ts>2016-10-24 07:28:02 -0700</creation_ts>
          <short_desc>[CodeGenerator] Only allow a single interface or standalone dictionary per WebIDL file</short_desc>
          <delta_ts>2016-10-24 11:32:26 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1243691</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-10-24 07:28:02 -0700</bug_when>
    <thetext>[CodeGenerator] Only allow a single interface or standalone dictionary per WebIDL file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243696</commentid>
    <comment_count>1</comment_count>
      <attachid>292609</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-10-24 07:41:24 -0700</bug_when>
    <thetext>Created attachment 292609
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243699</commentid>
    <comment_count>2</comment_count>
      <attachid>292609</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-10-24 07:44:32 -0700</bug_when>
    <thetext>Comment on attachment 292609
Patch

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

&gt; Source/WebCore/ChangeLog:29
&gt; +        * bindings/scripts/test/attribute.idl: Copied from Source/WebCore/bindings/scripts/test/TestException.idl.
&gt; +        * bindings/scripts/test/readonly.idl: Copied from Source/WebCore/bindings/scripts/test/TestException.idl.

These two could probably be merged into one test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243700</commentid>
    <comment_count>3</comment_count>
      <attachid>292610</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-10-24 07:53:57 -0700</bug_when>
    <thetext>Created attachment 292610
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243730</commentid>
    <comment_count>4</comment_count>
      <attachid>292610</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-24 09:37:27 -0700</bug_when>
    <thetext>Comment on attachment 292610
Patch

Makes sense, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243808</commentid>
    <comment_count>5</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-10-24 11:32:26 -0700</bug_when>
    <thetext>Committed r207770: &lt;http://trac.webkit.org/changeset/207770&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292609</attachid>
            <date>2016-10-24 07:41:24 -0700</date>
            <delta_ts>2016-10-24 07:53:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163889-20161024073739.patch</filename>
            <type>text/plain</type>
            <size>9202</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGJjNWNkNWJmMGE1MTA0
M2YyOTQ0NzJlYTM2NTkzNjk3ODcyZTZhNC4uMTVhMmNmYjI0ZDQ3NWVkMGEzZTU0MjAyMWEyMjQy
YmNhNDJiOThmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE2LTEwLTI0ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbQ29kZUdlbmVyYXRv
cl0gT25seSBhbGxvdyBhIHNpbmdsZSBpbnRlcmZhY2Ugb3Igc3RhbmRhbG9uZSBkaWN0aW9uYXJ5
IHBlciBXZWJJREwgZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYzODg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQXNzZXJ0IHRoYXQgdGhlcmUncyBvbmx5IG9uZSBpbnRlcmZhY2Ugb3Igc3RhbmRh
bG9uZSBkaWN0aW9uYXJ5CisgICAgICAgIHBlciBXZWJJREwgaW5wdXQgZmlsZSwgYW5kIGV4aXQg
ZnJvbSB0aGUgZ2VuZXJhdG9yIG90aGVyd2lzZS4KKworICAgICAgICBUaGlzIGF2b2lkcyBwb3Rl
bnRpYWwgbGlua2luZyBpc3N1ZXMgd2hlcmUgbXVsdGlwbGUgZW51bWVyYXRpb24KKyAgICAgICAg
YW5kIGRpY3Rpb25hcnkgYmluZGluZ3MgY29kZSBjYW4gYmUgZ2VuZXJhdGVkIGlmIHRoZSBzb3Vy
Y2UKKyAgICAgICAgV2ViSURMIGZvciB0aGVtIGlzIHNwZWNpZmllZCBpbiBhIGZpbGUgdGhhdCBj
b250YWlucyBtdWx0aXBsZQorICAgICAgICBpbnRlcmZhY2VzIG9yIHN0YW5kYWxvbmUgZGljdGlv
bmFyaWVzLgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIGdlbmVyYXRvciBub3cgYWxzbyBl
eGl0cyBpZiBpdCBmYWlscyB0bworICAgICAgICBnZW5lcmF0ZSBjb2RlIGZvciBhbnkgaW50ZXJm
YWNlIG9mIHN0YW5kYWxvbmUgZGljdGlvbmFyeS4gVGhpcworICAgICAgICBzaG91bGQgYXZvaWQg
cHJvY2Vzc2luZyBXZWJJREwgZmlsZXMgdGhhdCBhcmUgZW1wdHkgaW4KKyAgICAgICAgc3Vic3Rh
bmNlLgorCisgICAgICAgIEEgcGFpciBvZiB0ZXN0IFdlYklETCBmaWxlcyBoYXMgdGhlIHNlY29u
ZCBpbnRlcmZhY2VzIHNwbGl0IG91dAorICAgICAgICBpbnRvIHNlcGFyYXRlIGZpbGVzLgorCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtOgorICAgICAgICAoUHJv
Y2Vzc0RvY3VtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEV4Y2Vw
dGlvbi5pZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RJbnRlcmZhY2Uu
aWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9hdHRyaWJ1dGUuaWRsOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEV4Y2VwdGlv
bi5pZGwuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L3JlYWRvbmx5LmlkbDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RFeGNlcHRp
b24uaWRsLgorCiAyMDE2LTEwLTIyICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgW1dlYklETF0gQWRkIElETFR5cGUgYmFzZWQgdG9KUyBjb252ZXJzaW9uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0gYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0KaW5kZXggYmY0
N2EzYjc4NGQwZjkyOTdjZGIwYzNhNzc1MjEzYjc1YTgwOTNlMS4uY2IxOTdkMGQ3ZjdlNzFkMWY3
YTljMjJlNDA4ZjFhYzg3YmZkYWZlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQpAQCAtMjA1LDIxICsyMDUsMjggQEAgc3ViIFByb2Nl
c3NEb2N1bWVudAogICAgIH0KIAogICAgIG15ICRpbnRlcmZhY2VzID0gJHVzZURvY3VtZW50LT5p
bnRlcmZhY2VzOwotICAgIGZvcmVhY2ggbXkgJGludGVyZmFjZSAoQCRpbnRlcmZhY2VzKSB7Cisg
ICAgaWYgKEAkaW50ZXJmYWNlcykgeworICAgICAgICBkaWUgIk11bHRpcGxlIGludGVyZmFjZXMg
cGVyIGRvY3VtZW50IGFyZSBub3Qgc3VwcG9ydGVkIiBpZiBAJGludGVyZmFjZXMgPiAxOworCisg
ICAgICAgIG15ICRpbnRlcmZhY2UgPSBAJGludGVyZmFjZXNbMF07CiAgICAgICAgIHByaW50ICJH
ZW5lcmF0aW5nICR1c2VHZW5lcmF0b3IgYmluZGluZ3MgY29kZSBmb3IgSURMIGludGVyZmFjZSBc
IiIgLiAkaW50ZXJmYWNlLT5uYW1lIC4gIlwiLi4uXG4iIGlmICR2ZXJib3NlOwotICAgICAgICAj
IEZJWE1FOiBSZXBlYXRpbmcgZWFjaCBlbnVtZXJhdGlvbiBhbmQgZGljdGlvbmFyaWVzIGZvciBl
dmVyeSBpbnRlcmZhY2Ugd291bGQgbm90IHdvcmsgaWYgd2UgYWN0dWFsbHkgd2VyZSB1c2luZwot
ICAgICAgICAjIG11bHRpcGxlIGludGVyZmFjZXMgcGVyIGZpbGUsIGJ1dCB3ZSBhcmVuJ3QsIHNv
IHRoaXMgaXMgZmluZSBmb3Igbm93LgogICAgICAgICAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVJ
bnRlcmZhY2UoJGludGVyZmFjZSwgJGRlZmluZXMsICR1c2VEb2N1bWVudC0+ZW51bWVyYXRpb25z
LCAkdXNlRG9jdW1lbnQtPmRpY3Rpb25hcmllcyk7CiAgICAgICAgICRjb2RlR2VuZXJhdG9yLT5X
cml0ZURhdGEoJGludGVyZmFjZSwgJHVzZU91dHB1dERpciwgJHVzZU91dHB1dEhlYWRlcnNEaXIp
OworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgIyBJdCBpcyBwb3NzaWJsZSB0byBoYXZl
IGRpY3Rpb25hcmllcyBpbiBhbiBJREwgZmlsZSB3aXRob3V0IGFueSBpbnRlcmZhY2UuCi0gICAg
dW5sZXNzIChAJGludGVyZmFjZXMpIHsKLSAgICAgICAgZm9yZWFjaCBteSAkZGljdGlvbmFyeSAo
QHskdXNlRG9jdW1lbnQtPmRpY3Rpb25hcmllc30pIHsKLSAgICAgICAgICAgICRjb2RlR2VuZXJh
dG9yLT5HZW5lcmF0ZURpY3Rpb25hcnkoJGRpY3Rpb25hcnkpOwotICAgICAgICAgICAgJGNvZGVH
ZW5lcmF0b3ItPldyaXRlRGF0YSgkZGljdGlvbmFyeSwgJHVzZU91dHB1dERpciwgJHVzZU91dHB1
dEhlYWRlcnNEaXIpOwotICAgICAgICB9CisgICAgbXkgJGRpY3Rpb25hcmllcyA9ICR1c2VEb2N1
bWVudC0+ZGljdGlvbmFyaWVzOworICAgIGlmIChAJGRpY3Rpb25hcmllcykgeworICAgICAgICBk
aWUgIk11bHRpcGxlIHN0YW5kYWxvbmUgZGljdGlvbmFyaWVzIHBlciBkb2N1bWVudCBhcmUgbm90
IHN1cHBvcnRlZCIgaWYgQCRkaWN0aW9uYXJpZXMgPiAxOworCisgICAgICAgIG15ICRkaWN0aW9u
YXJ5ID0gQCRkaWN0aW9uYXJpZXNbMF07CisgICAgICAgIHByaW50ICJHZW5lcmF0aW5nICR1c2VH
ZW5lcmF0b3IgYmluZGluZ3MgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgXCIiIC4gJGRpY3Rpb25h
cnktPm5hbWUgLiAiXCIuLi5cbiIgaWYgJHZlcmJvc2U7CisgICAgICAgICRjb2RlR2VuZXJhdG9y
LT5HZW5lcmF0ZURpY3Rpb25hcnkoJGRpY3Rpb25hcnkpOworICAgICAgICAkY29kZUdlbmVyYXRv
ci0+V3JpdGVEYXRhKCRkaWN0aW9uYXJ5LCAkdXNlT3V0cHV0RGlyLCAkdXNlT3V0cHV0SGVhZGVy
c0Rpcik7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBkaWUgIlByb2Nlc3NpbmcgZG9j
dW1lbnQgIiAuICR1c2VEb2N1bWVudC0+ZmlsZU5hbWUgLiAiIGRpZCBub3QgZ2VuZXJhdGUgYW55
dGhpbmciCiB9CiAKIHN1YiBGaWxlTmFtZVByZWZpeApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RFeGNlcHRpb24uaWRsIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RFeGNlcHRpb24uaWRsCmluZGV4IDI3ZGQyODYx
NGFmMzFmNzI4MDRmZWU3ZjExMzUzODhmODA5ZjBlNmMuLjQ2MzNiZTNlMzFhMWU5YTAyM2M4MmYy
M2I0YWJkZjRhM2YzZjE2YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0RXhjZXB0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdEV4Y2VwdGlvbi5pZGwKQEAgLTI1LDExICsyNSw3IEBACiAgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwogZXhjZXB0aW9uIFRlc3RFeGNlcHRp
b24gewogICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwogfTsKLQotLy8gSWRl
bnRpZmllcnMgd2l0aCBhIGxlYWRpbmcgdW5kZXJzY29yZSwgd2hpY2ggc2hvdWxkIGJlIHJlbW92
ZWQuCi1leGNlcHRpb24gX2F0dHJpYnV0ZSB7Ci0gICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIF9yZWFkb25seTsKLX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdEludGVyZmFjZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdEludGVyZmFjZS5pZGwKaW5kZXggZDU5NjQ5MjBhN2ViZThkODM2YWE2
ZTI3YjkwNDc4NzU5ZmU0MmViOS4uMWMzOGJkMDY0ZGEyNWRmODA1ZTczZjRiZTMzNDQ4NWJlZWVj
MjkwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3RJbnRlcmZhY2UuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0SW50ZXJmYWNlLmlkbApAQCAtNDEsOCArNDEsMyBAQAogfTsKIAogVGVzdEludGVyZmFj
ZSBpbXBsZW1lbnRzIFRlc3RJbXBsZW1lbnRzOwotCi1bCi0gICAgSW1wbGVtZW50YXRpb25MYWNr
c1ZUYWJsZQotXSBpbnRlcmZhY2UgX3JlYWRvbmx5IHsKLX07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvYXR0cmlidXRlLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9hdHRyaWJ1dGUuaWRsCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3NzM3
MDJiN2YwODEwYjAzYjFhNzFkMzA1MTQ2Y2YyMTJjNzRlYjYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvYXR0cmlidXRlLmlkbApAQCAtMCww
ICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtc3RyQXJnLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFc3RyQXJnLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gSWRlbnRpZmllcnMgd2l0aCBhIGxlYWRpbmcgdW5kZXJzY29yZSwgd2hp
Y2ggc2hvdWxkIGJlIHJlbW92ZWQuCitleGNlcHRpb24gX2F0dHJpYnV0ZSB7CisgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nIF9yZWFkb25seTsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvcmVhZG9ubHkuaWRsIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L3JlYWRvbmx5LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNWJlN2Iz
OTc2NzBkYjc0NDQyZDA1YzAxMDdhMTRhYzY2MmNjZTM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L3JlYWRvbmx5LmlkbApAQCAtMCwwICsx
LDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtc3RyQXJnLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFc3RyQXJnLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gSWRlbnRpZmllcnMgd2l0aCBhIGxlYWRpbmcgdW5kZXJzY29yZSwgd2hpY2gg
c2hvdWxkIGJlIHJlbW92ZWQuCitbCisgICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZQorXSBp
bnRlcmZhY2UgX3JlYWRvbmx5IHsKK307Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292610</attachid>
            <date>2016-10-24 07:53:57 -0700</date>
            <delta_ts>2016-10-24 09:37:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163889-20161024075012.patch</filename>
            <type>text/plain</type>
            <size>49823</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGJjNWNkNWJmMGE1MTA0
M2YyOTQ0NzJlYTM2NTkzNjk3ODcyZTZhNC4uMGFmYzA4ZjQyMjU5NzY4NjIzZDI5NGQ4YTYyMjMx
NDY0NjUzMzI1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDE2LTEwLTI0ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbQ29kZUdlbmVyYXRv
cl0gT25seSBhbGxvdyBhIHNpbmdsZSBpbnRlcmZhY2Ugb3Igc3RhbmRhbG9uZSBkaWN0aW9uYXJ5
IHBlciBXZWJJREwgZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYzODg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQXNzZXJ0IHRoYXQgdGhlcmUncyBvbmx5IG9uZSBpbnRlcmZhY2Ugb3Igc3RhbmRh
bG9uZSBkaWN0aW9uYXJ5CisgICAgICAgIHBlciBXZWJJREwgaW5wdXQgZmlsZSwgYW5kIGV4aXQg
ZnJvbSB0aGUgZ2VuZXJhdG9yIG90aGVyd2lzZS4KKworICAgICAgICBUaGlzIGF2b2lkcyBwb3Rl
bnRpYWwgbGlua2luZyBpc3N1ZXMgd2hlcmUgbXVsdGlwbGUgZW51bWVyYXRpb24KKyAgICAgICAg
YW5kIGRpY3Rpb25hcnkgYmluZGluZ3MgY29kZSBjYW4gYmUgZ2VuZXJhdGVkIGlmIHRoZSBzb3Vy
Y2UKKyAgICAgICAgV2ViSURMIGZvciB0aGVtIGlzIHNwZWNpZmllZCBpbiBhIGZpbGUgdGhhdCBj
b250YWlucyBtdWx0aXBsZQorICAgICAgICBpbnRlcmZhY2VzIG9yIHN0YW5kYWxvbmUgZGljdGlv
bmFyaWVzLgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIGdlbmVyYXRvciBub3cgYWxzbyBl
eGl0cyBpZiBpdCBmYWlscyB0bworICAgICAgICBnZW5lcmF0ZSBjb2RlIGZvciBhbnkgaW50ZXJm
YWNlIG9mIHN0YW5kYWxvbmUgZGljdGlvbmFyeS4gVGhpcworICAgICAgICBzaG91bGQgYXZvaWQg
cHJvY2Vzc2luZyBXZWJJREwgZmlsZXMgdGhhdCBhcmUgZW1wdHkgaW4KKyAgICAgICAgc3Vic3Rh
bmNlLgorCisgICAgICAgIFRlc3RFeGNlcHRpb24uaWRsIGFuZCBUZXN0SW50ZXJmYWNlLmlkbCBm
aWxlcyBoYXZlIHRoZWlyIHNlY29uZAorICAgICAgICBpbnRlcmZhY2VzIHJlbW92ZWQuIEluIHBs
YWNlIG9mIHRob3NlIGEgbmV3IHRlc3RpbmcgSURMIGZpbGUgaXMKKyAgICAgICAgYWRkZWQsIFRl
c3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5pZGwuIExpa2UgdGhlIHR3byByZW1vdmVkCisg
ICAgICAgIGludGVyZmFjZXMsIGl0IHRlc3RzIHRoYXQgdGhlIGxlYWRpbmcgdW5kZXJzY29kZSBp
biB0aGUKKyAgICAgICAgaWRlbnRpZmllciBpcyByZW1vdmVkIGJ5IHRoZSBnZW5lcmF0b3IuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG06CisgICAgICAgIChQ
cm9jZXNzRG9jdW1lbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5cGU6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZVByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZUxl
YWRpbmdVbmRlcnNjb3JlUHJvdG90eXBlOjpKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29y
ZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3Rvcjo6aW5pdGlh
bGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlTGVhZGlu
Z1VuZGVyc2NvcmVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjpKU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZTo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVy
ZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjpwcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29y
ZTo6QmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZT46OmNhc3RG
b3JBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlTGVhZGluZ1Vu
ZGVyc2NvcmVSZWFkb25seSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZVJlYWRvbmx5R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdElu
dGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6Z2V0Q29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVP
d25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVPd25lcjo6ZmluYWxpemUpOgorICAgICAgICAo
V2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjp0b1dyYXBw
ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuaC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdElu
dGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6d3JhcHBlck93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OndyYXBwZXJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNhdHRyaWJ1dGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU2F0dHJpYnV0ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU3JlYWRvbmx5LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdEV4Y2VwdGlvbi5pZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RJbnRlcmZhY2UuaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEV4Y2VwdGlvbi5pZGwuCisKIDIwMTYtMTAt
MjIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbV2ViSURMXSBBZGQg
SURMVHlwZSBiYXNlZCB0b0pTIGNvbnZlcnNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQppbmRleCBiZjQ3YTNiNzg0ZDBmOTI5N2NkYjBj
M2E3NzUyMTNiNzVhODA5M2UxLi5jYjE5N2QwZDdmN2U3MWQxZjdhOWMyMmU0MDhmMWFjODdiZmRh
ZmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3IucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yLnBtCkBAIC0yMDUsMjEgKzIwNSwyOCBAQCBzdWIgUHJvY2Vzc0RvY3VtZW50CiAgICAgfQog
CiAgICAgbXkgJGludGVyZmFjZXMgPSAkdXNlRG9jdW1lbnQtPmludGVyZmFjZXM7Ci0gICAgZm9y
ZWFjaCBteSAkaW50ZXJmYWNlIChAJGludGVyZmFjZXMpIHsKKyAgICBpZiAoQCRpbnRlcmZhY2Vz
KSB7CisgICAgICAgIGRpZSAiTXVsdGlwbGUgaW50ZXJmYWNlcyBwZXIgZG9jdW1lbnQgYXJlIG5v
dCBzdXBwb3J0ZWQiIGlmIEAkaW50ZXJmYWNlcyA+IDE7CisKKyAgICAgICAgbXkgJGludGVyZmFj
ZSA9IEAkaW50ZXJmYWNlc1swXTsKICAgICAgICAgcHJpbnQgIkdlbmVyYXRpbmcgJHVzZUdlbmVy
YXRvciBiaW5kaW5ncyBjb2RlIGZvciBJREwgaW50ZXJmYWNlIFwiIiAuICRpbnRlcmZhY2UtPm5h
bWUgLiAiXCIuLi5cbiIgaWYgJHZlcmJvc2U7Ci0gICAgICAgICMgRklYTUU6IFJlcGVhdGluZyBl
YWNoIGVudW1lcmF0aW9uIGFuZCBkaWN0aW9uYXJpZXMgZm9yIGV2ZXJ5IGludGVyZmFjZSB3b3Vs
ZCBub3Qgd29yayBpZiB3ZSBhY3R1YWxseSB3ZXJlIHVzaW5nCi0gICAgICAgICMgbXVsdGlwbGUg
aW50ZXJmYWNlcyBwZXIgZmlsZSwgYnV0IHdlIGFyZW4ndCwgc28gdGhpcyBpcyBmaW5lIGZvciBu
b3cuCiAgICAgICAgICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUludGVyZmFjZSgkaW50ZXJmYWNl
LCAkZGVmaW5lcywgJHVzZURvY3VtZW50LT5lbnVtZXJhdGlvbnMsICR1c2VEb2N1bWVudC0+ZGlj
dGlvbmFyaWVzKTsKICAgICAgICAgJGNvZGVHZW5lcmF0b3ItPldyaXRlRGF0YSgkaW50ZXJmYWNl
LCAkdXNlT3V0cHV0RGlyLCAkdXNlT3V0cHV0SGVhZGVyc0Rpcik7CisgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICAjIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgZGljdGlvbmFyaWVzIGluIGFu
IElETCBmaWxlIHdpdGhvdXQgYW55IGludGVyZmFjZS4KLSAgICB1bmxlc3MgKEAkaW50ZXJmYWNl
cykgewotICAgICAgICBmb3JlYWNoIG15ICRkaWN0aW9uYXJ5IChAeyR1c2VEb2N1bWVudC0+ZGlj
dGlvbmFyaWVzfSkgewotICAgICAgICAgICAgJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlRGljdGlv
bmFyeSgkZGljdGlvbmFyeSk7Ci0gICAgICAgICAgICAkY29kZUdlbmVyYXRvci0+V3JpdGVEYXRh
KCRkaWN0aW9uYXJ5LCAkdXNlT3V0cHV0RGlyLCAkdXNlT3V0cHV0SGVhZGVyc0Rpcik7Ci0gICAg
ICAgIH0KKyAgICBteSAkZGljdGlvbmFyaWVzID0gJHVzZURvY3VtZW50LT5kaWN0aW9uYXJpZXM7
CisgICAgaWYgKEAkZGljdGlvbmFyaWVzKSB7CisgICAgICAgIGRpZSAiTXVsdGlwbGUgc3RhbmRh
bG9uZSBkaWN0aW9uYXJpZXMgcGVyIGRvY3VtZW50IGFyZSBub3Qgc3VwcG9ydGVkIiBpZiBAJGRp
Y3Rpb25hcmllcyA+IDE7CisKKyAgICAgICAgbXkgJGRpY3Rpb25hcnkgPSBAJGRpY3Rpb25hcmll
c1swXTsKKyAgICAgICAgcHJpbnQgIkdlbmVyYXRpbmcgJHVzZUdlbmVyYXRvciBiaW5kaW5ncyBj
b2RlIGZvciBJREwgZGljdGlvbmFyeSBcIiIgLiAkZGljdGlvbmFyeS0+bmFtZSAuICJcIi4uLlxu
IiBpZiAkdmVyYm9zZTsKKyAgICAgICAgJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlRGljdGlvbmFy
eSgkZGljdGlvbmFyeSk7CisgICAgICAgICRjb2RlR2VuZXJhdG9yLT5Xcml0ZURhdGEoJGRpY3Rp
b25hcnksICR1c2VPdXRwdXREaXIsICR1c2VPdXRwdXRIZWFkZXJzRGlyKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KKworICAgIGRpZSAiUHJvY2Vzc2luZyBkb2N1bWVudCAiIC4gJHVzZURvY3Vt
ZW50LT5maWxlTmFtZSAuICIgZGlkIG5vdCBnZW5lcmF0ZSBhbnl0aGluZyIKIH0KIAogc3ViIEZp
bGVOYW1lUHJlZml4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRl
cnNjb3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDNlMTE3YmYxODg5ZmM1OGFiODYzOGExODIwMzYyNzRj
MGViMzUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcApAQCAtMCwwICsx
LDIwOSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuaCIKKworI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRl
ICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+
CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIEF0dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZVJlYWRvbmx5KEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisKK2NsYXNz
IEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUHJvdG90eXBlIDogcHVibGljIEpTQzo6
SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTQzo6SlNOb25G
aW5hbE9iamVjdDsKKyAgICBzdGF0aWMgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVQ
cm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0
SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5
cGU+KHZtLmhlYXApKSBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZVByb3RvdHlwZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87Cisg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0SW50ZXJmYWNl
TGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5h
bE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK3VzaW5nIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRl
cnNjb3JlQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rl
c3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZT47CisKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rl
c3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0
aW9uUHJvdG90eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
Ojpwcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmUiKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9u
dEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmUiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2gg
dGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNU
ZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sK
KyAgICB7ICJjb25zdHJ1Y3RvciIsIERvbnRFbnVtLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEludGVyZmFjZUxl
YWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJz
Y29yZUNvbnN0cnVjdG9yKSB9IH0sCisgICAgeyAicmVhZG9ubHkiLCBSZWFkT25seSB8IEN1c3Rv
bUFjY2Vzc29yLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUmVhZG9u
bHkpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5j
PigwKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1Vu
ZGVyc2NvcmVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJz
Y29yZVByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNU
ZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0
SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9w
ZXJ0aWVzKHZtLCBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZVByb3RvdHlwZVRhYmxl
VmFsdWVzLCAqdGhpcyk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZTo6c19pbmZvID0geyAiVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZSkgfTsKKworSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6
OkpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdEludGVyZmFjZUxlYWRpbmdV
bmRlcnNjb3JlPiYmIGltcGwpCisgICAgOiBKU0RPTVdyYXBwZXI8VGVzdEludGVyZmFjZUxlYWRp
bmdVbmRlcnNjb3JlPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sK
K30KKworSlNPYmplY3QqIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjpjcmVhdGVQ
cm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJl
dHVybiBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZVByb3RvdHlwZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQ
cm90b3R5cGUoKSkpOworfQorCitKU09iamVjdCogSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmU6OnByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7
CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJz
Y29yZT4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKK3ZvaWQgSlNUZXN0SW50ZXJmYWNlTGVhZGlu
Z1VuZGVyc2NvcmU6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0SW50
ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RJ
bnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSo+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPkpTVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjp+SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmUoKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1Vu
ZGVyc2NvcmUqIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU+
OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkK
K3sKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJz
Y29yZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUmVhZG9ubHlHZXR0ZXIoRXhl
Y1N0YXRlJiwgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUmLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKKworRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmVSZWFkb25seShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZh
Y2VMZWFkaW5nVW5kZXJzY29yZT46OmF0dHJpYnV0ZTxqc1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZVJlYWRvbmx5R2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAicmVhZG9ubHkiKTsKK30K
Kworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
UmVhZG9ubHlHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1Vu
ZGVyc2NvcmUmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UzxJRExET01TdHJpbmc+KHN0YXRlLCBpbXBsLnJlYWRvbmx5KCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgSlNUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmVQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQorICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6Z2V0Q29uc3RydWN0b3Io
c3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRK
U1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZVBy
b3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBp
ZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4gZG9tT2JqZWN0LT5wdXRE
aXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHZh
bHVlKTsKK30KKworSlNWYWx1ZSBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6Z2V0
Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
eworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZUNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+
KGdsb2JhbE9iamVjdCkpOworfQorCitib29sIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNj
b3JlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VE
X1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZU93bmVyOjpm
aW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkK
K3sKKyAgICBhdXRvKiBqc1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSA9IGpzQ2FzdDxK
U1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgp
KTsKKyAgICBhdXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250
ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdEludGVyZmFjZUxlYWRpbmdV
bmRlcnNjb3JlLT53cmFwcGVkKCksIGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlKTsK
K30KKworSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdEludGVyZmFjZUxlYWRpbmdVbmRl
cnNjb3JlPiYmIGltcGwpCit7CisjaWYgQ09NUElMRVIoQ0xBTkcpCisgICAgLy8gSWYgeW91IGhp
dCB0aGlzIGZhaWx1cmUgdGhlIGludGVyZmFjZSBkZWZpbml0aW9uIGhhcyB0aGUgSW1wbGVtZW50
YXRpb25MYWNrc1ZUYWJsZQorICAgIC8vIGF0dHJpYnV0ZS4gWW91IHNob3VsZCByZW1vdmUgdGhh
dCBhdHRyaWJ1dGUuIElmIHRoZSBjbGFzcyBoYXMgc3ViY2xhc3NlcworICAgIC8vIHRoYXQgbWF5
IGJlIHBhc3NlZCB0aHJvdWdoIHRoaXMgdG9KUygpIGZ1bmN0aW9uIHlvdSBzaG91bGQgdXNlIHRo
ZSBTa2lwVlRhYmxlVmFsaWRhdGlvbgorICAgIC8vIGF0dHJpYnV0ZSB0byBUZXN0SW50ZXJmYWNl
TGVhZGluZ1VuZGVyc2NvcmUuCisgICAgc3RhdGljX2Fzc2VydCghX19pc19wb2x5bW9ycGhpYyhU
ZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUpLCAiVGVzdEludGVyZmFjZUxlYWRpbmdVbmRl
cnNjb3JlIGlzIHBvbHltb3JwaGljIGJ1dCB0aGUgSURMIGNsYWltcyBpdCBpcyBub3QiKTsKKyNl
bmRpZgorICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJz
Y29yZT4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUmIGltcGwpCit7CisgICAgcmV0dXJuIHdy
YXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZSogSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OnRvV3JhcHBlZChK
U0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlKj4odmFsdWUpKQorICAgICAgICBy
ZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41YjlhMzhlZTQ3NDY4ZGNjODA3ODVjNWMyOTBiOGI2MzkxMDM3NWIzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdElu
dGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAgICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgor
I2luY2x1ZGUgIlRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5oIgorI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlIDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0SW50
ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNE
T01XcmFwcGVyPFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZT47CisgICAgc3RhdGljIEpT
VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RJbnRlcmZh
Y2VMZWFkaW5nVW5kZXJzY29yZT4mJiBpbXBsKQorICAgIHsKKyAgICAgICAgSlNUZXN0SW50ZXJm
YWNlTGVhZGluZ1VuZGVyc2NvcmUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU+KGdsb2JhbE9iamVjdC0+dm0oKS5o
ZWFwKSkgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUoc3RydWN0dXJlLCAqZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9i
YWxPYmplY3QtPnZtKCkpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZSogdG9XcmFwcGVkKEpTQzo6SlNWYWx1ZSk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0M6OkpTQ2VsbCopOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6
Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0
SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFJlZjxUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU+JiYpOworCisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOworICAgIH0K
KworfTsKKworY2xhc3MgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVPd25lciA6IHB1
YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUg
SlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0
SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUqKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZU93bmVyPiBvd25lcjsKKyAgICByZXR1
cm4gJm93bmVyLmdldCgpOworfQorCitpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0SW50ZXJm
YWNlTGVhZGluZ1VuZGVyc2NvcmUqIHdyYXBwYWJsZU9iamVjdCkKK3sKKyAgICByZXR1cm4gd3Jh
cHBhYmxlT2JqZWN0OworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlJik7Citpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUqIGltcGwp
IHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6
anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
PiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0SW50
ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXds
eUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpT
Qzo6anNOdWxsKCk7IH0KKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVy
VHJhaXRzPFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZT4geworICAgIHVzaW5nIFdyYXBw
ZXJDbGFzcyA9IEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOworICAgIHVzaW5nIFRv
V3JhcHBlZFJldHVyblR5cGUgPSBUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUqOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDljMzY2YTIwMzhjZWE2MDcwNWZmMjE5ZTU5YmExYzY1MzFkM2UwZmQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDI0MyArMCwwIEBACi0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJKU2F0dHJpYnV0ZS5oIgotCi0jaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCi0jaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIkpTRE9NQ29u
dmVydC5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KLSNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotLy8gQXR0cmlidXRlcwotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzYXR0cmlidXRl
UmVhZG9ubHkoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzYXR0cmlidXRlQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTYXR0cmlidXRlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLQotY2xhc3MgSlNhdHRyaWJ1dGVQcm90
b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB1c2lu
ZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBKU2F0dHJpYnV0ZVBy
b3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU2F0dHJp
YnV0ZVByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU2F0
dHJpYnV0ZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTYXR0cmlidXRlUHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwot
ICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU2F0dHJpYnV0ZVByb3RvdHlwZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCi0gICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCi0gICAg
ewotICAgIH0KLQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotfTsKLQotdXNp
bmcgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3Rh
YmxlPEpTYXR0cmlidXRlPjsKLQotLyogSGFzaCB0YWJsZSAqLwotCi1zdGF0aWMgY29uc3Qgc3Ry
dWN0IENvbXBhY3RIYXNoSW5kZXggSlNhdHRyaWJ1dGVUYWJsZUluZGV4WzJdID0gewotICAgIHsg
MCwgLTEgfSwKLSAgICB7IC0xLCAtMSB9LAotfTsKLQotCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxl
VmFsdWUgSlNhdHRyaWJ1dGVUYWJsZVZhbHVlc1tdID0KLXsKLSAgICB7ICJyZWFkb25seSIsIFJl
YWRPbmx5IHwgQ3VzdG9tQWNjZXNzb3IsIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNhdHRyaWJ1dGVSZWFkb25seSksIChp
bnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KDApIH0g
fSwKLX07Ci0KLXN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNhdHRyaWJ1dGVUYWJsZSA9IHsgMSwg
MSwgdHJ1ZSwgSlNhdHRyaWJ1dGVUYWJsZVZhbHVlcywgSlNhdHRyaWJ1dGVUYWJsZUluZGV4IH07
Ci10ZW1wbGF0ZTw+IEpTVmFsdWUgSlNhdHRyaWJ1dGVDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9y
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQotewotICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgcmV0dXJuIGdsb2JhbE9iamVjdC5m
dW5jdGlvblByb3RvdHlwZSgpOwotfQotCi10ZW1wbGF0ZTw+IHZvaWQgSlNhdHRyaWJ1dGVDb25z
dHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQotewotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBKU2F0dHJpYnV0ZTo6cHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJh
bCgiYXR0cmlidXRlIikpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnRF
bnVtKTsKLX0KLQotdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNhdHRyaWJ1dGVDb25zdHJ1
Y3Rvcjo6c19pbmZvID0geyAiYXR0cmlidXRlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yKSB9OwotCi0vKiBIYXNoIHRhYmxlIGZv
ciBwcm90b3R5cGUgKi8KLQotc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTYXR0cmlidXRl
UHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Ci17Ci0gICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51
bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc2F0dHJpYnV0ZUNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2Fz
dDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNhdHRyaWJ1dGVDb25zdHJ1Y3Rv
cikgfSB9LAotfTsKLQotY29uc3QgQ2xhc3NJbmZvIEpTYXR0cmlidXRlUHJvdG90eXBlOjpzX2lu
Zm8gPSB7ICJhdHRyaWJ1dGVQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTYXR0cmlidXRlUHJvdG90eXBlKSB9OwotCi12b2lkIEpTYXR0cmlidXRlUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwotICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNhdHRyaWJ1dGVQcm90b3R5
cGVUYWJsZVZhbHVlcywgKnRoaXMpOwotfQotCi1jb25zdCBDbGFzc0luZm8gSlNhdHRyaWJ1dGU6
OnNfaW5mbyA9IHsgImF0dHJpYnV0ZSIsICZCYXNlOjpzX2luZm8sICZKU2F0dHJpYnV0ZVRhYmxl
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTYXR0cmlidXRlKSB9OwotCi1KU2F0dHJpYnV0ZTo6SlNh
dHRyaWJ1dGUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFJlZjxhdHRyaWJ1dGU+JiYgaW1wbCkKLSAgICA6IEpTRE9NV3JhcHBlcjxhdHRyaWJ1
dGU+KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQotewotfQotCi1KU09i
amVjdCogSlNhdHRyaWJ1dGU6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTYXR0cmlidXRlUHJvdG90eXBlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgSlNhdHRyaWJ1dGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmVycm9yUHJvdG90eXBlKCkpKTsKLX0K
LQotSlNPYmplY3QqIEpTYXR0cmlidXRlOjpwcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNhdHRyaWJ1
dGU+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCi12b2lkIEpTYXR0cmlidXRlOjpkZXN0cm95KEpT
Qzo6SlNDZWxsKiBjZWxsKQotewotICAgIEpTYXR0cmlidXRlKiB0aGlzT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SlNhdHRyaWJ1dGUqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5KU2F0dHJpYnV0ZTo6
fkpTYXR0cmlidXRlKCk7Ci19Ci0KLXRlbXBsYXRlPD4gaW5saW5lIEpTYXR0cmlidXRlKiBCaW5k
aW5nQ2FsbGVyPEpTYXR0cmlidXRlPjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCi17Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNhdHRy
aWJ1dGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc2F0dHJpYnV0ZVJlYWRvbmx5R2V0dGVyKEV4ZWNTdGF0ZSYsIEpTYXR0cmlidXRl
JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7Ci0KLUVuY29kZWRKU1ZhbHVlIGpzYXR0cmlidXRl
UmVhZG9ubHkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNhdHRyaWJ1dGU+OjphdHRy
aWJ1dGU8anNhdHRyaWJ1dGVSZWFkb25seUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgInJlYWRv
bmx5Iik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc2F0dHJpYnV0ZVJlYWRvbmx5R2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTYXR0cmlidXRlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQotewotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC5yZWFk
b25seSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1FbmNvZGVkSlNWYWx1ZSBqc2F0dHJp
YnV0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQotewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTYXR0cmlidXRlUHJv
dG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTYXR0cmlidXRlUHJvdG90eXBlKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0
KSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNhdHRyaWJ1dGU6OmdldENvbnN0cnVjdG9yKHN0
YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Ci19Ci0KLWJvb2wgc2V0SlNh
dHRyaWJ1dGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAg
SlNhdHRyaWJ1dGVQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNhdHRyaWJ1
dGVQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElL
RUxZKCFkb21PYmplY3QpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0
YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7Ci19
Ci0KLUpTVmFsdWUgSlNhdHRyaWJ1dGU6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0
b3I8SlNhdHRyaWJ1dGVDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxP
YmplY3QqPihnbG9iYWxPYmplY3QpKTsKLX0KLQotYm9vbCBKU2F0dHJpYnV0ZU93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIFVOVVNFRF9QQVJBTShoYW5kbGUp
OwotICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgSlNhdHRyaWJ1dGVPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqIGNvbnRleHQpCi17Ci0gICAgYXV0byoganNhdHRyaWJ1dGUgPSBqc0Nhc3Q8
SlNhdHRyaWJ1dGUqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7Ci0gICAgYXV0byYgd29ybGQg
PSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7Ci0gICAgdW5jYWNoZVdy
YXBwZXIod29ybGQsICZqc2F0dHJpYnV0ZS0+d3JhcHBlZCgpLCBqc2F0dHJpYnV0ZSk7Ci19Ci0K
LSNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCi0jaWYgUExBVEZPUk0oV0lOKQotI3ByYWdt
YSB3YXJuaW5nKGRpc2FibGU6IDQ0ODMpCi1leHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQgKCpjb25z
dCBfX2lkZW50aWZpZXIoIj8/XzdhdHRyaWJ1dGVAV2ViQ29yZUBANkJAIilbXSkoKTsgfQotI2Vs
c2UKLWV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTlhdHRyaWJ1dGVFW107
IH0KLSNlbmRpZgotI2VuZGlmCi0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPGF0dHJpYnV0
ZT4mJiBpbXBsKQotewotCi0jaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQotICAgIHZvaWQq
IGFjdHVhbFZUYWJsZVBvaW50ZXIgPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihpbXBsLnB0
cigpKSk7Ci0jaWYgUExBVEZPUk0oV0lOKQotICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRl
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9faWRlbnRpZmllcigiPz9fN2F0dHJpYnV0ZUBX
ZWJDb3JlQEA2QkAiKSk7Ci0jZWxzZQotICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9
ICZfWlRWTjdXZWJDb3JlOWF0dHJpYnV0ZUVbMl07Ci0jaWYgQ09NUElMRVIoQ0xBTkcpCi0gICAg
Ly8gSWYgdGhpcyBmYWlscyBhdHRyaWJ1dGUgZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91
IG5lZWQgdG8gYWRkIHRoZQotICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmli
dXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgotICAgIHN0YXRpY19hc3NlcnQoX19pc19w
b2x5bW9ycGhpYyhhdHRyaWJ1dGUpLCAiYXR0cmlidXRlIGlzIG5vdCBwb2x5bW9ycGhpYyIpOwot
I2VuZGlmCi0jZW5kaWYKLSAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRo
ZXIgaGF2ZSBhIHVzZSBhZnRlciBmcmVlIGJ1Zywgb3IKLSAgICAvLyBhdHRyaWJ1dGUgaGFzIHN1
YmNsYXNzZXMuIElmIGF0dHJpYnV0ZSBoYXMgc3ViY2xhc3NlcyB0aGF0IGdldCBwYXNzZWQKLSAg
ICAvLyB0byB0b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUgYXR0cmlidXRlIHlvdSB0byBvcHQg
b3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCi0gICAgLy8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxl
VmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVmaW5pdGlvbgotICAg
IFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2lu
dGVyKTsKLSNlbmRpZgotICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPGF0dHJpYnV0ZT4oZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBhdHRyaWJ1dGUm
IGltcGwpCi17Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7Ci19
Ci0KLWF0dHJpYnV0ZSogSlNhdHRyaWJ1dGU6OnRvV3JhcHBlZChKU0M6OkpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTYXR0cmlidXRlKj4o
dmFsdWUpKQotICAgICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NGE4Y2I0ZGQ2ZTU2Y2M2MThlY2IxMTAwMGIxMDM0ODgyYmZkZjQyNS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAg
QEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJK
U0RPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJhdHRyaWJ1dGUuaCIKLSNpbmNsdWRlIDxydW50aW1l
L0Vycm9yUHJvdG90eXBlLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNhdHRyaWJ1dGUgOiBwdWJsaWMgSlNET01XcmFw
cGVyPGF0dHJpYnV0ZT4gewotcHVibGljOgotICAgIHVzaW5nIEJhc2UgPSBKU0RPTVdyYXBwZXI8
YXR0cmlidXRlPjsKLSAgICBzdGF0aWMgSlNhdHRyaWJ1dGUqIGNyZWF0ZShKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8YXR0cmli
dXRlPiYmIGltcGwpCi0gICAgewotICAgICAgICBKU2F0dHJpYnV0ZSogcHRyID0gbmV3IChOb3RO
dWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU2F0dHJpYnV0ZT4oZ2xvYmFsT2JqZWN0LT52bSgpLmhl
YXApKSBKU2F0dHJpYnV0ZShzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkp
OwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0gICAg
ICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0
ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBK
U0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
LSAgICBzdGF0aWMgYXR0cmlidXRlKiB0b1dyYXBwZWQoSlNDOjpKU1ZhbHVlKTsKLSAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLSAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29u
c3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Okhhc1N0YXRp
Y1Byb3BlcnR5VGFibGUgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKLXByb3RlY3RlZDoKLSAgICBK
U2F0dHJpYnV0ZShKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPGF0dHJp
YnV0ZT4mJik7Ci0KLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mIHZtKQotICAgIHsK
LSAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICBBU1NFUlQoaW5oZXJp
dHMoaW5mbygpKSk7Ci0gICAgfQotCi19OwotCi1jbGFzcyBKU2F0dHJpYnV0ZU93bmVyIDogcHVi
bGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgaXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCog
Y29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYpOwotICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKLX07Ci0KLWlubGluZSBK
U0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIGF0dHJp
YnV0ZSopCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEpTYXR0cmlidXRlT3duZXI+IG93
bmVyOwotICAgIHJldHVybiAmb3duZXIuZ2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkKiB3cmFwcGVy
S2V5KGF0dHJpYnV0ZSogd3JhcHBhYmxlT2JqZWN0KQotewotICAgIHJldHVybiB3cmFwcGFibGVP
YmplY3Q7Ci19Ci0KLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqLCBhdHRyaWJ1dGUmKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGF0dHJpYnV0
ZSogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwp
IDogSlNDOjpqc051bGwoKTsgfQotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxhdHRyaWJ1dGU+JiYpOwotaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPGF0dHJpYnV0ZT4mJiBpbXBsKSB7
IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBs
LnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8YXR0cmlidXRlPiB7Ci0gICAgdXNpbmcgV3Jh
cHBlckNsYXNzID0gSlNhdHRyaWJ1dGU7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9
IGF0dHJpYnV0ZSo7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25seS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25seS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMGY3MjZiY2JjZDFlNzAxY2Q5MmQ4N2E4ZDZi
N2VmZmQ3OTkzYzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTcmVhZG9ubHkuaCIKLQotI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKLSNpbmNs
dWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+Ci0jaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEF0
dHJpYnV0ZXMKLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc3JlYWRvbmx5Q29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTcmVhZG9ubHlDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotCi1jbGFzcyBKU3JlYWRvbmx5UHJvdG90
eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcg
QmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgSlNyZWFkb25seVByb3Rv
dHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBKU3JlYWRvbmx5
UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTcmVhZG9u
bHlQcm90b3R5cGU+KHZtLmhlYXApKSBKU3JlYWRvbmx5UHJvdG90eXBlKHZtLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAg
ICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU3JlYWRvbmx5UHJvdG90eXBlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAg
ICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAg
fQotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Ci19OwotCi11c2luZyBKU3Jl
YWRvbmx5Q29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU3Jl
YWRvbmx5PjsKLQotdGVtcGxhdGU8PiBKU1ZhbHVlIEpTcmVhZG9ubHlDb25zdHJ1Y3Rvcjo6cHJv
dG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQotewotICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgcmV0dXJuIGdsb2Jh
bE9iamVjdC5mdW5jdGlvblByb3RvdHlwZSgpOwotfQotCi10ZW1wbGF0ZTw+IHZvaWQgSlNyZWFk
b25seUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsIEpTcmVhZG9ubHk6OnByb3RvdHlwZSh2bSwgJmdsb2JhbE9iamVjdCks
IERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZyhBU0NJ
SUxpdGVyYWwoInJlYWRvbmx5IikpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0gICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8
IERvbnRFbnVtKTsKLX0KLQotdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNyZWFkb25seUNv
bnN0cnVjdG9yOjpzX2luZm8gPSB7ICJyZWFkb25seSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNyZWFkb25seUNvbnN0cnVjdG9yKSB9OwotCi0vKiBIYXNoIHRhYmxl
IGZvciBwcm90b3R5cGUgKi8KLQotc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTcmVhZG9u
bHlQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KLXsKLSAgICB7ICJjb25zdHJ1Y3RvciIsIERvbnRF
bnVtLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpH
ZXRWYWx1ZUZ1bmM+KGpzcmVhZG9ubHlDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nh
c3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTcmVhZG9ubHlDb25zdHJ1Y3Rv
cikgfSB9LAotfTsKLQotY29uc3QgQ2xhc3NJbmZvIEpTcmVhZG9ubHlQcm90b3R5cGU6OnNfaW5m
byA9IHsgInJlYWRvbmx5UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU3JlYWRvbmx5UHJvdG90eXBlKSB9OwotCi12b2lkIEpTcmVhZG9ubHlQcm90b3R5
cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7Ci0gICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU3JlYWRvbmx5UHJvdG90eXBlVGFi
bGVWYWx1ZXMsICp0aGlzKTsKLX0KLQotY29uc3QgQ2xhc3NJbmZvIEpTcmVhZG9ubHk6OnNfaW5m
byA9IHsgInJlYWRvbmx5IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U3JlYWRvbmx5KSB9OwotCi1KU3JlYWRvbmx5OjpKU3JlYWRvbmx5KFN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8cmVhZG9ubHk+JiYgaW1w
bCkKLSAgICA6IEpTRE9NV3JhcHBlcjxyZWFkb25seT4oc3RydWN0dXJlLCBnbG9iYWxPYmplY3Qs
IFdURk1vdmUoaW1wbCkpCi17Ci19Ci0KLUpTT2JqZWN0KiBKU3JlYWRvbmx5OjpjcmVhdGVQcm90
b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVy
biBKU3JlYWRvbmx5UHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNyZWFkb25s
eVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKLX0KLQotSlNPYmplY3QqIEpTcmVhZG9ubHk6OnByb3Rv
dHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJu
IGdldERPTVByb3RvdHlwZTxKU3JlYWRvbmx5Pih2bSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotdm9p
ZCBKU3JlYWRvbmx5OjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQotewotICAgIEpTcmVhZG9u
bHkqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU3JlYWRvbmx5Kj4oY2VsbCk7Ci0gICAgdGhp
c09iamVjdC0+SlNyZWFkb25seTo6fkpTcmVhZG9ubHkoKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUg
anNyZWFkb25seUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTcmVhZG9u
bHlQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNyZWFkb25seVByb3RvdHlw
ZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWRvbU9i
amVjdCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTcmVhZG9ubHk6OmdldENvbnN0cnVjdG9y
KHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Ci19Ci0KLWJvb2wgc2V0
SlNyZWFkb25seUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAg
ICBKU3JlYWRvbmx5UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTcmVhZG9u
bHlQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElL
RUxZKCFkb21PYmplY3QpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0
YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7Ci19
Ci0KLUpTVmFsdWUgSlNyZWFkb25seTo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3Rv
cjxKU3JlYWRvbmx5Q29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Ci19Ci0KLWJvb2wgSlNyZWFkb25seU93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9p
ZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwot
ICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
SlNyZWFkb25seU93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCogY29udGV4dCkKLXsKLSAgICBhdXRvKiBqc3JlYWRvbmx5ID0ganNDYXN0PEpTcmVh
ZG9ubHkqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7Ci0gICAgYXV0byYgd29ybGQgPSAqc3Rh
dGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7Ci0gICAgdW5jYWNoZVdyYXBwZXIo
d29ybGQsICZqc3JlYWRvbmx5LT53cmFwcGVkKCksIGpzcmVhZG9ubHkpOwotfQotCi1KU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZjxyZWFkb25seT4mJiBpbXBsKQotewotI2lmIENPTVBJTEVSKENM
QU5HKQotICAgIC8vIElmIHlvdSBoaXQgdGhpcyBmYWlsdXJlIHRoZSBpbnRlcmZhY2UgZGVmaW5p
dGlvbiBoYXMgdGhlIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUKLSAgICAvLyBhdHRyaWJ1dGUu
IFlvdSBzaG91bGQgcmVtb3ZlIHRoYXQgYXR0cmlidXRlLiBJZiB0aGUgY2xhc3MgaGFzIHN1YmNs
YXNzZXMKLSAgICAvLyB0aGF0IG1heSBiZSBwYXNzZWQgdGhyb3VnaCB0aGlzIHRvSlMoKSBmdW5j
dGlvbiB5b3Ugc2hvdWxkIHVzZSB0aGUgU2tpcFZUYWJsZVZhbGlkYXRpb24KLSAgICAvLyBhdHRy
aWJ1dGUgdG8gcmVhZG9ubHkuCi0gICAgc3RhdGljX2Fzc2VydCghX19pc19wb2x5bW9ycGhpYyhy
ZWFkb25seSksICJyZWFkb25seSBpcyBwb2x5bW9ycGhpYyBidXQgdGhlIElETCBjbGFpbXMgaXQg
aXMgbm90Iik7Ci0jZW5kaWYKLSAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxyZWFkb25seT4oZ2xv
YmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCByZWFkb25s
eSYgaW1wbCkKLXsKLSAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsK
LX0KLQotcmVhZG9ubHkqIEpTcmVhZG9ubHk6OnRvV3JhcHBlZChKU0M6OkpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTcmVhZG9ubHkqPih2
YWx1ZSkpCi0gICAgICAgIHJldHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOwotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNyZWFkb25seS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTcmVhZG9ubHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI0
MmQyZjJkZDQxM2M5MTU5MGNkOTRkNzA4M2MzNjJjY2M4NDNhZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNyZWFkb25seS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAot
LyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkpTRE9N
V3JhcHBlci5oIgotI2luY2x1ZGUgInJlYWRvbmx5LmgiCi0jaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNyZWFkb25seSA6IHB1
YmxpYyBKU0RPTVdyYXBwZXI8cmVhZG9ubHk+IHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0g
SlNET01XcmFwcGVyPHJlYWRvbmx5PjsKLSAgICBzdGF0aWMgSlNyZWFkb25seSogY3JlYXRlKEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFJlZjxyZWFkb25seT4mJiBpbXBsKQotICAgIHsKLSAgICAgICAgSlNyZWFkb25seSogcHRyID0g
bmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU3JlYWRvbmx5PihnbG9iYWxPYmplY3Qt
PnZtKCkuaGVhcCkpIEpTcmVhZG9ubHkoc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBXVEZNb3Zl
KGltcGwpKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkp
OwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0Kik7Ci0gICAgc3RhdGljIHJlYWRvbmx5KiB0b1dyYXBwZWQoSlNDOjpKU1ZhbHVlKTsKLSAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7Ci0KLSAgICBERUNMQVJFX0lORk87
Ci0KLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Z2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLXBy
b3RlY3RlZDoKLSAgICBKU3JlYWRvbmx5KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmpl
Y3QmLCBSZWY8cmVhZG9ubHk+JiYpOwotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
JiB2bSkKLSAgICB7Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAg
QVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIH0KLQotfTsKLQotY2xhc3MgSlNyZWFkb25s
eU93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0
dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYpOwotICAgIHZpcnR1YWwgdm9p
ZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKLX07
Ci0KLWlubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJX
b3JsZCYsIHJlYWRvbmx5KikKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNyZWFkb25s
eU93bmVyPiBvd25lcjsKLSAgICByZXR1cm4gJm93bmVyLmdldCgpOwotfQotCi1pbmxpbmUgdm9p
ZCogd3JhcHBlcktleShyZWFkb25seSogd3JhcHBhYmxlT2JqZWN0KQotewotICAgIHJldHVybiB3
cmFwcGFibGVPYmplY3Q7Ci19Ci0KLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCByZWFkb25seSYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
cmVhZG9ubHkqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3Qs
ICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8cmVhZG9ubHk+JiYpOwot
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPHJlYWRvbmx5PiYmIGlt
cGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3Qs
IGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxyZWFkb25seT4gewotICAgIHVzaW5n
IFdyYXBwZXJDbGFzcyA9IEpTcmVhZG9ubHk7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlw
ZSA9IHJlYWRvbmx5KjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RXhjZXB0aW9uLmlkbCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0RXhjZXB0aW9uLmlkbApp
bmRleCAyN2RkMjg2MTRhZjMxZjcyODA0ZmVlN2YxMTM1Mzg4ZjgwOWYwZTZjLi40NjMzYmUzZTMx
YTFlOWEwMjNjODJmMjNiNGFiZGY0YTNmM2YxNmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEV4Y2VwdGlvbi5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RFeGNlcHRpb24uaWRsCkBAIC0yNSwxMSAr
MjUsNyBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKIGV4Y2VwdGlv
biBUZXN0RXhjZXB0aW9uIHsKICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsK
IH07Ci0KLS8vIElkZW50aWZpZXJzIHdpdGggYSBsZWFkaW5nIHVuZGVyc2NvcmUsIHdoaWNoIHNo
b3VsZCBiZSByZW1vdmVkLgotZXhjZXB0aW9uIF9hdHRyaWJ1dGUgewotICAgcmVhZG9ubHkgYXR0
cmlidXRlIERPTVN0cmluZyBfcmVhZG9ubHk7Ci19OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RJbnRlcmZhY2UuaWRsIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RJbnRlcmZhY2UuaWRsCmluZGV4IGQ1OTY0OTIw
YTdlYmU4ZDgzNmFhNmUyN2I5MDQ3ODc1OWZlNDJlYjkuLjFjMzhiZDA2NGRhMjVkZjgwNWU3M2Y0
YmUzMzQ0ODViZWVlYzI5MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0SW50ZXJmYWNlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdEludGVyZmFjZS5pZGwKQEAgLTQxLDggKzQxLDMgQEAKIH07CiAK
IFRlc3RJbnRlcmZhY2UgaW1wbGVtZW50cyBUZXN0SW1wbGVtZW50czsKLQotWwotICAgIEltcGxl
bWVudGF0aW9uTGFja3NWVGFibGUKLV0gaW50ZXJmYWNlIF9yZWFkb25seSB7Ci19OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2U0Mjcx
NWZlZDgzMGY3ZDhiN2I3OGYxNjg4MjM5ZTg2YjI0ZDhmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZS5pZGwKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXN0ckFyZywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRXN0ckFyZywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIElkZW50aWZpZXJzIHdpdGgg
YSBsZWFkaW5nIHVuZGVyc2NvcmUsIHdoaWNoIHNob3VsZCBiZSByZW1vdmVkLgorWworICAgIElt
cGxlbWVudGF0aW9uTGFja3NWVGFibGUKK10gaW50ZXJmYWNlIF9UZXN0SW50ZXJmYWNlTGVhZGlu
Z1VuZGVyc2NvcmUgeworICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBfcmVhZG9ubHk7
Cit9Owo=
</data>
<flag name="review"
          id="315640"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>