<?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>62078</bug_id>
          
          <creation_ts>2011-06-03 17:53:54 -0700</creation_ts>
          <short_desc>Implement BiquadFilterNode for filter types: LOWPASS, HIGHPASS, BANDPASS, LOWSHELF, HIGHSHELF, PEAKING, NOTCH, ALLPASS</short_desc>
          <delta_ts>2011-06-08 13:30:52 -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>Web Audio</component>
          <version>528+ (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="Chris Rogers">crogers</reporter>
          <assigned_to name="Chris Rogers">crogers</assigned_to>
          <cc>crogers</cc>
    
    <cc>kbr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>415339</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-06-03 17:53:54 -0700</bug_when>
    <thetext>Implement BiquadFilterNode for filter types: LOWPASS, HIGHPASS, BANDPASS, LOWSHELF, HIGHSHELF, PEAKING, NOTCH, ALLPASS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415342</commentid>
    <comment_count>1</comment_count>
      <attachid>96002</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-06-03 18:06:39 -0700</bug_when>
    <thetext>Created attachment 96002
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415345</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-06-03 18:11:01 -0700</bug_when>
    <thetext>See filter cookbook reference:
http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt

For newly implemented filter types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417386</commentid>
    <comment_count>3</comment_count>
      <attachid>96002</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-06-08 12:00:19 -0700</bug_when>
    <thetext>Comment on attachment 96002
Patch

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

I&apos;m not qualified to review the math for the coefficients but have a couple of minor comments.

Also, when are you going to delete the LowPass2FilterNode and HighPass2FilterNode, or at least implement them in terms of the Biquad2FilterNode? If they&apos;re deprecated then their construction should probably log a warning message to the console that they will be removed soon. There are not enough users of the Web Audio API at this point to warrant keeping them around permanently.

&gt; Source/WebCore/platform/audio/Biquad.cpp:230
&gt; +    double a0Inverse = 1.0 / a0;

All of the .0&apos;s in this file seem unnecessary and so should be removed per WebKit style.

&gt; Source/WebCore/platform/audio/Biquad.cpp:250
&gt; +    // FIXME: optimize the common terms

Why not at least define aPlusOne and aMinusOne now rather than adding this FIXME?

&gt; Source/WebCore/platform/audio/Biquad.cpp:272
&gt; +    // FIXME: optimize the common terms

Same question about common terms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417464</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-06-08 13:29:23 -0700</bug_when>
    <thetext>Committed r88380: &lt;http://trac.webkit.org/changeset/88380&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417465</commentid>
    <comment_count>5</comment_count>
      <attachid>96002</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-06-08 13:30:52 -0700</bug_when>
    <thetext>Comment on attachment 96002
Patch

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

I also added console warnings for deprecated APIs

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:230
&gt;&gt; +    double a0Inverse = 1.0 / a0;
&gt; 
&gt; All of the .0&apos;s in this file seem unnecessary and so should be removed per WebKit style.

FIXED

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:250
&gt;&gt; +    // FIXME: optimize the common terms
&gt; 
&gt; Why not at least define aPlusOne and aMinusOne now rather than adding this FIXME?

FIXED

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:272
&gt;&gt; +    // FIXME: optimize the common terms
&gt; 
&gt; Same question about common terms.

FIXED</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96002</attachid>
            <date>2011-06-03 18:06:39 -0700</date>
            <delta_ts>2011-06-08 13:30:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62078-20110603180638.patch</filename>
            <type>text/plain</type>
            <size>36966</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4MDgzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDYtMDMgIENocmlzIFJv
Z2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgQmlxdWFkRmlsdGVyTm9kZSBmb3IgZmlsdGVy
IHR5cGVzOiBMT1dQQVNTLCBISUdIUEFTUywgQkFORFBBU1MsIExPV1NIRUxGLCBISUdIU0hFTEYs
IFBFQUtJTkcsIE5PVENILCBBTExQQVNTCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MjA3OAorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSBhdWRp
byBBUEkgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2Vz
Lm1ha2U6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjpzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0TG93U2hlbGZQYXJhbXMpOgorICAgICAgICAo
V2ViQ29yZTo6QmlxdWFkOjpzZXRIaWdoU2hlbGZQYXJhbXMpOgorICAgICAgICAoV2ViQ29yZTo6
QmlxdWFkOjpzZXRQZWFraW5nUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0
QWxscGFzc1BhcmFtcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OnNldE5vdGNoUGFyYW1z
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0QmFuZHBhc3NQYXJhbXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL0JpcXVhZC5oOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZUJpcXVhZEZp
bHRlcik6CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmg6CisgICAgICAgICogd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmlkbDoKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb05vZGUuaDoK
KyAgICAgICAgKiB3ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QmlxdWFkRFNQS2VybmVsOjpwcm9jZXNzKToKKyAgICAgICAgKiB3ZWJhdWRpby9CaXF1YWRG
aWx0ZXJOb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpCaXF1YWRGaWx0ZXJOb2Rl
OjpCaXF1YWRGaWx0ZXJOb2RlKToKKyAgICAgICAgKiB3ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2Rl
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkRmlsdGVyTm9kZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZEZpbHRlck5vZGU6OnR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlxdWFkRmlsdGVyTm9kZTo6c2V0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1
YWRGaWx0ZXJOb2RlOjpmcmVxdWVuY3kpOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkRmlsdGVy
Tm9kZTo6cSk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWRGaWx0ZXJOb2RlOjpnYWluKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpcXVhZEZpbHRlck5vZGU6OmJpcXVhZFByb2Nlc3Nvcik6CisgICAg
ICAgICogd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGw6IEFkZGVkLgorICAgICAgICAqIHdl
YmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWRQcm9j
ZXNzb3I6OkJpcXVhZFByb2Nlc3Nvcik6CisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkUHJvY2Vz
c29yLmg6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWRQcm9jZXNzb3I6OnNldFR5cGUpOgorICAg
ICAgICAqIHdlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SGlnaFBhc3MyRmlsdGVyTm9kZTo6SGlnaFBhc3MyRmlsdGVyTm9kZSk6CisgICAgICAgICog
d2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxvd1Bh
c3MyRmlsdGVyTm9kZTo6TG93UGFzczJGaWx0ZXJOb2RlKToKKwogMjAxMS0wNi0wMyAgQ2FyeSBD
bGFyayAgPGNhcnljbGFya0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMg
U2VpZGVsLgpJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiA4ODA4
MykKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDYgKzY4LDcgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgQXVkaW9QYXJhbSBcCiAgICAg
QXVkaW9Qcm9jZXNzaW5nRXZlbnQgXAogICAgIEF1ZGlvU291cmNlTm9kZSBcCisgICAgQmlxdWFk
RmlsdGVyTm9kZSBcCiAgICAgQ29udm9sdmVyTm9kZSBcCiAgICAgRGVsYXlOb2RlIFwKICAgICBE
eW5hbWljc0NvbXByZXNzb3JOb2RlIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDg4
MDgzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDIzLDYgKzE0MjMsNyBAQAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaWRsJywK
ICAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5pZGwnLAogICAgICAg
ICAgICAgJ3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5pZGwnLAorICAgICAgICAgICAgJ3dlYmF1
ZGlvL0JpcXVhZEZpbHRlck5vZGUuaWRsJywKICAgICAgICAgICAgICd3ZWJhdWRpby9Db252b2x2
ZXJOb2RlLmlkbCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vRGVsYXlOb2RlLmlkbCcsCiAgICAg
ICAgICAgICAnd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5pZGwnLApAQCAtNTk4Nyw2
ICs1OTg4LDggQEAKICAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaCcsCiAg
ICAgICAgICAgICAnd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcCcsCiAgICAgICAgICAgICAn
d2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmgnLAorICAgICAgICAgICAgJ3dlYmF1ZGlvL0JpcXVh
ZEZpbHRlck5vZGUuY3BwJywKKyAgICAgICAgICAgICd3ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2Rl
LmgnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHAnLAogICAgICAg
ICAgICAgJ3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5oJywKICAgICAgICAgICAgICd3ZWJhdWRp
by9Db252b2x2ZXJOb2RlLmNwcCcsCkBAIC03MDA3LDYgKzcwMTAsOCBAQAogICAgICAgICAgICAg
JzwoUFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNCZWZvcmVMb2FkRXZlbnQu
aCcsCiAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U0JlZm9yZVByb2Nlc3NFdmVudC5jcHAnLAogICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNCZWZvcmVQcm9jZXNzRXZlbnQuaCcsCisgICAgICAgICAg
ICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0JpcXVhZEZpbHRlck5v
ZGUuY3BwJywKKyAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTQmlxdWFkRmlsdGVyTm9kZS5oJywKICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQmxvYi5jcHAnLAogICAgICAgICAgICAgJzwoUFJPRFVD
VF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNCbG9iLmgnLAogICAgICAgICAgICAgJzwo
UFJPRFVDVF9ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNDREFUQVNlY3Rpb24uY3BwJywK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDg4MDgzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01OTk1LDExICs1OTk1LDE1IEBA
CiAJCUZEQTNFOTVBMTM0QTQ5RUYwMDhENEI1QSAvKiBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQTNF
OTU2MTM0QTQ5RUYwMDhENEI1QSAvKiBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCAqLzsg
fTsKIAkJRkRBM0U5NUIxMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
REEzRTk1NzEzNEE0OUVGMDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNw
cCAqLzsgfTsKIAkJRkRBM0U5NUMxMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0Rlc3Rp
bmF0aW9uTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkRBM0U5NTgxMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5oICovOyB9OworCQlGREM1NEYwNDEzOTlCMERBMDA4RDkxMTcgLyogQmlxdWFkRmlsdGVyTm9k
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREM1
NEYwMTEzOTlCMERBMDA4RDkxMTcgLyogQmlxdWFkRmlsdGVyTm9kZS5jcHAgKi87IH07CisJCUZE
QzU0RjA1MTM5OUIwREEwMDhEOTExNyAvKiBCaXF1YWRGaWx0ZXJOb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREM1NEYwMjEzOTlCMERBMDA4RDkx
MTcgLyogQmlxdWFkRmlsdGVyTm9kZS5oICovOyB9OwogCQlGREVBQUFGMzEyQjAyRUU0MDBEQ0Yz
M0IgLyogSlNBdWRpb0J1ZmZlclNvdXJjZU5vZGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRFQUFBRUYxMkIwMkVFNDAwRENGMzNCIC8q
IEpTQXVkaW9CdWZmZXJTb3VyY2VOb2RlQ3VzdG9tLmNwcCAqLzsgfTsKIAkJRkRFQUFBRjQxMkIw
MkVFNDAwRENGMzNCIC8qIEpTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZERUFBQUYwMTJCMDJFRTQwMERDRjMzQiAv
KiBKU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAgKi87IH07CiAJCUZERUFBQUY1MTJCMDJFRTQwMERD
RjMzQiAvKiBKU0F1ZGlvTm9kZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGREVBQUFGMTEyQjAyRUU0MDBEQ0YzM0IgLyogSlNBdWRpb05v
ZGVDdXN0b20uY3BwICovOyB9OwogCQlGREVBQUFGNjEyQjAyRUU0MDBEQ0YzM0IgLyogSlNDb252
b2x2ZXJOb2RlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZERUFBQUYyMTJCMDJFRTQwMERDRjMzQiAvKiBKU0NvbnZvbHZlck5vZGVDdXN0
b20uY3BwICovOyB9OwogCQlGREVBQUFGRTEyQjAyRjQ5MDBEQ0YzM0IgLyogSlNKYXZhU2NyaXB0
QXVkaW9Ob2RlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZERUFBQUZEMTJCMDJGNDkwMERDRjMzQiAvKiBKU0phdmFTY3JpcHRBdWRpb05v
ZGVDdXN0b20uY3BwICovOyB9OworCQlGREYwOURDODEzOTlCNjIyMDA2ODhFNUIgLyogSlNCaXF1
YWRGaWx0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZERjA5REM2MTM5OUI2MjIwMDY4OEU1QiAvKiBKU0JpcXVhZEZpbHRlck5vZGUuY3Bw
ICovOyB9OworCQlGREYwOURDOTEzOTlCNjIyMDA2ODhFNUIgLyogSlNCaXF1YWRGaWx0ZXJOb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREYwOURD
NzEzOTlCNjIyMDA2ODhFNUIgLyogSlNCaXF1YWRGaWx0ZXJOb2RlLmggKi87IH07CiAJCUZERjZC
QUY4MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREY2QkFGNjEz
NEE0Qzk4MDA4MjI5MjAgLyogSlNPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwICovOyB9
OwogCQlGREY2QkFGOTEzNEE0Qzk4MDA4MjI5MjAgLyogSlNPZmZsaW5lQXVkaW9Db21wbGV0aW9u
RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZE
RjZCQUY3MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5o
ICovOyB9OwogCQlGRTZGRDQ4ODBGNjc2RTU3MDAwOTI4NzMgLyogQ29vcmRpbmF0ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNkZENDg1MEY2NzZF
NTcwMDA5Mjg3MyAvKiBDb29yZGluYXRlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xMjYzMSwxMSArMTI2MzUsMTYgQEAKIAkJRkRBM0U5NTcx
MzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREEzRTk1ODEzNEE0OUVGMDA4
RDRCNUEgLyogT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGREEzRTk1RDEzNEE0OUZGMDA4RDRCNUEgLyogT2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBPZmZsaW5lQXVk
aW9Db21wbGV0aW9uRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGREM1
NEYwMTEzOTlCMERBMDA4RDkxMTcgLyogQmlxdWFkRmlsdGVyTm9kZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaXF1YWRGaWx0ZXJOb2RlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkRDNTRGMDIxMzk5QjBEQTAwOEQ5MTE3IC8qIEJpcXVhZEZp
bHRlck5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmlxdWFkRmlsdGVy
Tm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGREM1NEYwMzEzOTlCMERBMDA4
RDkxMTcgLyogQmlxdWFkRmlsdGVyTm9kZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQmlx
dWFkRmlsdGVyTm9kZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZERUFBQUVG
MTJCMDJFRTQwMERDRjMzQiAvKiBKU0F1ZGlvQnVmZmVyU291cmNlTm9kZUN1c3RvbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0F1ZGlvQnVmZmVyU291cmNlTm9k
ZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZERUFBQUYwMTJCMDJF
RTQwMERDRjMzQiAvKiBKU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZERUFBQUYxMTJCMDJFRTQwMERDRjMzQiAvKiBKU0F1ZGlvTm9k
ZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0F1ZGlv
Tm9kZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZERUFBQUYyMTJC
MDJFRTQwMERDRjMzQiAvKiBKU0NvbnZvbHZlck5vZGVDdXN0b20uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDb252b2x2ZXJOb2RlQ3VzdG9tLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRFQUFBRkQxMkIwMkY0OTAwRENGMzNCIC8qIEpTSmF2
YVNjcmlwdEF1ZGlvTm9kZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0phdmFTY3JpcHRBdWRpb05vZGVDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGREYwOURDNjEzOTlCNjIyMDA2ODhFNUIgLyogSlNCaXF1YWRGaWx0ZXJO
b2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQmlxdWFkRmls
dGVyTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZERjA5REM3MTM5OUI2
MjIwMDY4OEU1QiAvKiBKU0JpcXVhZEZpbHRlck5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNCaXF1YWRGaWx0ZXJOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZERjZCQUY2MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09mZmxpbmVBdWRpb0NvbXBsZXRp
b25FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU09mZmxp
bmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZERjZCQUY3MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU09mZmxpbmVBdWRpb0NvbXBs
ZXRpb25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTQ5RUY5NzBEQzUx
NDYyMDA0MjY2RTEgLyogRGFzaGJvYXJkU3VwcG9ydENTU1Byb3BlcnR5TmFtZXMuaW4gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gRGFzaGJvYXJkU3VwcG9ydENTU1Byb3BlcnR5TmFtZXMuaW47IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTgzNSw2ICsxOTg0NCw5IEBACiAJCQkJRkQz
MTVGRDkxMkIwMjY3NjAwQzFBMzU5IC8qIEF1ZGlvU291cmNlTm9kZS5pZGwgKi8sCiAJCQkJRkQz
MTVGREExMkIwMjY3NjAwQzFBMzU5IC8qIEJpcXVhZERTUEtlcm5lbC5jcHAgKi8sCiAJCQkJRkQz
MTVGREIxMkIwMjY3NjAwQzFBMzU5IC8qIEJpcXVhZERTUEtlcm5lbC5oICovLAorCQkJCUZEQzU0
RjAxMTM5OUIwREEwMDhEOTExNyAvKiBCaXF1YWRGaWx0ZXJOb2RlLmNwcCAqLywKKwkJCQlGREM1
NEYwMjEzOTlCMERBMDA4RDkxMTcgLyogQmlxdWFkRmlsdGVyTm9kZS5oICovLAorCQkJCUZEQzU0
RjAzMTM5OUIwREEwMDhEOTExNyAvKiBCaXF1YWRGaWx0ZXJOb2RlLmlkbCAqLywKIAkJCQlGRDMx
NUZEQzEyQjAyNjc2MDBDMUEzNTkgLyogQmlxdWFkUHJvY2Vzc29yLmNwcCAqLywKIAkJCQlGRDMx
NUZERDEyQjAyNjc2MDBDMUEzNTkgLyogQmlxdWFkUHJvY2Vzc29yLmggKi8sCiAJCQkJRkQzMTVG
REUxMkIwMjY3NjAwQzFBMzU5IC8qIENvbnZvbHZlck5vZGUuY3BwICovLApAQCAtMTk5ODgsNiAr
MjAwMDAsOCBAQAogCQkJCUZEQTE1RTlBMTJCMDNFRTEwMDNBNTgzQSAvKiBKU0F1ZGlvUHJvY2Vz
c2luZ0V2ZW50LmggKi8sCiAJCQkJRkRBMTVFOUIxMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9T
b3VyY2VOb2RlLmNwcCAqLywKIAkJCQlGREExNUU5QzEyQjAzRUUxMDAzQTU4M0EgLyogSlNBdWRp
b1NvdXJjZU5vZGUuaCAqLywKKwkJCQlGREYwOURDNjEzOTlCNjIyMDA2ODhFNUIgLyogSlNCaXF1
YWRGaWx0ZXJOb2RlLmNwcCAqLywKKwkJCQlGREYwOURDNzEzOTlCNjIyMDA2ODhFNUIgLyogSlNC
aXF1YWRGaWx0ZXJOb2RlLmggKi8sCiAJCQkJRkRBMTVFQkIxMkIwM0YwQjAwM0E1ODNBIC8qIEpT
Q29udm9sdmVyTm9kZS5jcHAgKi8sCiAJCQkJRkRBMTVFQkMxMkIwM0YwQjAwM0E1ODNBIC8qIEpT
Q29udm9sdmVyTm9kZS5oICovLAogCQkJCUZEQTE1RUNGMTJCMDNGOTQwMDNBNTgzQSAvKiBKU0Rl
bGF5Tm9kZS5jcHAgKi8sCkBAIC0yMzE0MSw2ICsyMzE1NSw4IEBACiAJCQkJNDQ5NkUzQTAxMzk4
MTNBNTAwM0VFMzJBIC8qIEpTU1ZHTVBhdGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQky
RTI0NDVGNzEzOTU4OTNBMDA0QjZDMTkgLyogT3BlcmF0aW9uTm90QWxsb3dlZEV4Y2VwdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkUyNDQ3NjkxMzk1OTE3MzAwNEI2QzE5IC8qIEpTT3BlcmF0
aW9uTm90QWxsb3dlZEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkRDNTRGMDUxMzk5
QjBEQTAwOEQ5MTE3IC8qIEJpcXVhZEZpbHRlck5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUZE
RjA5REM5MTM5OUI2MjIwMDY4OEU1QiAvKiBKU0JpcXVhZEZpbHRlck5vZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMjU4NzAsNiArMjU4ODYsOCBAQAogCQkJCTQ0OTZFMzlEMTM5ODEzNkMwMDNFRTMy
QSAvKiBKU1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ0
OTZFM0EyMTM5ODEzQ0IwMDNFRTMyQSAvKiBKU1NWR01QYXRoRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyRTI0NDc2ODEzOTU5MTczMDA0QjZDMTkgLyogSlNPcGVyYXRpb25Ob3RBbGxv
d2VkRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZEQzU0RjA0MTM5OUIwREEwMDhE
OTExNyAvKiBCaXF1YWRGaWx0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZERjA5REM4
MTM5OUI2MjIwMDY4OEU1QiAvKiBKU0JpcXVhZEZpbHRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAJKHJldmlzaW9u
IDg4MDgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjI1LDE3ICsyMjUsMjkgQEAgdm9pZCBCaXF1YWQ6OnNldEhpZ2hwYXNz
UGFyYW1zKGRvdWJsZSBjdQogICAgIG1fYTIgPSAyLjAgKiBiZXRhOwogfQogCi12b2lkIEJpcXVh
ZDo6c2V0TG93U2hlbGZQYXJhbXMoZG91YmxlIGN1dG9mZiwgZG91YmxlIGRiR2FpbikKK3ZvaWQg
QmlxdWFkOjpzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKGRvdWJsZSBiMCwgZG91YmxlIGIxLCBk
b3VibGUgYjIsIGRvdWJsZSBhMCwgZG91YmxlIGExLCBkb3VibGUgYTIpCiB7Ci0gICAgZG91Ymxl
IHRoZXRhID0gcGlEb3VibGUgKiBjdXRvZmY7CisgICAgZG91YmxlIGEwSW52ZXJzZSA9IDEuMCAv
IGEwOworICAgIAorICAgIG1fYjAgPSBiMCAqIGEwSW52ZXJzZTsKKyAgICBtX2IxID0gYjEgKiBh
MEludmVyc2U7CisgICAgbV9iMiA9IGIyICogYTBJbnZlcnNlOworICAgIG1fYTEgPSBhMSAqIGEw
SW52ZXJzZTsKKyAgICBtX2EyID0gYTIgKiBhMEludmVyc2U7Cit9CisKK3ZvaWQgQmlxdWFkOjpz
ZXRMb3dTaGVsZlBhcmFtcyhkb3VibGUgZnJlcXVlbmN5LCBkb3VibGUgZGJHYWluKQoreworICAg
IGRvdWJsZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5OwogCiAgICAgZG91YmxlIEEgPSBwb3co
MTAuMCwgZGJHYWluIC8gNDAuMCk7CiAgICAgZG91YmxlIFMgPSAxLjA7IC8vIGZpbHRlciBzbG9w
ZSAoMS4wIGlzIG1heCB2YWx1ZSkKLSAgICBkb3VibGUgYWxwaGEgPSAwLjUgKiBzaW4odGhldGEp
ICogc3FydCgoQSArIDEuMCAvIEEpICogKDEuMCAvIFMgLSAxLjApICsgMi4wKTsKKyAgICBkb3Vi
bGUgYWxwaGEgPSAwLjUgKiBzaW4odzApICogc3FydCgoQSArIDEuMCAvIEEpICogKDEuMCAvIFMg
LSAxLjApICsgMi4wKTsKIAotICAgIGRvdWJsZSBrID0gY29zKHRoZXRhKTsKKyAgICBkb3VibGUg
ayA9IGNvcyh3MCk7CiAgICAgZG91YmxlIGsyID0gMi4wICogc3FydChBKSAqIGFscGhhOwogCisg
ICAgLy8gRklYTUU6IG9wdGltaXplIHRoZSBjb21tb24gdGVybXMKICAgICBkb3VibGUgYjAgPSBB
ICogKChBICsgMS4wKSAtIChBIC0gMS4wKSAqIGsgKyBrMik7CiAgICAgZG91YmxlIGIxID0gMi4w
ICogQSAqICgoQSAtIDEuMCkgLSAoQSArIDEuMCkgKiBrKTsKICAgICBkb3VibGUgYjIgPSBBICog
KChBICsgMS4wKSAtIChBIC0gMS4wKSAqIGsgLSBrMik7CkBAIC0yNDMsMTMgKzI1NSw5OCBAQCB2
b2lkIEJpcXVhZDo6c2V0TG93U2hlbGZQYXJhbXMoZG91YmxlIGN1CiAgICAgZG91YmxlIGExID0g
LTIuMCAqICgoQSAtIDEuMCkgKyAoQSArIDEuMCkgKiBrKTsKICAgICBkb3VibGUgYTIgPSAoQSAr
IDEuMCkgKyAoQSAtIDEuMCkgKiBrIC0gazI7CiAKLSAgICBkb3VibGUgYTBJbnZlcnNlID0gMS4w
IC8gYTA7CisgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEs
IGEyKTsKK30KKwordm9pZCBCaXF1YWQ6OnNldEhpZ2hTaGVsZlBhcmFtcyhkb3VibGUgZnJlcXVl
bmN5LCBkb3VibGUgZGJHYWluKQoreworICAgIGRvdWJsZSB3MCA9IHBpRG91YmxlICogZnJlcXVl
bmN5OworCisgICAgZG91YmxlIEEgPSBwb3coMTAuMCwgZGJHYWluIC8gNDAuMCk7CisgICAgZG91
YmxlIFMgPSAxLjA7IC8vIGZpbHRlciBzbG9wZSAoMS4wIGlzIG1heCB2YWx1ZSkKKyAgICBkb3Vi
bGUgYWxwaGEgPSAwLjUgKiBzaW4odzApICogc3FydCgoQSArIDEuMCAvIEEpICogKDEuMCAvIFMg
LSAxLjApICsgMi4wKTsKKworICAgIGRvdWJsZSBrID0gY29zKHcwKTsKKyAgICBkb3VibGUgazIg
PSAyLjAgKiBzcXJ0KEEpICogYWxwaGE7CisKKyAgICAvLyBGSVhNRTogb3B0aW1pemUgdGhlIGNv
bW1vbiB0ZXJtcworICAgIGRvdWJsZSBiMCA9IEEgKiAoKEEgKyAxLjApICsgKEEgLSAxLjApICog
ayArIGsyKTsKKyAgICBkb3VibGUgYjEgPSAtMi4wICogQSAqICgoQSAtIDEuMCkgKyAoQSArIDEu
MCkgKiBrKTsKKyAgICBkb3VibGUgYjIgPSBBICogKChBICsgMS4wKSArIChBIC0gMS4wKSAqIGsg
LSBrMik7CisgICAgZG91YmxlIGEwID0gKEEgKyAxLjApIC0gKEEgLSAxLjApICogayArIGsyOwor
ICAgIGRvdWJsZSBhMSA9IDIuMCAqICgoQSAtIDEuMCkgLSAoQSArIDEuMCkgKiBrKTsKKyAgICBk
b3VibGUgYTIgPSAoQSArIDEuMCkgLSAoQSAtIDEuMCkgKiBrIC0gazI7CisKKyAgICBzZXROb3Jt
YWxpemVkQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworfQorCit2b2lkIEJp
cXVhZDo6c2V0UGVha2luZ1BhcmFtcyhkb3VibGUgZnJlcXVlbmN5LCBkb3VibGUgUSwgZG91Ymxl
IGRiR2FpbikKK3sKKyAgICBkb3VibGUgdzAgPSBwaURvdWJsZSAqIGZyZXF1ZW5jeTsKKyAgICBk
b3VibGUgYWxwaGEgPSBzaW4odzApIC8gKDIgKiBRKTsKKyAgICBkb3VibGUgQSA9IHBvdygxMC4w
LCBkYkdhaW4gLyA0MC4wKTsKKworICAgIGRvdWJsZSBrID0gY29zKHcwKTsKKworICAgIGRvdWJs
ZSBiMCA9IDEgKyBhbHBoYSAqIEE7CisgICAgZG91YmxlIGIxID0gLTIgKiBrOworICAgIGRvdWJs
ZSBiMiA9IDEgLSBhbHBoYSAqIEE7CisgICAgZG91YmxlIGEwID0gMSArIGFscGhhIC8gQTsKKyAg
ICBkb3VibGUgYTEgPSAtMiAqIGs7CisgICAgZG91YmxlIGEyID0gMSAtIGFscGhhIC8gQTsKKwor
ICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBhMik7Cit9
CisKK3ZvaWQgQmlxdWFkOjpzZXRBbGxwYXNzUGFyYW1zKGRvdWJsZSBmcmVxdWVuY3ksIGRvdWJs
ZSBRKQoreworICAgIGRvdWJsZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5OworICAgIGRvdWJs
ZSBhbHBoYSA9IHNpbih3MCkgLyAoMiAqIFEpOworCisgICAgZG91YmxlIGsgPSBjb3ModzApOwor
CisgICAgZG91YmxlIGIwID0gMSAtIGFscGhhOworICAgIGRvdWJsZSBiMSA9IC0yICogazsKKyAg
ICBkb3VibGUgYjIgPSAxICsgYWxwaGE7CisgICAgZG91YmxlIGEwID0gMSArIGFscGhhOworICAg
IGRvdWJsZSBhMSA9IC0yICogazsKKyAgICBkb3VibGUgYTIgPSAxIC0gYWxwaGE7CisKKyAgICBz
ZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworfQorCit2
b2lkIEJpcXVhZDo6c2V0Tm90Y2hQYXJhbXMoZG91YmxlIGZyZXF1ZW5jeSwgZG91YmxlIFEpCit7
CisgICAgZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7CisgICAgZG91YmxlIGFscGhh
ID0gc2luKHcwKSAvICgyICogUSk7CisKKyAgICBkb3VibGUgayA9IGNvcyh3MCk7CisKKyAgICBk
b3VibGUgYjAgPSAxOworICAgIGRvdWJsZSBiMSA9IC0yICogazsKKyAgICBkb3VibGUgYjIgPSAx
OworICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYTsKKyAgICBkb3VibGUgYTEgPSAtMiAqIGs7Cisg
ICAgZG91YmxlIGEyID0gMSAtIGFscGhhOworCisgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50
cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKK30KKwordm9pZCBCaXF1YWQ6OnNldEJhbmRwYXNz
UGFyYW1zKGRvdWJsZSBmcmVxdWVuY3ksIGRvdWJsZSBRKQoreworICAgIGRvdWJsZSB3MCA9IHBp
RG91YmxlICogZnJlcXVlbmN5OworICAgIGRvdWJsZSBhbHBoYSA9IHNpbih3MCkgLyAoMiAqIFEp
OworCisgICAgZG91YmxlIGsgPSBjb3ModzApOwogICAgIAotICAgIG1fYjAgPSBiMCAqIGEwSW52
ZXJzZTsKLSAgICBtX2IxID0gYjEgKiBhMEludmVyc2U7Ci0gICAgbV9iMiA9IGIyICogYTBJbnZl
cnNlOwotICAgIG1fYTEgPSBhMSAqIGEwSW52ZXJzZTsKLSAgICBtX2EyID0gYTIgKiBhMEludmVy
c2U7CisgICAgZG91YmxlIGIwID0gYWxwaGE7CisgICAgZG91YmxlIGIxID0gMDsKKyAgICBkb3Vi
bGUgYjIgPSAtYWxwaGE7CisgICAgZG91YmxlIGEwID0gMSArIGFscGhhOworICAgIGRvdWJsZSBh
MSA9IC0yICogazsKKyAgICBkb3VibGUgYTIgPSAxIC0gYWxwaGE7CisKKyAgICBzZXROb3JtYWxp
emVkQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOwogfQogCiB2b2lkIEJpcXVh
ZDo6c2V0WmVyb1BvbGVQYWlycyhjb25zdCBDb21wbGV4ICZ6ZXJvLCBjb25zdCBDb21wbGV4ICZw
b2xlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmgJKHJldmlzaW9u
IDg4MDgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDE1ICs0OCwxNiBAQCBwdWJsaWM6ICAgCiAKICAgICB2b2lkIHByb2Nl
c3MoY29uc3QgZmxvYXQqIHNvdXJjZVAsIGZsb2F0KiBkZXN0UCwgc2l6ZV90IGZyYW1lc1RvUHJv
Y2Vzcyk7CiAKLSAgICAvLyBjdXRvZmYgaXMgMC0xIG5vcm1hbGl6ZWQsIHJlc29uYW5jZSBpcyBp
biBkQiA+PSAwLjAKLSAgICB2b2lkIHNldExvd3Bhc3NQYXJhbXMoZG91YmxlIGN1dG9mZiwgZG91
YmxlIHJlc29uYW5jZSk7Ci0gICAgdm9pZCBzZXRIaWdocGFzc1BhcmFtcyhkb3VibGUgY3V0b2Zm
LCBkb3VibGUgcmVzb25hbmNlKTsKLQotICAgIHZvaWQgc2V0TG93U2hlbGZQYXJhbXMoZG91Ymxl
IGN1dG9mZiwgZG91YmxlIGRiR2Fpbik7Ci0KLSAgICAvLyBGSVhNRTogbmVlZCB0byBpbXBsZW1l
bnQgYSBmZXcgbW9yZSBjb21tb24gZmlsdGVycwotICAgIC8vIHZvaWQgc2V0SGlnaFNoZWxmUGFy
YW1zKGRvdWJsZSBjdXRvZmYsIGRvdWJsZSBkYkdhaW4pOwotICAgIC8vIHZvaWQgc2V0UGFyYW1l
dHJpY0VRUGFyYW1zKGRvdWJsZSBjdXRvZmYsIGRvdWJsZSByZXNvbmFuY2UpOworICAgIC8vIGZy
ZXF1ZW5jeSBpcyAwIC0gMSBub3JtYWxpemVkLCByZXNvbmFuY2UgYW5kIGRiR2FpbiBhcmUgaW4g
ZGVjaWJlbHMuCisgICAgLy8gUSBpcyBhIHVuaXRsZXNzIHF1YWxpdHkgZmFjdG9yLgorICAgIHZv
aWQgc2V0TG93cGFzc1BhcmFtcyhkb3VibGUgZnJlcXVlbmN5LCBkb3VibGUgcmVzb25hbmNlKTsK
KyAgICB2b2lkIHNldEhpZ2hwYXNzUGFyYW1zKGRvdWJsZSBmcmVxdWVuY3ksIGRvdWJsZSByZXNv
bmFuY2UpOworICAgIHZvaWQgc2V0QmFuZHBhc3NQYXJhbXMoZG91YmxlIGZyZXF1ZW5jeSwgZG91
YmxlIFEpOworICAgIHZvaWQgc2V0TG93U2hlbGZQYXJhbXMoZG91YmxlIGZyZXF1ZW5jeSwgZG91
YmxlIGRiR2Fpbik7CisgICAgdm9pZCBzZXRIaWdoU2hlbGZQYXJhbXMoZG91YmxlIGZyZXF1ZW5j
eSwgZG91YmxlIGRiR2Fpbik7CisgICAgdm9pZCBzZXRQZWFraW5nUGFyYW1zKGRvdWJsZSBmcmVx
dWVuY3ksIGRvdWJsZSBRLCBkb3VibGUgZGJHYWluKTsKKyAgICB2b2lkIHNldEFsbHBhc3NQYXJh
bXMoZG91YmxlIGZyZXF1ZW5jeSwgZG91YmxlIFEpOworICAgIHZvaWQgc2V0Tm90Y2hQYXJhbXMo
ZG91YmxlIGZyZXF1ZW5jeSwgZG91YmxlIFEpOwogCiAgICAgLy8gU2V0IHRoZSBiaXF1YWQgY29l
ZmZpY2llbnRzIGdpdmVuIGEgc2luZ2xlIHplcm8gKG90aGVyIHplcm8gd2lsbCBiZSBjb25qdWdh
dGUpCiAgICAgLy8gYW5kIGEgc2luZ2xlIHBvbGUgKG90aGVyIHBvbGUgd2lsbCBiZSBjb25qdWdh
dGUpCkBAIC03MCw2ICs3MSw4IEBAIHB1YmxpYzogICAKICAgICB2b2lkIHJlc2V0KCk7CiAKIHBy
aXZhdGU6CisgICAgdm9pZCBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKGRvdWJsZSBiMCwgZG91
YmxlIGIxLCBkb3VibGUgYjIsIGRvdWJsZSBhMCwgZG91YmxlIGExLCBkb3VibGUgYTIpOworCiAg
ICAgLy8gRmlsdGVyIGNvZWZmaWNpZW50cwogICAgIGRvdWJsZSBtX2IwOwogICAgIGRvdWJsZSBt
X2IxOwpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCShyZXZp
c2lvbiA4ODA4MykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJBdWRpb05vZGVJbnB1
dC5oIgogI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgogI2luY2x1ZGUgIkF1ZGlvUGFubmVy
Tm9kZS5oIgorI2luY2x1ZGUgIkJpcXVhZEZpbHRlck5vZGUuaCIKICNpbmNsdWRlICJDb252b2x2
ZXJOb2RlLmgiCiAjaW5jbHVkZSAiRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCiAjaW5j
bHVkZSAiRGVsYXlOb2RlLmgiCkBAIC0yNjQsNiArMjY1LDEzIEBAIFBhc3NSZWZQdHI8SmF2YVNj
cmlwdEF1ZGlvTm9kZT4gQXVkaW9Db24KICAgICByZXR1cm4gbm9kZTsKIH0KIAorUGFzc1JlZlB0
cjxCaXF1YWRGaWx0ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUJpcXVhZEZpbHRlcigpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBsYXp5SW5pdGlhbGl6ZSgpOworICAg
IHJldHVybiBCaXF1YWRGaWx0ZXJOb2RlOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlvbk5vZGUt
PnNhbXBsZVJhdGUoKSk7Cit9CisKIFBhc3NSZWZQdHI8TG93UGFzczJGaWx0ZXJOb2RlPiBBdWRp
b0NvbnRleHQ6OmNyZWF0ZUxvd1Bhc3MyRmlsdGVyKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgJKHJldmlz
aW9uIDg4MDgzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgY2xhc3MgQXVkaW9DaGFubmVsU3BsaXR0ZXI7
CiBjbGFzcyBBdWRpb0dhaW5Ob2RlOwogY2xhc3MgQXVkaW9QYW5uZXJOb2RlOwogY2xhc3MgQXVk
aW9MaXN0ZW5lcjsKK2NsYXNzIEJpcXVhZEZpbHRlck5vZGU7CiBjbGFzcyBEZWxheU5vZGU7CiBj
bGFzcyBEb2N1bWVudDsKIGNsYXNzIExvd1Bhc3MyRmlsdGVyTm9kZTsKQEAgLTEwMCw2ICsxMDEs
NyBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIEF1ZGlvTm9kZSBjcmVhdGUgbWV0aG9kcyBhcmUgY2Fs
bGVkIG9uIHRoZSBtYWluIHRocmVhZCAoZnJvbSBKYXZhU2NyaXB0KS4KICAgICBQYXNzUmVmUHRy
PEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gY3JlYXRlQnVmZmVyU291cmNlKCk7CiAgICAgUGFzc1Jl
ZlB0cjxBdWRpb0dhaW5Ob2RlPiBjcmVhdGVHYWluTm9kZSgpOworICAgIFBhc3NSZWZQdHI8Qmlx
dWFkRmlsdGVyTm9kZT4gY3JlYXRlQmlxdWFkRmlsdGVyKCk7CiAgICAgUGFzc1JlZlB0cjxEZWxh
eU5vZGU+IGNyZWF0ZURlbGF5Tm9kZSgpOwogICAgIFBhc3NSZWZQdHI8TG93UGFzczJGaWx0ZXJO
b2RlPiBjcmVhdGVMb3dQYXNzMkZpbHRlcigpOwogICAgIFBhc3NSZWZQdHI8SGlnaFBhc3MyRmls
dGVyTm9kZT4gY3JlYXRlSGlnaFBhc3MyRmlsdGVyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwJKHJldmlzaW9uIDg4MDgzKQorKysgU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgs
NyBAQCBtb2R1bGUgd2ViYXVkaW8gewogICAgICAgICAvLyBQcm9jZXNzaW5nIG5vZGVzCiAgICAg
ICAgIEF1ZGlvR2Fpbk5vZGUgY3JlYXRlR2Fpbk5vZGUoKTsKICAgICAgICAgRGVsYXlOb2RlIGNy
ZWF0ZURlbGF5Tm9kZSgpOworICAgICAgICBCaXF1YWRGaWx0ZXJOb2RlIGNyZWF0ZUJpcXVhZEZp
bHRlcigpOwogICAgICAgICBMb3dQYXNzMkZpbHRlck5vZGUgY3JlYXRlTG93UGFzczJGaWx0ZXIo
KTsKICAgICAgICAgSGlnaFBhc3MyRmlsdGVyTm9kZSBjcmVhdGVIaWdoUGFzczJGaWx0ZXIoKTsK
ICAgICAgICAgQXVkaW9QYW5uZXJOb2RlIGNyZWF0ZVBhbm5lcigpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9Ob2RlLmgJKHJldmlzaW9uIDg4MDgzKQorKysgU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAgcHVi
bGljOgogICAgICAgICBOb2RlVHlwZURlc3RpbmF0aW9uLAogICAgICAgICBOb2RlVHlwZUF1ZGlv
QnVmZmVyU291cmNlLAogICAgICAgICBOb2RlVHlwZUphdmFTY3JpcHQsCisgICAgICAgIE5vZGVU
eXBlQmlxdWFkRmlsdGVyLAogICAgICAgICBOb2RlVHlwZUxvd1Bhc3MyRmlsdGVyLAogICAgICAg
ICBOb2RlVHlwZUhpZ2hQYXNzMkZpbHRlciwKICAgICAgICAgTm9kZVR5cGVQYW5uZXIsCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHAJKHJldmlzaW9u
IDg4MDgzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsMjkgKzQyLDQ0IEBAIHZvaWQgQmlxdWFkRFNQS2VybmVsOjpw
cm9jZXNzKGNvbnN0IGZsb2EKICAgICBpZiAoYmlxdWFkUHJvY2Vzc29yKCktPmZpbHRlckNvZWZm
aWNpZW50c0RpcnR5KCkpIHsKICAgICAgICAgZG91YmxlIHZhbHVlMSA9IGJpcXVhZFByb2Nlc3Nv
cigpLT5wYXJhbWV0ZXIxKCktPnNtb290aGVkVmFsdWUoKTsKICAgICAgICAgZG91YmxlIHZhbHVl
MiA9IGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIyKCktPnNtb290aGVkVmFsdWUoKTsKKyAg
ICAgICAgZG91YmxlIGdhaW4gPSBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMygpLT5zbW9v
dGhlZFZhbHVlKCk7CiAgICAgICAgIAogICAgICAgICAvLyBDb252ZXJ0IGZyb20gSGVydHogdG8g
bm9ybWFsaXplZCBmcmVxdWVuY3kgMCAtPiAxLgogICAgICAgICBkb3VibGUgbnlxdWlzdCA9IHRo
aXMtPm55cXVpc3QoKTsKLSAgICAgICAgZG91YmxlIG5vcm1hbGl6ZWRWYWx1ZTEgPSB2YWx1ZTEg
LyBueXF1aXN0OworICAgICAgICBkb3VibGUgbm9ybWFsaXplZEZyZXF1ZW5jeSA9IHZhbHVlMSAv
IG55cXVpc3Q7CiAKICAgICAgICAgLy8gQ29uZmlndXJlIHRoZSBiaXF1YWQgd2l0aCB0aGUgbmV3
IGZpbHRlciBwYXJhbWV0ZXJzIGZvciB0aGUgYXBwcm9wcmlhdGUgdHlwZSBvZiBmaWx0ZXIuCiAg
ICAgICAgIHN3aXRjaCAoYmlxdWFkUHJvY2Vzc29yKCktPnR5cGUoKSkgewotICAgICAgICBjYXNl
IEJpcXVhZFByb2Nlc3Nvcjo6TG93UGFzczI6Ci0gICAgICAgICAgICBtX2JpcXVhZC5zZXRMb3dw
YXNzUGFyYW1zKG5vcm1hbGl6ZWRWYWx1ZTEsIHZhbHVlMik7CisgICAgICAgIGNhc2UgQmlxdWFk
UHJvY2Vzc29yOjpMb3dQYXNzOgorICAgICAgICAgICAgbV9iaXF1YWQuc2V0TG93cGFzc1BhcmFt
cyhub3JtYWxpemVkRnJlcXVlbmN5LCB2YWx1ZTIpOwogICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgY2FzZSBCaXF1YWRQcm9jZXNzb3I6OkhpZ2hQYXNzMjoKLSAgICAgICAgICAgIG1fYmlx
dWFkLnNldEhpZ2hwYXNzUGFyYW1zKG5vcm1hbGl6ZWRWYWx1ZTEsIHZhbHVlMik7CisgICAgICAg
IGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpIaWdoUGFzczoKKyAgICAgICAgICAgIG1fYmlxdWFkLnNl
dEhpZ2hwYXNzUGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIHZhbHVlMik7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIEJpcXVhZFByb2Nlc3Nvcjo6QmFuZFBhc3M6CisgICAg
ICAgICAgICBtX2JpcXVhZC5zZXRCYW5kcGFzc1BhcmFtcyhub3JtYWxpemVkRnJlcXVlbmN5LCB2
YWx1ZTIpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBCaXF1YWRQcm9jZXNz
b3I6Okxvd1NoZWxmOgotICAgICAgICAgICAgbV9iaXF1YWQuc2V0TG93U2hlbGZQYXJhbXMobm9y
bWFsaXplZFZhbHVlMSwgdmFsdWUyKTsKKyAgICAgICAgICAgIG1fYmlxdWFkLnNldExvd1NoZWxm
UGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIGdhaW4pOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBCaXF1YWRQcm9jZXNzb3I6OkhpZ2hTaGVsZjoKKyAgICAgICAgICAgIG1f
YmlxdWFkLnNldEhpZ2hTaGVsZlBhcmFtcyhub3JtYWxpemVkRnJlcXVlbmN5LCBnYWluKTsKICAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIC8vIEZJWE1FOiBhZGQgb3RoZXIgYmlxdWFkIGZp
bHRlciB0eXBlcy4uLgogICAgICAgICBjYXNlIEJpcXVhZFByb2Nlc3Nvcjo6UGVha2luZzoKKyAg
ICAgICAgICAgIG1fYmlxdWFkLnNldFBlYWtpbmdQYXJhbXMobm9ybWFsaXplZEZyZXF1ZW5jeSwg
dmFsdWUyLCBnYWluKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQmlxdWFk
UHJvY2Vzc29yOjpOb3RjaDoKKyAgICAgICAgICAgIG1fYmlxdWFkLnNldE5vdGNoUGFyYW1zKG5v
cm1hbGl6ZWRGcmVxdWVuY3ksIHZhbHVlMik7CisgICAgICAgICAgICBicmVhazsKKwogICAgICAg
ICBjYXNlIEJpcXVhZFByb2Nlc3Nvcjo6QWxscGFzczoKLSAgICAgICAgY2FzZSBCaXF1YWRQcm9j
ZXNzb3I6OkhpZ2hTaGVsZjoKKyAgICAgICAgICAgIG1fYmlxdWFkLnNldEFsbHBhc3NQYXJhbXMo
bm9ybWFsaXplZEZyZXF1ZW5jeSwgdmFsdWUyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVy
Tm9kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRG
aWx0ZXJOb2RlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRl
ICJCaXF1YWRGaWx0ZXJOb2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQmlxdWFkRmls
dGVyTm9kZTo6QmlxdWFkRmlsdGVyTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGRvdWJsZSBz
YW1wbGVSYXRlKQorICAgIDogQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUoY29udGV4dCwgc2FtcGxl
UmF0ZSkKK3sKKyAgICAvLyBJbml0aWFsbHkgc2V0dXAgYXMgbG93cGFzcyBmaWx0ZXIuCisgICAg
bV9wcm9jZXNzb3IgPSBhZG9wdFB0cihuZXcgQmlxdWFkUHJvY2Vzc29yKEJpcXVhZFByb2Nlc3Nv
cjo6TG93UGFzcywgc2FtcGxlUmF0ZSwgMSwgZmFsc2UpKTsKKyAgICBiaXF1YWRQcm9jZXNzb3Io
KS0+cGFyYW1ldGVyMSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIGJpcXVhZFByb2Nlc3Nv
cigpLT5wYXJhbWV0ZXIyKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgYmlxdWFkUHJvY2Vz
c29yKCktPnBhcmFtZXRlcjMoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBzZXRUeXBlKE5v
ZGVUeXBlQmlxdWFkRmlsdGVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0Jp
cXVhZEZpbHRlck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9C
aXF1YWRGaWx0ZXJOb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9CaXF1YWRGaWx0ZXJOb2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEJpcXVhZEZpbHRlck5vZGVfaAorI2RlZmluZSBCaXF1YWRGaWx0ZXJO
b2RlX2gKKworI2luY2x1ZGUgIkF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgiCisjaW5jbHVkZSAi
QmlxdWFkUHJvY2Vzc29yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9Q
YXJhbTsKKyAgICAKK2NsYXNzIEJpcXVhZEZpbHRlck5vZGUgOiBwdWJsaWMgQXVkaW9CYXNpY1By
b2Nlc3Nvck5vZGUgeworcHVibGljOgorICAgIC8vIFRoZXNlIG11c3QgYmUgZGVmaW5lZCBhcyBp
biB0aGUgLmlkbCBmaWxlIGFuZCBtdXN0IG1hdGNoIHRob3NlIGluIHRoZSBCaXF1YWRQcm9jZXNz
b3IgY2xhc3MuCisgICAgZW51bSB7CisgICAgICAgIExPV1BBU1MgPSAwLAorICAgICAgICBISUdI
UEFTUyA9IDEsCisgICAgICAgIEJBTkRQQVNTID0gMiwKKyAgICAgICAgTE9XU0hFTEYgPSAzLAor
ICAgICAgICBISUdIU0hFTEYgPSA0LAorICAgICAgICBQRUFLSU5HID0gNSwKKyAgICAgICAgTk9U
Q0ggPSA2LAorICAgICAgICBBTExQQVNTID0gNworICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxCaXF1YWRGaWx0ZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBkb3Vi
bGUgc2FtcGxlUmF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmlxdWFk
RmlsdGVyTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7ICAgICAgCisgICAgfQorICAgIAorICAg
IHVuc2lnbmVkIHNob3J0IHR5cGUoKSB7IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+dHlwZSgp
OyB9CisgICAgdm9pZCBzZXRUeXBlKHVuc2lnbmVkIHNob3J0IHR5cGUpIHsgYmlxdWFkUHJvY2Vz
c29yKCktPnNldFR5cGUoc3RhdGljX2Nhc3Q8QmlxdWFkUHJvY2Vzc29yOjpGaWx0ZXJUeXBlPih0
eXBlKSk7IH0KKworICAgIEF1ZGlvUGFyYW0qIGZyZXF1ZW5jeSgpIHsgcmV0dXJuIGJpcXVhZFBy
b2Nlc3NvcigpLT5wYXJhbWV0ZXIxKCk7IH0KKyAgICBBdWRpb1BhcmFtKiBxKCkgeyByZXR1cm4g
YmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjIoKTsgfQorICAgIEF1ZGlvUGFyYW0qIGdhaW4o
KSB7IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMygpOyB9CisgICAgCitwcml2
YXRlOgorICAgIEJpcXVhZEZpbHRlck5vZGUoQXVkaW9Db250ZXh0KiwgZG91YmxlIHNhbXBsZVJh
dGUpOworCisgICAgQmlxdWFkUHJvY2Vzc29yKiBiaXF1YWRQcm9jZXNzb3IoKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxCaXF1YWRQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0KK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEJpcXVhZEZpbHRlck5vZGVfaApJbmRleDog
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBhdWRpbyB7Cisg
ICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAorICAgICAgICBH
ZW5lcmF0ZVRvSlMKKyAgICBdIEJpcXVhZEZpbHRlck5vZGUgOiBBdWRpb05vZGUgeworICAgICAg
ICAvLyBGaWx0ZXIgdHlwZS4KKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTE9XUEFTUyA9
IDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEhJR0hQQVNTID0gMTsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgQkFORFBBU1MgPSAyOworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBzaG9ydCBMT1dTSEVMRiA9IDM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEhJR0hT
SEVMRiA9IDQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBFQUtJTkcgPSA1OworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBOT1RDSCA9IDY7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IEFMTFBBU1MgPSA3OworCisgICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9y
dCB0eXBlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSBmcmVxdWVuY3k7
IC8vIGluIEhlcnR6CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIFE7IC8v
IFF1YWxpdHkgZmFjdG9yCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIGdh
aW47IC8vIGluIERlY2liZWxzCisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gODgwODMpCisrKyBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSwyNSBAQAogI2luY2x1ZGUgIkJpcXVhZERTUEtlcm5lbC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgCitCaXF1YWRQcm9jZXNzb3I6OkJpcXVhZFByb2Nlc3Nvcihkb3VibGUgc2Ft
cGxlUmF0ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wgYXV0b0luaXRpYWxpemUpCisg
ICAgOiBBdWRpb0RTUEtlcm5lbFByb2Nlc3NvcihzYW1wbGVSYXRlLCBudW1iZXJPZkNoYW5uZWxz
KQorICAgICwgbV90eXBlKExvd1Bhc3MpCisgICAgLCBtX3BhcmFtZXRlcjEoMCkKKyAgICAsIG1f
cGFyYW1ldGVyMigwKQorICAgICwgbV9wYXJhbWV0ZXIzKDApCisgICAgLCBtX2ZpbHRlckNvZWZm
aWNpZW50c0RpcnR5KHRydWUpCit7CisgICAgZG91YmxlIG55cXVpc3QgPSAwLjUgKiB0aGlzLT5z
YW1wbGVSYXRlKCk7CisKKyAgICAvLyBDcmVhdGUgcGFyYW1ldGVycyBmb3IgQmlxdWFkRmlsdGVy
Tm9kZS4KKyAgICBtX3BhcmFtZXRlcjEgPSBBdWRpb1BhcmFtOjpjcmVhdGUoImZyZXF1ZW5jeSIs
IDM1MC4wLCAxMC4wLCBueXF1aXN0KTsKKyAgICBtX3BhcmFtZXRlcjIgPSBBdWRpb1BhcmFtOjpj
cmVhdGUoIlEiLCAxLCAwLjAwMDEsIDEwMDAuMCk7CisgICAgbV9wYXJhbWV0ZXIzID0gQXVkaW9Q
YXJhbTo6Y3JlYXRlKCJnYWluIiwgMC4wLCAtNDAsIDQwKTsKKworICAgIGlmIChhdXRvSW5pdGlh
bGl6ZSkKKyAgICAgICAgaW5pdGlhbGl6ZSgpOworfQogCiBCaXF1YWRQcm9jZXNzb3I6OkJpcXVh
ZFByb2Nlc3NvcihGaWx0ZXJUeXBlIHR5cGUsIGRvdWJsZSBzYW1wbGVSYXRlLCBzaXplX3QgbnVt
YmVyT2ZDaGFubmVscywgYm9vbCBhdXRvSW5pdGlhbGl6ZSkKICAgICA6IEF1ZGlvRFNQS2VybmVs
UHJvY2Vzc29yKHNhbXBsZVJhdGUsIG51bWJlck9mQ2hhbm5lbHMpCkBAIC00MiwzNSArNjEsMTgg
QEAgQmlxdWFkUHJvY2Vzc29yOjpCaXF1YWRQcm9jZXNzb3IoRmlsdGVyVAogewogICAgIGRvdWJs
ZSBueXF1aXN0ID0gMC41ICogdGhpcy0+c2FtcGxlUmF0ZSgpOwogICAgIAorICAgIC8vIEhhbmRs
ZSB0aGUgZGVwcmVjYXRlZCBMb3dQYXNzMkZpbHRlck5vZGUgYW5kIEhpZ2hQYXNzMkZpbHRlck5v
ZGUuCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgLy8gSGlnaHBhc3MgYW5kIGxvd3Bhc3Mgc2hh
cmUgdGhlIHNhbWUgcGFyYW1ldGVycyBhbmQgb25seSBkaWZmZXIgaW4gZmlsdGVyIHR5cGUuCi0g
ICAgY2FzZSBMb3dQYXNzMjoKLSAgICBjYXNlIEhpZ2hQYXNzMjoKKyAgICBjYXNlIExvd1Bhc3M6
CisgICAgY2FzZSBIaWdoUGFzczoKICAgICAgICAgbV9wYXJhbWV0ZXIxID0gQXVkaW9QYXJhbTo6
Y3JlYXRlKCJmcmVxdWVuY3kiLCAzNTAuMCwgMjAuMCwgbnlxdWlzdCk7CiAgICAgICAgIG1fcGFy
YW1ldGVyMiA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgicmVzb25hbmNlIiwgMC4wLCAtMjAuMCwgMjAu
MCk7CiAgICAgICAgIG1fcGFyYW1ldGVyMyA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgidW51c2VkIiwg
MC4wLCAwLjAsIDEuMCk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBQZWFraW5nOgotICAg
ICAgICBtX3BhcmFtZXRlcjEgPSBBdWRpb1BhcmFtOjpjcmVhdGUoImZyZXF1ZW5jeSIsIDI1MDAu
MCwgMjAuMCwgbnlxdWlzdCk7Ci0gICAgICAgIG1fcGFyYW1ldGVyMiA9IEF1ZGlvUGFyYW06OmNy
ZWF0ZSgiZ2FpbiIsIDAuMCwgLTIwLjAsIDIwLjApOwotICAgICAgICBtX3BhcmFtZXRlcjMgPSBB
dWRpb1BhcmFtOjpjcmVhdGUoIlEiLCAwLjUsIDAuMCwgMTAwMC4wKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBBbGxwYXNzOgotICAgICAgICBtX3BhcmFtZXRlcjEgPSBBdWRpb1BhcmFtOjpj
cmVhdGUoImZyZXF1ZW5jeSIsIDI1MDAuMCwgMjAuMCwgbnlxdWlzdCk7Ci0gICAgICAgIG1fcGFy
YW1ldGVyMiA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgiUSIsIDAuNSwgMC4wLCAxMDAwLjApOwotICAg
ICAgICBtX3BhcmFtZXRlcjMgPSBBdWRpb1BhcmFtOjpjcmVhdGUoInVudXNlZCIsIDAuMCwgMC4w
LCAxLjApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExvd1NoZWxmOgotICAgICAgICBtX3Bh
cmFtZXRlcjEgPSBBdWRpb1BhcmFtOjpjcmVhdGUoImZyZXF1ZW5jeSIsIDgwLjAsIDIwLjAsIG55
cXVpc3QpOwotICAgICAgICBtX3BhcmFtZXRlcjIgPSBBdWRpb1BhcmFtOjpjcmVhdGUoImdhaW4i
LCAwLjAsIDAuMCwgMS4wKTsKLSAgICAgICAgbV9wYXJhbWV0ZXIzID0gQXVkaW9QYXJhbTo6Y3Jl
YXRlKCJ1bnVzZWQiLCAwLjAsIDAuMCwgMS4wKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBI
aWdoU2hlbGY6Ci0gICAgICAgIG1fcGFyYW1ldGVyMSA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgiZnJl
cXVlbmN5IiwgMTAwMDAuMCwgMjAuMCwgbnlxdWlzdCk7Ci0gICAgICAgIG1fcGFyYW1ldGVyMiA9
IEF1ZGlvUGFyYW06OmNyZWF0ZSgiZ2FpbiIsIDAuMCwgMC4wLCAxLjApOwotICAgICAgICBtX3Bh
cmFtZXRlcjMgPSBBdWRpb1BhcmFtOjpjcmVhdGUoInVudXNlZCIsIDAuMCwgMC4wLCAxLjApOwot
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICB9CiAKICAgICBpZiAoYXV0b0luaXRpYWxpemUpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaAkocmV2aXNpb24gODgwODMpCisrKyBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzks
MTUgKzM5LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEJpcXVhZFByb2Nlc3NvciA6
IHB1YmxpYyBBdWRpb0RTUEtlcm5lbFByb2Nlc3NvciB7CiBwdWJsaWM6CiAgICAgZW51bSBGaWx0
ZXJUeXBlIHsKLSAgICAgICAgTG93UGFzczIsCi0gICAgICAgIEhpZ2hQYXNzMiwKLSAgICAgICAg
UGVha2luZywKLSAgICAgICAgQWxscGFzcywKLSAgICAgICAgTG93U2hlbGYsCi0gICAgICAgIEhp
Z2hTaGVsZgorICAgICAgICBMb3dQYXNzID0gMCwKKyAgICAgICAgSGlnaFBhc3MgPSAxLAorICAg
ICAgICBCYW5kUGFzcyA9IDIsCisgICAgICAgIExvd1NoZWxmID0gMywKKyAgICAgICAgSGlnaFNo
ZWxmID0gNCwKKyAgICAgICAgUGVha2luZyA9IDUsCisgICAgICAgIE5vdGNoID0gNiwKKyAgICAg
ICAgQWxscGFzcyA9IDcKICAgICB9OwotICAgIAorCisgICAgQmlxdWFkUHJvY2Vzc29yKGRvdWJs
ZSBzYW1wbGVSYXRlLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscywgYm9vbCBhdXRvSW5pdGlhbGl6
ZSk7CisKKyAgICAvLyBPbGQgY29uc3RydWN0b3IgdXNlZCBieSBkZXByZWNhdGVkIExvd1Bhc3My
RmlsdGVyTm9kZSBhbmQgSGlnaFBhc3MyRmlsdGVyTm9kZQogICAgIEJpcXVhZFByb2Nlc3NvcihG
aWx0ZXJUeXBlLCBkb3VibGUgc2FtcGxlUmF0ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJv
b2wgYXV0b0luaXRpYWxpemUgPSB0cnVlKTsKKwogICAgIHZpcnR1YWwgfkJpcXVhZFByb2Nlc3Nv
cigpOwogICAgIAogICAgIHZpcnR1YWwgUGFzc093blB0cjxBdWRpb0RTUEtlcm5lbD4gY3JlYXRl
S2VybmVsKCk7CkBAIC02MSw2ICs2Nyw3IEBAIHB1YmxpYzoKICAgICBBdWRpb1BhcmFtKiBwYXJh
bWV0ZXIzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXIzLmdldCgpOyB9CiAKICAgICBGaWx0ZXJUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICB2b2lkIHNldFR5cGUoRmlsdGVy
VHlwZSB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7IH0KIAogcHJpdmF0ZToKICAgICBGaWx0ZXJUeXBl
IG1fdHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5v
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0hpZ2hQYXNzMkZp
bHRlck5vZGUuY3BwCShyZXZpc2lvbiA4ODA4MykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0hpZ2hQYXNzMkZpbHRlck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIEhpZ2hQYXNzMkZpbHRlck5vZGU6OkhpZ2hQYXNzMkZpbHRl
ck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBkb3VibGUgc2FtcGxlUmF0ZSkKICAgICA6IEF1
ZGlvQmFzaWNQcm9jZXNzb3JOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCiB7Ci0gICAgbV9wcm9j
ZXNzb3IgPSBhZG9wdFB0cihuZXcgQmlxdWFkUHJvY2Vzc29yKEJpcXVhZFByb2Nlc3Nvcjo6SGln
aFBhc3MyLCBzYW1wbGVSYXRlLCAxLCBmYWxzZSkpOworICAgIG1fcHJvY2Vzc29yID0gYWRvcHRQ
dHIobmV3IEJpcXVhZFByb2Nlc3NvcihCaXF1YWRQcm9jZXNzb3I6OkhpZ2hQYXNzLCBzYW1wbGVS
YXRlLCAxLCBmYWxzZSkpOwogICAgIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIxKCktPnNl
dENvbnRleHQoY29udGV4dCk7CiAgICAgYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjIoKS0+
c2V0Q29udGV4dChjb250ZXh0KTsKICAgICBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMygp
LT5zZXRDb250ZXh0KGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTG93
UGFzczJGaWx0ZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9Mb3dQYXNzMkZpbHRlck5vZGUuY3BwCShyZXZpc2lvbiA4ODA4MykKKysrIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogTG93UGFzczJGaWx0ZXJOb2RlOjpMb3dQ
YXNzMkZpbHRlck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBkb3VibGUgc2FtcGxlUmF0ZSkK
ICAgICA6IEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCiB7Ci0g
ICAgbV9wcm9jZXNzb3IgPSBhZG9wdFB0cihuZXcgQmlxdWFkUHJvY2Vzc29yKEJpcXVhZFByb2Nl
c3Nvcjo6TG93UGFzczIsIHNhbXBsZVJhdGUsIDEsIGZhbHNlKSk7CisgICAgbV9wcm9jZXNzb3Ig
PSBhZG9wdFB0cihuZXcgQmlxdWFkUHJvY2Vzc29yKEJpcXVhZFByb2Nlc3Nvcjo6TG93UGFzcywg
c2FtcGxlUmF0ZSwgMSwgZmFsc2UpKTsKICAgICBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVy
MSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwogICAgIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0
ZXIyKCktPnNldENvbnRleHQoY29udGV4dCk7CiAgICAgYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFt
ZXRlcjMoKS0+c2V0Q29udGV4dChjb250ZXh0KTsK
</data>
<flag name="review"
          id="89618"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>